From 8cfc7e90e3c138603fef2aadaabaa38bd826fc60 Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 17 Nov 2014 20:54:30 +0100 Subject: [PATCH 01/33] added CMakeLists.txt for cross-platform builds minor code changes to be standard-conform --- CMakeLists.txt | 64 +++++++++++++++++++ Examples/CustomDataSource/Main.cpp | 3 +- Examples/PerformanceTest/Main.cpp | 3 +- Examples/SimpleDemo/Main.cpp | 5 +- Examples/SymbolResolver/Main.cpp | 7 +- .../VXInstructionFormatter.cpp | 3 +- 6 files changed, 73 insertions(+), 12 deletions(-) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d424d6f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,64 @@ +cmake_minimum_required(VERSION 2.8.12) + +project(VerteronDisassemblerEngine) + +option(BUILD_EXAMPLES "Build examples" TRUE) + +if (NOT CONFIGURED_ONCE) + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR + "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(compiler_specific "-std=c++0x -Werror") + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + set(compiler_specific "/WX /D_CRT_SECURE_NO_WARNINGS") + endif () + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${compiler_specific}" + CACHE STRING "Flags used by the compiler during all build types." FORCE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${compiler_specific}" + CACHE STRING "Flags used by the compiler during all build types." FORCE) +endif () + +# Library +set(vde_headers + "VerteronDisassemblerEngine/VXDisassembler.h" + "VerteronDisassemblerEngine/VXDisassemblerTypes.h" + "VerteronDisassemblerEngine/VXDisassemblerUtils.h" + "VerteronDisassemblerEngine/VXInstructionDecoder.h" + "VerteronDisassemblerEngine/VXInstructionFormatter.h" + "VerteronDisassemblerEngine/VXOpcodeTable.h") +set(vde_sources + "VerteronDisassemblerEngine/VXDisassemblerUtils.cpp" + "VerteronDisassemblerEngine/VXInstructionFormatter.cpp" + "VerteronDisassemblerEngine/VXOpcodeTable.cpp" + "VerteronDisassemblerEngine/VXInstructionDecoder.cpp") + +add_library("VerteronDisassemblerEngine" + ${vde_headers} + ${vde_sources}) + +# Examples +if (BUILD_EXAMPLES) + include_directories("VerteronDisassemblerEngine") + + add_executable("CustomDataSource" + "Examples/CustomDataSource/Main.cpp") + target_link_libraries("CustomDataSource" "VerteronDisassemblerEngine") + + add_executable("PerformanceTest" + "Examples/PerformanceTest/Main.cpp") + target_link_libraries("PerformanceTest" "VerteronDisassemblerEngine") + + add_executable("SimpleDemo" + "Examples/SimpleDemo/Main.cpp") + target_link_libraries("SimpleDemo" "VerteronDisassemblerEngine") + + if (WIN32) + add_executable("SymbolResolver" + "Examples/SymbolResolver/Main.cpp") + target_link_libraries("SymbolResolver" "VerteronDisassemblerEngine") + else () + message(STATUS "Example 'SymbolResolver' not compatible with platform, ignoring.") + endif () +endif () + +set(CONFIGURED_ONCE TRUE CACHE INTERNAL "CMake has configured at least once.") \ No newline at end of file diff --git a/Examples/CustomDataSource/Main.cpp b/Examples/CustomDataSource/Main.cpp index afe5a5f..a08a382 100644 --- a/Examples/CustomDataSource/Main.cpp +++ b/Examples/CustomDataSource/Main.cpp @@ -29,9 +29,8 @@ * SOFTWARE. **************************************************************************************************/ -#include -int _tmain(int argc, _TCHAR* argv[]) +int main(int argc, char* argv[]) { // TODO: return 0; diff --git a/Examples/PerformanceTest/Main.cpp b/Examples/PerformanceTest/Main.cpp index afe5a5f..a08a382 100644 --- a/Examples/PerformanceTest/Main.cpp +++ b/Examples/PerformanceTest/Main.cpp @@ -29,9 +29,8 @@ * SOFTWARE. **************************************************************************************************/ -#include -int _tmain(int argc, _TCHAR* argv[]) +int main(int argc, char* argv[]) { // TODO: return 0; diff --git a/Examples/SimpleDemo/Main.cpp b/Examples/SimpleDemo/Main.cpp index 3a60d40..cdc582d 100644 --- a/Examples/SimpleDemo/Main.cpp +++ b/Examples/SimpleDemo/Main.cpp @@ -29,15 +29,14 @@ * SOFTWARE. **************************************************************************************************/ -#include #include #include #include -#include "VXDisassembler.h" +#include using namespace Verteron; -int _tmain(int argc, _TCHAR* argv[]) +int main(int argc, char* argv[]) { uint8_t data32[] = { diff --git a/Examples/SymbolResolver/Main.cpp b/Examples/SymbolResolver/Main.cpp index ee8e299..8e7cdc3 100644 --- a/Examples/SymbolResolver/Main.cpp +++ b/Examples/SymbolResolver/Main.cpp @@ -29,19 +29,18 @@ * SOFTWARE. **************************************************************************************************/ -#include #include #include #include -#include "VXDisassembler.h" +#include #include using namespace Verteron; -int _tmain(int argc, _TCHAR* argv[]) +int main(int argc, char* argv[]) { // Find module base in memory - void *moduleBase = GetModuleHandle(L"kernel32.dll"); + void *moduleBase = GetModuleHandle("kernel32.dll"); uintptr_t baseAddress = reinterpret_cast(moduleBase); // Parse PE headers PIMAGE_DOS_HEADER dosHeader = static_cast(moduleBase); diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.cpp b/VerteronDisassemblerEngine/VXInstructionFormatter.cpp index 94df4ec..c139d59 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.cpp +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.cpp @@ -33,6 +33,7 @@ #include "VXDisassemblerUtils.h" #include #include +#include namespace Verteron { @@ -215,7 +216,7 @@ char const* VXBaseInstructionFormatter::outputString() // Write the formatted text to the output buffer assert((bufLen - offset) > 0); strLen = - vsnprintf_s(&m_outputBuffer[offset], bufLen - offset, _TRUNCATE, format, arguments); + std::vsnprintf(&m_outputBuffer[offset], bufLen - offset, format, arguments); } while (strLen < 0); // Increase the string length m_outputStringLen = offset + strLen + 1; From 60f05ef1ec161771c34a6bc224a1691993631865 Mon Sep 17 00:00:00 2001 From: Ende! Date: Wed, 4 Feb 2015 22:08:16 +0100 Subject: [PATCH 02/33] cleaned up some includes --- VerteronDisassemblerEngine/VXDisassemblerUtils.cpp | 2 +- VerteronDisassemblerEngine/VXInstructionDecoder.cpp | 2 +- VerteronDisassemblerEngine/VXOpcodeTable.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/VerteronDisassemblerEngine/VXDisassemblerUtils.cpp b/VerteronDisassemblerEngine/VXDisassemblerUtils.cpp index 8e7fa65..f8d640f 100644 --- a/VerteronDisassemblerEngine/VXDisassemblerUtils.cpp +++ b/VerteronDisassemblerEngine/VXDisassemblerUtils.cpp @@ -30,7 +30,7 @@ **************************************************************************************************/ #include "VXDisassemblerUtils.h" -#include +#include namespace Verteron { diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.cpp b/VerteronDisassemblerEngine/VXInstructionDecoder.cpp index 1534af1..d6537d8 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.cpp +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.cpp @@ -30,7 +30,7 @@ **************************************************************************************************/ #include "VXInstructionDecoder.h" -#include +#include namespace Verteron { diff --git a/VerteronDisassemblerEngine/VXOpcodeTable.h b/VerteronDisassemblerEngine/VXOpcodeTable.h index 9824d37..bf13060 100644 --- a/VerteronDisassemblerEngine/VXOpcodeTable.h +++ b/VerteronDisassemblerEngine/VXOpcodeTable.h @@ -31,8 +31,8 @@ **************************************************************************************************/ #pragma once -#include "stdint.h" -#include "assert.h" +#include +#include namespace Verteron { From ead4f07fae9858ece0aa7c2548ddd5f15c729537 Mon Sep 17 00:00:00 2001 From: Ende! Date: Thu, 5 Feb 2015 12:39:16 +0100 Subject: [PATCH 03/33] fixed build on apple-clang --- VerteronDisassemblerEngine/VXInstructionFormatter.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.cpp b/VerteronDisassemblerEngine/VXInstructionFormatter.cpp index c139d59..b8ac894 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.cpp +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.cpp @@ -34,6 +34,8 @@ #include #include #include +#include +#include namespace Verteron { @@ -622,7 +624,7 @@ const char* VXExactSymbolResolver::resolveSymbol(const VXInstructionInfo &info, uint64_t &offset) { std::unordered_map::const_iterator iterator = m_symbolMap.find(address); - if (iterator != m_symbolMap.end()) + if (iterator != m_symbolMap.cend()) { offset = 0; return iterator->second.c_str(); From 65d91d1b075b3c0fd959f1279405667833f30945 Mon Sep 17 00:00:00 2001 From: Ende! Date: Fri, 6 Feb 2015 02:28:51 +0100 Subject: [PATCH 04/33] added C bindings --- Bindings/C/VXDisassemblerC.h | 43 + Bindings/C/VXDisassemblerTypesC.h | 549 ++++++ Bindings/C/VXDisassemblerUtilsC.cpp | 44 + Bindings/C/VXDisassemblerUtilsC.h | 58 + Bindings/C/VXInstructionDecoderC.cpp | 259 +++ Bindings/C/VXInstructionDecoderC.h | 155 ++ Bindings/C/VXInstructionFormatterC.cpp | 244 +++ Bindings/C/VXInstructionFormatterC.h | 114 ++ Bindings/C/VXOpcodeTableC.cpp | 35 + Bindings/C/VXOpcodeTableC.h | 1505 +++++++++++++++++ CMakeLists.txt | 39 +- Examples/CBindings/test.c | 36 + .../VXDisassemblerTypes.h | 4 +- .../VXInstructionDecoder.h | 6 +- 14 files changed, 3075 insertions(+), 16 deletions(-) create mode 100644 Bindings/C/VXDisassemblerC.h create mode 100644 Bindings/C/VXDisassemblerTypesC.h create mode 100644 Bindings/C/VXDisassemblerUtilsC.cpp create mode 100644 Bindings/C/VXDisassemblerUtilsC.h create mode 100644 Bindings/C/VXInstructionDecoderC.cpp create mode 100644 Bindings/C/VXInstructionDecoderC.h create mode 100644 Bindings/C/VXInstructionFormatterC.cpp create mode 100644 Bindings/C/VXInstructionFormatterC.h create mode 100644 Bindings/C/VXOpcodeTableC.cpp create mode 100644 Bindings/C/VXOpcodeTableC.h create mode 100644 Examples/CBindings/test.c diff --git a/Bindings/C/VXDisassemblerC.h b/Bindings/C/VXDisassemblerC.h new file mode 100644 index 0000000..57cf832 --- /dev/null +++ b/Bindings/C/VXDisassemblerC.h @@ -0,0 +1,43 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + + **************************************************************************************************/ + +/* NOTE: fully ported to C */ + +#ifndef _VDE_VXDISASSEMBLERC_H_ +#define _VDE_VXDISASSEMBLERC_H_ + +#include "VXDisassemblerTypes.h" +#include "VXInstructionDecoder.h" +#include "VXInstructionFormatter.h" +#include "VXDisassemblerUtils.h" + +#endif /* _VDE_VXDISASSEMBLERC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXDisassemblerTypesC.h b/Bindings/C/VXDisassemblerTypesC.h new file mode 100644 index 0000000..b7fcd75 --- /dev/null +++ b/Bindings/C/VXDisassemblerTypesC.h @@ -0,0 +1,549 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +/* NOTE: fully ported to C */ + +#ifndef _VDE_VXDISASSEMBLERTYPESC_H_ +#define _VDE_VXDISASSEMBLERTYPESC_H_ + +#include +#include "VXOpcodeTableC.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** + * @brief Values that represent additional flags of a decoded instruction. + */ +typedef enum _VXInstructionFlags /* : uint32_t */ +{ + IF_NONE = 0x00000000, + /** + * @brief The instruction was decoded in 16 bit disassembler mode. + */ + IF_DISASSEMBLER_MODE_16 = 0x00000001, + /** + * @brief The instruction was decoded in 32 bit disassembler mode. + */ + IF_DISASSEMBLER_MODE_32 = 0x00000002, + /** + * @brief The instruction was decoded in 64 bit disassembler mode. + */ + IF_DISASSEMBLER_MODE_64 = 0x00000004, + /** + * @brief The instruction has a segment prefix (0x26, 0x2E, 0x36, 0x3E, 0x64, 0x65). + */ + IF_PREFIX_SEGMENT = 0x00000008, + /** + * @brief The instruction has a lock prefix (0xF0). + */ + IF_PREFIX_LOCK = 0x00000010, + /** + * @brief The instruction has a repne prefix (0xF2). + */ + IF_PREFIX_REPNE = 0x00000020, + /** + * @brief The instruction has a rep prefix (0xF3). + */ + IF_PREFIX_REP = 0x00000040, + /** + * @brief The instruction has an operand size prefix (0x66). + */ + IF_PREFIX_OPERAND_SIZE = 0x00000080, + /** + * @brief The instruction has an address size prefix (0x67). + */ + IF_PREFIX_ADDRESS_SIZE = 0x00000100, + /** + * @brief The instruction has a rex prefix (0x40 - 0x4F). + */ + IF_PREFIX_REX = 0x00000200, + /** + * @brief The instruction has a vex prefix (0xC4 or 0xC5). + */ + IF_PREFIX_VEX = 0x00000400, + /** + * @brief The instruction has a modrm byte. + */ + IF_MODRM = 0x00000800, + /** + * @brief The instruction has a sib byte. + */ + IF_SIB = 0x00001000, + /** + * @brief The instruction has an operand with a relative address. + */ + IF_RELATIVE = 0x00002000, + /** + * @brief An error occured while decoding the instruction. + */ + IF_ERROR_MASK = 0xFFF00000, + /** + * @brief End of input reached while decoding the instruction. + */ + IF_ERROR_END_OF_INPUT = 0x00100000, + /** + * @brief The instruction length has exceeded the maximum of 15 bytes. + */ + IF_ERROR_LENGTH = 0x00200000, + /** + * @brief The instruction is invalid. + */ + IF_ERROR_INVALID = 0x00400000, + /** + * @brief The instruction is invalid in 64 bit mode. + */ + IF_ERROR_INVALID_64 = 0x00800000, + /** + * @brief An error occured while decoding the instruction operands. + */ + IF_ERROR_OPERAND = 0x01000000, + + IF_FORCE_DWORD = 0x7FFFFFFF +} VXInstructionFlags; + +/** + * @brief Values that represent a cpu register. + */ +typedef enum _VXRegister /* : uint16_t */ +{ + REG_NONE, + /* 8 bit general purpose registers */ + REG_AL, REG_CL, REG_DL, REG_BL, + REG_AH, REG_CH, REG_DH, REG_BH, + REG_SPL, REG_BPL, REG_SIL, REG_DIL, + REG_R8B, REG_R9B, REG_R10B, REG_R11B, + REG_R12B, REG_R13B, REG_R14B, REG_R15B, + /* 16 bit general purpose registers */ + REG_AX, REG_CX, REG_DX, REG_BX, + REG_SP, REG_BP, REG_SI, REG_DI, + REG_R8W, REG_R9W, REG_R10W, REG_R11W, + REG_R12W, REG_R13W, REG_R14W, REG_R15W, + /* 32 bit general purpose registers */ + REG_EAX, REG_ECX, REG_EDX, REG_EBX, + REG_ESP, REG_EBP, REG_ESI, REG_EDI, + REG_R8D, REG_R9D, REG_R10D, REG_R11D, + REG_R12D, REG_R13D, REG_R14D, REG_R15D, + /* 64 bit general purpose registers */ + REG_RAX, REG_RCX, REG_RDX, REG_RBX, + REG_RSP, REG_RBP, REG_RSI, REG_RDI, + REG_R8, REG_R9, REG_R10, REG_R11, + REG_R12, REG_R13, REG_R14, REG_R15, + /* segment registers */ + REG_ES, REG_CS, REG_SS, + REG_DS, REG_FS, REG_GS, + /* control registers */ + REG_CR0, REG_CR1, REG_CR2, REG_CR3, + REG_CR4, REG_CR5, REG_CR6, REG_CR7, + REG_CR8, REG_CR9, REG_CR10, REG_CR11, + REG_CR12, REG_CR13, REG_CR14, REG_CR15, + /* debug registers */ + REG_DR0, REG_DR1, REG_DR2, REG_DR3, + REG_DR4, REG_DR5, REG_DR6, REG_DR7, + REG_DR8, REG_DR9, REG_DR10, REG_DR11, + REG_DR12, REG_DR13, REG_DR14, REG_DR15, + /* mmx registers */ + REG_MM0, REG_MM1, REG_MM2, REG_MM3, + REG_MM4, REG_MM5, REG_MM6, REG_MM7, + /* x87 registers */ + REG_ST0, REG_ST1, REG_ST2, REG_ST3, + REG_ST4, REG_ST5, REG_ST6, REG_ST7, + /* extended multimedia registers */ + REG_XMM0, REG_XMM1, REG_XMM2, REG_XMM3, + REG_XMM4, REG_XMM5, REG_XMM6, REG_XMM7, + REG_XMM8, REG_XMM9, REG_XMM10, REG_XMM11, + REG_XMM12, REG_XMM13, REG_XMM14, REG_XMM15, + /* 256 bit multimedia registers */ + REG_YMM0, REG_YMM1, REG_YMM2, REG_YMM3, + REG_YMM4, REG_YMM5, REG_YMM6, REG_YMM7, + REG_YMM8, REG_YMM9, REG_YMM10, REG_YMM11, + REG_YMM12, REG_YMM13, REG_YMM14, YMM15, + /* instruction pointer register */ + REG_RIP, + + REG_FORCE_WORD = 0x7FFF +} VXRegister; + +/** + * @brief Values that represent the type of a decoded operand. + */ +typedef enum _VXOperandType /*: uint8_t*/ +{ + /** + * @brief The operand is not used. + */ + OPTYPE_NONE, + /** + * @brief The operand is a register operand. + */ + OPTYPE_REGISTER, + /** + * @brief The operand is a memory operand. + */ + OPTYPE_MEMORY, + /** + * @brief The operand is a pointer operand. + */ + OPTYPE_POINTER, + /** + * @brief The operand is an immediate operand. + */ + OPTYPE_IMMEDIATE, + /** + * @brief The operand is a relative immediate operand. + */ + OPTYPE_REL_IMMEDIATE, + /** + * @brief The operand is a constant value. + */ + OPTYPE_CONSTANT +} VXOperandType; + +/** + * @brief Values that represent the operand access mode. + */ +typedef enum _VXOperandAccessMode /* : uint8_t */ +{ + OPACCESSMODE_NA, + /** + * @brief The operand is accessed in read-only mode. + */ + OPACCESSMODE_READ, + /** + * @brief The operand is accessed in write mode. + */ + OPACCESSMODE_WRITE, + /** + * @brief The operand is accessed in read-write mode. + */ + OPACCESSMODE_READWRITE +} VXOperandAccessMode; + +/** + * @brief This struct holds information about a decoded operand. + */ +typedef struct _VXOperandInfo +{ + /** + * @brief The type of the operand. + * @see VXOperandType + */ + uint8_t type; + /** + * @brief The size of the operand. + */ + uint16_t size; + /** + * @brief The operand access mode. + * @see VXOperandAccessMode + */ + uint8_t access_mode; + /** + * @brief The base register. + * @see VXRegister + */ + uint16_t base; + /** + * @brief The index register. + * @see VXRegister + */ + uint16_t index; + /** + * @brief The scale factor. + */ + uint8_t scale; + /** + * @brief The lvalue offset. If the @c offset is zero and the operand @c type is not + * @c CONSTANT, no lvalue is present. + */ + uint8_t offset; + /** + * @brief Signals, if the lval is signed. + */ + bool signed_lval; + /** + * @brief The lvalue. + */ + union { + int8_t sbyte; + uint8_t ubyte; + int16_t sword; + uint16_t uword; + int32_t sdword; + uint32_t udword; + int64_t sqword; + uint64_t uqword; + struct { + uint16_t seg; + uint32_t off; + } ptr; + } lval; +} VXOperandInfo; + +/** + * @brief This struct holds information about a decoded instruction. + */ +typedef struct _VXInstructionInfo +{ + /** + * @brief The instruction flags. + */ + uint32_t flags; + /** + * @brief The instruction mnemonic. + * @see VXInstructionMnemonic + */ + uint16_t mnemonic; + /** + * @brief The total length of the instruction. + */ + uint8_t length; + /** + * @brief Contains all bytes of the instruction. + */ + uint8_t data[15]; + /** + * @brief The length of the instruction opcodes. + */ + uint8_t opcode_length; + /** + * @brief The instruction opcodes. + */ + uint8_t opcode[3]; + /** + * @brief The operand mode. + */ + uint8_t operand_mode; + /** + * @brief The address mode. + */ + uint8_t address_mode; + /** + * @brief The decoded operands. + */ + VXOperandInfo operand[4]; + /** + * @brief The segment register. This value will default to @c NONE, if no segment register + * prefix is present. + * @see VXRegister + */ + uint16_t segment; + /** + * @brief The rex prefix byte. + */ + uint8_t rex; + /** + * @brief When 1, a 64-bit operand size is used. Otherwise, when 0, the default operand size + * is used. + */ + uint8_t rex_w; + /** + * @brief This 1-bit value is an extension to the MODRM.reg field. + */ + uint8_t rex_r; + /** + * @brief This 1-bit value is an extension to the SIB.index field. + */ + uint8_t rex_x; + /** + * @brief This 1-bit value is an extension to the MODRM.rm field or the SIB.base field. + */ + uint8_t rex_b; + /** + * @brief The modrm byte. + */ + uint8_t modrm; + /** + * @brief The modrm modus bits. When this field is b11, then register-direct addressing mode + * is used; otherwise register-indirect addressing mode is used. + */ + uint8_t modrm_mod; + /** + * @brief The modrm register bits. The REX.R, VEX.~R or XOP.~R field can extend this field + * with 1 most-significant bit to 4 bits total. + */ + uint8_t modrm_reg; + /** + * @brief The extended modrm register bits. If the instruction definition does not have the + * @c IDF_ACCEPTS_REXR flag set, this value defaults to the normal @c modrm_reg + * field. + */ + uint8_t modrm_reg_ext; + /** + * @brief The modrm register/memory bits. Specifies a direct or indirect register operand, + * optionally with a displacement. The REX.B, VEX.~B or XOP.~B field can extend this + * field with 1 most-significant bit to 4 bits total. + */ + uint8_t modrm_rm; + /** + * @brief The extended modrm register/memory bits. If the instruction definition does not + * have the @c IDF_ACCEPTS_REXB flag set, this value defaults to the normal + * @c modrm_rm field. + */ + uint8_t modrm_rm_ext; + /** + * @brief The sib byte. + */ + uint8_t sib; + /** + * @brief This field indicates the scaling factor of SIB.index. + */ + uint8_t sib_scale; + /** + * @brief The index register to use. The REX.X, VEX.~X or XOP.~X field can extend this field + * with 1 most-significant bit to 4 bits total. + */ + uint8_t sib_index; + /** + * @brief The extended index register. If the instruction definition does not have the + * @c IDF_ACCEPTS_REXX flag set, this value defaults to the normal @c sib_index + * field. + */ + uint8_t sib_index_ext; + /** + * @brief The base register to use. The REX.B, VEX.~B or XOP.~B field can extend this field + * with 1 most-significant bit to 4 bits total. + */ + uint8_t sib_base; + /** + * @brief The extended base register. If the instruction definition does not have the + * @c IDF_ACCEPTS_REXB flag set, this value defaults to the normal @c sib_index + * field. + */ + uint8_t sib_base_ext; + /** + * @brief The primary vex prefix byte. + */ + uint8_t vex_op; + /** + * @brief The second vex prefix byte. + */ + uint8_t vex_b1; + /** + * @brief The third vex prefix byte. + */ + uint8_t vex_b2; + /** + * @brief This 1-bit value is an 'inverted' extension to the MODRM.reg field. The inverse of + * REX.R. + */ + uint8_t vex_r; + /** + * @brief This 1-bit value is an 'inverted' extension to the SIB.index field. The inverse of + * REX.X. + */ + uint8_t vex_x; + /** + * @brief This 1-bit value is an 'inverted' extension to the MODRM.rm field or the SIB.base + * field. The inverse of REX.B. + */ + uint8_t vex_b; + /** + * @brief Specifies the opcode map to use. + * 00 = 0x0F + * 01 = 0x0F 0x38 + * 02 = 0x0F 0x3A + */ + uint8_t vex_m_mmmm; + /** + * @brief For integer instructions: when 1, a 64-bit operand size is used; otherwise, + * when 0, the default operand size is used (equivalent with REX.W). For non-integer + * instructions, this bit is a general opcode extension bit. + */ + uint8_t vex_w; + /** + * @brief An additional operand for the instruction. The value of the XMM or YMM register + * is 'inverted'. + */ + uint8_t vex_vvvv; + /** + * @brief When 0, a 128-bit vector lengh is used. Otherwise, when 1, a 256-bit vector length + * is used. + */ + uint8_t vex_l; + /** + * @brief Specifies an implied mandatory prefix for the opcode. + * 00 = none + * 01 = 0x66 + * 10 = 0xF3 + * 11 = 0xF2 + */ + uint8_t vex_pp; + /** + * @brief The effectively used REX/VEX.w value. If the instruction definition does not have + * the @c IDF_ACCEPTS_REXW flag set, this value defaults to zero. + */ + uint8_t eff_rexvex_w; + /** + * @brief The effectively used REX/VEX.r value. If the instruction definition does not have + * the @c IDF_ACCEPTS_REXR flag set, this value defaults to zero. + */ + uint8_t eff_rexvex_r; + /** + * @brief The effectively used REX/VEX.x value. If the instruction definition does not have + * the @c IDF_ACCEPTS_REXX flag set, this value defaults to zero. + */ + uint8_t eff_rexvex_x; + /** + * @brief The effectively used REX/VEX.b value. If the instruction definition does not have + * the @c IDF_ACCEPTS_REXB flag set, this value defaults to zero. + */ + uint8_t eff_rexvex_b; + /** + * @brief The effectively used VEX.l value. If the instruction definition does not have + * the @c IDF_ACCEPTS_VEXL flag set, this value defaults to zero. + */ + uint8_t eff_vex_l; + /** + * @brief The instruction definition. + */ + const VXInstructionDefinition *instrDefinition; + /** + * @brief The instruction address points to the current instruction (relative to the + * initial instruction pointer). + */ + uint64_t instrAddress; + /** + * @brief The instruction pointer points to the address of the next instruction (relative + * to the initial instruction pointer). + * This field is used to properly format relative instructions. + */ + uint64_t instrPointer; +} VXInstructionInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _VDE_VXDISASSEMBLERTYPESC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXDisassemblerUtilsC.cpp b/Bindings/C/VXDisassemblerUtilsC.cpp new file mode 100644 index 0000000..3a68b6e --- /dev/null +++ b/Bindings/C/VXDisassemblerUtilsC.cpp @@ -0,0 +1,44 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : athre0z + Modifications : + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#include "VXDisassemblerUtilsC.h" +#include "VXDisassemblerUtils.h" + +static_assert(sizeof(VXInstructionInfo) == sizeof(Verteron::VXInstructionInfo), "struct rekt"); +static_assert(sizeof(VXOperandInfo) == sizeof(Verteron::VXOperandInfo), "struct rekt"); + +uint64_t VDECalcAbsoluteTarget(const VXInstructionInfo *info, const VXOperandInfo *operand) +{ + return Verteron::VDECalcAbsoluteTarget( + *reinterpret_cast(info), + *reinterpret_cast(operand)); +} \ No newline at end of file diff --git a/Bindings/C/VXDisassemblerUtilsC.h b/Bindings/C/VXDisassemblerUtilsC.h new file mode 100644 index 0000000..b4a78ef --- /dev/null +++ b/Bindings/C/VXDisassemblerUtilsC.h @@ -0,0 +1,58 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +/* NOTE: fully ported to C */ + +#ifndef _VDE_VXDISASSEMBLERUTILSC_H_ +#define _VDE_VXDISASSEMBLERUTILSC_H_ + +#include +#include "VXDisassemblerTypesC.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** + * @brief Calculates the absolute target address of a relative instruction operand. + * @param info The instruction info. + * @param operand The operand. + * @return The absolute target address. + */ +uint64_t VDECalcAbsoluteTarget(const VXInstructionInfo *info, const VXOperandInfo *operand); + +#ifdef __cplusplus +} +#endif + +#endif /* _VDE_VXDISASSEMBLERUTILSC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionDecoderC.cpp b/Bindings/C/VXInstructionDecoderC.cpp new file mode 100644 index 0000000..94aa7b1 --- /dev/null +++ b/Bindings/C/VXInstructionDecoderC.cpp @@ -0,0 +1,259 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : athre0z + Modifications : + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#include "VXInstructionDecoderC.h" +#include "VXInstructionDecoder.h" +#include "VXDisassemblerTypes.h" + +/* Helpers ===================================================================================== */ + +namespace +{ + +inline Verteron::VXBaseDataSource* VXBaseDataSource_CppPtr( + VXBaseDataSourceContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Verteron::VXBaseDataSource* VXBaseDataSource_CppPtr( + const VXBaseDataSourceContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline VXBaseDataSourceContext* VXBaseDataSource_CPtr( + Verteron::VXBaseDataSource *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const VXBaseDataSourceContext* VXBaseDataSource_CPtr( + const Verteron::VXBaseDataSource *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Verteron::VXInstructionInfo* VXInstructionInfo_CppPtr( + VXInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Verteron::VXInstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline const Verteron::VXInstructionInfo* VXInstructionInfo_CppPtr( + const VXInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Verteron::VXInstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline VXInstructionDecoderContext* VXInstructionDecoder_CPtr( + Verteron::VXInstructionDecoder *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const VXInstructionDecoderContext* VXInstructionDecoder_CPtr( + const Verteron::VXInstructionDecoder *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Verteron::VXInstructionDecoder* VXInstructionDecoder_CppPtr( + VXInstructionDecoderContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Verteron::VXInstructionDecoder* VXInstructionDecoder_CppPtr( + const VXInstructionDecoderContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline Verteron::VXDisassemblerMode VXDisassemblerMode_CppRepr( + VXDisassemblerMode val) +{ + return static_cast(val); +} + +inline VXDisassemblerMode VXDisassemblerMode_CRepr( + Verteron::VXDisassemblerMode val) +{ + return static_cast(val); +} + +inline Verteron::VXInstructionSetVendor VXInstructionSetVendor_CppRepr( + VXInstructionSetVendor val) +{ + return static_cast(val); +} + +inline VXInstructionSetVendor VXInstructionSetVendor_CRepr( + Verteron::VXInstructionSetVendor val) +{ + return static_cast(val); +} + +} + +/* VXBaseDataSource ============================================================================ */ + +void VXBaseDataSource_Release(VXBaseDataSourceContext *ctx) +{ + delete VXBaseDataSource_CppPtr(ctx); +} + +uint8_t VXBaseDataSource_InputPeek(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) +{ + return VXBaseDataSource_CppPtr(ctx)->inputPeek(*VXInstructionInfo_CppPtr(info)); +} + +uint8_t VXBaseDataSource_InputNext(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) +{ + return VXBaseDataSource_CppPtr(ctx)->inputNext(*VXInstructionInfo_CppPtr(info)); +} + +uint8_t VXBaseDataSource_InputCurrent(const VXBaseDataSourceContext *ctx) +{ + return VXBaseDataSource_CppPtr(ctx)->inputCurrent(); +} + +bool VXBaseDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx) +{ + return VXBaseDataSource_CppPtr(ctx)->isEndOfInput(); +} + +uint64_t VXBaseDataSource_GetPosition(const VXBaseDataSourceContext *ctx) +{ + return VXBaseDataSource_CppPtr(ctx)->getPosition(); +} + +bool VXBaseDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position) +{ + return VXBaseDataSource_CppPtr(ctx)->setPosition(position); +} + +/* VXMemoryDataSource ========================================================================== */ + +VXBaseDataSourceContext* VXMemoryDataSource_Create(const void* buffer, size_t bufferLen) +{ + return reinterpret_cast( + new Verteron::VXMemoryDataSource(buffer, bufferLen)); +} + +/* VXInstructionDecoder ======================================================================== */ + +VXInstructionDecoderContext* VXInstructionDecoder_Create() +{ + return reinterpret_cast(new Verteron::VXInstructionDecoder); +} + +VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( + VXBaseDataSourceContext *input, + VXDisassemblerMode disassemblerMode, + VXInstructionSetVendor preferredVendor, + uint64_t instructionPointer) +{ + return VXInstructionDecoder_CPtr(new Verteron::VXInstructionDecoder( + VXBaseDataSource_CppPtr(input), + VXDisassemblerMode_CppRepr(disassemblerMode), + VXInstructionSetVendor_CppRepr(preferredVendor), + instructionPointer)); +} + +void VXInstructionDecoder_Release(VXInstructionDecoderContext *ctx) +{ + delete VXInstructionDecoder_CppPtr(ctx); +} + +bool VXInstructionDecoder_DecodeInstruction( + VXInstructionDecoderContext *ctx, VXInstructionInfo *info) +{ + return VXInstructionDecoder_CppPtr(ctx)->decodeInstruction( + *VXInstructionInfo_CppPtr(info)); +} + +VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( + const VXInstructionDecoderContext *ctx) +{ + return VXBaseDataSource_CPtr(VXInstructionDecoder_CppPtr(ctx)->getDataSource()); +} + +void VXInstructionDecoder_SetDataSource( + VXInstructionDecoderContext *ctx, VXBaseDataSourceContext *input) +{ + VXInstructionDecoder_CppPtr(ctx)->setDataSource(VXBaseDataSource_CppPtr(input)); +} + +VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode(VXInstructionDecoderContext *ctx) +{ + return VXDisassemblerMode_CRepr(VXInstructionDecoder_CppPtr(ctx)->getDisassemblerMode()); +} + +void VXInstructionDecoder_SetDisassemblerMode( + VXInstructionDecoderContext *ctx, + VXDisassemblerMode disassemblerMode) +{ + VXInstructionDecoder_CppPtr(ctx)->setDisassemblerMode( + VXDisassemblerMode_CppRepr(disassemblerMode)); +} + +VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( + const VXInstructionDecoderContext *ctx) +{ + return VXInstructionSetVendor_CRepr(VXInstructionDecoder_CppPtr(ctx)->getPreferredVendor()); +} + +void VXInstructionDecoder_SetPreferredVendor( + VXInstructionDecoderContext *ctx, + VXInstructionSetVendor preferredVendor) +{ + return VXInstructionDecoder_CppPtr(ctx)->setPreferredVendor( + VXInstructionSetVendor_CppRepr(preferredVendor)); +} + +uint64_t VXInstructionDecoder_GetInstructionPointer( + VXInstructionDecoderContext *ctx) +{ + return VXInstructionDecoder_CppPtr(ctx)->getInstructionPointer(); +} + +void VXInstructionDecoder_SetInstructionPointer( + VXInstructionDecoderContext *ctx, + uint64_t instructionPointer) +{ + VXInstructionDecoder_CppPtr(ctx)->setInstructionPointer(instructionPointer); +} + +/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionDecoderC.h b/Bindings/C/VXInstructionDecoderC.h new file mode 100644 index 0000000..1741630 --- /dev/null +++ b/Bindings/C/VXInstructionDecoderC.h @@ -0,0 +1,155 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +/* NOTE: fully ported to C */ + +#ifndef _VDE_VXINSTRUCTIONDECODERC_H_ +#define _VDE_VXINSTRUCTIONDECODERC_H_ + +#include "VXDisassemblerTypesC.h" + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* VXBaseDataSource ============================================================================ */ + +typedef struct _VXBaseDataSourceContext {} VXBaseDataSourceContext; + +void VXBaseDataSource_Release( + VXBaseDataSourceContext *ctx); + +uint8_t VXBaseDataSource_InputPeek( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); + +uint8_t VXBaseDataSource_InputNext( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); + +uint8_t VXBaseDataSource_InputCurrent( + const VXBaseDataSourceContext *ctx); + +bool VXBaseDataSource_IsEndOfInput( + const VXBaseDataSourceContext *ctx); + +uint64_t VXBaseDataSource_GetPosition( + const VXBaseDataSourceContext *ctx); + +bool VXBaseDataSource_SetPosition( + VXBaseDataSourceContext *ctx, + uint64_t position); + +/* VXMemoryDataSource ========================================================================== */ + +VXBaseDataSourceContext* VXMemoryDataSource_Create( + const void* buffer, + size_t bufferLen); + +/* Enums ======================================================================================= */ + +/** + * @brief Values that represent a disassembler mode. + */ +typedef enum _VXDisassemblerMode /* : uint8_t */ +{ + DM_M16BIT, + DM_M32BIT, + DM_M64BIT +} VXDisassemblerMode; + +/** + * @brief Values that represent an instruction-set vendor. + */ +typedef enum _VXInstructionSetVendor /* : uint8_t */ +{ + ISV_ANY, + ISV_INTEL, + ISV_AMD +} VXInstructionSetVendor; + +/* VXInstructionDecoder ======================================================================== */ + +typedef struct _VXInstructionDecoderContext {} VXInstructionDecoderContext; + +VXInstructionDecoderContext* VXInstructionDecoder_Create(void); + +VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( + VXBaseDataSourceContext *input, + VXDisassemblerMode disassemblerMode = DM_M32BIT, + VXInstructionSetVendor preferredVendor = ISV_ANY, + uint64_t instructionPointer = 0); + +void VXInstructionDecoder_Release( + VXInstructionDecoderContext *ctx); + +bool VXInstructionDecoder_DecodeInstruction( + VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( + const VXInstructionDecoderContext *ctx); + +void VXInstructionDecoder_SetDataSource( + VXInstructionDecoderContext *ctx, + VXBaseDataSourceContext *input); + +VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( + VXInstructionDecoderContext *ctx); + +void VXInstructionDecoder_SetDisassemblerMode( + VXInstructionDecoderContext *ctx, + VXDisassemblerMode disassemblerMode); + +VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( + const VXInstructionDecoderContext *ctx); + +void VXInstructionDecoder_SetPreferredVendor( + VXInstructionDecoderContext *ctx, + VXInstructionSetVendor preferredVendor); + +uint64_t VXInstructionDecoder_GetInstructionPointer( + VXInstructionDecoderContext *ctx); + +void VXInstructionDecoder_SetInstructionPointer( + VXInstructionDecoderContext *ctx, + uint64_t instructionPointer); + +/* ============================================================================================= */ + +#ifdef __cplusplus +} +#endif + +#endif /* _VDE_VXINSTRUCTIONDECODERC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionFormatterC.cpp b/Bindings/C/VXInstructionFormatterC.cpp new file mode 100644 index 0000000..1083354 --- /dev/null +++ b/Bindings/C/VXInstructionFormatterC.cpp @@ -0,0 +1,244 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : athre0z + Modifications : + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#include "VXInstructionFormatterC.h" +#include "VXInstructionFormatter.h" + +/* Helpers ===================================================================================== */ + +namespace +{ + +inline Verteron::VXBaseSymbolResolver* VXBaseSymbolResolver_CppPtr( + VXBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Verteron::VXBaseSymbolResolver* VXBaseSymbolResolver_CppPtr( + const VXBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline VXBaseSymbolResolverContext* VXBaseSymbolResolver_CPtr( + Verteron::VXBaseSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const VXBaseSymbolResolverContext* VXBaseSymbolResolver_CPtr( + const Verteron::VXBaseSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Verteron::VXExactSymbolResolver* VXExactSymbolResolver_CppPtr( + VXBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Verteron::VXExactSymbolResolver* VXExactSymbolResolver_CppPtr( + const VXBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline VXBaseSymbolResolverContext* VXExactSymbolResolver_CPtr( + Verteron::VXExactSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const VXBaseSymbolResolverContext* VXExactSymbolResolver_CPtr( + const Verteron::VXExactSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Verteron::VXInstructionInfo* VXInstructionInfo_CppPtr( + VXInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Verteron::VXInstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline const Verteron::VXInstructionInfo* VXInstructionInfo_CppPtr( + const VXInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Verteron::VXInstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline Verteron::VXBaseInstructionFormatter* VXBaseInstructionFormatter_CppPtr( + VXBaseInstructionFormatterContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Verteron::VXBaseInstructionFormatter* VXBaseInstructionFormatter_CppPtr( + const VXBaseInstructionFormatterContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline Verteron::VXBaseInstructionFormatter* VXIntelInstructionFormatter_CppPtr( + VXIntelInstructionFormatterContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Verteron::VXBaseInstructionFormatter* VXIntelInstructionFormatter_CppPtr( + const VXIntelInstructionFormatterContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CPtr( + Verteron::VXBaseInstructionFormatter *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CPtr( + const Verteron::VXBaseInstructionFormatter *ctx) +{ + return reinterpret_cast(ctx); +} + + +} + +/* VXBaseSymbolResolver ======================================================================== */ + +VXBaseSymbolResolverContext* VXBaseSymbolResolver_Create() +{ + return VXBaseSymbolResolver_CPtr(new Verteron::VXBaseSymbolResolver); +} + +void VXBaseSymbolResolver_Release( + VXBaseSymbolResolverContext *ctx) +{ + delete VXBaseSymbolResolver_CppPtr(ctx); +} + +const char* VXBaseSymbolResolver_ResolveSymbol( + VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, + uint64_t address, + uint64_t *offset) +{ + return VXBaseSymbolResolver_CppPtr(ctx)->resolveSymbol( + *VXInstructionInfo_CppPtr(info), + address, + *offset); +} + +/* VXExactSymbolResolver ======================================================================= */ + +VXBaseSymbolResolverContext* VXExactSymbolResolver_Create(void) +{ + return VXExactSymbolResolver_CPtr(new Verteron::VXExactSymbolResolver); +} + +bool VXExactSymbolResolver_ContainsSymbol( + VXBaseSymbolResolverContext *ctx, + uint64_t address) +{ + return VXExactSymbolResolver_CppPtr(ctx)->containsSymbol(address); +} + +void VXExactSymbolResolverContext_SetSymbol( + VXBaseSymbolResolverContext *ctx, + uint64_t address, + const char* name) +{ + VXExactSymbolResolver_CppPtr(ctx)->setSymbol(address, name); +} + +void VXExactSymbolResolverContext_RemoveSymbol( + VXBaseSymbolResolverContext *ctx, + uint64_t address) +{ + VXExactSymbolResolver_CppPtr(ctx)->removeSymbol(address); +} + +void VXExactSymbolResolverContext_Clear( + VXBaseSymbolResolverContext *ctx) +{ + VXExactSymbolResolver_CppPtr(ctx)->clear(); +} + +/* VXBaseInstructionFormatter ================================================================== */ + +VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( + const VXBaseInstructionFormatterContext *ctx) +{ + return VXBaseSymbolResolver_CPtr( + VXBaseInstructionFormatter_CppPtr(ctx)->getSymbolResolver()); +} + +void VXBaseInstructionFormatter_SetSymbolResolver( + VXBaseInstructionFormatterContext *ctx, + VXBaseSymbolResolverContext *resolver) +{ + VXBaseInstructionFormatter_CppPtr(ctx)->setSymbolResolver( + VXBaseSymbolResolver_CppPtr(resolver)); +} + +void VXBaseInstructionFormatter_Release( + VXBaseInstructionFormatterContext *ctx) +{ + delete VXBaseInstructionFormatter_CppPtr(ctx); +} + +/* VXIntelInstructionFormatter ================================================================ */ + +VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void) +{ + return VXIntelInstructionFormatter_CPtr(new Verteron::VXIntelInstructionFormatter); +} + +VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( + VXBaseSymbolResolverContext *resolver) +{ + return VXIntelInstructionFormatter_CPtr(new Verteron::VXIntelInstructionFormatter( + VXBaseSymbolResolver_CppPtr(resolver))); +} + +void VXIntelInstructionFormatter_Release(VXIntelInstructionFormatterContext *ctx) +{ + delete VXIntelInstructionFormatter_CppPtr(ctx); +} + +/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionFormatterC.h b/Bindings/C/VXInstructionFormatterC.h new file mode 100644 index 0000000..3d120bf --- /dev/null +++ b/Bindings/C/VXInstructionFormatterC.h @@ -0,0 +1,114 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#ifndef _VDE_VXINSTRUCTIONFORMATTERC_H_ +#define _VDE_VXINSTRUCTIONFORMATTERC_H_ + +#include "VXDisassemblerTypesC.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* VXBaseSymbolResolver ======================================================================== */ + +typedef struct _VXBaseSymbolResolverContext {} VXBaseSymbolResolverContext; + +VXBaseSymbolResolverContext* VXBaseSymbolResolver_Create(void); + +void VXBaseSymbolResolver_Release( + VXBaseSymbolResolverContext *ctx); + +const char* VXBaseSymbolResolver_ResolveSymbol( + VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, + uint64_t address, + uint64_t *offset); + +/* VXExactSymbolResolver ======================================================================= */ + +VXBaseSymbolResolverContext* VXExactSymbolResolver_Create(void); + +bool VXExactSymbolResolver_ContainsSymbol( + VXBaseSymbolResolverContext *ctx, + uint64_t address); + +void VXExactSymbolResolverContext_SetSymbol( + VXBaseSymbolResolverContext *ctx, + uint64_t address, + const char* name); + +void VXExactSymbolResolverContext_RemoveSymbol( + VXBaseSymbolResolverContext *ctx, + uint64_t address); + +void VXExactSymbolResolverContext_Clear( + VXBaseSymbolResolverContext *ctx); + +/* VXCustomSymbolResolver ====================================================================== */ + +/* TODO: actually implement support for custom resolvers in C binding */ + +typedef const char* (*VXResolveSymbol_t)( + const VXInstructionInfo *info, + uint64_t address, uint64_t *offset); + +/* VXBaseInstructionFormatter ================================================================== */ + +typedef struct _VXBaseInstructionFormatterContext {} VXBaseInstructionFormatterContext; + +VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( + const VXBaseInstructionFormatterContext *ctx); + +void VXBaseInstructionFormatter_SetSymbolResolver( + VXBaseInstructionFormatterContext *ctx, + VXBaseSymbolResolverContext *resolver); + +void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx); + +/* VXIntelInstructionFormatter ================================================================ */ + +typedef struct _VXIntelInstructionFormatterContext {} VXIntelInstructionFormatterContext; + +VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); + +VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( + VXBaseSymbolResolverContext *resolver); + +/* ============================================================================================= */ + +#ifdef __cplusplus +} +#endif + +#endif /* _VDE_VXINSTRUCTIONFORMATTERC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXOpcodeTableC.cpp b/Bindings/C/VXOpcodeTableC.cpp new file mode 100644 index 0000000..80d3626 --- /dev/null +++ b/Bindings/C/VXOpcodeTableC.cpp @@ -0,0 +1,35 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : athre0z + Modifications : + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#include "VXOpcodeTableC.h" +#include "VXOpcodeTable.h" + diff --git a/Bindings/C/VXOpcodeTableC.h b/Bindings/C/VXOpcodeTableC.h new file mode 100644 index 0000000..34e422f --- /dev/null +++ b/Bindings/C/VXOpcodeTableC.h @@ -0,0 +1,1505 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +/* NOTE: fully ported to C */ + +#ifndef _VDE_VXOPCODETABLEC_H_ +#define _VDE_VXOPCODETABLEC_H_ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** + * @brief Values that represent an instruction mnemonic. + */ +typedef enum _VXInstructionMnemonic /* : uint16_t */ +{ + /* 000 */ MNEM_INVALID, + /* 001 */ MNEM_AAA, + /* 002 */ MNEM_AAD, + /* 003 */ MNEM_AAM, + /* 004 */ MNEM_AAS, + /* 005 */ MNEM_ADC, + /* 006 */ MNEM_ADD, + /* 007 */ MNEM_ADDPD, + /* 008 */ MNEM_ADDPS, + /* 009 */ MNEM_ADDSD, + /* 00A */ MNEM_ADDSS, + /* 00B */ MNEM_ADDSUBPD, + /* 00C */ MNEM_ADDSUBPS, + /* 00D */ MNEM_AESDEC, + /* 00E */ MNEM_AESDECLAST, + /* 00F */ MNEM_AESENC, + /* 010 */ MNEM_AESENCLAST, + /* 011 */ MNEM_AESIMC, + /* 012 */ MNEM_AESKEYGENASSIST, + /* 013 */ MNEM_AND, + /* 014 */ MNEM_ANDNPD, + /* 015 */ MNEM_ANDNPS, + /* 016 */ MNEM_ANDPD, + /* 017 */ MNEM_ANDPS, + /* 018 */ MNEM_ARPL, + /* 019 */ MNEM_BLENDPD, + /* 01A */ MNEM_BLENDPS, + /* 01B */ MNEM_BLENDVPD, + /* 01C */ MNEM_BLENDVPS, + /* 01D */ MNEM_BOUND, + /* 01E */ MNEM_BSF, + /* 01F */ MNEM_BSR, + /* 020 */ MNEM_BSWAP, + /* 021 */ MNEM_BT, + /* 022 */ MNEM_BTC, + /* 023 */ MNEM_BTR, + /* 024 */ MNEM_BTS, + /* 025 */ MNEM_CALL, + /* 026 */ MNEM_CBW, + /* 027 */ MNEM_CDQ, + /* 028 */ MNEM_CDQE, + /* 029 */ MNEM_CLC, + /* 02A */ MNEM_CLD, + /* 02B */ MNEM_CLFLUSH, + /* 02C */ MNEM_CLGI, + /* 02D */ MNEM_CLI, + /* 02E */ MNEM_CLTS, + /* 02F */ MNEM_CMC, + /* 030 */ MNEM_CMOVA, + /* 031 */ MNEM_CMOVAE, + /* 032 */ MNEM_CMOVB, + /* 033 */ MNEM_CMOVBE, + /* 034 */ MNEM_CMOVE, + /* 035 */ MNEM_CMOVG, + /* 036 */ MNEM_CMOVGE, + /* 037 */ MNEM_CMOVL, + /* 038 */ MNEM_CMOVLE, + /* 039 */ MNEM_CMOVNE, + /* 03A */ MNEM_CMOVNO, + /* 03B */ MNEM_CMOVNP, + /* 03C */ MNEM_CMOVNS, + /* 03D */ MNEM_CMOVO, + /* 03E */ MNEM_CMOVP, + /* 03F */ MNEM_CMOVS, + /* 040 */ MNEM_CMP, + /* 041 */ MNEM_CMPPD, + /* 042 */ MNEM_CMPPS, + /* 043 */ MNEM_CMPSB, + /* 044 */ MNEM_CMPSD, + /* 045 */ MNEM_CMPSQ, + /* 046 */ MNEM_CMPSS, + /* 047 */ MNEM_CMPSW, + /* 048 */ MNEM_CMPXCHG, + /* 049 */ MNEM_CMPXCHG16B, + /* 04A */ MNEM_CMPXCHG8B, + /* 04B */ MNEM_COMISD, + /* 04C */ MNEM_COMISS, + /* 04D */ MNEM_CPUID, + /* 04E */ MNEM_CQO, + /* 04F */ MNEM_CRC32, + /* 050 */ MNEM_CVTDQ2PD, + /* 051 */ MNEM_CVTDQ2PS, + /* 052 */ MNEM_CVTPD2DQ, + /* 053 */ MNEM_CVTPD2PI, + /* 054 */ MNEM_CVTPD2PS, + /* 055 */ MNEM_CVTPI2PD, + /* 056 */ MNEM_CVTPI2PS, + /* 057 */ MNEM_CVTPS2DQ, + /* 058 */ MNEM_CVTPS2PD, + /* 059 */ MNEM_CVTPS2PI, + /* 05A */ MNEM_CVTSD2SI, + /* 05B */ MNEM_CVTSD2SS, + /* 05C */ MNEM_CVTSI2SD, + /* 05D */ MNEM_CVTSI2SS, + /* 05E */ MNEM_CVTSS2SD, + /* 05F */ MNEM_CVTSS2SI, + /* 060 */ MNEM_CVTTPD2DQ, + /* 061 */ MNEM_CVTTPD2PI, + /* 062 */ MNEM_CVTTPS2DQ, + /* 063 */ MNEM_CVTTPS2PI, + /* 064 */ MNEM_CVTTSD2SI, + /* 065 */ MNEM_CVTTSS2SI, + /* 066 */ MNEM_CWD, + /* 067 */ MNEM_CWDE, + /* 068 */ MNEM_DAA, + /* 069 */ MNEM_DAS, + /* 06A */ MNEM_DEC, + /* 06B */ MNEM_DIV, + /* 06C */ MNEM_DIVPD, + /* 06D */ MNEM_DIVPS, + /* 06E */ MNEM_DIVSD, + /* 06F */ MNEM_DIVSS, + /* 070 */ MNEM_DPPD, + /* 071 */ MNEM_DPPS, + /* 072 */ MNEM_EMMS, + /* 073 */ MNEM_ENTER, + /* 074 */ MNEM_EXTRACTPS, + /* 075 */ MNEM_F2XM1, + /* 076 */ MNEM_FABS, + /* 077 */ MNEM_FADD, + /* 078 */ MNEM_FADDP, + /* 079 */ MNEM_FBLD, + /* 07A */ MNEM_FBSTP, + /* 07B */ MNEM_FCHS, + /* 07C */ MNEM_FCLEX, + /* 07D */ MNEM_FCMOVB, + /* 07E */ MNEM_FCMOVBE, + /* 07F */ MNEM_FCMOVE, + /* 080 */ MNEM_FCMOVNB, + /* 081 */ MNEM_FCMOVNBE, + /* 082 */ MNEM_FCMOVNE, + /* 083 */ MNEM_FCMOVNU, + /* 084 */ MNEM_FCMOVU, + /* 085 */ MNEM_FCOM, + /* 086 */ MNEM_FCOM2, + /* 087 */ MNEM_FCOMI, + /* 088 */ MNEM_FCOMIP, + /* 089 */ MNEM_FCOMP, + /* 08A */ MNEM_FCOMP3, + /* 08B */ MNEM_FCOMP5, + /* 08C */ MNEM_FCOMPP, + /* 08D */ MNEM_FCOS, + /* 08E */ MNEM_FDECSTP, + /* 08F */ MNEM_FDIV, + /* 090 */ MNEM_FDIVP, + /* 091 */ MNEM_FDIVR, + /* 092 */ MNEM_FDIVRP, + /* 093 */ MNEM_FEMMS, + /* 094 */ MNEM_FFREE, + /* 095 */ MNEM_FFREEP, + /* 096 */ MNEM_FIADD, + /* 097 */ MNEM_FICOM, + /* 098 */ MNEM_FICOMP, + /* 099 */ MNEM_FIDIV, + /* 09A */ MNEM_FIDIVR, + /* 09B */ MNEM_FILD, + /* 09C */ MNEM_FIMUL, + /* 09D */ MNEM_FINCSTP, + /* 09E */ MNEM_FIST, + /* 09F */ MNEM_FISTP, + /* 0A0 */ MNEM_FISTTP, + /* 0A1 */ MNEM_FISUB, + /* 0A2 */ MNEM_FISUBR, + /* 0A3 */ MNEM_FLD, + /* 0A4 */ MNEM_FLD1, + /* 0A5 */ MNEM_FLDCW, + /* 0A6 */ MNEM_FLDENV, + /* 0A7 */ MNEM_FLDL2E, + /* 0A8 */ MNEM_FLDL2T, + /* 0A9 */ MNEM_FLDLG2, + /* 0AA */ MNEM_FLDLN2, + /* 0AB */ MNEM_FLDPI, + /* 0AC */ MNEM_FLDZ, + /* 0AD */ MNEM_FMUL, + /* 0AE */ MNEM_FMULP, + /* 0AF */ MNEM_FNDISI, + /* 0B0 */ MNEM_FNENI, + /* 0B1 */ MNEM_FNINIT, + /* 0B2 */ MNEM_FNOP, + /* 0B3 */ MNEM_FNSAVE, + /* 0B4 */ MNEM_FNSETPM, + /* 0B5 */ MNEM_FNSTCW, + /* 0B6 */ MNEM_FNSTENV, + /* 0B7 */ MNEM_FNSTSW, + /* 0B8 */ MNEM_FPATAN, + /* 0B9 */ MNEM_FPREM, + /* 0BA */ MNEM_FPREM1, + /* 0BB */ MNEM_FPTAN, + /* 0BC */ MNEM_FRNDINT, + /* 0BD */ MNEM_FRSTOR, + /* 0BE */ MNEM_FRSTPM, + /* 0BF */ MNEM_FSCALE, + /* 0C0 */ MNEM_FSIN, + /* 0C1 */ MNEM_FSINCOS, + /* 0C2 */ MNEM_FSQRT, + /* 0C3 */ MNEM_FST, + /* 0C4 */ MNEM_FSTP, + /* 0C5 */ MNEM_FSTP1, + /* 0C6 */ MNEM_FSTP8, + /* 0C7 */ MNEM_FSTP9, + /* 0C8 */ MNEM_FSUB, + /* 0C9 */ MNEM_FSUBP, + /* 0CA */ MNEM_FSUBR, + /* 0CB */ MNEM_FSUBRP, + /* 0CC */ MNEM_FTST, + /* 0CD */ MNEM_FUCOM, + /* 0CE */ MNEM_FUCOMI, + /* 0CF */ MNEM_FUCOMIP, + /* 0D0 */ MNEM_FUCOMP, + /* 0D1 */ MNEM_FUCOMPP, + /* 0D2 */ MNEM_FXAM, + /* 0D3 */ MNEM_FXCH, + /* 0D4 */ MNEM_FXCH4, + /* 0D5 */ MNEM_FXCH7, + /* 0D6 */ MNEM_FXRSTOR, + /* 0D7 */ MNEM_FXSAVE, + /* 0D8 */ MNEM_FXTRACT, + /* 0D9 */ MNEM_FYL2X, + /* 0DA */ MNEM_FYL2XP1, + /* 0DB */ MNEM_GETSEC, + /* 0DC */ MNEM_HADDPD, + /* 0DD */ MNEM_HADDPS, + /* 0DE */ MNEM_HLT, + /* 0DF */ MNEM_HSUBPD, + /* 0E0 */ MNEM_HSUBPS, + /* 0E1 */ MNEM_IDIV, + /* 0E2 */ MNEM_IMUL, + /* 0E3 */ MNEM_IN, + /* 0E4 */ MNEM_INC, + /* 0E5 */ MNEM_INSB, + /* 0E6 */ MNEM_INSD, + /* 0E7 */ MNEM_INSERTPS, + /* 0E8 */ MNEM_INSW, + /* 0E9 */ MNEM_INT, + /* 0EA */ MNEM_INT1, + /* 0EB */ MNEM_INT3, + /* 0EC */ MNEM_INTO, + /* 0ED */ MNEM_INVD, + /* 0EE */ MNEM_INVEPT, + /* 0EF */ MNEM_INVLPG, + /* 0F0 */ MNEM_INVLPGA, + /* 0F1 */ MNEM_INVVPID, + /* 0F2 */ MNEM_IRETD, + /* 0F3 */ MNEM_IRETQ, + /* 0F4 */ MNEM_IRETW, + /* 0F5 */ MNEM_JA, + /* 0F6 */ MNEM_JB, + /* 0F7 */ MNEM_JBE, + /* 0F8 */ MNEM_JCXZ, + /* 0F9 */ MNEM_JE, + /* 0FA */ MNEM_JECXZ, + /* 0FB */ MNEM_JG, + /* 0FC */ MNEM_JGE, + /* 0FD */ MNEM_JL, + /* 0FE */ MNEM_JLE, + /* 0FF */ MNEM_JMP, + /* 100 */ MNEM_JNB, + /* 101 */ MNEM_JNE, + /* 102 */ MNEM_JNO, + /* 103 */ MNEM_JNP, + /* 104 */ MNEM_JNS, + /* 105 */ MNEM_JO, + /* 106 */ MNEM_JP, + /* 107 */ MNEM_JRCXZ, + /* 108 */ MNEM_JS, + /* 109 */ MNEM_LAHF, + /* 10A */ MNEM_LAR, + /* 10B */ MNEM_LDDQU, + /* 10C */ MNEM_LDMXCSR, + /* 10D */ MNEM_LDS, + /* 10E */ MNEM_LEA, + /* 10F */ MNEM_LEAVE, + /* 110 */ MNEM_LES, + /* 111 */ MNEM_LFENCE, + /* 112 */ MNEM_LFS, + /* 113 */ MNEM_LGDT, + /* 114 */ MNEM_LGS, + /* 115 */ MNEM_LIDT, + /* 116 */ MNEM_LLDT, + /* 117 */ MNEM_LMSW, + /* 118 */ MNEM_LOCK, + /* 119 */ MNEM_LODSB, + /* 11A */ MNEM_LODSD, + /* 11B */ MNEM_LODSQ, + /* 11C */ MNEM_LODSW, + /* 11D */ MNEM_LOOP, + /* 11E */ MNEM_LOOPE, + /* 11F */ MNEM_LOOPNE, + /* 120 */ MNEM_LSL, + /* 121 */ MNEM_LSS, + /* 122 */ MNEM_LTR, + /* 123 */ MNEM_MASKMOVDQU, + /* 124 */ MNEM_MASKMOVQ, + /* 125 */ MNEM_MAXPD, + /* 126 */ MNEM_MAXPS, + /* 127 */ MNEM_MAXSD, + /* 128 */ MNEM_MAXSS, + /* 129 */ MNEM_MFENCE, + /* 12A */ MNEM_MINPD, + /* 12B */ MNEM_MINPS, + /* 12C */ MNEM_MINSD, + /* 12D */ MNEM_MINSS, + /* 12E */ MNEM_MONITOR, + /* 12F */ MNEM_MONTMUL, + /* 130 */ MNEM_MOV, + /* 131 */ MNEM_MOVAPD, + /* 132 */ MNEM_MOVAPS, + /* 133 */ MNEM_MOVBE, + /* 134 */ MNEM_MOVD, + /* 135 */ MNEM_MOVDDUP, + /* 136 */ MNEM_MOVDQ2Q, + /* 137 */ MNEM_MOVDQA, + /* 138 */ MNEM_MOVDQU, + /* 139 */ MNEM_MOVHLPS, + /* 13A */ MNEM_MOVHPD, + /* 13B */ MNEM_MOVHPS, + /* 13C */ MNEM_MOVLHPS, + /* 13D */ MNEM_MOVLPD, + /* 13E */ MNEM_MOVLPS, + /* 13F */ MNEM_MOVMSKPD, + /* 140 */ MNEM_MOVMSKPS, + /* 141 */ MNEM_MOVNTDQ, + /* 142 */ MNEM_MOVNTDQA, + /* 143 */ MNEM_MOVNTI, + /* 144 */ MNEM_MOVNTPD, + /* 145 */ MNEM_MOVNTPS, + /* 146 */ MNEM_MOVNTQ, + /* 147 */ MNEM_MOVQ, + /* 148 */ MNEM_MOVQ2DQ, + /* 149 */ MNEM_MOVSB, + /* 14A */ MNEM_MOVSD, + /* 14B */ MNEM_MOVSHDUP, + /* 14C */ MNEM_MOVSLDUP, + /* 14D */ MNEM_MOVSQ, + /* 14E */ MNEM_MOVSS, + /* 14F */ MNEM_MOVSW, + /* 150 */ MNEM_MOVSX, + /* 151 */ MNEM_MOVSXD, + /* 152 */ MNEM_MOVUPD, + /* 153 */ MNEM_MOVUPS, + /* 154 */ MNEM_MOVZX, + /* 155 */ MNEM_MPSADBW, + /* 156 */ MNEM_MUL, + /* 157 */ MNEM_MULPD, + /* 158 */ MNEM_MULPS, + /* 159 */ MNEM_MULSD, + /* 15A */ MNEM_MULSS, + /* 15B */ MNEM_MWAIT, + /* 15C */ MNEM_NEG, + /* 15D */ MNEM_NOP, + /* 15E */ MNEM_NOT, + /* 15F */ MNEM_OR, + /* 160 */ MNEM_ORPD, + /* 161 */ MNEM_ORPS, + /* 162 */ MNEM_OUT, + /* 163 */ MNEM_OUTSB, + /* 164 */ MNEM_OUTSD, + /* 165 */ MNEM_OUTSW, + /* 166 */ MNEM_PABSB, + /* 167 */ MNEM_PABSD, + /* 168 */ MNEM_PABSW, + /* 169 */ MNEM_PACKSSDW, + /* 16A */ MNEM_PACKSSWB, + /* 16B */ MNEM_PACKUSDW, + /* 16C */ MNEM_PACKUSWB, + /* 16D */ MNEM_PADDB, + /* 16E */ MNEM_PADDD, + /* 16F */ MNEM_PADDQ, + /* 170 */ MNEM_PADDSB, + /* 171 */ MNEM_PADDSW, + /* 172 */ MNEM_PADDUSB, + /* 173 */ MNEM_PADDUSW, + /* 174 */ MNEM_PADDW, + /* 175 */ MNEM_PALIGNR, + /* 176 */ MNEM_PAND, + /* 177 */ MNEM_PANDN, + /* 178 */ MNEM_PAUSE, + /* 179 */ MNEM_PAVGB, + /* 17A */ MNEM_PAVGUSB, + /* 17B */ MNEM_PAVGW, + /* 17C */ MNEM_PBLENDVB, + /* 17D */ MNEM_PBLENDW, + /* 17E */ MNEM_PCLMULQDQ, + /* 17F */ MNEM_PCMPEQB, + /* 180 */ MNEM_PCMPEQD, + /* 181 */ MNEM_PCMPEQQ, + /* 182 */ MNEM_PCMPEQW, + /* 183 */ MNEM_PCMPESTRI, + /* 184 */ MNEM_PCMPESTRM, + /* 185 */ MNEM_PCMPGTB, + /* 186 */ MNEM_PCMPGTD, + /* 187 */ MNEM_PCMPGTQ, + /* 188 */ MNEM_PCMPGTW, + /* 189 */ MNEM_PCMPISTRI, + /* 18A */ MNEM_PCMPISTRM, + /* 18B */ MNEM_PEXTRB, + /* 18C */ MNEM_PEXTRD, + /* 18D */ MNEM_PEXTRQ, + /* 18E */ MNEM_PEXTRW, + /* 18F */ MNEM_PF2ID, + /* 190 */ MNEM_PF2IW, + /* 191 */ MNEM_PFACC, + /* 192 */ MNEM_PFADD, + /* 193 */ MNEM_PFCMPEQ, + /* 194 */ MNEM_PFCMPGE, + /* 195 */ MNEM_PFCMPGT, + /* 196 */ MNEM_PFMAX, + /* 197 */ MNEM_PFMIN, + /* 198 */ MNEM_PFMUL, + /* 199 */ MNEM_PFNACC, + /* 19A */ MNEM_PFPNACC, + /* 19B */ MNEM_PFRCP, + /* 19C */ MNEM_PFRCPIT1, + /* 19D */ MNEM_PFRCPIT2, + /* 19E */ MNEM_PFRSQIT1, + /* 19F */ MNEM_PFRSQRT, + /* 1A0 */ MNEM_PFSUB, + /* 1A1 */ MNEM_PFSUBR, + /* 1A2 */ MNEM_PHADDD, + /* 1A3 */ MNEM_PHADDSW, + /* 1A4 */ MNEM_PHADDW, + /* 1A5 */ MNEM_PHMINPOSUW, + /* 1A6 */ MNEM_PHSUBD, + /* 1A7 */ MNEM_PHSUBSW, + /* 1A8 */ MNEM_PHSUBW, + /* 1A9 */ MNEM_PI2FD, + /* 1AA */ MNEM_PI2FW, + /* 1AB */ MNEM_PINSRB, + /* 1AC */ MNEM_PINSRD, + /* 1AD */ MNEM_PINSRQ, + /* 1AE */ MNEM_PINSRW, + /* 1AF */ MNEM_PMADDUBSW, + /* 1B0 */ MNEM_PMADDWD, + /* 1B1 */ MNEM_PMAXSB, + /* 1B2 */ MNEM_PMAXSD, + /* 1B3 */ MNEM_PMAXSW, + /* 1B4 */ MNEM_PMAXUB, + /* 1B5 */ MNEM_PMAXUD, + /* 1B6 */ MNEM_PMAXUW, + /* 1B7 */ MNEM_PMINSB, + /* 1B8 */ MNEM_PMINSD, + /* 1B9 */ MNEM_PMINSW, + /* 1BA */ MNEM_PMINUB, + /* 1BB */ MNEM_PMINUD, + /* 1BC */ MNEM_PMINUW, + /* 1BD */ MNEM_PMOVMSKB, + /* 1BE */ MNEM_PMOVSXBD, + /* 1BF */ MNEM_PMOVSXBQ, + /* 1C0 */ MNEM_PMOVSXBW, + /* 1C1 */ MNEM_PMOVSXDQ, + /* 1C2 */ MNEM_PMOVSXWD, + /* 1C3 */ MNEM_PMOVSXWQ, + /* 1C4 */ MNEM_PMOVZXBD, + /* 1C5 */ MNEM_PMOVZXBQ, + /* 1C6 */ MNEM_PMOVZXBW, + /* 1C7 */ MNEM_PMOVZXDQ, + /* 1C8 */ MNEM_PMOVZXWD, + /* 1C9 */ MNEM_PMOVZXWQ, + /* 1CA */ MNEM_PMULDQ, + /* 1CB */ MNEM_PMULHRSW, + /* 1CC */ MNEM_PMULHRW, + /* 1CD */ MNEM_PMULHUW, + /* 1CE */ MNEM_PMULHW, + /* 1CF */ MNEM_PMULLD, + /* 1D0 */ MNEM_PMULLW, + /* 1D1 */ MNEM_PMULUDQ, + /* 1D2 */ MNEM_POP, + /* 1D3 */ MNEM_POPA, + /* 1D4 */ MNEM_POPAD, + /* 1D5 */ MNEM_POPCNT, + /* 1D6 */ MNEM_POPFD, + /* 1D7 */ MNEM_POPFQ, + /* 1D8 */ MNEM_POPFW, + /* 1D9 */ MNEM_POR, + /* 1DA */ MNEM_PREFETCH, + /* 1DB */ MNEM_PREFETCHNTA, + /* 1DC */ MNEM_PREFETCHT0, + /* 1DD */ MNEM_PREFETCHT1, + /* 1DE */ MNEM_PREFETCHT2, + /* 1DF */ MNEM_PSADBW, + /* 1E0 */ MNEM_PSHUFB, + /* 1E1 */ MNEM_PSHUFD, + /* 1E2 */ MNEM_PSHUFHW, + /* 1E3 */ MNEM_PSHUFLW, + /* 1E4 */ MNEM_PSHUFW, + /* 1E5 */ MNEM_PSIGNB, + /* 1E6 */ MNEM_PSIGND, + /* 1E7 */ MNEM_PSIGNW, + /* 1E8 */ MNEM_PSLLD, + /* 1E9 */ MNEM_PSLLDQ, + /* 1EA */ MNEM_PSLLQ, + /* 1EB */ MNEM_PSLLW, + /* 1EC */ MNEM_PSRAD, + /* 1ED */ MNEM_PSRAW, + /* 1EE */ MNEM_PSRLD, + /* 1EF */ MNEM_PSRLDQ, + /* 1F0 */ MNEM_PSRLQ, + /* 1F1 */ MNEM_PSRLW, + /* 1F2 */ MNEM_PSUBB, + /* 1F3 */ MNEM_PSUBD, + /* 1F4 */ MNEM_PSUBQ, + /* 1F5 */ MNEM_PSUBSB, + /* 1F6 */ MNEM_PSUBSW, + /* 1F7 */ MNEM_PSUBUSB, + /* 1F8 */ MNEM_PSUBUSW, + /* 1F9 */ MNEM_PSUBW, + /* 1FA */ MNEM_PSWAPD, + /* 1FB */ MNEM_PTEST, + /* 1FC */ MNEM_PUNPCKHBW, + /* 1FD */ MNEM_PUNPCKHDQ, + /* 1FE */ MNEM_PUNPCKHQDQ, + /* 1FF */ MNEM_PUNPCKHWD, + /* 200 */ MNEM_PUNPCKLBW, + /* 201 */ MNEM_PUNPCKLDQ, + /* 202 */ MNEM_PUNPCKLQDQ, + /* 203 */ MNEM_PUNPCKLWD, + /* 204 */ MNEM_PUSH, + /* 205 */ MNEM_PUSHA, + /* 206 */ MNEM_PUSHAD, + /* 207 */ MNEM_PUSHFD, + /* 208 */ MNEM_PUSHFQ, + /* 209 */ MNEM_PUSHFW, + /* 20A */ MNEM_PXOR, + /* 20B */ MNEM_RCL, + /* 20C */ MNEM_RCPPS, + /* 20D */ MNEM_RCPSS, + /* 20E */ MNEM_RCR, + /* 20F */ MNEM_RDMSR, + /* 210 */ MNEM_RDPMC, + /* 211 */ MNEM_RDRAND, + /* 212 */ MNEM_RDTSC, + /* 213 */ MNEM_RDTSCP, + /* 214 */ MNEM_REP, + /* 215 */ MNEM_REPNE, + /* 216 */ MNEM_RET, + /* 217 */ MNEM_RETF, + /* 218 */ MNEM_ROL, + /* 219 */ MNEM_ROR, + /* 21A */ MNEM_ROUNDPD, + /* 21B */ MNEM_ROUNDPS, + /* 21C */ MNEM_ROUNDSD, + /* 21D */ MNEM_ROUNDSS, + /* 21E */ MNEM_RSM, + /* 21F */ MNEM_RSQRTPS, + /* 220 */ MNEM_RSQRTSS, + /* 221 */ MNEM_SAHF, + /* 222 */ MNEM_SALC, + /* 223 */ MNEM_SAR, + /* 224 */ MNEM_SBB, + /* 225 */ MNEM_SCASB, + /* 226 */ MNEM_SCASD, + /* 227 */ MNEM_SCASQ, + /* 228 */ MNEM_SCASW, + /* 229 */ MNEM_SETA, + /* 22A */ MNEM_SETAE, + /* 22B */ MNEM_SETB, + /* 22C */ MNEM_SETBE, + /* 22D */ MNEM_SETE, + /* 22E */ MNEM_SETG, + /* 22F */ MNEM_SETGE, + /* 230 */ MNEM_SETL, + /* 231 */ MNEM_SETLE, + /* 232 */ MNEM_SETNE, + /* 233 */ MNEM_SETNO, + /* 234 */ MNEM_SETNP, + /* 235 */ MNEM_SETNS, + /* 236 */ MNEM_SETO, + /* 237 */ MNEM_SETP, + /* 238 */ MNEM_SETS, + /* 239 */ MNEM_SFENCE, + /* 23A */ MNEM_SGDT, + /* 23B */ MNEM_SHL, + /* 23C */ MNEM_SHLD, + /* 23D */ MNEM_SHR, + /* 23E */ MNEM_SHRD, + /* 23F */ MNEM_SHUFPD, + /* 240 */ MNEM_SHUFPS, + /* 241 */ MNEM_SIDT, + /* 242 */ MNEM_SKINIT, + /* 243 */ MNEM_SLDT, + /* 244 */ MNEM_SMSW, + /* 245 */ MNEM_SQRTPD, + /* 246 */ MNEM_SQRTPS, + /* 247 */ MNEM_SQRTSD, + /* 248 */ MNEM_SQRTSS, + /* 249 */ MNEM_STC, + /* 24A */ MNEM_STD, + /* 24B */ MNEM_STGI, + /* 24C */ MNEM_STI, + /* 24D */ MNEM_STMXCSR, + /* 24E */ MNEM_STOSB, + /* 24F */ MNEM_STOSD, + /* 250 */ MNEM_STOSQ, + /* 251 */ MNEM_STOSW, + /* 252 */ MNEM_STR, + /* 253 */ MNEM_SUB, + /* 254 */ MNEM_SUBPD, + /* 255 */ MNEM_SUBPS, + /* 256 */ MNEM_SUBSD, + /* 257 */ MNEM_SUBSS, + /* 258 */ MNEM_SWAPGS, + /* 259 */ MNEM_SYSCALL, + /* 25A */ MNEM_SYSENTER, + /* 25B */ MNEM_SYSEXIT, + /* 25C */ MNEM_SYSRET, + /* 25D */ MNEM_TEST, + /* 25E */ MNEM_UCOMISD, + /* 25F */ MNEM_UCOMISS, + /* 260 */ MNEM_UD2, + /* 261 */ MNEM_UNPCKHPD, + /* 262 */ MNEM_UNPCKHPS, + /* 263 */ MNEM_UNPCKLPD, + /* 264 */ MNEM_UNPCKLPS, + /* 265 */ MNEM_VADDPD, + /* 266 */ MNEM_VADDPS, + /* 267 */ MNEM_VADDSD, + /* 268 */ MNEM_VADDSS, + /* 269 */ MNEM_VADDSUBPD, + /* 26A */ MNEM_VADDSUBPS, + /* 26B */ MNEM_VAESDEC, + /* 26C */ MNEM_VAESDECLAST, + /* 26D */ MNEM_VAESENC, + /* 26E */ MNEM_VAESENCLAST, + /* 26F */ MNEM_VAESIMC, + /* 270 */ MNEM_VAESKEYGENASSIST, + /* 271 */ MNEM_VANDNPD, + /* 272 */ MNEM_VANDNPS, + /* 273 */ MNEM_VANDPD, + /* 274 */ MNEM_VANDPS, + /* 275 */ MNEM_VBLENDPD, + /* 276 */ MNEM_VBLENDPS, + /* 277 */ MNEM_VBLENDVPD, + /* 278 */ MNEM_VBLENDVPS, + /* 279 */ MNEM_VBROADCASTSD, + /* 27A */ MNEM_VBROADCASTSS, + /* 27B */ MNEM_VCMPPD, + /* 27C */ MNEM_VCMPPS, + /* 27D */ MNEM_VCMPSD, + /* 27E */ MNEM_VCMPSS, + /* 27F */ MNEM_VCOMISD, + /* 280 */ MNEM_VCOMISS, + /* 281 */ MNEM_VCVTDQ2PD, + /* 282 */ MNEM_VCVTDQ2PS, + /* 283 */ MNEM_VCVTPD2DQ, + /* 284 */ MNEM_VCVTPD2PS, + /* 285 */ MNEM_VCVTPS2DQ, + /* 286 */ MNEM_VCVTPS2PD, + /* 287 */ MNEM_VCVTSD2SI, + /* 288 */ MNEM_VCVTSD2SS, + /* 289 */ MNEM_VCVTSI2SD, + /* 28A */ MNEM_VCVTSI2SS, + /* 28B */ MNEM_VCVTSS2SD, + /* 28C */ MNEM_VCVTSS2SI, + /* 28D */ MNEM_VCVTTPD2DQ, + /* 28E */ MNEM_VCVTTPS2DQ, + /* 28F */ MNEM_VCVTTSD2SI, + /* 290 */ MNEM_VCVTTSS2SI, + /* 291 */ MNEM_VDIVPD, + /* 292 */ MNEM_VDIVPS, + /* 293 */ MNEM_VDIVSD, + /* 294 */ MNEM_VDIVSS, + /* 295 */ MNEM_VDPPD, + /* 296 */ MNEM_VDPPS, + /* 297 */ MNEM_VERR, + /* 298 */ MNEM_VERW, + /* 299 */ MNEM_VEXTRACTF128, + /* 29A */ MNEM_VEXTRACTPS, + /* 29B */ MNEM_VHADDPD, + /* 29C */ MNEM_VHADDPS, + /* 29D */ MNEM_VHSUBPD, + /* 29E */ MNEM_VHSUBPS, + /* 29F */ MNEM_VINSERTF128, + /* 2A0 */ MNEM_VINSERTPS, + /* 2A1 */ MNEM_VLDDQU, + /* 2A2 */ MNEM_VMASKMOVDQU, + /* 2A3 */ MNEM_VMASKMOVPD, + /* 2A4 */ MNEM_VMASKMOVPS, + /* 2A5 */ MNEM_VMAXPD, + /* 2A6 */ MNEM_VMAXPS, + /* 2A7 */ MNEM_VMAXSD, + /* 2A8 */ MNEM_VMAXSS, + /* 2A9 */ MNEM_VMCALL, + /* 2AA */ MNEM_VMCLEAR, + /* 2AB */ MNEM_VMINPD, + /* 2AC */ MNEM_VMINPS, + /* 2AD */ MNEM_VMINSD, + /* 2AE */ MNEM_VMINSS, + /* 2AF */ MNEM_VMLAUNCH, + /* 2B0 */ MNEM_VMLOAD, + /* 2B1 */ MNEM_VMMCALL, + /* 2B2 */ MNEM_VMOVAPD, + /* 2B3 */ MNEM_VMOVAPS, + /* 2B4 */ MNEM_VMOVD, + /* 2B5 */ MNEM_VMOVDDUP, + /* 2B6 */ MNEM_VMOVDQA, + /* 2B7 */ MNEM_VMOVDQU, + /* 2B8 */ MNEM_VMOVHLPS, + /* 2B9 */ MNEM_VMOVHPD, + /* 2BA */ MNEM_VMOVHPS, + /* 2BB */ MNEM_VMOVLHPS, + /* 2BC */ MNEM_VMOVLPD, + /* 2BD */ MNEM_VMOVLPS, + /* 2BE */ MNEM_VMOVMSKPD, + /* 2BF */ MNEM_VMOVMSKPS, + /* 2C0 */ MNEM_VMOVNTDQ, + /* 2C1 */ MNEM_VMOVNTDQA, + /* 2C2 */ MNEM_VMOVNTPD, + /* 2C3 */ MNEM_VMOVNTPS, + /* 2C4 */ MNEM_VMOVQ, + /* 2C5 */ MNEM_VMOVSD, + /* 2C6 */ MNEM_VMOVSHDUP, + /* 2C7 */ MNEM_VMOVSLDUP, + /* 2C8 */ MNEM_VMOVSS, + /* 2C9 */ MNEM_VMOVUPD, + /* 2CA */ MNEM_VMOVUPS, + /* 2CB */ MNEM_VMPSADBW, + /* 2CC */ MNEM_VMPTRLD, + /* 2CD */ MNEM_VMPTRST, + /* 2CE */ MNEM_VMREAD, + /* 2CF */ MNEM_VMRESUME, + /* 2D0 */ MNEM_VMRUN, + /* 2D1 */ MNEM_VMSAVE, + /* 2D2 */ MNEM_VMULPD, + /* 2D3 */ MNEM_VMULPS, + /* 2D4 */ MNEM_VMULSD, + /* 2D5 */ MNEM_VMULSS, + /* 2D6 */ MNEM_VMWRITE, + /* 2D7 */ MNEM_VMXOFF, + /* 2D8 */ MNEM_VMXON, + /* 2D9 */ MNEM_VORPD, + /* 2DA */ MNEM_VORPS, + /* 2DB */ MNEM_VPABSB, + /* 2DC */ MNEM_VPABSD, + /* 2DD */ MNEM_VPABSW, + /* 2DE */ MNEM_VPACKSSDW, + /* 2DF */ MNEM_VPACKSSWB, + /* 2E0 */ MNEM_VPACKUSDW, + /* 2E1 */ MNEM_VPACKUSWB, + /* 2E2 */ MNEM_VPADDB, + /* 2E3 */ MNEM_VPADDD, + /* 2E4 */ MNEM_VPADDQ, + /* 2E5 */ MNEM_VPADDSB, + /* 2E6 */ MNEM_VPADDSW, + /* 2E7 */ MNEM_VPADDUSB, + /* 2E8 */ MNEM_VPADDUSW, + /* 2E9 */ MNEM_VPADDW, + /* 2EA */ MNEM_VPALIGNR, + /* 2EB */ MNEM_VPAND, + /* 2EC */ MNEM_VPANDN, + /* 2ED */ MNEM_VPAVGB, + /* 2EE */ MNEM_VPAVGW, + /* 2EF */ MNEM_VPBLENDVB, + /* 2F0 */ MNEM_VPBLENDW, + /* 2F1 */ MNEM_VPCLMULQDQ, + /* 2F2 */ MNEM_VPCMPEQB, + /* 2F3 */ MNEM_VPCMPEQD, + /* 2F4 */ MNEM_VPCMPEQQ, + /* 2F5 */ MNEM_VPCMPEQW, + /* 2F6 */ MNEM_VPCMPESTRI, + /* 2F7 */ MNEM_VPCMPESTRM, + /* 2F8 */ MNEM_VPCMPGTB, + /* 2F9 */ MNEM_VPCMPGTD, + /* 2FA */ MNEM_VPCMPGTQ, + /* 2FB */ MNEM_VPCMPGTW, + /* 2FC */ MNEM_VPCMPISTRI, + /* 2FD */ MNEM_VPCMPISTRM, + /* 2FE */ MNEM_VPERM2F128, + /* 2FF */ MNEM_VPERMILPD, + /* 300 */ MNEM_VPERMILPS, + /* 301 */ MNEM_VPEXTRB, + /* 302 */ MNEM_VPEXTRD, + /* 303 */ MNEM_VPEXTRQ, + /* 304 */ MNEM_VPEXTRW, + /* 305 */ MNEM_VPHADDD, + /* 306 */ MNEM_VPHADDSW, + /* 307 */ MNEM_VPHADDW, + /* 308 */ MNEM_VPHMINPOSUW, + /* 309 */ MNEM_VPHSUBD, + /* 30A */ MNEM_VPHSUBSW, + /* 30B */ MNEM_VPHSUBW, + /* 30C */ MNEM_VPINSRB, + /* 30D */ MNEM_VPINSRD, + /* 30E */ MNEM_VPINSRQ, + /* 30F */ MNEM_VPINSRW, + /* 310 */ MNEM_VPMADDUBSW, + /* 311 */ MNEM_VPMADDWD, + /* 312 */ MNEM_VPMAXSB, + /* 313 */ MNEM_VPMAXSD, + /* 314 */ MNEM_VPMAXSW, + /* 315 */ MNEM_VPMAXUB, + /* 316 */ MNEM_VPMAXUD, + /* 317 */ MNEM_VPMAXUW, + /* 318 */ MNEM_VPMINSB, + /* 319 */ MNEM_VPMINSD, + /* 31A */ MNEM_VPMINSW, + /* 31B */ MNEM_VPMINUB, + /* 31C */ MNEM_VPMINUD, + /* 31D */ MNEM_VPMINUW, + /* 31E */ MNEM_VPMOVMSKB, + /* 31F */ MNEM_VPMOVSXBD, + /* 320 */ MNEM_VPMOVSXBQ, + /* 321 */ MNEM_VPMOVSXBW, + /* 322 */ MNEM_VPMOVSXWD, + /* 323 */ MNEM_VPMOVSXWQ, + /* 324 */ MNEM_VPMOVZXBD, + /* 325 */ MNEM_VPMOVZXBQ, + /* 326 */ MNEM_VPMOVZXBW, + /* 327 */ MNEM_VPMOVZXDQ, + /* 328 */ MNEM_VPMOVZXWD, + /* 329 */ MNEM_VPMOVZXWQ, + /* 32A */ MNEM_VPMULDQ, + /* 32B */ MNEM_VPMULHRSW, + /* 32C */ MNEM_VPMULHUW, + /* 32D */ MNEM_VPMULHW, + /* 32E */ MNEM_VPMULLD, + /* 32F */ MNEM_VPMULLW, + /* 330 */ MNEM_VPOR, + /* 331 */ MNEM_VPSADBW, + /* 332 */ MNEM_VPSHUFB, + /* 333 */ MNEM_VPSHUFD, + /* 334 */ MNEM_VPSHUFHW, + /* 335 */ MNEM_VPSHUFLW, + /* 336 */ MNEM_VPSIGNB, + /* 337 */ MNEM_VPSIGND, + /* 338 */ MNEM_VPSIGNW, + /* 339 */ MNEM_VPSLLD, + /* 33A */ MNEM_VPSLLDQ, + /* 33B */ MNEM_VPSLLQ, + /* 33C */ MNEM_VPSLLW, + /* 33D */ MNEM_VPSRAD, + /* 33E */ MNEM_VPSRAW, + /* 33F */ MNEM_VPSRLD, + /* 340 */ MNEM_VPSRLDQ, + /* 341 */ MNEM_VPSRLQ, + /* 342 */ MNEM_VPSRLW, + /* 343 */ MNEM_VPSUBB, + /* 344 */ MNEM_VPSUBD, + /* 345 */ MNEM_VPSUBQ, + /* 346 */ MNEM_VPSUBSB, + /* 347 */ MNEM_VPSUBSW, + /* 348 */ MNEM_VPSUBUSB, + /* 349 */ MNEM_VPSUBUSW, + /* 34A */ MNEM_VPSUBW, + /* 34B */ MNEM_VPTEST, + /* 34C */ MNEM_VPUNPCKHBW, + /* 34D */ MNEM_VPUNPCKHDQ, + /* 34E */ MNEM_VPUNPCKHQDQ, + /* 34F */ MNEM_VPUNPCKHWD, + /* 350 */ MNEM_VPUNPCKLBW, + /* 351 */ MNEM_VPUNPCKLDQ, + /* 352 */ MNEM_VPUNPCKLQDQ, + /* 353 */ MNEM_VPUNPCKLWD, + /* 354 */ MNEM_VPXOR, + /* 355 */ MNEM_VRCPPS, + /* 356 */ MNEM_VRCPSS, + /* 357 */ MNEM_VROUNDPD, + /* 358 */ MNEM_VROUNDPS, + /* 359 */ MNEM_VROUNDSD, + /* 35A */ MNEM_VROUNDSS, + /* 35B */ MNEM_VRSQRTPS, + /* 35C */ MNEM_VRSQRTSS, + /* 35D */ MNEM_VSHUFPD, + /* 35E */ MNEM_VSHUFPS, + /* 35F */ MNEM_VSQRTPD, + /* 360 */ MNEM_VSQRTPS, + /* 361 */ MNEM_VSQRTSD, + /* 362 */ MNEM_VSQRTSS, + /* 363 */ MNEM_VSTMXCSR, + /* 364 */ MNEM_VSUBPD, + /* 365 */ MNEM_VSUBPS, + /* 366 */ MNEM_VSUBSD, + /* 367 */ MNEM_VSUBSS, + /* 368 */ MNEM_VTESTPD, + /* 369 */ MNEM_VTESTPS, + /* 36A */ MNEM_VUCOMISD, + /* 36B */ MNEM_VUCOMISS, + /* 36C */ MNEM_VUNPCKHPD, + /* 36D */ MNEM_VUNPCKHPS, + /* 36E */ MNEM_VUNPCKLPD, + /* 36F */ MNEM_VUNPCKLPS, + /* 370 */ MNEM_VXORPD, + /* 371 */ MNEM_VXORPS, + /* 372 */ MNEM_VZEROALL, + /* 373 */ MNEM_VZEROUPPER, + /* 374 */ MNEM_WAIT, + /* 375 */ MNEM_WBINVD, + /* 376 */ MNEM_WRMSR, + /* 377 */ MNEM_XADD, + /* 378 */ MNEM_XCHG, + /* 379 */ MNEM_XCRYPTCBC, + /* 37A */ MNEM_XCRYPTCFB, + /* 37B */ MNEM_XCRYPTCTR, + /* 37C */ MNEM_XCRYPTECB, + /* 37D */ MNEM_XCRYPTOFB, + /* 37E */ MNEM_XGETBV, + /* 37F */ MNEM_XLATB, + /* 380 */ MNEM_XOR, + /* 381 */ MNEM_XORPD, + /* 382 */ MNEM_XORPS, + /* 383 */ MNEM_XRSTOR, + /* 384 */ MNEM_XSAVE, + /* 385 */ MNEM_XSETBV, + /* 386 */ MNEM_XSHA1, + /* 387 */ MNEM_XSHA256, + /* 388 */ MNEM_XSTORE, + + MNEM_FORCE_WORD = 0x7FFF +} VXInstructionMnemonic; + +/** + * @brief Defines an alias representing an opcode tree node. An opcode tree node is a 16 bit + * unsigned integer value with its first 4 bits reserved for the node type. + */ +typedef uint16_t VXOpcodeTreeNode; + +/** + * @brief Values that represent the type of an opcode tree node. + */ +typedef enum _VXOpcodeTreeNodeType /* : uint8_t */ +{ + /** + * @brief Reference to a concrete instruction definition. + */ + OTNT_INSTRUCTION_DEFINITION = 0, + /** + * @brief Reference to an opcode table. + */ + OTNT_TABLE = 1, + /** + * @brief Reference to a modrm_mod switch table. + */ + OTNT_MODRM_MOD = 2, + /** + * @brief Reference to a modrm_reg switch table. + */ + OTNT_MODRM_REG = 3, + /** + * @brief Reference to a modrm_rm switch table. + */ + OTNT_MODRM_RM = 4, + /** + * @brief Reference to a mandatory-prefix switch table. + */ + OTNT_MANDATORY = 5, + /** + * @brief Reference to a x87 opcode table. + */ + OTNT_X87 = 6, + /** + * @brief Reference to an address-size switch table. + */ + OTNT_ADDRESS_SIZE = 7, + /** + * @brief Reference to an operand-size switch table. + */ + OTNT_OPERAND_SIZE = 8, + /** + * @brief Reference to a cpu-mode switch table. + */ + OTNT_MODE = 9, + /** + * @brief Reference to a vendor switch table. + */ + OTNT_VENDOR = 10, + /** + * @brief Reference to a 3dnow! opcode table. + */ + OTNT_AMD3DNOW = 11, + /** + * @brief Reference to a vex-prefix switch table. + */ + OTNT_VEX = 12, + /** + * @brief Reference to a vex_w switch table. + */ + OTNT_VEXW = 13, + /** + * @brief Reference to a vex_l switch table. + */ + OTNT_VEXL = 14 +} VXOpcodeTreeNodeType; + +/** + * @brief Values that represent the type of an operand in the instruction definition. + */ +typedef enum _VXDefinedOperandType /* : uint8_t */ +{ + /* + * @brief No operand. + */ + DOT_NONE, + /* + * @brief Direct address. The instruction has no ModR/M byte; the address of the operand is + * encoded in the instruction; no base register, index register, or scaling factor + * can be applied. + */ + DOT_A, + /* + * @brief The reg field of the ModR/M byte selects a control register. + */ + DOT_C, + /* + * @brief The reg field of the ModR/M byte selects a debug register. + */ + DOT_D, + /* + * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either + * a general-purpose register or a memory address. If it is a memory address, the + * address is computed from a segment register and any of the following values: + * a base register, an index register, a scaling factor, or a displacement. + */ + DOT_E, + /* + * @brief rFLAGS register. + */ + DOT_F, + /* + * @brief The reg field of the ModR/M byte selects a general register. + */ + DOT_G, + /* + * @brief The r/m field of the ModR/M byte always selects a general register, regardless of + * the mod field. + */ + DOT_H, + /* + * @brief Immediate data. The operand value is encoded in subsequent bytes of the + * instruction. + */ + DOT_I, + /* + * @brief Signed immediate data. The operand value is encoded in subsequent bytes of the + * instruction. + */ + DOT_sI, + /* + * @brief Constant immediate data value of 1. + */ + DOT_I1, + /* + * @brief The instruction contains a relative offset to be added to the instruction pointer + * register. + */ + DOT_J, + /* + * @brief Source operand is encoded in immediate byte (VEX only). + */ + DOT_L, + /* + * @brief The ModR/M byte may refer only to memory: mod != 11bin. + */ + DOT_M, + /* + * @brief Combination of M and R. + */ + DOT_MR, + /* + * @brief Combination of M and U. + */ + DOT_MU, + /* + * @brief The R/M field of the ModR/M byte selects a packed quadword MMX technology register. + */ + DOT_N, + /* + * @brief The instruction has no ModR/M byte; the offset of the operand is coded as a word, + * double word or quad word (depending on address size attribute) in the instruction. + * No base register, index register, or scaling factor can be applied. + */ + DOT_O, + /* + * @brief The reg field of the ModR/M byte selects a packed quadword MMX technology register. + */ + DOT_P, + /* + * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either + * an MMX technology register or a memory address. If it is a memory address, the + * address is computed from a segment register and any of the following values: + * a base register, an index register, a scaling factor, and a displacement. + */ + DOT_Q, + /* + * @brief The mod field of the ModR/M byte may refer only to a general register. + */ + DOT_R, + /* + * @brief The reg field of the ModR/M byte selects a segment register. + */ + DOT_S, + /* + * @brief The R/M field of the ModR/M byte selects a 128-bit XMM register. + */ + DOT_U, + /* + * @brief The reg field of the ModR/M byte selects a 128-bit XMM register. + */ + DOT_V, + /* + * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either + * a 128-bit XMM register or a memory address. If it is a memory address, the address + * is computed from a segment register and any of the following values: + * a base register, an index register, a scaling factor, and a displacement. + */ + DOT_W, + /** + * @brief Register 0. + */ + DOT_R0, + /** + * @brief Register 1. + */ + DOT_R1, + /** + * @brief Register 2. + */ + DOT_R2, + /** + * @brief Register 3. + */ + DOT_R3, + /** + * @brief Register 4. + */ + DOT_R4, + /** + * @brief Register 5. + */ + DOT_R5, + /** + * @brief Register 6. + */ + DOT_R6, + /** + * @brief Register 7. + */ + DOT_R7, + /** + * @brief AL register. + */ + DOT_AL, + /** + * @brief CL register. + */ + DOT_CL, + /** + * @brief DL register. + */ + DOT_DL, + /** + * @brief AX register. + */ + DOT_AX, + /** + * @brief CX register. + */ + DOT_CX, + /** + * @brief DX register. + */ + DOT_DX, + /** + * @brief EAX register. + */ + DOT_EAX, + /** + * @brief ECX register. + */ + DOT_ECX, + /** + * @brief EDX register. + */ + DOT_EDX, + /** + * @brief RAX register. + */ + DOT_RAX, + /** + * @brief RCX register. + */ + DOT_RCX, + /** + * @brief RDX register. + */ + DOT_RDX, + /** + * @brief ES segment register. + */ + DOT_ES, + /** + * @brief CS segment register. + */ + DOT_CS, + /** + * @brief SS segment register. + */ + DOT_SS, + /** + * @brief DS segment register. + */ + DOT_DS, + /** + * @brief FS segment register. + */ + DOT_FS, + /** + * @brief GS segment register. + */ + DOT_GS, + /** + * @brief Floating point register 0. + */ + DOT_ST0, + /** + * @brief Floating point register 1. + */ + DOT_ST1, + /** + * @brief Floating point register 2. + */ + DOT_ST2, + /** + * @brief Floating point register 3. + */ + DOT_ST3, + /** + * @brief Floating point register 4. + */ + DOT_ST4, + /** + * @brief Floating point register 5. + */ + DOT_ST5, + /** + * @brief Floating point register 6. + */ + DOT_ST6, + /** + * @brief Floating point register 7. + */ + DOT_ST7 +} VXDefinedOperandType; + +/** + * @brief Values that represent the size of an operand in the instruction definition. + * Do not change the order or the values of this enum! + */ +typedef enum _VXDefinedOperandSize /* : uint8_t */ +{ + /** + * @brief No operand. + */ + DOS_NA = 0, + /** + * @brief Word, dword or qword. + */ + DOS_Z, + /** + * @brief Word, dword or qword. + */ + DOS_V, + /** + * @brief Dword or qword. + */ + DOS_Y, + /** + * @brief Oword or yword. + */ + DOS_X, + /** + * @brief Dword or qword, depending on the disassembler mode. + */ + DOS_RDQ, + /* + * @brief Byte, regardless of operand-size attribute. + */ + DOS_B, + /* + * @brief Word, regardless of operand-size attribute. + */ + DOS_W, + /* + * @brief Doubleword, regardless of operand-size attribute. + */ + DOS_D, + /* + * @brief Quadword, regardless of operand-size attribute. + */ + DOS_Q, + /* + * @brief 10-byte far pointer. + */ + DOS_T, + /** + * @brief TODO: + */ + DOS_O, + /* + * @brief Double-quadword, regardless of operand-size attribute. + */ + DOS_DQ, + /* + * @brief Quad-quadword, regardless of operand-size attribute. + */ + DOS_QQ, + /** + * @brief B sized register or D sized memory operand. + */ + DOS_BD = (uint8_t(DOS_B) << 4) | uint8_t(DOS_D), + /** + * @brief B sized register or V sized memory operand. + */ + DOS_BV = (uint8_t(DOS_B) << 4) | uint8_t(DOS_V), + /** + * @brief W sized register or D sized memory operand. + */ + DOS_WD = (uint8_t(DOS_W) << 4) | uint8_t(DOS_D), + /** + * @brief W sized register or V sized memory operand. + */ + DOS_WV = (uint8_t(DOS_W) << 4) | uint8_t(DOS_V), + /** + * @brief W sized register or Y sized memory operand. + */ + DOS_WY = (uint8_t(DOS_W) << 4) | uint8_t(DOS_Y), + /** + * @brief D sized register or Y sized memory operand. + */ + DOS_DY = (uint8_t(DOS_D) << 4) | uint8_t(DOS_Y), + /** + * @brief W sized register or O sized memory operand. + */ + DOS_WO = (uint8_t(DOS_W) << 4) | uint8_t(DOS_O), + /** + * @brief D sized register or O sized memory operand. + */ + DOS_DO = (uint8_t(DOS_D) << 4) | uint8_t(DOS_O), + /** + * @brief Q sized register or O sized memory operand. + */ + DOS_QO = (uint8_t(DOS_Q) << 4) | uint8_t(DOS_O), +} VXDefinedOperandSize; + +/** + * @brief Values that represent optional flags in the instruction definition. + * Do not change the order or the values of this enum! + */ +typedef enum _VXInstructionDefinitionFlags /* : uint16_t */ +{ + /** + * @brief The instruction accepts the rex.b prefix value. + */ + IDF_ACCEPTS_REXB = 0x0001, + /** + * @brief The instruction accepts the rex.x prefix value. + */ + IDF_ACCEPTS_REXX = 0x0002, + /** + * @brief The instruction accepts the rex.r prefix value. + */ + IDF_ACCEPTS_REXR = 0x0004, + /** + * @brief The instruction accepts the rex.w prefix value. + */ + IDF_ACCEPTS_REXW = 0x0008, + /** + * @brief The instruction accepts the address size override prefix (0x67). + */ + IDF_ACCEPTS_ADDRESS_SIZE_PREFIX = 0x0010, + /** + * @brief The instruction accepts the operand size override prefix (0x66). + */ + IDF_ACCEPTS_OPERAND_SIZE_PREFIX = 0x0020, + /** + * @brief The instruction accepts the segment override prefix. + */ + IDF_ACCEPTS_SEGMENT_PREFIX = 0x0040, + /** + * @brief The instruction accepts the REP prefix. + */ + IDF_ACCEPTS_REP_PREFIX = 0x0080, + /** + * @brief The instruction accepts the vex.l prefix value. + */ + IDF_ACCEPTS_VEXL = 0x0100, + /** + * @brief The instruction is invalid in 64 bit mode. + */ + IDF_INVALID_64 = 0x0200, + /** + * @brief The instructions operand size defaults to quadword in 64 bit mode. + */ + IDF_DEFAULT_64 = 0x0400, + /** + * @brief The first operand of the instruction is accessed in write mode. + */ + IDF_OPERAND1_WRITE = 0x0800, + /** + * @brief The first operand of the instruction is accessed in read-write mode. + */ + IDF_OPERAND1_READWRITE = 0x1000, + /** + * @brief The second operand of the instruction is accessed in write mode. + */ + IDF_OPERAND2_WRITE = 0x2000, + /** + * @brief The second operand of the instruction is accessed in read-write mode. + */ + IDF_OPERAND2_READWRITE = 0x4000, + + IDF_FORCE_WORD = 0x7FFF +} VXInstructionDefinitionFlags; + +#pragma pack (push, 1) +/** + * @brief An operand definition. + */ +typedef struct _VXOperandDefinition +{ + /** + * @brief The defined operand type. + * @see VXDefinedOperandType + */ + uint8_t type; + /** + * @brief The defined operand size. + * @see VXDefinedOperandType + */ + uint8_t size; +} VXOperandDefinition; + +/** + * @brief An instruction definition. + */ +typedef struct _VXInstructionDefinition +{ + /** + * @brief The instruction mnemonic. + * @see VXInstructionMnemonic + */ + uint16_t mnemonic; + /** + * @brief The operand definitions for all four possible operands. + */ + VXOperandDefinition operand[4]; + /** + * @brief Additional flags for the instruction definition. + */ + uint16_t flags; +} VXInstructionDefinition; +#pragma pack (pop) + +#ifdef __cplusplus +} +#endif + +#endif // _VDE_VXOPCODETABLEC_H_ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index d424d6f..bb9669f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 2.8.12) project(VerteronDisassemblerEngine) option(BUILD_EXAMPLES "Build examples" TRUE) +option(BUILD_C_BINDINGS "Build C bindings" TRUE) # TODO: default to FALSE when ready if (NOT CONFIGURED_ONCE) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR @@ -32,29 +33,45 @@ set(vde_sources "VerteronDisassemblerEngine/VXOpcodeTable.cpp" "VerteronDisassemblerEngine/VXInstructionDecoder.cpp") -add_library("VerteronDisassemblerEngine" - ${vde_headers} - ${vde_sources}) +add_library("VerteronDisassemblerEngine" ${vde_headers} ${vde_sources}) + +# C bindings +if (BUILD_C_BINDINGS) + set(vdec_headers + "Bindings/C/VXDisassemblerC.h" + "Bindings/C/VXDisassemblerTypesC.h" + "Bindings/C/VXDisassemblerUtilsC.h" + "Bindings/C/VXInstructionDecoderC.h" + "Bindings/C/VXInstructionFormatterC.h" + "Bindings/C/VXOpcodeTableC.h") + set(vdec_sources + "Bindings/C/VXDisassemblerUtilsC.cpp" + "Bindings/C/VXInstructionFormatterC.cpp" + "Bindings/C/VXOpcodeTableC.cpp" + "Bindings/C/VXInstructionDecoderC.cpp") + add_library("VerteronDisassemblerEngineC" ${vdec_headers} ${vdec_sources}) +endif () # Examples if (BUILD_EXAMPLES) include_directories("VerteronDisassemblerEngine") - add_executable("CustomDataSource" - "Examples/CustomDataSource/Main.cpp") + add_executable("CustomDataSource" "Examples/CustomDataSource/Main.cpp") target_link_libraries("CustomDataSource" "VerteronDisassemblerEngine") - add_executable("PerformanceTest" - "Examples/PerformanceTest/Main.cpp") + add_executable("PerformanceTest" "Examples/PerformanceTest/Main.cpp") target_link_libraries("PerformanceTest" "VerteronDisassemblerEngine") - add_executable("SimpleDemo" - "Examples/SimpleDemo/Main.cpp") + add_executable("SimpleDemo" "Examples/SimpleDemo/Main.cpp") target_link_libraries("SimpleDemo" "VerteronDisassemblerEngine") + if (BUILD_C_BINDINGS) + add_executable("CBindingsTest" "Examples/CBindings/test.c") + target_link_libraries("CBindingsTest" "VerteronDisassemblerEngineC") + endif () + if (WIN32) - add_executable("SymbolResolver" - "Examples/SymbolResolver/Main.cpp") + add_executable("SymbolResolver" "Examples/SymbolResolver/Main.cpp") target_link_libraries("SymbolResolver" "VerteronDisassemblerEngine") else () message(STATUS "Example 'SymbolResolver' not compatible with platform, ignoring.") diff --git a/Examples/CBindings/test.c b/Examples/CBindings/test.c new file mode 100644 index 0000000..4ab7b90 --- /dev/null +++ b/Examples/CBindings/test.c @@ -0,0 +1,36 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 04. February 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +int main() +{ + +} \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXDisassemblerTypes.h b/VerteronDisassemblerEngine/VXDisassemblerTypes.h index cf0b902..b4d97b9 100644 --- a/VerteronDisassemblerEngine/VXDisassemblerTypes.h +++ b/VerteronDisassemblerEngine/VXDisassemblerTypes.h @@ -188,7 +188,7 @@ enum class VXRegister : uint16_t /** * @brief Values that represent the type of a decoded operand. */ -enum class VXOperandType +enum class VXOperandType : uint8_t { /** * @brief The operand is not used. @@ -223,7 +223,7 @@ enum class VXOperandType /** * @brief Values that represent the operand access mode. */ -enum class VXOperandAccessMode +enum class VXOperandAccessMode : uint8_t { NA, /** diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.h b/VerteronDisassemblerEngine/VXInstructionDecoder.h index ba5cf54..70b02c5 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.h +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.h @@ -370,7 +370,7 @@ inline bool VXStreamDataSource::setPosition(uint64_t position) /** * @brief Values that represent a disassembler mode. */ -enum class VXDisassemblerMode +enum class VXDisassemblerMode : uint8_t { M16BIT, M32BIT, @@ -380,7 +380,7 @@ enum class VXDisassemblerMode /** * @brief Values that represent an instruction-set vendor. */ -enum class VXInstructionSetVendor +enum class VXInstructionSetVendor : uint8_t { ANY, INTEL, @@ -394,7 +394,7 @@ enum class VXInstructionSetVendor class VXInstructionDecoder { private: - enum class RegisterClass + enum class RegisterClass : uint8_t { GENERAL_PURPOSE, MMX, From 7af8c0e38b1570e4e10c2f67c770012e6d6d19b0 Mon Sep 17 00:00:00 2001 From: Ende! Date: Fri, 6 Feb 2015 03:16:39 +0100 Subject: [PATCH 05/33] fixed build with apple-clang --- Bindings/C/VXInstructionDecoderC.h | 7 ++++--- Bindings/C/VXInstructionFormatterC.h | 6 +++--- CMakeLists.txt | 7 ++++--- VerteronDisassemblerEngine/VXInstructionFormatter.h | 1 + 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Bindings/C/VXInstructionDecoderC.h b/Bindings/C/VXInstructionDecoderC.h index 1741630..e40e528 100644 --- a/Bindings/C/VXInstructionDecoderC.h +++ b/Bindings/C/VXInstructionDecoderC.h @@ -38,6 +38,7 @@ #include "VXDisassemblerTypesC.h" #include +#include #ifdef __cplusplus extern "C" @@ -46,7 +47,7 @@ extern "C" /* VXBaseDataSource ============================================================================ */ -typedef struct _VXBaseDataSourceContext {} VXBaseDataSourceContext; +typedef struct _VXBaseDataSourceContext { int a; } VXBaseDataSourceContext; void VXBaseDataSource_Release( VXBaseDataSourceContext *ctx); @@ -102,7 +103,7 @@ typedef enum _VXInstructionSetVendor /* : uint8_t */ /* VXInstructionDecoder ======================================================================== */ -typedef struct _VXInstructionDecoderContext {} VXInstructionDecoderContext; +typedef struct _VXInstructionDecoderContext { int a; } VXInstructionDecoderContext; VXInstructionDecoderContext* VXInstructionDecoder_Create(void); @@ -152,4 +153,4 @@ void VXInstructionDecoder_SetInstructionPointer( } #endif -#endif /* _VDE_VXINSTRUCTIONDECODERC_H_ */ \ No newline at end of file +#endif /* _VDE_VXINSTRUCTIONDECODERC_H_ */ diff --git a/Bindings/C/VXInstructionFormatterC.h b/Bindings/C/VXInstructionFormatterC.h index 3d120bf..66319ec 100644 --- a/Bindings/C/VXInstructionFormatterC.h +++ b/Bindings/C/VXInstructionFormatterC.h @@ -42,7 +42,7 @@ extern "C" /* VXBaseSymbolResolver ======================================================================== */ -typedef struct _VXBaseSymbolResolverContext {} VXBaseSymbolResolverContext; + typedef struct _VXBaseSymbolResolverContext { int a; } VXBaseSymbolResolverContext; VXBaseSymbolResolverContext* VXBaseSymbolResolver_Create(void); @@ -85,7 +85,7 @@ typedef const char* (*VXResolveSymbol_t)( /* VXBaseInstructionFormatter ================================================================== */ -typedef struct _VXBaseInstructionFormatterContext {} VXBaseInstructionFormatterContext; + typedef struct _VXBaseInstructionFormatterContext {int a;} VXBaseInstructionFormatterContext; VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( const VXBaseInstructionFormatterContext *ctx); @@ -98,7 +98,7 @@ void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx); /* VXIntelInstructionFormatter ================================================================ */ -typedef struct _VXIntelInstructionFormatterContext {} VXIntelInstructionFormatterContext; + typedef struct _VXIntelInstructionFormatterContext {int a;} VXIntelInstructionFormatterContext; VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); diff --git a/CMakeLists.txt b/CMakeLists.txt index bb9669f..b7ef67b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,12 +8,13 @@ option(BUILD_C_BINDINGS "Build C bindings" TRUE) # TODO: default to FALSE when r if (NOT CONFIGURED_ONCE) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(compiler_specific "-std=c++0x -Werror") + set(compiler_specific "-Werror") + set(compiler_specific_cxx "-std=c++0x") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") set(compiler_specific "/WX /D_CRT_SECURE_NO_WARNINGS") endif () - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${compiler_specific}" + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${compiler_specific} ${compiler_specific_cxx}" CACHE STRING "Flags used by the compiler during all build types." FORCE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${compiler_specific}" CACHE STRING "Flags used by the compiler during all build types." FORCE) @@ -78,4 +79,4 @@ if (BUILD_EXAMPLES) endif () endif () -set(CONFIGURED_ONCE TRUE CACHE INTERNAL "CMake has configured at least once.") \ No newline at end of file +set(CONFIGURED_ONCE TRUE CACHE INTERNAL "CMake has configured at least once.") diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.h b/VerteronDisassemblerEngine/VXInstructionFormatter.h index f24b0a3..762eeab 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.h +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.h @@ -33,6 +33,7 @@ #include #include +#include #include "VXDisassemblerTypes.h" namespace Verteron From c672c7a9fca9a5c970f3f757d6a08b2637c62965 Mon Sep 17 00:00:00 2001 From: Ende! Date: Sat, 7 Feb 2015 01:09:27 +0100 Subject: [PATCH 06/33] implemented CBindings/test.c fixed a few bugs in the C bindings encountered while implementing the test --- Bindings/C/VXDisassemblerC.h | 8 +-- Bindings/C/VXDisassemblerTypesC.h | 1 + Bindings/C/VXInstructionDecoderC.h | 6 +- Bindings/C/VXInstructionFormatterC.cpp | 18 +++--- Bindings/C/VXInstructionFormatterC.h | 8 ++- Bindings/C/VXOpcodeTableC.h | 18 +++--- CMakeLists.txt | 2 + Examples/CBindings/test.c | 84 +++++++++++++++++++++++++- 8 files changed, 117 insertions(+), 28 deletions(-) diff --git a/Bindings/C/VXDisassemblerC.h b/Bindings/C/VXDisassemblerC.h index 57cf832..73f4ec1 100644 --- a/Bindings/C/VXDisassemblerC.h +++ b/Bindings/C/VXDisassemblerC.h @@ -35,9 +35,9 @@ #ifndef _VDE_VXDISASSEMBLERC_H_ #define _VDE_VXDISASSEMBLERC_H_ -#include "VXDisassemblerTypes.h" -#include "VXInstructionDecoder.h" -#include "VXInstructionFormatter.h" -#include "VXDisassemblerUtils.h" +#include "VXDisassemblerTypesC.h" +#include "VXInstructionDecoderC.h" +#include "VXInstructionFormatterC.h" +#include "VXDisassemblerUtilsC.h" #endif /* _VDE_VXDISASSEMBLERC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXDisassemblerTypesC.h b/Bindings/C/VXDisassemblerTypesC.h index b7fcd75..a70f369 100644 --- a/Bindings/C/VXDisassemblerTypesC.h +++ b/Bindings/C/VXDisassemblerTypesC.h @@ -36,6 +36,7 @@ #define _VDE_VXDISASSEMBLERTYPESC_H_ #include +#include #include "VXOpcodeTableC.h" #ifdef __cplusplus diff --git a/Bindings/C/VXInstructionDecoderC.h b/Bindings/C/VXInstructionDecoderC.h index e40e528..bda21ae 100644 --- a/Bindings/C/VXInstructionDecoderC.h +++ b/Bindings/C/VXInstructionDecoderC.h @@ -109,9 +109,9 @@ VXInstructionDecoderContext* VXInstructionDecoder_Create(void); VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( VXBaseDataSourceContext *input, - VXDisassemblerMode disassemblerMode = DM_M32BIT, - VXInstructionSetVendor preferredVendor = ISV_ANY, - uint64_t instructionPointer = 0); + VXDisassemblerMode disassemblerMode, + VXInstructionSetVendor preferredVendor, + uint64_t instructionPointer); void VXInstructionDecoder_Release( VXInstructionDecoderContext *ctx); diff --git a/Bindings/C/VXInstructionFormatterC.cpp b/Bindings/C/VXInstructionFormatterC.cpp index 1083354..13920b3 100644 --- a/Bindings/C/VXInstructionFormatterC.cpp +++ b/Bindings/C/VXInstructionFormatterC.cpp @@ -113,13 +113,13 @@ inline const Verteron::VXBaseInstructionFormatter* VXBaseInstructionFormatter_Cp } inline Verteron::VXBaseInstructionFormatter* VXIntelInstructionFormatter_CppPtr( - VXIntelInstructionFormatterContext *ctx) + VXBaseInstructionFormatterContext *ctx) { return reinterpret_cast(ctx); } inline const Verteron::VXBaseInstructionFormatter* VXIntelInstructionFormatter_CppPtr( - const VXIntelInstructionFormatterContext *ctx) + const VXBaseInstructionFormatterContext *ctx) { return reinterpret_cast(ctx); } @@ -136,7 +136,6 @@ inline const VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CPtr return reinterpret_cast(ctx); } - } /* VXBaseSymbolResolver ======================================================================== */ @@ -201,6 +200,14 @@ void VXExactSymbolResolverContext_Clear( /* VXBaseInstructionFormatter ================================================================== */ +const char* VXBaseInstructionFormatter_FormatInstruction( + VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info) +{ + return VXBaseInstructionFormatter_CppPtr(ctx)->formatInstruction( + *VXInstructionInfo_CppPtr(info)); +} + VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( const VXBaseInstructionFormatterContext *ctx) { @@ -236,9 +243,4 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( VXBaseSymbolResolver_CppPtr(resolver))); } -void VXIntelInstructionFormatter_Release(VXIntelInstructionFormatterContext *ctx) -{ - delete VXIntelInstructionFormatter_CppPtr(ctx); -} - /* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionFormatterC.h b/Bindings/C/VXInstructionFormatterC.h index 66319ec..66608d0 100644 --- a/Bindings/C/VXInstructionFormatterC.h +++ b/Bindings/C/VXInstructionFormatterC.h @@ -85,7 +85,11 @@ typedef const char* (*VXResolveSymbol_t)( /* VXBaseInstructionFormatter ================================================================== */ - typedef struct _VXBaseInstructionFormatterContext {int a;} VXBaseInstructionFormatterContext; +typedef struct _VXBaseInstructionFormatterContext {int a;} VXBaseInstructionFormatterContext; + +const char* VXBaseInstructionFormatter_FormatInstruction( + VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info); VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( const VXBaseInstructionFormatterContext *ctx); @@ -98,8 +102,6 @@ void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx); /* VXIntelInstructionFormatter ================================================================ */ - typedef struct _VXIntelInstructionFormatterContext {int a;} VXIntelInstructionFormatterContext; - VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( diff --git a/Bindings/C/VXOpcodeTableC.h b/Bindings/C/VXOpcodeTableC.h index 34e422f..c6d3bf2 100644 --- a/Bindings/C/VXOpcodeTableC.h +++ b/Bindings/C/VXOpcodeTableC.h @@ -1354,39 +1354,39 @@ typedef enum _VXDefinedOperandSize /* : uint8_t */ /** * @brief B sized register or D sized memory operand. */ - DOS_BD = (uint8_t(DOS_B) << 4) | uint8_t(DOS_D), + DOS_BD = (DOS_B << 4) | DOS_D, /** * @brief B sized register or V sized memory operand. */ - DOS_BV = (uint8_t(DOS_B) << 4) | uint8_t(DOS_V), + DOS_BV = (DOS_B << 4) | DOS_V, /** * @brief W sized register or D sized memory operand. */ - DOS_WD = (uint8_t(DOS_W) << 4) | uint8_t(DOS_D), + DOS_WD = (DOS_W << 4) | DOS_D, /** * @brief W sized register or V sized memory operand. */ - DOS_WV = (uint8_t(DOS_W) << 4) | uint8_t(DOS_V), + DOS_WV = (DOS_W << 4) | DOS_V, /** * @brief W sized register or Y sized memory operand. */ - DOS_WY = (uint8_t(DOS_W) << 4) | uint8_t(DOS_Y), + DOS_WY = (DOS_W << 4) | DOS_Y, /** * @brief D sized register or Y sized memory operand. */ - DOS_DY = (uint8_t(DOS_D) << 4) | uint8_t(DOS_Y), + DOS_DY = (DOS_D << 4) | DOS_Y, /** * @brief W sized register or O sized memory operand. */ - DOS_WO = (uint8_t(DOS_W) << 4) | uint8_t(DOS_O), + DOS_WO = (DOS_W << 4) | DOS_O, /** * @brief D sized register or O sized memory operand. */ - DOS_DO = (uint8_t(DOS_D) << 4) | uint8_t(DOS_O), + DOS_DO = (DOS_D << 4) | DOS_O, /** * @brief Q sized register or O sized memory operand. */ - DOS_QO = (uint8_t(DOS_Q) << 4) | uint8_t(DOS_O), + DOS_QO = (DOS_Q << 4) | DOS_O, } VXDefinedOperandSize; /** diff --git a/CMakeLists.txt b/CMakeLists.txt index b7ef67b..099d968 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,7 @@ if (BUILD_C_BINDINGS) "Bindings/C/VXOpcodeTableC.cpp" "Bindings/C/VXInstructionDecoderC.cpp") add_library("VerteronDisassemblerEngineC" ${vdec_headers} ${vdec_sources}) + target_link_libraries("VerteronDisassemblerEngineC" "VerteronDisassemblerEngine") endif () # Examples @@ -68,6 +69,7 @@ if (BUILD_EXAMPLES) if (BUILD_C_BINDINGS) add_executable("CBindingsTest" "Examples/CBindings/test.c") + include_directories("Bindings/C") target_link_libraries("CBindingsTest" "VerteronDisassemblerEngineC") endif () diff --git a/Examples/CBindings/test.c b/Examples/CBindings/test.c index 4ab7b90..3cfa534 100644 --- a/Examples/CBindings/test.c +++ b/Examples/CBindings/test.c @@ -30,7 +30,89 @@ **************************************************************************************************/ +#include + +#include +#include + int main() { - + uint8_t data32[] = + { + 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x6A, 0xFE, 0x68, 0xD8, 0x18, 0x09, 0x77, 0x68, 0x85, 0xD2, + 0x09, 0x77, 0x64, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x50, 0x83, 0xEC, 0x14, 0x53, 0x56, 0x57, + 0xA1, 0x68, 0xEE, 0x13, 0x77, 0x31, 0x45, 0xF8, 0x33, 0xC5, 0x50, 0x8D, 0x45, 0xF0, 0x64, + 0xA3, 0x00, 0x00, 0x00, 0x00, 0x89, 0x65, 0xE8, 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x8B, 0x5D, 0x08, 0xF6, 0xC3, 0x04, 0x0F, 0x85, 0x57, 0x74, 0x00, 0x00, 0x53, 0x6A, 0x00, + 0xFF, 0x35, 0xA0, 0xE3, 0x13, 0x77, 0xFF, 0x15, 0x00, 0x10, 0x14, 0x77, 0x85, 0xC0, 0x0F, + 0x84, 0xC6, 0x48, 0x04, 0x00, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xFC, + 0xFE, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0x8B, 0x4D, 0xF0, 0x64, 0x89, 0x0D, 0x00, 0x00, 0x00, + 0x00, 0x59, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00 + }; + uint8_t data64[] = + { + 0x48, 0x89, 0x5C, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4C, 0x24, 0x08, 0x57, + 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xEC, 0x40, 0x4C, 0x8B, 0xF2, + 0x8B, 0xD9, 0x48, 0xC7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x33, 0xF6, 0x48, 0x89, + 0x74, 0x24, 0x30, 0x45, 0x33, 0xFF, 0xF7, 0xC1, 0x8D, 0xF0, 0xFF, 0xFF, 0x0F, 0x85, 0xAA, + 0x53, 0x08, 0x00, 0xF6, 0xC1, 0x40, 0x8B, 0xFE, 0x41, 0xBD, 0x08, 0x00, 0x00, 0x00, 0x41, + 0x0F, 0x45, 0xFD, 0xF6, 0xC1, 0x02, 0x48, 0x8B, 0x0D, 0x10, 0xD4, 0x0E, 0x00, 0x0F, 0x85, + 0x40, 0xE1, 0x01, 0x00, 0x8B, 0x15, 0x4C, 0xD5, 0x0E, 0x00, 0x81, 0xC2, 0x00, 0x00, 0x14, + 0x00, 0x0B, 0xD7, 0x4D, 0x8B, 0xC6, 0xFF, 0x15, 0x3B, 0x2F, 0x10, 0x00, 0x48, 0x8B, 0xD8, + 0x48, 0x85, 0xC0, 0x0F, 0x84, 0x93, 0x78, 0x0A, 0x00, 0x48, 0x8B, 0xC3, 0x48, 0x8B, 0x5C, + 0x24, 0x78, 0x48, 0x8B, 0xB4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0x40, 0x41, + 0x5F, 0x41, 0x5E, 0x41, 0x5D, 0x41, 0x5C, 0x5F, 0xC3 + }; + + VXInstructionInfo info; + VXInstructionDecoderContext* decoder = NULL; + VXBaseInstructionFormatterContext* formatter = NULL; + VXBaseDataSourceContext* input32 = NULL; + VXBaseDataSourceContext* input64 = NULL; + + decoder = VXInstructionDecoder_Create(); + formatter = VXIntelInstructionFormatter_Create(); + + input32 = VXMemoryDataSource_Create(&data32[0], sizeof(data32)); + input64 = VXMemoryDataSource_Create(&data64[0], sizeof(data64)); + + VXInstructionDecoder_SetDisassemblerMode(decoder, DM_M32BIT); + VXInstructionDecoder_SetDataSource(decoder, input32); + VXInstructionDecoder_SetInstructionPointer(decoder, 0x77091852); + + puts("32 bit test ...\n\n"); + while (VXInstructionDecoder_DecodeInstruction(decoder, &info)) + { + printf("%08X ", (uint32_t)(info.instrAddress & 0xFFFFFFFF)); + if (info.flags & IF_ERROR_MASK) + { + printf("db %02X\n", info.data[0]); + } + else + { + printf("%s\n", VXBaseInstructionFormatter_FormatInstruction(formatter, &info)); + } + } + + puts("\n"); + + VXInstructionDecoder_SetDisassemblerMode(decoder, DM_M64BIT); + VXInstructionDecoder_SetDataSource(decoder, input64); + VXInstructionDecoder_SetInstructionPointer(decoder, 0x00007FFA39A81930ull); + puts("64 bit test ...\n\n"); + while (VXInstructionDecoder_DecodeInstruction(decoder, &info)) + { + printf("%016llX ", info.instrAddress); + if (info.flags & IF_ERROR_MASK) + { + printf("db %02X", info.data[0]); + } + else + { + printf("%s\n", VXBaseInstructionFormatter_FormatInstruction(formatter, &info)); + } + } + + getchar(); + return 0; } \ No newline at end of file From 00512817d25eff257fc90c0a5dd1d4be2dd64941 Mon Sep 17 00:00:00 2001 From: Ende! Date: Thu, 19 Feb 2015 03:22:37 +0100 Subject: [PATCH 07/33] added support for custom symbol resolvers --- Bindings/C/VXDisassemblerC.h | 2 - Bindings/C/VXDisassemblerTypesC.h | 2 - Bindings/C/VXDisassemblerUtilsC.h | 2 - Bindings/C/VXInstructionDecoderC.h | 2 - Bindings/C/VXInstructionFormatterC.cpp | 71 ++++++++++++++++++++++++++ Bindings/C/VXInstructionFormatterC.h | 10 ++-- Bindings/C/VXOpcodeTableC.h | 2 - 7 files changed, 78 insertions(+), 13 deletions(-) diff --git a/Bindings/C/VXDisassemblerC.h b/Bindings/C/VXDisassemblerC.h index 73f4ec1..173e45f 100644 --- a/Bindings/C/VXDisassemblerC.h +++ b/Bindings/C/VXDisassemblerC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXDISASSEMBLERC_H_ #define _VDE_VXDISASSEMBLERC_H_ diff --git a/Bindings/C/VXDisassemblerTypesC.h b/Bindings/C/VXDisassemblerTypesC.h index a70f369..2667dd4 100644 --- a/Bindings/C/VXDisassemblerTypesC.h +++ b/Bindings/C/VXDisassemblerTypesC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXDISASSEMBLERTYPESC_H_ #define _VDE_VXDISASSEMBLERTYPESC_H_ diff --git a/Bindings/C/VXDisassemblerUtilsC.h b/Bindings/C/VXDisassemblerUtilsC.h index b4a78ef..060d4c1 100644 --- a/Bindings/C/VXDisassemblerUtilsC.h +++ b/Bindings/C/VXDisassemblerUtilsC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXDISASSEMBLERUTILSC_H_ #define _VDE_VXDISASSEMBLERUTILSC_H_ diff --git a/Bindings/C/VXInstructionDecoderC.h b/Bindings/C/VXInstructionDecoderC.h index bda21ae..723aba3 100644 --- a/Bindings/C/VXInstructionDecoderC.h +++ b/Bindings/C/VXInstructionDecoderC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXINSTRUCTIONDECODERC_H_ #define _VDE_VXINSTRUCTIONDECODERC_H_ diff --git a/Bindings/C/VXInstructionFormatterC.cpp b/Bindings/C/VXInstructionFormatterC.cpp index 13920b3..edae59f 100644 --- a/Bindings/C/VXInstructionFormatterC.cpp +++ b/Bindings/C/VXInstructionFormatterC.cpp @@ -100,6 +100,18 @@ inline const Verteron::VXInstructionInfo* VXInstructionInfo_CppPtr( return reinterpret_cast(ptr); } +inline VXInstructionInfo* VXInstructionInfo_CPtr( + Verteron::VXInstructionInfo *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const VXInstructionInfo* VXInstructionInfo_CPtr( + const Verteron::VXInstructionInfo *ptr) +{ + return reinterpret_cast(ptr); +} + inline Verteron::VXBaseInstructionFormatter* VXBaseInstructionFormatter_CppPtr( VXBaseInstructionFormatterContext *ctx) { @@ -243,4 +255,63 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( VXBaseSymbolResolver_CppPtr(resolver))); } +/* VXCustomSymbolResolver ====================================================================== */ + +/* Internal helper class ----------------------------------------------------------------------- */ + +namespace +{ + +class VXCustomSymbolResolver : public Verteron::VXBaseSymbolResolver +{ + VXResolveSymbol_t m_resolverCb; + void *m_userData; +public: + /** + * @brief Constructor. + * @param resolverCb The resolver callback. + * @param userData User provided pointer to arbitrary data passed to resolve callback. + */ + VXCustomSymbolResolver(VXResolveSymbol_t resolverCb, void *userData); + /** + * @brief Destructor. + */ + ~VXCustomSymbolResolver() override = default; +public: + /** + * @brief Resolves a symbol. + * @param info The instruction info. + * @param address The address. + * @param offset Reference to an unsigned 64 bit integer that receives an offset + * relative to the base address of the symbol. + * @return The name of the symbol, if the symbol was found, @c NULL if not. + */ + const char* resolveSymbol(const Verteron::VXInstructionInfo &info, uint64_t address, + uint64_t &offset) override; +}; + +VXCustomSymbolResolver::VXCustomSymbolResolver(VXResolveSymbol_t resolverCb, void *userData) + : m_resolverCb(resolverCb) + , m_userData(userData) +{ + +} + +const char* VXCustomSymbolResolver::resolveSymbol( + const Verteron::VXInstructionInfo &info, uint64_t address, uint64_t &offset) +{ + return m_resolverCb(VXInstructionInfo_CPtr(&info), address, &offset, m_userData); +} + +} // anon namespace + +/* C API implementation ------------------------------------------------------------------------ */ + +VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( + VXResolveSymbol_t resolverCb, + void *userData) +{ + return VXBaseSymbolResolver_CPtr(new VXCustomSymbolResolver(resolverCb, userData)); +} + /* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionFormatterC.h b/Bindings/C/VXInstructionFormatterC.h index 66608d0..fa81b19 100644 --- a/Bindings/C/VXInstructionFormatterC.h +++ b/Bindings/C/VXInstructionFormatterC.h @@ -77,11 +77,15 @@ void VXExactSymbolResolverContext_Clear( /* VXCustomSymbolResolver ====================================================================== */ -/* TODO: actually implement support for custom resolvers in C binding */ - typedef const char* (*VXResolveSymbol_t)( const VXInstructionInfo *info, - uint64_t address, uint64_t *offset); + uint64_t address, + uint64_t *offset, + void *userData); + +VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( + VXResolveSymbol_t resolverCb, + void *userData); /* VXBaseInstructionFormatter ================================================================== */ diff --git a/Bindings/C/VXOpcodeTableC.h b/Bindings/C/VXOpcodeTableC.h index c6d3bf2..f65b862 100644 --- a/Bindings/C/VXOpcodeTableC.h +++ b/Bindings/C/VXOpcodeTableC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXOPCODETABLEC_H_ #define _VDE_VXOPCODETABLEC_H_ From 343aa50bba30a8c0c795b19480305735d8eabb25 Mon Sep 17 00:00:00 2001 From: Ende! Date: Wed, 11 Mar 2015 20:04:04 +0100 Subject: [PATCH 08/33] added documentation to VXInstructionDecoderC.h --- Bindings/C/VXDisassemblerC.h | 2 - Bindings/C/VXDisassemblerTypesC.h | 2 - Bindings/C/VXDisassemblerUtilsC.h | 2 - Bindings/C/VXInstructionDecoderC.h | 129 ++++++++++++++++++++++++++++- Bindings/C/VXOpcodeTableC.h | 2 - 5 files changed, 126 insertions(+), 11 deletions(-) diff --git a/Bindings/C/VXDisassemblerC.h b/Bindings/C/VXDisassemblerC.h index 73f4ec1..173e45f 100644 --- a/Bindings/C/VXDisassemblerC.h +++ b/Bindings/C/VXDisassemblerC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXDISASSEMBLERC_H_ #define _VDE_VXDISASSEMBLERC_H_ diff --git a/Bindings/C/VXDisassemblerTypesC.h b/Bindings/C/VXDisassemblerTypesC.h index a70f369..2667dd4 100644 --- a/Bindings/C/VXDisassemblerTypesC.h +++ b/Bindings/C/VXDisassemblerTypesC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXDISASSEMBLERTYPESC_H_ #define _VDE_VXDISASSEMBLERTYPESC_H_ diff --git a/Bindings/C/VXDisassemblerUtilsC.h b/Bindings/C/VXDisassemblerUtilsC.h index b4a78ef..060d4c1 100644 --- a/Bindings/C/VXDisassemblerUtilsC.h +++ b/Bindings/C/VXDisassemblerUtilsC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXDISASSEMBLERUTILSC_H_ #define _VDE_VXDISASSEMBLERUTILSC_H_ diff --git a/Bindings/C/VXInstructionDecoderC.h b/Bindings/C/VXInstructionDecoderC.h index bda21ae..dd22df5 100644 --- a/Bindings/C/VXInstructionDecoderC.h +++ b/Bindings/C/VXInstructionDecoderC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXINSTRUCTIONDECODERC_H_ #define _VDE_VXINSTRUCTIONDECODERC_H_ @@ -49,32 +47,88 @@ extern "C" typedef struct _VXBaseDataSourceContext { int a; } VXBaseDataSourceContext; +/** + * @brief Releases a data source. + * @param ctx The context to release. + * The context may no longer be used after it was released. + */ void VXBaseDataSource_Release( VXBaseDataSourceContext *ctx); +/** + * @brief Reads the next byte from the data source without altering the current input position + * or the @c length field of the @c info parameter. + * @param ctx The data source context. + * @param info The instruction info struct. + * @return The current input byte. If the result is zero, you should always check the @c flags + * field of the @c info parameter for error flags. Possible error values are + * @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + */ uint8_t VXBaseDataSource_InputPeek( VXBaseDataSourceContext *ctx, VXInstructionInfo *info); +/** + * @brief Reads the next byte from the data source. + * @param ctx The data soruce context. + * @param info The instruction info. + * @return The current input byte. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + * This method increases the current input position and the @c length field of the @c info + * parameter. This function also appends the new byte to to @c data field of the @c info + * parameter. + */ uint8_t VXBaseDataSource_InputNext( VXBaseDataSourceContext *ctx, VXInstructionInfo *info); +/** + * @brief Returns the current input byte. + * @param ctx The data soruce context. + * @return The current input byte. + * The current input byte is set everytime the @c inputPeek or @c inputNext method is called. + */ +// TODO: check long descr uint8_t VXBaseDataSource_InputCurrent( const VXBaseDataSourceContext *ctx); +/** + * @brief Queries if the end of the data source is reached. + * @param ctx The data soruce context. + * @return @c true if end of input, @c false if not. + */ bool VXBaseDataSource_IsEndOfInput( const VXBaseDataSourceContext *ctx); +/** + * @brief Returns the current input position. + * @param ctx The data soruce context. + * @return The current input position. + */ uint64_t VXBaseDataSource_GetPosition( const VXBaseDataSourceContext *ctx); +/** + * @brief Sets a new input position. + * @param ctx The data soruce context. + * @param position The new input position. + * @return @c false if the new position exceeds the maximum input length. + */ bool VXBaseDataSource_SetPosition( VXBaseDataSourceContext *ctx, uint64_t position); /* VXMemoryDataSource ========================================================================== */ +/** + * @brief Creates a memory data source. + * @param buffer The input buffer. + * @param bufferLen THe length of the input buffer. + * @return @c nullptr if it fails, else a data source context. + * @see VXBaseDataSource_Release + */ +// TODO: verify return value VXBaseDataSourceContext* VXMemoryDataSource_Create( const void* buffer, size_t bufferLen); @@ -105,44 +159,113 @@ typedef enum _VXInstructionSetVendor /* : uint8_t */ typedef struct _VXInstructionDecoderContext { int a; } VXInstructionDecoderContext; +/** + * @brief Creates an instruction decoder. + * @return @c nullptr if it fails, else an instruction decoder context. + * @see VXInstructionDecoder_Release + */ +// TODO: verify return value VXInstructionDecoderContext* VXInstructionDecoder_Create(void); +/** + * @brief Creates an instruction decoder. + * @param input A reference to the input data source. + * @param disassemblerMode The disassembler mode. + * @param preferredVendor The preferred instruction-set vendor. + * @param instructionPointer The initial instruction pointer. + * @return @c nullptr if it fails, else an instruction decoder context. + * @see VXInstructionDecoder_Release + */ VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( VXBaseDataSourceContext *input, VXDisassemblerMode disassemblerMode, VXInstructionSetVendor preferredVendor, uint64_t instructionPointer); +/** + * @brief Releases an instruction decoder. + * @param ctx The context of the instruction decoder to release. + */ void VXInstructionDecoder_Release( VXInstructionDecoderContext *ctx); +/** + * @brief Decodes the next instruction from the input data source. + * @param ctx The instruction decoder context. + * @param info The @c VXInstructionInfo struct that receives the information about the decoded + * instruction. + * @return This function returns @c false if the current position exceeds the maximum input + * length. In all other cases (valid and invalid instructions) the return value is + * @c true. + */ bool VXInstructionDecoder_DecodeInstruction( - VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +/** + * @brief Returns a pointer to the current data source. + * @param ctx The instruction decoder context. + * @return The context of the data source. + */ VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( const VXInstructionDecoderContext *ctx); +/** + * @brief Sets a new data source. + * @param ctx The instruction decoder context. + * @param input The context of the new input data source. + */ void VXInstructionDecoder_SetDataSource( VXInstructionDecoderContext *ctx, VXBaseDataSourceContext *input); +/** + * @brief Returns the current disassembler mode. + * @param ctx The instruction decoder context. + * @return The current disassembler mode. + */ VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( VXInstructionDecoderContext *ctx); +/** + * @brief Sets the current disassembler mode. + * @param ctx The instruction decoder context. + * @param disassemblerMode The new disassembler mode. + */ void VXInstructionDecoder_SetDisassemblerMode( VXInstructionDecoderContext *ctx, VXDisassemblerMode disassemblerMode); +/** + * @brief Returns the preferred instruction-set vendor. + * @param ctx The instruction decoder context. + * @return The preferred instruction-set vendor. + */ VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( const VXInstructionDecoderContext *ctx); +/** + * @brief Sets the preferred instruction-set vendor. + * @param ctx The instruction decoder context. + * @param preferredVendor The new preferred instruction-set vendor. + */ void VXInstructionDecoder_SetPreferredVendor( VXInstructionDecoderContext *ctx, VXInstructionSetVendor preferredVendor); +/** + * @brief Returns the current instruction pointer. + * @param ctx The instruction decoder context. + * @return The current instruction pointer. + */ uint64_t VXInstructionDecoder_GetInstructionPointer( VXInstructionDecoderContext *ctx); +/** + * @brief Sets a new instruction pointer. + * @param ctx The instruction decoder context. + * @param instructionPointer The new instruction pointer. + */ void VXInstructionDecoder_SetInstructionPointer( VXInstructionDecoderContext *ctx, uint64_t instructionPointer); diff --git a/Bindings/C/VXOpcodeTableC.h b/Bindings/C/VXOpcodeTableC.h index c6d3bf2..f65b862 100644 --- a/Bindings/C/VXOpcodeTableC.h +++ b/Bindings/C/VXOpcodeTableC.h @@ -30,8 +30,6 @@ **************************************************************************************************/ -/* NOTE: fully ported to C */ - #ifndef _VDE_VXOPCODETABLEC_H_ #define _VDE_VXOPCODETABLEC_H_ From a51c9085e66df72898d500eee093769b68ee38f7 Mon Sep 17 00:00:00 2001 From: Ende! Date: Thu, 12 Mar 2015 22:11:00 +0100 Subject: [PATCH 09/33] added documentation to VXInstructionFormatterC.h --- Bindings/C/VXInstructionDecoderC.h | 6 +- Bindings/C/VXInstructionFormatterC.cpp | 5 -- Bindings/C/VXInstructionFormatterC.h | 91 ++++++++++++++++++++++++-- 3 files changed, 90 insertions(+), 12 deletions(-) diff --git a/Bindings/C/VXInstructionDecoderC.h b/Bindings/C/VXInstructionDecoderC.h index dd22df5..e6a2333 100644 --- a/Bindings/C/VXInstructionDecoderC.h +++ b/Bindings/C/VXInstructionDecoderC.h @@ -125,7 +125,7 @@ bool VXBaseDataSource_SetPosition( * @brief Creates a memory data source. * @param buffer The input buffer. * @param bufferLen THe length of the input buffer. - * @return @c nullptr if it fails, else a data source context. + * @return @c NULL if it fails, else a data source context. * @see VXBaseDataSource_Release */ // TODO: verify return value @@ -161,7 +161,7 @@ typedef struct _VXInstructionDecoderContext { int a; } VXInstructionDecoderConte /** * @brief Creates an instruction decoder. - * @return @c nullptr if it fails, else an instruction decoder context. + * @return @c NULL if it fails, else an instruction decoder context. * @see VXInstructionDecoder_Release */ // TODO: verify return value @@ -173,7 +173,7 @@ VXInstructionDecoderContext* VXInstructionDecoder_Create(void); * @param disassemblerMode The disassembler mode. * @param preferredVendor The preferred instruction-set vendor. * @param instructionPointer The initial instruction pointer. - * @return @c nullptr if it fails, else an instruction decoder context. + * @return @c NULL if it fails, else an instruction decoder context. * @see VXInstructionDecoder_Release */ VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( diff --git a/Bindings/C/VXInstructionFormatterC.cpp b/Bindings/C/VXInstructionFormatterC.cpp index edae59f..3a0dbb7 100644 --- a/Bindings/C/VXInstructionFormatterC.cpp +++ b/Bindings/C/VXInstructionFormatterC.cpp @@ -152,11 +152,6 @@ inline const VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CPtr /* VXBaseSymbolResolver ======================================================================== */ -VXBaseSymbolResolverContext* VXBaseSymbolResolver_Create() -{ - return VXBaseSymbolResolver_CPtr(new Verteron::VXBaseSymbolResolver); -} - void VXBaseSymbolResolver_Release( VXBaseSymbolResolverContext *ctx) { diff --git a/Bindings/C/VXInstructionFormatterC.h b/Bindings/C/VXInstructionFormatterC.h index fa81b19..b0ae0ec 100644 --- a/Bindings/C/VXInstructionFormatterC.h +++ b/Bindings/C/VXInstructionFormatterC.h @@ -42,13 +42,25 @@ extern "C" /* VXBaseSymbolResolver ======================================================================== */ - typedef struct _VXBaseSymbolResolverContext { int a; } VXBaseSymbolResolverContext; - -VXBaseSymbolResolverContext* VXBaseSymbolResolver_Create(void); +typedef struct _VXBaseSymbolResolverContext { int a; } VXBaseSymbolResolverContext; +/** + * @brief Releases a symbol resolver. + * @param ctx The context of the symbol resolver to free. + * The context may no longer used after it was released. + */ void VXBaseSymbolResolver_Release( VXBaseSymbolResolverContext *ctx); +/** + * @brief Resolves a symbol. + * @param ctx The symbol resolver context. + * @param info The instruction info. + * @param address The address. + * @param offset Pointer to an unsigned 64 bit integer that receives an offset relative to + * the base address of the symbol. + * @return The name of the symbol if the symbol was found, else @c NULL. + */ const char* VXBaseSymbolResolver_ResolveSymbol( VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, @@ -57,21 +69,50 @@ const char* VXBaseSymbolResolver_ResolveSymbol( /* VXExactSymbolResolver ======================================================================= */ +/** + * @brief Creates an exact symbol resolver. + * @return @c NULL if it fails, else a symbol resolver context. + * @see VXBaseSymbolResolver_Release + * An exact resolver is a simple symbol resolver that only matches exact addresses. + */ +// TODO: verify return value VXBaseSymbolResolverContext* VXExactSymbolResolver_Create(void); +/** + * @brief Query if the given address is a known symbol. + * @param ctx The exact symbol resolver context. + * @param address The address. + * @return @c true if the address is known, @c false if not. + */ bool VXExactSymbolResolver_ContainsSymbol( VXBaseSymbolResolverContext *ctx, uint64_t address); +/** + * @brief Adds or changes a symbol. + * @param ctx The exact symbol resolver context. + * @param address The address. + * @param name The symbol name. + */ void VXExactSymbolResolverContext_SetSymbol( VXBaseSymbolResolverContext *ctx, uint64_t address, const char* name); +/** + * @brief Removes the symbol described by address. + * @param ctx The exact symbol resolver context. + * @param address The address. + * This will invalidate all char-pointers to the affected symbol name. + */ void VXExactSymbolResolverContext_RemoveSymbol( VXBaseSymbolResolverContext *ctx, uint64_t address); +/** + * @brief Clears the symbol tree. + * @param ctx The exact symbol resolver context. + */ void VXExactSymbolResolverContext_Clear( VXBaseSymbolResolverContext *ctx); @@ -83,6 +124,13 @@ typedef const char* (*VXResolveSymbol_t)( uint64_t *offset, void *userData); +/** + * @brief Creates a custom symbol resolver. + * @param resolverCb The resolver callback consulted when symbols need to be resolved. + * @param userData A pointer to arbitrary data passed to the resolver callback. + * May also be @c NULL. + * @return @c NULL if it fails, else a symbol resolver context. + */ VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( VXResolveSymbol_t resolverCb, void *userData); @@ -91,23 +139,58 @@ VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( typedef struct _VXBaseInstructionFormatterContext {int a;} VXBaseInstructionFormatterContext; +/** + * @brief Formats a decoded instruction. + * @param ctx The instruction formatter context. + * @param info The instruction info. + * @return Pointer to the formatted instruction string. This pointer remains valid until + * this function is called again or the context is released. + */ const char* VXBaseInstructionFormatter_FormatInstruction( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); +/** + * @brief Returns a pointer to the current symbol resolver. + * @param ctx The instruction formatter context. + * @return Pointer to the current symbol resolver or @c NULL if no symbol resolver is used. + */ VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( const VXBaseInstructionFormatterContext *ctx); +/** + * @brief Sets a new symbol resolver. + * @param ctx The instruction formatter context. + * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol + * resolver should be used. + */ void VXBaseInstructionFormatter_SetSymbolResolver( VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *resolver); -void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx); +/** + * @brief Releases an instruction formatter. + * @param ctx The context of the instruction formatter to release. + * The context may no longer used after it has been released. + */ +void VXBaseInstructionFormatter_Release( + VXBaseInstructionFormatterContext *ctx); /* VXIntelInstructionFormatter ================================================================ */ +/** + * @brief Creates an Intel-syntax instruction formatter. + * @return @c NULL if it fails, else an Intel instruction formatter context. + * @see VXBaseInstructionFormatter_Release + */ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); +/** + * @brief Creates an Intel-syntax instruction formatter. + * @param resolver The symbol resolver consulted to resolve symbols on formatting. + * @return @c NULL if it fails, else an Intel instruction formatter context. + * @see VXBaseInstructionFormatter_Release + */ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( VXBaseSymbolResolverContext *resolver); From ff09bd32ebfee44c99c5d651102ce2a6031513da Mon Sep 17 00:00:00 2001 From: Ende! Date: Sun, 15 Mar 2015 23:28:54 +0100 Subject: [PATCH 10/33] made c "bindings" independent from c++ library --- ...mblerUtilsC.cpp => VXDisassemblerUtilsC.c} | 50 +- Bindings/C/VXDisassemblerUtilsC.h | 8 +- Bindings/C/VXInstructionDecoderC.c | 1785 +++ Bindings/C/VXInstructionDecoderC.cpp | 259 - Bindings/C/VXInstructionDecoderC.h | 37 +- Bindings/C/VXInstructionFormatterC.c | 856 ++ Bindings/C/VXInstructionFormatterC.cpp | 312 - Bindings/C/VXInstructionFormatterC.h | 62 +- Bindings/C/VXInternalHelpersC.h | 165 + Bindings/C/VXOpcodeTableC.c | 9649 +++++++++++++++++ Bindings/C/VXOpcodeTableC.cpp | 35 - Bindings/C/VXOpcodeTableC.h | 1 + Bindings/C/VXOpcodeTableInternalC.h | 313 + CMakeLists.txt | 12 +- VerteronDisassemblerEngine/VXOpcodeTable.cpp | 6374 +++++------ 15 files changed, 16051 insertions(+), 3867 deletions(-) rename Bindings/C/{VXDisassemblerUtilsC.cpp => VXDisassemblerUtilsC.c} (53%) create mode 100644 Bindings/C/VXInstructionDecoderC.c delete mode 100644 Bindings/C/VXInstructionDecoderC.cpp create mode 100644 Bindings/C/VXInstructionFormatterC.c delete mode 100644 Bindings/C/VXInstructionFormatterC.cpp create mode 100644 Bindings/C/VXInternalHelpersC.h create mode 100644 Bindings/C/VXOpcodeTableC.c delete mode 100644 Bindings/C/VXOpcodeTableC.cpp create mode 100644 Bindings/C/VXOpcodeTableInternalC.h diff --git a/Bindings/C/VXDisassemblerUtilsC.cpp b/Bindings/C/VXDisassemblerUtilsC.c similarity index 53% rename from Bindings/C/VXDisassemblerUtilsC.cpp rename to Bindings/C/VXDisassemblerUtilsC.c index 3a68b6e..9ef2bbb 100644 --- a/Bindings/C/VXDisassemblerUtilsC.cpp +++ b/Bindings/C/VXDisassemblerUtilsC.c @@ -5,10 +5,10 @@ Remarks : Freeware, Copyright must be included - Original Author : athre0z - Modifications : + Original Author : Florian Bernd + Modifications : athre0z - Last change : 04. February 2015 + Last change : 13. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -31,14 +31,44 @@ **************************************************************************************************/ #include "VXDisassemblerUtilsC.h" -#include "VXDisassemblerUtils.h" -static_assert(sizeof(VXInstructionInfo) == sizeof(Verteron::VXInstructionInfo), "struct rekt"); -static_assert(sizeof(VXOperandInfo) == sizeof(Verteron::VXOperandInfo), "struct rekt"); +#include -uint64_t VDECalcAbsoluteTarget(const VXInstructionInfo *info, const VXOperandInfo *operand) +uint64_t VXCalcAbsoluteTarget(const VXInstructionInfo *info, const VXOperandInfo *operand) { - return Verteron::VDECalcAbsoluteTarget( - *reinterpret_cast(info), - *reinterpret_cast(operand)); + assert((operand->type == OPTYPE_REL_IMMEDIATE) || + ((operand->type == OPTYPE_MEMORY) && (operand->base == REG_RIP))); + + uint64_t truncMask = 0xFFFFFFFFFFFFFFFFull; + if (!(info->flags & IF_DISASSEMBLER_MODE_64)) + { + truncMask >>= (64 - info->operand_mode); + } + + uint16_t size = operand->size; + if ((operand->type == OPTYPE_MEMORY) && (operand->base == REG_RIP)) + { + size = operand->offset; + } + + switch (size) + { + case 8: + return (info->instrPointer + operand->lval.sbyte) & truncMask; + case 16: + { + uint32_t delta = operand->lval.sword & truncMask; + if ((info->instrPointer + delta) > 0xFFFF) + { + return (info->instrPointer & 0xF0000) + ((info->instrPointer + delta) & 0xFFFF); + } + return info->instrPointer + delta; + } + case 32: + return (info->instrPointer + operand->lval.sdword) & truncMask; + default: + assert(0); + } + + return 0; } \ No newline at end of file diff --git a/Bindings/C/VXDisassemblerUtilsC.h b/Bindings/C/VXDisassemblerUtilsC.h index 060d4c1..ffc1210 100644 --- a/Bindings/C/VXDisassemblerUtilsC.h +++ b/Bindings/C/VXDisassemblerUtilsC.h @@ -41,13 +41,19 @@ extern "C" { #endif +typedef struct _VXContextDescriptor +{ + uint8_t type; + void *ptr; +} VXContextDescriptor; + /** * @brief Calculates the absolute target address of a relative instruction operand. * @param info The instruction info. * @param operand The operand. * @return The absolute target address. */ -uint64_t VDECalcAbsoluteTarget(const VXInstructionInfo *info, const VXOperandInfo *operand); +uint64_t VXCalcAbsoluteTarget(const VXInstructionInfo *info, const VXOperandInfo *operand); #ifdef __cplusplus } diff --git a/Bindings/C/VXInstructionDecoderC.c b/Bindings/C/VXInstructionDecoderC.c new file mode 100644 index 0000000..8541cc2 --- /dev/null +++ b/Bindings/C/VXInstructionDecoderC.c @@ -0,0 +1,1785 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 13. March 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#include "VXInstructionDecoderC.h" +#include "VXInternalHelpersC.h" +#include "VXOpcodeTableInternalC.h" + +#include +#include +#include + +/* Internal interface ========================================================================== */ + +/* VXBaseDataSource ---------------------------------------------------------------------------- */ + +typedef void(*VXBaseDataSource_DestructionCallback)(VXBaseDataSourceContext *ctx); +typedef uint8_t(*VXBaseDataSource_InputCallback)(VXBaseDataSourceContext *ctx); +typedef bool(*VXBaseDataSource_IsEndOfInputCallback)(const VXBaseDataSourceContext *ctx); +typedef uint64_t(*VXBaseDataSource_GetPositionCallback)(const VXBaseDataSourceContext *ctx); +typedef bool(*VXBaseDataSource_SetPositionCallback)( + VXBaseDataSourceContext *ctx, uint64_t position); + +typedef struct _VXBaseDataSource +{ + uint8_t currentInput; + VXBaseDataSource_DestructionCallback destruct; // may be NULL + VXBaseDataSource_InputCallback internalInputPeek; + VXBaseDataSource_InputCallback internalInputNext; + VXBaseDataSource_IsEndOfInputCallback isEndOfInput; + VXBaseDataSource_GetPositionCallback getPosition; + VXBaseDataSource_SetPositionCallback setPosition; +} VXBaseDataSource; + +void VXBaseDataSource_Construct(VXBaseDataSourceContext *ctx); +void VXBaseDataSource_Destruct(VXBaseDataSourceContext *ctx); +void VXBaseDataSource_Release(VXBaseDataSourceContext *ctx); +uint8_t VXBaseDataSource_InputPeek(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); +uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); +uint16_t VXBaseDataSource_InputNext16(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); +uint32_t VXBaseDataSource_InputNext32(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); +uint64_t VXBaseDataSource_InputNext64(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); +uint8_t VXBaseDataSource_InputCurrent(const VXBaseDataSourceContext *ctx); + +/* VXMemoryDataSource -------------------------------------------------------------------------- */ + +typedef struct _VXMemoryDataSource +{ + VXBaseDataSource super; + const void *inputBuffer; + uint64_t inputBufferLen; + uint64_t inputBufferPos; +} VXMemoryDataSource; + +void VXMemoryDataSource_Construct(VXBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen); +void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx); +VXBaseDataSourceContext* VXMemoryDataSource_Create(const void* buffer, size_t bufferLen); +uint8_t VXMemoryDataSource_InternalInputPeek(VXBaseDataSourceContext *ctx); +uint8_t VXMemoryDataSource_InternalInputNext(VXBaseDataSourceContext *ctx); +bool VXMemoryDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx); +uint64_t VXMemoryDataSource_GetPosition(const VXBaseDataSourceContext *ctx); +bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position); + +/* VXInstructionDecoder ------------------------------------------------------------------------ */ + +typedef struct _VXInstructionDecoder +{ + VXBaseDataSourceContext *dataSource; + VXDisassemblerMode disassemblerMode; + VXInstructionSetVendor preferredVendor; + uint64_t instructionPointer; +} VXInstructionDecoder; + +typedef enum _VXRegisterClass /* : uint8_t */ +{ + RC_GENERAL_PURPOSE, + RC_MMX, + RC_CONTROL, + RC_DEBUG, + RC_SEGMENT, + RC_XMM +} VXRegisterClass; + +uint8_t VXInstructionDecoder_InputPeek(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +uint8_t VXInstructionDecoder_InputNext8(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +uint16_t VXInstructionDecoder_InputNext16(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +uint32_t VXInstructionDecoder_InputNext32(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +uint64_t VXInstructionDecoder_InputNext64(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +uint8_t VXInstructionDecoder_InputCurrent(const VXInstructionDecoderContext *ctx); +VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource(const VXInstructionDecoderContext *ctx); +void VXInstructionDecoder_SetDataSource(VXInstructionDecoderContext *ctx, VXBaseDataSourceContext *input); +VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode(const VXInstructionDecoderContext *ctx); +void VXInstructionDecoder_SetDisassemblerMode(VXInstructionDecoderContext *ctx, VXDisassemblerMode disassemblerMode); +VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor(const VXInstructionDecoderContext *ctx); +void VXInstructionDecoder_SetPreferredVendor(VXInstructionDecoderContext *ctx, VXInstructionSetVendor preferredVendor); +uint64_t VXInstructionDecoder_GetInstructionPointer(const VXInstructionDecoderContext *ctx); +void VXInstructionDecoder_SetInstructionPointer(VXInstructionDecoderContext *ctx, uint64_t instructionPointer); +bool VXInstructionDecoder_DecodeRegisterOperand(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize); +bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, VXDefinedOperandSize operandSize); +bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandSize operandSize); +bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, uint8_t size); +bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +uint16_t VXInstructionDecoder_GetEffectiveOperandSize(const VXInstructionDecoderContext *ctx, const VXInstructionInfo *info, VXDefinedOperandSize operandSize); +bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandType operandType, VXDefinedOperandSize operandSize); +void VXInstructionDecoder_ResolveOperandAndAddressMode(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +void VXInstructionDecoder_CalculateEffectiveRexVexValues(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +VXInstructionDecoderContext* VXInstructionDecoder_Create(void); +VXInstructionDecoderContext* VXInstructionDecoder_CreateEx(VXBaseDataSourceContext *input, VXDisassemblerMode disassemblerMode, VXInstructionSetVendor preferredVendor, uint64_t instructionPointer); +bool VXInstructionDecoder_DecodeInstruction(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/* Implementation ============================================================================== */ + +/* VXBaseDataSource ---------------------------------------------------------------------------- */ + +static void VXBaseDataSource_Construct(VXBaseDataSourceContext *ctx) +{ + VXBaseDataSource *thiz = VXBaseDataSource_thiz(ctx); + memset(thiz, 0, sizeof(*thiz)); +} + +static void VXBaseDataSource_Destruct(VXBaseDataSourceContext *ctx) +{ + +} + +void VXBaseDataSource_Release(VXBaseDataSourceContext *ctx) +{ + VXBaseDataSource *thiz = VXBaseDataSource_thiz(ctx); + + if (thiz->destruct) + { + thiz->destruct(ctx); + } + + free(thiz); + free(ctx); +} + +uint8_t VXBaseDataSource_InputPeek(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) +{ + VXBaseDataSource *thiz = VXBaseDataSource_thiz(ctx); + + if (info->length == 15) + { + info->flags |= IF_ERROR_LENGTH; + return 0; + } + if (VXBaseDataSource_IsEndOfInput(ctx)) + { + info->flags |= IF_ERROR_END_OF_INPUT; + return 0; + } + + thiz->currentInput = thiz->internalInputPeek(ctx); + return thiz->currentInput; +} + +static uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) +{ + VXBaseDataSource *thiz = VXBaseDataSource_thiz(ctx); + + if (info->length == 15) + { + info->flags |= IF_ERROR_LENGTH; + return 0; + } + if (VXBaseDataSource_IsEndOfInput(ctx)) + { + info->flags |= IF_ERROR_END_OF_INPUT; + return 0; + } + thiz->currentInput = thiz->internalInputNext(ctx); + info->data[info->length] = thiz->currentInput; + info->length++; + return thiz->currentInput; +} + +#define VXBASEDATASOURCE_INPUTNEXT_N(n) \ + static uint##n##_t VXBaseDataSource_InputNext##n( \ + VXBaseDataSourceContext *ctx, VXInstructionInfo *info) \ + { \ + uint##n##_t result = 0; \ + for (unsigned i = 0; i < (sizeof(uint##n##_t) / sizeof(uint8_t)); ++i) \ + { \ + uint##n##_t b = VXBaseDataSource_InputNext8(ctx, info); \ + if (!b && (info->flags & IF_ERROR_MASK)) \ + { \ + return 0; \ + } \ + result |= (b << (i * 8)); \ + } \ + return result; \ + } + +VXBASEDATASOURCE_INPUTNEXT_N(16) +VXBASEDATASOURCE_INPUTNEXT_N(32) +VXBASEDATASOURCE_INPUTNEXT_N(64) +#undef VXBASEDATASOURCE_INPUTNEXT_N + +uint8_t VXBaseDataSource_InputCurrent(const VXBaseDataSourceContext *ctx) +{ + return VXBaseDataSource_cthiz(ctx)->currentInput; +} + +bool VXBaseDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx) +{ + assert(VXBaseDataSource_cthiz(ctx)->isEndOfInput); + return VXBaseDataSource_cthiz(ctx)->isEndOfInput(ctx); +} + +uint64_t VXBaseDataSource_GetPosition(const VXBaseDataSourceContext *ctx) +{ + assert(VXBaseDataSource_cthiz(ctx)->getPosition); + return VXBaseDataSource_cthiz(ctx)->getPosition(ctx); +} + +bool VXBaseDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position) +{ + assert(VXBaseDataSource_thiz(ctx)->setPosition); + return VXBaseDataSource_thiz(ctx)->setPosition(ctx, position); +} + +/* VXMemoryDataSource -------------------------------------------------------------------------- */ + +void VXMemoryDataSource_Construct( + VXBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen) +{ + VXBaseDataSource_Construct(ctx); + VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); + + thiz->super.destruct = &VXMemoryDataSource_Destruct; + thiz->super.internalInputPeek = &VXMemoryDataSource_InternalInputPeek; + thiz->super.internalInputNext = &VXMemoryDataSource_InternalInputNext; + thiz->super.isEndOfInput = &VXMemoryDataSource_IsEndOfInput; + thiz->super.getPosition = &VXMemoryDataSource_GetPosition; + thiz->super.setPosition = &VXMemoryDataSource_SetPosition; + + thiz->inputBuffer = buffer; + thiz->inputBufferLen = bufferLen; + thiz->inputBufferPos = 0; +} + +void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx) +{ + VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); + + // Nothing to destruct ourselfes, just call parent destructor + VXBaseDataSource_Destruct(ctx); +} + +VXBaseDataSourceContext* VXMemoryDataSource_Create( + const void* buffer, size_t bufferLen) +{ + VXMemoryDataSource *thiz = malloc(sizeof(VXMemoryDataSource)); + VXBaseDataSourceContext *ctx = malloc(sizeof(VXBaseDataSourceContext)); + + ctx->d.type = TYPE_MEMORYDATASOURCE; + ctx->d.ptr = thiz; + + VXMemoryDataSource_Construct(ctx, buffer, bufferLen); + + return ctx; +} + +static uint8_t VXMemoryDataSource_InternalInputPeek(VXBaseDataSourceContext *ctx) +{ + VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); + return *((const uint8_t*)thiz->inputBuffer + thiz->inputBufferPos); +} + +static uint8_t VXMemoryDataSource_InternalInputNext(VXBaseDataSourceContext *ctx) +{ + VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); + ++thiz->inputBufferPos; + return *((const uint8_t*)thiz->inputBuffer + thiz->inputBufferPos - 1); +} + +static bool VXMemoryDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx) +{ + const VXMemoryDataSource *thiz = VXMemoryDataSource_cthiz(ctx); + return (thiz->inputBufferPos >= thiz->inputBufferLen); +} + +static uint64_t VXMemoryDataSource_GetPosition(const VXBaseDataSourceContext *ctx) +{ + return VXMemoryDataSource_cthiz(ctx)->inputBufferPos; +} + +static bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position) +{ + VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); + thiz->inputBufferPos = position; + return thiz->super.isEndOfInput(ctx); +} + +/* VXInstructionDecoder ------------------------------------------------------------------------ */ + +void VXInstructionDecoder_Construct( + VXInstructionDecoderContext *ctx, + VXBaseDataSourceContext *input, + VXDisassemblerMode disassemblerMode, + VXInstructionSetVendor preferredVendor, + uint64_t instructionPointer) +{ + VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + + thiz->dataSource = input; + thiz->disassemblerMode = disassemblerMode; + thiz->preferredVendor = preferredVendor; + thiz->instructionPointer = instructionPointer; +} + +void VXInstructionDecoder_Destruct(VXInstructionDecoderContext *ctx) +{ + +} + +VXInstructionDecoderContext* VXInstructionDecoder_Create(void) +{ + return VXInstructionDecoder_CreateEx(NULL, DM_M32BIT, ISV_ANY, 0); +} + +VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( + VXBaseDataSourceContext *input, + VXDisassemblerMode disassemblerMode, + VXInstructionSetVendor preferredVendor, + uint64_t instructionPointer) +{ + VXInstructionDecoder *thiz = malloc(sizeof(VXInstructionDecoder)); + VXInstructionDecoderContext *ctx = malloc(sizeof(VXInstructionDecoderContext)); + + ctx->d.ptr = thiz; + ctx->d.type = TYPE_INSTRUCTIONDECODER; + + VXInstructionDecoder_Construct(ctx, input, disassemblerMode, + preferredVendor, instructionPointer); + + return ctx; +} + +void VXInstructionDecoder_Release(VXInstructionDecoderContext *ctx) +{ + VXInstructionDecoder_Destruct(ctx); + + free(ctx->d.ptr); + free(ctx); +} + +static uint8_t VXInstructionDecoder_InputPeek( + VXInstructionDecoderContext *ctx, VXInstructionInfo *info) +{ + VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + + if (!thiz->dataSource) + { + info->flags |= IF_ERROR_END_OF_INPUT; + return 0; + } + + return VXBaseDataSource_InputPeek(thiz->dataSource, info); +} + +#define VXINSTRUCTIONDECODER_INPUTNEXT_N(n) \ + static uint##n##_t VXInstructionDecoder_InputNext##n( \ + VXInstructionDecoderContext *ctx, VXInstructionInfo *info) \ + { \ + VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); \ + \ + if (!thiz->dataSource) \ + { \ + info->flags |= IF_ERROR_END_OF_INPUT; \ + return 0; \ + } \ + \ + return VXBaseDataSource_InputNext##n(thiz->dataSource, info); \ + } + +VXINSTRUCTIONDECODER_INPUTNEXT_N(8) +VXINSTRUCTIONDECODER_INPUTNEXT_N(16) +VXINSTRUCTIONDECODER_INPUTNEXT_N(32) +VXINSTRUCTIONDECODER_INPUTNEXT_N(64) +#undef VXINSTRUCTIONDECODER_INPUTNEXT_N + +static uint8_t VXInstructionDecoder_InputCurrent(const VXInstructionDecoderContext *ctx) +{ + const VXInstructionDecoder *thiz = VXInstructionDecoder_cthiz(ctx); + + if (!thiz->dataSource) + { + return 0; + } + + return VXBaseDataSource_InputCurrent(thiz->dataSource); +} + +VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( + const VXInstructionDecoderContext *ctx) +{ + return VXInstructionDecoder_cthiz(ctx)->dataSource; +} + +void VXInstructionDecoder_SetDataSource( + VXInstructionDecoderContext *ctx, VXBaseDataSourceContext *input) +{ + VXInstructionDecoder_thiz(ctx)->dataSource = input; +} + +VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( + const VXInstructionDecoderContext *ctx) +{ + return VXInstructionDecoder_cthiz(ctx)->disassemblerMode; +} + +void VXInstructionDecoder_SetDisassemblerMode(VXInstructionDecoderContext *ctx, + VXDisassemblerMode disassemblerMode) +{ + VXInstructionDecoder_thiz(ctx)->disassemblerMode = disassemblerMode; +} + +VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( + const VXInstructionDecoderContext *ctx) +{ + return VXInstructionDecoder_cthiz(ctx)->preferredVendor; +} + +void VXInstructionDecoder_SetPreferredVendor(VXInstructionDecoderContext *ctx, + VXInstructionSetVendor preferredVendor) +{ + VXInstructionDecoder_thiz(ctx)->preferredVendor = preferredVendor; +} + +uint64_t VXInstructionDecoder_GetInstructionPointer( + const VXInstructionDecoderContext *ctx) +{ + return VXInstructionDecoder_cthiz(ctx)->instructionPointer; +} + +void VXInstructionDecoder_SetInstructionPointer(VXInstructionDecoderContext *ctx, + uint64_t instructionPointer) +{ + VXInstructionDecoder_thiz(ctx)->instructionPointer = instructionPointer; +} + +static bool VXInstructionDecoder_DecodeRegisterOperand( + const VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, + VXRegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize) +{ + VXRegister reg = REG_NONE; + uint16_t size = VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); + const VXInstructionDecoder *thiz = VXInstructionDecoder_cthiz(ctx); + + switch (registerClass) + { + case RC_GENERAL_PURPOSE: + switch (size) + { + case 64: + reg = REG_RAX + registerId; + break; + case 32: + reg = REG_EAX + registerId; + break; + case 16: + reg = REG_AX + registerId; + break; + case 8: + // TODO: Only REX? Or VEX too? + if (thiz->disassemblerMode == DM_M64BIT && (info->flags & IF_PREFIX_REX)) + { + if (registerId >= 4) + { + reg = REG_SPL + (registerId - 4); + } + else + { + reg = REG_AL + registerId; + } + } + else + { + reg = REG_AL + registerId; + } + break; + case 0: + // TODO: Error? + reg = REG_NONE; + break; + default: + assert(0); + } + break; + case RC_MMX: + reg = REG_MM0 + (registerId & 0x07); + break; + case RC_CONTROL: + reg = REG_CR0 + registerId; + break; + case RC_DEBUG: + reg = REG_DR0 + registerId; + break; + case RC_SEGMENT: + if ((registerId & 7) > 5) + { + info->flags |= IF_ERROR_OPERAND; + return false; + } + reg = REG_ES + (registerId & 0x07); + break; + case RC_XMM: + reg = registerId + ((size == 256) ? REG_YMM0 : REG_XMM0); + break; + default: + assert(0); + } + + operand->type = OPTYPE_REGISTER; + operand->base = reg; + operand->size = size; + + return true; +} + +static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, + VXDefinedOperandSize operandSize) +{ + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + assert(info->flags & IF_MODRM); + // Decode register operand + if (info->modrm_mod == 3) + { + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, registerClass, + info->modrm_rm_ext, operandSize); + } + // Decode memory operand + uint8_t offset = 0; + operand->type = OPTYPE_MEMORY; + operand->size = VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); + switch (info->address_mode) + { + case 16: + { + static const VXRegister bases[] = { + REG_BX, REG_BX, REG_BP, REG_BP, + REG_SI, REG_DI, REG_BP, REG_BX }; + static const VXRegister indices[] = { + REG_SI, REG_DI, REG_SI, REG_DI, + REG_NONE, REG_NONE, REG_NONE, REG_NONE }; + operand->base = bases[info->modrm_rm_ext & 0x07]; + operand->index = indices[info->modrm_rm_ext & 0x07]; + operand->scale = 0; + if (info->modrm_mod == 0 && info->modrm_rm_ext == 6) { + offset = 16; + operand->base = REG_NONE; + } else if (info->modrm_mod == 1) { + offset = 8; + } else if (info->modrm_mod == 2) { + offset = 16; + } + } + break; + case 32: + operand->base = REG_EAX + info->modrm_rm_ext; + switch (info->modrm_mod) + { + case 0: + if (info->modrm_rm_ext == 5) + { + operand->base = REG_NONE; + offset = 32; + } + break; + case 1: + offset = 8; + break; + case 2: + offset = 32; + break; + default: + assert(0); + } + if ((info->modrm_rm_ext & 0x07) == 4) + { + if (!VXInstructionDecoder_DecodeSIB(ctx, info)) + { + return false; + } + operand->base = REG_EAX + info->sib_base_ext; + operand->index = REG_EAX + info->sib_index_ext; + operand->scale = (1 << info->sib_scale) & ~1; + if (operand->index == REG_ESP) + { + operand->index = REG_NONE; + operand->scale = 0; + } + if (operand->base == REG_EBP) + { + if (info->modrm_mod == 0) + { + operand->base = REG_NONE; + } + + if (info->modrm_mod == 1) + { + offset = 8; + } + else + { + offset = 32; + } + } + } + else + { + operand->index = REG_NONE; + operand->scale = 0; + } + break; + case 64: + operand->base = REG_RAX + info->modrm_rm_ext; + switch (info->modrm_mod) + { + case 0: + if ((info->modrm_rm_ext & 0x07) == 5) + { + info->flags |= IF_RELATIVE; + operand->base = REG_RIP; + offset = 32; + } + break; + case 1: + offset = 8; + break; + case 2: + offset = 32; + break; + default: + assert(0); + } + if ((info->modrm_rm_ext & 0x07) == 4) + { + if (!VXInstructionDecoder_DecodeSIB(ctx, info)) + { + return false; + } + + operand->base = REG_RAX + info->sib_base_ext; + operand->index = REG_RAX + info->sib_index_ext; + if (operand->index == REG_RSP) + { + operand->index = REG_NONE; + operand->scale = 0; + } + else + { + operand->scale = (1 << info->sib_scale) & ~1; + } + + if ((operand->base == REG_RBP) || (operand->base == REG_R13)) + { + if (info->modrm_mod == 0) + { + operand->base = REG_NONE; + } + + if (info->modrm_mod == 1) + { + offset = 8; + } + else + { + offset = 32; + } + } + } else + { + operand->index = REG_NONE; + operand->scale = 0; + } + break; + } + if (offset) + { + if (!VXInstructionDecoder_DecodeDisplacement(ctx, info, operand, offset)) + { + return false; + } + } else + { + operand->offset = 0; + } + return true; +} + +static bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandSize operandSize) +{ + operand->type = OPTYPE_IMMEDIATE; + operand->size = VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); + switch (operand->size) + { + case 8: + operand->lval.ubyte = VXInstructionDecoder_InputNext8(ctx, info); + break; + case 16: + operand->lval.uword = VXInstructionDecoder_InputNext16(ctx, info); + break; + case 32: + operand->lval.udword = VXInstructionDecoder_InputNext32(ctx, info); + break; + case 64: + operand->lval.uqword = VXInstructionDecoder_InputNext64(ctx, info); + break; + default: + // TODO: Maybe return false instead of assert + assert(0); + } + if (!operand->lval.uqword && (info->flags & IF_ERROR_MASK)) + { + return false; + } + return true; +} + +static bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info, VXOperandInfo *operand, uint8_t size) +{ + switch (size) + { + case 8: + operand->offset = 8; + operand->lval.ubyte = VXInstructionDecoder_InputNext8(ctx, info); + break; + case 16: + operand->offset = 16; + operand->lval.uword = VXInstructionDecoder_InputNext16(ctx, info); + break; + case 32: + operand->offset = 32; + operand->lval.udword = VXInstructionDecoder_InputNext32(ctx, info); + break; + case 64: + operand->offset = 64; + operand->lval.uqword = VXInstructionDecoder_InputNext64(ctx, info); + break; + default: + // TODO: Maybe return false instead of assert + assert(0); + } + if (!operand->lval.uqword && (info->flags & IF_ERROR_MASK)) + { + return false; + } + return true; +} + +static bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info) +{ + if (!(info->flags & IF_MODRM)) + { + info->modrm = VXInstructionDecoder_InputNext8(ctx, info); + if (!info->modrm && (info->flags & IF_ERROR_MASK)) + { + return false; + } + info->flags |= IF_MODRM; + info->modrm_mod = (info->modrm >> 6) & 0x03; + info->modrm_reg = (info->modrm >> 3) & 0x07; + info->modrm_rm = (info->modrm >> 0) & 0x07; + } + + // The @c decodeModrm method might get called multiple times during the opcode- and the + // operand decoding, but the effective REX/VEX fields are not initialized before the end of + // the opcode decoding process-> As the extended values are only used for the operand decoding, + // we should have no problems-> + info->modrm_reg_ext = (info->eff_rexvex_r << 3) | info->modrm_reg; + info->modrm_rm_ext = (info->eff_rexvex_b << 3) | info->modrm_rm; + return true; +} + +static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info) +{ + assert(info->flags & IF_MODRM); + assert((info->modrm_rm & 0x7) == 4); + if (!(info->flags & IF_SIB)) + { + info->sib = VXInstructionDecoder_InputNext8(ctx, info); + if (!info->sib && (info->flags & IF_ERROR_MASK)) + { + return false; + } + info->flags |= IF_SIB; + info->sib_scale = (info->sib >> 6) & 0x03; + info->sib_index = (info->sib >> 3) & 0x07; + info->sib_base = (info->sib >> 0) & 0x07; + // The @c decodeSib method is only called during the operand decoding, so updating the + // extended values at this point should be safe-> + info->sib_index_ext = (info->eff_rexvex_x << 3) | info->sib_index; + info->sib_base_ext = (info->eff_rexvex_b << 3) | info->sib_base; + } + return true; +} + +static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info) +{ + if (!(info->flags & IF_PREFIX_VEX)) + { + info->vex_op = VXInstructionDecoder_InputCurrent(ctx); + switch (info->vex_op) + { + case 0xC4: + info->vex_b1 = VXInstructionDecoder_InputNext8(ctx, info); + if (!info->vex_b1 || (info->flags & IF_ERROR_MASK)) + { + return false; + } + + info->vex_b2 = VXInstructionDecoder_InputNext8(ctx, info); + if (!info->vex_b2 || (info->flags & IF_ERROR_MASK)) + { + return false; + } + + info->vex_r = (info->vex_b1 >> 7) & 0x01; + info->vex_x = (info->vex_b1 >> 6) & 0x01; + info->vex_b = (info->vex_b1 >> 5) & 0x01; + info->vex_m_mmmm = (info->vex_b1 >> 0) & 0x1F; + info->vex_w = (info->vex_b2 >> 7) & 0x01; + info->vex_vvvv = (info->vex_b2 >> 3) & 0x0F; + info->vex_l = (info->vex_b2 >> 2) & 0x01; + info->vex_pp = (info->vex_b2 >> 0) & 0x03; + break; + case 0xC5: + info->vex_b1 = VXInstructionDecoder_InputNext8(ctx, info); + if (!info->vex_b1 || (info->flags & IF_ERROR_MASK)) + { + return false; + } + + info->vex_r = (info->vex_b1 >> 7) & 0x01; + info->vex_x = 1; + info->vex_b = 1; + info->vex_m_mmmm = 1; + info->vex_w = 0; + info->vex_vvvv = (info->vex_b1 >> 3) & 0x0F; + info->vex_l = (info->vex_b1 >> 2) & 0x01; + info->vex_pp = (info->vex_b1 >> 0) & 0x03; + break; + default: + assert(0); + } + if (info->vex_m_mmmm > 3) + { + // TODO: Add proper error flag + info->flags |= IF_ERROR_MASK; + return false; + } + info->flags |= IF_PREFIX_VEX; + } + return true; +} + +static uint16_t VXInstructionDecoder_GetEffectiveOperandSize( + const VXInstructionDecoderContext *ctx, const VXInstructionInfo *info, + VXDefinedOperandSize operandSize) +{ + const VXInstructionDecoder *thiz = VXInstructionDecoder_cthiz(ctx); + + switch (operandSize) + { + case DOS_NA: + return 0; + case DOS_Z: + return (info->operand_mode == 16) ? 16 : 32; + case DOS_V: + return info->operand_mode; + case DOS_Y: + return (info->operand_mode == 16) ? 32 : info->operand_mode; + case DOS_X: + assert(info->vex_op != 0); + return (info->eff_vex_l) ? + VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, DOS_QQ) : + VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, DOS_DQ); + case DOS_RDQ: + return (thiz->disassemblerMode == DM_M64BIT) ? 64 : 32; + default: + return VXGetSimpleOperandSize(operandSize); + } +} + +static bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info) +{ + assert(info->instrDefinition); + // Always try to decode the first operand + if (!VXInstructionDecoder_DecodeOperand(ctx, info, &info->operand[0], + info->instrDefinition->operand[0].type, info->instrDefinition->operand[0].size)) + { + return false; + } + + // Decode other operands on demand + for (unsigned int i = 1; i < 4; ++i) + { + if (info->operand[i - 1].type != OPTYPE_NONE) + { + if (!VXInstructionDecoder_DecodeOperand(ctx, info, &info->operand[i], + info->instrDefinition->operand[i].type, info->instrDefinition->operand[i].size)) + { + return false; + } + } + } + + // Update operand access modes + for (unsigned int i = 0; i < 4; ++i) + { + if (info->operand[i].type != OPTYPE_NONE) + { + info->operand[i].access_mode = OPACCESSMODE_READ; + if (i == 0) + { + if (info->instrDefinition->flags & IDF_OPERAND1_WRITE) + { + info->operand[0].access_mode = OPACCESSMODE_WRITE; + } + else if (info->instrDefinition->flags & IDF_OPERAND1_READWRITE) + { + info->operand[0].access_mode = OPACCESSMODE_READWRITE; + } + } + else if (i == 1) + { + if (info->instrDefinition->flags & IDF_OPERAND2_WRITE) + { + info->operand[1].access_mode = OPACCESSMODE_WRITE; + } + else if (info->instrDefinition->flags & IDF_OPERAND2_READWRITE) + { + info->operand[1].access_mode = OPACCESSMODE_READWRITE; + } + } + } + } + + return true; +} + +static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandType operandType, + VXDefinedOperandSize operandSize) +{ + const VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + + operand->type = OPTYPE_NONE; + switch (operandType) + { + case DOT_NONE: + break; + case DOT_A: + operand->type = OPTYPE_POINTER; + if (info->operand_mode == 16) + { + operand->size = 32; + operand->lval.ptr.off = VXInstructionDecoder_InputNext16(ctx, info); + operand->lval.ptr.seg = VXInstructionDecoder_InputNext16(ctx, info); + } + else + { + operand->size = 48; + operand->lval.ptr.off = VXInstructionDecoder_InputNext32(ctx, info); + operand->lval.ptr.seg = VXInstructionDecoder_InputNext16(ctx, info); + } + + if ((!operand->lval.ptr.off || !operand->lval.ptr.seg) && (info->flags & IF_ERROR_MASK)) + { + return false; + } + + break; + case DOT_C: + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_CONTROL, + info->modrm_reg_ext, operandSize); + case DOT_D: + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_DEBUG, + info->modrm_reg_ext, operandSize); + case DOT_F: + // TODO: FAR flag + case DOT_M: + // ModR/M byte may refer only to a register + if (info->modrm_mod == 3) + { + info->flags |= IF_ERROR_OPERAND; + return false; + } + case DOT_E: + return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, + RC_GENERAL_PURPOSE, operandSize); + case DOT_G: + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + info->modrm_reg_ext, operandSize); + case DOT_H: + assert(info->vex_op != 0); + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, + (0xF & ~info->vex_vvvv), operandSize); + case DOT_sI: + operand->signed_lval = true; + case DOT_I: + return VXInstructionDecoder_DecodeImmediate(ctx, info, operand, operandSize); + case DOT_I1: + operand->type = OPTYPE_CONSTANT; + operand->lval.udword = 1; + break; + case DOT_J: + if (!VXInstructionDecoder_DecodeImmediate(ctx, info, operand, operandSize)) + { + return false; + } + operand->type = OPTYPE_REL_IMMEDIATE; + operand->signed_lval = true; + info->flags |= IF_RELATIVE; + break; + case DOT_L: + { + assert(info->vex_op != 0); + uint8_t imm = VXInstructionDecoder_InputNext8(ctx, info); + if (!imm && (info->flags & IF_ERROR_MASK)) + { + return false; + } + uint8_t mask = (thiz->disassemblerMode == DM_M64BIT) ? 0xF : 0x7; + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, + mask & (imm >> 4), operandSize); + } + case DOT_MR: + return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, + RC_GENERAL_PURPOSE, info->modrm_mod == 3 ? + VXGetComplexOperandRegSize(operandSize) : VXGetComplexOperandMemSize(operandSize)); + case DOT_MU: + return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_XMM, + info->modrm_mod == 3 ? + VXGetComplexOperandRegSize(operandSize) : VXGetComplexOperandMemSize(operandSize)); + case DOT_N: + // ModR/M byte may refer only to memory + if (info->modrm_mod != 3) + { + info->flags |= IF_ERROR_OPERAND; + return false; + } + case DOT_Q: + return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_MMX, + operandSize); + case DOT_O: + operand->type = OPTYPE_MEMORY; + operand->base = REG_NONE; + operand->index = REG_NONE; + operand->scale = 0; + operand->size = VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); + return VXInstructionDecoder_DecodeDisplacement(ctx, info, operand, info->address_mode); + case DOT_P: + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_MMX, + info->modrm_reg_ext, operandSize); + case DOT_R: + // ModR/M byte may refer only to memory + if (info->modrm_mod != 3) + { + info->flags |= IF_ERROR_OPERAND; + return false; + } + return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, + RC_GENERAL_PURPOSE, operandSize); + case DOT_S: + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_SEGMENT, + info->modrm_reg_ext, operandSize); + case DOT_U: + // ModR/M byte may refer only to memory + if (info->modrm_mod != 3) + { + info->flags |= IF_ERROR_OPERAND; + return false; + } + case DOT_W: + return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_XMM, + operandSize); + case DOT_V: + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, + info->modrm_reg_ext, operandSize); + case DOT_R0: + case DOT_R1: + case DOT_R2: + case DOT_R3: + case DOT_R4: + case DOT_R5: + case DOT_R6: + case DOT_R7: + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + ((info->eff_rexvex_b << 3) | operandType - DOT_R0), operandSize); + case DOT_AL: + case DOT_AX: + case DOT_EAX: + case DOT_RAX: + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + 0, operandSize); + case DOT_CL: + case DOT_CX: + case DOT_ECX: + case DOT_RCX: + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + 1, operandSize); + case DOT_DL: + case DOT_DX: + case DOT_EDX: + case DOT_RDX: + return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + 2, operandSize); + case DOT_ES: + case DOT_CS: + case DOT_SS: + case DOT_DS: + case DOT_FS: + case DOT_GS: + if (thiz->disassemblerMode == DM_M64BIT) + { + if ((operandType != DOT_FS) && (operandType != DOT_GS)) + { + info->flags |= IF_ERROR_OPERAND; + return false; + } + } + operand->type = OPTYPE_REGISTER; + operand->base = operandType - DOT_ES + REG_ES; + operand->size = 16; + break; + case DOT_ST0: + case DOT_ST1: + case DOT_ST2: + case DOT_ST3: + case DOT_ST4: + case DOT_ST5: + case DOT_ST6: + case DOT_ST7: + operand->type = OPTYPE_REGISTER; + operand->base = operandType - DOT_ST0 + REG_ST0; + operand->size = 80; + break; + default: + assert(0); + } + return true; +} + +static void VXInstructionDecoder_ResolveOperandAndAddressMode( + const VXInstructionDecoderContext *ctx, VXInstructionInfo *info) +{ + const VXInstructionDecoder *thiz = VXInstructionDecoder_cthiz(ctx); + + assert(info->instrDefinition); + switch (thiz->disassemblerMode) + { + case DM_M16BIT: + info->operand_mode = (info->flags & IF_PREFIX_OPERAND_SIZE) ? 32 : 16; + info->address_mode = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 32 : 16; + break; + case DM_M32BIT: + info->operand_mode = (info->flags & IF_PREFIX_OPERAND_SIZE) ? 16 : 32; + info->address_mode = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 16 : 32; + break; + case DM_M64BIT: + if (info->eff_rexvex_w) + { + info->operand_mode = 64; + } + else if ((info->flags & IF_PREFIX_OPERAND_SIZE)) + { + info->operand_mode = 16; + } + else + { + info->operand_mode = (info->instrDefinition->flags & IDF_DEFAULT_64) ? 64 : 32; + } + + info->address_mode = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 32 : 64; + break; + default: + assert(0); + } +} + +static void VXInstructionDecoder_CalculateEffectiveRexVexValues( + const VXInstructionDecoderContext *ctx, VXInstructionInfo *info) +{ + assert(info->instrDefinition); + uint8_t rex = info->rex; + if (info->flags & IF_PREFIX_VEX) + { + switch (info->vex_op) + { + case 0xC4: + rex = ((~(info->vex_b1 >> 5) & 0x07) | ((info->vex_b2 >> 4) & 0x08)); + break; + case 0xC5: + rex = (~(info->vex_b1 >> 5)) & 4; + break; + default: + assert(0); + } + } + rex &= (info->instrDefinition->flags & 0x000F); + info->eff_rexvex_w = (rex >> 3) & 0x01; + info->eff_rexvex_r = (rex >> 2) & 0x01; + info->eff_rexvex_x = (rex >> 1) & 0x01; + info->eff_rexvex_b = (rex >> 0) & 0x01; + info->eff_vex_l = info->vex_l && (info->instrDefinition->flags & IDF_ACCEPTS_VEXL); +} + +static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info) +{ + VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + + bool done = false; + do + { + switch (VXInstructionDecoder_InputPeek(ctx, info)) + { + case 0xF0: + info->flags |= IF_PREFIX_LOCK; + break; + case 0xF2: + // REPNZ and REPZ are mutally exclusive. The one that comes later has precedence. + info->flags |= IF_PREFIX_REP; + info->flags &= ~IF_PREFIX_REPNE; + break; + case 0xF3: + // REPNZ and REPZ are mutally exclusive. The one that comes later has precedence. + info->flags |= IF_PREFIX_REP; + info->flags &= ~IF_PREFIX_REPNE; + break; + case 0x2E: + info->flags |= IF_PREFIX_SEGMENT; + info->segment = REG_CS; + break; + case 0x36: + info->flags |= IF_PREFIX_SEGMENT; + info->segment = REG_SS; + break; + case 0x3E: + info->flags |= IF_PREFIX_SEGMENT; + info->segment = REG_DS; + break; + case 0x26: + info->flags |= IF_PREFIX_SEGMENT; + info->segment = REG_ES; + break; + case 0x64: + info->flags |= IF_PREFIX_SEGMENT; + info->segment = REG_FS; + break; + case 0x65: + info->flags |= IF_PREFIX_SEGMENT; + info->segment = REG_GS; + break; + case 0x66: + info->flags |= IF_PREFIX_OPERAND_SIZE; + break; + case 0x67: + info->flags |= IF_PREFIX_ADDRESS_SIZE; + break; + default: + if ((thiz->disassemblerMode == DM_M64BIT) && + (VXInstructionDecoder_InputCurrent(ctx) & 0xF0) == 0x40) + { + info->flags |= IF_PREFIX_REX; + info->rex = VXInstructionDecoder_InputCurrent(ctx); + } + else + { + done = true; + } + break; + } + // Increase the input offset, if a prefix was found + if (!done) + { + if (!VXInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) + { + return false; + } + } + } while (!done); + // TODO: Check for multiple prefixes of the same group + // Parse REX Prefix + if (info->flags & IF_PREFIX_REX) + { + info->rex_w = (info->rex >> 3) & 0x01; + info->rex_r = (info->rex >> 2) & 0x01; + info->rex_x = (info->rex >> 1) & 0x01; + info->rex_b = (info->rex >> 0) & 0x01; + } + return true; +} + +static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info) +{ + VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + + // Read first opcode byte + if (!VXInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) + { + return false; + } + + // Update instruction info + info->opcode[0] = VXInstructionDecoder_InputCurrent(ctx); + info->opcode_length = 1; + + // Iterate through opcode tree + VXOpcodeTreeNode node = VXGetOpcodeTreeChild(VXGetOpcodeTreeRoot(), + VXInstructionDecoder_InputCurrent(ctx)); + VXOpcodeTreeNodeType nodeType; + + do + { + uint16_t index = 0; + nodeType = VXGetOpcodeNodeType(node); + switch (nodeType) + { + case OTNT_INSTRUCTION_DEFINITION: + { + // Check for invalid instruction + if (VXGetOpcodeNodeValue(node) == 0) + { + info->flags |= IF_ERROR_INVALID; + return false; + } + // Get instruction definition + const VXInstructionDefinition *instrDefinition = VXGetInstructionDefinition(node); + // Check for invalid 64 bit instruction + if ((thiz->disassemblerMode == DM_M64BIT) && + (instrDefinition->flags & IDF_INVALID_64)) + { + info->flags |= IF_ERROR_INVALID_64; + return false; + } + // Update instruction info + info->instrDefinition = instrDefinition; + info->mnemonic = instrDefinition->mnemonic; + // Update effective REX/VEX values + VXInstructionDecoder_CalculateEffectiveRexVexValues(ctx, info); + // Resolve operand and address mode + VXInstructionDecoder_ResolveOperandAndAddressMode(ctx, info); + // Decode operands + if (!VXInstructionDecoder_DecodeOperands(ctx, info)) + { + return false; + } + } + return true; + case OTNT_TABLE: + // Read next opcode byte + if (!VXInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) + { + return false; + } + // Update instruction info + assert((info->opcode_length > 0) && (info->opcode_length < 3)); + info->opcode[info->opcode_length] = VXInstructionDecoder_InputCurrent(ctx); + info->opcode_length++; + // Set child node index for next iteration + index = VXInstructionDecoder_InputCurrent(ctx); + break; + case OTNT_MODRM_MOD: + // Decode modrm byte + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + index = (info->modrm_mod == 0x3) ? 1 : 0; + break; + case OTNT_MODRM_REG: + // Decode modrm byte + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + index = info->modrm_reg; + break; + case OTNT_MODRM_RM: + // Decode modrm byte + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + index = info->modrm_rm; + break; + case OTNT_MANDATORY: + // Check if there are any prefixes present + if (info->flags & IF_PREFIX_REP) + { + index = 1; // F2 + } + else if (info->flags & IF_PREFIX_REPNE) + { + index = 2; // F3 + } + else if (info->flags & IF_PREFIX_OPERAND_SIZE) + { + index = 3; // 66 + } + + if (VXGetOpcodeTreeChild(node, index) == 0) + { + index = 0; + } + + if (index && (VXGetOpcodeTreeChild(node, index) != 0)) + { + // Remove REP and REPNE prefix + info->flags &= ~IF_PREFIX_REP; + info->flags &= ~IF_PREFIX_REPNE; + // Remove OPERAND_SIZE prefix, if it was used as mandatory prefix for the + // instruction + if (index == 3) + { + info->flags &= ~IF_PREFIX_OPERAND_SIZE; + } + } + break; + case OTNT_X87: + // Decode modrm byte + if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + { + return false; + } + index = info->modrm - 0xC0; + break; + case OTNT_ADDRESS_SIZE: + switch (thiz->disassemblerMode) + { + case DM_M16BIT: + index = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 1 : 0; + break; + case DM_M32BIT: + index = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 0 : 1; + break; + case DM_M64BIT: + index = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 1 : 2; + break; + default: + assert(0); + } + break; + case OTNT_OPERAND_SIZE: + switch (thiz->disassemblerMode) + { + case DM_M16BIT: + index = (info->flags & IF_PREFIX_OPERAND_SIZE) ? 1 : 0; + break; + case DM_M32BIT: + index = (info->flags & IF_PREFIX_OPERAND_SIZE) ? 0 : 1; + break; + case DM_M64BIT: + index = (info->rex_w) ? 2 : ((info->flags & IF_PREFIX_OPERAND_SIZE) ? 0 : 1); + break; + default: + assert(0); + } + break; + case OTNT_MODE: + index = (thiz->disassemblerMode != DM_M64BIT) ? 0 : 1; + break; + case OTNT_VENDOR: + switch (thiz->preferredVendor) + { + case ISV_ANY: + index = (VXGetOpcodeTreeChild(node, 0) != 0) ? 0 : 1; + break; + case ISV_INTEL: + index = 1; + break; + case ISV_AMD: + index = 0; + break; + default: + assert(0); + } + break; + case OTNT_AMD3DNOW: + { + // As all 3dnow instructions got the same operands and flag definitions, we just + // decode a random instruction and determine the specific opcode later-> + assert(VXGetOpcodeTreeChild(node, 0x0C) != 0); + const VXInstructionDefinition *instrDefinition = + VXGetInstructionDefinition(VXGetOpcodeTreeChild(node, 0x0C)); + // Update instruction info + info->instrDefinition = instrDefinition; + info->mnemonic = instrDefinition->mnemonic; + // Update effective REX/VEX values + VXInstructionDecoder_CalculateEffectiveRexVexValues(ctx, info); + // Resolve operand and address mode + VXInstructionDecoder_ResolveOperandAndAddressMode(ctx, info); + // Decode operands + if (!VXInstructionDecoder_DecodeOperands(ctx, info)) + { + return false; + } + // Read the actual 3dnow opcode + info->opcode[2] = VXInstructionDecoder_InputNext8(ctx, info); + if (!info->opcode[2] && (info->flags & IF_ERROR_MASK)) + { + return false; + } + // Update instruction info + instrDefinition = + VXGetInstructionDefinition(VXGetOpcodeTreeChild(node, info->opcode[2])); + if (!instrDefinition || + (instrDefinition->mnemonic == MNEM_INVALID)) + { + info->flags |= IF_ERROR_INVALID; + return false; + } + info->instrDefinition = instrDefinition; + info->mnemonic = instrDefinition->mnemonic; + // Update operand access modes + for (unsigned int i = 0; i < 4; ++i) + { + if (info->operand[i].type != OPTYPE_NONE) + { + info->operand[i - 1].access_mode = OPACCESSMODE_READ; + } + } + if (info->operand[0].type != OPTYPE_NONE) + { + if (info->instrDefinition->flags & IDF_OPERAND1_WRITE) + { + info->operand[0].access_mode = OPACCESSMODE_WRITE; + } else if (info->instrDefinition->flags & IDF_OPERAND1_READWRITE) + { + info->operand[0].access_mode = OPACCESSMODE_READWRITE; + } + } + if (info->operand[1].type != OPTYPE_NONE) + { + if (info->instrDefinition->flags & IDF_OPERAND2_WRITE) + { + info->operand[1].access_mode = OPACCESSMODE_WRITE; + } else if (info->instrDefinition->flags & IDF_OPERAND2_READWRITE) + { + info->operand[1].access_mode = OPACCESSMODE_READWRITE; + } + } + // Terminate loop + return true; + } + case OTNT_VEX: + if ((thiz->disassemblerMode == DM_M64BIT) + || (((VXInstructionDecoder_InputCurrent(ctx) >> 6) & 0x03) == 0x03)) + { + // Decode vex prefix + if (!VXInstructionDecoder_DecodeVex(ctx, info)) + { + return false; + } + + // Update instruction info (error cases are checked by the @c decodeVex method) + switch (info->vex_m_mmmm) + { + case 1: + info->opcode_length = 1; + info->opcode[0] = 0x0F; + break; + case 2: + info->opcode_length = 2; + info->opcode[0] = 0x0F; + info->opcode[1] = 0x38; + break; + case 3: + info->opcode_length = 2; + info->opcode[0] = 0x0F; + info->opcode[1] = 0x3A; + break; + } + + // Set child node index for next iteration + index = info->vex_m_mmmm + (info->vex_pp << 2); + } else + { + index = 0; + } + break; + case OTNT_VEXW: + assert(info->flags & IF_PREFIX_VEX); + index = info->vex_w; + break; + case OTNT_VEXL: + assert(info->flags & IF_PREFIX_VEX); + index = info->vex_l; + break; + default: + assert(0); + } + node = VXGetOpcodeTreeChild(node, index); + } while (nodeType != OTNT_INSTRUCTION_DEFINITION); + return false; +} + +bool VXInstructionDecoder_DecodeInstruction( + VXInstructionDecoderContext *ctx, + VXInstructionInfo *info) +{ + VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + + // Clear instruction info + memset(info, 0, sizeof(*info)); + + // Set disassembler mode flags + switch (thiz->disassemblerMode) + { + case DM_M16BIT: + info->flags |= IF_DISASSEMBLER_MODE_16; + break; + case DM_M32BIT: + info->flags |= IF_DISASSEMBLER_MODE_32; + break; + case DM_M64BIT: + info->flags |= IF_DISASSEMBLER_MODE_64; + break; + default: + assert(0); + } + + // Set instruction address + info->instrAddress = thiz->instructionPointer; + + // Decode + if (!VXInstructionDecoder_DecodePrefixes(ctx, info) + || !VXInstructionDecoder_DecodeOpcode(ctx, info)) + { + goto DecodeError; + } + + // SWAPGS is only valid in 64 bit mode + if ((info->mnemonic == MNEM_SWAPGS) && + (thiz->disassemblerMode != DM_M64BIT)) + { + info->flags &= IF_ERROR_INVALID; + goto DecodeError; + } + + // Handle aliases + if (info->mnemonic == MNEM_XCHG) + { + if ((info->operand[0].type == OPTYPE_REGISTER && + info->operand[0].base == REG_AX && + info->operand[1].type == OPTYPE_REGISTER && + info->operand[1].base == REG_AX) || + (info->operand[0].type == OPTYPE_REGISTER && + info->operand[0].base == REG_EAX && + info->operand[1].type == OPTYPE_REGISTER && + info->operand[1].base == REG_EAX)) + { + info->mnemonic = MNEM_NOP; + info->operand[0].type = OPTYPE_NONE; + info->operand[1].type = OPTYPE_NONE; + info->operand[0].access_mode = OPACCESSMODE_NA; + info->operand[1].access_mode = OPACCESSMODE_NA; + } + } + + if ((info->mnemonic == MNEM_NOP) && (info->flags & IF_PREFIX_REP)) + { + info->mnemonic = MNEM_PAUSE; + info->flags &= ~IF_PREFIX_REP; + } + + // Increment instruction pointer + thiz->instructionPointer += info->length; + // Set instruction pointer + info->instrPointer = thiz->instructionPointer; + return true; + +DecodeError: + ++thiz->instructionPointer; + + // Backup all error flags, the instruction length and the instruction address + uint32_t flags = info->flags & (IF_ERROR_MASK | 0x00000007); + uint8_t length = info->length; + uint8_t firstByte = info->data[0]; + uint64_t instrAddress = info->instrAddress; + + // Clear instruction info + memset(info, 0, sizeof(*info)); + + // Restore saved values + info->flags = flags; + info->length = length; + info->data[0] = firstByte; + info->instrAddress = instrAddress; + info->instrDefinition = VXGetInstructionDefinition(0); + + // Return with error, if the end of the input source was reached while decoding the + // invalid instruction + if (info->flags & IF_ERROR_END_OF_INPUT) + { + info->length = 0; + return false; + } + + // Decrement the input position, if more than one byte was read from the input data + // source while decoding the invalid instruction + if (info->length != 1) + { + VXBaseDataSource_SetPosition(thiz->dataSource, + VXBaseDataSource_GetPosition(thiz->dataSource) - info->length + 1); + info->length = 1; + } + + return true; +} + +/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionDecoderC.cpp b/Bindings/C/VXInstructionDecoderC.cpp deleted file mode 100644 index 94aa7b1..0000000 --- a/Bindings/C/VXInstructionDecoderC.cpp +++ /dev/null @@ -1,259 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : athre0z - Modifications : - - Last change : 04. February 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#include "VXInstructionDecoderC.h" -#include "VXInstructionDecoder.h" -#include "VXDisassemblerTypes.h" - -/* Helpers ===================================================================================== */ - -namespace -{ - -inline Verteron::VXBaseDataSource* VXBaseDataSource_CppPtr( - VXBaseDataSourceContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Verteron::VXBaseDataSource* VXBaseDataSource_CppPtr( - const VXBaseDataSourceContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline VXBaseDataSourceContext* VXBaseDataSource_CPtr( - Verteron::VXBaseDataSource *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const VXBaseDataSourceContext* VXBaseDataSource_CPtr( - const Verteron::VXBaseDataSource *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Verteron::VXInstructionInfo* VXInstructionInfo_CppPtr( - VXInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Verteron::VXInstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline const Verteron::VXInstructionInfo* VXInstructionInfo_CppPtr( - const VXInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Verteron::VXInstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline VXInstructionDecoderContext* VXInstructionDecoder_CPtr( - Verteron::VXInstructionDecoder *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const VXInstructionDecoderContext* VXInstructionDecoder_CPtr( - const Verteron::VXInstructionDecoder *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Verteron::VXInstructionDecoder* VXInstructionDecoder_CppPtr( - VXInstructionDecoderContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Verteron::VXInstructionDecoder* VXInstructionDecoder_CppPtr( - const VXInstructionDecoderContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline Verteron::VXDisassemblerMode VXDisassemblerMode_CppRepr( - VXDisassemblerMode val) -{ - return static_cast(val); -} - -inline VXDisassemblerMode VXDisassemblerMode_CRepr( - Verteron::VXDisassemblerMode val) -{ - return static_cast(val); -} - -inline Verteron::VXInstructionSetVendor VXInstructionSetVendor_CppRepr( - VXInstructionSetVendor val) -{ - return static_cast(val); -} - -inline VXInstructionSetVendor VXInstructionSetVendor_CRepr( - Verteron::VXInstructionSetVendor val) -{ - return static_cast(val); -} - -} - -/* VXBaseDataSource ============================================================================ */ - -void VXBaseDataSource_Release(VXBaseDataSourceContext *ctx) -{ - delete VXBaseDataSource_CppPtr(ctx); -} - -uint8_t VXBaseDataSource_InputPeek(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) -{ - return VXBaseDataSource_CppPtr(ctx)->inputPeek(*VXInstructionInfo_CppPtr(info)); -} - -uint8_t VXBaseDataSource_InputNext(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) -{ - return VXBaseDataSource_CppPtr(ctx)->inputNext(*VXInstructionInfo_CppPtr(info)); -} - -uint8_t VXBaseDataSource_InputCurrent(const VXBaseDataSourceContext *ctx) -{ - return VXBaseDataSource_CppPtr(ctx)->inputCurrent(); -} - -bool VXBaseDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx) -{ - return VXBaseDataSource_CppPtr(ctx)->isEndOfInput(); -} - -uint64_t VXBaseDataSource_GetPosition(const VXBaseDataSourceContext *ctx) -{ - return VXBaseDataSource_CppPtr(ctx)->getPosition(); -} - -bool VXBaseDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position) -{ - return VXBaseDataSource_CppPtr(ctx)->setPosition(position); -} - -/* VXMemoryDataSource ========================================================================== */ - -VXBaseDataSourceContext* VXMemoryDataSource_Create(const void* buffer, size_t bufferLen) -{ - return reinterpret_cast( - new Verteron::VXMemoryDataSource(buffer, bufferLen)); -} - -/* VXInstructionDecoder ======================================================================== */ - -VXInstructionDecoderContext* VXInstructionDecoder_Create() -{ - return reinterpret_cast(new Verteron::VXInstructionDecoder); -} - -VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( - VXBaseDataSourceContext *input, - VXDisassemblerMode disassemblerMode, - VXInstructionSetVendor preferredVendor, - uint64_t instructionPointer) -{ - return VXInstructionDecoder_CPtr(new Verteron::VXInstructionDecoder( - VXBaseDataSource_CppPtr(input), - VXDisassemblerMode_CppRepr(disassemblerMode), - VXInstructionSetVendor_CppRepr(preferredVendor), - instructionPointer)); -} - -void VXInstructionDecoder_Release(VXInstructionDecoderContext *ctx) -{ - delete VXInstructionDecoder_CppPtr(ctx); -} - -bool VXInstructionDecoder_DecodeInstruction( - VXInstructionDecoderContext *ctx, VXInstructionInfo *info) -{ - return VXInstructionDecoder_CppPtr(ctx)->decodeInstruction( - *VXInstructionInfo_CppPtr(info)); -} - -VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( - const VXInstructionDecoderContext *ctx) -{ - return VXBaseDataSource_CPtr(VXInstructionDecoder_CppPtr(ctx)->getDataSource()); -} - -void VXInstructionDecoder_SetDataSource( - VXInstructionDecoderContext *ctx, VXBaseDataSourceContext *input) -{ - VXInstructionDecoder_CppPtr(ctx)->setDataSource(VXBaseDataSource_CppPtr(input)); -} - -VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode(VXInstructionDecoderContext *ctx) -{ - return VXDisassemblerMode_CRepr(VXInstructionDecoder_CppPtr(ctx)->getDisassemblerMode()); -} - -void VXInstructionDecoder_SetDisassemblerMode( - VXInstructionDecoderContext *ctx, - VXDisassemblerMode disassemblerMode) -{ - VXInstructionDecoder_CppPtr(ctx)->setDisassemblerMode( - VXDisassemblerMode_CppRepr(disassemblerMode)); -} - -VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( - const VXInstructionDecoderContext *ctx) -{ - return VXInstructionSetVendor_CRepr(VXInstructionDecoder_CppPtr(ctx)->getPreferredVendor()); -} - -void VXInstructionDecoder_SetPreferredVendor( - VXInstructionDecoderContext *ctx, - VXInstructionSetVendor preferredVendor) -{ - return VXInstructionDecoder_CppPtr(ctx)->setPreferredVendor( - VXInstructionSetVendor_CppRepr(preferredVendor)); -} - -uint64_t VXInstructionDecoder_GetInstructionPointer( - VXInstructionDecoderContext *ctx) -{ - return VXInstructionDecoder_CppPtr(ctx)->getInstructionPointer(); -} - -void VXInstructionDecoder_SetInstructionPointer( - VXInstructionDecoderContext *ctx, - uint64_t instructionPointer) -{ - VXInstructionDecoder_CppPtr(ctx)->setInstructionPointer(instructionPointer); -} - -/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionDecoderC.h b/Bindings/C/VXInstructionDecoderC.h index e6a2333..b3a6607 100644 --- a/Bindings/C/VXInstructionDecoderC.h +++ b/Bindings/C/VXInstructionDecoderC.h @@ -8,7 +8,7 @@ Original Author : Florian Bernd Modifications : athre0z - Last change : 04. February 2015 + Last change : 14. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -34,6 +34,7 @@ #define _VDE_VXINSTRUCTIONDECODERC_H_ #include "VXDisassemblerTypesC.h" +#include "VXDisassemblerUtilsC.h" #include #include @@ -45,7 +46,7 @@ extern "C" /* VXBaseDataSource ============================================================================ */ -typedef struct _VXBaseDataSourceContext { int a; } VXBaseDataSourceContext; +typedef struct _VXBaseDataSourceContext { VXContextDescriptor d; } VXBaseDataSourceContext; /** * @brief Releases a data source. @@ -79,7 +80,28 @@ uint8_t VXBaseDataSource_InputPeek( * parameter. This function also appends the new byte to to @c data field of the @c info * parameter. */ -uint8_t VXBaseDataSource_InputNext( +uint8_t VXBaseDataSource_InputNext8( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); + +/** + * @copydoc VXBaseDataSource_InputNext8 + */ +uint16_t VXBaseDataSource_InputNext16( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); + +/** + * @copydoc VXBaseDataSource_InputNext8 + */ +uint32_t VXBaseDataSource_InputNext32( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); + +/** + * @copydoc VXBaseDataSource_InputNext8 + */ +uint64_t VXBaseDataSource_InputNext64( VXBaseDataSourceContext *ctx, VXInstructionInfo *info); @@ -157,7 +179,10 @@ typedef enum _VXInstructionSetVendor /* : uint8_t */ /* VXInstructionDecoder ======================================================================== */ -typedef struct _VXInstructionDecoderContext { int a; } VXInstructionDecoderContext; +typedef struct _VXInstructionDecoderContext +{ + VXContextDescriptor d; +} VXInstructionDecoderContext; /** * @brief Creates an instruction decoder. @@ -225,7 +250,7 @@ void VXInstructionDecoder_SetDataSource( * @return The current disassembler mode. */ VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( - VXInstructionDecoderContext *ctx); + const VXInstructionDecoderContext *ctx); /** * @brief Sets the current disassembler mode. @@ -259,7 +284,7 @@ void VXInstructionDecoder_SetPreferredVendor( * @return The current instruction pointer. */ uint64_t VXInstructionDecoder_GetInstructionPointer( - VXInstructionDecoderContext *ctx); + const VXInstructionDecoderContext *ctx); /** * @brief Sets a new instruction pointer. diff --git a/Bindings/C/VXInstructionFormatterC.c b/Bindings/C/VXInstructionFormatterC.c new file mode 100644 index 0000000..68f46c0 --- /dev/null +++ b/Bindings/C/VXInstructionFormatterC.c @@ -0,0 +1,856 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 14. March 2014 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#include "VXInstructionFormatterC.h" +#include "VXDisassemblerUtilsC.h" +#include "VXInternalHelpersC.h" +#include "VXOpcodeTableInternalC.h" + +#include +#include +#include +#include +#include + +/* Interface =================================================================================== */ + +/* VXBaseSymbolResolver ------------------------------------------------------------------------ */ + +typedef const char* (*VXBaseSymbolResolver_DestructionCallback)( + VXBaseSymbolResolverContext *ctx); +typedef const char* (*VXBaseSymbolResolver_ResolveSymbolCallback)( + VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, + uint64_t address, uint64_t *offset); + +typedef struct _VXBaseSymbolResolver +{ + VXBaseSymbolResolver_DestructionCallback destruct; // may be NULL + VXBaseSymbolResolver_ResolveSymbolCallback resolveCallback; +} VXBaseSymbolResolver; + +void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx); +const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); + +/* VXBaseInstructionFormatter ------------------------------------------------------------------ */ + +typedef void(*VXBaseInstructionFormatter_DestructionCallback)( + VXBaseInstructionFormatterContext *ctx); +typedef void(*VXBaseInstructionFormatter_InternalFormatInstructionCallback)( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); + +typedef struct _VXBaseInstructionFormatter +{ + VXBaseInstructionFormatter_DestructionCallback destruct; // may be NULL + VXBaseInstructionFormatter_InternalFormatInstructionCallback internalFormat; + VXBaseSymbolResolverContext *symbolResolver; + char *outputBuffer; + size_t outputBufferCapacity; + size_t outputStringLen; + bool outputUppercase; +} VXBaseInstructionFormatter; + +void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); +void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); +void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx); +void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, bool uppercase); +char const* VXBaseInstructionFormatter_RegisterToString(const VXBaseInstructionFormatterContext *ctx, VXRegister reg); +char const* VXBaseInstructionFormatter_ResolveSymbol(const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); +VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver(const VXBaseInstructionFormatterContext *ctx); +void VXBaseInstructionFormatter_SetSymbolResolver(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); +const char* VXBaseInstructionFormatter_FormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); +void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx); +char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx); +void VXBaseInstructionFormatter_OutputAppend(VXBaseInstructionFormatterContext *ctx, char const *text); +void VXBaseInstructionFormatter_OutputAppendFormatted(VXBaseInstructionFormatterContext *ctx, char const *format, ...); +void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, bool resolveSymbols); +void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols); +void VXBaseInstructionFormatter_OutputAppendDisplacement(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); + +/* VXIntelInstructionFormatter ----------------------------------------------------------------- */ + +typedef struct _VXIntelInstructionFormatter +{ + VXBaseInstructionFormatter super; +} VXIntelInstructionFormatter; + +void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); +void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); +void VXIntelInstructionFormatter_OutputAppendOperandCast(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); +void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); +void VXIntelInstructionFormatter_InternalFormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); + +/* VXExactSymbolResolver ----------------------------------------------------------------------- */ + +typedef struct _VXExactSymbolResolver +{ + VXBaseSymbolResolver super; +} VXExactSymbolResolver; + +// TODO + +/* Implementation ============================================================================== */ + +/* VXBaseSymbolResolver ------------------------------------------------------------------------ */ + +void VXBaseSymbolResolver_Release( + VXBaseSymbolResolverContext *ctx) +{ + VXBaseSymbolResolver *thiz = VXBaseSymbolResolver_thiz(ctx); + + if (thiz->destruct) + { + thiz->destruct(ctx); + } + + free(thiz); + free(ctx); +} + +const char* VXBaseSymbolResolver_ResolveSymbol( + VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, + uint64_t address, + uint64_t *offset) +{ + assert(VXBaseSymbolResolver_thiz(ctx)->resolveCallback); + return VXBaseSymbolResolver_thiz(ctx)->resolveCallback(ctx, info, address, offset); +} + +/* VXBaseInstructionFormatter ------------------------------------------------------------------ */ + +const char* VXBaseInstructionFormatter_registerStrings[] = +{ + /* 8 bit general purpose registers */ + "al", "cl", "dl", "bl", + "ah", "ch", "dh", "bh", + "spl", "bpl", "sil", "dil", + "r8b", "r9b", "r10b", "r11b", + "r12b", "r13b", "r14b", "r15b", + /* 16 bit general purpose registers */ + "ax", "cx", "dx", "bx", + "sp", "bp", "si", "di", + "r8w", "r9w", "r10w", "r11w", + "r12w", "r13w", "r14w", "r15w", + /* 32 bit general purpose registers */ + "eax", "ecx", "edx", "ebx", + "esp", "ebp", "esi", "edi", + "r8d", "r9d", "r10d", "r11d", + "r12d", "r13d", "r14d", "r15d", + /* 64 bit general purpose registers */ + "rax", "rcx", "rdx", "rbx", + "rsp", "rbp", "rsi", "rdi", + "r8", "r9", "r10", "r11", + "r12", "r13", "r14", "r15", + /* segment registers */ + "es", "cs", "ss", + "ds", "fs", "gs", + /* control registers */ + "cr0", "cr1", "cr2", "cr3", + "cr4", "cr5", "cr6", "cr7", + "cr8", "cr9", "cr10", "cr11", + "cr12", "cr13", "cr14", "cr15", + /* debug registers */ + "dr0", "dr1", "dr2", "dr3", + "dr4", "dr5", "dr6", "dr7", + "dr8", "dr9", "dr10", "dr11", + "dr12", "dr13", "dr14", "dr15", + /* mmx registers */ + "mm0", "mm1", "mm2", "mm3", + "mm4", "mm5", "mm6", "mm7", + /* x87 registers */ + "st0", "st1", "st2", "st3", + "st4", "st5", "st6", "st7", + /* extended multimedia registers */ + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + /* 256 bit multimedia registers */ + "ymm0", "ymm1", "ymm2", "ymm3", + "ymm4", "ymm5", "ymm6", "ymm7", + "ymm8", "ymm9", "ymm10", "ymm11", + "ymm12", "ymm13", "ymm14", "ymm15", + /* instruction pointer register */ + "rip" +}; + +void VXBaseInstructionFormatter_Construct( + VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver) +{ + VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + + thiz->destruct = &VXBaseInstructionFormatter_Destruct; + thiz->internalFormat = NULL; + thiz->symbolResolver = symbolResolver; + thiz->outputStringLen = 0; + thiz->outputUppercase = false; + thiz->outputBufferCapacity = 256; + thiz->outputBuffer = malloc(thiz->outputBufferCapacity); +} + +void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) +{ + VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + + if (thiz->outputBuffer) + { + free(thiz->outputBuffer); + thiz->outputBuffer = NULL; + } +} + +void VXBaseInstructionFormatter_Release( + VXBaseInstructionFormatterContext *ctx) +{ + VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + + if (thiz->destruct) + { + thiz->destruct(ctx); + } + + free(thiz); + free(ctx); +} + +void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, + bool uppercase) +{ + VXBaseInstructionFormatter_thiz(ctx)->outputUppercase = uppercase; +} + +char const* VXBaseInstructionFormatter_RegisterToString( + const VXBaseInstructionFormatterContext *ctx, VXRegister reg) +{ + if (reg == REG_NONE) + { + return "error"; + } + return VXBaseInstructionFormatter_registerStrings[reg - 1]; +} + +char const* VXBaseInstructionFormatter_ResolveSymbol( + const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, + uint64_t address, uint64_t *offset) +{ + const VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_cthiz(ctx); + + if (thiz->symbolResolver) + { + return VXBaseSymbolResolver_ResolveSymbol( + thiz->symbolResolver, info, address, offset); + } + + return NULL; +} + +VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( + const VXBaseInstructionFormatterContext *ctx) +{ + return VXBaseInstructionFormatter_cthiz(ctx)->symbolResolver; +} + +void VXBaseInstructionFormatter_SetSymbolResolver( + VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver) +{ + VXBaseInstructionFormatter_thiz(ctx)->symbolResolver = symbolResolver; +} + +const char* VXBaseInstructionFormatter_FormatInstruction( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info) +{ + VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + + // Clears the internal string buffer + VXBaseInstructionFormatter_OutputClear(ctx); + + // Calls the virtual format method that actually formats the instruction + thiz->internalFormat(ctx, info); + + if (thiz->outputBufferCapacity == 0) + { + // The basic instruction formatter only returns the instruction menmonic. + return VXGetInstructionMnemonicString(info->mnemonic); + } + + // Return the formatted instruction string + return VXBaseInstructionFormatter_OutputString(ctx); +} + +void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx) +{ + VXBaseInstructionFormatter_thiz(ctx)->outputStringLen = 0; +} + +char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx) +{ + return &VXBaseInstructionFormatter_thiz(ctx)->outputBuffer[0]; +} + +void VXBaseInstructionFormatter_OutputAppend( + VXBaseInstructionFormatterContext *ctx, char const *text) +{ + VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + + // Get the string length including the null-terminator char + size_t strLen = strlen(text) + 1; + + // Get the buffer size + size_t bufLen = thiz->outputBufferCapacity; + + // Decrease the offset by one, to exclude already existing null-terminator chars in the + // output buffer + size_t offset = (thiz->outputStringLen) ? thiz->outputStringLen - 1 : 0; + + // Resize capacity of the output buffer on demand and add some extra space to improve the + // performance + if (bufLen <= (thiz->outputStringLen + strLen)) + { + thiz->outputBufferCapacity = bufLen + strLen + 512; + thiz->outputBuffer = realloc(thiz->outputBuffer, thiz->outputBufferCapacity); + } + + // Write the text to the output buffer + memcpy(&thiz->outputBuffer[offset], text, strLen); + + // Increase the string length + thiz->outputStringLen = offset + strLen; + + // Convert to uppercase + if (thiz->outputUppercase) + { + for (size_t i = offset; i < thiz->outputStringLen - 1; ++i) + { + thiz->outputBuffer[i] = toupper(thiz->outputBuffer[i]); + } + } +} + +void VXBaseInstructionFormatter_OutputAppendFormatted( + VXBaseInstructionFormatterContext *ctx, char const *format, ...) +{ + VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + + va_list arguments; + va_start(arguments, format); + + // Get the buffer size + size_t bufLen = thiz->outputBufferCapacity; + + // Decrease the offset by one, to exclude already existing null-terminator chars in the + // output buffer + size_t offset = (thiz->outputStringLen) ? thiz->outputStringLen - 1 : 0; + + // Resize the output buffer on demand and add some extra space to improve the performance + if ((bufLen - thiz->outputStringLen) < 256) + { + bufLen = bufLen + 512; + thiz->outputBuffer = realloc(thiz->outputBuffer, bufLen); + thiz->outputBufferCapacity = bufLen; + } + + int strLen = 0; + do + { + // If the formatted text did not fit in the output buffer, resize it, and try again + if (strLen < 0) + { + thiz->outputBufferCapacity = bufLen + 512; + thiz->outputBuffer = realloc(thiz->outputBuffer, thiz->outputBufferCapacity); + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, format, arguments); + return; + } + // Write the formatted text to the output buffer + assert((bufLen - offset) > 0); + strLen = vsnprintf(&thiz->outputBuffer[offset], bufLen - offset, format, arguments); + } while (strLen < 0); + + // Increase the string length + thiz->outputStringLen = offset + strLen + 1; + + // Convert to uppercase + if (thiz->outputUppercase) + { + for (size_t i = offset; i < thiz->outputStringLen - 1; ++i) + { + thiz->outputBuffer[i] = toupper(thiz->outputBuffer[i]); + } + } + + va_end(arguments); +} + +void VXBaseInstructionFormatter_OutputAppendAddress( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, + uint64_t address, bool resolveSymbols) +{ + uint64_t offset = 0; + const char* name = NULL; + + if (resolveSymbols) + { + name = VXBaseInstructionFormatter_ResolveSymbol(ctx, info, address, &offset); + } + + if (name) + { + if (offset) + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s+%.2llX", name, offset); + } + else + { + VXBaseInstructionFormatter_OutputAppend(ctx, name); + } + } + else + { + if (info->flags & IF_DISASSEMBLER_MODE_16) + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.4X", address); + } + else if (info->flags & IF_DISASSEMBLER_MODE_32) + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.8lX", address); + } + else if (info->flags & IF_DISASSEMBLER_MODE_64) + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.16llX", address); + } + else + { + assert(0); + } + } +} + +void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols) +{ + VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + + assert(operand->type == OPTYPE_IMMEDIATE); + uint64_t value = 0; + if (operand->signed_lval && (operand->size != info->operand_mode)) + { + if (operand->size == 8) + { + value = (int64_t)operand->lval.sbyte; + } + else + { + assert(operand->size == 32); + value = (int64_t)operand->lval.sdword; + } + + if (info->operand_mode < 64) + { + value = value & ((1ull << info->operand_mode) - 1ull); + } + } + else + { + switch (operand->size) + { + case 8: + value = operand->lval.ubyte; + break; + case 16: + value = operand->lval.uword; + break; + case 32: + value = operand->lval.udword; + break; + case 64: + value = operand->lval.uqword; + break; + default: + assert(0); + } + } + + uint64_t offset = 0; + const char* name = NULL; + if (resolveSymbols) + { + name = VXBaseInstructionFormatter_ResolveSymbol(ctx, info, value, &offset); + } + + if (name) + { + if (offset) + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s+%.2llX", name, offset); + } + else + { + VXBaseInstructionFormatter_OutputAppend(ctx, name); + } + } + else + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value); + } +} + +void VXBaseInstructionFormatter_OutputAppendDisplacement( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, + const VXOperandInfo *operand) +{ + VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + + assert(operand->offset > 0); + if ((operand->base == REG_NONE) && (operand->index == REG_NONE)) + { + // Assume the displacement value is unsigned + assert(operand->scale == 0); + assert(operand->offset != 8); + uint64_t value = 0; + switch (operand->offset) + { + case 16: + value = operand->lval.uword; + break; + case 32: + value = operand->lval.udword; + break; + case 64: + value = operand->lval.uqword; + break; + default: + assert(0); + } + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value); + } else + { + // The displacement value might be negative + assert(operand->offset != 64); + int64_t value = 0; + switch (operand->offset) + { + case 8: + value = operand->lval.sbyte; + break; + case 16: + value = operand->lval.sword; + break; + case 32: + value = operand->lval.sdword; + break; + default: + assert(0); + } + if (value < 0) + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "-%.2lX", -value); + } else + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s%.2lX", + (operand->base != REG_NONE || operand->index != REG_NONE) ? "+" : "", value); + } + } +} + +/* VXIntelInstructionFormatter ----------------------------------------------------------------- */ + +void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, + VXBaseSymbolResolverContext* symbolResolver) +{ + VXBaseInstructionFormatter_Construct(ctx, symbolResolver); + VXIntelInstructionFormatter *thiz = VXIntelInstructionFormatter_thiz(ctx); + + thiz->super.destruct = &VXIntelInstructionFormatter_Destruct; + thiz->super.internalFormat = &VXIntelInstructionFormatter_InternalFormatInstruction; +} + +void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) +{ + VXBaseInstructionFormatter_Destruct(ctx); +} + +VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void) +{ + return VXIntelInstructionFormatter_CreateEx(NULL); +} + +VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( + VXBaseSymbolResolverContext *resolver) +{ + VXIntelInstructionFormatter *thiz = malloc(sizeof(VXIntelInstructionFormatter)); + VXBaseInstructionFormatterContext *ctx = malloc(sizeof(VXBaseInstructionFormatterContext)); + + ctx->d.type = TYPE_INTELINSTRUCTIONFORMATTER; + ctx->d.ptr = thiz; + + VXIntelInstructionFormatter_Construct(ctx, resolver); + + return ctx; +} + +void VXIntelInstructionFormatter_OutputAppendOperandCast( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, + const VXOperandInfo *operand) +{ + switch(operand->size) + { + case 8: + VXBaseInstructionFormatter_OutputAppend(ctx, "byte ptr " ); + break; + case 16: + VXBaseInstructionFormatter_OutputAppend(ctx, "word ptr " ); + break; + case 32: + VXBaseInstructionFormatter_OutputAppend(ctx, "dword ptr "); + break; + case 64: + VXBaseInstructionFormatter_OutputAppend(ctx, "qword ptr "); + break; + case 80: + VXBaseInstructionFormatter_OutputAppend(ctx, "tword ptr "); + break; + case 128: + VXBaseInstructionFormatter_OutputAppend(ctx, "oword ptr "); + break; + case 256: + VXBaseInstructionFormatter_OutputAppend(ctx, "yword ptr "); + break; + default: + break; + } +} + +void VXIntelInstructionFormatter_FormatOperand( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, + const VXOperandInfo *operand) +{ + switch (operand->type) + { + case OPTYPE_REGISTER: + VXBaseInstructionFormatter_OutputAppend(ctx, + VXBaseInstructionFormatter_RegisterToString(ctx, operand->base)); + break; + case OPTYPE_MEMORY: + if (info->flags & IF_PREFIX_SEGMENT) + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, + "%s:", VXBaseInstructionFormatter_RegisterToString(ctx, info->segment)); + } + VXBaseInstructionFormatter_OutputAppend(ctx, "["); + if (operand->base == REG_RIP) + { + // TODO: Add option + VXBaseInstructionFormatter_OutputAppendAddress( + ctx, info, VXCalcAbsoluteTarget(info, operand), true); + } + else + { + if (operand->base != REG_NONE) + { + VXBaseInstructionFormatter_OutputAppend(ctx, + VXBaseInstructionFormatter_RegisterToString(ctx, operand->base)); + } + + if (operand->index != REG_NONE) + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s%s", + operand->base != REG_NONE ? "+" : "", + VXBaseInstructionFormatter_RegisterToString(ctx, operand->index)); + if (operand->scale) + { + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "*%d", operand->scale); + } + } + + if (operand->offset) + { + VXBaseInstructionFormatter_OutputAppendDisplacement(ctx, info, operand); + } + } + VXBaseInstructionFormatter_OutputAppend(ctx, "]"); + break; + case OPTYPE_POINTER: + // TODO: resolve symbols + switch (operand->size) + { + case 32: + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "word %.4X:%.4X", + operand->lval.ptr.seg, operand->lval.ptr.off & 0xFFFF); + break; + case 48: + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "dword %.4X:%.8lX", + operand->lval.ptr.seg, operand->lval.ptr.off); + break; + default: + assert(0); + } + break; + case OPTYPE_IMMEDIATE: + { + VXBaseInstructionFormatter_OutputAppendImmediate(ctx, info, operand, true); + } + break; + case OPTYPE_REL_IMMEDIATE: + { + if (operand->size == 8) + { + VXBaseInstructionFormatter_OutputAppend(ctx, "short "); + } + VXBaseInstructionFormatter_OutputAppendAddress(ctx, info, + VXCalcAbsoluteTarget(info, operand), true); + } + break; + case OPTYPE_CONSTANT: + VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2X", operand->lval.udword); + break; + default: + assert(0); + break; + } +} + +void VXIntelInstructionFormatter_InternalFormatInstruction( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info) +{ + // Append string prefixes + if (info->flags & IF_PREFIX_LOCK) + { + VXBaseInstructionFormatter_OutputAppend(ctx, "lock "); + } + + if (info->flags & IF_PREFIX_REP) + { + VXBaseInstructionFormatter_OutputAppend(ctx, "rep "); + } + else if (info->flags & IF_PREFIX_REPNE) + { + VXBaseInstructionFormatter_OutputAppend(ctx, "repne "); + } + + // Append the instruction mnemonic + VXBaseInstructionFormatter_OutputAppend(ctx, VXGetInstructionMnemonicString(info->mnemonic)); + + // Append the first operand + if (info->operand[0].type != OPTYPE_NONE) + { + VXBaseInstructionFormatter_OutputAppend(ctx, " "); + bool cast = false; + if (info->operand[0].type == OPTYPE_MEMORY) + { + if (info->operand[1].type == OPTYPE_IMMEDIATE || + info->operand[1].type == OPTYPE_CONSTANT || + info->operand[1].type == OPTYPE_NONE || + (info->operand[0].size != info->operand[1].size)) + { + cast = true; + } + else if (info->operand[1].type == OPTYPE_REGISTER && info->operand[1].base == REG_CL) + { + switch (info->mnemonic) + { + case MNEM_RCL: + case MNEM_ROL: + case MNEM_ROR: + case MNEM_RCR: + case MNEM_SHL: + case MNEM_SHR: + case MNEM_SAR: + cast = true; + break; + default: + break; + } + } + } + + if (cast) + { + VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, info, &info->operand[0]); + } + VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[0]); + } + + // Append the second operand + if (info->operand[1].type != OPTYPE_NONE) + { + VXBaseInstructionFormatter_OutputAppend(ctx, ", "); + bool cast = false; + if (info->operand[1].type == OPTYPE_MEMORY && + info->operand[0].size != info->operand[1].size && + ((info->operand[0].type != OPTYPE_REGISTER) || + ((info->operand[0].base != REG_ES) && + (info->operand[0].base != REG_CS) && + (info->operand[0].base != REG_SS) && + (info->operand[0].base != REG_DS) && + (info->operand[0].base != REG_FS) && + (info->operand[0].base != REG_GS)))) + { + cast = true; + } + + if (cast) + { + VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, info, &info->operand[1]); + } + VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[1]); + } + + // Append the third operand + if (info->operand[2].type != OPTYPE_NONE) + { + VXBaseInstructionFormatter_OutputAppend(ctx, ", "); + bool cast = false; + if (info->operand[2].type == OPTYPE_MEMORY && + (info->operand[2].size != info->operand[1].size)) + { + cast = true; + } + + if (cast) + { + VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, info, &info->operand[2]); + } + + VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[2]); + } + + // Append the fourth operand + if (info->operand[3].type != OPTYPE_NONE) + { + VXBaseInstructionFormatter_OutputAppend(ctx, ", "); + VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[3]); + } +} + +/* --------------------------------------------------------------------------------------------- */ + +/* ============================================================================================= */ diff --git a/Bindings/C/VXInstructionFormatterC.cpp b/Bindings/C/VXInstructionFormatterC.cpp deleted file mode 100644 index 3a0dbb7..0000000 --- a/Bindings/C/VXInstructionFormatterC.cpp +++ /dev/null @@ -1,312 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : athre0z - Modifications : - - Last change : 04. February 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#include "VXInstructionFormatterC.h" -#include "VXInstructionFormatter.h" - -/* Helpers ===================================================================================== */ - -namespace -{ - -inline Verteron::VXBaseSymbolResolver* VXBaseSymbolResolver_CppPtr( - VXBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Verteron::VXBaseSymbolResolver* VXBaseSymbolResolver_CppPtr( - const VXBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline VXBaseSymbolResolverContext* VXBaseSymbolResolver_CPtr( - Verteron::VXBaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const VXBaseSymbolResolverContext* VXBaseSymbolResolver_CPtr( - const Verteron::VXBaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Verteron::VXExactSymbolResolver* VXExactSymbolResolver_CppPtr( - VXBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Verteron::VXExactSymbolResolver* VXExactSymbolResolver_CppPtr( - const VXBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline VXBaseSymbolResolverContext* VXExactSymbolResolver_CPtr( - Verteron::VXExactSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const VXBaseSymbolResolverContext* VXExactSymbolResolver_CPtr( - const Verteron::VXExactSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Verteron::VXInstructionInfo* VXInstructionInfo_CppPtr( - VXInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Verteron::VXInstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline const Verteron::VXInstructionInfo* VXInstructionInfo_CppPtr( - const VXInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Verteron::VXInstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline VXInstructionInfo* VXInstructionInfo_CPtr( - Verteron::VXInstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const VXInstructionInfo* VXInstructionInfo_CPtr( - const Verteron::VXInstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Verteron::VXBaseInstructionFormatter* VXBaseInstructionFormatter_CppPtr( - VXBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Verteron::VXBaseInstructionFormatter* VXBaseInstructionFormatter_CppPtr( - const VXBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline Verteron::VXBaseInstructionFormatter* VXIntelInstructionFormatter_CppPtr( - VXBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Verteron::VXBaseInstructionFormatter* VXIntelInstructionFormatter_CppPtr( - const VXBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CPtr( - Verteron::VXBaseInstructionFormatter *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CPtr( - const Verteron::VXBaseInstructionFormatter *ctx) -{ - return reinterpret_cast(ctx); -} - -} - -/* VXBaseSymbolResolver ======================================================================== */ - -void VXBaseSymbolResolver_Release( - VXBaseSymbolResolverContext *ctx) -{ - delete VXBaseSymbolResolver_CppPtr(ctx); -} - -const char* VXBaseSymbolResolver_ResolveSymbol( - VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, - uint64_t address, - uint64_t *offset) -{ - return VXBaseSymbolResolver_CppPtr(ctx)->resolveSymbol( - *VXInstructionInfo_CppPtr(info), - address, - *offset); -} - -/* VXExactSymbolResolver ======================================================================= */ - -VXBaseSymbolResolverContext* VXExactSymbolResolver_Create(void) -{ - return VXExactSymbolResolver_CPtr(new Verteron::VXExactSymbolResolver); -} - -bool VXExactSymbolResolver_ContainsSymbol( - VXBaseSymbolResolverContext *ctx, - uint64_t address) -{ - return VXExactSymbolResolver_CppPtr(ctx)->containsSymbol(address); -} - -void VXExactSymbolResolverContext_SetSymbol( - VXBaseSymbolResolverContext *ctx, - uint64_t address, - const char* name) -{ - VXExactSymbolResolver_CppPtr(ctx)->setSymbol(address, name); -} - -void VXExactSymbolResolverContext_RemoveSymbol( - VXBaseSymbolResolverContext *ctx, - uint64_t address) -{ - VXExactSymbolResolver_CppPtr(ctx)->removeSymbol(address); -} - -void VXExactSymbolResolverContext_Clear( - VXBaseSymbolResolverContext *ctx) -{ - VXExactSymbolResolver_CppPtr(ctx)->clear(); -} - -/* VXBaseInstructionFormatter ================================================================== */ - -const char* VXBaseInstructionFormatter_FormatInstruction( - VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info) -{ - return VXBaseInstructionFormatter_CppPtr(ctx)->formatInstruction( - *VXInstructionInfo_CppPtr(info)); -} - -VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( - const VXBaseInstructionFormatterContext *ctx) -{ - return VXBaseSymbolResolver_CPtr( - VXBaseInstructionFormatter_CppPtr(ctx)->getSymbolResolver()); -} - -void VXBaseInstructionFormatter_SetSymbolResolver( - VXBaseInstructionFormatterContext *ctx, - VXBaseSymbolResolverContext *resolver) -{ - VXBaseInstructionFormatter_CppPtr(ctx)->setSymbolResolver( - VXBaseSymbolResolver_CppPtr(resolver)); -} - -void VXBaseInstructionFormatter_Release( - VXBaseInstructionFormatterContext *ctx) -{ - delete VXBaseInstructionFormatter_CppPtr(ctx); -} - -/* VXIntelInstructionFormatter ================================================================ */ - -VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void) -{ - return VXIntelInstructionFormatter_CPtr(new Verteron::VXIntelInstructionFormatter); -} - -VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( - VXBaseSymbolResolverContext *resolver) -{ - return VXIntelInstructionFormatter_CPtr(new Verteron::VXIntelInstructionFormatter( - VXBaseSymbolResolver_CppPtr(resolver))); -} - -/* VXCustomSymbolResolver ====================================================================== */ - -/* Internal helper class ----------------------------------------------------------------------- */ - -namespace -{ - -class VXCustomSymbolResolver : public Verteron::VXBaseSymbolResolver -{ - VXResolveSymbol_t m_resolverCb; - void *m_userData; -public: - /** - * @brief Constructor. - * @param resolverCb The resolver callback. - * @param userData User provided pointer to arbitrary data passed to resolve callback. - */ - VXCustomSymbolResolver(VXResolveSymbol_t resolverCb, void *userData); - /** - * @brief Destructor. - */ - ~VXCustomSymbolResolver() override = default; -public: - /** - * @brief Resolves a symbol. - * @param info The instruction info. - * @param address The address. - * @param offset Reference to an unsigned 64 bit integer that receives an offset - * relative to the base address of the symbol. - * @return The name of the symbol, if the symbol was found, @c NULL if not. - */ - const char* resolveSymbol(const Verteron::VXInstructionInfo &info, uint64_t address, - uint64_t &offset) override; -}; - -VXCustomSymbolResolver::VXCustomSymbolResolver(VXResolveSymbol_t resolverCb, void *userData) - : m_resolverCb(resolverCb) - , m_userData(userData) -{ - -} - -const char* VXCustomSymbolResolver::resolveSymbol( - const Verteron::VXInstructionInfo &info, uint64_t address, uint64_t &offset) -{ - return m_resolverCb(VXInstructionInfo_CPtr(&info), address, &offset, m_userData); -} - -} // anon namespace - -/* C API implementation ------------------------------------------------------------------------ */ - -VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( - VXResolveSymbol_t resolverCb, - void *userData) -{ - return VXBaseSymbolResolver_CPtr(new VXCustomSymbolResolver(resolverCb, userData)); -} - -/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionFormatterC.h b/Bindings/C/VXInstructionFormatterC.h index b0ae0ec..01c168d 100644 --- a/Bindings/C/VXInstructionFormatterC.h +++ b/Bindings/C/VXInstructionFormatterC.h @@ -8,7 +8,7 @@ Original Author : Florian Bernd Modifications : athre0z - Last change : 04. February 2015 + Last change : 14. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -34,6 +34,7 @@ #define _VDE_VXINSTRUCTIONFORMATTERC_H_ #include "VXDisassemblerTypesC.h" +#include "VXDisassemblerUtilsC.h" #ifdef __cplusplus extern "C" @@ -42,7 +43,10 @@ extern "C" /* VXBaseSymbolResolver ======================================================================== */ -typedef struct _VXBaseSymbolResolverContext { int a; } VXBaseSymbolResolverContext; +typedef struct _VXBaseSymbolResolverContext +{ + VXContextDescriptor d; +} VXBaseSymbolResolverContext; /** * @brief Releases a symbol resolver. @@ -67,55 +71,6 @@ const char* VXBaseSymbolResolver_ResolveSymbol( uint64_t address, uint64_t *offset); -/* VXExactSymbolResolver ======================================================================= */ - -/** - * @brief Creates an exact symbol resolver. - * @return @c NULL if it fails, else a symbol resolver context. - * @see VXBaseSymbolResolver_Release - * An exact resolver is a simple symbol resolver that only matches exact addresses. - */ -// TODO: verify return value -VXBaseSymbolResolverContext* VXExactSymbolResolver_Create(void); - -/** - * @brief Query if the given address is a known symbol. - * @param ctx The exact symbol resolver context. - * @param address The address. - * @return @c true if the address is known, @c false if not. - */ -bool VXExactSymbolResolver_ContainsSymbol( - VXBaseSymbolResolverContext *ctx, - uint64_t address); - -/** - * @brief Adds or changes a symbol. - * @param ctx The exact symbol resolver context. - * @param address The address. - * @param name The symbol name. - */ -void VXExactSymbolResolverContext_SetSymbol( - VXBaseSymbolResolverContext *ctx, - uint64_t address, - const char* name); - -/** - * @brief Removes the symbol described by address. - * @param ctx The exact symbol resolver context. - * @param address The address. - * This will invalidate all char-pointers to the affected symbol name. - */ -void VXExactSymbolResolverContext_RemoveSymbol( - VXBaseSymbolResolverContext *ctx, - uint64_t address); - -/** - * @brief Clears the symbol tree. - * @param ctx The exact symbol resolver context. - */ -void VXExactSymbolResolverContext_Clear( - VXBaseSymbolResolverContext *ctx); - /* VXCustomSymbolResolver ====================================================================== */ typedef const char* (*VXResolveSymbol_t)( @@ -137,7 +92,10 @@ VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( /* VXBaseInstructionFormatter ================================================================== */ -typedef struct _VXBaseInstructionFormatterContext {int a;} VXBaseInstructionFormatterContext; +typedef struct _VXBaseInstructionFormatterContext +{ + VXContextDescriptor d; +} VXBaseInstructionFormatterContext; /** * @brief Formats a decoded instruction. diff --git a/Bindings/C/VXInternalHelpersC.h b/Bindings/C/VXInternalHelpersC.h new file mode 100644 index 0000000..513b84f --- /dev/null +++ b/Bindings/C/VXInternalHelpersC.h @@ -0,0 +1,165 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : athre0z + Modifications : + + Last change : 13. March 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#ifndef _VDE_VXINTERNALHELPERS_H_ +#define _VDE_VXINTERNALHELPERS_H_ + +#include "VXInstructionDecoderC.h" +#include "VXInstructionFormatterC.h" + +#include + +struct _VXBaseDataSource; +struct _VXInstructionDecoder; + +/* Types IDs =================================================================================== */ + +typedef enum _VXTypeId +{ + TYPE_BASEDATASOURCE, + TYPE_MEMORYDATASOURCE, + TYPE_INSTRUCTIONDECODER, + TYPE_BASESYMBOLRESOLVER, + TYPE_EXACTSYMBOLRESOLVER, + TYPE_BASEINSTRUCTIONFORMATTER, + TYPE_INTELINSTRUCTIONFORMATTER, +} VXTypeId; + +/* Context conversion helpers ================================================================== */ + +// TODO: don't use __inline + +__inline struct _VXBaseDataSource* VXBaseDataSource_thiz( + VXBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_BASEDATASOURCE + || ctx->d.type == TYPE_MEMORYDATASOURCE); + return (struct _VXBaseDataSource*)ctx->d.ptr; +} + +__inline const struct _VXBaseDataSource* VXBaseDataSource_cthiz( + const VXBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_BASEDATASOURCE + || ctx->d.type == TYPE_MEMORYDATASOURCE); + return (const struct _VXBaseDataSource*)ctx->d.ptr; +} + +__inline struct _VXMemoryDataSource* VXMemoryDataSource_thiz( + VXBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_MEMORYDATASOURCE); + return (struct _VXMemoryDataSource*)ctx->d.ptr; +} + +__inline const struct _VXMemoryDataSource* VXMemoryDataSource_cthiz( + const VXBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_MEMORYDATASOURCE); + return (const struct _VXMemoryDataSource*)ctx->d.ptr; +} + +__inline struct _VXInstructionDecoder* VXInstructionDecoder_thiz( + VXInstructionDecoderContext *ctx) +{ + assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); + return (struct _VXInstructionDecoder*)ctx->d.ptr; +} + +__inline const struct _VXInstructionDecoder* VXInstructionDecoder_cthiz( + const VXInstructionDecoderContext *ctx) +{ + assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); + return (const struct _VXInstructionDecoder*)ctx->d.ptr; +} + +__inline struct _VXBaseSymbolResolver* VXBaseSymbolResolver_thiz( + VXBaseSymbolResolverContext *ctx) +{ + assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER); + return (struct _VXBaseSymbolResolver*)ctx->d.ptr; +} + +__inline const struct _VXBaseSymbolResolver* VXBaseSymbolResolver_cthiz( + const VXBaseSymbolResolverContext *ctx) +{ + assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER); + return (const struct _VXBaseSymbolResolver*)ctx->d.ptr; +} + +__inline struct _VXExactSymbolResolver* VXExactSymbolResolver_thiz( + VXBaseSymbolResolverContext *ctx) +{ + assert(ctx->d.type == TYPE_EXACTSYMBOLRESOLVER); + return (struct _VXExactSymbolResolver*)ctx->d.ptr; +} + +__inline const struct _VXExactSymbolResolver* VXExactSymbolResolver_cthiz( + const VXBaseSymbolResolverContext *ctx) +{ + assert(ctx->d.type == TYPE_EXACTSYMBOLRESOLVER); + return (const struct _VXExactSymbolResolver*)ctx->d.ptr; +} + +__inline struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_thiz( + VXBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER + || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); + return (struct _VXBaseInstructionFormatter*)ctx->d.ptr; +} + +__inline const struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_cthiz( + const VXBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER + || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); + return (const struct _VXBaseInstructionFormatter*)ctx->d.ptr; +} + +__inline struct _VXIntelInstructionFormatter* VXIntelInstructionFormatter_thiz( + VXBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); + return (struct _VXIntelInstructionFormatter*)ctx->d.ptr; +} + +__inline const struct _VXIntelInstructionFormatter* VXIntelInstructionFormatter_cthiz( + const VXBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); + return (const struct _VXIntelInstructionFormatter*)ctx->d.ptr; +} + +/* ============================================================================================= */ + +#endif /* _VDE_VXINTERNALHELPERS_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXOpcodeTableC.c b/Bindings/C/VXOpcodeTableC.c new file mode 100644 index 0000000..c1a90ff --- /dev/null +++ b/Bindings/C/VXOpcodeTableC.c @@ -0,0 +1,9649 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : athre0z + + Last change : 14. March 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#include "VXOpcodeTableC.h" + +#define VX_INVALID 0 +#define VX_NODE(type, n) ((VXOpcodeTreeNode)type << 12 | (n)) + +const VXOpcodeTreeNode vxOptreeTable[][256] = +{ + { + /* 00 */ 0x0015, + /* 01 */ 0x0014, + /* 02 */ 0x0016, + /* 03 */ 0x0018, + /* 04 */ 0x0017, + /* 05 */ 0x0010, + /* 06 */ VX_NODE(OTNT_MODE, 0x0000), + /* 07 */ VX_NODE(OTNT_MODE, 0x0001), + /* 08 */ 0x0394, + /* 09 */ 0x0393, + /* 0A */ 0x0396, + /* 0B */ 0x0395, + /* 0C */ 0x0390, + /* 0D */ 0x038F, + /* 0E */ VX_NODE(OTNT_MODE, 0x0002), + /* 0F */ VX_NODE(OTNT_TABLE, 0x0001), + /* 10 */ 0x000B, + /* 11 */ 0x000A, + /* 12 */ 0x000C, + /* 13 */ 0x000E, + /* 14 */ 0x000D, + /* 15 */ 0x0006, + /* 16 */ VX_NODE(OTNT_MODE, 0x0007), + /* 17 */ VX_NODE(OTNT_MODE, 0x0008), + /* 18 */ 0x04FE, + /* 19 */ 0x04F7, + /* 1A */ 0x04F8, + /* 1B */ 0x04FB, + /* 1C */ 0x04FA, + /* 1D */ 0x04F9, + /* 1E */ VX_NODE(OTNT_MODE, 0x0009), + /* 1F */ VX_NODE(OTNT_MODE, 0x000A), + /* 20 */ 0x0026, + /* 21 */ 0x0027, + /* 22 */ 0x0025, + /* 23 */ 0x002C, + /* 24 */ 0x002D, + /* 25 */ 0x002E, + /* 26 */ VX_INVALID, + /* 27 */ VX_NODE(OTNT_MODE, 0x000B), + /* 28 */ 0x0542, + /* 29 */ 0x0549, + /* 2A */ 0x0548, + /* 2B */ 0x054B, + /* 2C */ 0x054A, + /* 2D */ 0x0547, + /* 2E */ VX_INVALID, + /* 2F */ VX_NODE(OTNT_MODE, 0x000C), + /* 30 */ 0x06B8, + /* 31 */ 0x06B9, + /* 32 */ 0x06B6, + /* 33 */ 0x06B7, + /* 34 */ 0x06BA, + /* 35 */ 0x06BB, + /* 36 */ VX_INVALID, + /* 37 */ VX_NODE(OTNT_MODE, 0x000D), + /* 38 */ 0x006C, + /* 39 */ 0x006D, + /* 3A */ 0x006B, + /* 3B */ 0x006A, + /* 3C */ 0x0070, + /* 3D */ 0x006F, + /* 3E */ VX_INVALID, + /* 3F */ VX_NODE(OTNT_MODE, 0x000E), + /* 40 */ 0x02AB, + /* 41 */ 0x02AC, + /* 42 */ 0x02B2, + /* 43 */ 0x02B1, + /* 44 */ 0x02B3, + /* 45 */ 0x02B4, + /* 46 */ 0x02AE, + /* 47 */ 0x02AD, + /* 48 */ 0x00A7, + /* 49 */ 0x00A6, + /* 4A */ 0x00A8, + /* 4B */ 0x00AA, + /* 4C */ 0x00A9, + /* 4D */ 0x00A2, + /* 4E */ 0x00A1, + /* 4F */ 0x00A3, + /* 50 */ 0x04B4, + /* 51 */ 0x04B9, + /* 52 */ 0x04B3, + /* 53 */ 0x04AE, + /* 54 */ 0x04AF, + /* 55 */ 0x04B0, + /* 56 */ 0x04B1, + /* 57 */ 0x04B2, + /* 58 */ 0x0449, + /* 59 */ 0x0447, + /* 5A */ 0x0448, + /* 5B */ 0x0442, + /* 5C */ 0x043E, + /* 5D */ 0x043D, + /* 5E */ 0x043F, + /* 5F */ 0x0441, + /* 60 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0007), + /* 61 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0008), + /* 62 */ VX_NODE(OTNT_MODE, 0x0013), + /* 63 */ VX_NODE(OTNT_MODE, 0x0014), + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ 0x04B7, + /* 69 */ 0x02A4, + /* 6A */ 0x04AB, + /* 6B */ 0x02A6, + /* 6C */ 0x02B5, + /* 6D */ VX_NODE(OTNT_OPERAND_SIZE, 0x0009), + /* 6E */ 0x039F, + /* 6F */ VX_NODE(OTNT_OPERAND_SIZE, 0x000A), + /* 70 */ 0x02E8, + /* 71 */ 0x02E2, + /* 72 */ 0x02CA, + /* 73 */ 0x02DE, + /* 74 */ 0x02CE, + /* 75 */ 0x02E1, + /* 76 */ 0x02CB, + /* 77 */ 0x02C7, + /* 78 */ 0x02ED, + /* 79 */ 0x02E6, + /* 7A */ 0x02EB, + /* 7B */ 0x02E5, + /* 7C */ 0x02D5, + /* 7D */ 0x02D3, + /* 7E */ 0x02D8, + /* 7F */ 0x02D1, + /* 80 */ VX_NODE(OTNT_MODRM_REG, 0x0013), + /* 81 */ VX_NODE(OTNT_MODRM_REG, 0x0014), + /* 82 */ VX_NODE(OTNT_MODRM_REG, 0x0015), + /* 83 */ VX_NODE(OTNT_MODRM_REG, 0x0016), + /* 84 */ 0x055C, + /* 85 */ 0x055D, + /* 86 */ 0x06A8, + /* 87 */ 0x06A7, + /* 88 */ 0x0334, + /* 89 */ 0x0336, + /* 8A */ 0x0335, + /* 8B */ 0x0331, + /* 8C */ 0x031D, + /* 8D */ 0x02F4, + /* 8E */ 0x031C, + /* 8F */ VX_NODE(OTNT_MODRM_REG, 0x0017), + /* 90 */ 0x06A9, + /* 91 */ 0x06AB, + /* 92 */ 0x06AA, + /* 93 */ 0x06A3, + /* 94 */ 0x06A2, + /* 95 */ 0x06A4, + /* 96 */ 0x06A6, + /* 97 */ 0x06A5, + /* 98 */ VX_NODE(OTNT_OPERAND_SIZE, 0x000B), + /* 99 */ VX_NODE(OTNT_OPERAND_SIZE, 0x000C), + /* 9A */ VX_NODE(OTNT_MODE, 0x001D), + /* 9B */ 0x069D, + /* 9C */ VX_NODE(OTNT_OPERAND_SIZE, 0x000D), + /* 9D */ VX_NODE(OTNT_OPERAND_SIZE, 0x000E), + /* 9E */ 0x04EF, + /* 9F */ 0x02EF, + /* A0 */ 0x031B, + /* A1 */ 0x0320, + /* A2 */ 0x031F, + /* A3 */ 0x031E, + /* A4 */ 0x0367, + /* A5 */ VX_NODE(OTNT_OPERAND_SIZE, 0x000F), + /* A6 */ 0x0076, + /* A7 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0010), + /* A8 */ 0x055E, + /* A9 */ 0x055B, + /* AA */ 0x053D, + /* AB */ VX_NODE(OTNT_OPERAND_SIZE, 0x0011), + /* AC */ 0x0300, + /* AD */ VX_NODE(OTNT_OPERAND_SIZE, 0x0012), + /* AE */ 0x0501, + /* AF */ VX_NODE(OTNT_OPERAND_SIZE, 0x0013), + /* B0 */ 0x0317, + /* B1 */ 0x031A, + /* B2 */ 0x0318, + /* B3 */ 0x0319, + /* B4 */ 0x0321, + /* B5 */ 0x032C, + /* B6 */ 0x032B, + /* B7 */ 0x032A, + /* B8 */ 0x032D, + /* B9 */ 0x0330, + /* BA */ 0x032F, + /* BB */ 0x032E, + /* BC */ 0x0329, + /* BD */ 0x0324, + /* BE */ 0x0323, + /* BF */ 0x0322, + /* C0 */ VX_NODE(OTNT_MODRM_REG, 0x0018), + /* C1 */ VX_NODE(OTNT_MODRM_REG, 0x0019), + /* C2 */ 0x04D9, + /* C3 */ 0x04D8, + /* C4 */ VX_NODE(OTNT_VEX, 0x0000), + /* C5 */ VX_NODE(OTNT_VEX, 0x0001), + /* C6 */ VX_NODE(OTNT_MODRM_REG, 0x001E), + /* C7 */ VX_NODE(OTNT_MODRM_REG, 0x001F), + /* C8 */ 0x00B4, + /* C9 */ 0x02F5, + /* CA */ 0x04DA, + /* CB */ 0x04DB, + /* CC */ 0x02BB, + /* CD */ 0x02B9, + /* CE */ VX_NODE(OTNT_MODE, 0x0027), + /* CF */ VX_NODE(OTNT_OPERAND_SIZE, 0x0017), + /* D0 */ VX_NODE(OTNT_MODRM_REG, 0x0020), + /* D1 */ VX_NODE(OTNT_MODRM_REG, 0x0021), + /* D2 */ VX_NODE(OTNT_MODRM_REG, 0x0022), + /* D3 */ VX_NODE(OTNT_MODRM_REG, 0x0023), + /* D4 */ VX_NODE(OTNT_MODE, 0x0028), + /* D5 */ VX_NODE(OTNT_MODE, 0x0029), + /* D6 */ VX_NODE(OTNT_MODE, 0x002A), + /* D7 */ 0x06B2, + /* D8 */ VX_NODE(OTNT_MODRM_MOD, 0x0015), + /* D9 */ VX_NODE(OTNT_MODRM_MOD, 0x0016), + /* DA */ VX_NODE(OTNT_MODRM_MOD, 0x0017), + /* DB */ VX_NODE(OTNT_MODRM_MOD, 0x0018), + /* DC */ VX_NODE(OTNT_MODRM_MOD, 0x0019), + /* DD */ VX_NODE(OTNT_MODRM_MOD, 0x001A), + /* DE */ VX_NODE(OTNT_MODRM_MOD, 0x001B), + /* DF */ VX_NODE(OTNT_MODRM_MOD, 0x001C), + /* E0 */ 0x0306, + /* E1 */ 0x0305, + /* E2 */ 0x0304, + /* E3 */ VX_NODE(OTNT_ADDRESS_SIZE, 0x0000), + /* E4 */ 0x02A9, + /* E5 */ 0x02AA, + /* E6 */ 0x039D, + /* E7 */ 0x039E, + /* E8 */ 0x004E, + /* E9 */ 0x02DB, + /* EA */ VX_NODE(OTNT_MODE, 0x002B), + /* EB */ 0x02DD, + /* EC */ 0x02A7, + /* ED */ 0x02A8, + /* EE */ 0x039B, + /* EF */ 0x039C, + /* F0 */ 0x02FF, + /* F1 */ 0x02BA, + /* F2 */ 0x04D7, + /* F3 */ 0x04D6, + /* F4 */ 0x029D, + /* F5 */ 0x0059, + /* F6 */ VX_NODE(OTNT_MODRM_REG, 0x002C), + /* F7 */ VX_NODE(OTNT_MODRM_REG, 0x002D), + /* F8 */ 0x0053, + /* F9 */ 0x0538, + /* FA */ 0x0057, + /* FB */ 0x053B, + /* FC */ 0x0054, + /* FD */ 0x0539, + /* FE */ VX_NODE(OTNT_MODRM_REG, 0x002E), + /* FF */ VX_NODE(OTNT_MODRM_REG, 0x002F), + }, + { + /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0000), + /* 01 */ VX_NODE(OTNT_MODRM_MOD, 0x0000), + /* 02 */ VX_NODE(OTNT_MANDATORY, 0x0003), + /* 03 */ VX_NODE(OTNT_MANDATORY, 0x0004), + /* 04 */ VX_INVALID, + /* 05 */ VX_NODE(OTNT_MANDATORY, 0x0005), + /* 06 */ VX_NODE(OTNT_MANDATORY, 0x0006), + /* 07 */ VX_NODE(OTNT_MANDATORY, 0x0007), + /* 08 */ VX_NODE(OTNT_MANDATORY, 0x0008), + /* 09 */ VX_NODE(OTNT_MANDATORY, 0x0009), + /* 0A */ VX_INVALID, + /* 0B */ VX_NODE(OTNT_MANDATORY, 0x000A), + /* 0C */ VX_INVALID, + /* 0D */ VX_NODE(OTNT_MANDATORY, 0x000B), + /* 0E */ VX_NODE(OTNT_MANDATORY, 0x000C), + /* 0F */ VX_NODE(OTNT_AMD3DNOW, 0x0000), + /* 10 */ VX_NODE(OTNT_MANDATORY, 0x000D), + /* 11 */ VX_NODE(OTNT_MANDATORY, 0x000E), + /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x0001), + /* 13 */ VX_NODE(OTNT_MANDATORY, 0x0011), + /* 14 */ VX_NODE(OTNT_MANDATORY, 0x0012), + /* 15 */ VX_NODE(OTNT_MANDATORY, 0x0013), + /* 16 */ VX_NODE(OTNT_MODRM_MOD, 0x0002), + /* 17 */ VX_NODE(OTNT_MANDATORY, 0x0016), + /* 18 */ VX_NODE(OTNT_MANDATORY, 0x0017), + /* 19 */ VX_NODE(OTNT_MANDATORY, 0x0018), + /* 1A */ VX_NODE(OTNT_MANDATORY, 0x0019), + /* 1B */ VX_NODE(OTNT_MANDATORY, 0x001A), + /* 1C */ VX_NODE(OTNT_MANDATORY, 0x001B), + /* 1D */ VX_NODE(OTNT_MANDATORY, 0x001C), + /* 1E */ VX_NODE(OTNT_MANDATORY, 0x001D), + /* 1F */ VX_NODE(OTNT_MANDATORY, 0x001E), + /* 20 */ VX_NODE(OTNT_MANDATORY, 0x001F), + /* 21 */ VX_NODE(OTNT_MANDATORY, 0x0020), + /* 22 */ VX_NODE(OTNT_MANDATORY, 0x0021), + /* 23 */ VX_NODE(OTNT_MANDATORY, 0x0022), + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_NODE(OTNT_MANDATORY, 0x0023), + /* 29 */ VX_NODE(OTNT_MANDATORY, 0x0024), + /* 2A */ VX_NODE(OTNT_MANDATORY, 0x0025), + /* 2B */ VX_NODE(OTNT_MANDATORY, 0x0026), + /* 2C */ VX_NODE(OTNT_MANDATORY, 0x0027), + /* 2D */ VX_NODE(OTNT_MANDATORY, 0x0028), + /* 2E */ VX_NODE(OTNT_MANDATORY, 0x0029), + /* 2F */ VX_NODE(OTNT_MANDATORY, 0x002A), + /* 30 */ VX_NODE(OTNT_MANDATORY, 0x002B), + /* 31 */ VX_NODE(OTNT_MANDATORY, 0x002C), + /* 32 */ VX_NODE(OTNT_MANDATORY, 0x002D), + /* 33 */ VX_NODE(OTNT_MANDATORY, 0x002E), + /* 34 */ VX_NODE(OTNT_MANDATORY, 0x002F), + /* 35 */ VX_NODE(OTNT_MANDATORY, 0x0030), + /* 36 */ VX_INVALID, + /* 37 */ VX_NODE(OTNT_MANDATORY, 0x0031), + /* 38 */ VX_NODE(OTNT_TABLE, 0x0002), + /* 39 */ VX_INVALID, + /* 3A */ VX_NODE(OTNT_TABLE, 0x0003), + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_NODE(OTNT_MANDATORY, 0x0081), + /* 41 */ VX_NODE(OTNT_MANDATORY, 0x0082), + /* 42 */ VX_NODE(OTNT_MANDATORY, 0x0083), + /* 43 */ VX_NODE(OTNT_MANDATORY, 0x0084), + /* 44 */ VX_NODE(OTNT_MANDATORY, 0x0085), + /* 45 */ VX_NODE(OTNT_MANDATORY, 0x0086), + /* 46 */ VX_NODE(OTNT_MANDATORY, 0x0087), + /* 47 */ VX_NODE(OTNT_MANDATORY, 0x0088), + /* 48 */ VX_NODE(OTNT_MANDATORY, 0x0089), + /* 49 */ VX_NODE(OTNT_MANDATORY, 0x008A), + /* 4A */ VX_NODE(OTNT_MANDATORY, 0x008B), + /* 4B */ VX_NODE(OTNT_MANDATORY, 0x008C), + /* 4C */ VX_NODE(OTNT_MANDATORY, 0x008D), + /* 4D */ VX_NODE(OTNT_MANDATORY, 0x008E), + /* 4E */ VX_NODE(OTNT_MANDATORY, 0x008F), + /* 4F */ VX_NODE(OTNT_MANDATORY, 0x0090), + /* 50 */ VX_NODE(OTNT_MANDATORY, 0x0091), + /* 51 */ VX_NODE(OTNT_MANDATORY, 0x0092), + /* 52 */ VX_NODE(OTNT_MANDATORY, 0x0093), + /* 53 */ VX_NODE(OTNT_MANDATORY, 0x0094), + /* 54 */ VX_NODE(OTNT_MANDATORY, 0x0095), + /* 55 */ VX_NODE(OTNT_MANDATORY, 0x0096), + /* 56 */ VX_NODE(OTNT_MANDATORY, 0x0097), + /* 57 */ VX_NODE(OTNT_MANDATORY, 0x0098), + /* 58 */ VX_NODE(OTNT_MANDATORY, 0x0099), + /* 59 */ VX_NODE(OTNT_MANDATORY, 0x009A), + /* 5A */ VX_NODE(OTNT_MANDATORY, 0x009B), + /* 5B */ VX_NODE(OTNT_MANDATORY, 0x009C), + /* 5C */ VX_NODE(OTNT_MANDATORY, 0x009D), + /* 5D */ VX_NODE(OTNT_MANDATORY, 0x009E), + /* 5E */ VX_NODE(OTNT_MANDATORY, 0x009F), + /* 5F */ VX_NODE(OTNT_MANDATORY, 0x00A0), + /* 60 */ VX_NODE(OTNT_MANDATORY, 0x00A1), + /* 61 */ VX_NODE(OTNT_MANDATORY, 0x00A2), + /* 62 */ VX_NODE(OTNT_MANDATORY, 0x00A3), + /* 63 */ VX_NODE(OTNT_MANDATORY, 0x00A4), + /* 64 */ VX_NODE(OTNT_MANDATORY, 0x00A5), + /* 65 */ VX_NODE(OTNT_MANDATORY, 0x00A6), + /* 66 */ VX_NODE(OTNT_MANDATORY, 0x00A7), + /* 67 */ VX_NODE(OTNT_MANDATORY, 0x00A8), + /* 68 */ VX_NODE(OTNT_MANDATORY, 0x00A9), + /* 69 */ VX_NODE(OTNT_MANDATORY, 0x00AA), + /* 6A */ VX_NODE(OTNT_MANDATORY, 0x00AB), + /* 6B */ VX_NODE(OTNT_MANDATORY, 0x00AC), + /* 6C */ VX_NODE(OTNT_MANDATORY, 0x00AD), + /* 6D */ VX_NODE(OTNT_MANDATORY, 0x00AE), + /* 6E */ VX_NODE(OTNT_MANDATORY, 0x00AF), + /* 6F */ VX_NODE(OTNT_MANDATORY, 0x00B0), + /* 70 */ VX_NODE(OTNT_MANDATORY, 0x00B1), + /* 71 */ VX_NODE(OTNT_MANDATORY, 0x00B2), + /* 72 */ VX_NODE(OTNT_MANDATORY, 0x00B3), + /* 73 */ VX_NODE(OTNT_MANDATORY, 0x00B4), + /* 74 */ VX_NODE(OTNT_MANDATORY, 0x00B5), + /* 75 */ VX_NODE(OTNT_MANDATORY, 0x00B6), + /* 76 */ VX_NODE(OTNT_MANDATORY, 0x00B7), + /* 77 */ VX_NODE(OTNT_MANDATORY, 0x00B8), + /* 78 */ VX_NODE(OTNT_MANDATORY, 0x00B9), + /* 79 */ VX_NODE(OTNT_MANDATORY, 0x00BA), + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_NODE(OTNT_MANDATORY, 0x00BB), + /* 7D */ VX_NODE(OTNT_MANDATORY, 0x00BC), + /* 7E */ VX_NODE(OTNT_MANDATORY, 0x00BD), + /* 7F */ VX_NODE(OTNT_MANDATORY, 0x00BE), + /* 80 */ VX_NODE(OTNT_MANDATORY, 0x00BF), + /* 81 */ VX_NODE(OTNT_MANDATORY, 0x00C0), + /* 82 */ VX_NODE(OTNT_MANDATORY, 0x00C1), + /* 83 */ VX_NODE(OTNT_MANDATORY, 0x00C2), + /* 84 */ VX_NODE(OTNT_MANDATORY, 0x00C3), + /* 85 */ VX_NODE(OTNT_MANDATORY, 0x00C4), + /* 86 */ VX_NODE(OTNT_MANDATORY, 0x00C5), + /* 87 */ VX_NODE(OTNT_MANDATORY, 0x00C6), + /* 88 */ VX_NODE(OTNT_MANDATORY, 0x00C7), + /* 89 */ VX_NODE(OTNT_MANDATORY, 0x00C8), + /* 8A */ VX_NODE(OTNT_MANDATORY, 0x00C9), + /* 8B */ VX_NODE(OTNT_MANDATORY, 0x00CA), + /* 8C */ VX_NODE(OTNT_MANDATORY, 0x00CB), + /* 8D */ VX_NODE(OTNT_MANDATORY, 0x00CC), + /* 8E */ VX_NODE(OTNT_MANDATORY, 0x00CD), + /* 8F */ VX_NODE(OTNT_MANDATORY, 0x00CE), + /* 90 */ VX_NODE(OTNT_MANDATORY, 0x00CF), + /* 91 */ VX_NODE(OTNT_MANDATORY, 0x00D0), + /* 92 */ VX_NODE(OTNT_MANDATORY, 0x00D1), + /* 93 */ VX_NODE(OTNT_MANDATORY, 0x00D2), + /* 94 */ VX_NODE(OTNT_MANDATORY, 0x00D3), + /* 95 */ VX_NODE(OTNT_MANDATORY, 0x00D4), + /* 96 */ VX_NODE(OTNT_MANDATORY, 0x00D5), + /* 97 */ VX_NODE(OTNT_MANDATORY, 0x00D6), + /* 98 */ VX_NODE(OTNT_MANDATORY, 0x00D7), + /* 99 */ VX_NODE(OTNT_MANDATORY, 0x00D8), + /* 9A */ VX_NODE(OTNT_MANDATORY, 0x00D9), + /* 9B */ VX_NODE(OTNT_MANDATORY, 0x00DA), + /* 9C */ VX_NODE(OTNT_MANDATORY, 0x00DB), + /* 9D */ VX_NODE(OTNT_MANDATORY, 0x00DC), + /* 9E */ VX_NODE(OTNT_MANDATORY, 0x00DD), + /* 9F */ VX_NODE(OTNT_MANDATORY, 0x00DE), + /* A0 */ VX_NODE(OTNT_MANDATORY, 0x00DF), + /* A1 */ VX_NODE(OTNT_MANDATORY, 0x00E0), + /* A2 */ VX_NODE(OTNT_MANDATORY, 0x00E1), + /* A3 */ VX_NODE(OTNT_MANDATORY, 0x00E2), + /* A4 */ VX_NODE(OTNT_MANDATORY, 0x00E3), + /* A5 */ VX_NODE(OTNT_MANDATORY, 0x00E4), + /* A6 */ VX_NODE(OTNT_MODRM_MOD, 0x0003), + /* A7 */ VX_NODE(OTNT_MODRM_MOD, 0x0004), + /* A8 */ VX_NODE(OTNT_MANDATORY, 0x00E7), + /* A9 */ VX_NODE(OTNT_MANDATORY, 0x00E8), + /* AA */ VX_NODE(OTNT_MANDATORY, 0x00E9), + /* AB */ VX_NODE(OTNT_MANDATORY, 0x00EA), + /* AC */ VX_NODE(OTNT_MANDATORY, 0x00EB), + /* AD */ VX_NODE(OTNT_MANDATORY, 0x00EC), + /* AE */ VX_NODE(OTNT_MODRM_MOD, 0x0005), + /* AF */ VX_NODE(OTNT_MANDATORY, 0x00EF), + /* B0 */ VX_NODE(OTNT_MANDATORY, 0x00F0), + /* B1 */ VX_NODE(OTNT_MANDATORY, 0x00F1), + /* B2 */ VX_NODE(OTNT_MANDATORY, 0x00F2), + /* B3 */ VX_NODE(OTNT_MANDATORY, 0x00F3), + /* B4 */ VX_NODE(OTNT_MANDATORY, 0x00F4), + /* B5 */ VX_NODE(OTNT_MANDATORY, 0x00F5), + /* B6 */ VX_NODE(OTNT_MANDATORY, 0x00F6), + /* B7 */ VX_NODE(OTNT_MANDATORY, 0x00F7), + /* B8 */ VX_NODE(OTNT_MANDATORY, 0x00F8), + /* B9 */ VX_INVALID, + /* BA */ VX_NODE(OTNT_MANDATORY, 0x00F9), + /* BB */ VX_NODE(OTNT_MANDATORY, 0x00FA), + /* BC */ VX_NODE(OTNT_MANDATORY, 0x00FB), + /* BD */ VX_NODE(OTNT_MANDATORY, 0x00FC), + /* BE */ VX_NODE(OTNT_MANDATORY, 0x00FD), + /* BF */ VX_NODE(OTNT_MANDATORY, 0x00FE), + /* C0 */ VX_NODE(OTNT_MANDATORY, 0x00FF), + /* C1 */ VX_NODE(OTNT_MANDATORY, 0x0100), + /* C2 */ VX_NODE(OTNT_MANDATORY, 0x0101), + /* C3 */ VX_NODE(OTNT_MANDATORY, 0x0102), + /* C4 */ VX_NODE(OTNT_MANDATORY, 0x0103), + /* C5 */ VX_NODE(OTNT_MANDATORY, 0x0104), + /* C6 */ VX_NODE(OTNT_MANDATORY, 0x0105), + /* C7 */ VX_NODE(OTNT_MODRM_MOD, 0x0006), + /* C8 */ VX_NODE(OTNT_MANDATORY, 0x0108), + /* C9 */ VX_NODE(OTNT_MANDATORY, 0x0109), + /* CA */ VX_NODE(OTNT_MANDATORY, 0x010A), + /* CB */ VX_NODE(OTNT_MANDATORY, 0x010B), + /* CC */ VX_NODE(OTNT_MANDATORY, 0x010C), + /* CD */ VX_NODE(OTNT_MANDATORY, 0x010D), + /* CE */ VX_NODE(OTNT_MANDATORY, 0x010E), + /* CF */ VX_NODE(OTNT_MANDATORY, 0x010F), + /* D0 */ VX_NODE(OTNT_MANDATORY, 0x0110), + /* D1 */ VX_NODE(OTNT_MANDATORY, 0x0111), + /* D2 */ VX_NODE(OTNT_MANDATORY, 0x0112), + /* D3 */ VX_NODE(OTNT_MANDATORY, 0x0113), + /* D4 */ VX_NODE(OTNT_MANDATORY, 0x0114), + /* D5 */ VX_NODE(OTNT_MANDATORY, 0x0115), + /* D6 */ VX_NODE(OTNT_MANDATORY, 0x0116), + /* D7 */ VX_NODE(OTNT_MANDATORY, 0x0117), + /* D8 */ VX_NODE(OTNT_MANDATORY, 0x0118), + /* D9 */ VX_NODE(OTNT_MANDATORY, 0x0119), + /* DA */ VX_NODE(OTNT_MANDATORY, 0x011A), + /* DB */ VX_NODE(OTNT_MANDATORY, 0x011B), + /* DC */ VX_NODE(OTNT_MANDATORY, 0x011C), + /* DD */ VX_NODE(OTNT_MANDATORY, 0x011D), + /* DE */ VX_NODE(OTNT_MANDATORY, 0x011E), + /* DF */ VX_NODE(OTNT_MANDATORY, 0x011F), + /* E0 */ VX_NODE(OTNT_MANDATORY, 0x0120), + /* E1 */ VX_NODE(OTNT_MANDATORY, 0x0121), + /* E2 */ VX_NODE(OTNT_MANDATORY, 0x0122), + /* E3 */ VX_NODE(OTNT_MANDATORY, 0x0123), + /* E4 */ VX_NODE(OTNT_MANDATORY, 0x0124), + /* E5 */ VX_NODE(OTNT_MANDATORY, 0x0125), + /* E6 */ VX_NODE(OTNT_MANDATORY, 0x0126), + /* E7 */ VX_NODE(OTNT_MANDATORY, 0x0127), + /* E8 */ VX_NODE(OTNT_MANDATORY, 0x0128), + /* E9 */ VX_NODE(OTNT_MANDATORY, 0x0129), + /* EA */ VX_NODE(OTNT_MANDATORY, 0x012A), + /* EB */ VX_NODE(OTNT_MANDATORY, 0x012B), + /* EC */ VX_NODE(OTNT_MANDATORY, 0x012C), + /* ED */ VX_NODE(OTNT_MANDATORY, 0x012D), + /* EE */ VX_NODE(OTNT_MANDATORY, 0x012E), + /* EF */ VX_NODE(OTNT_MANDATORY, 0x012F), + /* F0 */ VX_NODE(OTNT_MANDATORY, 0x0130), + /* F1 */ VX_NODE(OTNT_MANDATORY, 0x0131), + /* F2 */ VX_NODE(OTNT_MANDATORY, 0x0132), + /* F3 */ VX_NODE(OTNT_MANDATORY, 0x0133), + /* F4 */ VX_NODE(OTNT_MANDATORY, 0x0134), + /* F5 */ VX_NODE(OTNT_MANDATORY, 0x0135), + /* F6 */ VX_NODE(OTNT_MANDATORY, 0x0136), + /* F7 */ VX_NODE(OTNT_MODRM_MOD, 0x0007), + /* F8 */ VX_NODE(OTNT_MANDATORY, 0x0138), + /* F9 */ VX_NODE(OTNT_MANDATORY, 0x0139), + /* FA */ VX_NODE(OTNT_MANDATORY, 0x013A), + /* FB */ VX_NODE(OTNT_MANDATORY, 0x013B), + /* FC */ VX_NODE(OTNT_MANDATORY, 0x013C), + /* FD */ VX_NODE(OTNT_MANDATORY, 0x013D), + /* FE */ VX_NODE(OTNT_MANDATORY, 0x013E), + /* FF */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0032), + /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0033), + /* 02 */ VX_NODE(OTNT_MANDATORY, 0x0034), + /* 03 */ VX_NODE(OTNT_MANDATORY, 0x0035), + /* 04 */ VX_NODE(OTNT_MANDATORY, 0x0036), + /* 05 */ VX_NODE(OTNT_MANDATORY, 0x0037), + /* 06 */ VX_NODE(OTNT_MANDATORY, 0x0038), + /* 07 */ VX_NODE(OTNT_MANDATORY, 0x0039), + /* 08 */ VX_NODE(OTNT_MANDATORY, 0x003A), + /* 09 */ VX_NODE(OTNT_MANDATORY, 0x003B), + /* 0A */ VX_NODE(OTNT_MANDATORY, 0x003C), + /* 0B */ VX_NODE(OTNT_MANDATORY, 0x003D), + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, + /* 10 */ VX_NODE(OTNT_MANDATORY, 0x003E), + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_NODE(OTNT_MANDATORY, 0x003F), + /* 15 */ VX_NODE(OTNT_MANDATORY, 0x0040), + /* 16 */ VX_INVALID, + /* 17 */ VX_NODE(OTNT_MANDATORY, 0x0041), + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_NODE(OTNT_MANDATORY, 0x0042), + /* 1D */ VX_NODE(OTNT_MANDATORY, 0x0043), + /* 1E */ VX_NODE(OTNT_MANDATORY, 0x0044), + /* 1F */ VX_INVALID, + /* 20 */ VX_NODE(OTNT_MANDATORY, 0x0045), + /* 21 */ VX_NODE(OTNT_MANDATORY, 0x0046), + /* 22 */ VX_NODE(OTNT_MANDATORY, 0x0047), + /* 23 */ VX_NODE(OTNT_MANDATORY, 0x0048), + /* 24 */ VX_NODE(OTNT_MANDATORY, 0x0049), + /* 25 */ VX_NODE(OTNT_MANDATORY, 0x004A), + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_NODE(OTNT_MANDATORY, 0x004B), + /* 29 */ VX_NODE(OTNT_MANDATORY, 0x004C), + /* 2A */ VX_NODE(OTNT_MANDATORY, 0x004D), + /* 2B */ VX_NODE(OTNT_MANDATORY, 0x004E), + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_NODE(OTNT_MANDATORY, 0x004F), + /* 31 */ VX_NODE(OTNT_MANDATORY, 0x0050), + /* 32 */ VX_NODE(OTNT_MANDATORY, 0x0051), + /* 33 */ VX_NODE(OTNT_MANDATORY, 0x0052), + /* 34 */ VX_NODE(OTNT_MANDATORY, 0x0053), + /* 35 */ VX_NODE(OTNT_MANDATORY, 0x0054), + /* 36 */ VX_INVALID, + /* 37 */ VX_NODE(OTNT_MANDATORY, 0x0055), + /* 38 */ VX_NODE(OTNT_MANDATORY, 0x0056), + /* 39 */ VX_NODE(OTNT_MANDATORY, 0x0057), + /* 3A */ VX_NODE(OTNT_MANDATORY, 0x0058), + /* 3B */ VX_NODE(OTNT_MANDATORY, 0x0059), + /* 3C */ VX_NODE(OTNT_MANDATORY, 0x005A), + /* 3D */ VX_NODE(OTNT_MANDATORY, 0x005B), + /* 3E */ VX_NODE(OTNT_MANDATORY, 0x005C), + /* 3F */ VX_NODE(OTNT_MANDATORY, 0x005D), + /* 40 */ VX_NODE(OTNT_MANDATORY, 0x005E), + /* 41 */ VX_NODE(OTNT_MANDATORY, 0x005F), + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_NODE(OTNT_MANDATORY, 0x0060), + /* 81 */ VX_NODE(OTNT_MANDATORY, 0x0061), + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_NODE(OTNT_MANDATORY, 0x0062), + /* DC */ VX_NODE(OTNT_MANDATORY, 0x0063), + /* DD */ VX_NODE(OTNT_MANDATORY, 0x0064), + /* DE */ VX_NODE(OTNT_MANDATORY, 0x0065), + /* DF */ VX_NODE(OTNT_MANDATORY, 0x0066), + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_NODE(OTNT_MANDATORY, 0x0067), + /* F1 */ VX_NODE(OTNT_MANDATORY, 0x0068), + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_NODE(OTNT_MANDATORY, 0x0069), + /* 09 */ VX_NODE(OTNT_MANDATORY, 0x006A), + /* 0A */ VX_NODE(OTNT_MANDATORY, 0x006B), + /* 0B */ VX_NODE(OTNT_MANDATORY, 0x006C), + /* 0C */ VX_NODE(OTNT_MANDATORY, 0x006D), + /* 0D */ VX_NODE(OTNT_MANDATORY, 0x006E), + /* 0E */ VX_NODE(OTNT_MANDATORY, 0x006F), + /* 0F */ VX_NODE(OTNT_MANDATORY, 0x0070), + /* 10 */ VX_INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_NODE(OTNT_MANDATORY, 0x0071), + /* 15 */ VX_NODE(OTNT_MANDATORY, 0x0072), + /* 16 */ VX_NODE(OTNT_MANDATORY, 0x0073), + /* 17 */ VX_NODE(OTNT_MANDATORY, 0x0074), + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_NODE(OTNT_MANDATORY, 0x0075), + /* 21 */ VX_NODE(OTNT_MANDATORY, 0x0076), + /* 22 */ VX_NODE(OTNT_MANDATORY, 0x0077), + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, + /* 2A */ VX_INVALID, + /* 2B */ VX_INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_NODE(OTNT_MANDATORY, 0x0078), + /* 41 */ VX_NODE(OTNT_MANDATORY, 0x0079), + /* 42 */ VX_NODE(OTNT_MANDATORY, 0x007A), + /* 43 */ VX_INVALID, + /* 44 */ VX_NODE(OTNT_MANDATORY, 0x007B), + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, + /* 60 */ VX_NODE(OTNT_MANDATORY, 0x007C), + /* 61 */ VX_NODE(OTNT_MANDATORY, 0x007D), + /* 62 */ VX_NODE(OTNT_MANDATORY, 0x007E), + /* 63 */ VX_NODE(OTNT_MANDATORY, 0x007F), + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ VX_NODE(OTNT_MANDATORY, 0x0080), + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, + /* 10 */ 0x05E6, + /* 11 */ 0x05E5, + /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x0008), + /* 13 */ 0x05CC, + /* 14 */ 0x0698, + /* 15 */ 0x0696, + /* 16 */ VX_NODE(OTNT_MODRM_MOD, 0x0009), + /* 17 */ 0x05C7, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ 0x05B8, + /* 29 */ 0x05B7, + /* 2A */ VX_INVALID, + /* 2B */ 0x05D2, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ 0x0694, + /* 2F */ 0x0581, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ 0x05CE, + /* 51 */ 0x0689, + /* 52 */ 0x0684, + /* 53 */ 0x067E, + /* 54 */ 0x0575, + /* 55 */ 0x0573, + /* 56 */ 0x05F6, + /* 57 */ 0x069A, + /* 58 */ 0x0567, + /* 59 */ 0x05EF, + /* 5A */ 0x0587, + /* 5B */ 0x0583, + /* 5C */ 0x068E, + /* 5D */ 0x05AF, + /* 5E */ 0x0593, + /* 5F */ 0x05A9, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_NODE(OTNT_VEXL, 0x0000), + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_NODE(OTNT_MODRM_MOD, 0x000A), + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ 0x057D, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ 0x0687, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ VX_INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, + /* 10 */ 0x05E4, + /* 11 */ 0x05E3, + /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x000B), + /* 13 */ 0x05CA, + /* 14 */ 0x0697, + /* 15 */ 0x0695, + /* 16 */ VX_NODE(OTNT_MODRM_MOD, 0x000C), + /* 17 */ 0x05C5, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ 0x05B5, + /* 29 */ 0x05B6, + /* 2A */ VX_INVALID, + /* 2B */ 0x05D1, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ 0x0693, + /* 2F */ 0x0580, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ 0x05CD, + /* 51 */ 0x0688, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ 0x0574, + /* 55 */ 0x0572, + /* 56 */ 0x05F5, + /* 57 */ 0x0699, + /* 58 */ 0x0566, + /* 59 */ 0x05EE, + /* 5A */ 0x0585, + /* 5B */ 0x0586, + /* 5C */ 0x068D, + /* 5D */ 0x05AE, + /* 5E */ 0x0592, + /* 5F */ 0x05A8, + /* 60 */ 0x0679, + /* 61 */ 0x067C, + /* 62 */ 0x067A, + /* 63 */ 0x05FB, + /* 64 */ 0x0614, + /* 65 */ 0x0617, + /* 66 */ 0x0615, + /* 67 */ 0x05FD, + /* 68 */ 0x0675, + /* 69 */ 0x0678, + /* 6A */ 0x0676, + /* 6B */ 0x05FA, + /* 6C */ 0x067B, + /* 6D */ 0x0677, + /* 6E */ VX_NODE(OTNT_OPERAND_SIZE, 0x0014), + /* 6F */ 0x05BF, + /* 70 */ 0x0654, + /* 71 */ VX_NODE(OTNT_MODRM_REG, 0x001B), + /* 72 */ VX_NODE(OTNT_MODRM_REG, 0x001C), + /* 73 */ VX_NODE(OTNT_MODRM_REG, 0x001D), + /* 74 */ 0x060E, + /* 75 */ 0x0611, + /* 76 */ 0x060F, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ 0x059C, + /* 7D */ 0x059E, + /* 7E */ VX_NODE(OTNT_OPERAND_SIZE, 0x0015), + /* 7F */ 0x05C0, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ 0x057C, + /* C3 */ VX_INVALID, + /* C4 */ 0x0630, + /* C5 */ 0x0623, + /* C6 */ 0x0686, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ 0x056A, + /* D1 */ 0x066B, + /* D2 */ 0x0665, + /* D3 */ 0x0669, + /* D4 */ 0x0600, + /* D5 */ 0x0650, + /* D6 */ 0x05D4, + /* D7 */ VX_NODE(OTNT_VEXL, 0x0004), + /* D8 */ 0x0671, + /* D9 */ 0x0672, + /* DA */ 0x063C, + /* DB */ 0x0607, + /* DC */ 0x0603, + /* DD */ 0x0604, + /* DE */ 0x0636, + /* DF */ 0x0608, + /* E0 */ 0x0609, + /* E1 */ 0x0663, + /* E2 */ 0x0662, + /* E3 */ 0x060A, + /* E4 */ 0x064D, + /* E5 */ 0x064E, + /* E6 */ 0x058E, + /* E7 */ 0x05CF, + /* E8 */ 0x066F, + /* E9 */ 0x0670, + /* EA */ 0x063B, + /* EB */ 0x0651, + /* EC */ 0x0601, + /* ED */ 0x0602, + /* EE */ 0x0635, + /* EF */ 0x067D, + /* F0 */ VX_INVALID, + /* F1 */ VX_NODE(OTNT_VEXL, 0x0005), + /* F2 */ VX_NODE(OTNT_VEXL, 0x0006), + /* F3 */ VX_NODE(OTNT_VEXL, 0x0007), + /* F4 */ VX_INVALID, + /* F5 */ 0x0632, + /* F6 */ 0x0652, + /* F7 */ VX_NODE(OTNT_MODRM_MOD, 0x000D), + /* F8 */ 0x066C, + /* F9 */ 0x0673, + /* FA */ 0x066D, + /* FB */ 0x066E, + /* FC */ 0x05FE, + /* FD */ 0x0605, + /* FE */ 0x05FF, + /* FF */ VX_INVALID, + }, + { + /* 00 */ 0x0653, + /* 01 */ 0x0627, + /* 02 */ 0x0625, + /* 03 */ 0x0626, + /* 04 */ 0x0631, + /* 05 */ 0x062B, + /* 06 */ 0x0629, + /* 07 */ 0x062A, + /* 08 */ 0x0657, + /* 09 */ 0x0659, + /* 0A */ 0x0658, + /* 0B */ 0x064C, + /* 0C */ VX_NODE(OTNT_VEXW, 0x0000), + /* 0D */ VX_NODE(OTNT_VEXW, 0x0001), + /* 0E */ VX_NODE(OTNT_VEXW, 0x0002), + /* 0F */ VX_NODE(OTNT_VEXW, 0x0003), + /* 10 */ VX_INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, + /* 16 */ VX_INVALID, + /* 17 */ 0x0674, + /* 18 */ VX_NODE(OTNT_VEXW, 0x0004), + /* 19 */ VX_NODE(OTNT_VEXW, 0x0005), + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ 0x05F7, + /* 1D */ 0x05F9, + /* 1E */ 0x05F8, + /* 1F */ VX_INVALID, + /* 20 */ 0x0642, + /* 21 */ 0x0640, + /* 22 */ 0x0641, + /* 23 */ 0x0643, + /* 24 */ 0x0644, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ 0x064B, + /* 29 */ 0x0610, + /* 2A */ 0x05D0, + /* 2B */ 0x05FC, + /* 2C */ VX_NODE(OTNT_VEXW, 0x0006), + /* 2D */ VX_NODE(OTNT_VEXW, 0x0007), + /* 2E */ VX_NODE(OTNT_VEXW, 0x0008), + /* 2F */ VX_NODE(OTNT_VEXW, 0x0009), + /* 30 */ 0x0647, + /* 31 */ 0x0645, + /* 32 */ 0x0646, + /* 33 */ 0x0649, + /* 34 */ 0x064A, + /* 35 */ 0x0648, + /* 36 */ VX_INVALID, + /* 37 */ 0x0616, + /* 38 */ 0x0639, + /* 39 */ 0x063A, + /* 3A */ 0x063E, + /* 3B */ 0x063D, + /* 3C */ 0x0633, + /* 3D */ 0x0634, + /* 3E */ 0x0638, + /* 3F */ 0x0637, + /* 40 */ 0x064F, + /* 41 */ 0x0628, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ 0x0570, + /* DC */ 0x056E, + /* DD */ 0x056F, + /* DE */ 0x056C, + /* DF */ 0x056D, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_NODE(OTNT_VEXW, 0x000A), + /* 05 */ VX_NODE(OTNT_VEXW, 0x000B), + /* 06 */ VX_NODE(OTNT_VEXW, 0x000C), + /* 07 */ VX_INVALID, + /* 08 */ 0x0681, + /* 09 */ 0x0680, + /* 0A */ 0x0683, + /* 0B */ 0x0682, + /* 0C */ 0x0577, + /* 0D */ 0x0576, + /* 0E */ 0x060C, + /* 0F */ 0x0606, + /* 10 */ VX_INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_NODE(OTNT_VEXW, 0x000D), + /* 15 */ 0x0624, + /* 16 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0016), + /* 17 */ 0x059B, + /* 18 */ VX_NODE(OTNT_VEXW, 0x0011), + /* 19 */ VX_NODE(OTNT_VEXW, 0x0012), + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_NODE(OTNT_VEXW, 0x0013), + /* 21 */ 0x05A1, + /* 22 */ VX_NODE(OTNT_MODE, 0x0025), + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, + /* 2A */ VX_INVALID, + /* 2B */ VX_INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ 0x0597, + /* 41 */ 0x0596, + /* 42 */ 0x05E7, + /* 43 */ VX_INVALID, + /* 44 */ 0x060D, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_NODE(OTNT_VEXW, 0x0016), + /* 4B */ VX_NODE(OTNT_VEXW, 0x0017), + /* 4C */ VX_NODE(OTNT_VEXW, 0x0018), + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, + /* 60 */ 0x0613, + /* 61 */ 0x0612, + /* 62 */ 0x0619, + /* 63 */ 0x0618, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ 0x0571, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, + /* 10 */ VX_NODE(OTNT_MODRM_MOD, 0x000E), + /* 11 */ VX_NODE(OTNT_MODRM_MOD, 0x000F), + /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x0010), + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, + /* 16 */ VX_NODE(OTNT_MODRM_MOD, 0x0011), + /* 17 */ VX_INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, + /* 2A */ 0x058B, + /* 2B */ VX_INVALID, + /* 2C */ 0x0591, + /* 2D */ 0x058D, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ 0x068B, + /* 52 */ 0x0685, + /* 53 */ 0x067F, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ 0x0569, + /* 59 */ 0x05F1, + /* 5A */ 0x058C, + /* 5B */ 0x058F, + /* 5C */ 0x0690, + /* 5D */ 0x05B1, + /* 5E */ 0x0595, + /* 5F */ 0x05AB, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ 0x05C2, + /* 70 */ 0x0655, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ 0x05D3, + /* 7F */ 0x05C1, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ 0x057F, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ VX_INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ 0x0582, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, + /* 10 */ VX_NODE(OTNT_MODRM_MOD, 0x0012), + /* 11 */ VX_NODE(OTNT_MODRM_MOD, 0x0013), + /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x0014), + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, + /* 16 */ VX_INVALID, + /* 17 */ VX_INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, + /* 2A */ 0x058A, + /* 2B */ VX_INVALID, + /* 2C */ 0x0590, + /* 2D */ 0x0588, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ 0x068A, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ 0x0568, + /* 59 */ 0x05F0, + /* 5A */ 0x0589, + /* 5B */ VX_INVALID, + /* 5C */ 0x068F, + /* 5D */ 0x05B0, + /* 5E */ 0x0594, + /* 5F */ 0x05AA, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ 0x0656, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ 0x059D, + /* 7D */ 0x059F, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ 0x057E, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ 0x056B, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ VX_INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ 0x0584, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ 0x05A2, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, + }, +}; + +const VXOpcodeTreeNode vxOptreeModrmMod[][2] = +{ + { + /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0001), + /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0002), + }, + { + /* 00 */ VX_NODE(OTNT_MANDATORY, 0x000F), + /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0010), + }, + { + /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0014), + /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0015), + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_NODE(OTNT_MANDATORY, 0x00E5), + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_NODE(OTNT_MANDATORY, 0x00E6), + }, + { + /* 00 */ VX_NODE(OTNT_MANDATORY, 0x00ED), + /* 01 */ VX_NODE(OTNT_MANDATORY, 0x00EE), + }, + { + /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0106), + /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0107), + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0137), + }, + { + /* 00 */ 0x05CB, + /* 01 */ 0x05C3, + }, + { + /* 00 */ 0x05C6, + /* 01 */ 0x05C8, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x001A), + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x05C9, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x05C4, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05A3, + }, + { + /* 00 */ 0x05E2, + /* 01 */ 0x05DF, + }, + { + /* 00 */ 0x05E0, + /* 01 */ 0x05E1, + }, + { + /* 00 */ 0x05DE, + /* 01 */ 0x05DD, + }, + { + /* 00 */ 0x05DB, + /* 01 */ 0x05DC, + }, + { + /* 00 */ 0x05DA, + /* 01 */ 0x05D9, + }, + { + /* 00 */ 0x05D8, + /* 01 */ 0x05D7, + }, + { + /* 00 */ 0x05BE, + /* 01 */ 0x05BD, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0024), + /* 01 */ VX_NODE(OTNT_X87, 0x0000), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0025), + /* 01 */ VX_NODE(OTNT_X87, 0x0001), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0026), + /* 01 */ VX_NODE(OTNT_X87, 0x0002), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0027), + /* 01 */ VX_NODE(OTNT_X87, 0x0003), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0028), + /* 01 */ VX_NODE(OTNT_X87, 0x0004), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0029), + /* 01 */ VX_NODE(OTNT_X87, 0x0005), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x002A), + /* 01 */ VX_NODE(OTNT_X87, 0x0006), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x002B), + /* 01 */ VX_NODE(OTNT_X87, 0x0007), + }, +}; + +const VXOpcodeTreeNode vxOptreeModrmReg[][8] = +{ + { + /* 00 */ 0x0531, + /* 01 */ 0x0541, + /* 02 */ 0x02FC, + /* 03 */ 0x0309, + /* 04 */ 0x0598, + /* 05 */ 0x0599, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x0516, + /* 01 */ 0x052F, + /* 02 */ 0x02F9, + /* 03 */ 0x02FB, + /* 04 */ 0x0533, + /* 05 */ VX_INVALID, + /* 06 */ 0x02FE, + /* 07 */ 0x02C0, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_RM, 0x0000), + /* 01 */ VX_NODE(OTNT_MODRM_RM, 0x0001), + /* 02 */ VX_NODE(OTNT_MODRM_RM, 0x0002), + /* 03 */ VX_NODE(OTNT_MODRM_RM, 0x0003), + /* 04 */ 0x0532, + /* 05 */ VX_INVALID, + /* 06 */ 0x02FD, + /* 07 */ VX_NODE(OTNT_MODRM_RM, 0x0004), + }, + { + /* 00 */ 0x0455, + /* 01 */ 0x0456, + /* 02 */ 0x0457, + /* 03 */ 0x0458, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x0486, + /* 03 */ VX_INVALID, + /* 04 */ 0x0479, + /* 05 */ VX_INVALID, + /* 06 */ 0x0470, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x0485, + /* 03 */ VX_INVALID, + /* 04 */ 0x0478, + /* 05 */ VX_INVALID, + /* 06 */ 0x0473, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x047E, + /* 03 */ VX_INVALID, + /* 04 */ 0x0475, + /* 05 */ VX_INVALID, + /* 06 */ 0x0468, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x047C, + /* 03 */ VX_INVALID, + /* 04 */ 0x0476, + /* 05 */ VX_INVALID, + /* 06 */ 0x046A, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x0482, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ 0x046D, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x0481, + /* 03 */ 0x0480, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ 0x046C, + /* 07 */ 0x046B, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_RM, 0x0005), + /* 01 */ VX_NODE(OTNT_MODRM_RM, 0x0006), + /* 02 */ VX_NODE(OTNT_MODRM_RM, 0x0007), + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_RM, 0x0008), + /* 01 */ VX_NODE(OTNT_MODRM_RM, 0x0009), + /* 02 */ VX_NODE(OTNT_MODRM_RM, 0x000A), + /* 03 */ VX_NODE(OTNT_MODRM_RM, 0x000B), + /* 04 */ VX_NODE(OTNT_MODRM_RM, 0x000C), + /* 05 */ VX_NODE(OTNT_MODRM_RM, 0x000D), + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x0296, + /* 01 */ 0x0295, + /* 02 */ 0x02F2, + /* 03 */ 0x053C, + /* 04 */ 0x06C0, + /* 05 */ 0x06BF, + /* 06 */ VX_INVALID, + /* 07 */ 0x0055, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ 0x02F7, + /* 06 */ 0x0310, + /* 07 */ 0x0515, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ 0x0043, + /* 05 */ 0x0049, + /* 06 */ 0x0047, + /* 07 */ 0x0045, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0006), + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_NODE(OTNT_VENDOR, 0x0015), + /* 07 */ VX_NODE(OTNT_VENDOR, 0x0016), + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_NODE(OTNT_VENDOR, 0x0017), + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_NODE(OTNT_VENDOR, 0x0018), + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ 0x04D3, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x000F, + /* 01 */ 0x0392, + /* 02 */ 0x0005, + /* 03 */ 0x04FF, + /* 04 */ 0x0028, + /* 05 */ 0x0544, + /* 06 */ 0x06BC, + /* 07 */ 0x006E, + }, + { + /* 00 */ 0x0013, + /* 01 */ 0x0391, + /* 02 */ 0x0009, + /* 03 */ 0x0500, + /* 04 */ 0x0029, + /* 05 */ 0x0543, + /* 06 */ 0x06B5, + /* 07 */ 0x0072, + }, + { + /* 00 */ VX_NODE(OTNT_MODE, 0x0015), + /* 01 */ VX_NODE(OTNT_MODE, 0x0016), + /* 02 */ VX_NODE(OTNT_MODE, 0x0017), + /* 03 */ VX_NODE(OTNT_MODE, 0x0018), + /* 04 */ VX_NODE(OTNT_MODE, 0x0019), + /* 05 */ VX_NODE(OTNT_MODE, 0x001A), + /* 06 */ VX_NODE(OTNT_MODE, 0x001B), + /* 07 */ VX_NODE(OTNT_MODE, 0x001C), + }, + { + /* 00 */ 0x0012, + /* 01 */ 0x0397, + /* 02 */ 0x0008, + /* 03 */ 0x04FD, + /* 04 */ 0x002B, + /* 05 */ 0x0545, + /* 06 */ 0x06B4, + /* 07 */ 0x0071, + }, + { + /* 00 */ 0x0440, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x04DE, + /* 01 */ 0x04E6, + /* 02 */ 0x04C6, + /* 03 */ 0x04D0, + /* 04 */ 0x0517, + /* 05 */ 0x0526, + /* 06 */ 0x051D, + /* 07 */ 0x04F3, + }, + { + /* 00 */ 0x04DF, + /* 01 */ 0x04E7, + /* 02 */ 0x04C7, + /* 03 */ 0x04CE, + /* 04 */ 0x051C, + /* 05 */ 0x0528, + /* 06 */ 0x051E, + /* 07 */ 0x04F6, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x068C, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x066A, + /* 03 */ VX_INVALID, + /* 04 */ 0x0664, + /* 05 */ VX_INVALID, + /* 06 */ VX_NODE(OTNT_VEXL, 0x0001), + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x0666, + /* 03 */ VX_INVALID, + /* 04 */ 0x0661, + /* 05 */ VX_INVALID, + /* 06 */ VX_NODE(OTNT_VEXL, 0x0002), + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x0668, + /* 03 */ 0x0667, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_NODE(OTNT_VEXL, 0x0003), + /* 07 */ 0x065C, + }, + { + /* 00 */ 0x0333, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x0332, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x04DD, + /* 01 */ 0x04E5, + /* 02 */ 0x04C8, + /* 03 */ 0x04CD, + /* 04 */ 0x0522, + /* 05 */ 0x0527, + /* 06 */ 0x051F, + /* 07 */ 0x04F1, + }, + { + /* 00 */ 0x04DC, + /* 01 */ 0x04E2, + /* 02 */ 0x04C5, + /* 03 */ 0x04CF, + /* 04 */ 0x0520, + /* 05 */ 0x052A, + /* 06 */ 0x0519, + /* 07 */ 0x04F4, + }, + { + /* 00 */ 0x04E1, + /* 01 */ 0x04E3, + /* 02 */ 0x04C3, + /* 03 */ 0x04CC, + /* 04 */ 0x0521, + /* 05 */ 0x0529, + /* 06 */ 0x051A, + /* 07 */ 0x04F2, + }, + { + /* 00 */ 0x04E0, + /* 01 */ 0x04E4, + /* 02 */ 0x04C4, + /* 03 */ 0x04CB, + /* 04 */ 0x0518, + /* 05 */ 0x0525, + /* 06 */ 0x051B, + /* 07 */ 0x04F5, + }, + { + /* 00 */ 0x00BB, + /* 01 */ 0x01CF, + /* 02 */ 0x0119, + /* 03 */ 0x013D, + /* 04 */ 0x022C, + /* 05 */ 0x0245, + /* 06 */ 0x0166, + /* 07 */ 0x0171, + }, + { + /* 00 */ 0x01BC, + /* 01 */ VX_INVALID, + /* 02 */ 0x01FF, + /* 03 */ 0x020B, + /* 04 */ 0x01C3, + /* 05 */ 0x01C2, + /* 06 */ 0x01EB, + /* 07 */ 0x01EA, + }, + { + /* 00 */ 0x019A, + /* 01 */ 0x01A8, + /* 02 */ 0x019C, + /* 03 */ 0x019F, + /* 04 */ 0x01B3, + /* 05 */ 0x01B5, + /* 06 */ 0x01A1, + /* 07 */ 0x01A3, + }, + { + /* 00 */ 0x01A4, + /* 01 */ 0x01B1, + /* 02 */ 0x01AB, + /* 03 */ 0x01AD, + /* 04 */ VX_INVALID, + /* 05 */ 0x01BA, + /* 06 */ VX_INVALID, + /* 07 */ 0x020A, + }, + { + /* 00 */ 0x00BA, + /* 01 */ 0x01D2, + /* 02 */ 0x0118, + /* 03 */ 0x013E, + /* 04 */ 0x022B, + /* 05 */ 0x0243, + /* 06 */ 0x0158, + /* 07 */ 0x017A, + }, + { + /* 00 */ 0x01BB, + /* 01 */ 0x01AF, + /* 02 */ 0x01FE, + /* 03 */ 0x0209, + /* 04 */ 0x01F3, + /* 05 */ VX_INVALID, + /* 06 */ 0x01E8, + /* 07 */ 0x01ED, + }, + { + /* 00 */ 0x019B, + /* 01 */ 0x01A7, + /* 02 */ 0x019D, + /* 03 */ 0x019E, + /* 04 */ 0x01B2, + /* 05 */ 0x01B4, + /* 06 */ 0x01A0, + /* 07 */ 0x01A2, + }, + { + /* 00 */ 0x01A6, + /* 01 */ 0x01B0, + /* 02 */ 0x01AA, + /* 03 */ 0x01AE, + /* 04 */ 0x00D2, + /* 05 */ 0x01A5, + /* 06 */ 0x00D3, + /* 07 */ 0x01AC, + }, + { + /* 00 */ 0x0557, + /* 01 */ 0x0558, + /* 02 */ 0x038E, + /* 03 */ 0x0385, + /* 04 */ 0x037E, + /* 05 */ 0x02A5, + /* 06 */ 0x00AC, + /* 07 */ 0x02A0, + }, + { + /* 00 */ 0x0559, + /* 01 */ 0x055A, + /* 02 */ 0x038D, + /* 03 */ 0x0384, + /* 04 */ 0x037D, + /* 05 */ 0x02A3, + /* 06 */ 0x00AB, + /* 07 */ 0x02A1, + }, + { + /* 00 */ 0x02AF, + /* 01 */ 0x00A4, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x02B0, + /* 01 */ 0x00A5, + /* 02 */ VX_NODE(OTNT_MODE, 0x002C), + /* 03 */ 0x004C, + /* 04 */ 0x02D9, + /* 05 */ 0x02DA, + /* 06 */ 0x04B8, + /* 07 */ VX_INVALID, + }, +}; + +const VXOpcodeTreeNode vxOptreeModrmRm[][8] = +{ + { + /* 00 */ VX_INVALID, + /* 01 */ VX_NODE(OTNT_VENDOR, 0x0000), + /* 02 */ VX_NODE(OTNT_VENDOR, 0x0001), + /* 03 */ VX_NODE(OTNT_VENDOR, 0x0002), + /* 04 */ VX_NODE(OTNT_VENDOR, 0x0003), + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x0315, + /* 01 */ 0x0383, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x06B1, + /* 01 */ 0x06C1, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VENDOR, 0x0004), + /* 01 */ VX_NODE(OTNT_VENDOR, 0x0005), + /* 02 */ VX_NODE(OTNT_VENDOR, 0x0006), + /* 03 */ VX_NODE(OTNT_VENDOR, 0x0007), + /* 04 */ VX_NODE(OTNT_VENDOR, 0x0008), + /* 05 */ VX_NODE(OTNT_VENDOR, 0x0009), + /* 06 */ VX_NODE(OTNT_VENDOR, 0x000A), + /* 07 */ VX_NODE(OTNT_VENDOR, 0x000B), + }, + { + /* 00 */ 0x0550, + /* 01 */ VX_NODE(OTNT_VENDOR, 0x000C), + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x0316, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x06C2, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x06C3, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x06C4, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x06AF, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x06AC, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x06AE, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x06AD, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, + { + /* 00 */ 0x06B0, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + }, +}; + +const VXOpcodeTreeNode vxOptreeMandatory[][4] = +{ + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0000), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0001), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0002), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02F0, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0307, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0551, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0058, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0556, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02BD, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x069E, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0561, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0454, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0189, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0379, + /* 01 */ 0x0368, + /* 02 */ 0x0371, + /* 03 */ 0x0377, + }, + { + /* 00 */ 0x0378, + /* 01 */ 0x036A, + /* 02 */ 0x0370, + /* 03 */ 0x0376, + }, + { + /* 00 */ 0x0355, + /* 01 */ 0x0345, + /* 02 */ 0x036D, + /* 03 */ 0x0353, + }, + { + /* 00 */ 0x034C, + /* 01 */ 0x0346, + /* 02 */ 0x036E, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0354, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0352, + }, + { + /* 00 */ 0x0565, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0564, + }, + { + /* 00 */ 0x0563, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0562, + }, + { + /* 00 */ 0x0350, + /* 01 */ VX_INVALID, + /* 02 */ 0x036B, + /* 03 */ 0x034E, + }, + { + /* 00 */ 0x0351, + /* 01 */ VX_INVALID, + /* 02 */ 0x036C, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x034F, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x034D, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0003), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x038A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x038B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x038C, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0389, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0386, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0387, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0388, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0325, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0328, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0327, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0326, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x033A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0338, + }, + { + /* 00 */ 0x0339, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0337, + }, + { + /* 00 */ 0x008D, + /* 01 */ 0x0093, + /* 02 */ 0x0094, + /* 03 */ 0x008C, + }, + { + /* 00 */ 0x035C, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x035B, + }, + { + /* 00 */ 0x009A, + /* 01 */ 0x009B, + /* 02 */ 0x009C, + /* 03 */ 0x0098, + }, + { + /* 00 */ 0x0090, + /* 01 */ 0x0091, + /* 02 */ 0x0096, + /* 03 */ 0x008A, + }, + { + /* 00 */ 0x0560, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x055F, + }, + { + /* 00 */ 0x0082, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0081, + }, + { + /* 00 */ 0x069F, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x04D4, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x04D1, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x04D2, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODE, 0x0003), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODE, 0x0004), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x029A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x045B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x045C, + }, + { + /* 00 */ 0x03FD, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03FE, + }, + { + /* 00 */ 0x03FA, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03F9, + }, + { + /* 00 */ 0x03FB, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03FC, + }, + { + /* 00 */ 0x040E, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x040F, + }, + { + /* 00 */ 0x0405, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0404, + }, + { + /* 00 */ 0x0400, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0401, + }, + { + /* 00 */ 0x0402, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0403, + }, + { + /* 00 */ 0x0461, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0462, + }, + { + /* 00 */ 0x0466, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0465, + }, + { + /* 00 */ 0x0464, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0463, + }, + { + /* 00 */ 0x0431, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0432, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03CA, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0037, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0036, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x049A, + }, + { + /* 00 */ 0x03A3, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03A2, + }, + { + /* 00 */ 0x03A6, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03A7, + }, + { + /* 00 */ 0x03A4, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03A5, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0426, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0424, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0425, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0428, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0429, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0427, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0430, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03D1, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0359, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03AC, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x042C, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x042A, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x042B, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x042E, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x042F, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x042D, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03DA, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x041A, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x041B, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0421, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0420, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0412, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0413, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0419, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0418, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0438, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03FF, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_NODE(OTNT_MODE, 0x0005), + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_NODE(OTNT_MODE, 0x0006), + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0023, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0021, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0022, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x001F, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0020, + }, + { + /* 00 */ 0x033B, + /* 01 */ 0x0086, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x033C, + /* 01 */ 0x0085, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04E9, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04E8, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04EB, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04EA, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0035, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0034, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03CB, + }, + { + /* 00 */ 0x03BF, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03C0, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03DF, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03E3, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0000), + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x00B5, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0408, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x02B7, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0001), + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x00B2, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x00B1, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x037C, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03CC, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03D5, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03D4, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03DE, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03DD, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0024, + }, + { + /* 00 */ 0x0067, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0064, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x005C, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x005B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x005E, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0063, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x005D, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x005A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0069, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0066, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0068, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0065, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0061, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0060, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0062, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x005F, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0357, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0356, + }, + { + /* 00 */ 0x0535, + /* 01 */ 0x0536, + /* 02 */ 0x0537, + /* 03 */ 0x0534, + }, + { + /* 00 */ 0x04ED, + /* 01 */ VX_INVALID, + /* 02 */ 0x04EE, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x04C9, + /* 01 */ VX_INVALID, + /* 02 */ 0x04CA, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0032, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0031, + }, + { + /* 00 */ 0x0030, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x002F, + }, + { + /* 00 */ 0x039A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0399, + }, + { + /* 00 */ 0x06BE, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x06BD, + }, + { + /* 00 */ 0x001A, + /* 01 */ 0x001B, + /* 02 */ 0x001C, + /* 03 */ 0x0019, + }, + { + /* 00 */ 0x0380, + /* 01 */ 0x0381, + /* 02 */ 0x0382, + /* 03 */ 0x037F, + }, + { + /* 00 */ 0x008F, + /* 01 */ 0x0092, + /* 02 */ 0x0095, + /* 03 */ 0x008B, + }, + { + /* 00 */ 0x0088, + /* 01 */ VX_INVALID, + /* 02 */ 0x0099, + /* 03 */ 0x008E, + }, + { + /* 00 */ 0x054D, + /* 01 */ 0x054E, + /* 02 */ 0x054F, + /* 03 */ 0x054C, + }, + { + /* 00 */ 0x0312, + /* 01 */ 0x0313, + /* 02 */ 0x0314, + /* 03 */ 0x0311, + }, + { + /* 00 */ 0x00AE, + /* 01 */ 0x00AF, + /* 02 */ 0x00B0, + /* 03 */ 0x00AD, + }, + { + /* 00 */ 0x030D, + /* 01 */ 0x030E, + /* 02 */ 0x030F, + /* 03 */ 0x030C, + }, + { + /* 00 */ 0x04A2, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04A3, + }, + { + /* 00 */ 0x04A7, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04A8, + }, + { + /* 00 */ 0x04A5, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04A4, + }, + { + /* 00 */ 0x03AA, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03AB, + }, + { + /* 00 */ 0x03D7, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03D6, + }, + { + /* 00 */ 0x03DC, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03DB, + }, + { + /* 00 */ 0x03D8, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03D9, + }, + { + /* 00 */ 0x03AD, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03AE, + }, + { + /* 00 */ 0x049B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x049C, + }, + { + /* 00 */ 0x04A1, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04A0, + }, + { + /* 00 */ 0x049E, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x049D, + }, + { + /* 00 */ 0x03A8, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03A9, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04A6, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x049F, + }, + { + /* 00 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0002), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0003), + }, + { + /* 00 */ 0x0363, + /* 01 */ VX_INVALID, + /* 02 */ 0x034A, + /* 03 */ 0x0348, + }, + { + /* 00 */ 0x0460, + /* 01 */ 0x045F, + /* 02 */ 0x045E, + /* 03 */ 0x045D, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0004), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_NODE(OTNT_MODRM_REG, 0x0005), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0006), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_NODE(OTNT_MODRM_REG, 0x0007), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0008), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_NODE(OTNT_MODRM_REG, 0x0009), + }, + { + /* 00 */ 0x03CD, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03CE, + }, + { + /* 00 */ 0x03D2, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03D3, + }, + { + /* 00 */ 0x03D0, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03CF, + }, + { + /* 00 */ 0x00B3, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VENDOR, 0x0013), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VENDOR, 0x0014), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x029C, + /* 02 */ VX_INVALID, + /* 03 */ 0x029B, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x029F, + /* 02 */ VX_INVALID, + /* 03 */ 0x029E, + }, + { + /* 00 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0004), + /* 01 */ VX_INVALID, + /* 02 */ 0x035F, + /* 03 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0005), + }, + { + /* 00 */ 0x0362, + /* 01 */ VX_INVALID, + /* 02 */ 0x034B, + /* 03 */ 0x0349, + }, + { + /* 00 */ 0x02E9, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02E3, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02C9, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02DF, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02CF, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02E0, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02CC, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02C8, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02EE, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02E7, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02EA, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02E4, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02D6, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02D4, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02D7, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02D2, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0512, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x050F, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0507, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0506, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0509, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x050E, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0508, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0505, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0514, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0511, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0513, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0510, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x050C, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x050B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x050D, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x050A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x04B5, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x044A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0083, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0044, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0524, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0523, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000A), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000B), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x04B6, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0444, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x04EC, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x004A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x052C, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x052B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000C), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000D), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02A2, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x007C, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x007D, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0308, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0048, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02F8, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x02FA, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x037B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x037A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ 0x044D, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000E), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0046, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0039, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x003A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0373, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0374, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x06A1, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x06A0, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0075, + /* 01 */ 0x0077, + /* 02 */ 0x007A, + /* 03 */ 0x0074, + }, + { + /* 00 */ 0x035A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x040D, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x040C, + }, + { + /* 00 */ 0x03E4, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03E5, + }, + { + /* 00 */ 0x052E, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x052D, + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000F), + /* 01 */ VX_INVALID, + /* 02 */ VX_NODE(OTNT_MODRM_REG, 0x0010), + /* 03 */ VX_NODE(OTNT_MODRM_REG, 0x0011), + }, + { + /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0012), + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x003F, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x003D, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0040, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x003C, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x003E, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x003B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0042, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0041, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x001E, + /* 02 */ VX_INVALID, + /* 03 */ 0x001D, + }, + { + /* 00 */ 0x0487, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0488, + }, + { + /* 00 */ 0x047D, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x047F, + }, + { + /* 00 */ 0x0483, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0484, + }, + { + /* 00 */ 0x03B3, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03B4, + }, + { + /* 00 */ 0x0439, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x043A, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x0347, + /* 02 */ 0x0366, + /* 03 */ 0x0361, + }, + { + /* 00 */ 0x0422, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0423, + }, + { + /* 00 */ 0x0494, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0493, + }, + { + /* 00 */ 0x0496, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0495, + }, + { + /* 00 */ 0x041E, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x041F, + }, + { + /* 00 */ 0x03C1, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03C2, + }, + { + /* 00 */ 0x03BA, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03B9, + }, + { + /* 00 */ 0x03BB, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03BC, + }, + { + /* 00 */ 0x0417, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0416, + }, + { + /* 00 */ 0x03C3, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03C4, + }, + { + /* 00 */ 0x03C5, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03C6, + }, + { + /* 00 */ 0x047A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x047B, + }, + { + /* 00 */ 0x0477, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0474, + }, + { + /* 00 */ 0x03C8, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03C9, + }, + { + /* 00 */ 0x0434, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0435, + }, + { + /* 00 */ 0x0436, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0437, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x0089, + /* 02 */ 0x0087, + /* 03 */ 0x0097, + }, + { + /* 00 */ 0x035D, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0358, + }, + { + /* 00 */ 0x048F, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0490, + }, + { + /* 00 */ 0x0492, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0491, + }, + { + /* 00 */ 0x041C, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x041D, + }, + { + /* 00 */ 0x0453, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0452, + }, + { + /* 00 */ 0x03B6, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03B5, + }, + { + /* 00 */ 0x03B8, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03B7, + }, + { + /* 00 */ 0x0414, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0415, + }, + { + /* 00 */ 0x04C1, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x04C2, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x02F1, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + }, + { + /* 00 */ 0x0472, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0471, + }, + { + /* 00 */ 0x0469, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0467, + }, + { + /* 00 */ 0x046E, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x046F, + }, + { + /* 00 */ 0x043B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x043C, + }, + { + /* 00 */ 0x0411, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0410, + }, + { + /* 00 */ 0x045A, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0459, + }, + { + /* 00 */ 0x030B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x030A, + }, + { + /* 00 */ 0x0489, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x048A, + }, + { + /* 00 */ 0x0498, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x0497, + }, + { + /* 00 */ 0x048B, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x048C, + }, + { + /* 00 */ 0x048D, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x048E, + }, + { + /* 00 */ 0x03AF, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03B0, + }, + { + /* 00 */ 0x03BE, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03BD, + }, + { + /* 00 */ 0x03B1, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ 0x03B2, + }, +}; + +const VXOpcodeTreeNode vxOptreeX87[][64] = +{ + { + /* 00 */ 0x00BC, + /* 01 */ 0x00BF, + /* 02 */ 0x00C2, + /* 03 */ 0x00C1, + /* 04 */ 0x00C0, + /* 05 */ 0x00C5, + /* 06 */ 0x00C3, + /* 07 */ 0x00C4, + /* 08 */ 0x01CE, + /* 09 */ 0x01CD, + /* 0A */ 0x01D9, + /* 0B */ 0x01DA, + /* 0C */ 0x01DB, + /* 0D */ 0x01D6, + /* 0E */ 0x01D7, + /* 0F */ 0x01D8, + /* 10 */ 0x011A, + /* 11 */ 0x011C, + /* 12 */ 0x011B, + /* 13 */ 0x0117, + /* 14 */ 0x0116, + /* 15 */ 0x011D, + /* 16 */ 0x011F, + /* 17 */ 0x011E, + /* 18 */ 0x013A, + /* 19 */ 0x0141, + /* 1A */ 0x013C, + /* 1B */ 0x0138, + /* 1C */ 0x013B, + /* 1D */ 0x0140, + /* 1E */ 0x013F, + /* 1F */ 0x0139, + /* 20 */ 0x022E, + /* 21 */ 0x0226, + /* 22 */ 0x0229, + /* 23 */ 0x0232, + /* 24 */ 0x0231, + /* 25 */ 0x022D, + /* 26 */ 0x022A, + /* 27 */ 0x0227, + /* 28 */ 0x0246, + /* 29 */ 0x024B, + /* 2A */ 0x024C, + /* 2B */ 0x024A, + /* 2C */ 0x0248, + /* 2D */ 0x0249, + /* 2E */ 0x0250, + /* 2F */ 0x0251, + /* 30 */ 0x0161, + /* 31 */ 0x0162, + /* 32 */ 0x0155, + /* 33 */ 0x015A, + /* 34 */ 0x0159, + /* 35 */ 0x0156, + /* 36 */ 0x0157, + /* 37 */ 0x0163, + /* 38 */ 0x0172, + /* 39 */ 0x016F, + /* 3A */ 0x0170, + /* 3B */ 0x0173, + /* 3C */ 0x0176, + /* 3D */ 0x0177, + /* 3E */ 0x0174, + /* 3F */ 0x0175, + }, + { + /* 00 */ 0x01BD, + /* 01 */ 0x01C0, + /* 02 */ 0x01BF, + /* 03 */ 0x01BE, + /* 04 */ 0x01B7, + /* 05 */ 0x01B6, + /* 06 */ 0x01B9, + /* 07 */ 0x01B8, + /* 08 */ 0x0281, + /* 09 */ 0x0282, + /* 0A */ 0x0283, + /* 0B */ 0x0280, + /* 0C */ 0x027D, + /* 0D */ 0x027E, + /* 0E */ 0x027F, + /* 0F */ 0x0284, + /* 10 */ 0x01E7, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, + /* 16 */ VX_INVALID, + /* 17 */ VX_INVALID, + /* 18 */ 0x0213, + /* 19 */ 0x0212, + /* 1A */ 0x0215, + /* 1B */ 0x0214, + /* 1C */ 0x020F, + /* 1D */ 0x020E, + /* 1E */ 0x0211, + /* 1F */ 0x0210, + /* 20 */ 0x00D4, + /* 21 */ 0x00B7, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ 0x025A, + /* 25 */ 0x027C, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ 0x01C1, + /* 29 */ 0x01C5, + /* 2A */ 0x01C4, + /* 2B */ 0x01C8, + /* 2C */ 0x01C6, + /* 2D */ 0x01C7, + /* 2E */ 0x01C9, + /* 2F */ VX_INVALID, + /* 30 */ 0x00B6, + /* 31 */ 0x0298, + /* 32 */ 0x01F1, + /* 33 */ 0x01EE, + /* 34 */ 0x0297, + /* 35 */ 0x01F0, + /* 36 */ 0x0154, + /* 37 */ 0x01A9, + /* 38 */ 0x01EF, + /* 39 */ 0x0299, + /* 3A */ 0x01F8, + /* 3B */ 0x01F7, + /* 3C */ 0x01F2, + /* 3D */ 0x01F5, + /* 3E */ 0x01F6, + /* 3F */ 0x0153, + }, + { + /* 00 */ 0x00D9, + /* 01 */ 0x00DA, + /* 02 */ 0x00DB, + /* 03 */ 0x00D6, + /* 04 */ 0x00D7, + /* 05 */ 0x00D8, + /* 06 */ 0x00DD, + /* 07 */ 0x00DC, + /* 08 */ 0x00E6, + /* 09 */ 0x00E7, + /* 0A */ 0x00E8, + /* 0B */ 0x00EC, + /* 0C */ 0x00ED, + /* 0D */ 0x00EB, + /* 0E */ 0x00E9, + /* 0F */ 0x00EA, + /* 10 */ 0x00E4, + /* 11 */ 0x00E5, + /* 12 */ 0x00E2, + /* 13 */ 0x00E3, + /* 14 */ 0x00DF, + /* 15 */ 0x00DE, + /* 16 */ 0x00E0, + /* 17 */ 0x00E1, + /* 18 */ 0x0113, + /* 19 */ 0x0114, + /* 1A */ 0x0115, + /* 1B */ 0x010F, + /* 1C */ 0x010E, + /* 1D */ 0x0110, + /* 1E */ 0x0111, + /* 1F */ 0x0112, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ 0x027B, + /* 2A */ VX_INVALID, + /* 2B */ VX_INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + }, + { + /* 00 */ 0x00F0, + /* 01 */ 0x00F1, + /* 02 */ 0x00EE, + /* 03 */ 0x00EF, + /* 04 */ 0x00F4, + /* 05 */ 0x00F5, + /* 06 */ 0x00F2, + /* 07 */ 0x00F3, + /* 08 */ 0x0103, + /* 09 */ 0x0102, + /* 0A */ 0x0105, + /* 0B */ 0x0104, + /* 0C */ 0x00FF, + /* 0D */ 0x00FE, + /* 0E */ 0x0101, + /* 0F */ 0x0100, + /* 10 */ 0x00F8, + /* 11 */ 0x00F9, + /* 12 */ 0x00F6, + /* 13 */ 0x00F7, + /* 14 */ 0x00FC, + /* 15 */ 0x00FD, + /* 16 */ 0x00FA, + /* 17 */ 0x00FB, + /* 18 */ 0x010B, + /* 19 */ 0x010A, + /* 1A */ 0x010D, + /* 1B */ 0x010C, + /* 1C */ 0x0107, + /* 1D */ 0x0106, + /* 1E */ 0x0109, + /* 1F */ 0x0108, + /* 20 */ 0x01E5, + /* 21 */ 0x01E4, + /* 22 */ 0x00D5, + /* 23 */ 0x01E6, + /* 24 */ 0x01E9, + /* 25 */ 0x01F4, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ 0x0269, + /* 29 */ 0x026A, + /* 2A */ 0x0265, + /* 2B */ 0x0264, + /* 2C */ 0x0263, + /* 2D */ 0x0268, + /* 2E */ 0x0267, + /* 2F */ 0x0266, + /* 30 */ 0x0129, + /* 31 */ 0x0128, + /* 32 */ 0x012B, + /* 33 */ 0x012A, + /* 34 */ 0x012F, + /* 35 */ 0x012E, + /* 36 */ 0x012D, + /* 37 */ 0x012C, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + }, + { + /* 00 */ 0x00B9, + /* 01 */ 0x00B8, + /* 02 */ 0x00C6, + /* 03 */ 0x00C9, + /* 04 */ 0x00C8, + /* 05 */ 0x00C7, + /* 06 */ 0x00BE, + /* 07 */ 0x00BD, + /* 08 */ 0x01D1, + /* 09 */ 0x01D0, + /* 0A */ 0x01D5, + /* 0B */ 0x01D4, + /* 0C */ 0x01D3, + /* 0D */ 0x01CC, + /* 0E */ 0x01CB, + /* 0F */ 0x01CA, + /* 10 */ 0x0125, + /* 11 */ 0x0124, + /* 12 */ 0x0127, + /* 13 */ 0x0126, + /* 14 */ 0x0121, + /* 15 */ 0x0120, + /* 16 */ 0x0123, + /* 17 */ 0x0122, + /* 18 */ 0x0148, + /* 19 */ 0x0142, + /* 1A */ 0x0145, + /* 1B */ 0x0144, + /* 1C */ 0x0143, + /* 1D */ 0x0147, + /* 1E */ 0x0146, + /* 1F */ 0x0149, + /* 20 */ 0x024F, + /* 21 */ 0x0247, + /* 22 */ 0x0241, + /* 23 */ 0x0242, + /* 24 */ 0x0240, + /* 25 */ 0x024E, + /* 26 */ 0x024D, + /* 27 */ 0x0244, + /* 28 */ 0x0228, + /* 29 */ 0x0235, + /* 2A */ 0x0234, + /* 2B */ 0x0237, + /* 2C */ 0x0236, + /* 2D */ 0x0233, + /* 2E */ 0x0230, + /* 2F */ 0x022F, + /* 30 */ 0x017B, + /* 31 */ 0x0178, + /* 32 */ 0x0179, + /* 33 */ 0x017C, + /* 34 */ 0x017F, + /* 35 */ 0x0180, + /* 36 */ 0x017D, + /* 37 */ 0x017E, + /* 38 */ 0x015E, + /* 39 */ 0x015F, + /* 3A */ 0x0160, + /* 3B */ 0x015B, + /* 3C */ 0x015C, + /* 3D */ 0x015D, + /* 3E */ 0x0164, + /* 3F */ 0x0165, + }, + { + /* 00 */ 0x018F, + /* 01 */ 0x018E, + /* 02 */ 0x0191, + /* 03 */ 0x0190, + /* 04 */ 0x018B, + /* 05 */ 0x018A, + /* 06 */ 0x018D, + /* 07 */ 0x018C, + /* 08 */ 0x028A, + /* 09 */ 0x0289, + /* 0A */ 0x028C, + /* 0B */ 0x028B, + /* 0C */ 0x0286, + /* 0D */ 0x0285, + /* 0E */ 0x0288, + /* 0F */ 0x0287, + /* 10 */ 0x0200, + /* 11 */ 0x0202, + /* 12 */ 0x0201, + /* 13 */ 0x01FA, + /* 14 */ 0x01F9, + /* 15 */ 0x01FB, + /* 16 */ 0x01FD, + /* 17 */ 0x01FC, + /* 18 */ 0x020D, + /* 19 */ 0x020C, + /* 1A */ 0x0208, + /* 1B */ 0x0204, + /* 1C */ 0x0203, + /* 1D */ 0x0205, + /* 1E */ 0x0207, + /* 1F */ 0x0206, + /* 20 */ 0x025D, + /* 21 */ 0x025C, + /* 22 */ 0x025B, + /* 23 */ 0x025E, + /* 24 */ 0x0261, + /* 25 */ 0x0262, + /* 26 */ 0x025F, + /* 27 */ 0x0260, + /* 28 */ 0x0278, + /* 29 */ 0x0277, + /* 2A */ 0x027A, + /* 2B */ 0x0279, + /* 2C */ 0x0274, + /* 2D */ 0x0273, + /* 2E */ 0x0276, + /* 2F */ 0x0275, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + }, + { + /* 00 */ 0x00CC, + /* 01 */ 0x00CD, + /* 02 */ 0x00CA, + /* 03 */ 0x00CB, + /* 04 */ 0x00D0, + /* 05 */ 0x00D1, + /* 06 */ 0x00CE, + /* 07 */ 0x00CF, + /* 08 */ 0x01E1, + /* 09 */ 0x01E0, + /* 0A */ 0x01E3, + /* 0B */ 0x01E2, + /* 0C */ 0x01DD, + /* 0D */ 0x01DC, + /* 0E */ 0x01DF, + /* 0F */ 0x01DE, + /* 10 */ 0x014F, + /* 11 */ 0x014E, + /* 12 */ 0x0151, + /* 13 */ 0x0150, + /* 14 */ 0x014B, + /* 15 */ 0x014A, + /* 16 */ 0x014D, + /* 17 */ 0x014C, + /* 18 */ VX_INVALID, + /* 19 */ 0x0152, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ 0x0258, + /* 21 */ 0x0259, + /* 22 */ 0x0256, + /* 23 */ 0x0257, + /* 24 */ 0x0253, + /* 25 */ 0x0252, + /* 26 */ 0x0255, + /* 27 */ 0x0254, + /* 28 */ 0x023B, + /* 29 */ 0x023D, + /* 2A */ 0x023C, + /* 2B */ 0x0239, + /* 2C */ 0x0238, + /* 2D */ 0x023A, + /* 2E */ 0x023E, + /* 2F */ 0x023F, + /* 30 */ 0x0186, + /* 31 */ 0x0185, + /* 32 */ 0x0188, + /* 33 */ 0x0187, + /* 34 */ 0x0182, + /* 35 */ 0x0181, + /* 36 */ 0x0184, + /* 37 */ 0x0183, + /* 38 */ 0x016C, + /* 39 */ 0x016B, + /* 3A */ 0x016E, + /* 3B */ 0x016D, + /* 3C */ 0x0168, + /* 3D */ 0x0167, + /* 3E */ 0x016A, + /* 3F */ 0x0169, + }, + { + /* 00 */ 0x0199, + /* 01 */ 0x0196, + /* 02 */ 0x0197, + /* 03 */ 0x0198, + /* 04 */ 0x0193, + /* 05 */ 0x0192, + /* 06 */ 0x0195, + /* 07 */ 0x0194, + /* 08 */ 0x028F, + /* 09 */ 0x0290, + /* 0A */ 0x028D, + /* 0B */ 0x028E, + /* 0C */ 0x0293, + /* 0D */ 0x0294, + /* 0E */ 0x0291, + /* 0F */ 0x0292, + /* 10 */ 0x021B, + /* 11 */ 0x021A, + /* 12 */ 0x021D, + /* 13 */ 0x021C, + /* 14 */ 0x0217, + /* 15 */ 0x0216, + /* 16 */ 0x0219, + /* 17 */ 0x0218, + /* 18 */ 0x0220, + /* 19 */ 0x0221, + /* 1A */ 0x021E, + /* 1B */ 0x021F, + /* 1C */ 0x0224, + /* 1D */ 0x0225, + /* 1E */ 0x0222, + /* 1F */ 0x0223, + /* 20 */ 0x01EC, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ 0x0271, + /* 29 */ 0x0272, + /* 2A */ 0x026D, + /* 2B */ 0x026C, + /* 2C */ 0x026B, + /* 2D */ 0x0270, + /* 2E */ 0x026F, + /* 2F */ 0x026E, + /* 30 */ 0x0136, + /* 31 */ 0x0137, + /* 32 */ 0x0133, + /* 33 */ 0x0134, + /* 34 */ 0x0135, + /* 35 */ 0x0130, + /* 36 */ 0x0131, + /* 37 */ 0x0132, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + }, +}; + +const VXOpcodeTreeNode vxOptreeAddressSize[][3] = +{ + { + /* 00 */ 0x02CD, + /* 01 */ 0x02D0, + /* 02 */ 0x02EC, + }, +}; + +const VXOpcodeTreeNode vxOptreeOperandSize[][3] = +{ + { + /* 00 */ 0x03E0, + /* 01 */ 0x03E1, + /* 02 */ 0x03E2, + }, + { + /* 00 */ 0x0409, + /* 01 */ 0x040A, + /* 02 */ 0x040B, + }, + { + /* 00 */ 0x033D, + /* 01 */ 0x0343, + /* 02 */ 0x035E, + }, + { + /* 00 */ 0x0341, + /* 01 */ 0x0342, + /* 02 */ 0x0364, + }, + { + /* 00 */ 0x0344, + /* 01 */ 0x033E, + /* 02 */ 0x0365, + }, + { + /* 00 */ 0x0340, + /* 01 */ 0x033F, + /* 02 */ 0x0360, + }, + { + /* 00 */ 0x007F, + /* 01 */ 0x0080, + /* 02 */ 0x007E, + }, + { + /* 00 */ VX_NODE(OTNT_MODE, 0x000F), + /* 01 */ VX_NODE(OTNT_MODE, 0x0010), + /* 02 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODE, 0x0011), + /* 01 */ VX_NODE(OTNT_MODE, 0x0012), + /* 02 */ VX_INVALID, + }, + { + /* 00 */ 0x02B8, + /* 01 */ 0x02B6, + /* 02 */ VX_INVALID, + }, + { + /* 00 */ 0x03A1, + /* 01 */ 0x03A0, + /* 02 */ VX_INVALID, + }, + { + /* 00 */ 0x0050, + /* 01 */ 0x009E, + /* 02 */ 0x0052, + }, + { + /* 00 */ 0x009D, + /* 01 */ 0x0051, + /* 02 */ 0x0084, + }, + { + /* 00 */ VX_NODE(OTNT_MODE, 0x001E), + /* 01 */ VX_NODE(OTNT_MODE, 0x001F), + /* 02 */ VX_NODE(OTNT_MODE, 0x0020), + }, + { + /* 00 */ VX_NODE(OTNT_MODE, 0x0021), + /* 01 */ VX_NODE(OTNT_MODE, 0x0022), + /* 02 */ VX_NODE(OTNT_MODE, 0x0023), + }, + { + /* 00 */ 0x0372, + /* 01 */ 0x0369, + /* 02 */ 0x036F, + }, + { + /* 00 */ 0x007B, + /* 01 */ 0x0078, + /* 02 */ 0x0079, + }, + { + /* 00 */ 0x0540, + /* 01 */ 0x053E, + /* 02 */ 0x053F, + }, + { + /* 00 */ 0x0303, + /* 01 */ 0x0301, + /* 02 */ 0x0302, + }, + { + /* 00 */ 0x0504, + /* 01 */ 0x0502, + /* 02 */ 0x0503, + }, + { + /* 00 */ 0x05BB, + /* 01 */ 0x05BA, + /* 02 */ 0x05D5, + }, + { + /* 00 */ 0x05B9, + /* 01 */ 0x05BC, + /* 02 */ 0x05D6, + }, + { + /* 00 */ VX_NODE(OTNT_VEXW, 0x000E), + /* 01 */ VX_NODE(OTNT_VEXW, 0x000F), + /* 02 */ VX_NODE(OTNT_VEXW, 0x0010), + }, + { + /* 00 */ 0x02C6, + /* 01 */ 0x02C4, + /* 02 */ 0x02C5, + }, +}; + +const VXOpcodeTreeNode vxOptreeMode[][2] = +{ + { + /* 00 */ 0x04AA, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0445, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x04AD, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0553, + /* 01 */ VX_NODE(OTNT_VENDOR, 0x000D), + }, + { + /* 00 */ 0x0555, + /* 01 */ VX_NODE(OTNT_VENDOR, 0x000E), + }, + { + /* 00 */ VX_NODE(OTNT_VENDOR, 0x000F), + /* 01 */ VX_NODE(OTNT_VENDOR, 0x0010), + }, + { + /* 00 */ VX_NODE(OTNT_VENDOR, 0x0011), + /* 01 */ VX_NODE(OTNT_VENDOR, 0x0012), + }, + { + /* 00 */ 0x04AC, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0446, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x04A9, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0443, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x009F, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x00A0, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0001, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0004, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x04BA, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x04BB, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x044B, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x044C, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0038, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0033, + /* 01 */ 0x0375, + }, + { + /* 00 */ 0x0011, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0398, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0007, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x04FC, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x002A, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0546, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x06B3, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0073, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x004F, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x04C0, + /* 01 */ 0x04BF, + }, + { + /* 00 */ 0x04BC, + /* 01 */ 0x04BE, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x04BD, + }, + { + /* 00 */ 0x0451, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x044E, + /* 01 */ 0x0450, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x044F, + }, + { + /* 00 */ 0x02F6, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VEXW, 0x0014), + /* 01 */ VX_NODE(OTNT_VEXW, 0x0015), + }, + { + /* 00 */ 0x02F3, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x02BC, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0003, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0002, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x04F0, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x02DC, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x004D, + /* 01 */ 0x004B, + }, +}; + +const VXOpcodeTreeNode vxOptreeVendor[][2] = +{ + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05AC, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05B2, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05EB, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05F3, + }, + { + /* 00 */ 0x05EC, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x05B4, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x05B3, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x05ED, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x053A, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0056, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0530, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x02C1, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x04D5, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x0552, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x0554, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x02BE, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x02BF, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x02C3, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x02C2, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05EA, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05F2, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05E8, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05E9, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05F4, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05AD, + }, +}; + +const VXOpcodeTreeNode vxOptree3dnow[][256] = +{ + { + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ 0x0407, + /* 0D */ 0x0406, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, + /* 10 */ VX_INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, + /* 16 */ VX_INVALID, + /* 17 */ VX_INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ 0x03E7, + /* 1D */ 0x03E6, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, + /* 2A */ VX_INVALID, + /* 2B */ VX_INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ 0x03F0, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ 0x03F1, + /* 8F */ VX_INVALID, + /* 90 */ 0x03EB, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ 0x03EE, + /* 95 */ VX_INVALID, + /* 96 */ 0x03F2, + /* 97 */ 0x03F6, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ 0x03F7, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ 0x03E9, + /* 9F */ VX_INVALID, + /* A0 */ 0x03EC, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ 0x03ED, + /* A5 */ VX_INVALID, + /* A6 */ 0x03F3, + /* A7 */ 0x03F5, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ 0x03F8, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ 0x03E8, + /* AF */ VX_INVALID, + /* B0 */ 0x03EA, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ 0x03EF, + /* B5 */ VX_INVALID, + /* B6 */ 0x03F4, + /* B7 */ 0x0433, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ 0x0499, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ 0x03C7, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ VX_INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, + }, +}; + +const VXOpcodeTreeNode vxOptreeVex[][16] = +{ + { + /* 00 */ VX_NODE(OTNT_MODE, 0x0024), + /* 01 */ VX_NODE(OTNT_TABLE, 0x0004), + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_NODE(OTNT_TABLE, 0x0005), + /* 06 */ VX_NODE(OTNT_TABLE, 0x0006), + /* 07 */ VX_NODE(OTNT_TABLE, 0x0007), + /* 08 */ VX_INVALID, + /* 09 */ VX_NODE(OTNT_TABLE, 0x0008), + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_NODE(OTNT_TABLE, 0x0009), + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_MODE, 0x0026), + /* 01 */ VX_NODE(OTNT_TABLE, 0x0004), + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_NODE(OTNT_TABLE, 0x0005), + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_NODE(OTNT_TABLE, 0x0008), + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_NODE(OTNT_TABLE, 0x0009), + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, + }, +}; + +const VXOpcodeTreeNode vxOptreeVexW[][2] = +{ + { + /* 00 */ 0x061D, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x061C, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0692, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0691, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x057B, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VEXL, 0x0008), + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x05A6, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x05A5, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x05A7, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x05A4, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x061E, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x061B, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VEXL, 0x0009), + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x061F, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0620, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0621, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x0622, + }, + { + /* 00 */ VX_NODE(OTNT_VEXL, 0x000A), + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VEXL, 0x000B), + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VEXL, 0x000C), + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VEXL, 0x000D), + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_NODE(OTNT_VEXL, 0x000E), + /* 01 */ VX_NODE(OTNT_VEXL, 0x000F), + }, + { + /* 00 */ 0x0579, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x0578, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x060B, + /* 01 */ VX_INVALID, + }, +}; + +const VXOpcodeTreeNode vxOptreeVexL[][2] = +{ + { + /* 00 */ 0x069C, + /* 01 */ 0x069B, + }, + { + /* 00 */ 0x0660, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x065A, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x065E, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x063F, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x065F, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x065B, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x065D, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x057A, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x061A, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x05A0, + }, + { + /* 00 */ VX_INVALID, + /* 01 */ 0x059A, + }, + { + /* 00 */ 0x062C, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x062E, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x062D, + /* 01 */ VX_INVALID, + }, + { + /* 00 */ 0x062F, + /* 01 */ VX_INVALID, + }, +}; + +#undef VX_INVALID +#undef VX_NODE + +#define OPI_NONE { DOT_NONE, DOS_NA } +#define OPI_AL { DOT_AL, DOS_B } +#define OPI_AX { DOT_AX, DOS_W } +#define OPI_Av { DOT_A, DOS_V } +#define OPI_C { DOT_C, DOS_NA } +#define OPI_CL { DOT_CL, DOS_B } +#define OPI_CS { DOT_CS, DOS_NA } +#define OPI_CX { DOT_CX, DOS_W } +#define OPI_D { DOT_D, DOS_NA } +#define OPI_DL { DOT_DL, DOS_B } +#define OPI_DS { DOT_DS, DOS_NA } +#define OPI_DX { DOT_DX, DOS_W } +#define OPI_E { DOT_E, DOS_NA } +#define OPI_ES { DOT_ES, DOS_NA } +#define OPI_Eb { DOT_E, DOS_B } +#define OPI_Ed { DOT_E, DOS_D } +#define OPI_Eq { DOT_E, DOS_Q } +#define OPI_Ev { DOT_E, DOS_V } +#define OPI_Ew { DOT_E, DOS_W } +#define OPI_Ey { DOT_E, DOS_Y } +#define OPI_Ez { DOT_E, DOS_Z } +#define OPI_FS { DOT_FS, DOS_NA } +#define OPI_Fv { DOT_F, DOS_V } +#define OPI_G { DOT_G, DOS_NA } +#define OPI_GS { DOT_GS, DOS_NA } +#define OPI_Gb { DOT_G, DOS_B } +#define OPI_Gd { DOT_G, DOS_D } +#define OPI_Gq { DOT_G, DOS_Q } +#define OPI_Gv { DOT_G, DOS_V } +#define OPI_Gw { DOT_G, DOS_W } +#define OPI_Gy { DOT_G, DOS_Y } +#define OPI_Gz { DOT_G, DOS_Z } +#define OPI_H { DOT_H, DOS_X } +#define OPI_Hqq { DOT_H, DOS_QQ } +#define OPI_Hx { DOT_H, DOS_X } +#define OPI_I1 { DOT_I1, DOS_NA } +#define OPI_Ib { DOT_I, DOS_B } +#define OPI_Iv { DOT_I, DOS_V } +#define OPI_Iw { DOT_I, DOS_W } +#define OPI_Iz { DOT_I, DOS_Z } +#define OPI_Jb { DOT_J, DOS_B } +#define OPI_Jv { DOT_J, DOS_V } +#define OPI_Jz { DOT_J, DOS_Z } +#define OPI_L { DOT_L, DOS_O } +#define OPI_Lx { DOT_L, DOS_X } +#define OPI_M { DOT_M, DOS_NA } +#define OPI_Mb { DOT_M, DOS_B } +#define OPI_MbRd { DOT_MR, DOS_BD } +#define OPI_MbRv { DOT_MR, DOS_BV } +#define OPI_Md { DOT_M, DOS_D } +#define OPI_MdRy { DOT_MR, DOS_DY } +#define OPI_MdU { DOT_MU, DOS_DO } +#define OPI_Mdq { DOT_M, DOS_DQ } +#define OPI_Mo { DOT_M, DOS_O } +#define OPI_Mq { DOT_M, DOS_Q } +#define OPI_MqU { DOT_MU, DOS_QO } +#define OPI_Ms { DOT_M, DOS_W } +#define OPI_Mt { DOT_M, DOS_T } +#define OPI_Mv { DOT_M, DOS_V } +#define OPI_Mw { DOT_M, DOS_W } +#define OPI_MwRd { DOT_MR, DOS_WD } +#define OPI_MwRv { DOT_MR, DOS_WV } +#define OPI_MwRy { DOT_MR, DOS_WY } +#define OPI_MwU { DOT_MU, DOS_WO } +#define OPI_N { DOT_N, DOS_Q } +#define OPI_Ob { DOT_O, DOS_B } +#define OPI_Ov { DOT_O, DOS_V } +#define OPI_Ow { DOT_O, DOS_W } +#define OPI_P { DOT_P, DOS_Q } +#define OPI_Q { DOT_Q, DOS_Q } +#define OPI_R { DOT_R, DOS_RDQ } +#define OPI_R0b { DOT_R0, DOS_B } +#define OPI_R0v { DOT_R0, DOS_V } +#define OPI_R0w { DOT_R0, DOS_W } +#define OPI_R0y { DOT_R0, DOS_Y } +#define OPI_R0z { DOT_R0, DOS_Z } +#define OPI_R1b { DOT_R1, DOS_B } +#define OPI_R1v { DOT_R1, DOS_V } +#define OPI_R1w { DOT_R1, DOS_W } +#define OPI_R1y { DOT_R1, DOS_Y } +#define OPI_R1z { DOT_R1, DOS_Z } +#define OPI_R2b { DOT_R2, DOS_B } +#define OPI_R2v { DOT_R2, DOS_V } +#define OPI_R2w { DOT_R2, DOS_W } +#define OPI_R2y { DOT_R2, DOS_Y } +#define OPI_R2z { DOT_R2, DOS_Z } +#define OPI_R3b { DOT_R3, DOS_B } +#define OPI_R3v { DOT_R3, DOS_V } +#define OPI_R3w { DOT_R3, DOS_W } +#define OPI_R3y { DOT_R3, DOS_Y } +#define OPI_R3z { DOT_R3, DOS_Z } +#define OPI_R4b { DOT_R4, DOS_B } +#define OPI_R4v { DOT_R4, DOS_V } +#define OPI_R4w { DOT_R4, DOS_W } +#define OPI_R4y { DOT_R4, DOS_Y } +#define OPI_R4z { DOT_R4, DOS_Z } +#define OPI_R5b { DOT_R5, DOS_B } +#define OPI_R5v { DOT_R5, DOS_V } +#define OPI_R5w { DOT_R5, DOS_W } +#define OPI_R5y { DOT_R5, DOS_Y } +#define OPI_R5z { DOT_R5, DOS_Z } +#define OPI_R6b { DOT_R6, DOS_B } +#define OPI_R6v { DOT_R6, DOS_V } +#define OPI_R6w { DOT_R6, DOS_W } +#define OPI_R6y { DOT_R6, DOS_Y } +#define OPI_R6z { DOT_R6, DOS_Z } +#define OPI_R7b { DOT_R7, DOS_B } +#define OPI_R7v { DOT_R7, DOS_V } +#define OPI_R7w { DOT_R7, DOS_W } +#define OPI_R7y { DOT_R7, DOS_Y } +#define OPI_R7z { DOT_R7, DOS_Z } +#define OPI_S { DOT_S, DOS_W } +#define OPI_SS { DOT_SS, DOS_NA } +#define OPI_ST0 { DOT_ST0, DOS_NA } +#define OPI_ST1 { DOT_ST1, DOS_NA } +#define OPI_ST2 { DOT_ST2, DOS_NA } +#define OPI_ST3 { DOT_ST3, DOS_NA } +#define OPI_ST4 { DOT_ST4, DOS_NA } +#define OPI_ST5 { DOT_ST5, DOS_NA } +#define OPI_ST6 { DOT_ST6, DOS_NA } +#define OPI_ST7 { DOT_ST7, DOS_NA } +#define OPI_U { DOT_U, DOS_O } +#define OPI_Ux { DOT_U, DOS_X } +#define OPI_V { DOT_V, DOS_DQ } +#define OPI_Vdq { DOT_V, DOS_DQ } +#define OPI_Vqq { DOT_V, DOS_QQ } +#define OPI_Vsd { DOT_V, DOS_Q } +#define OPI_Vx { DOT_V, DOS_X } +#define OPI_W { DOT_W, DOS_DQ } +#define OPI_Wdq { DOT_W, DOS_DQ } +#define OPI_Wqq { DOT_W, DOS_QQ } +#define OPI_Wsd { DOT_W, DOS_Q } +#define OPI_Wx { DOT_W, DOS_X } +#define OPI_eAX { DOT_EAX, DOS_Z } +#define OPI_eCX { DOT_ECX, DOS_Z } +#define OPI_eDX { DOT_EDX, DOS_Z } +#define OPI_rAX { DOT_RAX, DOS_V } +#define OPI_rCX { DOT_RCX, DOS_V } +#define OPI_rDX { DOT_RDX, DOS_V } +#define OPI_sIb { DOT_sI, DOS_B } +#define OPI_sIz { DOT_sI, DOS_Z } + +const VXInstructionDefinition vxInstrDefinitions[] = +{ + /* 000 */ { MNEM_INVALID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 001 */ { MNEM_AAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 002 */ { MNEM_AAD, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 003 */ { MNEM_AAM, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 004 */ { MNEM_AAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 005 */ { MNEM_ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 006 */ { MNEM_ADC, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 007 */ { MNEM_ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 008 */ { MNEM_ADC, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 009 */ { MNEM_ADC, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00A */ { MNEM_ADC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00B */ { MNEM_ADC, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00C */ { MNEM_ADC, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00D */ { MNEM_ADC, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 00E */ { MNEM_ADC, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00F */ { MNEM_ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 010 */ { MNEM_ADD, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 011 */ { MNEM_ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 012 */ { MNEM_ADD, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 013 */ { MNEM_ADD, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 014 */ { MNEM_ADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 015 */ { MNEM_ADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 016 */ { MNEM_ADD, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 017 */ { MNEM_ADD, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 018 */ { MNEM_ADD, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 019 */ { MNEM_ADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01A */ { MNEM_ADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01B */ { MNEM_ADDSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01C */ { MNEM_ADDSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01D */ { MNEM_ADDSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01E */ { MNEM_ADDSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01F */ { MNEM_AESDEC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 020 */ { MNEM_AESDECLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 021 */ { MNEM_AESENC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 022 */ { MNEM_AESENCLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 023 */ { MNEM_AESIMC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 024 */ { MNEM_AESKEYGENASSIST, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 025 */ { MNEM_AND, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 026 */ { MNEM_AND, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 027 */ { MNEM_AND, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 028 */ { MNEM_AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 029 */ { MNEM_AND, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 02A */ { MNEM_AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 02B */ { MNEM_AND, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 02C */ { MNEM_AND, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 02D */ { MNEM_AND, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 02E */ { MNEM_AND, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 02F */ { MNEM_ANDNPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 030 */ { MNEM_ANDNPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 031 */ { MNEM_ANDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 032 */ { MNEM_ANDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 033 */ { MNEM_ARPL, { OPI_Ew, OPI_Gw, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 034 */ { MNEM_BLENDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 035 */ { MNEM_BLENDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 036 */ { MNEM_BLENDVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 037 */ { MNEM_BLENDVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 038 */ { MNEM_BOUND, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 039 */ { MNEM_BSF, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 03A */ { MNEM_BSR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 03B */ { MNEM_BSWAP, { OPI_R5y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03C */ { MNEM_BSWAP, { OPI_R3y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03D */ { MNEM_BSWAP, { OPI_R1y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03E */ { MNEM_BSWAP, { OPI_R4y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03F */ { MNEM_BSWAP, { OPI_R0y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 040 */ { MNEM_BSWAP, { OPI_R2y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 041 */ { MNEM_BSWAP, { OPI_R7y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 042 */ { MNEM_BSWAP, { OPI_R6y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 043 */ { MNEM_BT, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 044 */ { MNEM_BT, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 045 */ { MNEM_BTC, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 046 */ { MNEM_BTC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 047 */ { MNEM_BTR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 048 */ { MNEM_BTR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 049 */ { MNEM_BTS, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 04A */ { MNEM_BTS, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 04B */ { MNEM_CALL, { OPI_Eq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 04C */ { MNEM_CALL, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 04D */ { MNEM_CALL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 04E */ { MNEM_CALL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 04F */ { MNEM_CALL, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 050 */ { MNEM_CBW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 051 */ { MNEM_CDQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 052 */ { MNEM_CDQE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 053 */ { MNEM_CLC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 054 */ { MNEM_CLD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 055 */ { MNEM_CLFLUSH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 056 */ { MNEM_CLGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 057 */ { MNEM_CLI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 058 */ { MNEM_CLTS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 059 */ { MNEM_CMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 05A */ { MNEM_CMOVA, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05B */ { MNEM_CMOVAE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05C */ { MNEM_CMOVB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05D */ { MNEM_CMOVBE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05E */ { MNEM_CMOVE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05F */ { MNEM_CMOVG, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 060 */ { MNEM_CMOVGE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 061 */ { MNEM_CMOVL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 062 */ { MNEM_CMOVLE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 063 */ { MNEM_CMOVNE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 064 */ { MNEM_CMOVNO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 065 */ { MNEM_CMOVNP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 066 */ { MNEM_CMOVNS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 067 */ { MNEM_CMOVO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 068 */ { MNEM_CMOVP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 069 */ { MNEM_CMOVS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 06A */ { MNEM_CMP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06B */ { MNEM_CMP, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06C */ { MNEM_CMP, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06D */ { MNEM_CMP, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06E */ { MNEM_CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06F */ { MNEM_CMP, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 070 */ { MNEM_CMP, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, + /* 071 */ { MNEM_CMP, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 072 */ { MNEM_CMP, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 073 */ { MNEM_CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 }, + /* 074 */ { MNEM_CMPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 075 */ { MNEM_CMPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 076 */ { MNEM_CMPSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 077 */ { MNEM_CMPSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 078 */ { MNEM_CMPSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 079 */ { MNEM_CMPSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 07A */ { MNEM_CMPSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07B */ { MNEM_CMPSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 07C */ { MNEM_CMPXCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07D */ { MNEM_CMPXCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07E */ { MNEM_CMPXCHG16B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07F */ { MNEM_CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 080 */ { MNEM_CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 081 */ { MNEM_COMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 082 */ { MNEM_COMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 083 */ { MNEM_CPUID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 084 */ { MNEM_CQO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 085 */ { MNEM_CRC32, { OPI_Gy, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 086 */ { MNEM_CRC32, { OPI_Gy, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 087 */ { MNEM_CVTDQ2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 088 */ { MNEM_CVTDQ2PS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 089 */ { MNEM_CVTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08A */ { MNEM_CVTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08B */ { MNEM_CVTPD2PS, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08C */ { MNEM_CVTPI2PD, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08D */ { MNEM_CVTPI2PS, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08E */ { MNEM_CVTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08F */ { MNEM_CVTPS2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 090 */ { MNEM_CVTPS2PI, { OPI_P, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 091 */ { MNEM_CVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 092 */ { MNEM_CVTSD2SS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 093 */ { MNEM_CVTSI2SD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 094 */ { MNEM_CVTSI2SS, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 095 */ { MNEM_CVTSS2SD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 096 */ { MNEM_CVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 097 */ { MNEM_CVTTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 098 */ { MNEM_CVTTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 099 */ { MNEM_CVTTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09A */ { MNEM_CVTTPS2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09B */ { MNEM_CVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09C */ { MNEM_CVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09D */ { MNEM_CWD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 09E */ { MNEM_CWDE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 09F */ { MNEM_DAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 0A0 */ { MNEM_DAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 0A1 */ { MNEM_DEC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A2 */ { MNEM_DEC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A3 */ { MNEM_DEC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A4 */ { MNEM_DEC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0A5 */ { MNEM_DEC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0A6 */ { MNEM_DEC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A7 */ { MNEM_DEC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A8 */ { MNEM_DEC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A9 */ { MNEM_DEC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0AA */ { MNEM_DEC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0AB */ { MNEM_DIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 0AC */ { MNEM_DIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 0AD */ { MNEM_DIVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0AE */ { MNEM_DIVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0AF */ { MNEM_DIVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B0 */ { MNEM_DIVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B1 */ { MNEM_DPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B2 */ { MNEM_DPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B3 */ { MNEM_EMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0B4 */ { MNEM_ENTER, { OPI_Iw, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, + /* 0B5 */ { MNEM_EXTRACTPS, { OPI_MdRy, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 0B6 */ { MNEM_F2XM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0B7 */ { MNEM_FABS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0B8 */ { MNEM_FADD, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0B9 */ { MNEM_FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BA */ { MNEM_FADD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0BB */ { MNEM_FADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0BC */ { MNEM_FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BD */ { MNEM_FADD, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BE */ { MNEM_FADD, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BF */ { MNEM_FADD, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0C0 */ { MNEM_FADD, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0C1 */ { MNEM_FADD, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0C2 */ { MNEM_FADD, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0C3 */ { MNEM_FADD, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0C4 */ { MNEM_FADD, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0C5 */ { MNEM_FADD, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0C6 */ { MNEM_FADD, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0C7 */ { MNEM_FADD, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0C8 */ { MNEM_FADD, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0C9 */ { MNEM_FADD, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CA */ { MNEM_FADDP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CB */ { MNEM_FADDP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CC */ { MNEM_FADDP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CD */ { MNEM_FADDP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CE */ { MNEM_FADDP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CF */ { MNEM_FADDP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0D0 */ { MNEM_FADDP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0D1 */ { MNEM_FADDP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0D2 */ { MNEM_FBLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0D3 */ { MNEM_FBSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0D4 */ { MNEM_FCHS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0D5 */ { MNEM_FCLEX, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0D6 */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0D7 */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0D8 */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0D9 */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0DA */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0DB */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0DC */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0DD */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0DE */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0DF */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0E0 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0E1 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0E2 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0E3 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0E4 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0E5 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0E6 */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0E7 */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0E8 */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0E9 */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0EA */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0EB */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0EC */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0ED */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0EE */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0EF */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0F0 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0F1 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0F2 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0F3 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0F4 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0F5 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0F6 */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0F7 */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0F8 */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0F9 */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0FA */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0FB */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0FC */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0FD */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0FE */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0FF */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 100 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 101 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 102 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 103 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 104 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 105 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 106 */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 107 */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 108 */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 109 */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 10A */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 10B */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 10C */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 10D */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 10E */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 10F */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 110 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 111 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 112 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 113 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 114 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 115 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 116 */ { MNEM_FCOM, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 117 */ { MNEM_FCOM, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 118 */ { MNEM_FCOM, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 119 */ { MNEM_FCOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 11A */ { MNEM_FCOM, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 11B */ { MNEM_FCOM, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 11C */ { MNEM_FCOM, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 11D */ { MNEM_FCOM, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 11E */ { MNEM_FCOM, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 11F */ { MNEM_FCOM, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 120 */ { MNEM_FCOM2, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 121 */ { MNEM_FCOM2, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 122 */ { MNEM_FCOM2, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 123 */ { MNEM_FCOM2, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 124 */ { MNEM_FCOM2, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 125 */ { MNEM_FCOM2, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 126 */ { MNEM_FCOM2, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 127 */ { MNEM_FCOM2, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 128 */ { MNEM_FCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 129 */ { MNEM_FCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 12A */ { MNEM_FCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 12B */ { MNEM_FCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 12C */ { MNEM_FCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 12D */ { MNEM_FCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 12E */ { MNEM_FCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 12F */ { MNEM_FCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 130 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 131 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 132 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 133 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 134 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 135 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 136 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 137 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 138 */ { MNEM_FCOMP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 139 */ { MNEM_FCOMP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 13A */ { MNEM_FCOMP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 13B */ { MNEM_FCOMP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 13C */ { MNEM_FCOMP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 13D */ { MNEM_FCOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 13E */ { MNEM_FCOMP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 13F */ { MNEM_FCOMP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 140 */ { MNEM_FCOMP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 141 */ { MNEM_FCOMP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 142 */ { MNEM_FCOMP3, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 143 */ { MNEM_FCOMP3, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 144 */ { MNEM_FCOMP3, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 145 */ { MNEM_FCOMP3, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 146 */ { MNEM_FCOMP3, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 147 */ { MNEM_FCOMP3, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 148 */ { MNEM_FCOMP3, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 149 */ { MNEM_FCOMP3, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14A */ { MNEM_FCOMP5, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14B */ { MNEM_FCOMP5, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14C */ { MNEM_FCOMP5, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14D */ { MNEM_FCOMP5, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14E */ { MNEM_FCOMP5, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14F */ { MNEM_FCOMP5, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 150 */ { MNEM_FCOMP5, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 151 */ { MNEM_FCOMP5, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 152 */ { MNEM_FCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 153 */ { MNEM_FCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 154 */ { MNEM_FDECSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 155 */ { MNEM_FDIV, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 156 */ { MNEM_FDIV, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 157 */ { MNEM_FDIV, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 158 */ { MNEM_FDIV, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 159 */ { MNEM_FDIV, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 15A */ { MNEM_FDIV, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 15B */ { MNEM_FDIV, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15C */ { MNEM_FDIV, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15D */ { MNEM_FDIV, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15E */ { MNEM_FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15F */ { MNEM_FDIV, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 160 */ { MNEM_FDIV, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 161 */ { MNEM_FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 162 */ { MNEM_FDIV, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 163 */ { MNEM_FDIV, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 164 */ { MNEM_FDIV, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 165 */ { MNEM_FDIV, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 166 */ { MNEM_FDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 167 */ { MNEM_FDIVP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 168 */ { MNEM_FDIVP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 169 */ { MNEM_FDIVP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16A */ { MNEM_FDIVP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16B */ { MNEM_FDIVP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16C */ { MNEM_FDIVP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16D */ { MNEM_FDIVP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16E */ { MNEM_FDIVP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16F */ { MNEM_FDIVR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 170 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 171 */ { MNEM_FDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 172 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 173 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 174 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 175 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 176 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 177 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 178 */ { MNEM_FDIVR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 179 */ { MNEM_FDIVR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17A */ { MNEM_FDIVR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 17B */ { MNEM_FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17C */ { MNEM_FDIVR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17D */ { MNEM_FDIVR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17E */ { MNEM_FDIVR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17F */ { MNEM_FDIVR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 180 */ { MNEM_FDIVR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 181 */ { MNEM_FDIVRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 182 */ { MNEM_FDIVRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 183 */ { MNEM_FDIVRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 184 */ { MNEM_FDIVRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 185 */ { MNEM_FDIVRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 186 */ { MNEM_FDIVRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 187 */ { MNEM_FDIVRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 188 */ { MNEM_FDIVRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 189 */ { MNEM_FEMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18A */ { MNEM_FFREE, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18B */ { MNEM_FFREE, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18C */ { MNEM_FFREE, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18D */ { MNEM_FFREE, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18E */ { MNEM_FFREE, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18F */ { MNEM_FFREE, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 190 */ { MNEM_FFREE, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 191 */ { MNEM_FFREE, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 192 */ { MNEM_FFREEP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 193 */ { MNEM_FFREEP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 194 */ { MNEM_FFREEP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 195 */ { MNEM_FFREEP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 196 */ { MNEM_FFREEP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 197 */ { MNEM_FFREEP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 198 */ { MNEM_FFREEP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 199 */ { MNEM_FFREEP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 19A */ { MNEM_FIADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19B */ { MNEM_FIADD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19C */ { MNEM_FICOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19D */ { MNEM_FICOM, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19E */ { MNEM_FICOMP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19F */ { MNEM_FICOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A0 */ { MNEM_FIDIV, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A1 */ { MNEM_FIDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A2 */ { MNEM_FIDIVR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A3 */ { MNEM_FIDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A4 */ { MNEM_FILD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A5 */ { MNEM_FILD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A6 */ { MNEM_FILD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A7 */ { MNEM_FIMUL, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A8 */ { MNEM_FIMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A9 */ { MNEM_FINCSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1AA */ { MNEM_FIST, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AB */ { MNEM_FIST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AC */ { MNEM_FISTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AD */ { MNEM_FISTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AE */ { MNEM_FISTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AF */ { MNEM_FISTTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B0 */ { MNEM_FISTTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B1 */ { MNEM_FISTTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B2 */ { MNEM_FISUB, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B3 */ { MNEM_FISUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B4 */ { MNEM_FISUBR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B5 */ { MNEM_FISUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B6 */ { MNEM_FLD, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1B7 */ { MNEM_FLD, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1B8 */ { MNEM_FLD, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1B9 */ { MNEM_FLD, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1BA */ { MNEM_FLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1BB */ { MNEM_FLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1BC */ { MNEM_FLD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1BD */ { MNEM_FLD, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1BE */ { MNEM_FLD, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1BF */ { MNEM_FLD, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C0 */ { MNEM_FLD, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C1 */ { MNEM_FLD1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C2 */ { MNEM_FLDCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1C3 */ { MNEM_FLDENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1C4 */ { MNEM_FLDL2E, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C5 */ { MNEM_FLDL2T, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C6 */ { MNEM_FLDLG2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C7 */ { MNEM_FLDLN2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C8 */ { MNEM_FLDPI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C9 */ { MNEM_FLDZ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1CA */ { MNEM_FMUL, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CB */ { MNEM_FMUL, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CC */ { MNEM_FMUL, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CD */ { MNEM_FMUL, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 1CE */ { MNEM_FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CF */ { MNEM_FMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1D0 */ { MNEM_FMUL, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D1 */ { MNEM_FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D2 */ { MNEM_FMUL, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1D3 */ { MNEM_FMUL, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D4 */ { MNEM_FMUL, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D5 */ { MNEM_FMUL, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D6 */ { MNEM_FMUL, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 1D7 */ { MNEM_FMUL, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 1D8 */ { MNEM_FMUL, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 1D9 */ { MNEM_FMUL, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 1DA */ { MNEM_FMUL, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 1DB */ { MNEM_FMUL, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 1DC */ { MNEM_FMULP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1DD */ { MNEM_FMULP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1DE */ { MNEM_FMULP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1DF */ { MNEM_FMULP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E0 */ { MNEM_FMULP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E1 */ { MNEM_FMULP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E2 */ { MNEM_FMULP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E3 */ { MNEM_FMULP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E4 */ { MNEM_FNDISI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E5 */ { MNEM_FNENI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E6 */ { MNEM_FNINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E7 */ { MNEM_FNOP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E8 */ { MNEM_FNSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1E9 */ { MNEM_FNSETPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1EA */ { MNEM_FNSTCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1EB */ { MNEM_FNSTENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1EC */ { MNEM_FNSTSW, { OPI_AX, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1ED */ { MNEM_FNSTSW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1EE */ { MNEM_FPATAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1EF */ { MNEM_FPREM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F0 */ { MNEM_FPREM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F1 */ { MNEM_FPTAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F2 */ { MNEM_FRNDINT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F3 */ { MNEM_FRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1F4 */ { MNEM_FRSTPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F5 */ { MNEM_FSCALE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F6 */ { MNEM_FSIN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F7 */ { MNEM_FSINCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F8 */ { MNEM_FSQRT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F9 */ { MNEM_FST, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FA */ { MNEM_FST, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FB */ { MNEM_FST, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FC */ { MNEM_FST, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FD */ { MNEM_FST, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FE */ { MNEM_FST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1FF */ { MNEM_FST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 200 */ { MNEM_FST, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 201 */ { MNEM_FST, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 202 */ { MNEM_FST, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 203 */ { MNEM_FSTP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 204 */ { MNEM_FSTP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 205 */ { MNEM_FSTP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 206 */ { MNEM_FSTP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 207 */ { MNEM_FSTP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 208 */ { MNEM_FSTP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 209 */ { MNEM_FSTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 20A */ { MNEM_FSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 20B */ { MNEM_FSTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 20C */ { MNEM_FSTP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 20D */ { MNEM_FSTP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 20E */ { MNEM_FSTP1, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 20F */ { MNEM_FSTP1, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 210 */ { MNEM_FSTP1, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 211 */ { MNEM_FSTP1, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 212 */ { MNEM_FSTP1, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 213 */ { MNEM_FSTP1, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 214 */ { MNEM_FSTP1, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 215 */ { MNEM_FSTP1, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 216 */ { MNEM_FSTP8, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 217 */ { MNEM_FSTP8, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 218 */ { MNEM_FSTP8, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 219 */ { MNEM_FSTP8, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21A */ { MNEM_FSTP8, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21B */ { MNEM_FSTP8, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21C */ { MNEM_FSTP8, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21D */ { MNEM_FSTP8, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21E */ { MNEM_FSTP9, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21F */ { MNEM_FSTP9, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 220 */ { MNEM_FSTP9, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 221 */ { MNEM_FSTP9, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 222 */ { MNEM_FSTP9, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 223 */ { MNEM_FSTP9, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 224 */ { MNEM_FSTP9, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 225 */ { MNEM_FSTP9, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 226 */ { MNEM_FSUB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 227 */ { MNEM_FSUB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 228 */ { MNEM_FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 229 */ { MNEM_FSUB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 22A */ { MNEM_FSUB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 22B */ { MNEM_FSUB, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 22C */ { MNEM_FSUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 22D */ { MNEM_FSUB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 22E */ { MNEM_FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 22F */ { MNEM_FSUB, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 230 */ { MNEM_FSUB, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 231 */ { MNEM_FSUB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 232 */ { MNEM_FSUB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 233 */ { MNEM_FSUB, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 234 */ { MNEM_FSUB, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 235 */ { MNEM_FSUB, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 236 */ { MNEM_FSUB, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 237 */ { MNEM_FSUB, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 238 */ { MNEM_FSUBP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 239 */ { MNEM_FSUBP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23A */ { MNEM_FSUBP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23B */ { MNEM_FSUBP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23C */ { MNEM_FSUBP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23D */ { MNEM_FSUBP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23E */ { MNEM_FSUBP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23F */ { MNEM_FSUBP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 240 */ { MNEM_FSUBR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 241 */ { MNEM_FSUBR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 242 */ { MNEM_FSUBR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 243 */ { MNEM_FSUBR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 244 */ { MNEM_FSUBR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 245 */ { MNEM_FSUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 246 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 247 */ { MNEM_FSUBR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 248 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 249 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 24A */ { MNEM_FSUBR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 24B */ { MNEM_FSUBR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 24C */ { MNEM_FSUBR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 24D */ { MNEM_FSUBR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 24E */ { MNEM_FSUBR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 24F */ { MNEM_FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 250 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 251 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 252 */ { MNEM_FSUBRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 253 */ { MNEM_FSUBRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 254 */ { MNEM_FSUBRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 255 */ { MNEM_FSUBRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 256 */ { MNEM_FSUBRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 257 */ { MNEM_FSUBRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 258 */ { MNEM_FSUBRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 259 */ { MNEM_FSUBRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 25A */ { MNEM_FTST, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25B */ { MNEM_FUCOM, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25C */ { MNEM_FUCOM, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25D */ { MNEM_FUCOM, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25E */ { MNEM_FUCOM, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25F */ { MNEM_FUCOM, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 260 */ { MNEM_FUCOM, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 261 */ { MNEM_FUCOM, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 262 */ { MNEM_FUCOM, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 263 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 264 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 265 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 266 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 267 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 268 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 269 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 26A */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 26B */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 26C */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 26D */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 26E */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 26F */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 270 */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 271 */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 272 */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 273 */ { MNEM_FUCOMP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 274 */ { MNEM_FUCOMP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 275 */ { MNEM_FUCOMP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 276 */ { MNEM_FUCOMP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 277 */ { MNEM_FUCOMP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 278 */ { MNEM_FUCOMP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 279 */ { MNEM_FUCOMP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27A */ { MNEM_FUCOMP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27B */ { MNEM_FUCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27C */ { MNEM_FXAM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27D */ { MNEM_FXCH, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 27E */ { MNEM_FXCH, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 27F */ { MNEM_FXCH, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 280 */ { MNEM_FXCH, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 281 */ { MNEM_FXCH, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 282 */ { MNEM_FXCH, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 283 */ { MNEM_FXCH, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 284 */ { MNEM_FXCH, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 285 */ { MNEM_FXCH4, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 286 */ { MNEM_FXCH4, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 287 */ { MNEM_FXCH4, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 288 */ { MNEM_FXCH4, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 289 */ { MNEM_FXCH4, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28A */ { MNEM_FXCH4, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28B */ { MNEM_FXCH4, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28C */ { MNEM_FXCH4, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28D */ { MNEM_FXCH7, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28E */ { MNEM_FXCH7, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28F */ { MNEM_FXCH7, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 290 */ { MNEM_FXCH7, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 291 */ { MNEM_FXCH7, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 292 */ { MNEM_FXCH7, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 293 */ { MNEM_FXCH7, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 294 */ { MNEM_FXCH7, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 295 */ { MNEM_FXRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 296 */ { MNEM_FXSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 297 */ { MNEM_FXTRACT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 298 */ { MNEM_FYL2X, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 299 */ { MNEM_FYL2XP1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 29A */ { MNEM_GETSEC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 29B */ { MNEM_HADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 29C */ { MNEM_HADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 29D */ { MNEM_HLT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 29E */ { MNEM_HSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 29F */ { MNEM_HSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A0 */ { MNEM_IDIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2A1 */ { MNEM_IDIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2A2 */ { MNEM_IMUL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A3 */ { MNEM_IMUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A4 */ { MNEM_IMUL, { OPI_Gv, OPI_Ev, OPI_Iz, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A5 */ { MNEM_IMUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A6 */ { MNEM_IMUL, { OPI_Gv, OPI_Ev, OPI_sIb, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A7 */ { MNEM_IN, { OPI_AL, OPI_DX, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 2A8 */ { MNEM_IN, { OPI_eAX, OPI_DX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2A9 */ { MNEM_IN, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 2AA */ { MNEM_IN, { OPI_eAX, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2AB */ { MNEM_INC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AC */ { MNEM_INC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AD */ { MNEM_INC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AE */ { MNEM_INC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AF */ { MNEM_INC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2B0 */ { MNEM_INC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2B1 */ { MNEM_INC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B2 */ { MNEM_INC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B3 */ { MNEM_INC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B4 */ { MNEM_INC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B5 */ { MNEM_INSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 2B6 */ { MNEM_INSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 2B7 */ { MNEM_INSERTPS, { OPI_V, OPI_Md, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2B8 */ { MNEM_INSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 2B9 */ { MNEM_INT, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BA */ { MNEM_INT1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BB */ { MNEM_INT3, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BC */ { MNEM_INTO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 2BD */ { MNEM_INVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BE */ { MNEM_INVEPT, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2BF */ { MNEM_INVEPT, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2C0 */ { MNEM_INVLPG, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2C1 */ { MNEM_INVLPGA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2C2 */ { MNEM_INVVPID, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2C3 */ { MNEM_INVVPID, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2C4 */ { MNEM_IRETD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 2C5 */ { MNEM_IRETQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 2C6 */ { MNEM_IRETW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 2C7 */ { MNEM_JA, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2C8 */ { MNEM_JA, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2C9 */ { MNEM_JB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2CA */ { MNEM_JB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2CB */ { MNEM_JBE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2CC */ { MNEM_JBE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2CD */ { MNEM_JCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, + /* 2CE */ { MNEM_JE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2CF */ { MNEM_JE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D0 */ { MNEM_JECXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, + /* 2D1 */ { MNEM_JG, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D2 */ { MNEM_JG, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D3 */ { MNEM_JGE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D4 */ { MNEM_JGE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D5 */ { MNEM_JL, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D6 */ { MNEM_JL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D7 */ { MNEM_JLE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D8 */ { MNEM_JLE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D9 */ { MNEM_JMP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 2DA */ { MNEM_JMP, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2DB */ { MNEM_JMP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 2DC */ { MNEM_JMP, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 2DD */ { MNEM_JMP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, + /* 2DE */ { MNEM_JNB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2DF */ { MNEM_JNB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E0 */ { MNEM_JNE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E1 */ { MNEM_JNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E2 */ { MNEM_JNO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E3 */ { MNEM_JNO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E4 */ { MNEM_JNP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E5 */ { MNEM_JNP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E6 */ { MNEM_JNS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E7 */ { MNEM_JNS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E8 */ { MNEM_JO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E9 */ { MNEM_JO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2EA */ { MNEM_JP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2EB */ { MNEM_JP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2EC */ { MNEM_JRCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, + /* 2ED */ { MNEM_JS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2EE */ { MNEM_JS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2EF */ { MNEM_LAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2F0 */ { MNEM_LAR, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F1 */ { MNEM_LDDQU, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F2 */ { MNEM_LDMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2F3 */ { MNEM_LDS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2F4 */ { MNEM_LEA, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F5 */ { MNEM_LEAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2F6 */ { MNEM_LES, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2F7 */ { MNEM_LFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2F8 */ { MNEM_LFS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F9 */ { MNEM_LGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FA */ { MNEM_LGS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2FB */ { MNEM_LIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FC */ { MNEM_LLDT, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FD */ { MNEM_LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FE */ { MNEM_LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FF */ { MNEM_LOCK, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 300 */ { MNEM_LODSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 301 */ { MNEM_LODSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 302 */ { MNEM_LODSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 303 */ { MNEM_LODSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 304 */ { MNEM_LOOP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 305 */ { MNEM_LOOPE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 306 */ { MNEM_LOOPNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 307 */ { MNEM_LSL, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 308 */ { MNEM_LSS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 309 */ { MNEM_LTR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 30A */ { MNEM_MASKMOVDQU, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 30B */ { MNEM_MASKMOVQ, { OPI_P, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 30C */ { MNEM_MAXPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 30D */ { MNEM_MAXPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 30E */ { MNEM_MAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 30F */ { MNEM_MAXSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 310 */ { MNEM_MFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 311 */ { MNEM_MINPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 312 */ { MNEM_MINPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 313 */ { MNEM_MINSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 314 */ { MNEM_MINSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 315 */ { MNEM_MONITOR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 316 */ { MNEM_MONTMUL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 317 */ { MNEM_MOV, { OPI_R0b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 318 */ { MNEM_MOV, { OPI_R2b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 319 */ { MNEM_MOV, { OPI_R3b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31A */ { MNEM_MOV, { OPI_R1b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31B */ { MNEM_MOV, { OPI_AL, OPI_Ob, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 31C */ { MNEM_MOV, { OPI_S, OPI_MwRv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31D */ { MNEM_MOV, { OPI_MwRv, OPI_S, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31E */ { MNEM_MOV, { OPI_Ov, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 31F */ { MNEM_MOV, { OPI_Ob, OPI_AL, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 320 */ { MNEM_MOV, { OPI_rAX, OPI_Ov, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 321 */ { MNEM_MOV, { OPI_R4b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 322 */ { MNEM_MOV, { OPI_R7v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 323 */ { MNEM_MOV, { OPI_R6v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 324 */ { MNEM_MOV, { OPI_R5v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 325 */ { MNEM_MOV, { OPI_R, OPI_C, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 326 */ { MNEM_MOV, { OPI_D, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 327 */ { MNEM_MOV, { OPI_C, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 328 */ { MNEM_MOV, { OPI_R, OPI_D, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 329 */ { MNEM_MOV, { OPI_R4v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32A */ { MNEM_MOV, { OPI_R7b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32B */ { MNEM_MOV, { OPI_R6b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32C */ { MNEM_MOV, { OPI_R5b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32D */ { MNEM_MOV, { OPI_R0v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32E */ { MNEM_MOV, { OPI_R3v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32F */ { MNEM_MOV, { OPI_R2v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 330 */ { MNEM_MOV, { OPI_R1v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 331 */ { MNEM_MOV, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 332 */ { MNEM_MOV, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 333 */ { MNEM_MOV, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 334 */ { MNEM_MOV, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 335 */ { MNEM_MOV, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 336 */ { MNEM_MOV, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 337 */ { MNEM_MOVAPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 338 */ { MNEM_MOVAPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 339 */ { MNEM_MOVAPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33A */ { MNEM_MOVAPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33B */ { MNEM_MOVBE, { OPI_Gv, OPI_Mv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33C */ { MNEM_MOVBE, { OPI_Mv, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33D */ { MNEM_MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33E */ { MNEM_MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33F */ { MNEM_MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 340 */ { MNEM_MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 341 */ { MNEM_MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 342 */ { MNEM_MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 343 */ { MNEM_MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 344 */ { MNEM_MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 345 */ { MNEM_MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 346 */ { MNEM_MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 347 */ { MNEM_MOVDQ2Q, { OPI_P, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 348 */ { MNEM_MOVDQA, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 349 */ { MNEM_MOVDQA, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34A */ { MNEM_MOVDQU, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34B */ { MNEM_MOVDQU, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34C */ { MNEM_MOVHLPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34D */ { MNEM_MOVHPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34E */ { MNEM_MOVHPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34F */ { MNEM_MOVHPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 350 */ { MNEM_MOVHPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 351 */ { MNEM_MOVLHPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 352 */ { MNEM_MOVLPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 353 */ { MNEM_MOVLPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 354 */ { MNEM_MOVLPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 355 */ { MNEM_MOVLPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 356 */ { MNEM_MOVMSKPD, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 357 */ { MNEM_MOVMSKPS, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 358 */ { MNEM_MOVNTDQ, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 359 */ { MNEM_MOVNTDQA, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35A */ { MNEM_MOVNTI, { OPI_M, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35B */ { MNEM_MOVNTPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35C */ { MNEM_MOVNTPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35D */ { MNEM_MOVNTQ, { OPI_M, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35E */ { MNEM_MOVQ, { OPI_P, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35F */ { MNEM_MOVQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 360 */ { MNEM_MOVQ, { OPI_Eq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 361 */ { MNEM_MOVQ, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 362 */ { MNEM_MOVQ, { OPI_Q, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 363 */ { MNEM_MOVQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 364 */ { MNEM_MOVQ, { OPI_V, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 365 */ { MNEM_MOVQ, { OPI_Eq, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 366 */ { MNEM_MOVQ2DQ, { OPI_V, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_OPERAND1_WRITE }, + /* 367 */ { MNEM_MOVSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_OPERAND1_WRITE }, + /* 368 */ { MNEM_MOVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 369 */ { MNEM_MOVSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 36A */ { MNEM_MOVSD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36B */ { MNEM_MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36C */ { MNEM_MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36D */ { MNEM_MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36E */ { MNEM_MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36F */ { MNEM_MOVSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 370 */ { MNEM_MOVSS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 371 */ { MNEM_MOVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 372 */ { MNEM_MOVSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 373 */ { MNEM_MOVSX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 374 */ { MNEM_MOVSX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 375 */ { MNEM_MOVSXD, { OPI_Gq, OPI_Ed, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 376 */ { MNEM_MOVUPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 377 */ { MNEM_MOVUPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 378 */ { MNEM_MOVUPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 379 */ { MNEM_MOVUPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 37A */ { MNEM_MOVZX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 37B */ { MNEM_MOVZX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 37C */ { MNEM_MPSADBW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 37D */ { MNEM_MUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 37E */ { MNEM_MUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 37F */ { MNEM_MULPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 380 */ { MNEM_MULPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 381 */ { MNEM_MULSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 382 */ { MNEM_MULSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 383 */ { MNEM_MWAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 384 */ { MNEM_NEG, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 385 */ { MNEM_NEG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 386 */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 387 */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 388 */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 389 */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38A */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38B */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38C */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38D */ { MNEM_NOT, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 38E */ { MNEM_NOT, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 38F */ { MNEM_OR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 390 */ { MNEM_OR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 391 */ { MNEM_OR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 392 */ { MNEM_OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 393 */ { MNEM_OR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 394 */ { MNEM_OR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 395 */ { MNEM_OR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 396 */ { MNEM_OR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 397 */ { MNEM_OR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 398 */ { MNEM_OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 399 */ { MNEM_ORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 39A */ { MNEM_ORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 39B */ { MNEM_OUT, { OPI_DX, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, + /* 39C */ { MNEM_OUT, { OPI_DX, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 39D */ { MNEM_OUT, { OPI_Ib, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, + /* 39E */ { MNEM_OUT, { OPI_Ib, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 39F */ { MNEM_OUTSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 3A0 */ { MNEM_OUTSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 3A1 */ { MNEM_OUTSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 3A2 */ { MNEM_PABSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A3 */ { MNEM_PABSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A4 */ { MNEM_PABSD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A5 */ { MNEM_PABSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A6 */ { MNEM_PABSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A7 */ { MNEM_PABSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A8 */ { MNEM_PACKSSDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3A9 */ { MNEM_PACKSSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AA */ { MNEM_PACKSSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AB */ { MNEM_PACKSSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AC */ { MNEM_PACKUSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AD */ { MNEM_PACKUSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AE */ { MNEM_PACKUSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AF */ { MNEM_PADDB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B0 */ { MNEM_PADDB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B1 */ { MNEM_PADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B2 */ { MNEM_PADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B3 */ { MNEM_PADDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B4 */ { MNEM_PADDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B5 */ { MNEM_PADDSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B6 */ { MNEM_PADDSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B7 */ { MNEM_PADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B8 */ { MNEM_PADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B9 */ { MNEM_PADDUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BA */ { MNEM_PADDUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BB */ { MNEM_PADDUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BC */ { MNEM_PADDUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BD */ { MNEM_PADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BE */ { MNEM_PADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BF */ { MNEM_PALIGNR, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C0 */ { MNEM_PALIGNR, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C1 */ { MNEM_PAND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C2 */ { MNEM_PAND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C3 */ { MNEM_PANDN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C4 */ { MNEM_PANDN, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C5 */ { MNEM_PAVGB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C6 */ { MNEM_PAVGB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C7 */ { MNEM_PAVGUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C8 */ { MNEM_PAVGW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C9 */ { MNEM_PAVGW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CA */ { MNEM_PBLENDVB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CB */ { MNEM_PBLENDW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CC */ { MNEM_PCLMULQDQ, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CD */ { MNEM_PCMPEQB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CE */ { MNEM_PCMPEQB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CF */ { MNEM_PCMPEQD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D0 */ { MNEM_PCMPEQD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D1 */ { MNEM_PCMPEQQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3D2 */ { MNEM_PCMPEQW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D3 */ { MNEM_PCMPEQW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D4 */ { MNEM_PCMPESTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3D5 */ { MNEM_PCMPESTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3D6 */ { MNEM_PCMPGTB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D7 */ { MNEM_PCMPGTB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D8 */ { MNEM_PCMPGTD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D9 */ { MNEM_PCMPGTD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3DA */ { MNEM_PCMPGTQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3DB */ { MNEM_PCMPGTW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3DC */ { MNEM_PCMPGTW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3DD */ { MNEM_PCMPISTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3DE */ { MNEM_PCMPISTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3DF */ { MNEM_PEXTRB, { OPI_MbRv, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 3E0 */ { MNEM_PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E1 */ { MNEM_PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E2 */ { MNEM_PEXTRQ, { OPI_Eq, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 3E3 */ { MNEM_PEXTRW, { OPI_MwRd, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E4 */ { MNEM_PEXTRW, { OPI_Gd, OPI_N, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E5 */ { MNEM_PEXTRW, { OPI_Gd, OPI_U, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E6 */ { MNEM_PF2ID, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E7 */ { MNEM_PF2IW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E8 */ { MNEM_PFACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3E9 */ { MNEM_PFADD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EA */ { MNEM_PFCMPEQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EB */ { MNEM_PFCMPGE, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EC */ { MNEM_PFCMPGT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3ED */ { MNEM_PFMAX, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EE */ { MNEM_PFMIN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EF */ { MNEM_PFMUL, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F0 */ { MNEM_PFNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F1 */ { MNEM_PFPNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F2 */ { MNEM_PFRCP, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F3 */ { MNEM_PFRCPIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F4 */ { MNEM_PFRCPIT2, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F5 */ { MNEM_PFRSQIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F6 */ { MNEM_PFRSQRT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F7 */ { MNEM_PFSUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F8 */ { MNEM_PFSUBR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F9 */ { MNEM_PHADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FA */ { MNEM_PHADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FB */ { MNEM_PHADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FC */ { MNEM_PHADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FD */ { MNEM_PHADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FE */ { MNEM_PHADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FF */ { MNEM_PHMINPOSUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 400 */ { MNEM_PHSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 401 */ { MNEM_PHSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 402 */ { MNEM_PHSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 403 */ { MNEM_PHSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 404 */ { MNEM_PHSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 405 */ { MNEM_PHSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 406 */ { MNEM_PI2FD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 407 */ { MNEM_PI2FW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 408 */ { MNEM_PINSRB, { OPI_V, OPI_MbRd, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 409 */ { MNEM_PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 40A */ { MNEM_PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 40B */ { MNEM_PINSRQ, { OPI_V, OPI_Eq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 40C */ { MNEM_PINSRW, { OPI_V, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 40D */ { MNEM_PINSRW, { OPI_P, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 40E */ { MNEM_PMADDUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 40F */ { MNEM_PMADDUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 410 */ { MNEM_PMADDWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 411 */ { MNEM_PMADDWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 412 */ { MNEM_PMAXSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 413 */ { MNEM_PMAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 414 */ { MNEM_PMAXSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 415 */ { MNEM_PMAXSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 416 */ { MNEM_PMAXUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 417 */ { MNEM_PMAXUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 418 */ { MNEM_PMAXUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 419 */ { MNEM_PMAXUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41A */ { MNEM_PMINSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41B */ { MNEM_PMINSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41C */ { MNEM_PMINSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41D */ { MNEM_PMINSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41E */ { MNEM_PMINUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41F */ { MNEM_PMINUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 420 */ { MNEM_PMINUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 421 */ { MNEM_PMINUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 422 */ { MNEM_PMOVMSKB, { OPI_Gd, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 423 */ { MNEM_PMOVMSKB, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 424 */ { MNEM_PMOVSXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 425 */ { MNEM_PMOVSXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 426 */ { MNEM_PMOVSXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 427 */ { MNEM_PMOVSXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 428 */ { MNEM_PMOVSXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 429 */ { MNEM_PMOVSXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42A */ { MNEM_PMOVZXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42B */ { MNEM_PMOVZXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42C */ { MNEM_PMOVZXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42D */ { MNEM_PMOVZXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42E */ { MNEM_PMOVZXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42F */ { MNEM_PMOVZXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 430 */ { MNEM_PMULDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 431 */ { MNEM_PMULHRSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 432 */ { MNEM_PMULHRSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 433 */ { MNEM_PMULHRW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 434 */ { MNEM_PMULHUW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 435 */ { MNEM_PMULHUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 436 */ { MNEM_PMULHW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 437 */ { MNEM_PMULHW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 438 */ { MNEM_PMULLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 439 */ { MNEM_PMULLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43A */ { MNEM_PMULLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43B */ { MNEM_PMULUDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43C */ { MNEM_PMULUDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43D */ { MNEM_POP, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 43E */ { MNEM_POP, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 43F */ { MNEM_POP, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 440 */ { MNEM_POP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 441 */ { MNEM_POP, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 442 */ { MNEM_POP, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 443 */ { MNEM_POP, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 444 */ { MNEM_POP, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 445 */ { MNEM_POP, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 446 */ { MNEM_POP, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 447 */ { MNEM_POP, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 448 */ { MNEM_POP, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 449 */ { MNEM_POP, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 44A */ { MNEM_POP, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 44B */ { MNEM_POPA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 44C */ { MNEM_POPAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 44D */ { MNEM_POPCNT, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 44E */ { MNEM_POPFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 44F */ { MNEM_POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 450 */ { MNEM_POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 451 */ { MNEM_POPFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 452 */ { MNEM_POR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 453 */ { MNEM_POR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 454 */ { MNEM_PREFETCH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 455 */ { MNEM_PREFETCHNTA, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 456 */ { MNEM_PREFETCHT0, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 457 */ { MNEM_PREFETCHT1, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 458 */ { MNEM_PREFETCHT2, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 459 */ { MNEM_PSADBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45A */ { MNEM_PSADBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45B */ { MNEM_PSHUFB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45C */ { MNEM_PSHUFB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45D */ { MNEM_PSHUFD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 45E */ { MNEM_PSHUFHW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 45F */ { MNEM_PSHUFLW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 460 */ { MNEM_PSHUFW, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 461 */ { MNEM_PSIGNB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 462 */ { MNEM_PSIGNB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 463 */ { MNEM_PSIGND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 464 */ { MNEM_PSIGND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 465 */ { MNEM_PSIGNW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 466 */ { MNEM_PSIGNW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 467 */ { MNEM_PSLLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 468 */ { MNEM_PSLLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 469 */ { MNEM_PSLLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46A */ { MNEM_PSLLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46B */ { MNEM_PSLLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46C */ { MNEM_PSLLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46D */ { MNEM_PSLLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 46E */ { MNEM_PSLLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46F */ { MNEM_PSLLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 470 */ { MNEM_PSLLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 471 */ { MNEM_PSLLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 472 */ { MNEM_PSLLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 473 */ { MNEM_PSLLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 474 */ { MNEM_PSRAD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 475 */ { MNEM_PSRAD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 476 */ { MNEM_PSRAD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 477 */ { MNEM_PSRAD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 478 */ { MNEM_PSRAW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 479 */ { MNEM_PSRAW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 47A */ { MNEM_PSRAW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47B */ { MNEM_PSRAW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47C */ { MNEM_PSRLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47D */ { MNEM_PSRLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47E */ { MNEM_PSRLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 47F */ { MNEM_PSRLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 480 */ { MNEM_PSRLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 481 */ { MNEM_PSRLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 482 */ { MNEM_PSRLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 483 */ { MNEM_PSRLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 484 */ { MNEM_PSRLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 485 */ { MNEM_PSRLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 486 */ { MNEM_PSRLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 487 */ { MNEM_PSRLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 488 */ { MNEM_PSRLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 489 */ { MNEM_PSUBB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48A */ { MNEM_PSUBB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48B */ { MNEM_PSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48C */ { MNEM_PSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48D */ { MNEM_PSUBQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48E */ { MNEM_PSUBQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48F */ { MNEM_PSUBSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 490 */ { MNEM_PSUBSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 491 */ { MNEM_PSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 492 */ { MNEM_PSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 493 */ { MNEM_PSUBUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 494 */ { MNEM_PSUBUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 495 */ { MNEM_PSUBUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 496 */ { MNEM_PSUBUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 497 */ { MNEM_PSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 498 */ { MNEM_PSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 499 */ { MNEM_PSWAPD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 49A */ { MNEM_PTEST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 49B */ { MNEM_PUNPCKHBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49C */ { MNEM_PUNPCKHBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49D */ { MNEM_PUNPCKHDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49E */ { MNEM_PUNPCKHDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49F */ { MNEM_PUNPCKHQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A0 */ { MNEM_PUNPCKHWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A1 */ { MNEM_PUNPCKHWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A2 */ { MNEM_PUNPCKLBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A3 */ { MNEM_PUNPCKLBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A4 */ { MNEM_PUNPCKLDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A5 */ { MNEM_PUNPCKLDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A6 */ { MNEM_PUNPCKLQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A7 */ { MNEM_PUNPCKLWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A8 */ { MNEM_PUNPCKLWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A9 */ { MNEM_PUSH, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AA */ { MNEM_PUSH, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AB */ { MNEM_PUSH, { OPI_sIb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 4AC */ { MNEM_PUSH, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AD */ { MNEM_PUSH, { OPI_CS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AE */ { MNEM_PUSH, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4AF */ { MNEM_PUSH, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B0 */ { MNEM_PUSH, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B1 */ { MNEM_PUSH, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B2 */ { MNEM_PUSH, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B3 */ { MNEM_PUSH, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B4 */ { MNEM_PUSH, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B5 */ { MNEM_PUSH, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4B6 */ { MNEM_PUSH, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4B7 */ { MNEM_PUSH, { OPI_sIz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4B8 */ { MNEM_PUSH, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B9 */ { MNEM_PUSH, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4BA */ { MNEM_PUSHA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 4BB */ { MNEM_PUSHAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 4BC */ { MNEM_PUSHFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 4BD */ { MNEM_PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4BE */ { MNEM_PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4BF */ { MNEM_PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4C0 */ { MNEM_PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 4C1 */ { MNEM_PXOR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C2 */ { MNEM_PXOR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C3 */ { MNEM_RCL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C4 */ { MNEM_RCL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C5 */ { MNEM_RCL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C6 */ { MNEM_RCL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C7 */ { MNEM_RCL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C8 */ { MNEM_RCL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C9 */ { MNEM_RCPPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4CA */ { MNEM_RCPSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4CB */ { MNEM_RCR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CC */ { MNEM_RCR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CD */ { MNEM_RCR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CE */ { MNEM_RCR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CF */ { MNEM_RCR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4D0 */ { MNEM_RCR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4D1 */ { MNEM_RDMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D2 */ { MNEM_RDPMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D3 */ { MNEM_RDRAND, { OPI_R, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4D4 */ { MNEM_RDTSC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D5 */ { MNEM_RDTSCP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D6 */ { MNEM_REP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D7 */ { MNEM_REPNE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D8 */ { MNEM_RET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D9 */ { MNEM_RET, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4DA */ { MNEM_RETF, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4DB */ { MNEM_RETF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4DC */ { MNEM_ROL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4DD */ { MNEM_ROL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4DE */ { MNEM_ROL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4DF */ { MNEM_ROL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E0 */ { MNEM_ROL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E1 */ { MNEM_ROL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E2 */ { MNEM_ROR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E3 */ { MNEM_ROR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E4 */ { MNEM_ROR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E5 */ { MNEM_ROR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E6 */ { MNEM_ROR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E7 */ { MNEM_ROR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E8 */ { MNEM_ROUNDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4E9 */ { MNEM_ROUNDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EA */ { MNEM_ROUNDSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EB */ { MNEM_ROUNDSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EC */ { MNEM_RSM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4ED */ { MNEM_RSQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EE */ { MNEM_RSQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EF */ { MNEM_SAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4F0 */ { MNEM_SALC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 4F1 */ { MNEM_SAR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F2 */ { MNEM_SAR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F3 */ { MNEM_SAR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F4 */ { MNEM_SAR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F5 */ { MNEM_SAR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F6 */ { MNEM_SAR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F7 */ { MNEM_SBB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4F8 */ { MNEM_SBB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4F9 */ { MNEM_SBB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 4FA */ { MNEM_SBB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 4FB */ { MNEM_SBB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4FC */ { MNEM_SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 4FD */ { MNEM_SBB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4FE */ { MNEM_SBB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4FF */ { MNEM_SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 500 */ { MNEM_SBB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 501 */ { MNEM_SCASB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 502 */ { MNEM_SCASD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 503 */ { MNEM_SCASQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 504 */ { MNEM_SCASW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 505 */ { MNEM_SETA, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 506 */ { MNEM_SETAE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 507 */ { MNEM_SETB, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 508 */ { MNEM_SETBE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 509 */ { MNEM_SETE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50A */ { MNEM_SETG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50B */ { MNEM_SETGE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50C */ { MNEM_SETL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50D */ { MNEM_SETLE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50E */ { MNEM_SETNE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50F */ { MNEM_SETNO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 510 */ { MNEM_SETNP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 511 */ { MNEM_SETNS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 512 */ { MNEM_SETO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 513 */ { MNEM_SETP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 514 */ { MNEM_SETS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 515 */ { MNEM_SFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 516 */ { MNEM_SGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 517 */ { MNEM_SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 518 */ { MNEM_SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 519 */ { MNEM_SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51A */ { MNEM_SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51B */ { MNEM_SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51C */ { MNEM_SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51D */ { MNEM_SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51E */ { MNEM_SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51F */ { MNEM_SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 520 */ { MNEM_SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 521 */ { MNEM_SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 522 */ { MNEM_SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 523 */ { MNEM_SHLD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 524 */ { MNEM_SHLD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 525 */ { MNEM_SHR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 526 */ { MNEM_SHR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 527 */ { MNEM_SHR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 528 */ { MNEM_SHR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 529 */ { MNEM_SHR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52A */ { MNEM_SHR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52B */ { MNEM_SHRD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52C */ { MNEM_SHRD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52D */ { MNEM_SHUFPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52E */ { MNEM_SHUFPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52F */ { MNEM_SIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 530 */ { MNEM_SKINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 531 */ { MNEM_SLDT, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 532 */ { MNEM_SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 533 */ { MNEM_SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 534 */ { MNEM_SQRTPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 535 */ { MNEM_SQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 536 */ { MNEM_SQRTSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 537 */ { MNEM_SQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 538 */ { MNEM_STC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 539 */ { MNEM_STD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 53A */ { MNEM_STGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 53B */ { MNEM_STI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 53C */ { MNEM_STMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 53D */ { MNEM_STOSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 53E */ { MNEM_STOSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 53F */ { MNEM_STOSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 540 */ { MNEM_STOSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 541 */ { MNEM_STR, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 542 */ { MNEM_SUB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 543 */ { MNEM_SUB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 544 */ { MNEM_SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 545 */ { MNEM_SUB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 546 */ { MNEM_SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 547 */ { MNEM_SUB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 548 */ { MNEM_SUB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 549 */ { MNEM_SUB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54A */ { MNEM_SUB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 54B */ { MNEM_SUB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54C */ { MNEM_SUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54D */ { MNEM_SUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54E */ { MNEM_SUBSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54F */ { MNEM_SUBSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 550 */ { MNEM_SWAPGS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 551 */ { MNEM_SYSCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 552 */ { MNEM_SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 553 */ { MNEM_SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 554 */ { MNEM_SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 555 */ { MNEM_SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 556 */ { MNEM_SYSRET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 557 */ { MNEM_TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 558 */ { MNEM_TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 559 */ { MNEM_TEST, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55A */ { MNEM_TEST, { OPI_Ev, OPI_Iz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55B */ { MNEM_TEST, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 55C */ { MNEM_TEST, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55D */ { MNEM_TEST, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55E */ { MNEM_TEST, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, + /* 55F */ { MNEM_UCOMISD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 560 */ { MNEM_UCOMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 561 */ { MNEM_UD2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 562 */ { MNEM_UNPCKHPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 563 */ { MNEM_UNPCKHPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 564 */ { MNEM_UNPCKLPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 565 */ { MNEM_UNPCKLPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 566 */ { MNEM_VADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 567 */ { MNEM_VADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 568 */ { MNEM_VADDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 569 */ { MNEM_VADDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56A */ { MNEM_VADDSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56B */ { MNEM_VADDSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56C */ { MNEM_VAESDEC, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56D */ { MNEM_VAESDECLAST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56E */ { MNEM_VAESENC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56F */ { MNEM_VAESENCLAST, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 570 */ { MNEM_VAESIMC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 571 */ { MNEM_VAESKEYGENASSIST, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 572 */ { MNEM_VANDNPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 573 */ { MNEM_VANDNPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 574 */ { MNEM_VANDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 575 */ { MNEM_VANDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 576 */ { MNEM_VBLENDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 577 */ { MNEM_VBLENDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 578 */ { MNEM_VBLENDVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 579 */ { MNEM_VBLENDVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 57A */ { MNEM_VBROADCASTSD, { OPI_Vqq, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 57B */ { MNEM_VBROADCASTSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 57C */ { MNEM_VCMPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 57D */ { MNEM_VCMPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 57E */ { MNEM_VCMPSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 57F */ { MNEM_VCMPSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 580 */ { MNEM_VCOMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 581 */ { MNEM_VCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 582 */ { MNEM_VCVTDQ2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 583 */ { MNEM_VCVTDQ2PS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 584 */ { MNEM_VCVTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 585 */ { MNEM_VCVTPD2PS, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 586 */ { MNEM_VCVTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 587 */ { MNEM_VCVTPS2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 588 */ { MNEM_VCVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 589 */ { MNEM_VCVTSD2SS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58A */ { MNEM_VCVTSI2SD, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58B */ { MNEM_VCVTSI2SS, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58C */ { MNEM_VCVTSS2SD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58D */ { MNEM_VCVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58E */ { MNEM_VCVTTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 58F */ { MNEM_VCVTTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 590 */ { MNEM_VCVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 591 */ { MNEM_VCVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 592 */ { MNEM_VDIVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 593 */ { MNEM_VDIVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 594 */ { MNEM_VDIVSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 595 */ { MNEM_VDIVSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 596 */ { MNEM_VDPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 597 */ { MNEM_VDPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 598 */ { MNEM_VERR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 599 */ { MNEM_VERW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 59A */ { MNEM_VEXTRACTF128, { OPI_Wdq, OPI_Vqq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 59B */ { MNEM_VEXTRACTPS, { OPI_MdRy, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 59C */ { MNEM_VHADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 59D */ { MNEM_VHADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 59E */ { MNEM_VHSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 59F */ { MNEM_VHSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5A0 */ { MNEM_VINSERTF128, { OPI_Vqq, OPI_Hqq, OPI_Wdq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A1 */ { MNEM_VINSERTPS, { OPI_Vx, OPI_Hx, OPI_Md, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5A2 */ { MNEM_VLDDQU, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A3 */ { MNEM_VMASKMOVDQU, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5A4 */ { MNEM_VMASKMOVPD, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A5 */ { MNEM_VMASKMOVPD, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A6 */ { MNEM_VMASKMOVPS, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A7 */ { MNEM_VMASKMOVPS, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A8 */ { MNEM_VMAXPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5A9 */ { MNEM_VMAXPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5AA */ { MNEM_VMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5AB */ { MNEM_VMAXSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5AC */ { MNEM_VMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5AD */ { MNEM_VMCLEAR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5AE */ { MNEM_VMINPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5AF */ { MNEM_VMINPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5B0 */ { MNEM_VMINSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5B1 */ { MNEM_VMINSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5B2 */ { MNEM_VMLAUNCH, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5B3 */ { MNEM_VMLOAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5B4 */ { MNEM_VMMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5B5 */ { MNEM_VMOVAPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B6 */ { MNEM_VMOVAPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B7 */ { MNEM_VMOVAPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B8 */ { MNEM_VMOVAPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B9 */ { MNEM_VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BA */ { MNEM_VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BB */ { MNEM_VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BC */ { MNEM_VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BD */ { MNEM_VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BE */ { MNEM_VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BF */ { MNEM_VMOVDQA, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C0 */ { MNEM_VMOVDQA, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C1 */ { MNEM_VMOVDQU, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C2 */ { MNEM_VMOVDQU, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C3 */ { MNEM_VMOVHLPS, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C4 */ { MNEM_VMOVHPD, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C5 */ { MNEM_VMOVHPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C6 */ { MNEM_VMOVHPS, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C7 */ { MNEM_VMOVHPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C8 */ { MNEM_VMOVLHPS, { OPI_Vx, OPI_Hx, OPI_Ux, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C9 */ { MNEM_VMOVLPD, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CA */ { MNEM_VMOVLPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CB */ { MNEM_VMOVLPS, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CC */ { MNEM_VMOVLPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CD */ { MNEM_VMOVMSKPD, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5CE */ { MNEM_VMOVMSKPS, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CF */ { MNEM_VMOVNTDQ, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D0 */ { MNEM_VMOVNTDQA, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D1 */ { MNEM_VMOVNTPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D2 */ { MNEM_VMOVNTPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D3 */ { MNEM_VMOVQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D4 */ { MNEM_VMOVQ, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D5 */ { MNEM_VMOVQ, { OPI_Vx, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D6 */ { MNEM_VMOVQ, { OPI_Eq, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D7 */ { MNEM_VMOVSD, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D8 */ { MNEM_VMOVSD, { OPI_Mq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D9 */ { MNEM_VMOVSD, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5DA */ { MNEM_VMOVSD, { OPI_V, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5DB */ { MNEM_VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DC */ { MNEM_VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DD */ { MNEM_VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DE */ { MNEM_VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DF */ { MNEM_VMOVSS, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E0 */ { MNEM_VMOVSS, { OPI_Md, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E1 */ { MNEM_VMOVSS, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E2 */ { MNEM_VMOVSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E3 */ { MNEM_VMOVUPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E4 */ { MNEM_VMOVUPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E5 */ { MNEM_VMOVUPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E6 */ { MNEM_VMOVUPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E7 */ { MNEM_VMPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5E8 */ { MNEM_VMPTRLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5E9 */ { MNEM_VMPTRST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5EA */ { MNEM_VMREAD, { OPI_Ey, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 5EB */ { MNEM_VMRESUME, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5EC */ { MNEM_VMRUN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5ED */ { MNEM_VMSAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5EE */ { MNEM_VMULPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5EF */ { MNEM_VMULPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5F0 */ { MNEM_VMULSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5F1 */ { MNEM_VMULSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5F2 */ { MNEM_VMWRITE, { OPI_Gy, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 5F3 */ { MNEM_VMXOFF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5F4 */ { MNEM_VMXON, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5F5 */ { MNEM_VORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5F6 */ { MNEM_VORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 5F7 */ { MNEM_VPABSB, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5F8 */ { MNEM_VPABSD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5F9 */ { MNEM_VPABSW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5FA */ { MNEM_VPACKSSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FB */ { MNEM_VPACKSSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FC */ { MNEM_VPACKUSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FD */ { MNEM_VPACKUSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FE */ { MNEM_VPADDB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FF */ { MNEM_VPADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 600 */ { MNEM_VPADDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 601 */ { MNEM_VPADDSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 602 */ { MNEM_VPADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 603 */ { MNEM_VPADDUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 604 */ { MNEM_VPADDUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 605 */ { MNEM_VPADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 606 */ { MNEM_VPALIGNR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 607 */ { MNEM_VPAND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 608 */ { MNEM_VPANDN, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 609 */ { MNEM_VPAVGB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60A */ { MNEM_VPAVGW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60B */ { MNEM_VPBLENDVB, { OPI_V, OPI_H, OPI_W, OPI_L }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 60C */ { MNEM_VPBLENDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60D */ { MNEM_VPCLMULQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60E */ { MNEM_VPCMPEQB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60F */ { MNEM_VPCMPEQD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 610 */ { MNEM_VPCMPEQQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 611 */ { MNEM_VPCMPEQW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 612 */ { MNEM_VPCMPESTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 613 */ { MNEM_VPCMPESTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 614 */ { MNEM_VPCMPGTB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 615 */ { MNEM_VPCMPGTD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 616 */ { MNEM_VPCMPGTQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 617 */ { MNEM_VPCMPGTW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 618 */ { MNEM_VPCMPISTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 619 */ { MNEM_VPCMPISTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 61A */ { MNEM_VPERM2F128, { OPI_Vqq, OPI_Hqq, OPI_Wqq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61B */ { MNEM_VPERMILPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61C */ { MNEM_VPERMILPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61D */ { MNEM_VPERMILPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61E */ { MNEM_VPERMILPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61F */ { MNEM_VPEXTRB, { OPI_MbRv, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 620 */ { MNEM_VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 621 */ { MNEM_VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 622 */ { MNEM_VPEXTRQ, { OPI_Eq, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 623 */ { MNEM_VPEXTRW, { OPI_Gd, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 624 */ { MNEM_VPEXTRW, { OPI_MwRd, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 625 */ { MNEM_VPHADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 626 */ { MNEM_VPHADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 627 */ { MNEM_VPHADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 628 */ { MNEM_VPHMINPOSUW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 629 */ { MNEM_VPHSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 62A */ { MNEM_VPHSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 62B */ { MNEM_VPHSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 62C */ { MNEM_VPINSRB, { OPI_V, OPI_H, OPI_MbRd, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 62D */ { MNEM_VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 62E */ { MNEM_VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 62F */ { MNEM_VPINSRQ, { OPI_V, OPI_H, OPI_Eq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 630 */ { MNEM_VPINSRW, { OPI_Vx, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 631 */ { MNEM_VPMADDUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 632 */ { MNEM_VPMADDWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 633 */ { MNEM_VPMAXSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 634 */ { MNEM_VPMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 635 */ { MNEM_VPMAXSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 636 */ { MNEM_VPMAXUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 637 */ { MNEM_VPMAXUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 638 */ { MNEM_VPMAXUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 639 */ { MNEM_VPMINSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63A */ { MNEM_VPMINSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63B */ { MNEM_VPMINSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63C */ { MNEM_VPMINUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63D */ { MNEM_VPMINUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63E */ { MNEM_VPMINUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63F */ { MNEM_VPMOVMSKB, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 640 */ { MNEM_VPMOVSXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 641 */ { MNEM_VPMOVSXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 642 */ { MNEM_VPMOVSXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 643 */ { MNEM_VPMOVSXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 644 */ { MNEM_VPMOVSXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 645 */ { MNEM_VPMOVZXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 646 */ { MNEM_VPMOVZXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 647 */ { MNEM_VPMOVZXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 648 */ { MNEM_VPMOVZXDQ, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 649 */ { MNEM_VPMOVZXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 64A */ { MNEM_VPMOVZXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 64B */ { MNEM_VPMULDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64C */ { MNEM_VPMULHRSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64D */ { MNEM_VPMULHUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64E */ { MNEM_VPMULHW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64F */ { MNEM_VPMULLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 650 */ { MNEM_VPMULLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 651 */ { MNEM_VPOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 652 */ { MNEM_VPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 653 */ { MNEM_VPSHUFB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 654 */ { MNEM_VPSHUFD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 655 */ { MNEM_VPSHUFHW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 656 */ { MNEM_VPSHUFLW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 657 */ { MNEM_VPSIGNB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 658 */ { MNEM_VPSIGND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 659 */ { MNEM_VPSIGNW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 65A */ { MNEM_VPSLLD, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65B */ { MNEM_VPSLLD, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65C */ { MNEM_VPSLLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 65D */ { MNEM_VPSLLQ, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65E */ { MNEM_VPSLLQ, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65F */ { MNEM_VPSLLW, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 660 */ { MNEM_VPSLLW, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 661 */ { MNEM_VPSRAD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 662 */ { MNEM_VPSRAD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 663 */ { MNEM_VPSRAW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 664 */ { MNEM_VPSRAW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 665 */ { MNEM_VPSRLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 666 */ { MNEM_VPSRLD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 667 */ { MNEM_VPSRLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 668 */ { MNEM_VPSRLQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 669 */ { MNEM_VPSRLQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66A */ { MNEM_VPSRLW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66B */ { MNEM_VPSRLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66C */ { MNEM_VPSUBB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66D */ { MNEM_VPSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66E */ { MNEM_VPSUBQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66F */ { MNEM_VPSUBSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 670 */ { MNEM_VPSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 671 */ { MNEM_VPSUBUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 672 */ { MNEM_VPSUBUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 673 */ { MNEM_VPSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 674 */ { MNEM_VPTEST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 675 */ { MNEM_VPUNPCKHBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 676 */ { MNEM_VPUNPCKHDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 677 */ { MNEM_VPUNPCKHQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 678 */ { MNEM_VPUNPCKHWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 679 */ { MNEM_VPUNPCKLBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67A */ { MNEM_VPUNPCKLDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67B */ { MNEM_VPUNPCKLQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67C */ { MNEM_VPUNPCKLWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67D */ { MNEM_VPXOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67E */ { MNEM_VRCPPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 67F */ { MNEM_VRCPSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 680 */ { MNEM_VROUNDPD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 681 */ { MNEM_VROUNDPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 682 */ { MNEM_VROUNDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 683 */ { MNEM_VROUNDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 684 */ { MNEM_VRSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 685 */ { MNEM_VRSQRTSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 686 */ { MNEM_VSHUFPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 687 */ { MNEM_VSHUFPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 688 */ { MNEM_VSQRTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 689 */ { MNEM_VSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 68A */ { MNEM_VSQRTSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 68B */ { MNEM_VSQRTSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 68C */ { MNEM_VSTMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 68D */ { MNEM_VSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 68E */ { MNEM_VSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 68F */ { MNEM_VSUBSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 690 */ { MNEM_VSUBSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 691 */ { MNEM_VTESTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 692 */ { MNEM_VTESTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 693 */ { MNEM_VUCOMISD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 694 */ { MNEM_VUCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 695 */ { MNEM_VUNPCKHPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 696 */ { MNEM_VUNPCKHPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 697 */ { MNEM_VUNPCKLPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 698 */ { MNEM_VUNPCKLPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 699 */ { MNEM_VXORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 69A */ { MNEM_VXORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 69B */ { MNEM_VZEROALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69C */ { MNEM_VZEROUPPER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69D */ { MNEM_WAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69E */ { MNEM_WBINVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69F */ { MNEM_WRMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6A0 */ { MNEM_XADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, + /* 6A1 */ { MNEM_XADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, + /* 6A2 */ { MNEM_XCHG, { OPI_R4v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A3 */ { MNEM_XCHG, { OPI_R3v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A4 */ { MNEM_XCHG, { OPI_R5v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A5 */ { MNEM_XCHG, { OPI_R7v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A6 */ { MNEM_XCHG, { OPI_R6v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A7 */ { MNEM_XCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A8 */ { MNEM_XCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A9 */ { MNEM_XCHG, { OPI_R0v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6AA */ { MNEM_XCHG, { OPI_R2v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6AB */ { MNEM_XCHG, { OPI_R1v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6AC */ { MNEM_XCRYPTCBC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6AD */ { MNEM_XCRYPTCFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6AE */ { MNEM_XCRYPTCTR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6AF */ { MNEM_XCRYPTECB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6B0 */ { MNEM_XCRYPTOFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6B1 */ { MNEM_XGETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6B2 */ { MNEM_XLATB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 6B3 */ { MNEM_XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 6B4 */ { MNEM_XOR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B5 */ { MNEM_XOR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B6 */ { MNEM_XOR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B7 */ { MNEM_XOR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B8 */ { MNEM_XOR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B9 */ { MNEM_XOR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BA */ { MNEM_XOR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 6BB */ { MNEM_XOR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 6BC */ { MNEM_XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BD */ { MNEM_XORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BE */ { MNEM_XORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BF */ { MNEM_XRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 6C0 */ { MNEM_XSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 6C1 */ { MNEM_XSETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6C2 */ { MNEM_XSHA1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6C3 */ { MNEM_XSHA256, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6C4 */ { MNEM_XSTORE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, +}; + +#undef OPI_NONE +#undef OPI_AL +#undef OPI_AX +#undef OPI_Av +#undef OPI_C +#undef OPI_CL +#undef OPI_CS +#undef OPI_CX +#undef OPI_D +#undef OPI_DL +#undef OPI_DS +#undef OPI_DX +#undef OPI_E +#undef OPI_ES +#undef OPI_Eb +#undef OPI_Ed +#undef OPI_Eq +#undef OPI_Ev +#undef OPI_Ew +#undef OPI_Ey +#undef OPI_Ez +#undef OPI_FS +#undef OPI_Fv +#undef OPI_G +#undef OPI_GS +#undef OPI_Gb +#undef OPI_Gd +#undef OPI_Gq +#undef OPI_Gv +#undef OPI_Gw +#undef OPI_Gy +#undef OPI_Gz +#undef OPI_H +#undef OPI_Hqq +#undef OPI_Hx +#undef OPI_I1 +#undef OPI_Ib +#undef OPI_Iv +#undef OPI_Iw +#undef OPI_Iz +#undef OPI_Jb +#undef OPI_Jv +#undef OPI_Jz +#undef OPI_L +#undef OPI_Lx +#undef OPI_M +#undef OPI_Mb +#undef OPI_MbRd +#undef OPI_MbRv +#undef OPI_Md +#undef OPI_MdRy +#undef OPI_MdU +#undef OPI_Mdq +#undef OPI_Mo +#undef OPI_Mq +#undef OPI_MqU +#undef OPI_Ms +#undef OPI_Mt +#undef OPI_Mv +#undef OPI_Mw +#undef OPI_MwRd +#undef OPI_MwRv +#undef OPI_MwRy +#undef OPI_MwU +#undef OPI_N +#undef OPI_Ob +#undef OPI_Ov +#undef OPI_Ow +#undef OPI_P +#undef OPI_Q +#undef OPI_R +#undef OPI_R0b +#undef OPI_R0v +#undef OPI_R0w +#undef OPI_R0y +#undef OPI_R0z +#undef OPI_R1b +#undef OPI_R1v +#undef OPI_R1w +#undef OPI_R1y +#undef OPI_R1z +#undef OPI_R2b +#undef OPI_R2v +#undef OPI_R2w +#undef OPI_R2y +#undef OPI_R2z +#undef OPI_R3b +#undef OPI_R3v +#undef OPI_R3w +#undef OPI_R3y +#undef OPI_R3z +#undef OPI_R4b +#undef OPI_R4v +#undef OPI_R4w +#undef OPI_R4y +#undef OPI_R4z +#undef OPI_R5b +#undef OPI_R5v +#undef OPI_R5w +#undef OPI_R5y +#undef OPI_R5z +#undef OPI_R6b +#undef OPI_R6v +#undef OPI_R6w +#undef OPI_R6y +#undef OPI_R6z +#undef OPI_R7b +#undef OPI_R7v +#undef OPI_R7w +#undef OPI_R7y +#undef OPI_R7z +#undef OPI_S +#undef OPI_SS +#undef OPI_ST0 +#undef OPI_ST1 +#undef OPI_ST2 +#undef OPI_ST3 +#undef OPI_ST4 +#undef OPI_ST5 +#undef OPI_ST6 +#undef OPI_ST7 +#undef OPI_U +#undef OPI_Ux +#undef OPI_V +#undef OPI_Vdq +#undef OPI_Vqq +#undef OPI_Vsd +#undef OPI_Vx +#undef OPI_W +#undef OPI_Wdq +#undef OPI_Wqq +#undef OPI_Wsd +#undef OPI_Wx +#undef OPI_eAX +#undef OPI_eCX +#undef OPI_eDX +#undef OPI_rAX +#undef OPI_rCX +#undef OPI_rDX +#undef OPI_sIb +#undef OPI_sIz + +const char* vxInstrMnemonicStrings[] = +{ + /* 000 */ "invalid", + /* 001 */ "aaa", + /* 002 */ "aad", + /* 003 */ "aam", + /* 004 */ "aas", + /* 005 */ "adc", + /* 006 */ "add", + /* 007 */ "addpd", + /* 008 */ "addps", + /* 009 */ "addsd", + /* 00A */ "addss", + /* 00B */ "addsubpd", + /* 00C */ "addsubps", + /* 00D */ "aesdec", + /* 00E */ "aesdeclast", + /* 00F */ "aesenc", + /* 010 */ "aesenclast", + /* 011 */ "aesimc", + /* 012 */ "aeskeygenassist", + /* 013 */ "and", + /* 014 */ "andnpd", + /* 015 */ "andnps", + /* 016 */ "andpd", + /* 017 */ "andps", + /* 018 */ "arpl", + /* 019 */ "blendpd", + /* 01A */ "blendps", + /* 01B */ "blendvpd", + /* 01C */ "blendvps", + /* 01D */ "bound", + /* 01E */ "bsf", + /* 01F */ "bsr", + /* 020 */ "bswap", + /* 021 */ "bt", + /* 022 */ "btc", + /* 023 */ "btr", + /* 024 */ "bts", + /* 025 */ "call", + /* 026 */ "cbw", + /* 027 */ "cdq", + /* 028 */ "cdqe", + /* 029 */ "clc", + /* 02A */ "cld", + /* 02B */ "clflush", + /* 02C */ "clgi", + /* 02D */ "cli", + /* 02E */ "clts", + /* 02F */ "cmc", + /* 030 */ "cmova", + /* 031 */ "cmovae", + /* 032 */ "cmovb", + /* 033 */ "cmovbe", + /* 034 */ "cmove", + /* 035 */ "cmovg", + /* 036 */ "cmovge", + /* 037 */ "cmovl", + /* 038 */ "cmovle", + /* 039 */ "cmovne", + /* 03A */ "cmovno", + /* 03B */ "cmovnp", + /* 03C */ "cmovns", + /* 03D */ "cmovo", + /* 03E */ "cmovp", + /* 03F */ "cmovs", + /* 040 */ "cmp", + /* 041 */ "cmppd", + /* 042 */ "cmpps", + /* 043 */ "cmpsb", + /* 044 */ "cmpsd", + /* 045 */ "cmpsq", + /* 046 */ "cmpss", + /* 047 */ "cmpsw", + /* 048 */ "cmpxchg", + /* 049 */ "cmpxchg16b", + /* 04A */ "cmpxchg8b", + /* 04B */ "comisd", + /* 04C */ "comiss", + /* 04D */ "cpuid", + /* 04E */ "cqo", + /* 04F */ "crc32", + /* 050 */ "cvtdq2pd", + /* 051 */ "cvtdq2ps", + /* 052 */ "cvtpd2dq", + /* 053 */ "cvtpd2pi", + /* 054 */ "cvtpd2ps", + /* 055 */ "cvtpi2pd", + /* 056 */ "cvtpi2ps", + /* 057 */ "cvtps2dq", + /* 058 */ "cvtps2pd", + /* 059 */ "cvtps2pi", + /* 05A */ "cvtsd2si", + /* 05B */ "cvtsd2ss", + /* 05C */ "cvtsi2sd", + /* 05D */ "cvtsi2ss", + /* 05E */ "cvtss2sd", + /* 05F */ "cvtss2si", + /* 060 */ "cvttpd2dq", + /* 061 */ "cvttpd2pi", + /* 062 */ "cvttps2dq", + /* 063 */ "cvttps2pi", + /* 064 */ "cvttsd2si", + /* 065 */ "cvttss2si", + /* 066 */ "cwd", + /* 067 */ "cwde", + /* 068 */ "daa", + /* 069 */ "das", + /* 06A */ "dec", + /* 06B */ "div", + /* 06C */ "divpd", + /* 06D */ "divps", + /* 06E */ "divsd", + /* 06F */ "divss", + /* 070 */ "dppd", + /* 071 */ "dpps", + /* 072 */ "emms", + /* 073 */ "enter", + /* 074 */ "extractps", + /* 075 */ "f2xm1", + /* 076 */ "fabs", + /* 077 */ "fadd", + /* 078 */ "faddp", + /* 079 */ "fbld", + /* 07A */ "fbstp", + /* 07B */ "fchs", + /* 07C */ "fclex", + /* 07D */ "fcmovb", + /* 07E */ "fcmovbe", + /* 07F */ "fcmove", + /* 080 */ "fcmovnb", + /* 081 */ "fcmovnbe", + /* 082 */ "fcmovne", + /* 083 */ "fcmovnu", + /* 084 */ "fcmovu", + /* 085 */ "fcom", + /* 086 */ "fcom2", + /* 087 */ "fcomi", + /* 088 */ "fcomip", + /* 089 */ "fcomp", + /* 08A */ "fcomp3", + /* 08B */ "fcomp5", + /* 08C */ "fcompp", + /* 08D */ "fcos", + /* 08E */ "fdecstp", + /* 08F */ "fdiv", + /* 090 */ "fdivp", + /* 091 */ "fdivr", + /* 092 */ "fdivrp", + /* 093 */ "femms", + /* 094 */ "ffree", + /* 095 */ "ffreep", + /* 096 */ "fiadd", + /* 097 */ "ficom", + /* 098 */ "ficomp", + /* 099 */ "fidiv", + /* 09A */ "fidivr", + /* 09B */ "fild", + /* 09C */ "fimul", + /* 09D */ "fincstp", + /* 09E */ "fist", + /* 09F */ "fistp", + /* 0A0 */ "fisttp", + /* 0A1 */ "fisub", + /* 0A2 */ "fisubr", + /* 0A3 */ "fld", + /* 0A4 */ "fld1", + /* 0A5 */ "fldcw", + /* 0A6 */ "fldenv", + /* 0A7 */ "fldl2e", + /* 0A8 */ "fldl2t", + /* 0A9 */ "fldlg2", + /* 0AA */ "fldln2", + /* 0AB */ "fldpi", + /* 0AC */ "fldz", + /* 0AD */ "fmul", + /* 0AE */ "fmulp", + /* 0AF */ "fndisi", + /* 0B0 */ "fneni", + /* 0B1 */ "fninit", + /* 0B2 */ "fnop", + /* 0B3 */ "fnsave", + /* 0B4 */ "fnsetpm", + /* 0B5 */ "fnstcw", + /* 0B6 */ "fnstenv", + /* 0B7 */ "fnstsw", + /* 0B8 */ "fpatan", + /* 0B9 */ "fprem", + /* 0BA */ "fprem1", + /* 0BB */ "fptan", + /* 0BC */ "frndint", + /* 0BD */ "frstor", + /* 0BE */ "frstpm", + /* 0BF */ "fscale", + /* 0C0 */ "fsin", + /* 0C1 */ "fsincos", + /* 0C2 */ "fsqrt", + /* 0C3 */ "fst", + /* 0C4 */ "fstp", + /* 0C5 */ "fstp1", + /* 0C6 */ "fstp8", + /* 0C7 */ "fstp9", + /* 0C8 */ "fsub", + /* 0C9 */ "fsubp", + /* 0CA */ "fsubr", + /* 0CB */ "fsubrp", + /* 0CC */ "ftst", + /* 0CD */ "fucom", + /* 0CE */ "fucomi", + /* 0CF */ "fucomip", + /* 0D0 */ "fucomp", + /* 0D1 */ "fucompp", + /* 0D2 */ "fxam", + /* 0D3 */ "fxch", + /* 0D4 */ "fxch4", + /* 0D5 */ "fxch7", + /* 0D6 */ "fxrstor", + /* 0D7 */ "fxsave", + /* 0D8 */ "fxtract", + /* 0D9 */ "fyl2x", + /* 0DA */ "fyl2xp1", + /* 0DB */ "getsec", + /* 0DC */ "haddpd", + /* 0DD */ "haddps", + /* 0DE */ "hlt", + /* 0DF */ "hsubpd", + /* 0E0 */ "hsubps", + /* 0E1 */ "idiv", + /* 0E2 */ "imul", + /* 0E3 */ "in", + /* 0E4 */ "inc", + /* 0E5 */ "insb", + /* 0E6 */ "insd", + /* 0E7 */ "insertps", + /* 0E8 */ "insw", + /* 0E9 */ "int", + /* 0EA */ "int1", + /* 0EB */ "int3", + /* 0EC */ "into", + /* 0ED */ "invd", + /* 0EE */ "invept", + /* 0EF */ "invlpg", + /* 0F0 */ "invlpga", + /* 0F1 */ "invvpid", + /* 0F2 */ "iretd", + /* 0F3 */ "iretq", + /* 0F4 */ "iretw", + /* 0F5 */ "ja", + /* 0F6 */ "jb", + /* 0F7 */ "jbe", + /* 0F8 */ "jcxz", + /* 0F9 */ "je", + /* 0FA */ "jecxz", + /* 0FB */ "jg", + /* 0FC */ "jge", + /* 0FD */ "jl", + /* 0FE */ "jle", + /* 0FF */ "jmp", + /* 100 */ "jnb", + /* 101 */ "jne", + /* 102 */ "jno", + /* 103 */ "jnp", + /* 104 */ "jns", + /* 105 */ "jo", + /* 106 */ "jp", + /* 107 */ "jrcxz", + /* 108 */ "js", + /* 109 */ "lahf", + /* 10A */ "lar", + /* 10B */ "lddqu", + /* 10C */ "ldmxcsr", + /* 10D */ "lds", + /* 10E */ "lea", + /* 10F */ "leave", + /* 110 */ "les", + /* 111 */ "lfence", + /* 112 */ "lfs", + /* 113 */ "lgdt", + /* 114 */ "lgs", + /* 115 */ "lidt", + /* 116 */ "lldt", + /* 117 */ "lmsw", + /* 118 */ "lock", + /* 119 */ "lodsb", + /* 11A */ "lodsd", + /* 11B */ "lodsq", + /* 11C */ "lodsw", + /* 11D */ "loop", + /* 11E */ "loope", + /* 11F */ "loopne", + /* 120 */ "lsl", + /* 121 */ "lss", + /* 122 */ "ltr", + /* 123 */ "maskmovdqu", + /* 124 */ "maskmovq", + /* 125 */ "maxpd", + /* 126 */ "maxps", + /* 127 */ "maxsd", + /* 128 */ "maxss", + /* 129 */ "mfence", + /* 12A */ "minpd", + /* 12B */ "minps", + /* 12C */ "minsd", + /* 12D */ "minss", + /* 12E */ "monitor", + /* 12F */ "montmul", + /* 130 */ "mov", + /* 131 */ "movapd", + /* 132 */ "movaps", + /* 133 */ "movbe", + /* 134 */ "movd", + /* 135 */ "movddup", + /* 136 */ "movdq2q", + /* 137 */ "movdqa", + /* 138 */ "movdqu", + /* 139 */ "movhlps", + /* 13A */ "movhpd", + /* 13B */ "movhps", + /* 13C */ "movlhps", + /* 13D */ "movlpd", + /* 13E */ "movlps", + /* 13F */ "movmskpd", + /* 140 */ "movmskps", + /* 141 */ "movntdq", + /* 142 */ "movntdqa", + /* 143 */ "movnti", + /* 144 */ "movntpd", + /* 145 */ "movntps", + /* 146 */ "movntq", + /* 147 */ "movq", + /* 148 */ "movq2dq", + /* 149 */ "movsb", + /* 14A */ "movsd", + /* 14B */ "movshdup", + /* 14C */ "movsldup", + /* 14D */ "movsq", + /* 14E */ "movss", + /* 14F */ "movsw", + /* 150 */ "movsx", + /* 151 */ "movsxd", + /* 152 */ "movupd", + /* 153 */ "movups", + /* 154 */ "movzx", + /* 155 */ "mpsadbw", + /* 156 */ "mul", + /* 157 */ "mulpd", + /* 158 */ "mulps", + /* 159 */ "mulsd", + /* 15A */ "mulss", + /* 15B */ "mwait", + /* 15C */ "neg", + /* 15D */ "nop", + /* 15E */ "not", + /* 15F */ "or", + /* 160 */ "orpd", + /* 161 */ "orps", + /* 162 */ "out", + /* 163 */ "outsb", + /* 164 */ "outsd", + /* 165 */ "outsw", + /* 166 */ "pabsb", + /* 167 */ "pabsd", + /* 168 */ "pabsw", + /* 169 */ "packssdw", + /* 16A */ "packsswb", + /* 16B */ "packusdw", + /* 16C */ "packuswb", + /* 16D */ "paddb", + /* 16E */ "paddd", + /* 16F */ "paddq", + /* 170 */ "paddsb", + /* 171 */ "paddsw", + /* 172 */ "paddusb", + /* 173 */ "paddusw", + /* 174 */ "paddw", + /* 175 */ "palignr", + /* 176 */ "pand", + /* 177 */ "pandn", + /* 178 */ "pause", + /* 179 */ "pavgb", + /* 17A */ "pavgusb", + /* 17B */ "pavgw", + /* 17C */ "pblendvb", + /* 17D */ "pblendw", + /* 17E */ "pclmulqdq", + /* 17F */ "pcmpeqb", + /* 180 */ "pcmpeqd", + /* 181 */ "pcmpeqq", + /* 182 */ "pcmpeqw", + /* 183 */ "pcmpestri", + /* 184 */ "pcmpestrm", + /* 185 */ "pcmpgtb", + /* 186 */ "pcmpgtd", + /* 187 */ "pcmpgtq", + /* 188 */ "pcmpgtw", + /* 189 */ "pcmpistri", + /* 18A */ "pcmpistrm", + /* 18B */ "pextrb", + /* 18C */ "pextrd", + /* 18D */ "pextrq", + /* 18E */ "pextrw", + /* 18F */ "pf2id", + /* 190 */ "pf2iw", + /* 191 */ "pfacc", + /* 192 */ "pfadd", + /* 193 */ "pfcmpeq", + /* 194 */ "pfcmpge", + /* 195 */ "pfcmpgt", + /* 196 */ "pfmax", + /* 197 */ "pfmin", + /* 198 */ "pfmul", + /* 199 */ "pfnacc", + /* 19A */ "pfpnacc", + /* 19B */ "pfrcp", + /* 19C */ "pfrcpit1", + /* 19D */ "pfrcpit2", + /* 19E */ "pfrsqit1", + /* 19F */ "pfrsqrt", + /* 1A0 */ "pfsub", + /* 1A1 */ "pfsubr", + /* 1A2 */ "phaddd", + /* 1A3 */ "phaddsw", + /* 1A4 */ "phaddw", + /* 1A5 */ "phminposuw", + /* 1A6 */ "phsubd", + /* 1A7 */ "phsubsw", + /* 1A8 */ "phsubw", + /* 1A9 */ "pi2fd", + /* 1AA */ "pi2fw", + /* 1AB */ "pinsrb", + /* 1AC */ "pinsrd", + /* 1AD */ "pinsrq", + /* 1AE */ "pinsrw", + /* 1AF */ "pmaddubsw", + /* 1B0 */ "pmaddwd", + /* 1B1 */ "pmaxsb", + /* 1B2 */ "pmaxsd", + /* 1B3 */ "pmaxsw", + /* 1B4 */ "pmaxub", + /* 1B5 */ "pmaxud", + /* 1B6 */ "pmaxuw", + /* 1B7 */ "pminsb", + /* 1B8 */ "pminsd", + /* 1B9 */ "pminsw", + /* 1BA */ "pminub", + /* 1BB */ "pminud", + /* 1BC */ "pminuw", + /* 1BD */ "pmovmskb", + /* 1BE */ "pmovsxbd", + /* 1BF */ "pmovsxbq", + /* 1C0 */ "pmovsxbw", + /* 1C1 */ "pmovsxdq", + /* 1C2 */ "pmovsxwd", + /* 1C3 */ "pmovsxwq", + /* 1C4 */ "pmovzxbd", + /* 1C5 */ "pmovzxbq", + /* 1C6 */ "pmovzxbw", + /* 1C7 */ "pmovzxdq", + /* 1C8 */ "pmovzxwd", + /* 1C9 */ "pmovzxwq", + /* 1CA */ "pmuldq", + /* 1CB */ "pmulhrsw", + /* 1CC */ "pmulhrw", + /* 1CD */ "pmulhuw", + /* 1CE */ "pmulhw", + /* 1CF */ "pmulld", + /* 1D0 */ "pmullw", + /* 1D1 */ "pmuludq", + /* 1D2 */ "pop", + /* 1D3 */ "popa", + /* 1D4 */ "popad", + /* 1D5 */ "popcnt", + /* 1D6 */ "popfd", + /* 1D7 */ "popfq", + /* 1D8 */ "popfw", + /* 1D9 */ "por", + /* 1DA */ "prefetch", + /* 1DB */ "prefetchnta", + /* 1DC */ "prefetcht0", + /* 1DD */ "prefetcht1", + /* 1DE */ "prefetcht2", + /* 1DF */ "psadbw", + /* 1E0 */ "pshufb", + /* 1E1 */ "pshufd", + /* 1E2 */ "pshufhw", + /* 1E3 */ "pshuflw", + /* 1E4 */ "pshufw", + /* 1E5 */ "psignb", + /* 1E6 */ "psignd", + /* 1E7 */ "psignw", + /* 1E8 */ "pslld", + /* 1E9 */ "pslldq", + /* 1EA */ "psllq", + /* 1EB */ "psllw", + /* 1EC */ "psrad", + /* 1ED */ "psraw", + /* 1EE */ "psrld", + /* 1EF */ "psrldq", + /* 1F0 */ "psrlq", + /* 1F1 */ "psrlw", + /* 1F2 */ "psubb", + /* 1F3 */ "psubd", + /* 1F4 */ "psubq", + /* 1F5 */ "psubsb", + /* 1F6 */ "psubsw", + /* 1F7 */ "psubusb", + /* 1F8 */ "psubusw", + /* 1F9 */ "psubw", + /* 1FA */ "pswapd", + /* 1FB */ "ptest", + /* 1FC */ "punpckhbw", + /* 1FD */ "punpckhdq", + /* 1FE */ "punpckhqdq", + /* 1FF */ "punpckhwd", + /* 200 */ "punpcklbw", + /* 201 */ "punpckldq", + /* 202 */ "punpcklqdq", + /* 203 */ "punpcklwd", + /* 204 */ "push", + /* 205 */ "pusha", + /* 206 */ "pushad", + /* 207 */ "pushfd", + /* 208 */ "pushfq", + /* 209 */ "pushfw", + /* 20A */ "pxor", + /* 20B */ "rcl", + /* 20C */ "rcpps", + /* 20D */ "rcpss", + /* 20E */ "rcr", + /* 20F */ "rdmsr", + /* 210 */ "rdpmc", + /* 211 */ "rdrand", + /* 212 */ "rdtsc", + /* 213 */ "rdtscp", + /* 214 */ "rep", + /* 215 */ "repne", + /* 216 */ "ret", + /* 217 */ "retf", + /* 218 */ "rol", + /* 219 */ "ror", + /* 21A */ "roundpd", + /* 21B */ "roundps", + /* 21C */ "roundsd", + /* 21D */ "roundss", + /* 21E */ "rsm", + /* 21F */ "rsqrtps", + /* 220 */ "rsqrtss", + /* 221 */ "sahf", + /* 222 */ "salc", + /* 223 */ "sar", + /* 224 */ "sbb", + /* 225 */ "scasb", + /* 226 */ "scasd", + /* 227 */ "scasq", + /* 228 */ "scasw", + /* 229 */ "seta", + /* 22A */ "setae", + /* 22B */ "setb", + /* 22C */ "setbe", + /* 22D */ "sete", + /* 22E */ "setg", + /* 22F */ "setge", + /* 230 */ "setl", + /* 231 */ "setle", + /* 232 */ "setne", + /* 233 */ "setno", + /* 234 */ "setnp", + /* 235 */ "setns", + /* 236 */ "seto", + /* 237 */ "setp", + /* 238 */ "sets", + /* 239 */ "sfence", + /* 23A */ "sgdt", + /* 23B */ "shl", + /* 23C */ "shld", + /* 23D */ "shr", + /* 23E */ "shrd", + /* 23F */ "shufpd", + /* 240 */ "shufps", + /* 241 */ "sidt", + /* 242 */ "skinit", + /* 243 */ "sldt", + /* 244 */ "smsw", + /* 245 */ "sqrtpd", + /* 246 */ "sqrtps", + /* 247 */ "sqrtsd", + /* 248 */ "sqrtss", + /* 249 */ "stc", + /* 24A */ "std", + /* 24B */ "stgi", + /* 24C */ "sti", + /* 24D */ "stmxcsr", + /* 24E */ "stosb", + /* 24F */ "stosd", + /* 250 */ "stosq", + /* 251 */ "stosw", + /* 252 */ "str", + /* 253 */ "sub", + /* 254 */ "subpd", + /* 255 */ "subps", + /* 256 */ "subsd", + /* 257 */ "subss", + /* 258 */ "swapgs", + /* 259 */ "syscall", + /* 25A */ "sysenter", + /* 25B */ "sysexit", + /* 25C */ "sysret", + /* 25D */ "test", + /* 25E */ "ucomisd", + /* 25F */ "ucomiss", + /* 260 */ "ud2", + /* 261 */ "unpckhpd", + /* 262 */ "unpckhps", + /* 263 */ "unpcklpd", + /* 264 */ "unpcklps", + /* 265 */ "vaddpd", + /* 266 */ "vaddps", + /* 267 */ "vaddsd", + /* 268 */ "vaddss", + /* 269 */ "vaddsubpd", + /* 26A */ "vaddsubps", + /* 26B */ "vaesdec", + /* 26C */ "vaesdeclast", + /* 26D */ "vaesenc", + /* 26E */ "vaesenclast", + /* 26F */ "vaesimc", + /* 270 */ "vaeskeygenassist", + /* 271 */ "vandnpd", + /* 272 */ "vandnps", + /* 273 */ "vandpd", + /* 274 */ "vandps", + /* 275 */ "vblendpd", + /* 276 */ "vblendps", + /* 277 */ "vblendvpd", + /* 278 */ "vblendvps", + /* 279 */ "vbroadcastsd", + /* 27A */ "vbroadcastss", + /* 27B */ "vcmppd", + /* 27C */ "vcmpps", + /* 27D */ "vcmpsd", + /* 27E */ "vcmpss", + /* 27F */ "vcomisd", + /* 280 */ "vcomiss", + /* 281 */ "vcvtdq2pd", + /* 282 */ "vcvtdq2ps", + /* 283 */ "vcvtpd2dq", + /* 284 */ "vcvtpd2ps", + /* 285 */ "vcvtps2dq", + /* 286 */ "vcvtps2pd", + /* 287 */ "vcvtsd2si", + /* 288 */ "vcvtsd2ss", + /* 289 */ "vcvtsi2sd", + /* 28A */ "vcvtsi2ss", + /* 28B */ "vcvtss2sd", + /* 28C */ "vcvtss2si", + /* 28D */ "vcvttpd2dq", + /* 28E */ "vcvttps2dq", + /* 28F */ "vcvttsd2si", + /* 290 */ "vcvttss2si", + /* 291 */ "vdivpd", + /* 292 */ "vdivps", + /* 293 */ "vdivsd", + /* 294 */ "vdivss", + /* 295 */ "vdppd", + /* 296 */ "vdpps", + /* 297 */ "verr", + /* 298 */ "verw", + /* 299 */ "vextractf128", + /* 29A */ "vextractps", + /* 29B */ "vhaddpd", + /* 29C */ "vhaddps", + /* 29D */ "vhsubpd", + /* 29E */ "vhsubps", + /* 29F */ "vinsertf128", + /* 2A0 */ "vinsertps", + /* 2A1 */ "vlddqu", + /* 2A2 */ "vmaskmovdqu", + /* 2A3 */ "vmaskmovpd", + /* 2A4 */ "vmaskmovps", + /* 2A5 */ "vmaxpd", + /* 2A6 */ "vmaxps", + /* 2A7 */ "vmaxsd", + /* 2A8 */ "vmaxss", + /* 2A9 */ "vmcall", + /* 2AA */ "vmclear", + /* 2AB */ "vminpd", + /* 2AC */ "vminps", + /* 2AD */ "vminsd", + /* 2AE */ "vminss", + /* 2AF */ "vmlaunch", + /* 2B0 */ "vmload", + /* 2B1 */ "vmmcall", + /* 2B2 */ "vmovapd", + /* 2B3 */ "vmovaps", + /* 2B4 */ "vmovd", + /* 2B5 */ "vmovddup", + /* 2B6 */ "vmovdqa", + /* 2B7 */ "vmovdqu", + /* 2B8 */ "vmovhlps", + /* 2B9 */ "vmovhpd", + /* 2BA */ "vmovhps", + /* 2BB */ "vmovlhps", + /* 2BC */ "vmovlpd", + /* 2BD */ "vmovlps", + /* 2BE */ "vmovmskpd", + /* 2BF */ "vmovmskps", + /* 2C0 */ "vmovntdq", + /* 2C1 */ "vmovntdqa", + /* 2C2 */ "vmovntpd", + /* 2C3 */ "vmovntps", + /* 2C4 */ "vmovq", + /* 2C5 */ "vmovsd", + /* 2C6 */ "vmovshdup", + /* 2C7 */ "vmovsldup", + /* 2C8 */ "vmovss", + /* 2C9 */ "vmovupd", + /* 2CA */ "vmovups", + /* 2CB */ "vmpsadbw", + /* 2CC */ "vmptrld", + /* 2CD */ "vmptrst", + /* 2CE */ "vmread", + /* 2CF */ "vmresume", + /* 2D0 */ "vmrun", + /* 2D1 */ "vmsave", + /* 2D2 */ "vmulpd", + /* 2D3 */ "vmulps", + /* 2D4 */ "vmulsd", + /* 2D5 */ "vmulss", + /* 2D6 */ "vmwrite", + /* 2D7 */ "vmxoff", + /* 2D8 */ "vmxon", + /* 2D9 */ "vorpd", + /* 2DA */ "vorps", + /* 2DB */ "vpabsb", + /* 2DC */ "vpabsd", + /* 2DD */ "vpabsw", + /* 2DE */ "vpackssdw", + /* 2DF */ "vpacksswb", + /* 2E0 */ "vpackusdw", + /* 2E1 */ "vpackuswb", + /* 2E2 */ "vpaddb", + /* 2E3 */ "vpaddd", + /* 2E4 */ "vpaddq", + /* 2E5 */ "vpaddsb", + /* 2E6 */ "vpaddsw", + /* 2E7 */ "vpaddusb", + /* 2E8 */ "vpaddusw", + /* 2E9 */ "vpaddw", + /* 2EA */ "vpalignr", + /* 2EB */ "vpand", + /* 2EC */ "vpandn", + /* 2ED */ "vpavgb", + /* 2EE */ "vpavgw", + /* 2EF */ "vpblendvb", + /* 2F0 */ "vpblendw", + /* 2F1 */ "vpclmulqdq", + /* 2F2 */ "vpcmpeqb", + /* 2F3 */ "vpcmpeqd", + /* 2F4 */ "vpcmpeqq", + /* 2F5 */ "vpcmpeqw", + /* 2F6 */ "vpcmpestri", + /* 2F7 */ "vpcmpestrm", + /* 2F8 */ "vpcmpgtb", + /* 2F9 */ "vpcmpgtd", + /* 2FA */ "vpcmpgtq", + /* 2FB */ "vpcmpgtw", + /* 2FC */ "vpcmpistri", + /* 2FD */ "vpcmpistrm", + /* 2FE */ "vperm2f128", + /* 2FF */ "vpermilpd", + /* 300 */ "vpermilps", + /* 301 */ "vpextrb", + /* 302 */ "vpextrd", + /* 303 */ "vpextrq", + /* 304 */ "vpextrw", + /* 305 */ "vphaddd", + /* 306 */ "vphaddsw", + /* 307 */ "vphaddw", + /* 308 */ "vphminposuw", + /* 309 */ "vphsubd", + /* 30A */ "vphsubsw", + /* 30B */ "vphsubw", + /* 30C */ "vpinsrb", + /* 30D */ "vpinsrd", + /* 30E */ "vpinsrq", + /* 30F */ "vpinsrw", + /* 310 */ "vpmaddubsw", + /* 311 */ "vpmaddwd", + /* 312 */ "vpmaxsb", + /* 313 */ "vpmaxsd", + /* 314 */ "vpmaxsw", + /* 315 */ "vpmaxub", + /* 316 */ "vpmaxud", + /* 317 */ "vpmaxuw", + /* 318 */ "vpminsb", + /* 319 */ "vpminsd", + /* 31A */ "vpminsw", + /* 31B */ "vpminub", + /* 31C */ "vpminud", + /* 31D */ "vpminuw", + /* 31E */ "vpmovmskb", + /* 31F */ "vpmovsxbd", + /* 320 */ "vpmovsxbq", + /* 321 */ "vpmovsxbw", + /* 322 */ "vpmovsxwd", + /* 323 */ "vpmovsxwq", + /* 324 */ "vpmovzxbd", + /* 325 */ "vpmovzxbq", + /* 326 */ "vpmovzxbw", + /* 327 */ "vpmovzxdq", + /* 328 */ "vpmovzxwd", + /* 329 */ "vpmovzxwq", + /* 32A */ "vpmuldq", + /* 32B */ "vpmulhrsw", + /* 32C */ "vpmulhuw", + /* 32D */ "vpmulhw", + /* 32E */ "vpmulld", + /* 32F */ "vpmullw", + /* 330 */ "vpor", + /* 331 */ "vpsadbw", + /* 332 */ "vpshufb", + /* 333 */ "vpshufd", + /* 334 */ "vpshufhw", + /* 335 */ "vpshuflw", + /* 336 */ "vpsignb", + /* 337 */ "vpsignd", + /* 338 */ "vpsignw", + /* 339 */ "vpslld", + /* 33A */ "vpslldq", + /* 33B */ "vpsllq", + /* 33C */ "vpsllw", + /* 33D */ "vpsrad", + /* 33E */ "vpsraw", + /* 33F */ "vpsrld", + /* 340 */ "vpsrldq", + /* 341 */ "vpsrlq", + /* 342 */ "vpsrlw", + /* 343 */ "vpsubb", + /* 344 */ "vpsubd", + /* 345 */ "vpsubq", + /* 346 */ "vpsubsb", + /* 347 */ "vpsubsw", + /* 348 */ "vpsubusb", + /* 349 */ "vpsubusw", + /* 34A */ "vpsubw", + /* 34B */ "vptest", + /* 34C */ "vpunpckhbw", + /* 34D */ "vpunpckhdq", + /* 34E */ "vpunpckhqdq", + /* 34F */ "vpunpckhwd", + /* 350 */ "vpunpcklbw", + /* 351 */ "vpunpckldq", + /* 352 */ "vpunpcklqdq", + /* 353 */ "vpunpcklwd", + /* 354 */ "vpxor", + /* 355 */ "vrcpps", + /* 356 */ "vrcpss", + /* 357 */ "vroundpd", + /* 358 */ "vroundps", + /* 359 */ "vroundsd", + /* 35A */ "vroundss", + /* 35B */ "vrsqrtps", + /* 35C */ "vrsqrtss", + /* 35D */ "vshufpd", + /* 35E */ "vshufps", + /* 35F */ "vsqrtpd", + /* 360 */ "vsqrtps", + /* 361 */ "vsqrtsd", + /* 362 */ "vsqrtss", + /* 363 */ "vstmxcsr", + /* 364 */ "vsubpd", + /* 365 */ "vsubps", + /* 366 */ "vsubsd", + /* 367 */ "vsubss", + /* 368 */ "vtestpd", + /* 369 */ "vtestps", + /* 36A */ "vucomisd", + /* 36B */ "vucomiss", + /* 36C */ "vunpckhpd", + /* 36D */ "vunpckhps", + /* 36E */ "vunpcklpd", + /* 36F */ "vunpcklps", + /* 370 */ "vxorpd", + /* 371 */ "vxorps", + /* 372 */ "vzeroall", + /* 373 */ "vzeroupper", + /* 374 */ "wait", + /* 375 */ "wbinvd", + /* 376 */ "wrmsr", + /* 377 */ "xadd", + /* 378 */ "xchg", + /* 379 */ "xcryptcbc", + /* 37A */ "xcryptcfb", + /* 37B */ "xcryptctr", + /* 37C */ "xcryptecb", + /* 37D */ "xcryptofb", + /* 37E */ "xgetbv", + /* 37F */ "xlatb", + /* 380 */ "xor", + /* 381 */ "xorpd", + /* 382 */ "xorps", + /* 383 */ "xrstor", + /* 384 */ "xsave", + /* 385 */ "xsetbv", + /* 386 */ "xsha1", + /* 387 */ "xsha256", + /* 388 */ "xstore", +}; + +#undef VX_NODE +#undef VX_INVALID \ No newline at end of file diff --git a/Bindings/C/VXOpcodeTableC.cpp b/Bindings/C/VXOpcodeTableC.cpp deleted file mode 100644 index 80d3626..0000000 --- a/Bindings/C/VXOpcodeTableC.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : athre0z - Modifications : - - Last change : 04. February 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#include "VXOpcodeTableC.h" -#include "VXOpcodeTable.h" - diff --git a/Bindings/C/VXOpcodeTableC.h b/Bindings/C/VXOpcodeTableC.h index f65b862..f36cc41 100644 --- a/Bindings/C/VXOpcodeTableC.h +++ b/Bindings/C/VXOpcodeTableC.h @@ -34,6 +34,7 @@ #define _VDE_VXOPCODETABLEC_H_ #include +#include #ifdef __cplusplus extern "C" diff --git a/Bindings/C/VXOpcodeTableInternalC.h b/Bindings/C/VXOpcodeTableInternalC.h new file mode 100644 index 0000000..83e293b --- /dev/null +++ b/Bindings/C/VXOpcodeTableInternalC.h @@ -0,0 +1,313 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : athre0z + Modifications : + + Last change : 14. March 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#ifndef _VDE_VXOPCODETABLEINTERNAL_H_ +#define _VDE_VXOPCODETABLEINTERNAL_H_ + +#include +#include "VXOpcodeTableC.h" + +/** + * @brief Contains all opcode tables. + * Indexed by the numeric value of the opcode. + */ +extern const VXOpcodeTreeNode vxOptreeTable[][256]; + +/** + * @brief Contains all modrm_mod switch tables. + * Index values: + * 0 = [modrm_mod == !11] + * 1 = [modrm_mod == 11] + */ +extern const VXOpcodeTreeNode vxOptreeModrmMod[][2]; + +/** + * @brief Contains all modrm_reg switch tables. + * Indexed by the numeric value of the modrm_reg field. + */ +extern const VXOpcodeTreeNode vxOptreeModrmReg[][8]; + +/** + * @brief Contains all modrm_rm switch tables. + * Indexed by the numeric value of the modrm_rm field. + */ +extern const VXOpcodeTreeNode vxOptreeModrmRm[][8]; + +/** + * @brief Contains all mandatory-prefix switch tables. + * Index values: + * 0 = none + * 1 = F2 + * 2 = F3 + * 3 = 66 + */ +extern const VXOpcodeTreeNode vxOptreeMandatory[][4]; + +/** + * @brief Contains all x87 opcode tables. + * Indexed by the numeric value of the 6 lowest bits of the modrm byte (modrm_mod should + * always be 11). + */ +extern const VXOpcodeTreeNode vxOptreeX87[][64]; + +/** + * @brief Contains all address-size switch tables. + * Index values: + * 0 = 16 + * 1 = 32 + * 2 = 64 + */ +extern const VXOpcodeTreeNode vxOptreeAddressSize[][3]; + +/** + * @brief Contains all operand-size switch tables. + * Index values: + * 0 = 16 + * 1 = 32 + * 2 = 64 + */ +extern const VXOpcodeTreeNode vxOptreeOperandSize[][3]; + +/** + * @brief Contains all cpu-mode switch tables. + * Index values: + * 0 = [!= 64] + * 1 = 64 + */ +extern const VXOpcodeTreeNode vxOptreeMode[][2]; + +/** + * @brief Contains all vendor switch tables. + * Index values: + * 0 = AMD + * 1 = Intel + */ +extern const VXOpcodeTreeNode vxOptreeVendor[][2]; + +/** + * @brief Contains all 3DNow! switch tables. + * Indexed by the numeric value of the 3DNow! opcode. + */ +extern const VXOpcodeTreeNode vxOptree3dnow[][256]; + +/** + * @brief Contains all vex switch tables. + * Index values: + * 0 = none + * 1 = 0F + * 2 = 0F38 + * 3 = 0F3A + * 4 = 66 + * 5 = 66_0F + * 6 = 66_0F38 + * 7 = 66_0F3A + * 8 = F3 + * 9 = F3_0F + * A = F3_0F38 + * B = F3_0F3A + * C = F2 + * D = F2_0F + * E = F2_0F38 + * F = F2_0F3A + */ +extern const VXOpcodeTreeNode vxOptreeVex[][16]; + +/** + * @brief Contains all vex_w switch tables. + * Indexed by the numeric value of the vex_w field. + */ +extern const VXOpcodeTreeNode vxOptreeVexW[][2]; + +/** + * @brief Contains all vex_l switch tables. + * Indexed by the numeric value of the vex_l field. + */ +extern const VXOpcodeTreeNode vxOptreeVexL[][2]; + +/** + * @brief Contains all instruction definitions. + */ +extern const VXInstructionDefinition vxInstrDefinitions[]; + +/** + * @brief Contains all instruction mnemonic strings. + */ +extern const char* vxInstrMnemonicStrings[]; + +/** + * @brief Returns the type of the specified opcode tree node. + * @param node The node. + * @return The type of the specified opcode tree node. + */ +__inline VXOpcodeTreeNodeType VXGetOpcodeNodeType(VXOpcodeTreeNode node) +{ + return (VXOpcodeTreeNodeType)((node >> 12) & 0x0F); +} + +/** + * @brief Returns the value of the specified opcode tree node. + * @param node The node. + * @return The value of the specified opcode tree node. + */ +__inline uint16_t VXGetOpcodeNodeValue(VXOpcodeTreeNode node) +{ + return (node & 0x0FFF); +} + +/** + * @brief Returns the root node of the opcode tree. + * @return The root node of the opcode tree. + */ +__inline VXOpcodeTreeNode VXGetOpcodeTreeRoot() +{ + return 0x1000; +} + +/** + * @brief Returns a child node of @c parent specified by @c index. + * @param parent The parent node. + * @param index The index of the child node to retrieve. + * @return The specified child node. + */ +__inline VXOpcodeTreeNode VXGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_t index) +{ + VXOpcodeTreeNodeType nodeType = VXGetOpcodeNodeType(parent); + uint16_t tableIndex = VXGetOpcodeNodeValue(parent); + switch (nodeType) + { + case OTNT_TABLE: + assert(index < 256); + return vxOptreeTable[tableIndex][index]; + case OTNT_MODRM_MOD: + assert(index < 2); + return vxOptreeModrmMod[tableIndex][index]; + case OTNT_MODRM_REG: + assert(index < 8); + return vxOptreeModrmReg[tableIndex][index]; + case OTNT_MODRM_RM: + assert(index < 8); + return vxOptreeModrmRm[tableIndex][index]; + case OTNT_MANDATORY: + assert(index < 4); + return vxOptreeMandatory[tableIndex][index]; + case OTNT_X87: + assert(index < 64); + return vxOptreeX87[tableIndex][index]; + case OTNT_ADDRESS_SIZE: + assert(index < 3); + return vxOptreeAddressSize[tableIndex][index]; + case OTNT_OPERAND_SIZE: + assert(index < 3); + return vxOptreeOperandSize[tableIndex][index]; + case OTNT_MODE: + assert(index < 2); + return vxOptreeMode[tableIndex][index]; + case OTNT_VENDOR: + assert(index < 3); + return vxOptreeVendor[tableIndex][index]; + case OTNT_AMD3DNOW: + assert(index < 256); + return vxOptree3dnow[tableIndex][index]; + case OTNT_VEX: + assert(index < 16); + return vxOptreeVex[tableIndex][index]; + case OTNT_VEXW: + assert(index < 2); + return vxOptreeVexW[tableIndex][index]; + case OTNT_VEXL: + assert(index < 2); + return vxOptreeVexL[tableIndex][index]; + default: + assert(0); + } + return 0xFFFF; +} + +/** + * @brief Returns the instruction definition that is linked to the given @c node. + * @param node The instruction definition node. + * @return Pointer to the instruction definition. + */ +__inline const VXInstructionDefinition* VXGetInstructionDefinition(VXOpcodeTreeNode node) +{ + assert(VXGetOpcodeNodeType(node) == OTNT_INSTRUCTION_DEFINITION); + return &vxInstrDefinitions[node & 0x0FFF]; +} + +/** + * @brief Returns the specified instruction mnemonic string. + * @param mnemonic The mnemonic. + * @return The instruction mnemonic string. + */ +__inline const char* VXGetInstructionMnemonicString(VXInstructionMnemonic mnemonic) +{ + return vxInstrMnemonicStrings[(uint16_t)mnemonic]; +} + +/** + * @brief Returns the numeric value for a simple operand size definition. + * @param operandSize The defined operand size. + * @return The the numeric value for the simple operand size definition. + */ +__inline uint16_t VXGetSimpleOperandSize(VXDefinedOperandSize operandSize) +{ + static const uint16_t operandSizes[8] = + { + 8, 16, 32, 64, 80, 12, 128, 256 + }; + + uint16_t index = operandSize - DOS_B; + assert(index < 8); + return operandSizes[index]; +} + +/** + * @brief Returns the memory-size part of a complex operand size definition. + * @param operandSize The defined operand size. + * @return The memory-size part of the operand size definition. + */ +__inline VXDefinedOperandSize VXGetComplexOperandMemSize(VXDefinedOperandSize operandSize) +{ + return (VXDefinedOperandSize)(operandSize & 0x0F); +} + +/** + * @brief Returns the register-size part of a complex operand size definition. + * @param operandSize The defined operand size. + * @return The register-size part of the operand size definition. + */ +__inline VXDefinedOperandSize VXGetComplexOperandRegSize(VXDefinedOperandSize operandSize) +{ + return (VXDefinedOperandSize)((operandSize >> 4) & 0x0F); +} + +#endif // _VDE_VXOPCODETABLEINTERNAL_H_ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 099d968..9a9c0ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,12 +44,14 @@ if (BUILD_C_BINDINGS) "Bindings/C/VXDisassemblerUtilsC.h" "Bindings/C/VXInstructionDecoderC.h" "Bindings/C/VXInstructionFormatterC.h" - "Bindings/C/VXOpcodeTableC.h") + "Bindings/C/VXOpcodeTableC.h" + "Bindings/C/VXOpcodeTableInternalC.h" + "Bindings/C/VXInternalHelpersC.h") set(vdec_sources - "Bindings/C/VXDisassemblerUtilsC.cpp" - "Bindings/C/VXInstructionFormatterC.cpp" - "Bindings/C/VXOpcodeTableC.cpp" - "Bindings/C/VXInstructionDecoderC.cpp") + "Bindings/C/VXDisassemblerUtilsC.c" + "Bindings/C/VXInstructionFormatterC.c" + "Bindings/C/VXOpcodeTableC.c" + "Bindings/C/VXInstructionDecoderC.c") add_library("VerteronDisassemblerEngineC" ${vdec_headers} ${vdec_sources}) target_link_libraries("VerteronDisassemblerEngineC" "VerteronDisassemblerEngine") endif () diff --git a/VerteronDisassemblerEngine/VXOpcodeTable.cpp b/VerteronDisassemblerEngine/VXOpcodeTable.cpp index c6d5778..72438f2 100644 --- a/VerteronDisassemblerEngine/VXOpcodeTable.cpp +++ b/VerteronDisassemblerEngine/VXOpcodeTable.cpp @@ -37,7 +37,7 @@ namespace Verteron namespace Internal { -#define INVALID 0 +#define VX_INVALID 0 #define NODE(type, n) (static_cast(type) << 12 | (n)) const VXOpcodeTreeNode optreeTable[][256] = @@ -81,7 +81,7 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 23 */ 0x002C, /* 24 */ 0x002D, /* 25 */ 0x002E, - /* 26 */ INVALID, + /* 26 */ VX_INVALID, /* 27 */ NODE(VXOpcodeTreeNodeType::MODE, 0x000B), /* 28 */ 0x0542, /* 29 */ 0x0549, @@ -89,7 +89,7 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 2B */ 0x054B, /* 2C */ 0x054A, /* 2D */ 0x0547, - /* 2E */ INVALID, + /* 2E */ VX_INVALID, /* 2F */ NODE(VXOpcodeTreeNodeType::MODE, 0x000C), /* 30 */ 0x06B8, /* 31 */ 0x06B9, @@ -97,7 +97,7 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 33 */ 0x06B7, /* 34 */ 0x06BA, /* 35 */ 0x06BB, - /* 36 */ INVALID, + /* 36 */ VX_INVALID, /* 37 */ NODE(VXOpcodeTreeNodeType::MODE, 0x000D), /* 38 */ 0x006C, /* 39 */ 0x006D, @@ -105,7 +105,7 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 3B */ 0x006A, /* 3C */ 0x0070, /* 3D */ 0x006F, - /* 3E */ INVALID, + /* 3E */ VX_INVALID, /* 3F */ NODE(VXOpcodeTreeNodeType::MODE, 0x000E), /* 40 */ 0x02AB, /* 41 */ 0x02AC, @@ -143,10 +143,10 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 61 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0008), /* 62 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0013), /* 63 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0014), - /* 64 */ INVALID, - /* 65 */ INVALID, - /* 66 */ INVALID, - /* 67 */ INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, /* 68 */ 0x04B7, /* 69 */ 0x02A4, /* 6A */ 0x04AB, @@ -305,15 +305,15 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 01 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0000), /* 02 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0003), /* 03 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0004), - /* 04 */ INVALID, + /* 04 */ VX_INVALID, /* 05 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0005), /* 06 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0006), /* 07 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0007), /* 08 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0008), /* 09 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0009), - /* 0A */ INVALID, + /* 0A */ VX_INVALID, /* 0B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x000A), - /* 0C */ INVALID, + /* 0C */ VX_INVALID, /* 0D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x000B), /* 0E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x000C), /* 0F */ NODE(VXOpcodeTreeNodeType::AMD3DNOW, 0x0000), @@ -337,10 +337,10 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 21 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0020), /* 22 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0021), /* 23 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0022), - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, /* 28 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0023), /* 29 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0024), /* 2A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0025), @@ -355,16 +355,16 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 33 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x002E), /* 34 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x002F), /* 35 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0030), - /* 36 */ INVALID, + /* 36 */ VX_INVALID, /* 37 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0031), /* 38 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0002), - /* 39 */ INVALID, + /* 39 */ VX_INVALID, /* 3A */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0003), - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, /* 40 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0081), /* 41 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0082), /* 42 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0083), @@ -423,8 +423,8 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 77 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B8), /* 78 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B9), /* 79 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BA), - /* 7A */ INVALID, - /* 7B */ INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, /* 7C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BB), /* 7D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BC), /* 7E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BD), @@ -486,7 +486,7 @@ const VXOpcodeTreeNode optreeTable[][256] = /* B6 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F6), /* B7 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F7), /* B8 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F8), - /* B9 */ INVALID, + /* B9 */ VX_INVALID, /* BA */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F9), /* BB */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00FA), /* BC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00FB), @@ -556,7 +556,7 @@ const VXOpcodeTreeNode optreeTable[][256] = /* FC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x013C), /* FD */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x013D), /* FE */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x013E), - /* FF */ INVALID, + /* FF */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0032), @@ -571,49 +571,49 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 09 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003B), /* 0A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003C), /* 0B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003D), - /* 0C */ INVALID, - /* 0D */ INVALID, - /* 0E */ INVALID, - /* 0F */ INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, /* 10 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003E), - /* 11 */ INVALID, - /* 12 */ INVALID, - /* 13 */ INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, /* 14 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003F), /* 15 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0040), - /* 16 */ INVALID, + /* 16 */ VX_INVALID, /* 17 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0041), - /* 18 */ INVALID, - /* 19 */ INVALID, - /* 1A */ INVALID, - /* 1B */ INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, /* 1C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0042), /* 1D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0043), /* 1E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0044), - /* 1F */ INVALID, + /* 1F */ VX_INVALID, /* 20 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0045), /* 21 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0046), /* 22 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0047), /* 23 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0048), /* 24 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0049), /* 25 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004A), - /* 26 */ INVALID, - /* 27 */ INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, /* 28 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004B), /* 29 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004C), /* 2A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004D), /* 2B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004E), - /* 2C */ INVALID, - /* 2D */ INVALID, - /* 2E */ INVALID, - /* 2F */ INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, /* 30 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004F), /* 31 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0050), /* 32 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0051), /* 33 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0052), /* 34 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0053), /* 35 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0054), - /* 36 */ INVALID, + /* 36 */ VX_INVALID, /* 37 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0055), /* 38 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0056), /* 39 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0057), @@ -625,206 +625,206 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 3F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x005D), /* 40 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x005E), /* 41 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x005F), - /* 42 */ INVALID, - /* 43 */ INVALID, - /* 44 */ INVALID, - /* 45 */ INVALID, - /* 46 */ INVALID, - /* 47 */ INVALID, - /* 48 */ INVALID, - /* 49 */ INVALID, - /* 4A */ INVALID, - /* 4B */ INVALID, - /* 4C */ INVALID, - /* 4D */ INVALID, - /* 4E */ INVALID, - /* 4F */ INVALID, - /* 50 */ INVALID, - /* 51 */ INVALID, - /* 52 */ INVALID, - /* 53 */ INVALID, - /* 54 */ INVALID, - /* 55 */ INVALID, - /* 56 */ INVALID, - /* 57 */ INVALID, - /* 58 */ INVALID, - /* 59 */ INVALID, - /* 5A */ INVALID, - /* 5B */ INVALID, - /* 5C */ INVALID, - /* 5D */ INVALID, - /* 5E */ INVALID, - /* 5F */ INVALID, - /* 60 */ INVALID, - /* 61 */ INVALID, - /* 62 */ INVALID, - /* 63 */ INVALID, - /* 64 */ INVALID, - /* 65 */ INVALID, - /* 66 */ INVALID, - /* 67 */ INVALID, - /* 68 */ INVALID, - /* 69 */ INVALID, - /* 6A */ INVALID, - /* 6B */ INVALID, - /* 6C */ INVALID, - /* 6D */ INVALID, - /* 6E */ INVALID, - /* 6F */ INVALID, - /* 70 */ INVALID, - /* 71 */ INVALID, - /* 72 */ INVALID, - /* 73 */ INVALID, - /* 74 */ INVALID, - /* 75 */ INVALID, - /* 76 */ INVALID, - /* 77 */ INVALID, - /* 78 */ INVALID, - /* 79 */ INVALID, - /* 7A */ INVALID, - /* 7B */ INVALID, - /* 7C */ INVALID, - /* 7D */ INVALID, - /* 7E */ INVALID, - /* 7F */ INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, /* 80 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0060), /* 81 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0061), - /* 82 */ INVALID, - /* 83 */ INVALID, - /* 84 */ INVALID, - /* 85 */ INVALID, - /* 86 */ INVALID, - /* 87 */ INVALID, - /* 88 */ INVALID, - /* 89 */ INVALID, - /* 8A */ INVALID, - /* 8B */ INVALID, - /* 8C */ INVALID, - /* 8D */ INVALID, - /* 8E */ INVALID, - /* 8F */ INVALID, - /* 90 */ INVALID, - /* 91 */ INVALID, - /* 92 */ INVALID, - /* 93 */ INVALID, - /* 94 */ INVALID, - /* 95 */ INVALID, - /* 96 */ INVALID, - /* 97 */ INVALID, - /* 98 */ INVALID, - /* 99 */ INVALID, - /* 9A */ INVALID, - /* 9B */ INVALID, - /* 9C */ INVALID, - /* 9D */ INVALID, - /* 9E */ INVALID, - /* 9F */ INVALID, - /* A0 */ INVALID, - /* A1 */ INVALID, - /* A2 */ INVALID, - /* A3 */ INVALID, - /* A4 */ INVALID, - /* A5 */ INVALID, - /* A6 */ INVALID, - /* A7 */ INVALID, - /* A8 */ INVALID, - /* A9 */ INVALID, - /* AA */ INVALID, - /* AB */ INVALID, - /* AC */ INVALID, - /* AD */ INVALID, - /* AE */ INVALID, - /* AF */ INVALID, - /* B0 */ INVALID, - /* B1 */ INVALID, - /* B2 */ INVALID, - /* B3 */ INVALID, - /* B4 */ INVALID, - /* B5 */ INVALID, - /* B6 */ INVALID, - /* B7 */ INVALID, - /* B8 */ INVALID, - /* B9 */ INVALID, - /* BA */ INVALID, - /* BB */ INVALID, - /* BC */ INVALID, - /* BD */ INVALID, - /* BE */ INVALID, - /* BF */ INVALID, - /* C0 */ INVALID, - /* C1 */ INVALID, - /* C2 */ INVALID, - /* C3 */ INVALID, - /* C4 */ INVALID, - /* C5 */ INVALID, - /* C6 */ INVALID, - /* C7 */ INVALID, - /* C8 */ INVALID, - /* C9 */ INVALID, - /* CA */ INVALID, - /* CB */ INVALID, - /* CC */ INVALID, - /* CD */ INVALID, - /* CE */ INVALID, - /* CF */ INVALID, - /* D0 */ INVALID, - /* D1 */ INVALID, - /* D2 */ INVALID, - /* D3 */ INVALID, - /* D4 */ INVALID, - /* D5 */ INVALID, - /* D6 */ INVALID, - /* D7 */ INVALID, - /* D8 */ INVALID, - /* D9 */ INVALID, - /* DA */ INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, /* DB */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0062), /* DC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0063), /* DD */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0064), /* DE */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0065), /* DF */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0066), - /* E0 */ INVALID, - /* E1 */ INVALID, - /* E2 */ INVALID, - /* E3 */ INVALID, - /* E4 */ INVALID, - /* E5 */ INVALID, - /* E6 */ INVALID, - /* E7 */ INVALID, - /* E8 */ INVALID, - /* E9 */ INVALID, - /* EA */ INVALID, - /* EB */ INVALID, - /* EC */ INVALID, - /* ED */ INVALID, - /* EE */ INVALID, - /* EF */ INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, /* F0 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0067), /* F1 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0068), - /* F2 */ INVALID, - /* F3 */ INVALID, - /* F4 */ INVALID, - /* F5 */ INVALID, - /* F6 */ INVALID, - /* F7 */ INVALID, - /* F8 */ INVALID, - /* F9 */ INVALID, - /* FA */ INVALID, - /* FB */ INVALID, - /* FC */ INVALID, - /* FD */ INVALID, - /* FE */ INVALID, - /* FF */ INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, /* 08 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0069), /* 09 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006A), /* 0A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006B), @@ -833,264 +833,264 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 0D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006E), /* 0E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006F), /* 0F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0070), - /* 10 */ INVALID, - /* 11 */ INVALID, - /* 12 */ INVALID, - /* 13 */ INVALID, + /* 10 */ VX_INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, /* 14 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0071), /* 15 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0072), /* 16 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0073), /* 17 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0074), - /* 18 */ INVALID, - /* 19 */ INVALID, - /* 1A */ INVALID, - /* 1B */ INVALID, - /* 1C */ INVALID, - /* 1D */ INVALID, - /* 1E */ INVALID, - /* 1F */ INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, /* 20 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0075), /* 21 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0076), /* 22 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0077), - /* 23 */ INVALID, - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, - /* 28 */ INVALID, - /* 29 */ INVALID, - /* 2A */ INVALID, - /* 2B */ INVALID, - /* 2C */ INVALID, - /* 2D */ INVALID, - /* 2E */ INVALID, - /* 2F */ INVALID, - /* 30 */ INVALID, - /* 31 */ INVALID, - /* 32 */ INVALID, - /* 33 */ INVALID, - /* 34 */ INVALID, - /* 35 */ INVALID, - /* 36 */ INVALID, - /* 37 */ INVALID, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, + /* 2A */ VX_INVALID, + /* 2B */ VX_INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, /* 40 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0078), /* 41 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0079), /* 42 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007A), - /* 43 */ INVALID, + /* 43 */ VX_INVALID, /* 44 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007B), - /* 45 */ INVALID, - /* 46 */ INVALID, - /* 47 */ INVALID, - /* 48 */ INVALID, - /* 49 */ INVALID, - /* 4A */ INVALID, - /* 4B */ INVALID, - /* 4C */ INVALID, - /* 4D */ INVALID, - /* 4E */ INVALID, - /* 4F */ INVALID, - /* 50 */ INVALID, - /* 51 */ INVALID, - /* 52 */ INVALID, - /* 53 */ INVALID, - /* 54 */ INVALID, - /* 55 */ INVALID, - /* 56 */ INVALID, - /* 57 */ INVALID, - /* 58 */ INVALID, - /* 59 */ INVALID, - /* 5A */ INVALID, - /* 5B */ INVALID, - /* 5C */ INVALID, - /* 5D */ INVALID, - /* 5E */ INVALID, - /* 5F */ INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, /* 60 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007C), /* 61 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007D), /* 62 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007E), /* 63 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007F), - /* 64 */ INVALID, - /* 65 */ INVALID, - /* 66 */ INVALID, - /* 67 */ INVALID, - /* 68 */ INVALID, - /* 69 */ INVALID, - /* 6A */ INVALID, - /* 6B */ INVALID, - /* 6C */ INVALID, - /* 6D */ INVALID, - /* 6E */ INVALID, - /* 6F */ INVALID, - /* 70 */ INVALID, - /* 71 */ INVALID, - /* 72 */ INVALID, - /* 73 */ INVALID, - /* 74 */ INVALID, - /* 75 */ INVALID, - /* 76 */ INVALID, - /* 77 */ INVALID, - /* 78 */ INVALID, - /* 79 */ INVALID, - /* 7A */ INVALID, - /* 7B */ INVALID, - /* 7C */ INVALID, - /* 7D */ INVALID, - /* 7E */ INVALID, - /* 7F */ INVALID, - /* 80 */ INVALID, - /* 81 */ INVALID, - /* 82 */ INVALID, - /* 83 */ INVALID, - /* 84 */ INVALID, - /* 85 */ INVALID, - /* 86 */ INVALID, - /* 87 */ INVALID, - /* 88 */ INVALID, - /* 89 */ INVALID, - /* 8A */ INVALID, - /* 8B */ INVALID, - /* 8C */ INVALID, - /* 8D */ INVALID, - /* 8E */ INVALID, - /* 8F */ INVALID, - /* 90 */ INVALID, - /* 91 */ INVALID, - /* 92 */ INVALID, - /* 93 */ INVALID, - /* 94 */ INVALID, - /* 95 */ INVALID, - /* 96 */ INVALID, - /* 97 */ INVALID, - /* 98 */ INVALID, - /* 99 */ INVALID, - /* 9A */ INVALID, - /* 9B */ INVALID, - /* 9C */ INVALID, - /* 9D */ INVALID, - /* 9E */ INVALID, - /* 9F */ INVALID, - /* A0 */ INVALID, - /* A1 */ INVALID, - /* A2 */ INVALID, - /* A3 */ INVALID, - /* A4 */ INVALID, - /* A5 */ INVALID, - /* A6 */ INVALID, - /* A7 */ INVALID, - /* A8 */ INVALID, - /* A9 */ INVALID, - /* AA */ INVALID, - /* AB */ INVALID, - /* AC */ INVALID, - /* AD */ INVALID, - /* AE */ INVALID, - /* AF */ INVALID, - /* B0 */ INVALID, - /* B1 */ INVALID, - /* B2 */ INVALID, - /* B3 */ INVALID, - /* B4 */ INVALID, - /* B5 */ INVALID, - /* B6 */ INVALID, - /* B7 */ INVALID, - /* B8 */ INVALID, - /* B9 */ INVALID, - /* BA */ INVALID, - /* BB */ INVALID, - /* BC */ INVALID, - /* BD */ INVALID, - /* BE */ INVALID, - /* BF */ INVALID, - /* C0 */ INVALID, - /* C1 */ INVALID, - /* C2 */ INVALID, - /* C3 */ INVALID, - /* C4 */ INVALID, - /* C5 */ INVALID, - /* C6 */ INVALID, - /* C7 */ INVALID, - /* C8 */ INVALID, - /* C9 */ INVALID, - /* CA */ INVALID, - /* CB */ INVALID, - /* CC */ INVALID, - /* CD */ INVALID, - /* CE */ INVALID, - /* CF */ INVALID, - /* D0 */ INVALID, - /* D1 */ INVALID, - /* D2 */ INVALID, - /* D3 */ INVALID, - /* D4 */ INVALID, - /* D5 */ INVALID, - /* D6 */ INVALID, - /* D7 */ INVALID, - /* D8 */ INVALID, - /* D9 */ INVALID, - /* DA */ INVALID, - /* DB */ INVALID, - /* DC */ INVALID, - /* DD */ INVALID, - /* DE */ INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, /* DF */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0080), - /* E0 */ INVALID, - /* E1 */ INVALID, - /* E2 */ INVALID, - /* E3 */ INVALID, - /* E4 */ INVALID, - /* E5 */ INVALID, - /* E6 */ INVALID, - /* E7 */ INVALID, - /* E8 */ INVALID, - /* E9 */ INVALID, - /* EA */ INVALID, - /* EB */ INVALID, - /* EC */ INVALID, - /* ED */ INVALID, - /* EE */ INVALID, - /* EF */ INVALID, - /* F0 */ INVALID, - /* F1 */ INVALID, - /* F2 */ INVALID, - /* F3 */ INVALID, - /* F4 */ INVALID, - /* F5 */ INVALID, - /* F6 */ INVALID, - /* F7 */ INVALID, - /* F8 */ INVALID, - /* F9 */ INVALID, - /* FA */ INVALID, - /* FB */ INVALID, - /* FC */ INVALID, - /* FD */ INVALID, - /* FE */ INVALID, - /* FF */ INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, - /* 08 */ INVALID, - /* 09 */ INVALID, - /* 0A */ INVALID, - /* 0B */ INVALID, - /* 0C */ INVALID, - /* 0D */ INVALID, - /* 0E */ INVALID, - /* 0F */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, /* 10 */ 0x05E6, /* 11 */ 0x05E5, /* 12 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0008), @@ -1099,62 +1099,62 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 15 */ 0x0696, /* 16 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0009), /* 17 */ 0x05C7, - /* 18 */ INVALID, - /* 19 */ INVALID, - /* 1A */ INVALID, - /* 1B */ INVALID, - /* 1C */ INVALID, - /* 1D */ INVALID, - /* 1E */ INVALID, - /* 1F */ INVALID, - /* 20 */ INVALID, - /* 21 */ INVALID, - /* 22 */ INVALID, - /* 23 */ INVALID, - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, /* 28 */ 0x05B8, /* 29 */ 0x05B7, - /* 2A */ INVALID, + /* 2A */ VX_INVALID, /* 2B */ 0x05D2, - /* 2C */ INVALID, - /* 2D */ INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, /* 2E */ 0x0694, /* 2F */ 0x0581, - /* 30 */ INVALID, - /* 31 */ INVALID, - /* 32 */ INVALID, - /* 33 */ INVALID, - /* 34 */ INVALID, - /* 35 */ INVALID, - /* 36 */ INVALID, - /* 37 */ INVALID, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, - /* 40 */ INVALID, - /* 41 */ INVALID, - /* 42 */ INVALID, - /* 43 */ INVALID, - /* 44 */ INVALID, - /* 45 */ INVALID, - /* 46 */ INVALID, - /* 47 */ INVALID, - /* 48 */ INVALID, - /* 49 */ INVALID, - /* 4A */ INVALID, - /* 4B */ INVALID, - /* 4C */ INVALID, - /* 4D */ INVALID, - /* 4E */ INVALID, - /* 4F */ INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, /* 50 */ 0x05CE, /* 51 */ 0x0689, /* 52 */ 0x0684, @@ -1171,184 +1171,184 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 5D */ 0x05AF, /* 5E */ 0x0593, /* 5F */ 0x05A9, - /* 60 */ INVALID, - /* 61 */ INVALID, - /* 62 */ INVALID, - /* 63 */ INVALID, - /* 64 */ INVALID, - /* 65 */ INVALID, - /* 66 */ INVALID, - /* 67 */ INVALID, - /* 68 */ INVALID, - /* 69 */ INVALID, - /* 6A */ INVALID, - /* 6B */ INVALID, - /* 6C */ INVALID, - /* 6D */ INVALID, - /* 6E */ INVALID, - /* 6F */ INVALID, - /* 70 */ INVALID, - /* 71 */ INVALID, - /* 72 */ INVALID, - /* 73 */ INVALID, - /* 74 */ INVALID, - /* 75 */ INVALID, - /* 76 */ INVALID, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, /* 77 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0000), - /* 78 */ INVALID, - /* 79 */ INVALID, - /* 7A */ INVALID, - /* 7B */ INVALID, - /* 7C */ INVALID, - /* 7D */ INVALID, - /* 7E */ INVALID, - /* 7F */ INVALID, - /* 80 */ INVALID, - /* 81 */ INVALID, - /* 82 */ INVALID, - /* 83 */ INVALID, - /* 84 */ INVALID, - /* 85 */ INVALID, - /* 86 */ INVALID, - /* 87 */ INVALID, - /* 88 */ INVALID, - /* 89 */ INVALID, - /* 8A */ INVALID, - /* 8B */ INVALID, - /* 8C */ INVALID, - /* 8D */ INVALID, - /* 8E */ INVALID, - /* 8F */ INVALID, - /* 90 */ INVALID, - /* 91 */ INVALID, - /* 92 */ INVALID, - /* 93 */ INVALID, - /* 94 */ INVALID, - /* 95 */ INVALID, - /* 96 */ INVALID, - /* 97 */ INVALID, - /* 98 */ INVALID, - /* 99 */ INVALID, - /* 9A */ INVALID, - /* 9B */ INVALID, - /* 9C */ INVALID, - /* 9D */ INVALID, - /* 9E */ INVALID, - /* 9F */ INVALID, - /* A0 */ INVALID, - /* A1 */ INVALID, - /* A2 */ INVALID, - /* A3 */ INVALID, - /* A4 */ INVALID, - /* A5 */ INVALID, - /* A6 */ INVALID, - /* A7 */ INVALID, - /* A8 */ INVALID, - /* A9 */ INVALID, - /* AA */ INVALID, - /* AB */ INVALID, - /* AC */ INVALID, - /* AD */ INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, /* AE */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000A), - /* AF */ INVALID, - /* B0 */ INVALID, - /* B1 */ INVALID, - /* B2 */ INVALID, - /* B3 */ INVALID, - /* B4 */ INVALID, - /* B5 */ INVALID, - /* B6 */ INVALID, - /* B7 */ INVALID, - /* B8 */ INVALID, - /* B9 */ INVALID, - /* BA */ INVALID, - /* BB */ INVALID, - /* BC */ INVALID, - /* BD */ INVALID, - /* BE */ INVALID, - /* BF */ INVALID, - /* C0 */ INVALID, - /* C1 */ INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, /* C2 */ 0x057D, - /* C3 */ INVALID, - /* C4 */ INVALID, - /* C5 */ INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, /* C6 */ 0x0687, - /* C7 */ INVALID, - /* C8 */ INVALID, - /* C9 */ INVALID, - /* CA */ INVALID, - /* CB */ INVALID, - /* CC */ INVALID, - /* CD */ INVALID, - /* CE */ INVALID, - /* CF */ INVALID, - /* D0 */ INVALID, - /* D1 */ INVALID, - /* D2 */ INVALID, - /* D3 */ INVALID, - /* D4 */ INVALID, - /* D5 */ INVALID, - /* D6 */ INVALID, - /* D7 */ INVALID, - /* D8 */ INVALID, - /* D9 */ INVALID, - /* DA */ INVALID, - /* DB */ INVALID, - /* DC */ INVALID, - /* DD */ INVALID, - /* DE */ INVALID, - /* DF */ INVALID, - /* E0 */ INVALID, - /* E1 */ INVALID, - /* E2 */ INVALID, - /* E3 */ INVALID, - /* E4 */ INVALID, - /* E5 */ INVALID, - /* E6 */ INVALID, - /* E7 */ INVALID, - /* E8 */ INVALID, - /* E9 */ INVALID, - /* EA */ INVALID, - /* EB */ INVALID, - /* EC */ INVALID, - /* ED */ INVALID, - /* EE */ INVALID, - /* EF */ INVALID, - /* F0 */ INVALID, - /* F1 */ INVALID, - /* F2 */ INVALID, - /* F3 */ INVALID, - /* F4 */ INVALID, - /* F5 */ INVALID, - /* F6 */ INVALID, - /* F7 */ INVALID, - /* F8 */ INVALID, - /* F9 */ INVALID, - /* FA */ INVALID, - /* FB */ INVALID, - /* FC */ INVALID, - /* FD */ INVALID, - /* FE */ INVALID, - /* FF */ INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ VX_INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, - /* 08 */ INVALID, - /* 09 */ INVALID, - /* 0A */ INVALID, - /* 0B */ INVALID, - /* 0C */ INVALID, - /* 0D */ INVALID, - /* 0E */ INVALID, - /* 0F */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, /* 10 */ 0x05E4, /* 11 */ 0x05E3, /* 12 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000B), @@ -1357,66 +1357,66 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 15 */ 0x0695, /* 16 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000C), /* 17 */ 0x05C5, - /* 18 */ INVALID, - /* 19 */ INVALID, - /* 1A */ INVALID, - /* 1B */ INVALID, - /* 1C */ INVALID, - /* 1D */ INVALID, - /* 1E */ INVALID, - /* 1F */ INVALID, - /* 20 */ INVALID, - /* 21 */ INVALID, - /* 22 */ INVALID, - /* 23 */ INVALID, - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, /* 28 */ 0x05B5, /* 29 */ 0x05B6, - /* 2A */ INVALID, + /* 2A */ VX_INVALID, /* 2B */ 0x05D1, - /* 2C */ INVALID, - /* 2D */ INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, /* 2E */ 0x0693, /* 2F */ 0x0580, - /* 30 */ INVALID, - /* 31 */ INVALID, - /* 32 */ INVALID, - /* 33 */ INVALID, - /* 34 */ INVALID, - /* 35 */ INVALID, - /* 36 */ INVALID, - /* 37 */ INVALID, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, - /* 40 */ INVALID, - /* 41 */ INVALID, - /* 42 */ INVALID, - /* 43 */ INVALID, - /* 44 */ INVALID, - /* 45 */ INVALID, - /* 46 */ INVALID, - /* 47 */ INVALID, - /* 48 */ INVALID, - /* 49 */ INVALID, - /* 4A */ INVALID, - /* 4B */ INVALID, - /* 4C */ INVALID, - /* 4D */ INVALID, - /* 4E */ INVALID, - /* 4F */ INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, /* 50 */ 0x05CD, /* 51 */ 0x0688, - /* 52 */ INVALID, - /* 53 */ INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, /* 54 */ 0x0574, /* 55 */ 0x0572, /* 56 */ 0x05F5, @@ -1452,95 +1452,95 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 74 */ 0x060E, /* 75 */ 0x0611, /* 76 */ 0x060F, - /* 77 */ INVALID, - /* 78 */ INVALID, - /* 79 */ INVALID, - /* 7A */ INVALID, - /* 7B */ INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, /* 7C */ 0x059C, /* 7D */ 0x059E, /* 7E */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0015), /* 7F */ 0x05C0, - /* 80 */ INVALID, - /* 81 */ INVALID, - /* 82 */ INVALID, - /* 83 */ INVALID, - /* 84 */ INVALID, - /* 85 */ INVALID, - /* 86 */ INVALID, - /* 87 */ INVALID, - /* 88 */ INVALID, - /* 89 */ INVALID, - /* 8A */ INVALID, - /* 8B */ INVALID, - /* 8C */ INVALID, - /* 8D */ INVALID, - /* 8E */ INVALID, - /* 8F */ INVALID, - /* 90 */ INVALID, - /* 91 */ INVALID, - /* 92 */ INVALID, - /* 93 */ INVALID, - /* 94 */ INVALID, - /* 95 */ INVALID, - /* 96 */ INVALID, - /* 97 */ INVALID, - /* 98 */ INVALID, - /* 99 */ INVALID, - /* 9A */ INVALID, - /* 9B */ INVALID, - /* 9C */ INVALID, - /* 9D */ INVALID, - /* 9E */ INVALID, - /* 9F */ INVALID, - /* A0 */ INVALID, - /* A1 */ INVALID, - /* A2 */ INVALID, - /* A3 */ INVALID, - /* A4 */ INVALID, - /* A5 */ INVALID, - /* A6 */ INVALID, - /* A7 */ INVALID, - /* A8 */ INVALID, - /* A9 */ INVALID, - /* AA */ INVALID, - /* AB */ INVALID, - /* AC */ INVALID, - /* AD */ INVALID, - /* AE */ INVALID, - /* AF */ INVALID, - /* B0 */ INVALID, - /* B1 */ INVALID, - /* B2 */ INVALID, - /* B3 */ INVALID, - /* B4 */ INVALID, - /* B5 */ INVALID, - /* B6 */ INVALID, - /* B7 */ INVALID, - /* B8 */ INVALID, - /* B9 */ INVALID, - /* BA */ INVALID, - /* BB */ INVALID, - /* BC */ INVALID, - /* BD */ INVALID, - /* BE */ INVALID, - /* BF */ INVALID, - /* C0 */ INVALID, - /* C1 */ INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, /* C2 */ 0x057C, - /* C3 */ INVALID, + /* C3 */ VX_INVALID, /* C4 */ 0x0630, /* C5 */ 0x0623, /* C6 */ 0x0686, - /* C7 */ INVALID, - /* C8 */ INVALID, - /* C9 */ INVALID, - /* CA */ INVALID, - /* CB */ INVALID, - /* CC */ INVALID, - /* CD */ INVALID, - /* CE */ INVALID, - /* CF */ INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, /* D0 */ 0x056A, /* D1 */ 0x066B, /* D2 */ 0x0665, @@ -1573,11 +1573,11 @@ const VXOpcodeTreeNode optreeTable[][256] = /* ED */ 0x0602, /* EE */ 0x0635, /* EF */ 0x067D, - /* F0 */ INVALID, + /* F0 */ VX_INVALID, /* F1 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0005), /* F2 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0006), /* F3 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0007), - /* F4 */ INVALID, + /* F4 */ VX_INVALID, /* F5 */ 0x0632, /* F6 */ 0x0652, /* F7 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000D), @@ -1588,7 +1588,7 @@ const VXOpcodeTreeNode optreeTable[][256] = /* FC */ 0x05FE, /* FD */ 0x0605, /* FE */ 0x05FF, - /* FF */ INVALID, + /* FF */ VX_INVALID, }, { /* 00 */ 0x0653, @@ -1607,30 +1607,30 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 0D */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0001), /* 0E */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0002), /* 0F */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0003), - /* 10 */ INVALID, - /* 11 */ INVALID, - /* 12 */ INVALID, - /* 13 */ INVALID, - /* 14 */ INVALID, - /* 15 */ INVALID, - /* 16 */ INVALID, + /* 10 */ VX_INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, + /* 16 */ VX_INVALID, /* 17 */ 0x0674, /* 18 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0004), /* 19 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0005), - /* 1A */ INVALID, - /* 1B */ INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, /* 1C */ 0x05F7, /* 1D */ 0x05F9, /* 1E */ 0x05F8, - /* 1F */ INVALID, + /* 1F */ VX_INVALID, /* 20 */ 0x0642, /* 21 */ 0x0640, /* 22 */ 0x0641, /* 23 */ 0x0643, /* 24 */ 0x0644, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, /* 28 */ 0x064B, /* 29 */ 0x0610, /* 2A */ 0x05D0, @@ -1645,7 +1645,7 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 33 */ 0x0649, /* 34 */ 0x064A, /* 35 */ 0x0648, - /* 36 */ INVALID, + /* 36 */ VX_INVALID, /* 37 */ 0x0616, /* 38 */ 0x0639, /* 39 */ 0x063A, @@ -1657,206 +1657,206 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 3F */ 0x0637, /* 40 */ 0x064F, /* 41 */ 0x0628, - /* 42 */ INVALID, - /* 43 */ INVALID, - /* 44 */ INVALID, - /* 45 */ INVALID, - /* 46 */ INVALID, - /* 47 */ INVALID, - /* 48 */ INVALID, - /* 49 */ INVALID, - /* 4A */ INVALID, - /* 4B */ INVALID, - /* 4C */ INVALID, - /* 4D */ INVALID, - /* 4E */ INVALID, - /* 4F */ INVALID, - /* 50 */ INVALID, - /* 51 */ INVALID, - /* 52 */ INVALID, - /* 53 */ INVALID, - /* 54 */ INVALID, - /* 55 */ INVALID, - /* 56 */ INVALID, - /* 57 */ INVALID, - /* 58 */ INVALID, - /* 59 */ INVALID, - /* 5A */ INVALID, - /* 5B */ INVALID, - /* 5C */ INVALID, - /* 5D */ INVALID, - /* 5E */ INVALID, - /* 5F */ INVALID, - /* 60 */ INVALID, - /* 61 */ INVALID, - /* 62 */ INVALID, - /* 63 */ INVALID, - /* 64 */ INVALID, - /* 65 */ INVALID, - /* 66 */ INVALID, - /* 67 */ INVALID, - /* 68 */ INVALID, - /* 69 */ INVALID, - /* 6A */ INVALID, - /* 6B */ INVALID, - /* 6C */ INVALID, - /* 6D */ INVALID, - /* 6E */ INVALID, - /* 6F */ INVALID, - /* 70 */ INVALID, - /* 71 */ INVALID, - /* 72 */ INVALID, - /* 73 */ INVALID, - /* 74 */ INVALID, - /* 75 */ INVALID, - /* 76 */ INVALID, - /* 77 */ INVALID, - /* 78 */ INVALID, - /* 79 */ INVALID, - /* 7A */ INVALID, - /* 7B */ INVALID, - /* 7C */ INVALID, - /* 7D */ INVALID, - /* 7E */ INVALID, - /* 7F */ INVALID, - /* 80 */ INVALID, - /* 81 */ INVALID, - /* 82 */ INVALID, - /* 83 */ INVALID, - /* 84 */ INVALID, - /* 85 */ INVALID, - /* 86 */ INVALID, - /* 87 */ INVALID, - /* 88 */ INVALID, - /* 89 */ INVALID, - /* 8A */ INVALID, - /* 8B */ INVALID, - /* 8C */ INVALID, - /* 8D */ INVALID, - /* 8E */ INVALID, - /* 8F */ INVALID, - /* 90 */ INVALID, - /* 91 */ INVALID, - /* 92 */ INVALID, - /* 93 */ INVALID, - /* 94 */ INVALID, - /* 95 */ INVALID, - /* 96 */ INVALID, - /* 97 */ INVALID, - /* 98 */ INVALID, - /* 99 */ INVALID, - /* 9A */ INVALID, - /* 9B */ INVALID, - /* 9C */ INVALID, - /* 9D */ INVALID, - /* 9E */ INVALID, - /* 9F */ INVALID, - /* A0 */ INVALID, - /* A1 */ INVALID, - /* A2 */ INVALID, - /* A3 */ INVALID, - /* A4 */ INVALID, - /* A5 */ INVALID, - /* A6 */ INVALID, - /* A7 */ INVALID, - /* A8 */ INVALID, - /* A9 */ INVALID, - /* AA */ INVALID, - /* AB */ INVALID, - /* AC */ INVALID, - /* AD */ INVALID, - /* AE */ INVALID, - /* AF */ INVALID, - /* B0 */ INVALID, - /* B1 */ INVALID, - /* B2 */ INVALID, - /* B3 */ INVALID, - /* B4 */ INVALID, - /* B5 */ INVALID, - /* B6 */ INVALID, - /* B7 */ INVALID, - /* B8 */ INVALID, - /* B9 */ INVALID, - /* BA */ INVALID, - /* BB */ INVALID, - /* BC */ INVALID, - /* BD */ INVALID, - /* BE */ INVALID, - /* BF */ INVALID, - /* C0 */ INVALID, - /* C1 */ INVALID, - /* C2 */ INVALID, - /* C3 */ INVALID, - /* C4 */ INVALID, - /* C5 */ INVALID, - /* C6 */ INVALID, - /* C7 */ INVALID, - /* C8 */ INVALID, - /* C9 */ INVALID, - /* CA */ INVALID, - /* CB */ INVALID, - /* CC */ INVALID, - /* CD */ INVALID, - /* CE */ INVALID, - /* CF */ INVALID, - /* D0 */ INVALID, - /* D1 */ INVALID, - /* D2 */ INVALID, - /* D3 */ INVALID, - /* D4 */ INVALID, - /* D5 */ INVALID, - /* D6 */ INVALID, - /* D7 */ INVALID, - /* D8 */ INVALID, - /* D9 */ INVALID, - /* DA */ INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, /* DB */ 0x0570, /* DC */ 0x056E, /* DD */ 0x056F, /* DE */ 0x056C, /* DF */ 0x056D, - /* E0 */ INVALID, - /* E1 */ INVALID, - /* E2 */ INVALID, - /* E3 */ INVALID, - /* E4 */ INVALID, - /* E5 */ INVALID, - /* E6 */ INVALID, - /* E7 */ INVALID, - /* E8 */ INVALID, - /* E9 */ INVALID, - /* EA */ INVALID, - /* EB */ INVALID, - /* EC */ INVALID, - /* ED */ INVALID, - /* EE */ INVALID, - /* EF */ INVALID, - /* F0 */ INVALID, - /* F1 */ INVALID, - /* F2 */ INVALID, - /* F3 */ INVALID, - /* F4 */ INVALID, - /* F5 */ INVALID, - /* F6 */ INVALID, - /* F7 */ INVALID, - /* F8 */ INVALID, - /* F9 */ INVALID, - /* FA */ INVALID, - /* FB */ INVALID, - /* FC */ INVALID, - /* FD */ INVALID, - /* FE */ INVALID, - /* FF */ INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, /* 04 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000A), /* 05 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000B), /* 06 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000C), - /* 07 */ INVALID, + /* 07 */ VX_INVALID, /* 08 */ 0x0681, /* 09 */ 0x0680, /* 0A */ 0x0683, @@ -1865,336 +1865,336 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 0D */ 0x0576, /* 0E */ 0x060C, /* 0F */ 0x0606, - /* 10 */ INVALID, - /* 11 */ INVALID, - /* 12 */ INVALID, - /* 13 */ INVALID, + /* 10 */ VX_INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, /* 14 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000D), /* 15 */ 0x0624, /* 16 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0016), /* 17 */ 0x059B, /* 18 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0011), /* 19 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0012), - /* 1A */ INVALID, - /* 1B */ INVALID, - /* 1C */ INVALID, - /* 1D */ INVALID, - /* 1E */ INVALID, - /* 1F */ INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, /* 20 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0013), /* 21 */ 0x05A1, /* 22 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0025), - /* 23 */ INVALID, - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, - /* 28 */ INVALID, - /* 29 */ INVALID, - /* 2A */ INVALID, - /* 2B */ INVALID, - /* 2C */ INVALID, - /* 2D */ INVALID, - /* 2E */ INVALID, - /* 2F */ INVALID, - /* 30 */ INVALID, - /* 31 */ INVALID, - /* 32 */ INVALID, - /* 33 */ INVALID, - /* 34 */ INVALID, - /* 35 */ INVALID, - /* 36 */ INVALID, - /* 37 */ INVALID, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, + /* 2A */ VX_INVALID, + /* 2B */ VX_INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, /* 40 */ 0x0597, /* 41 */ 0x0596, /* 42 */ 0x05E7, - /* 43 */ INVALID, + /* 43 */ VX_INVALID, /* 44 */ 0x060D, - /* 45 */ INVALID, - /* 46 */ INVALID, - /* 47 */ INVALID, - /* 48 */ INVALID, - /* 49 */ INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, /* 4A */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0016), /* 4B */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0017), /* 4C */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0018), - /* 4D */ INVALID, - /* 4E */ INVALID, - /* 4F */ INVALID, - /* 50 */ INVALID, - /* 51 */ INVALID, - /* 52 */ INVALID, - /* 53 */ INVALID, - /* 54 */ INVALID, - /* 55 */ INVALID, - /* 56 */ INVALID, - /* 57 */ INVALID, - /* 58 */ INVALID, - /* 59 */ INVALID, - /* 5A */ INVALID, - /* 5B */ INVALID, - /* 5C */ INVALID, - /* 5D */ INVALID, - /* 5E */ INVALID, - /* 5F */ INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, /* 60 */ 0x0613, /* 61 */ 0x0612, /* 62 */ 0x0619, /* 63 */ 0x0618, - /* 64 */ INVALID, - /* 65 */ INVALID, - /* 66 */ INVALID, - /* 67 */ INVALID, - /* 68 */ INVALID, - /* 69 */ INVALID, - /* 6A */ INVALID, - /* 6B */ INVALID, - /* 6C */ INVALID, - /* 6D */ INVALID, - /* 6E */ INVALID, - /* 6F */ INVALID, - /* 70 */ INVALID, - /* 71 */ INVALID, - /* 72 */ INVALID, - /* 73 */ INVALID, - /* 74 */ INVALID, - /* 75 */ INVALID, - /* 76 */ INVALID, - /* 77 */ INVALID, - /* 78 */ INVALID, - /* 79 */ INVALID, - /* 7A */ INVALID, - /* 7B */ INVALID, - /* 7C */ INVALID, - /* 7D */ INVALID, - /* 7E */ INVALID, - /* 7F */ INVALID, - /* 80 */ INVALID, - /* 81 */ INVALID, - /* 82 */ INVALID, - /* 83 */ INVALID, - /* 84 */ INVALID, - /* 85 */ INVALID, - /* 86 */ INVALID, - /* 87 */ INVALID, - /* 88 */ INVALID, - /* 89 */ INVALID, - /* 8A */ INVALID, - /* 8B */ INVALID, - /* 8C */ INVALID, - /* 8D */ INVALID, - /* 8E */ INVALID, - /* 8F */ INVALID, - /* 90 */ INVALID, - /* 91 */ INVALID, - /* 92 */ INVALID, - /* 93 */ INVALID, - /* 94 */ INVALID, - /* 95 */ INVALID, - /* 96 */ INVALID, - /* 97 */ INVALID, - /* 98 */ INVALID, - /* 99 */ INVALID, - /* 9A */ INVALID, - /* 9B */ INVALID, - /* 9C */ INVALID, - /* 9D */ INVALID, - /* 9E */ INVALID, - /* 9F */ INVALID, - /* A0 */ INVALID, - /* A1 */ INVALID, - /* A2 */ INVALID, - /* A3 */ INVALID, - /* A4 */ INVALID, - /* A5 */ INVALID, - /* A6 */ INVALID, - /* A7 */ INVALID, - /* A8 */ INVALID, - /* A9 */ INVALID, - /* AA */ INVALID, - /* AB */ INVALID, - /* AC */ INVALID, - /* AD */ INVALID, - /* AE */ INVALID, - /* AF */ INVALID, - /* B0 */ INVALID, - /* B1 */ INVALID, - /* B2 */ INVALID, - /* B3 */ INVALID, - /* B4 */ INVALID, - /* B5 */ INVALID, - /* B6 */ INVALID, - /* B7 */ INVALID, - /* B8 */ INVALID, - /* B9 */ INVALID, - /* BA */ INVALID, - /* BB */ INVALID, - /* BC */ INVALID, - /* BD */ INVALID, - /* BE */ INVALID, - /* BF */ INVALID, - /* C0 */ INVALID, - /* C1 */ INVALID, - /* C2 */ INVALID, - /* C3 */ INVALID, - /* C4 */ INVALID, - /* C5 */ INVALID, - /* C6 */ INVALID, - /* C7 */ INVALID, - /* C8 */ INVALID, - /* C9 */ INVALID, - /* CA */ INVALID, - /* CB */ INVALID, - /* CC */ INVALID, - /* CD */ INVALID, - /* CE */ INVALID, - /* CF */ INVALID, - /* D0 */ INVALID, - /* D1 */ INVALID, - /* D2 */ INVALID, - /* D3 */ INVALID, - /* D4 */ INVALID, - /* D5 */ INVALID, - /* D6 */ INVALID, - /* D7 */ INVALID, - /* D8 */ INVALID, - /* D9 */ INVALID, - /* DA */ INVALID, - /* DB */ INVALID, - /* DC */ INVALID, - /* DD */ INVALID, - /* DE */ INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, /* DF */ 0x0571, - /* E0 */ INVALID, - /* E1 */ INVALID, - /* E2 */ INVALID, - /* E3 */ INVALID, - /* E4 */ INVALID, - /* E5 */ INVALID, - /* E6 */ INVALID, - /* E7 */ INVALID, - /* E8 */ INVALID, - /* E9 */ INVALID, - /* EA */ INVALID, - /* EB */ INVALID, - /* EC */ INVALID, - /* ED */ INVALID, - /* EE */ INVALID, - /* EF */ INVALID, - /* F0 */ INVALID, - /* F1 */ INVALID, - /* F2 */ INVALID, - /* F3 */ INVALID, - /* F4 */ INVALID, - /* F5 */ INVALID, - /* F6 */ INVALID, - /* F7 */ INVALID, - /* F8 */ INVALID, - /* F9 */ INVALID, - /* FA */ INVALID, - /* FB */ INVALID, - /* FC */ INVALID, - /* FD */ INVALID, - /* FE */ INVALID, - /* FF */ INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, - /* 08 */ INVALID, - /* 09 */ INVALID, - /* 0A */ INVALID, - /* 0B */ INVALID, - /* 0C */ INVALID, - /* 0D */ INVALID, - /* 0E */ INVALID, - /* 0F */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, /* 10 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000E), /* 11 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000F), /* 12 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0010), - /* 13 */ INVALID, - /* 14 */ INVALID, - /* 15 */ INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, /* 16 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0011), - /* 17 */ INVALID, - /* 18 */ INVALID, - /* 19 */ INVALID, - /* 1A */ INVALID, - /* 1B */ INVALID, - /* 1C */ INVALID, - /* 1D */ INVALID, - /* 1E */ INVALID, - /* 1F */ INVALID, - /* 20 */ INVALID, - /* 21 */ INVALID, - /* 22 */ INVALID, - /* 23 */ INVALID, - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, - /* 28 */ INVALID, - /* 29 */ INVALID, + /* 17 */ VX_INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, /* 2A */ 0x058B, - /* 2B */ INVALID, + /* 2B */ VX_INVALID, /* 2C */ 0x0591, /* 2D */ 0x058D, - /* 2E */ INVALID, - /* 2F */ INVALID, - /* 30 */ INVALID, - /* 31 */ INVALID, - /* 32 */ INVALID, - /* 33 */ INVALID, - /* 34 */ INVALID, - /* 35 */ INVALID, - /* 36 */ INVALID, - /* 37 */ INVALID, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, - /* 40 */ INVALID, - /* 41 */ INVALID, - /* 42 */ INVALID, - /* 43 */ INVALID, - /* 44 */ INVALID, - /* 45 */ INVALID, - /* 46 */ INVALID, - /* 47 */ INVALID, - /* 48 */ INVALID, - /* 49 */ INVALID, - /* 4A */ INVALID, - /* 4B */ INVALID, - /* 4C */ INVALID, - /* 4D */ INVALID, - /* 4E */ INVALID, - /* 4F */ INVALID, - /* 50 */ INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, /* 51 */ 0x068B, /* 52 */ 0x0685, /* 53 */ 0x067F, - /* 54 */ INVALID, - /* 55 */ INVALID, - /* 56 */ INVALID, - /* 57 */ INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, /* 58 */ 0x0569, /* 59 */ 0x05F1, /* 5A */ 0x058C, @@ -2203,424 +2203,424 @@ const VXOpcodeTreeNode optreeTable[][256] = /* 5D */ 0x05B1, /* 5E */ 0x0595, /* 5F */ 0x05AB, - /* 60 */ INVALID, - /* 61 */ INVALID, - /* 62 */ INVALID, - /* 63 */ INVALID, - /* 64 */ INVALID, - /* 65 */ INVALID, - /* 66 */ INVALID, - /* 67 */ INVALID, - /* 68 */ INVALID, - /* 69 */ INVALID, - /* 6A */ INVALID, - /* 6B */ INVALID, - /* 6C */ INVALID, - /* 6D */ INVALID, - /* 6E */ INVALID, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, /* 6F */ 0x05C2, /* 70 */ 0x0655, - /* 71 */ INVALID, - /* 72 */ INVALID, - /* 73 */ INVALID, - /* 74 */ INVALID, - /* 75 */ INVALID, - /* 76 */ INVALID, - /* 77 */ INVALID, - /* 78 */ INVALID, - /* 79 */ INVALID, - /* 7A */ INVALID, - /* 7B */ INVALID, - /* 7C */ INVALID, - /* 7D */ INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, /* 7E */ 0x05D3, /* 7F */ 0x05C1, - /* 80 */ INVALID, - /* 81 */ INVALID, - /* 82 */ INVALID, - /* 83 */ INVALID, - /* 84 */ INVALID, - /* 85 */ INVALID, - /* 86 */ INVALID, - /* 87 */ INVALID, - /* 88 */ INVALID, - /* 89 */ INVALID, - /* 8A */ INVALID, - /* 8B */ INVALID, - /* 8C */ INVALID, - /* 8D */ INVALID, - /* 8E */ INVALID, - /* 8F */ INVALID, - /* 90 */ INVALID, - /* 91 */ INVALID, - /* 92 */ INVALID, - /* 93 */ INVALID, - /* 94 */ INVALID, - /* 95 */ INVALID, - /* 96 */ INVALID, - /* 97 */ INVALID, - /* 98 */ INVALID, - /* 99 */ INVALID, - /* 9A */ INVALID, - /* 9B */ INVALID, - /* 9C */ INVALID, - /* 9D */ INVALID, - /* 9E */ INVALID, - /* 9F */ INVALID, - /* A0 */ INVALID, - /* A1 */ INVALID, - /* A2 */ INVALID, - /* A3 */ INVALID, - /* A4 */ INVALID, - /* A5 */ INVALID, - /* A6 */ INVALID, - /* A7 */ INVALID, - /* A8 */ INVALID, - /* A9 */ INVALID, - /* AA */ INVALID, - /* AB */ INVALID, - /* AC */ INVALID, - /* AD */ INVALID, - /* AE */ INVALID, - /* AF */ INVALID, - /* B0 */ INVALID, - /* B1 */ INVALID, - /* B2 */ INVALID, - /* B3 */ INVALID, - /* B4 */ INVALID, - /* B5 */ INVALID, - /* B6 */ INVALID, - /* B7 */ INVALID, - /* B8 */ INVALID, - /* B9 */ INVALID, - /* BA */ INVALID, - /* BB */ INVALID, - /* BC */ INVALID, - /* BD */ INVALID, - /* BE */ INVALID, - /* BF */ INVALID, - /* C0 */ INVALID, - /* C1 */ INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, /* C2 */ 0x057F, - /* C3 */ INVALID, - /* C4 */ INVALID, - /* C5 */ INVALID, - /* C6 */ INVALID, - /* C7 */ INVALID, - /* C8 */ INVALID, - /* C9 */ INVALID, - /* CA */ INVALID, - /* CB */ INVALID, - /* CC */ INVALID, - /* CD */ INVALID, - /* CE */ INVALID, - /* CF */ INVALID, - /* D0 */ INVALID, - /* D1 */ INVALID, - /* D2 */ INVALID, - /* D3 */ INVALID, - /* D4 */ INVALID, - /* D5 */ INVALID, - /* D6 */ INVALID, - /* D7 */ INVALID, - /* D8 */ INVALID, - /* D9 */ INVALID, - /* DA */ INVALID, - /* DB */ INVALID, - /* DC */ INVALID, - /* DD */ INVALID, - /* DE */ INVALID, - /* DF */ INVALID, - /* E0 */ INVALID, - /* E1 */ INVALID, - /* E2 */ INVALID, - /* E3 */ INVALID, - /* E4 */ INVALID, - /* E5 */ INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ VX_INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, /* E6 */ 0x0582, - /* E7 */ INVALID, - /* E8 */ INVALID, - /* E9 */ INVALID, - /* EA */ INVALID, - /* EB */ INVALID, - /* EC */ INVALID, - /* ED */ INVALID, - /* EE */ INVALID, - /* EF */ INVALID, - /* F0 */ INVALID, - /* F1 */ INVALID, - /* F2 */ INVALID, - /* F3 */ INVALID, - /* F4 */ INVALID, - /* F5 */ INVALID, - /* F6 */ INVALID, - /* F7 */ INVALID, - /* F8 */ INVALID, - /* F9 */ INVALID, - /* FA */ INVALID, - /* FB */ INVALID, - /* FC */ INVALID, - /* FD */ INVALID, - /* FE */ INVALID, - /* FF */ INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, - /* 08 */ INVALID, - /* 09 */ INVALID, - /* 0A */ INVALID, - /* 0B */ INVALID, - /* 0C */ INVALID, - /* 0D */ INVALID, - /* 0E */ INVALID, - /* 0F */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, + /* 0D */ VX_INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, /* 10 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0012), /* 11 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0013), /* 12 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0014), - /* 13 */ INVALID, - /* 14 */ INVALID, - /* 15 */ INVALID, - /* 16 */ INVALID, - /* 17 */ INVALID, - /* 18 */ INVALID, - /* 19 */ INVALID, - /* 1A */ INVALID, - /* 1B */ INVALID, - /* 1C */ INVALID, - /* 1D */ INVALID, - /* 1E */ INVALID, - /* 1F */ INVALID, - /* 20 */ INVALID, - /* 21 */ INVALID, - /* 22 */ INVALID, - /* 23 */ INVALID, - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, - /* 28 */ INVALID, - /* 29 */ INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, + /* 16 */ VX_INVALID, + /* 17 */ VX_INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, /* 2A */ 0x058A, - /* 2B */ INVALID, + /* 2B */ VX_INVALID, /* 2C */ 0x0590, /* 2D */ 0x0588, - /* 2E */ INVALID, - /* 2F */ INVALID, - /* 30 */ INVALID, - /* 31 */ INVALID, - /* 32 */ INVALID, - /* 33 */ INVALID, - /* 34 */ INVALID, - /* 35 */ INVALID, - /* 36 */ INVALID, - /* 37 */ INVALID, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, - /* 40 */ INVALID, - /* 41 */ INVALID, - /* 42 */ INVALID, - /* 43 */ INVALID, - /* 44 */ INVALID, - /* 45 */ INVALID, - /* 46 */ INVALID, - /* 47 */ INVALID, - /* 48 */ INVALID, - /* 49 */ INVALID, - /* 4A */ INVALID, - /* 4B */ INVALID, - /* 4C */ INVALID, - /* 4D */ INVALID, - /* 4E */ INVALID, - /* 4F */ INVALID, - /* 50 */ INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, /* 51 */ 0x068A, - /* 52 */ INVALID, - /* 53 */ INVALID, - /* 54 */ INVALID, - /* 55 */ INVALID, - /* 56 */ INVALID, - /* 57 */ INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, /* 58 */ 0x0568, /* 59 */ 0x05F0, /* 5A */ 0x0589, - /* 5B */ INVALID, + /* 5B */ VX_INVALID, /* 5C */ 0x068F, /* 5D */ 0x05B0, /* 5E */ 0x0594, /* 5F */ 0x05AA, - /* 60 */ INVALID, - /* 61 */ INVALID, - /* 62 */ INVALID, - /* 63 */ INVALID, - /* 64 */ INVALID, - /* 65 */ INVALID, - /* 66 */ INVALID, - /* 67 */ INVALID, - /* 68 */ INVALID, - /* 69 */ INVALID, - /* 6A */ INVALID, - /* 6B */ INVALID, - /* 6C */ INVALID, - /* 6D */ INVALID, - /* 6E */ INVALID, - /* 6F */ INVALID, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, /* 70 */ 0x0656, - /* 71 */ INVALID, - /* 72 */ INVALID, - /* 73 */ INVALID, - /* 74 */ INVALID, - /* 75 */ INVALID, - /* 76 */ INVALID, - /* 77 */ INVALID, - /* 78 */ INVALID, - /* 79 */ INVALID, - /* 7A */ INVALID, - /* 7B */ INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, /* 7C */ 0x059D, /* 7D */ 0x059F, - /* 7E */ INVALID, - /* 7F */ INVALID, - /* 80 */ INVALID, - /* 81 */ INVALID, - /* 82 */ INVALID, - /* 83 */ INVALID, - /* 84 */ INVALID, - /* 85 */ INVALID, - /* 86 */ INVALID, - /* 87 */ INVALID, - /* 88 */ INVALID, - /* 89 */ INVALID, - /* 8A */ INVALID, - /* 8B */ INVALID, - /* 8C */ INVALID, - /* 8D */ INVALID, - /* 8E */ INVALID, - /* 8F */ INVALID, - /* 90 */ INVALID, - /* 91 */ INVALID, - /* 92 */ INVALID, - /* 93 */ INVALID, - /* 94 */ INVALID, - /* 95 */ INVALID, - /* 96 */ INVALID, - /* 97 */ INVALID, - /* 98 */ INVALID, - /* 99 */ INVALID, - /* 9A */ INVALID, - /* 9B */ INVALID, - /* 9C */ INVALID, - /* 9D */ INVALID, - /* 9E */ INVALID, - /* 9F */ INVALID, - /* A0 */ INVALID, - /* A1 */ INVALID, - /* A2 */ INVALID, - /* A3 */ INVALID, - /* A4 */ INVALID, - /* A5 */ INVALID, - /* A6 */ INVALID, - /* A7 */ INVALID, - /* A8 */ INVALID, - /* A9 */ INVALID, - /* AA */ INVALID, - /* AB */ INVALID, - /* AC */ INVALID, - /* AD */ INVALID, - /* AE */ INVALID, - /* AF */ INVALID, - /* B0 */ INVALID, - /* B1 */ INVALID, - /* B2 */ INVALID, - /* B3 */ INVALID, - /* B4 */ INVALID, - /* B5 */ INVALID, - /* B6 */ INVALID, - /* B7 */ INVALID, - /* B8 */ INVALID, - /* B9 */ INVALID, - /* BA */ INVALID, - /* BB */ INVALID, - /* BC */ INVALID, - /* BD */ INVALID, - /* BE */ INVALID, - /* BF */ INVALID, - /* C0 */ INVALID, - /* C1 */ INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, + /* 8A */ VX_INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, + /* 8E */ VX_INVALID, + /* 8F */ VX_INVALID, + /* 90 */ VX_INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, + /* 94 */ VX_INVALID, + /* 95 */ VX_INVALID, + /* 96 */ VX_INVALID, + /* 97 */ VX_INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, + /* 9A */ VX_INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, + /* 9E */ VX_INVALID, + /* 9F */ VX_INVALID, + /* A0 */ VX_INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, + /* A4 */ VX_INVALID, + /* A5 */ VX_INVALID, + /* A6 */ VX_INVALID, + /* A7 */ VX_INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, + /* AA */ VX_INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, + /* AE */ VX_INVALID, + /* AF */ VX_INVALID, + /* B0 */ VX_INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, + /* B4 */ VX_INVALID, + /* B5 */ VX_INVALID, + /* B6 */ VX_INVALID, + /* B7 */ VX_INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, + /* BB */ VX_INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, + /* BF */ VX_INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, /* C2 */ 0x057E, - /* C3 */ INVALID, - /* C4 */ INVALID, - /* C5 */ INVALID, - /* C6 */ INVALID, - /* C7 */ INVALID, - /* C8 */ INVALID, - /* C9 */ INVALID, - /* CA */ INVALID, - /* CB */ INVALID, - /* CC */ INVALID, - /* CD */ INVALID, - /* CE */ INVALID, - /* CF */ INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, /* D0 */ 0x056B, - /* D1 */ INVALID, - /* D2 */ INVALID, - /* D3 */ INVALID, - /* D4 */ INVALID, - /* D5 */ INVALID, - /* D6 */ INVALID, - /* D7 */ INVALID, - /* D8 */ INVALID, - /* D9 */ INVALID, - /* DA */ INVALID, - /* DB */ INVALID, - /* DC */ INVALID, - /* DD */ INVALID, - /* DE */ INVALID, - /* DF */ INVALID, - /* E0 */ INVALID, - /* E1 */ INVALID, - /* E2 */ INVALID, - /* E3 */ INVALID, - /* E4 */ INVALID, - /* E5 */ INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ VX_INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, /* E6 */ 0x0584, - /* E7 */ INVALID, - /* E8 */ INVALID, - /* E9 */ INVALID, - /* EA */ INVALID, - /* EB */ INVALID, - /* EC */ INVALID, - /* ED */ INVALID, - /* EE */ INVALID, - /* EF */ INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, /* F0 */ 0x05A2, - /* F1 */ INVALID, - /* F2 */ INVALID, - /* F3 */ INVALID, - /* F4 */ INVALID, - /* F5 */ INVALID, - /* F6 */ INVALID, - /* F7 */ INVALID, - /* F8 */ INVALID, - /* F9 */ INVALID, - /* FA */ INVALID, - /* FB */ INVALID, - /* FC */ INVALID, - /* FD */ INVALID, - /* FE */ INVALID, - /* FF */ INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, }, }; @@ -2639,11 +2639,11 @@ const VXOpcodeTreeNode optreeModrmMod[][2] = /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0015), }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E5), }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E6), }, { @@ -2655,7 +2655,7 @@ const VXOpcodeTreeNode optreeModrmMod[][2] = /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0107), }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0137), }, { @@ -2668,18 +2668,18 @@ const VXOpcodeTreeNode optreeModrmMod[][2] = }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x001A), - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x05C9, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x05C4, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05A3, }, { @@ -2753,8 +2753,8 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 03 */ 0x0309, /* 04 */ 0x0598, /* 05 */ 0x0599, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x0516, @@ -2762,7 +2762,7 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 02 */ 0x02F9, /* 03 */ 0x02FB, /* 04 */ 0x0533, - /* 05 */ INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x02FE, /* 07 */ 0x02C0, }, @@ -2772,7 +2772,7 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 02 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0002), /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0003), /* 04 */ 0x0532, - /* 05 */ INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x02FD, /* 07 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0004), }, @@ -2781,68 +2781,68 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 01 */ 0x0456, /* 02 */ 0x0457, /* 03 */ 0x0458, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x0486, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, /* 04 */ 0x0479, - /* 05 */ INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x0470, - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x0485, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, /* 04 */ 0x0478, - /* 05 */ INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x0473, - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x047E, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, /* 04 */ 0x0475, - /* 05 */ INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x0468, - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x047C, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, /* 04 */ 0x0476, - /* 05 */ INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x046A, - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x0482, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x046D, - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x0481, /* 03 */ 0x0480, - /* 04 */ INVALID, - /* 05 */ INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x046C, /* 07 */ 0x046B, }, @@ -2850,11 +2850,11 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0005), /* 01 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0006), /* 02 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0007), - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0008), @@ -2863,8 +2863,8 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x000B), /* 04 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x000C), /* 05 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x000D), - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x0296, @@ -2873,68 +2873,68 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 03 */ 0x053C, /* 04 */ 0x06C0, /* 05 */ 0x06BF, - /* 06 */ INVALID, + /* 06 */ VX_INVALID, /* 07 */ 0x0055, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, /* 05 */ 0x02F7, /* 06 */ 0x0310, /* 07 */ 0x0515, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, /* 04 */ 0x0043, /* 05 */ 0x0049, /* 06 */ 0x0047, /* 07 */ 0x0045, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0006), - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, /* 06 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0015), /* 07 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0016), }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, /* 06 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0017), - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, /* 06 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0018), - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x04D3, - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x000F, @@ -2978,13 +2978,13 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = }, { /* 00 */ 0x0440, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x04DE, @@ -3007,64 +3007,64 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 07 */ 0x04F6, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x068C, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x066A, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, /* 04 */ 0x0664, - /* 05 */ INVALID, + /* 05 */ VX_INVALID, /* 06 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0001), - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x0666, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, /* 04 */ 0x0661, - /* 05 */ INVALID, + /* 05 */ VX_INVALID, /* 06 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0002), - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x0668, /* 03 */ 0x0667, - /* 04 */ INVALID, - /* 05 */ INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, /* 06 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0003), /* 07 */ 0x065C, }, { /* 00 */ 0x0333, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x0332, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x04DD, @@ -3118,7 +3118,7 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = }, { /* 00 */ 0x01BC, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x01FF, /* 03 */ 0x020B, /* 04 */ 0x01C3, @@ -3141,9 +3141,9 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 01 */ 0x01B1, /* 02 */ 0x01AB, /* 03 */ 0x01AD, - /* 04 */ INVALID, + /* 04 */ VX_INVALID, /* 05 */ 0x01BA, - /* 06 */ INVALID, + /* 06 */ VX_INVALID, /* 07 */ 0x020A, }, { @@ -3162,7 +3162,7 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 02 */ 0x01FE, /* 03 */ 0x0209, /* 04 */ 0x01F3, - /* 05 */ INVALID, + /* 05 */ VX_INVALID, /* 06 */ 0x01E8, /* 07 */ 0x01ED, }, @@ -3209,12 +3209,12 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = { /* 00 */ 0x02AF, /* 01 */ 0x00A4, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x02B0, @@ -3224,41 +3224,41 @@ const VXOpcodeTreeNode optreeModrmReg[][8] = /* 04 */ 0x02D9, /* 05 */ 0x02DA, /* 06 */ 0x04B8, - /* 07 */ INVALID, + /* 07 */ VX_INVALID, }, }; const VXOpcodeTreeNode optreeModrmRm[][8] = { { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0000), /* 02 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0001), /* 03 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0002), /* 04 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0003), - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x0315, /* 01 */ 0x0383, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x06B1, /* 01 */ 0x06C1, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0004), @@ -3273,102 +3273,102 @@ const VXOpcodeTreeNode optreeModrmRm[][8] = { /* 00 */ 0x0550, /* 01 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x000C), - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x0316, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x06C2, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x06C3, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x06C4, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x06AF, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x06AC, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x06AE, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x06AD, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, { /* 00 */ 0x06B0, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, }, }; @@ -3376,81 +3376,81 @@ const VXOpcodeTreeNode optreeMandatory[][4] = { { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0000), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0001), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0002), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02F0, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0307, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0551, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0058, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0556, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02BD, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x069E, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0561, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0454, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0189, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0379, @@ -3474,126 +3474,126 @@ const VXOpcodeTreeNode optreeMandatory[][4] = /* 00 */ 0x034C, /* 01 */ 0x0346, /* 02 */ 0x036E, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0354, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0352, }, { /* 00 */ 0x0565, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0564, }, { /* 00 */ 0x0563, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0562, }, { /* 00 */ 0x0350, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x036B, /* 03 */ 0x034E, }, { /* 00 */ 0x0351, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x036C, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x034F, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x034D, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0003), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x038A, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x038B, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x038C, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0389, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0386, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0387, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0388, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0325, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0328, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0327, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0326, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x033A, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0338, }, { /* 00 */ 0x0339, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0337, }, { @@ -3604,8 +3604,8 @@ const VXOpcodeTreeNode optreeMandatory[][4] = }, { /* 00 */ 0x035C, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x035B, }, { @@ -3622,632 +3622,632 @@ const VXOpcodeTreeNode optreeMandatory[][4] = }, { /* 00 */ 0x0560, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x055F, }, { /* 00 */ 0x0082, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0081, }, { /* 00 */ 0x069F, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x04D4, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x04D1, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x04D2, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0003), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0004), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x029A, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x045B, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x045C, }, { /* 00 */ 0x03FD, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03FE, }, { /* 00 */ 0x03FA, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03F9, }, { /* 00 */ 0x03FB, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03FC, }, { /* 00 */ 0x040E, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x040F, }, { /* 00 */ 0x0405, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0404, }, { /* 00 */ 0x0400, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0401, }, { /* 00 */ 0x0402, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0403, }, { /* 00 */ 0x0461, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0462, }, { /* 00 */ 0x0466, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0465, }, { /* 00 */ 0x0464, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0463, }, { /* 00 */ 0x0431, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0432, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03CA, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0037, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0036, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x049A, }, { /* 00 */ 0x03A3, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03A2, }, { /* 00 */ 0x03A6, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03A7, }, { /* 00 */ 0x03A4, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03A5, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0426, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0424, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0425, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0428, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0429, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0427, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0430, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03D1, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0359, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03AC, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x042C, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x042A, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x042B, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x042E, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x042F, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x042D, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03DA, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x041A, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x041B, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0421, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0420, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0412, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0413, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0419, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0418, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0438, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03FF, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0005), }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0006), }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0023, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0021, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0022, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x001F, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0020, }, { /* 00 */ 0x033B, /* 01 */ 0x0086, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x033C, /* 01 */ 0x0085, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04E9, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04E8, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04EB, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04EA, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0035, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0034, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03CB, }, { /* 00 */ 0x03BF, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03C0, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03DF, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03E3, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0000), }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x00B5, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0408, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x02B7, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0001), }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x00B2, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x00B1, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x037C, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03CC, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03D5, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03D4, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03DE, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03DD, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0024, }, { /* 00 */ 0x0067, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0064, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x005C, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x005B, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x005E, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0063, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x005D, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x005A, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0069, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0066, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0068, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0065, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0061, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0060, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0062, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x005F, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0357, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0356, }, { @@ -4258,38 +4258,38 @@ const VXOpcodeTreeNode optreeMandatory[][4] = }, { /* 00 */ 0x04ED, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x04EE, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x04C9, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x04CA, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0032, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0031, }, { /* 00 */ 0x0030, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x002F, }, { /* 00 */ 0x039A, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0399, }, { /* 00 */ 0x06BE, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x06BD, }, { @@ -4312,7 +4312,7 @@ const VXOpcodeTreeNode optreeMandatory[][4] = }, { /* 00 */ 0x0088, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x0099, /* 03 */ 0x008E, }, @@ -4342,97 +4342,97 @@ const VXOpcodeTreeNode optreeMandatory[][4] = }, { /* 00 */ 0x04A2, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04A3, }, { /* 00 */ 0x04A7, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04A8, }, { /* 00 */ 0x04A5, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04A4, }, { /* 00 */ 0x03AA, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03AB, }, { /* 00 */ 0x03D7, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03D6, }, { /* 00 */ 0x03DC, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03DB, }, { /* 00 */ 0x03D8, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03D9, }, { /* 00 */ 0x03AD, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03AE, }, { /* 00 */ 0x049B, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x049C, }, { /* 00 */ 0x04A1, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04A0, }, { /* 00 */ 0x049E, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x049D, }, { /* 00 */ 0x03A8, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03A9, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04A6, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x049F, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0002), - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0003), }, { /* 00 */ 0x0363, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x034A, /* 03 */ 0x0348, }, @@ -4444,477 +4444,477 @@ const VXOpcodeTreeNode optreeMandatory[][4] = }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0004), - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0005), }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0006), - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0007), }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0008), - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0009), }, { /* 00 */ 0x03CD, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03CE, }, { /* 00 */ 0x03D2, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03D3, }, { /* 00 */ 0x03D0, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03CF, }, { /* 00 */ 0x00B3, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0013), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0014), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x029C, - /* 02 */ INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x029B, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x029F, - /* 02 */ INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x029E, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0004), - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x035F, /* 03 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0005), }, { /* 00 */ 0x0362, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x034B, /* 03 */ 0x0349, }, { /* 00 */ 0x02E9, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02E3, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02C9, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02DF, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02CF, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02E0, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02CC, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02C8, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02EE, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02E7, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02EA, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02E4, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02D6, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02D4, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02D7, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02D2, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0512, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x050F, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0507, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0506, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0509, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x050E, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0508, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0505, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0514, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0511, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0513, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0510, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x050C, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x050B, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x050D, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x050A, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x04B5, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x044A, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0083, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0044, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0524, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0523, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000A), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000B), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x04B6, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0444, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x04EC, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x004A, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x052C, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x052B, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000C), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000D), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02A2, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x007C, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x007D, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0308, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0048, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02F8, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x02FA, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x037B, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x037A, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { - /* 00 */ INVALID, - /* 01 */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, /* 02 */ 0x044D, - /* 03 */ INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000E), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0046, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0039, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x003A, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0373, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0374, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x06A1, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x06A0, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0075, @@ -4924,368 +4924,368 @@ const VXOpcodeTreeNode optreeMandatory[][4] = }, { /* 00 */ 0x035A, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x040D, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x040C, }, { /* 00 */ 0x03E4, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03E5, }, { /* 00 */ 0x052E, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x052D, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000F), - /* 01 */ INVALID, + /* 01 */ VX_INVALID, /* 02 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0010), /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0011), }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0012), - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x003F, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x003D, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0040, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x003C, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x003E, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x003B, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0042, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0041, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x001E, - /* 02 */ INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x001D, }, { /* 00 */ 0x0487, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0488, }, { /* 00 */ 0x047D, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x047F, }, { /* 00 */ 0x0483, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0484, }, { /* 00 */ 0x03B3, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03B4, }, { /* 00 */ 0x0439, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x043A, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x0347, /* 02 */ 0x0366, /* 03 */ 0x0361, }, { /* 00 */ 0x0422, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0423, }, { /* 00 */ 0x0494, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0493, }, { /* 00 */ 0x0496, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0495, }, { /* 00 */ 0x041E, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x041F, }, { /* 00 */ 0x03C1, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03C2, }, { /* 00 */ 0x03BA, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03B9, }, { /* 00 */ 0x03BB, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03BC, }, { /* 00 */ 0x0417, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0416, }, { /* 00 */ 0x03C3, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03C4, }, { /* 00 */ 0x03C5, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03C6, }, { /* 00 */ 0x047A, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x047B, }, { /* 00 */ 0x0477, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0474, }, { /* 00 */ 0x03C8, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03C9, }, { /* 00 */ 0x0434, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0435, }, { /* 00 */ 0x0436, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0437, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x0089, /* 02 */ 0x0087, /* 03 */ 0x0097, }, { /* 00 */ 0x035D, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0358, }, { /* 00 */ 0x048F, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0490, }, { /* 00 */ 0x0492, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0491, }, { /* 00 */ 0x041C, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x041D, }, { /* 00 */ 0x0453, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0452, }, { /* 00 */ 0x03B6, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03B5, }, { /* 00 */ 0x03B8, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03B7, }, { /* 00 */ 0x0414, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0415, }, { /* 00 */ 0x04C1, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x04C2, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x02F1, - /* 02 */ INVALID, - /* 03 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, }, { /* 00 */ 0x0472, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0471, }, { /* 00 */ 0x0469, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0467, }, { /* 00 */ 0x046E, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x046F, }, { /* 00 */ 0x043B, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x043C, }, { /* 00 */ 0x0411, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0410, }, { /* 00 */ 0x045A, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0459, }, { /* 00 */ 0x030B, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x030A, }, { /* 00 */ 0x0489, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x048A, }, { /* 00 */ 0x0498, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x0497, }, { /* 00 */ 0x048B, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x048C, }, { /* 00 */ 0x048D, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x048E, }, { /* 00 */ 0x03AF, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03B0, }, { /* 00 */ 0x03BE, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03BD, }, { /* 00 */ 0x03B1, - /* 01 */ INVALID, - /* 02 */ INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, /* 03 */ 0x03B2, }, }; @@ -5376,13 +5376,13 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 0E */ 0x027F, /* 0F */ 0x0284, /* 10 */ 0x01E7, - /* 11 */ INVALID, - /* 12 */ INVALID, - /* 13 */ INVALID, - /* 14 */ INVALID, - /* 15 */ INVALID, - /* 16 */ INVALID, - /* 17 */ INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, + /* 16 */ VX_INVALID, + /* 17 */ VX_INVALID, /* 18 */ 0x0213, /* 19 */ 0x0212, /* 1A */ 0x0215, @@ -5393,12 +5393,12 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 1F */ 0x0210, /* 20 */ 0x00D4, /* 21 */ 0x00B7, - /* 22 */ INVALID, - /* 23 */ INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, /* 24 */ 0x025A, /* 25 */ 0x027C, - /* 26 */ INVALID, - /* 27 */ INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, /* 28 */ 0x01C1, /* 29 */ 0x01C5, /* 2A */ 0x01C4, @@ -5406,7 +5406,7 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 2C */ 0x01C6, /* 2D */ 0x01C7, /* 2E */ 0x01C9, - /* 2F */ INVALID, + /* 2F */ VX_INVALID, /* 30 */ 0x00B6, /* 31 */ 0x0298, /* 32 */ 0x01F1, @@ -5457,38 +5457,38 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 1D */ 0x0110, /* 1E */ 0x0111, /* 1F */ 0x0112, - /* 20 */ INVALID, - /* 21 */ INVALID, - /* 22 */ INVALID, - /* 23 */ INVALID, - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, - /* 28 */ INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, /* 29 */ 0x027B, - /* 2A */ INVALID, - /* 2B */ INVALID, - /* 2C */ INVALID, - /* 2D */ INVALID, - /* 2E */ INVALID, - /* 2F */ INVALID, - /* 30 */ INVALID, - /* 31 */ INVALID, - /* 32 */ INVALID, - /* 33 */ INVALID, - /* 34 */ INVALID, - /* 35 */ INVALID, - /* 36 */ INVALID, - /* 37 */ INVALID, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, + /* 2A */ VX_INVALID, + /* 2B */ VX_INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, }, { /* 00 */ 0x00F0, @@ -5529,8 +5529,8 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 23 */ 0x01E6, /* 24 */ 0x01E9, /* 25 */ 0x01F4, - /* 26 */ INVALID, - /* 27 */ INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, /* 28 */ 0x0269, /* 29 */ 0x026A, /* 2A */ 0x0265, @@ -5547,14 +5547,14 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 35 */ 0x012E, /* 36 */ 0x012D, /* 37 */ 0x012C, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, }, { /* 00 */ 0x00B9, @@ -5671,22 +5671,22 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 2D */ 0x0273, /* 2E */ 0x0276, /* 2F */ 0x0275, - /* 30 */ INVALID, - /* 31 */ INVALID, - /* 32 */ INVALID, - /* 33 */ INVALID, - /* 34 */ INVALID, - /* 35 */ INVALID, - /* 36 */ INVALID, - /* 37 */ INVALID, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, }, { /* 00 */ 0x00CC, @@ -5713,14 +5713,14 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 15 */ 0x014A, /* 16 */ 0x014D, /* 17 */ 0x014C, - /* 18 */ INVALID, + /* 18 */ VX_INVALID, /* 19 */ 0x0152, - /* 1A */ INVALID, - /* 1B */ INVALID, - /* 1C */ INVALID, - /* 1D */ INVALID, - /* 1E */ INVALID, - /* 1F */ INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, + /* 1C */ VX_INVALID, + /* 1D */ VX_INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, /* 20 */ 0x0258, /* 21 */ 0x0259, /* 22 */ 0x0256, @@ -5788,13 +5788,13 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 1E */ 0x0222, /* 1F */ 0x0223, /* 20 */ 0x01EC, - /* 21 */ INVALID, - /* 22 */ INVALID, - /* 23 */ INVALID, - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, /* 28 */ 0x0271, /* 29 */ 0x0272, /* 2A */ 0x026D, @@ -5811,14 +5811,14 @@ const VXOpcodeTreeNode optreeX87[][64] = /* 35 */ 0x0130, /* 36 */ 0x0131, /* 37 */ 0x0132, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, }, }; @@ -5871,22 +5871,22 @@ const VXOpcodeTreeNode optreeOperandSize[][3] = { /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x000F), /* 01 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0010), - /* 02 */ INVALID, + /* 02 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0011), /* 01 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0012), - /* 02 */ INVALID, + /* 02 */ VX_INVALID, }, { /* 00 */ 0x02B8, /* 01 */ 0x02B6, - /* 02 */ INVALID, + /* 02 */ VX_INVALID, }, { /* 00 */ 0x03A1, /* 01 */ 0x03A0, - /* 02 */ INVALID, + /* 02 */ VX_INVALID, }, { /* 00 */ 0x0050, @@ -5959,15 +5959,15 @@ const VXOpcodeTreeNode optreeMode[][2] = { { /* 00 */ 0x04AA, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0445, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x04AD, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0553, @@ -5987,55 +5987,55 @@ const VXOpcodeTreeNode optreeMode[][2] = }, { /* 00 */ 0x04AC, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0446, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x04A9, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0443, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x009F, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x00A0, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0001, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0004, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x04BA, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x04BB, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x044B, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x044C, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0038, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0033, @@ -6043,39 +6043,39 @@ const VXOpcodeTreeNode optreeMode[][2] = }, { /* 00 */ 0x0011, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0398, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0007, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x04FC, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x002A, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0546, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x06B3, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0073, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x004F, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x04C0, @@ -6086,24 +6086,24 @@ const VXOpcodeTreeNode optreeMode[][2] = /* 01 */ 0x04BE, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x04BD, }, { /* 00 */ 0x0451, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x044E, /* 01 */ 0x0450, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x044F, }, { /* 00 */ 0x02F6, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0014), @@ -6111,27 +6111,27 @@ const VXOpcodeTreeNode optreeMode[][2] = }, { /* 00 */ 0x02F3, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x02BC, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0003, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0002, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x04F0, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x02DC, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x004D, @@ -6142,103 +6142,103 @@ const VXOpcodeTreeNode optreeMode[][2] = const VXOpcodeTreeNode optreeVendor[][2] = { { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05AC, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05B2, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05EB, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05F3, }, { /* 00 */ 0x05EC, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x05B4, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x05B3, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x05ED, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x053A, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0056, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0530, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x02C1, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x04D5, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x0552, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x0554, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x02BE, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x02BF, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x02C3, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x02C2, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05EA, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05F2, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05E8, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05E9, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05F4, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05AD, }, }; @@ -6246,262 +6246,262 @@ const VXOpcodeTreeNode optreeVendor[][2] = const VXOpcodeTreeNode optree3dnow[][256] = { { - /* 00 */ INVALID, - /* 01 */ INVALID, - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, - /* 05 */ INVALID, - /* 06 */ INVALID, - /* 07 */ INVALID, - /* 08 */ INVALID, - /* 09 */ INVALID, - /* 0A */ INVALID, - /* 0B */ INVALID, + /* 00 */ VX_INVALID, + /* 01 */ VX_INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, + /* 05 */ VX_INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, + /* 09 */ VX_INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, /* 0C */ 0x0407, /* 0D */ 0x0406, - /* 0E */ INVALID, - /* 0F */ INVALID, - /* 10 */ INVALID, - /* 11 */ INVALID, - /* 12 */ INVALID, - /* 13 */ INVALID, - /* 14 */ INVALID, - /* 15 */ INVALID, - /* 16 */ INVALID, - /* 17 */ INVALID, - /* 18 */ INVALID, - /* 19 */ INVALID, - /* 1A */ INVALID, - /* 1B */ INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, + /* 10 */ VX_INVALID, + /* 11 */ VX_INVALID, + /* 12 */ VX_INVALID, + /* 13 */ VX_INVALID, + /* 14 */ VX_INVALID, + /* 15 */ VX_INVALID, + /* 16 */ VX_INVALID, + /* 17 */ VX_INVALID, + /* 18 */ VX_INVALID, + /* 19 */ VX_INVALID, + /* 1A */ VX_INVALID, + /* 1B */ VX_INVALID, /* 1C */ 0x03E7, /* 1D */ 0x03E6, - /* 1E */ INVALID, - /* 1F */ INVALID, - /* 20 */ INVALID, - /* 21 */ INVALID, - /* 22 */ INVALID, - /* 23 */ INVALID, - /* 24 */ INVALID, - /* 25 */ INVALID, - /* 26 */ INVALID, - /* 27 */ INVALID, - /* 28 */ INVALID, - /* 29 */ INVALID, - /* 2A */ INVALID, - /* 2B */ INVALID, - /* 2C */ INVALID, - /* 2D */ INVALID, - /* 2E */ INVALID, - /* 2F */ INVALID, - /* 30 */ INVALID, - /* 31 */ INVALID, - /* 32 */ INVALID, - /* 33 */ INVALID, - /* 34 */ INVALID, - /* 35 */ INVALID, - /* 36 */ INVALID, - /* 37 */ INVALID, - /* 38 */ INVALID, - /* 39 */ INVALID, - /* 3A */ INVALID, - /* 3B */ INVALID, - /* 3C */ INVALID, - /* 3D */ INVALID, - /* 3E */ INVALID, - /* 3F */ INVALID, - /* 40 */ INVALID, - /* 41 */ INVALID, - /* 42 */ INVALID, - /* 43 */ INVALID, - /* 44 */ INVALID, - /* 45 */ INVALID, - /* 46 */ INVALID, - /* 47 */ INVALID, - /* 48 */ INVALID, - /* 49 */ INVALID, - /* 4A */ INVALID, - /* 4B */ INVALID, - /* 4C */ INVALID, - /* 4D */ INVALID, - /* 4E */ INVALID, - /* 4F */ INVALID, - /* 50 */ INVALID, - /* 51 */ INVALID, - /* 52 */ INVALID, - /* 53 */ INVALID, - /* 54 */ INVALID, - /* 55 */ INVALID, - /* 56 */ INVALID, - /* 57 */ INVALID, - /* 58 */ INVALID, - /* 59 */ INVALID, - /* 5A */ INVALID, - /* 5B */ INVALID, - /* 5C */ INVALID, - /* 5D */ INVALID, - /* 5E */ INVALID, - /* 5F */ INVALID, - /* 60 */ INVALID, - /* 61 */ INVALID, - /* 62 */ INVALID, - /* 63 */ INVALID, - /* 64 */ INVALID, - /* 65 */ INVALID, - /* 66 */ INVALID, - /* 67 */ INVALID, - /* 68 */ INVALID, - /* 69 */ INVALID, - /* 6A */ INVALID, - /* 6B */ INVALID, - /* 6C */ INVALID, - /* 6D */ INVALID, - /* 6E */ INVALID, - /* 6F */ INVALID, - /* 70 */ INVALID, - /* 71 */ INVALID, - /* 72 */ INVALID, - /* 73 */ INVALID, - /* 74 */ INVALID, - /* 75 */ INVALID, - /* 76 */ INVALID, - /* 77 */ INVALID, - /* 78 */ INVALID, - /* 79 */ INVALID, - /* 7A */ INVALID, - /* 7B */ INVALID, - /* 7C */ INVALID, - /* 7D */ INVALID, - /* 7E */ INVALID, - /* 7F */ INVALID, - /* 80 */ INVALID, - /* 81 */ INVALID, - /* 82 */ INVALID, - /* 83 */ INVALID, - /* 84 */ INVALID, - /* 85 */ INVALID, - /* 86 */ INVALID, - /* 87 */ INVALID, - /* 88 */ INVALID, - /* 89 */ INVALID, + /* 1E */ VX_INVALID, + /* 1F */ VX_INVALID, + /* 20 */ VX_INVALID, + /* 21 */ VX_INVALID, + /* 22 */ VX_INVALID, + /* 23 */ VX_INVALID, + /* 24 */ VX_INVALID, + /* 25 */ VX_INVALID, + /* 26 */ VX_INVALID, + /* 27 */ VX_INVALID, + /* 28 */ VX_INVALID, + /* 29 */ VX_INVALID, + /* 2A */ VX_INVALID, + /* 2B */ VX_INVALID, + /* 2C */ VX_INVALID, + /* 2D */ VX_INVALID, + /* 2E */ VX_INVALID, + /* 2F */ VX_INVALID, + /* 30 */ VX_INVALID, + /* 31 */ VX_INVALID, + /* 32 */ VX_INVALID, + /* 33 */ VX_INVALID, + /* 34 */ VX_INVALID, + /* 35 */ VX_INVALID, + /* 36 */ VX_INVALID, + /* 37 */ VX_INVALID, + /* 38 */ VX_INVALID, + /* 39 */ VX_INVALID, + /* 3A */ VX_INVALID, + /* 3B */ VX_INVALID, + /* 3C */ VX_INVALID, + /* 3D */ VX_INVALID, + /* 3E */ VX_INVALID, + /* 3F */ VX_INVALID, + /* 40 */ VX_INVALID, + /* 41 */ VX_INVALID, + /* 42 */ VX_INVALID, + /* 43 */ VX_INVALID, + /* 44 */ VX_INVALID, + /* 45 */ VX_INVALID, + /* 46 */ VX_INVALID, + /* 47 */ VX_INVALID, + /* 48 */ VX_INVALID, + /* 49 */ VX_INVALID, + /* 4A */ VX_INVALID, + /* 4B */ VX_INVALID, + /* 4C */ VX_INVALID, + /* 4D */ VX_INVALID, + /* 4E */ VX_INVALID, + /* 4F */ VX_INVALID, + /* 50 */ VX_INVALID, + /* 51 */ VX_INVALID, + /* 52 */ VX_INVALID, + /* 53 */ VX_INVALID, + /* 54 */ VX_INVALID, + /* 55 */ VX_INVALID, + /* 56 */ VX_INVALID, + /* 57 */ VX_INVALID, + /* 58 */ VX_INVALID, + /* 59 */ VX_INVALID, + /* 5A */ VX_INVALID, + /* 5B */ VX_INVALID, + /* 5C */ VX_INVALID, + /* 5D */ VX_INVALID, + /* 5E */ VX_INVALID, + /* 5F */ VX_INVALID, + /* 60 */ VX_INVALID, + /* 61 */ VX_INVALID, + /* 62 */ VX_INVALID, + /* 63 */ VX_INVALID, + /* 64 */ VX_INVALID, + /* 65 */ VX_INVALID, + /* 66 */ VX_INVALID, + /* 67 */ VX_INVALID, + /* 68 */ VX_INVALID, + /* 69 */ VX_INVALID, + /* 6A */ VX_INVALID, + /* 6B */ VX_INVALID, + /* 6C */ VX_INVALID, + /* 6D */ VX_INVALID, + /* 6E */ VX_INVALID, + /* 6F */ VX_INVALID, + /* 70 */ VX_INVALID, + /* 71 */ VX_INVALID, + /* 72 */ VX_INVALID, + /* 73 */ VX_INVALID, + /* 74 */ VX_INVALID, + /* 75 */ VX_INVALID, + /* 76 */ VX_INVALID, + /* 77 */ VX_INVALID, + /* 78 */ VX_INVALID, + /* 79 */ VX_INVALID, + /* 7A */ VX_INVALID, + /* 7B */ VX_INVALID, + /* 7C */ VX_INVALID, + /* 7D */ VX_INVALID, + /* 7E */ VX_INVALID, + /* 7F */ VX_INVALID, + /* 80 */ VX_INVALID, + /* 81 */ VX_INVALID, + /* 82 */ VX_INVALID, + /* 83 */ VX_INVALID, + /* 84 */ VX_INVALID, + /* 85 */ VX_INVALID, + /* 86 */ VX_INVALID, + /* 87 */ VX_INVALID, + /* 88 */ VX_INVALID, + /* 89 */ VX_INVALID, /* 8A */ 0x03F0, - /* 8B */ INVALID, - /* 8C */ INVALID, - /* 8D */ INVALID, + /* 8B */ VX_INVALID, + /* 8C */ VX_INVALID, + /* 8D */ VX_INVALID, /* 8E */ 0x03F1, - /* 8F */ INVALID, + /* 8F */ VX_INVALID, /* 90 */ 0x03EB, - /* 91 */ INVALID, - /* 92 */ INVALID, - /* 93 */ INVALID, + /* 91 */ VX_INVALID, + /* 92 */ VX_INVALID, + /* 93 */ VX_INVALID, /* 94 */ 0x03EE, - /* 95 */ INVALID, + /* 95 */ VX_INVALID, /* 96 */ 0x03F2, /* 97 */ 0x03F6, - /* 98 */ INVALID, - /* 99 */ INVALID, + /* 98 */ VX_INVALID, + /* 99 */ VX_INVALID, /* 9A */ 0x03F7, - /* 9B */ INVALID, - /* 9C */ INVALID, - /* 9D */ INVALID, + /* 9B */ VX_INVALID, + /* 9C */ VX_INVALID, + /* 9D */ VX_INVALID, /* 9E */ 0x03E9, - /* 9F */ INVALID, + /* 9F */ VX_INVALID, /* A0 */ 0x03EC, - /* A1 */ INVALID, - /* A2 */ INVALID, - /* A3 */ INVALID, + /* A1 */ VX_INVALID, + /* A2 */ VX_INVALID, + /* A3 */ VX_INVALID, /* A4 */ 0x03ED, - /* A5 */ INVALID, + /* A5 */ VX_INVALID, /* A6 */ 0x03F3, /* A7 */ 0x03F5, - /* A8 */ INVALID, - /* A9 */ INVALID, + /* A8 */ VX_INVALID, + /* A9 */ VX_INVALID, /* AA */ 0x03F8, - /* AB */ INVALID, - /* AC */ INVALID, - /* AD */ INVALID, + /* AB */ VX_INVALID, + /* AC */ VX_INVALID, + /* AD */ VX_INVALID, /* AE */ 0x03E8, - /* AF */ INVALID, + /* AF */ VX_INVALID, /* B0 */ 0x03EA, - /* B1 */ INVALID, - /* B2 */ INVALID, - /* B3 */ INVALID, + /* B1 */ VX_INVALID, + /* B2 */ VX_INVALID, + /* B3 */ VX_INVALID, /* B4 */ 0x03EF, - /* B5 */ INVALID, + /* B5 */ VX_INVALID, /* B6 */ 0x03F4, /* B7 */ 0x0433, - /* B8 */ INVALID, - /* B9 */ INVALID, - /* BA */ INVALID, + /* B8 */ VX_INVALID, + /* B9 */ VX_INVALID, + /* BA */ VX_INVALID, /* BB */ 0x0499, - /* BC */ INVALID, - /* BD */ INVALID, - /* BE */ INVALID, + /* BC */ VX_INVALID, + /* BD */ VX_INVALID, + /* BE */ VX_INVALID, /* BF */ 0x03C7, - /* C0 */ INVALID, - /* C1 */ INVALID, - /* C2 */ INVALID, - /* C3 */ INVALID, - /* C4 */ INVALID, - /* C5 */ INVALID, - /* C6 */ INVALID, - /* C7 */ INVALID, - /* C8 */ INVALID, - /* C9 */ INVALID, - /* CA */ INVALID, - /* CB */ INVALID, - /* CC */ INVALID, - /* CD */ INVALID, - /* CE */ INVALID, - /* CF */ INVALID, - /* D0 */ INVALID, - /* D1 */ INVALID, - /* D2 */ INVALID, - /* D3 */ INVALID, - /* D4 */ INVALID, - /* D5 */ INVALID, - /* D6 */ INVALID, - /* D7 */ INVALID, - /* D8 */ INVALID, - /* D9 */ INVALID, - /* DA */ INVALID, - /* DB */ INVALID, - /* DC */ INVALID, - /* DD */ INVALID, - /* DE */ INVALID, - /* DF */ INVALID, - /* E0 */ INVALID, - /* E1 */ INVALID, - /* E2 */ INVALID, - /* E3 */ INVALID, - /* E4 */ INVALID, - /* E5 */ INVALID, - /* E6 */ INVALID, - /* E7 */ INVALID, - /* E8 */ INVALID, - /* E9 */ INVALID, - /* EA */ INVALID, - /* EB */ INVALID, - /* EC */ INVALID, - /* ED */ INVALID, - /* EE */ INVALID, - /* EF */ INVALID, - /* F0 */ INVALID, - /* F1 */ INVALID, - /* F2 */ INVALID, - /* F3 */ INVALID, - /* F4 */ INVALID, - /* F5 */ INVALID, - /* F6 */ INVALID, - /* F7 */ INVALID, - /* F8 */ INVALID, - /* F9 */ INVALID, - /* FA */ INVALID, - /* FB */ INVALID, - /* FC */ INVALID, - /* FD */ INVALID, - /* FE */ INVALID, - /* FF */ INVALID, + /* C0 */ VX_INVALID, + /* C1 */ VX_INVALID, + /* C2 */ VX_INVALID, + /* C3 */ VX_INVALID, + /* C4 */ VX_INVALID, + /* C5 */ VX_INVALID, + /* C6 */ VX_INVALID, + /* C7 */ VX_INVALID, + /* C8 */ VX_INVALID, + /* C9 */ VX_INVALID, + /* CA */ VX_INVALID, + /* CB */ VX_INVALID, + /* CC */ VX_INVALID, + /* CD */ VX_INVALID, + /* CE */ VX_INVALID, + /* CF */ VX_INVALID, + /* D0 */ VX_INVALID, + /* D1 */ VX_INVALID, + /* D2 */ VX_INVALID, + /* D3 */ VX_INVALID, + /* D4 */ VX_INVALID, + /* D5 */ VX_INVALID, + /* D6 */ VX_INVALID, + /* D7 */ VX_INVALID, + /* D8 */ VX_INVALID, + /* D9 */ VX_INVALID, + /* DA */ VX_INVALID, + /* DB */ VX_INVALID, + /* DC */ VX_INVALID, + /* DD */ VX_INVALID, + /* DE */ VX_INVALID, + /* DF */ VX_INVALID, + /* E0 */ VX_INVALID, + /* E1 */ VX_INVALID, + /* E2 */ VX_INVALID, + /* E3 */ VX_INVALID, + /* E4 */ VX_INVALID, + /* E5 */ VX_INVALID, + /* E6 */ VX_INVALID, + /* E7 */ VX_INVALID, + /* E8 */ VX_INVALID, + /* E9 */ VX_INVALID, + /* EA */ VX_INVALID, + /* EB */ VX_INVALID, + /* EC */ VX_INVALID, + /* ED */ VX_INVALID, + /* EE */ VX_INVALID, + /* EF */ VX_INVALID, + /* F0 */ VX_INVALID, + /* F1 */ VX_INVALID, + /* F2 */ VX_INVALID, + /* F3 */ VX_INVALID, + /* F4 */ VX_INVALID, + /* F5 */ VX_INVALID, + /* F6 */ VX_INVALID, + /* F7 */ VX_INVALID, + /* F8 */ VX_INVALID, + /* F9 */ VX_INVALID, + /* FA */ VX_INVALID, + /* FB */ VX_INVALID, + /* FC */ VX_INVALID, + /* FD */ VX_INVALID, + /* FE */ VX_INVALID, + /* FF */ VX_INVALID, }, }; @@ -6510,38 +6510,38 @@ const VXOpcodeTreeNode optreeVex[][16] = { /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0024), /* 01 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0004), - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, /* 05 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0005), /* 06 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0006), /* 07 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0007), - /* 08 */ INVALID, + /* 08 */ VX_INVALID, /* 09 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0008), - /* 0A */ INVALID, - /* 0B */ INVALID, - /* 0C */ INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, /* 0D */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0009), - /* 0E */ INVALID, - /* 0F */ INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0026), /* 01 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0004), - /* 02 */ INVALID, - /* 03 */ INVALID, - /* 04 */ INVALID, + /* 02 */ VX_INVALID, + /* 03 */ VX_INVALID, + /* 04 */ VX_INVALID, /* 05 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0005), - /* 06 */ INVALID, - /* 07 */ INVALID, - /* 08 */ INVALID, + /* 06 */ VX_INVALID, + /* 07 */ VX_INVALID, + /* 08 */ VX_INVALID, /* 09 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0008), - /* 0A */ INVALID, - /* 0B */ INVALID, - /* 0C */ INVALID, + /* 0A */ VX_INVALID, + /* 0B */ VX_INVALID, + /* 0C */ VX_INVALID, /* 0D */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0009), - /* 0E */ INVALID, - /* 0F */ INVALID, + /* 0E */ VX_INVALID, + /* 0F */ VX_INVALID, }, }; @@ -6549,87 +6549,87 @@ const VXOpcodeTreeNode optreeVexW[][2] = { { /* 00 */ 0x061D, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x061C, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0692, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0691, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x057B, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0008), - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x05A6, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x05A5, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x05A7, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x05A4, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x061E, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x061B, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0009), - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x061F, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0620, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0621, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x0622, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000A), - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000B), - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000C), - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000D), - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000E), @@ -6637,15 +6637,15 @@ const VXOpcodeTreeNode optreeVexW[][2] = }, { /* 00 */ 0x0579, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x0578, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x060B, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, }; @@ -6657,67 +6657,67 @@ const VXOpcodeTreeNode optreeVexL[][2] = }, { /* 00 */ 0x0660, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x065A, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x065E, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x063F, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x065F, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x065B, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x065D, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x057A, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x061A, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x05A0, }, { - /* 00 */ INVALID, + /* 00 */ VX_INVALID, /* 01 */ 0x059A, }, { /* 00 */ 0x062C, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x062E, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x062D, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, { /* 00 */ 0x062F, - /* 01 */ INVALID, + /* 01 */ VX_INVALID, }, }; -#undef INVALID +#undef VX_INVALID #undef NODE #define OPI_NONE { VXDefinedOperandType::NONE, VXDefinedOperandSize::NA } From d851e83a59dde0a3d3dec95aa87f38b2b8f706e5 Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 16 Mar 2015 00:09:31 +0100 Subject: [PATCH 11/33] implemented VXCustomSymbolResolver made internal routines in VXInstructionFormatterC.c static --- Bindings/C/VXInstructionFormatterC.c | 135 ++++++++++++++++++++------- Bindings/C/VXInstructionFormatterC.h | 4 +- Bindings/C/VXInternalHelpersC.h | 20 ++-- 3 files changed, 115 insertions(+), 44 deletions(-) diff --git a/Bindings/C/VXInstructionFormatterC.c b/Bindings/C/VXInstructionFormatterC.c index 68f46c0..64db11f 100644 --- a/Bindings/C/VXInstructionFormatterC.c +++ b/Bindings/C/VXInstructionFormatterC.c @@ -45,12 +45,13 @@ /* VXBaseSymbolResolver ------------------------------------------------------------------------ */ -typedef const char* (*VXBaseSymbolResolver_DestructionCallback)( +typedef void (*VXBaseSymbolResolver_DestructionCallback)( VXBaseSymbolResolverContext *ctx); typedef const char* (*VXBaseSymbolResolver_ResolveSymbolCallback)( VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, - uint64_t address, uint64_t *offset); + uint64_t address, + uint64_t *offset); typedef struct _VXBaseSymbolResolver { @@ -58,6 +59,8 @@ typedef struct _VXBaseSymbolResolver VXBaseSymbolResolver_ResolveSymbolCallback resolveCallback; } VXBaseSymbolResolver; +void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx); +void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx); const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); @@ -96,6 +99,20 @@ void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionFormatterCo void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols); void VXBaseInstructionFormatter_OutputAppendDisplacement(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); +/* VXCustomSymbolResolver ---------------------------------------------------------------------- */ + +typedef struct _VXCustomSymbolResolver +{ + VXBaseSymbolResolver super; + VXCustomSymbolResolver_ResolveSymbolCallback resolve; + void *userData; +} VXCustomSymbolResolver; + +void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); +void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); +VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create(VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); +const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); + /* VXIntelInstructionFormatter ----------------------------------------------------------------- */ typedef struct _VXIntelInstructionFormatter @@ -109,19 +126,20 @@ void VXIntelInstructionFormatter_OutputAppendOperandCast(VXBaseInstructionFormat void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); void VXIntelInstructionFormatter_InternalFormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); -/* VXExactSymbolResolver ----------------------------------------------------------------------- */ - -typedef struct _VXExactSymbolResolver -{ - VXBaseSymbolResolver super; -} VXExactSymbolResolver; - -// TODO - /* Implementation ============================================================================== */ /* VXBaseSymbolResolver ------------------------------------------------------------------------ */ +void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx) +{ + memset(VXBaseSymbolResolver_thiz(ctx), 0, sizeof(VXBaseSymbolResolver)); +} + +void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx) +{ + +} + void VXBaseSymbolResolver_Release( VXBaseSymbolResolverContext *ctx) { @@ -146,9 +164,54 @@ const char* VXBaseSymbolResolver_ResolveSymbol( return VXBaseSymbolResolver_thiz(ctx)->resolveCallback(ctx, info, address, offset); } +/* VXCustomSymbolResolver ---------------------------------------------------------------------- */ + +static void VXCustomSymbolResolver_Construct( + VXBaseSymbolResolverContext *ctx, + VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, + void *userData) +{ + VXBaseSymbolResolver_Construct(ctx); + VXCustomSymbolResolver *thiz = VXCustomSymbolResolver_thiz(ctx); + + thiz->super.destruct = &VXCustomSymbolResolver_Destruct; + thiz->super.resolveCallback = &VXCustomSymbolResolver_Resolve; + + thiz->resolve = resolverCb; + thiz->userData = userData; +} + +static void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx) +{ + VXBaseSymbolResolver_Destruct(ctx); +} + +VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( + VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, + void *userData) +{ + VXCustomSymbolResolver *thiz = malloc(sizeof(VXCustomSymbolResolver)); + VXBaseSymbolResolverContext *ctx = malloc(sizeof(VXBaseSymbolResolverContext)); + + ctx->d.type = TYPE_CUSTOMSYMBOLRESOLVER; + ctx->d.ptr = thiz; + + return ctx; +} + +static const char* VXCustomSymbolResolver_Resolve( + VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, + uint64_t address, + uint64_t *offset) +{ + VXCustomSymbolResolver *thiz = VXCustomSymbolResolver_thiz(ctx); + return thiz->resolve(info, address, offset, thiz->userData); +} + /* VXBaseInstructionFormatter ------------------------------------------------------------------ */ -const char* VXBaseInstructionFormatter_registerStrings[] = +static const char* VXBaseInstructionFormatter_registerStrings[] = { /* 8 bit general purpose registers */ "al", "cl", "dl", "bl", @@ -204,7 +267,7 @@ const char* VXBaseInstructionFormatter_registerStrings[] = "rip" }; -void VXBaseInstructionFormatter_Construct( +static void VXBaseInstructionFormatter_Construct( VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver) { VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); @@ -218,7 +281,7 @@ void VXBaseInstructionFormatter_Construct( thiz->outputBuffer = malloc(thiz->outputBufferCapacity); } -void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) +static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) { VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); @@ -243,13 +306,13 @@ void VXBaseInstructionFormatter_Release( free(ctx); } -void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, +static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, bool uppercase) { VXBaseInstructionFormatter_thiz(ctx)->outputUppercase = uppercase; } -char const* VXBaseInstructionFormatter_RegisterToString( +static char const* VXBaseInstructionFormatter_RegisterToString( const VXBaseInstructionFormatterContext *ctx, VXRegister reg) { if (reg == REG_NONE) @@ -259,7 +322,7 @@ char const* VXBaseInstructionFormatter_RegisterToString( return VXBaseInstructionFormatter_registerStrings[reg - 1]; } -char const* VXBaseInstructionFormatter_ResolveSymbol( +static char const* VXBaseInstructionFormatter_ResolveSymbol( const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset) { @@ -307,17 +370,17 @@ const char* VXBaseInstructionFormatter_FormatInstruction( return VXBaseInstructionFormatter_OutputString(ctx); } -void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx) +static void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx) { VXBaseInstructionFormatter_thiz(ctx)->outputStringLen = 0; } -char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx) +static char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx) { return &VXBaseInstructionFormatter_thiz(ctx)->outputBuffer[0]; } -void VXBaseInstructionFormatter_OutputAppend( +static void VXBaseInstructionFormatter_OutputAppend( VXBaseInstructionFormatterContext *ctx, char const *text) { VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); @@ -356,7 +419,7 @@ void VXBaseInstructionFormatter_OutputAppend( } } -void VXBaseInstructionFormatter_OutputAppendFormatted( +static void VXBaseInstructionFormatter_OutputAppendFormatted( VXBaseInstructionFormatterContext *ctx, char const *format, ...) { VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); @@ -410,7 +473,7 @@ void VXBaseInstructionFormatter_OutputAppendFormatted( va_end(arguments); } -void VXBaseInstructionFormatter_OutputAppendAddress( +static void VXBaseInstructionFormatter_OutputAppendAddress( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, bool resolveSymbols) { @@ -454,8 +517,11 @@ void VXBaseInstructionFormatter_OutputAppendAddress( } } -void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols) +static void VXBaseInstructionFormatter_OutputAppendImmediate( + VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info, + const VXOperandInfo *operand, + bool resolveSymbols) { VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); @@ -523,7 +589,7 @@ void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatter } } -void VXBaseInstructionFormatter_OutputAppendDisplacement( +static void VXBaseInstructionFormatter_OutputAppendDisplacement( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand) { @@ -551,7 +617,8 @@ void VXBaseInstructionFormatter_OutputAppendDisplacement( assert(0); } VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value); - } else + } + else { // The displacement value might be negative assert(operand->offset != 64); @@ -583,7 +650,7 @@ void VXBaseInstructionFormatter_OutputAppendDisplacement( /* VXIntelInstructionFormatter ----------------------------------------------------------------- */ -void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, +static void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext* symbolResolver) { VXBaseInstructionFormatter_Construct(ctx, symbolResolver); @@ -593,7 +660,7 @@ void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ct thiz->super.internalFormat = &VXIntelInstructionFormatter_InternalFormatInstruction; } -void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) +static void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) { VXBaseInstructionFormatter_Destruct(ctx); } @@ -617,8 +684,9 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( return ctx; } -void VXIntelInstructionFormatter_OutputAppendOperandCast( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, +static void VXIntelInstructionFormatter_OutputAppendOperandCast( + VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info, const VXOperandInfo *operand) { switch(operand->size) @@ -649,8 +717,9 @@ void VXIntelInstructionFormatter_OutputAppendOperandCast( } } -void VXIntelInstructionFormatter_FormatOperand( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, +static void VXIntelInstructionFormatter_FormatOperand( + VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info, const VXOperandInfo *operand) { switch (operand->type) @@ -738,7 +807,7 @@ void VXIntelInstructionFormatter_FormatOperand( } } -void VXIntelInstructionFormatter_InternalFormatInstruction( +static void VXIntelInstructionFormatter_InternalFormatInstruction( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info) { // Append string prefixes diff --git a/Bindings/C/VXInstructionFormatterC.h b/Bindings/C/VXInstructionFormatterC.h index 01c168d..d38b66b 100644 --- a/Bindings/C/VXInstructionFormatterC.h +++ b/Bindings/C/VXInstructionFormatterC.h @@ -73,7 +73,7 @@ const char* VXBaseSymbolResolver_ResolveSymbol( /* VXCustomSymbolResolver ====================================================================== */ -typedef const char* (*VXResolveSymbol_t)( +typedef const char* (*VXCustomSymbolResolver_ResolveSymbolCallback)( const VXInstructionInfo *info, uint64_t address, uint64_t *offset, @@ -87,7 +87,7 @@ typedef const char* (*VXResolveSymbol_t)( * @return @c NULL if it fails, else a symbol resolver context. */ VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( - VXResolveSymbol_t resolverCb, + VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); /* VXBaseInstructionFormatter ================================================================== */ diff --git a/Bindings/C/VXInternalHelpersC.h b/Bindings/C/VXInternalHelpersC.h index 513b84f..d0bd0c8 100644 --- a/Bindings/C/VXInternalHelpersC.h +++ b/Bindings/C/VXInternalHelpersC.h @@ -49,7 +49,7 @@ typedef enum _VXTypeId TYPE_MEMORYDATASOURCE, TYPE_INSTRUCTIONDECODER, TYPE_BASESYMBOLRESOLVER, - TYPE_EXACTSYMBOLRESOLVER, + TYPE_CUSTOMSYMBOLRESOLVER, TYPE_BASEINSTRUCTIONFORMATTER, TYPE_INTELINSTRUCTIONFORMATTER, } VXTypeId; @@ -105,29 +105,31 @@ __inline const struct _VXInstructionDecoder* VXInstructionDecoder_cthiz( __inline struct _VXBaseSymbolResolver* VXBaseSymbolResolver_thiz( VXBaseSymbolResolverContext *ctx) { - assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER); + assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER + || ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); return (struct _VXBaseSymbolResolver*)ctx->d.ptr; } __inline const struct _VXBaseSymbolResolver* VXBaseSymbolResolver_cthiz( const VXBaseSymbolResolverContext *ctx) { - assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER); + assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER + || ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); return (const struct _VXBaseSymbolResolver*)ctx->d.ptr; } -__inline struct _VXExactSymbolResolver* VXExactSymbolResolver_thiz( +__inline struct _VXCustomSymbolResolver* VXCustomSymbolResolver_thiz( VXBaseSymbolResolverContext *ctx) { - assert(ctx->d.type == TYPE_EXACTSYMBOLRESOLVER); - return (struct _VXExactSymbolResolver*)ctx->d.ptr; + assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); + return (struct _VXCustomSymbolResolver*)ctx->d.ptr; } -__inline const struct _VXExactSymbolResolver* VXExactSymbolResolver_cthiz( +__inline const struct _VXCustomSymbolResolver* VXCustomSymbolResolver_cthiz( const VXBaseSymbolResolverContext *ctx) { - assert(ctx->d.type == TYPE_EXACTSYMBOLRESOLVER); - return (const struct _VXExactSymbolResolver*)ctx->d.ptr; + assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); + return (const struct _VXCustomSymbolResolver*)ctx->d.ptr; } __inline struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_thiz( From f71edda5528025a91a10f2a5626e93c1d26cf2a9 Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 16 Mar 2015 00:52:36 +0100 Subject: [PATCH 12/33] fixed some memory leaks and added NULL-checks on mallocs --- Bindings/C/VXInstructionDecoderC.c | 12 +++++++++++- Bindings/C/VXInstructionFormatterC.c | 8 ++++++++ Examples/CBindings/test.c | 5 +++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Bindings/C/VXInstructionDecoderC.c b/Bindings/C/VXInstructionDecoderC.c index 8541cc2..7c6d862 100644 --- a/Bindings/C/VXInstructionDecoderC.c +++ b/Bindings/C/VXInstructionDecoderC.c @@ -287,6 +287,11 @@ VXBaseDataSourceContext* VXMemoryDataSource_Create( VXMemoryDataSource *thiz = malloc(sizeof(VXMemoryDataSource)); VXBaseDataSourceContext *ctx = malloc(sizeof(VXBaseDataSourceContext)); + if (!thiz || !ctx) + { + return NULL; + } + ctx->d.type = TYPE_MEMORYDATASOURCE; ctx->d.ptr = thiz; @@ -362,6 +367,11 @@ VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( VXInstructionDecoder *thiz = malloc(sizeof(VXInstructionDecoder)); VXInstructionDecoderContext *ctx = malloc(sizeof(VXInstructionDecoderContext)); + if (!thiz || !ctx) + { + return NULL; + } + ctx->d.ptr = thiz; ctx->d.type = TYPE_INSTRUCTIONDECODER; @@ -1590,7 +1600,7 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, { if (info->operand[i].type != OPTYPE_NONE) { - info->operand[i - 1].access_mode = OPACCESSMODE_READ; + info->operand[i].access_mode = OPACCESSMODE_READ; } } if (info->operand[0].type != OPTYPE_NONE) diff --git a/Bindings/C/VXInstructionFormatterC.c b/Bindings/C/VXInstructionFormatterC.c index 64db11f..cd81a15 100644 --- a/Bindings/C/VXInstructionFormatterC.c +++ b/Bindings/C/VXInstructionFormatterC.c @@ -193,6 +193,11 @@ VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( VXCustomSymbolResolver *thiz = malloc(sizeof(VXCustomSymbolResolver)); VXBaseSymbolResolverContext *ctx = malloc(sizeof(VXBaseSymbolResolverContext)); + if (!thiz || !ctx) + { + return NULL; + } + ctx->d.type = TYPE_CUSTOMSYMBOLRESOLVER; ctx->d.ptr = thiz; @@ -676,6 +681,9 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( VXIntelInstructionFormatter *thiz = malloc(sizeof(VXIntelInstructionFormatter)); VXBaseInstructionFormatterContext *ctx = malloc(sizeof(VXBaseInstructionFormatterContext)); + if (!thiz || !ctx) + return NULL; + ctx->d.type = TYPE_INTELINSTRUCTIONFORMATTER; ctx->d.ptr = thiz; diff --git a/Examples/CBindings/test.c b/Examples/CBindings/test.c index 3cfa534..ae68857 100644 --- a/Examples/CBindings/test.c +++ b/Examples/CBindings/test.c @@ -113,6 +113,11 @@ int main() } } + VXBaseDataSource_Release(input32); + VXBaseDataSource_Release(input64); + VXBaseInstructionFormatter_Release(formatter); + VXInstructionDecoder_Release(decoder); + getchar(); return 0; } \ No newline at end of file From 6f0bfdbb0640afeef964234c6c2f518c52482ccc Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 16 Mar 2015 13:44:18 +0100 Subject: [PATCH 13/33] added basic support for compilation as a shared library --- Bindings/C/VXDisassemblerUtilsC.h | 9 ++++-- Bindings/C/VXInstructionDecoderC.h | 46 ++++++++++++++-------------- Bindings/C/VXInstructionFormatterC.h | 18 +++++------ Bindings/C/VXInternalConfig.h | 44 ++++++++++++++++++++++++++ Bindings/C/VXInternalHelpersC.h | 31 +++++++++---------- Bindings/C/VXOpcodeTableInternalC.h | 18 +++++------ CMakeLists.txt | 3 +- 7 files changed, 109 insertions(+), 60 deletions(-) create mode 100644 Bindings/C/VXInternalConfig.h diff --git a/Bindings/C/VXDisassemblerUtilsC.h b/Bindings/C/VXDisassemblerUtilsC.h index ffc1210..9ab74ca 100644 --- a/Bindings/C/VXDisassemblerUtilsC.h +++ b/Bindings/C/VXDisassemblerUtilsC.h @@ -33,8 +33,11 @@ #ifndef _VDE_VXDISASSEMBLERUTILSC_H_ #define _VDE_VXDISASSEMBLERUTILSC_H_ -#include #include "VXDisassemblerTypesC.h" +#include "VXInternalConfig.h" + +#include + #ifdef __cplusplus extern "C" @@ -53,7 +56,9 @@ typedef struct _VXContextDescriptor * @param operand The operand. * @return The absolute target address. */ -uint64_t VXCalcAbsoluteTarget(const VXInstructionInfo *info, const VXOperandInfo *operand); +VX_EXPORT uint64_t VXCalcAbsoluteTarget( + const VXInstructionInfo *info, + const VXOperandInfo *operand); #ifdef __cplusplus } diff --git a/Bindings/C/VXInstructionDecoderC.h b/Bindings/C/VXInstructionDecoderC.h index b3a6607..bf3058c 100644 --- a/Bindings/C/VXInstructionDecoderC.h +++ b/Bindings/C/VXInstructionDecoderC.h @@ -53,7 +53,7 @@ typedef struct _VXBaseDataSourceContext { VXContextDescriptor d; } VXBaseDataSou * @param ctx The context to release. * The context may no longer be used after it was released. */ -void VXBaseDataSource_Release( +VX_EXPORT void VXBaseDataSource_Release( VXBaseDataSourceContext *ctx); /** @@ -65,7 +65,7 @@ void VXBaseDataSource_Release( * field of the @c info parameter for error flags. Possible error values are * @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ -uint8_t VXBaseDataSource_InputPeek( +VX_EXPORT uint8_t VXBaseDataSource_InputPeek( VXBaseDataSourceContext *ctx, VXInstructionInfo *info); @@ -80,28 +80,28 @@ uint8_t VXBaseDataSource_InputPeek( * parameter. This function also appends the new byte to to @c data field of the @c info * parameter. */ -uint8_t VXBaseDataSource_InputNext8( +VX_EXPORT uint8_t VXBaseDataSource_InputNext8( VXBaseDataSourceContext *ctx, VXInstructionInfo *info); /** * @copydoc VXBaseDataSource_InputNext8 */ -uint16_t VXBaseDataSource_InputNext16( +VX_EXPORT uint16_t VXBaseDataSource_InputNext16( VXBaseDataSourceContext *ctx, VXInstructionInfo *info); /** * @copydoc VXBaseDataSource_InputNext8 */ -uint32_t VXBaseDataSource_InputNext32( +VX_EXPORT uint32_t VXBaseDataSource_InputNext32( VXBaseDataSourceContext *ctx, VXInstructionInfo *info); /** * @copydoc VXBaseDataSource_InputNext8 */ -uint64_t VXBaseDataSource_InputNext64( +VX_EXPORT uint64_t VXBaseDataSource_InputNext64( VXBaseDataSourceContext *ctx, VXInstructionInfo *info); @@ -112,7 +112,7 @@ uint64_t VXBaseDataSource_InputNext64( * The current input byte is set everytime the @c inputPeek or @c inputNext method is called. */ // TODO: check long descr -uint8_t VXBaseDataSource_InputCurrent( +VX_EXPORT uint8_t VXBaseDataSource_InputCurrent( const VXBaseDataSourceContext *ctx); /** @@ -120,7 +120,7 @@ uint8_t VXBaseDataSource_InputCurrent( * @param ctx The data soruce context. * @return @c true if end of input, @c false if not. */ -bool VXBaseDataSource_IsEndOfInput( +VX_EXPORT bool VXBaseDataSource_IsEndOfInput( const VXBaseDataSourceContext *ctx); /** @@ -128,7 +128,7 @@ bool VXBaseDataSource_IsEndOfInput( * @param ctx The data soruce context. * @return The current input position. */ -uint64_t VXBaseDataSource_GetPosition( +VX_EXPORT uint64_t VXBaseDataSource_GetPosition( const VXBaseDataSourceContext *ctx); /** @@ -137,7 +137,7 @@ uint64_t VXBaseDataSource_GetPosition( * @param position The new input position. * @return @c false if the new position exceeds the maximum input length. */ -bool VXBaseDataSource_SetPosition( +VX_EXPORT bool VXBaseDataSource_SetPosition( VXBaseDataSourceContext *ctx, uint64_t position); @@ -151,7 +151,7 @@ bool VXBaseDataSource_SetPosition( * @see VXBaseDataSource_Release */ // TODO: verify return value -VXBaseDataSourceContext* VXMemoryDataSource_Create( +VX_EXPORT VXBaseDataSourceContext* VXMemoryDataSource_Create( const void* buffer, size_t bufferLen); @@ -190,7 +190,7 @@ typedef struct _VXInstructionDecoderContext * @see VXInstructionDecoder_Release */ // TODO: verify return value -VXInstructionDecoderContext* VXInstructionDecoder_Create(void); +VX_EXPORT VXInstructionDecoderContext* VXInstructionDecoder_Create(void); /** * @brief Creates an instruction decoder. @@ -201,7 +201,7 @@ VXInstructionDecoderContext* VXInstructionDecoder_Create(void); * @return @c NULL if it fails, else an instruction decoder context. * @see VXInstructionDecoder_Release */ -VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( +VX_EXPORT VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( VXBaseDataSourceContext *input, VXDisassemblerMode disassemblerMode, VXInstructionSetVendor preferredVendor, @@ -211,7 +211,7 @@ VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( * @brief Releases an instruction decoder. * @param ctx The context of the instruction decoder to release. */ -void VXInstructionDecoder_Release( +VX_EXPORT void VXInstructionDecoder_Release( VXInstructionDecoderContext *ctx); /** @@ -223,7 +223,7 @@ void VXInstructionDecoder_Release( * length. In all other cases (valid and invalid instructions) the return value is * @c true. */ -bool VXInstructionDecoder_DecodeInstruction( +VX_EXPORT bool VXInstructionDecoder_DecodeInstruction( VXInstructionDecoderContext *ctx, VXInstructionInfo *info); @@ -232,7 +232,7 @@ bool VXInstructionDecoder_DecodeInstruction( * @param ctx The instruction decoder context. * @return The context of the data source. */ -VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( +VX_EXPORT VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( const VXInstructionDecoderContext *ctx); /** @@ -240,7 +240,7 @@ VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( * @param ctx The instruction decoder context. * @param input The context of the new input data source. */ -void VXInstructionDecoder_SetDataSource( +VX_EXPORT void VXInstructionDecoder_SetDataSource( VXInstructionDecoderContext *ctx, VXBaseDataSourceContext *input); @@ -249,7 +249,7 @@ void VXInstructionDecoder_SetDataSource( * @param ctx The instruction decoder context. * @return The current disassembler mode. */ -VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( +VX_EXPORT VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( const VXInstructionDecoderContext *ctx); /** @@ -257,7 +257,7 @@ VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( * @param ctx The instruction decoder context. * @param disassemblerMode The new disassembler mode. */ -void VXInstructionDecoder_SetDisassemblerMode( +VX_EXPORT void VXInstructionDecoder_SetDisassemblerMode( VXInstructionDecoderContext *ctx, VXDisassemblerMode disassemblerMode); @@ -266,7 +266,7 @@ void VXInstructionDecoder_SetDisassemblerMode( * @param ctx The instruction decoder context. * @return The preferred instruction-set vendor. */ -VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( +VX_EXPORT VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( const VXInstructionDecoderContext *ctx); /** @@ -274,7 +274,7 @@ VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( * @param ctx The instruction decoder context. * @param preferredVendor The new preferred instruction-set vendor. */ -void VXInstructionDecoder_SetPreferredVendor( +VX_EXPORT void VXInstructionDecoder_SetPreferredVendor( VXInstructionDecoderContext *ctx, VXInstructionSetVendor preferredVendor); @@ -283,7 +283,7 @@ void VXInstructionDecoder_SetPreferredVendor( * @param ctx The instruction decoder context. * @return The current instruction pointer. */ -uint64_t VXInstructionDecoder_GetInstructionPointer( +VX_EXPORT uint64_t VXInstructionDecoder_GetInstructionPointer( const VXInstructionDecoderContext *ctx); /** @@ -291,7 +291,7 @@ uint64_t VXInstructionDecoder_GetInstructionPointer( * @param ctx The instruction decoder context. * @param instructionPointer The new instruction pointer. */ -void VXInstructionDecoder_SetInstructionPointer( +VX_EXPORT void VXInstructionDecoder_SetInstructionPointer( VXInstructionDecoderContext *ctx, uint64_t instructionPointer); diff --git a/Bindings/C/VXInstructionFormatterC.h b/Bindings/C/VXInstructionFormatterC.h index d38b66b..0507ec8 100644 --- a/Bindings/C/VXInstructionFormatterC.h +++ b/Bindings/C/VXInstructionFormatterC.h @@ -53,7 +53,7 @@ typedef struct _VXBaseSymbolResolverContext * @param ctx The context of the symbol resolver to free. * The context may no longer used after it was released. */ -void VXBaseSymbolResolver_Release( +VX_EXPORT void VXBaseSymbolResolver_Release( VXBaseSymbolResolverContext *ctx); /** @@ -65,7 +65,7 @@ void VXBaseSymbolResolver_Release( * the base address of the symbol. * @return The name of the symbol if the symbol was found, else @c NULL. */ -const char* VXBaseSymbolResolver_ResolveSymbol( +VX_EXPORT const char* VXBaseSymbolResolver_ResolveSymbol( VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, @@ -86,7 +86,7 @@ typedef const char* (*VXCustomSymbolResolver_ResolveSymbolCallback)( * May also be @c NULL. * @return @c NULL if it fails, else a symbol resolver context. */ -VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( +VX_EXPORT VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); @@ -104,7 +104,7 @@ typedef struct _VXBaseInstructionFormatterContext * @return Pointer to the formatted instruction string. This pointer remains valid until * this function is called again or the context is released. */ -const char* VXBaseInstructionFormatter_FormatInstruction( +VX_EXPORT const char* VXBaseInstructionFormatter_FormatInstruction( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); @@ -113,7 +113,7 @@ const char* VXBaseInstructionFormatter_FormatInstruction( * @param ctx The instruction formatter context. * @return Pointer to the current symbol resolver or @c NULL if no symbol resolver is used. */ -VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( +VX_EXPORT VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( const VXBaseInstructionFormatterContext *ctx); /** @@ -122,7 +122,7 @@ VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol * resolver should be used. */ -void VXBaseInstructionFormatter_SetSymbolResolver( +VX_EXPORT void VXBaseInstructionFormatter_SetSymbolResolver( VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *resolver); @@ -131,7 +131,7 @@ void VXBaseInstructionFormatter_SetSymbolResolver( * @param ctx The context of the instruction formatter to release. * The context may no longer used after it has been released. */ -void VXBaseInstructionFormatter_Release( +VX_EXPORT void VXBaseInstructionFormatter_Release( VXBaseInstructionFormatterContext *ctx); /* VXIntelInstructionFormatter ================================================================ */ @@ -141,7 +141,7 @@ void VXBaseInstructionFormatter_Release( * @return @c NULL if it fails, else an Intel instruction formatter context. * @see VXBaseInstructionFormatter_Release */ -VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); +VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); /** * @brief Creates an Intel-syntax instruction formatter. @@ -149,7 +149,7 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); * @return @c NULL if it fails, else an Intel instruction formatter context. * @see VXBaseInstructionFormatter_Release */ -VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( +VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( VXBaseSymbolResolverContext *resolver); /* ============================================================================================= */ diff --git a/Bindings/C/VXInternalConfig.h b/Bindings/C/VXInternalConfig.h new file mode 100644 index 0000000..9ef7753 --- /dev/null +++ b/Bindings/C/VXInternalConfig.h @@ -0,0 +1,44 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : athre0z + Modifications : + + Last change : 16. March 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#ifndef _VDE_VXINTERNALCONFIG_H_ +#define _VDE_VXINTERNALCONFIG_H_ + +#ifdef _MSC_VER +# define VX_INLINE __inline +#else +# define VX_INLINE inline +#endif + +#define VX_EXPORT + +#endif /* _VDE_VXINTERNALCONFIG_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXInternalHelpersC.h b/Bindings/C/VXInternalHelpersC.h index d0bd0c8..2ea5ca7 100644 --- a/Bindings/C/VXInternalHelpersC.h +++ b/Bindings/C/VXInternalHelpersC.h @@ -35,6 +35,7 @@ #include "VXInstructionDecoderC.h" #include "VXInstructionFormatterC.h" +#include "VXInternalConfig.h" #include @@ -56,9 +57,7 @@ typedef enum _VXTypeId /* Context conversion helpers ================================================================== */ -// TODO: don't use __inline - -__inline struct _VXBaseDataSource* VXBaseDataSource_thiz( +VX_INLINE struct _VXBaseDataSource* VXBaseDataSource_thiz( VXBaseDataSourceContext *ctx) { assert(ctx->d.type == TYPE_BASEDATASOURCE @@ -66,7 +65,7 @@ __inline struct _VXBaseDataSource* VXBaseDataSource_thiz( return (struct _VXBaseDataSource*)ctx->d.ptr; } -__inline const struct _VXBaseDataSource* VXBaseDataSource_cthiz( +VX_INLINE const struct _VXBaseDataSource* VXBaseDataSource_cthiz( const VXBaseDataSourceContext *ctx) { assert(ctx->d.type == TYPE_BASEDATASOURCE @@ -74,35 +73,35 @@ __inline const struct _VXBaseDataSource* VXBaseDataSource_cthiz( return (const struct _VXBaseDataSource*)ctx->d.ptr; } -__inline struct _VXMemoryDataSource* VXMemoryDataSource_thiz( +VX_INLINE struct _VXMemoryDataSource* VXMemoryDataSource_thiz( VXBaseDataSourceContext *ctx) { assert(ctx->d.type == TYPE_MEMORYDATASOURCE); return (struct _VXMemoryDataSource*)ctx->d.ptr; } -__inline const struct _VXMemoryDataSource* VXMemoryDataSource_cthiz( +VX_INLINE const struct _VXMemoryDataSource* VXMemoryDataSource_cthiz( const VXBaseDataSourceContext *ctx) { assert(ctx->d.type == TYPE_MEMORYDATASOURCE); return (const struct _VXMemoryDataSource*)ctx->d.ptr; } -__inline struct _VXInstructionDecoder* VXInstructionDecoder_thiz( +VX_INLINE struct _VXInstructionDecoder* VXInstructionDecoder_thiz( VXInstructionDecoderContext *ctx) { assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); return (struct _VXInstructionDecoder*)ctx->d.ptr; } -__inline const struct _VXInstructionDecoder* VXInstructionDecoder_cthiz( +VX_INLINE const struct _VXInstructionDecoder* VXInstructionDecoder_cthiz( const VXInstructionDecoderContext *ctx) { assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); return (const struct _VXInstructionDecoder*)ctx->d.ptr; } -__inline struct _VXBaseSymbolResolver* VXBaseSymbolResolver_thiz( +VX_INLINE struct _VXBaseSymbolResolver* VXBaseSymbolResolver_thiz( VXBaseSymbolResolverContext *ctx) { assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER @@ -110,7 +109,7 @@ __inline struct _VXBaseSymbolResolver* VXBaseSymbolResolver_thiz( return (struct _VXBaseSymbolResolver*)ctx->d.ptr; } -__inline const struct _VXBaseSymbolResolver* VXBaseSymbolResolver_cthiz( +VX_INLINE const struct _VXBaseSymbolResolver* VXBaseSymbolResolver_cthiz( const VXBaseSymbolResolverContext *ctx) { assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER @@ -118,21 +117,21 @@ __inline const struct _VXBaseSymbolResolver* VXBaseSymbolResolver_cthiz( return (const struct _VXBaseSymbolResolver*)ctx->d.ptr; } -__inline struct _VXCustomSymbolResolver* VXCustomSymbolResolver_thiz( +VX_INLINE struct _VXCustomSymbolResolver* VXCustomSymbolResolver_thiz( VXBaseSymbolResolverContext *ctx) { assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); return (struct _VXCustomSymbolResolver*)ctx->d.ptr; } -__inline const struct _VXCustomSymbolResolver* VXCustomSymbolResolver_cthiz( +VX_INLINE const struct _VXCustomSymbolResolver* VXCustomSymbolResolver_cthiz( const VXBaseSymbolResolverContext *ctx) { assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); return (const struct _VXCustomSymbolResolver*)ctx->d.ptr; } -__inline struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_thiz( +VX_INLINE struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_thiz( VXBaseInstructionFormatterContext *ctx) { assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER @@ -140,7 +139,7 @@ __inline struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_thiz( return (struct _VXBaseInstructionFormatter*)ctx->d.ptr; } -__inline const struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_cthiz( +VX_INLINE const struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_cthiz( const VXBaseInstructionFormatterContext *ctx) { assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER @@ -148,14 +147,14 @@ __inline const struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_ct return (const struct _VXBaseInstructionFormatter*)ctx->d.ptr; } -__inline struct _VXIntelInstructionFormatter* VXIntelInstructionFormatter_thiz( +VX_INLINE struct _VXIntelInstructionFormatter* VXIntelInstructionFormatter_thiz( VXBaseInstructionFormatterContext *ctx) { assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); return (struct _VXIntelInstructionFormatter*)ctx->d.ptr; } -__inline const struct _VXIntelInstructionFormatter* VXIntelInstructionFormatter_cthiz( +VX_INLINE const struct _VXIntelInstructionFormatter* VXIntelInstructionFormatter_cthiz( const VXBaseInstructionFormatterContext *ctx) { assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); diff --git a/Bindings/C/VXOpcodeTableInternalC.h b/Bindings/C/VXOpcodeTableInternalC.h index 83e293b..54e1614 100644 --- a/Bindings/C/VXOpcodeTableInternalC.h +++ b/Bindings/C/VXOpcodeTableInternalC.h @@ -168,7 +168,7 @@ extern const char* vxInstrMnemonicStrings[]; * @param node The node. * @return The type of the specified opcode tree node. */ -__inline VXOpcodeTreeNodeType VXGetOpcodeNodeType(VXOpcodeTreeNode node) +VX_INLINE VXOpcodeTreeNodeType VXGetOpcodeNodeType(VXOpcodeTreeNode node) { return (VXOpcodeTreeNodeType)((node >> 12) & 0x0F); } @@ -178,7 +178,7 @@ __inline VXOpcodeTreeNodeType VXGetOpcodeNodeType(VXOpcodeTreeNode node) * @param node The node. * @return The value of the specified opcode tree node. */ -__inline uint16_t VXGetOpcodeNodeValue(VXOpcodeTreeNode node) +VX_INLINE uint16_t VXGetOpcodeNodeValue(VXOpcodeTreeNode node) { return (node & 0x0FFF); } @@ -187,7 +187,7 @@ __inline uint16_t VXGetOpcodeNodeValue(VXOpcodeTreeNode node) * @brief Returns the root node of the opcode tree. * @return The root node of the opcode tree. */ -__inline VXOpcodeTreeNode VXGetOpcodeTreeRoot() +VX_INLINE VXOpcodeTreeNode VXGetOpcodeTreeRoot() { return 0x1000; } @@ -198,7 +198,7 @@ __inline VXOpcodeTreeNode VXGetOpcodeTreeRoot() * @param index The index of the child node to retrieve. * @return The specified child node. */ -__inline VXOpcodeTreeNode VXGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_t index) +VX_INLINE VXOpcodeTreeNode VXGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_t index) { VXOpcodeTreeNodeType nodeType = VXGetOpcodeNodeType(parent); uint16_t tableIndex = VXGetOpcodeNodeValue(parent); @@ -257,7 +257,7 @@ __inline VXOpcodeTreeNode VXGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_t * @param node The instruction definition node. * @return Pointer to the instruction definition. */ -__inline const VXInstructionDefinition* VXGetInstructionDefinition(VXOpcodeTreeNode node) +VX_INLINE const VXInstructionDefinition* VXGetInstructionDefinition(VXOpcodeTreeNode node) { assert(VXGetOpcodeNodeType(node) == OTNT_INSTRUCTION_DEFINITION); return &vxInstrDefinitions[node & 0x0FFF]; @@ -268,7 +268,7 @@ __inline const VXInstructionDefinition* VXGetInstructionDefinition(VXOpcodeTreeN * @param mnemonic The mnemonic. * @return The instruction mnemonic string. */ -__inline const char* VXGetInstructionMnemonicString(VXInstructionMnemonic mnemonic) +VX_INLINE const char* VXGetInstructionMnemonicString(VXInstructionMnemonic mnemonic) { return vxInstrMnemonicStrings[(uint16_t)mnemonic]; } @@ -278,7 +278,7 @@ __inline const char* VXGetInstructionMnemonicString(VXInstructionMnemonic mnemon * @param operandSize The defined operand size. * @return The the numeric value for the simple operand size definition. */ -__inline uint16_t VXGetSimpleOperandSize(VXDefinedOperandSize operandSize) +VX_INLINE uint16_t VXGetSimpleOperandSize(VXDefinedOperandSize operandSize) { static const uint16_t operandSizes[8] = { @@ -295,7 +295,7 @@ __inline uint16_t VXGetSimpleOperandSize(VXDefinedOperandSize operandSize) * @param operandSize The defined operand size. * @return The memory-size part of the operand size definition. */ -__inline VXDefinedOperandSize VXGetComplexOperandMemSize(VXDefinedOperandSize operandSize) +VX_INLINE VXDefinedOperandSize VXGetComplexOperandMemSize(VXDefinedOperandSize operandSize) { return (VXDefinedOperandSize)(operandSize & 0x0F); } @@ -305,7 +305,7 @@ __inline VXDefinedOperandSize VXGetComplexOperandMemSize(VXDefinedOperandSize op * @param operandSize The defined operand size. * @return The register-size part of the operand size definition. */ -__inline VXDefinedOperandSize VXGetComplexOperandRegSize(VXDefinedOperandSize operandSize) +VX_INLINE VXDefinedOperandSize VXGetComplexOperandRegSize(VXDefinedOperandSize operandSize) { return (VXDefinedOperandSize)((operandSize >> 4) & 0x0F); } diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a9c0ae..f47e14d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,8 @@ if (BUILD_C_BINDINGS) "Bindings/C/VXInstructionFormatterC.h" "Bindings/C/VXOpcodeTableC.h" "Bindings/C/VXOpcodeTableInternalC.h" - "Bindings/C/VXInternalHelpersC.h") + "Bindings/C/VXInternalHelpersC.h" + "Bindings/C/VXInternalConfig.h") set(vdec_sources "Bindings/C/VXDisassemblerUtilsC.c" "Bindings/C/VXInstructionFormatterC.c" From 86b88d2e6b00615714fb8b2ba32bc21dfc8bcf33 Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 16 Mar 2015 14:12:18 +0100 Subject: [PATCH 14/33] corrected some "static" declarations --- Bindings/C/VXInstructionDecoderC.c | 59 ++++++++++++++-------------- Bindings/C/VXInstructionFormatterC.c | 46 +++++++++++----------- Bindings/C/VXInternalHelpersC.h | 3 -- 3 files changed, 53 insertions(+), 55 deletions(-) diff --git a/Bindings/C/VXInstructionDecoderC.c b/Bindings/C/VXInstructionDecoderC.c index 7c6d862..3d44a4d 100644 --- a/Bindings/C/VXInstructionDecoderC.c +++ b/Bindings/C/VXInstructionDecoderC.c @@ -60,9 +60,8 @@ typedef struct _VXBaseDataSource VXBaseDataSource_SetPositionCallback setPosition; } VXBaseDataSource; -void VXBaseDataSource_Construct(VXBaseDataSourceContext *ctx); -void VXBaseDataSource_Destruct(VXBaseDataSourceContext *ctx); -void VXBaseDataSource_Release(VXBaseDataSourceContext *ctx); +static void VXBaseDataSource_Construct(VXBaseDataSourceContext *ctx); +static void VXBaseDataSource_Destruct(VXBaseDataSourceContext *ctx); uint8_t VXBaseDataSource_InputPeek(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); uint16_t VXBaseDataSource_InputNext16(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); @@ -80,14 +79,14 @@ typedef struct _VXMemoryDataSource uint64_t inputBufferPos; } VXMemoryDataSource; -void VXMemoryDataSource_Construct(VXBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen); -void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx); +static void VXMemoryDataSource_Construct(VXBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen); +static void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx); VXBaseDataSourceContext* VXMemoryDataSource_Create(const void* buffer, size_t bufferLen); -uint8_t VXMemoryDataSource_InternalInputPeek(VXBaseDataSourceContext *ctx); -uint8_t VXMemoryDataSource_InternalInputNext(VXBaseDataSourceContext *ctx); -bool VXMemoryDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx); -uint64_t VXMemoryDataSource_GetPosition(const VXBaseDataSourceContext *ctx); -bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position); +static uint8_t VXMemoryDataSource_InternalInputPeek(VXBaseDataSourceContext *ctx); +static uint8_t VXMemoryDataSource_InternalInputNext(VXBaseDataSourceContext *ctx); +static bool VXMemoryDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx); +static uint64_t VXMemoryDataSource_GetPosition(const VXBaseDataSourceContext *ctx); +static bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position); /* VXInstructionDecoder ------------------------------------------------------------------------ */ @@ -109,12 +108,12 @@ typedef enum _VXRegisterClass /* : uint8_t */ RC_XMM } VXRegisterClass; -uint8_t VXInstructionDecoder_InputPeek(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -uint8_t VXInstructionDecoder_InputNext8(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -uint16_t VXInstructionDecoder_InputNext16(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -uint32_t VXInstructionDecoder_InputNext32(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -uint64_t VXInstructionDecoder_InputNext64(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -uint8_t VXInstructionDecoder_InputCurrent(const VXInstructionDecoderContext *ctx); +static uint8_t VXInstructionDecoder_InputPeek(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static uint8_t VXInstructionDecoder_InputNext8(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static uint16_t VXInstructionDecoder_InputNext16(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static uint32_t VXInstructionDecoder_InputNext32(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static uint64_t VXInstructionDecoder_InputNext64(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static uint8_t VXInstructionDecoder_InputCurrent(const VXInstructionDecoderContext *ctx); VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource(const VXInstructionDecoderContext *ctx); void VXInstructionDecoder_SetDataSource(VXInstructionDecoderContext *ctx, VXBaseDataSourceContext *input); VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode(const VXInstructionDecoderContext *ctx); @@ -123,20 +122,20 @@ VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor(const VXInstructi void VXInstructionDecoder_SetPreferredVendor(VXInstructionDecoderContext *ctx, VXInstructionSetVendor preferredVendor); uint64_t VXInstructionDecoder_GetInstructionPointer(const VXInstructionDecoderContext *ctx); void VXInstructionDecoder_SetInstructionPointer(VXInstructionDecoderContext *ctx, uint64_t instructionPointer); -bool VXInstructionDecoder_DecodeRegisterOperand(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize); -bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, VXDefinedOperandSize operandSize); -bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandSize operandSize); -bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, uint8_t size); -bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -uint16_t VXInstructionDecoder_GetEffectiveOperandSize(const VXInstructionDecoderContext *ctx, const VXInstructionInfo *info, VXDefinedOperandSize operandSize); -bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandType operandType, VXDefinedOperandSize operandSize); -void VXInstructionDecoder_ResolveOperandAndAddressMode(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -void VXInstructionDecoder_CalculateEffectiveRexVexValues(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodeRegisterOperand(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize); +static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, VXDefinedOperandSize operandSize); +static bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandSize operandSize); +static bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, uint8_t size); +static bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static uint16_t VXInstructionDecoder_GetEffectiveOperandSize(const VXInstructionDecoderContext *ctx, const VXInstructionInfo *info, VXDefinedOperandSize operandSize); +static bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandType operandType, VXDefinedOperandSize operandSize); +static void VXInstructionDecoder_ResolveOperandAndAddressMode(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static void VXInstructionDecoder_CalculateEffectiveRexVexValues(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); VXInstructionDecoderContext* VXInstructionDecoder_Create(void); VXInstructionDecoderContext* VXInstructionDecoder_CreateEx(VXBaseDataSourceContext *input, VXDisassemblerMode disassemblerMode, VXInstructionSetVendor preferredVendor, uint64_t instructionPointer); bool VXInstructionDecoder_DecodeInstruction(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); diff --git a/Bindings/C/VXInstructionFormatterC.c b/Bindings/C/VXInstructionFormatterC.c index cd81a15..9403aa6 100644 --- a/Bindings/C/VXInstructionFormatterC.c +++ b/Bindings/C/VXInstructionFormatterC.c @@ -59,8 +59,8 @@ typedef struct _VXBaseSymbolResolver VXBaseSymbolResolver_ResolveSymbolCallback resolveCallback; } VXBaseSymbolResolver; -void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx); -void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); +static void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx); +static void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx); const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); @@ -82,22 +82,22 @@ typedef struct _VXBaseInstructionFormatter bool outputUppercase; } VXBaseInstructionFormatter; -void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); -void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); +static void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); +static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx); -void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, bool uppercase); -char const* VXBaseInstructionFormatter_RegisterToString(const VXBaseInstructionFormatterContext *ctx, VXRegister reg); -char const* VXBaseInstructionFormatter_ResolveSymbol(const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); +static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, bool uppercase); +static char const* VXBaseInstructionFormatter_RegisterToString(const VXBaseInstructionFormatterContext *ctx, VXRegister reg); +static char const* VXBaseInstructionFormatter_ResolveSymbol(const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver(const VXBaseInstructionFormatterContext *ctx); void VXBaseInstructionFormatter_SetSymbolResolver(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); const char* VXBaseInstructionFormatter_FormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); -void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx); -char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx); -void VXBaseInstructionFormatter_OutputAppend(VXBaseInstructionFormatterContext *ctx, char const *text); -void VXBaseInstructionFormatter_OutputAppendFormatted(VXBaseInstructionFormatterContext *ctx, char const *format, ...); -void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, bool resolveSymbols); -void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols); -void VXBaseInstructionFormatter_OutputAppendDisplacement(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); +static void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx); +static char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx); +static void VXBaseInstructionFormatter_OutputAppend(VXBaseInstructionFormatterContext *ctx, char const *text); +static void VXBaseInstructionFormatter_OutputAppendFormatted(VXBaseInstructionFormatterContext *ctx, char const *format, ...); +static void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, bool resolveSymbols); +static void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols); +static void VXBaseInstructionFormatter_OutputAppendDisplacement(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); /* VXCustomSymbolResolver ---------------------------------------------------------------------- */ @@ -108,10 +108,10 @@ typedef struct _VXCustomSymbolResolver void *userData; } VXCustomSymbolResolver; -void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); -void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); +static void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); +static void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create(VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); -const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); +static const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); /* VXIntelInstructionFormatter ----------------------------------------------------------------- */ @@ -120,11 +120,13 @@ typedef struct _VXIntelInstructionFormatter VXBaseInstructionFormatter super; } VXIntelInstructionFormatter; -void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); -void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); -void VXIntelInstructionFormatter_OutputAppendOperandCast(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); -void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); -void VXIntelInstructionFormatter_InternalFormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); +VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); +VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx(VXBaseSymbolResolverContext *resolver); +static void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); +static void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); +static void VXIntelInstructionFormatter_OutputAppendOperandCast(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); +static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); +static void VXIntelInstructionFormatter_InternalFormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); /* Implementation ============================================================================== */ diff --git a/Bindings/C/VXInternalHelpersC.h b/Bindings/C/VXInternalHelpersC.h index 2ea5ca7..0c63be2 100644 --- a/Bindings/C/VXInternalHelpersC.h +++ b/Bindings/C/VXInternalHelpersC.h @@ -39,9 +39,6 @@ #include -struct _VXBaseDataSource; -struct _VXInstructionDecoder; - /* Types IDs =================================================================================== */ typedef enum _VXTypeId From 30b60c7dc4b31d2f61b7129778fa626ec24b930c Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 16 Mar 2015 14:32:27 +0100 Subject: [PATCH 15/33] fixed build with clang --- Bindings/C/VXInstructionDecoderC.c | 6 ++---- Bindings/C/VXInstructionFormatterC.c | 10 +++++----- Bindings/C/VXInternalConfig.h | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Bindings/C/VXInstructionDecoderC.c b/Bindings/C/VXInstructionDecoderC.c index 3d44a4d..7b2f675 100644 --- a/Bindings/C/VXInstructionDecoderC.c +++ b/Bindings/C/VXInstructionDecoderC.c @@ -187,7 +187,7 @@ uint8_t VXBaseDataSource_InputPeek(VXBaseDataSourceContext *ctx, VXInstructionIn return thiz->currentInput; } -static uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) +uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) { VXBaseDataSource *thiz = VXBaseDataSource_thiz(ctx); @@ -208,7 +208,7 @@ static uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstr } #define VXBASEDATASOURCE_INPUTNEXT_N(n) \ - static uint##n##_t VXBaseDataSource_InputNext##n( \ + uint##n##_t VXBaseDataSource_InputNext##n( \ VXBaseDataSourceContext *ctx, VXInstructionInfo *info) \ { \ uint##n##_t result = 0; \ @@ -274,8 +274,6 @@ void VXMemoryDataSource_Construct( void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx) { - VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); - // Nothing to destruct ourselfes, just call parent destructor VXBaseDataSource_Destruct(ctx); } diff --git a/Bindings/C/VXInstructionFormatterC.c b/Bindings/C/VXInstructionFormatterC.c index 9403aa6..9af2ecb 100644 --- a/Bindings/C/VXInstructionFormatterC.c +++ b/Bindings/C/VXInstructionFormatterC.c @@ -85,7 +85,7 @@ typedef struct _VXBaseInstructionFormatter static void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx); -static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, bool uppercase); +/*static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, bool uppercase);*/ static char const* VXBaseInstructionFormatter_RegisterToString(const VXBaseInstructionFormatterContext *ctx, VXRegister reg); static char const* VXBaseInstructionFormatter_ResolveSymbol(const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver(const VXBaseInstructionFormatterContext *ctx); @@ -202,6 +202,8 @@ VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( ctx->d.type = TYPE_CUSTOMSYMBOLRESOLVER; ctx->d.ptr = thiz; + + VXCustomSymbolResolver_Construct(ctx, resolverCb, userData); return ctx; } @@ -313,11 +315,13 @@ void VXBaseInstructionFormatter_Release( free(ctx); } +/* static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, bool uppercase) { VXBaseInstructionFormatter_thiz(ctx)->outputUppercase = uppercase; } +*/ static char const* VXBaseInstructionFormatter_RegisterToString( const VXBaseInstructionFormatterContext *ctx, VXRegister reg) @@ -530,8 +534,6 @@ static void VXBaseInstructionFormatter_OutputAppendImmediate( const VXOperandInfo *operand, bool resolveSymbols) { - VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); - assert(operand->type == OPTYPE_IMMEDIATE); uint64_t value = 0; if (operand->signed_lval && (operand->size != info->operand_mode)) @@ -600,8 +602,6 @@ static void VXBaseInstructionFormatter_OutputAppendDisplacement( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand) { - VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); - assert(operand->offset > 0); if ((operand->base == REG_NONE) && (operand->index == REG_NONE)) { diff --git a/Bindings/C/VXInternalConfig.h b/Bindings/C/VXInternalConfig.h index 9ef7753..260f008 100644 --- a/Bindings/C/VXInternalConfig.h +++ b/Bindings/C/VXInternalConfig.h @@ -36,7 +36,7 @@ #ifdef _MSC_VER # define VX_INLINE __inline #else -# define VX_INLINE inline +# define VX_INLINE extern inline #endif #define VX_EXPORT From c912af00f9b3b1b4b00e05d33ca1d47864658d07 Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 16 Mar 2015 16:37:15 +0100 Subject: [PATCH 16/33] altered directory structure to use C implementation of library as the default --- Bindings/C/VXInstructionDecoderC.h | 304 --- Bindings/C/VXInstructionFormatterC.h | 161 -- Bindings/C/VXOpcodeTableC.h | 1504 ----------- .../VXDisassembler.hpp} | 19 +- .../VXDisassemblerTypes.hpp} | 171 +- .../Cpp}/VXDisassemblerUtils.cpp | 2 +- .../VXDisassemblerUtils.hpp} | 31 +- .../Cpp}/VXInstructionDecoder.cpp | 2 +- Bindings/Cpp/VXInstructionDecoder.hpp | 718 +++++ .../Cpp}/VXInstructionFormatter.cpp | 4 +- Bindings/Cpp/VXInstructionFormatter.hpp | 320 +++ .../Cpp}/VXOpcodeTable.cpp | 2 +- Bindings/Cpp/VXOpcodeTable.hpp | 1753 +++++++++++++ CMakeLists.txt | 74 +- Examples/{SimpleDemo => CppBindings}/Main.cpp | 3 +- .../CustomDataSource/CustomDataSource.vcxproj | 157 -- .../CustomDataSource.vcxproj.filters | 6 - .../CustomDataSource/{Main.cpp => Main.c} | 0 Examples/Examples.sln | 90 - Examples/PerformanceTest/{Main.cpp => Main.c} | 0 .../PerformanceTest/PerformanceTest.vcxproj | 157 -- .../PerformanceTest.vcxproj.filters | 6 - .../{CBindings/test.c => SimpleDemo/Main.c} | 2 +- Examples/SimpleDemo/SimpleDemo.vcxproj | 157 -- .../SimpleDemo/SimpleDemo.vcxproj.filters | 6 - Examples/SymbolResolver/{Main.cpp => Main.c} | 20 +- .../SymbolResolver/SymbolResolver.vcxproj | 157 -- .../SymbolResolver.vcxproj.filters | 6 - VerteronDisassemblerEngine.sln | 38 - VerteronDisassemblerEngine/VXDisassembler.h | 12 +- .../VXDisassemblerTypes.h | 169 +- .../VXDisassemblerUtils.c | 2 +- .../VXDisassemblerUtils.h | 31 +- .../VXInstructionDecoder.c | 16 +- .../VXInstructionDecoder.h | 892 ++----- .../VXInstructionFormatter.c | 8 +- .../VXInstructionFormatter.h | 377 +-- .../VXInternalConfig.h | 10 +- .../VXInternalHelpers.h | 4 +- .../VXOpcodeTable.c | 2 +- VerteronDisassemblerEngine/VXOpcodeTable.h | 2329 ++++++++--------- .../VXOpcodeTableInternal.h | 2 +- .../VerteronDisassemblerEngine.vcxproj | 147 -- ...VerteronDisassemblerEngine.vcxproj.filters | 17 - 44 files changed, 4483 insertions(+), 5405 deletions(-) delete mode 100644 Bindings/C/VXInstructionDecoderC.h delete mode 100644 Bindings/C/VXInstructionFormatterC.h delete mode 100644 Bindings/C/VXOpcodeTableC.h rename Bindings/{C/VXDisassemblerC.h => Cpp/VXDisassembler.hpp} (76%) rename Bindings/{C/VXDisassemblerTypesC.h => Cpp/VXDisassemblerTypes.hpp} (80%) rename {VerteronDisassemblerEngine => Bindings/Cpp}/VXDisassemblerUtils.cpp (98%) rename Bindings/{C/VXDisassemblerUtilsC.h => Cpp/VXDisassemblerUtils.hpp} (76%) rename {VerteronDisassemblerEngine => Bindings/Cpp}/VXInstructionDecoder.cpp (99%) create mode 100644 Bindings/Cpp/VXInstructionDecoder.hpp rename {VerteronDisassemblerEngine => Bindings/Cpp}/VXInstructionFormatter.cpp (99%) create mode 100644 Bindings/Cpp/VXInstructionFormatter.hpp rename {VerteronDisassemblerEngine => Bindings/Cpp}/VXOpcodeTable.cpp (99%) create mode 100644 Bindings/Cpp/VXOpcodeTable.hpp rename Examples/{SimpleDemo => CppBindings}/Main.cpp (99%) delete mode 100644 Examples/CustomDataSource/CustomDataSource.vcxproj delete mode 100644 Examples/CustomDataSource/CustomDataSource.vcxproj.filters rename Examples/CustomDataSource/{Main.cpp => Main.c} (100%) delete mode 100644 Examples/Examples.sln rename Examples/PerformanceTest/{Main.cpp => Main.c} (100%) delete mode 100644 Examples/PerformanceTest/PerformanceTest.vcxproj delete mode 100644 Examples/PerformanceTest/PerformanceTest.vcxproj.filters rename Examples/{CBindings/test.c => SimpleDemo/Main.c} (99%) delete mode 100644 Examples/SimpleDemo/SimpleDemo.vcxproj delete mode 100644 Examples/SimpleDemo/SimpleDemo.vcxproj.filters rename Examples/SymbolResolver/{Main.cpp => Main.c} (95%) delete mode 100644 Examples/SymbolResolver/SymbolResolver.vcxproj delete mode 100644 Examples/SymbolResolver/SymbolResolver.vcxproj.filters delete mode 100644 VerteronDisassemblerEngine.sln rename Bindings/C/VXDisassemblerUtilsC.c => VerteronDisassemblerEngine/VXDisassemblerUtils.c (98%) rename Bindings/C/VXInstructionDecoderC.c => VerteronDisassemblerEngine/VXInstructionDecoder.c (99%) rename Bindings/C/VXInstructionFormatterC.c => VerteronDisassemblerEngine/VXInstructionFormatter.c (99%) rename {Bindings/C => VerteronDisassemblerEngine}/VXInternalConfig.h (84%) rename Bindings/C/VXInternalHelpersC.h => VerteronDisassemblerEngine/VXInternalHelpers.h (98%) rename Bindings/C/VXOpcodeTableC.c => VerteronDisassemblerEngine/VXOpcodeTable.c (99%) rename Bindings/C/VXOpcodeTableInternalC.h => VerteronDisassemblerEngine/VXOpcodeTableInternal.h (99%) delete mode 100644 VerteronDisassemblerEngine/VerteronDisassemblerEngine.vcxproj delete mode 100644 VerteronDisassemblerEngine/VerteronDisassemblerEngine.vcxproj.filters diff --git a/Bindings/C/VXInstructionDecoderC.h b/Bindings/C/VXInstructionDecoderC.h deleted file mode 100644 index bf3058c..0000000 --- a/Bindings/C/VXInstructionDecoderC.h +++ /dev/null @@ -1,304 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 14. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#ifndef _VDE_VXINSTRUCTIONDECODERC_H_ -#define _VDE_VXINSTRUCTIONDECODERC_H_ - -#include "VXDisassemblerTypesC.h" -#include "VXDisassemblerUtilsC.h" - -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* VXBaseDataSource ============================================================================ */ - -typedef struct _VXBaseDataSourceContext { VXContextDescriptor d; } VXBaseDataSourceContext; - -/** - * @brief Releases a data source. - * @param ctx The context to release. - * The context may no longer be used after it was released. - */ -VX_EXPORT void VXBaseDataSource_Release( - VXBaseDataSourceContext *ctx); - -/** - * @brief Reads the next byte from the data source without altering the current input position - * or the @c length field of the @c info parameter. - * @param ctx The data source context. - * @param info The instruction info struct. - * @return The current input byte. If the result is zero, you should always check the @c flags - * field of the @c info parameter for error flags. Possible error values are - * @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - */ -VX_EXPORT uint8_t VXBaseDataSource_InputPeek( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); - -/** - * @brief Reads the next byte from the data source. - * @param ctx The data soruce context. - * @param info The instruction info. - * @return The current input byte. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - * This method increases the current input position and the @c length field of the @c info - * parameter. This function also appends the new byte to to @c data field of the @c info - * parameter. - */ -VX_EXPORT uint8_t VXBaseDataSource_InputNext8( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); - -/** - * @copydoc VXBaseDataSource_InputNext8 - */ -VX_EXPORT uint16_t VXBaseDataSource_InputNext16( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); - -/** - * @copydoc VXBaseDataSource_InputNext8 - */ -VX_EXPORT uint32_t VXBaseDataSource_InputNext32( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); - -/** - * @copydoc VXBaseDataSource_InputNext8 - */ -VX_EXPORT uint64_t VXBaseDataSource_InputNext64( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); - -/** - * @brief Returns the current input byte. - * @param ctx The data soruce context. - * @return The current input byte. - * The current input byte is set everytime the @c inputPeek or @c inputNext method is called. - */ -// TODO: check long descr -VX_EXPORT uint8_t VXBaseDataSource_InputCurrent( - const VXBaseDataSourceContext *ctx); - -/** - * @brief Queries if the end of the data source is reached. - * @param ctx The data soruce context. - * @return @c true if end of input, @c false if not. - */ -VX_EXPORT bool VXBaseDataSource_IsEndOfInput( - const VXBaseDataSourceContext *ctx); - -/** - * @brief Returns the current input position. - * @param ctx The data soruce context. - * @return The current input position. - */ -VX_EXPORT uint64_t VXBaseDataSource_GetPosition( - const VXBaseDataSourceContext *ctx); - -/** - * @brief Sets a new input position. - * @param ctx The data soruce context. - * @param position The new input position. - * @return @c false if the new position exceeds the maximum input length. - */ -VX_EXPORT bool VXBaseDataSource_SetPosition( - VXBaseDataSourceContext *ctx, - uint64_t position); - -/* VXMemoryDataSource ========================================================================== */ - -/** - * @brief Creates a memory data source. - * @param buffer The input buffer. - * @param bufferLen THe length of the input buffer. - * @return @c NULL if it fails, else a data source context. - * @see VXBaseDataSource_Release - */ -// TODO: verify return value -VX_EXPORT VXBaseDataSourceContext* VXMemoryDataSource_Create( - const void* buffer, - size_t bufferLen); - -/* Enums ======================================================================================= */ - -/** - * @brief Values that represent a disassembler mode. - */ -typedef enum _VXDisassemblerMode /* : uint8_t */ -{ - DM_M16BIT, - DM_M32BIT, - DM_M64BIT -} VXDisassemblerMode; - -/** - * @brief Values that represent an instruction-set vendor. - */ -typedef enum _VXInstructionSetVendor /* : uint8_t */ -{ - ISV_ANY, - ISV_INTEL, - ISV_AMD -} VXInstructionSetVendor; - -/* VXInstructionDecoder ======================================================================== */ - -typedef struct _VXInstructionDecoderContext -{ - VXContextDescriptor d; -} VXInstructionDecoderContext; - -/** - * @brief Creates an instruction decoder. - * @return @c NULL if it fails, else an instruction decoder context. - * @see VXInstructionDecoder_Release - */ -// TODO: verify return value -VX_EXPORT VXInstructionDecoderContext* VXInstructionDecoder_Create(void); - -/** - * @brief Creates an instruction decoder. - * @param input A reference to the input data source. - * @param disassemblerMode The disassembler mode. - * @param preferredVendor The preferred instruction-set vendor. - * @param instructionPointer The initial instruction pointer. - * @return @c NULL if it fails, else an instruction decoder context. - * @see VXInstructionDecoder_Release - */ -VX_EXPORT VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( - VXBaseDataSourceContext *input, - VXDisassemblerMode disassemblerMode, - VXInstructionSetVendor preferredVendor, - uint64_t instructionPointer); - -/** - * @brief Releases an instruction decoder. - * @param ctx The context of the instruction decoder to release. - */ -VX_EXPORT void VXInstructionDecoder_Release( - VXInstructionDecoderContext *ctx); - -/** - * @brief Decodes the next instruction from the input data source. - * @param ctx The instruction decoder context. - * @param info The @c VXInstructionInfo struct that receives the information about the decoded - * instruction. - * @return This function returns @c false if the current position exceeds the maximum input - * length. In all other cases (valid and invalid instructions) the return value is - * @c true. - */ -VX_EXPORT bool VXInstructionDecoder_DecodeInstruction( - VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); - -/** - * @brief Returns a pointer to the current data source. - * @param ctx The instruction decoder context. - * @return The context of the data source. - */ -VX_EXPORT VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( - const VXInstructionDecoderContext *ctx); - -/** - * @brief Sets a new data source. - * @param ctx The instruction decoder context. - * @param input The context of the new input data source. - */ -VX_EXPORT void VXInstructionDecoder_SetDataSource( - VXInstructionDecoderContext *ctx, - VXBaseDataSourceContext *input); - -/** - * @brief Returns the current disassembler mode. - * @param ctx The instruction decoder context. - * @return The current disassembler mode. - */ -VX_EXPORT VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( - const VXInstructionDecoderContext *ctx); - -/** - * @brief Sets the current disassembler mode. - * @param ctx The instruction decoder context. - * @param disassemblerMode The new disassembler mode. - */ -VX_EXPORT void VXInstructionDecoder_SetDisassemblerMode( - VXInstructionDecoderContext *ctx, - VXDisassemblerMode disassemblerMode); - -/** - * @brief Returns the preferred instruction-set vendor. - * @param ctx The instruction decoder context. - * @return The preferred instruction-set vendor. - */ -VX_EXPORT VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( - const VXInstructionDecoderContext *ctx); - -/** - * @brief Sets the preferred instruction-set vendor. - * @param ctx The instruction decoder context. - * @param preferredVendor The new preferred instruction-set vendor. - */ -VX_EXPORT void VXInstructionDecoder_SetPreferredVendor( - VXInstructionDecoderContext *ctx, - VXInstructionSetVendor preferredVendor); - -/** - * @brief Returns the current instruction pointer. - * @param ctx The instruction decoder context. - * @return The current instruction pointer. - */ -VX_EXPORT uint64_t VXInstructionDecoder_GetInstructionPointer( - const VXInstructionDecoderContext *ctx); - -/** - * @brief Sets a new instruction pointer. - * @param ctx The instruction decoder context. - * @param instructionPointer The new instruction pointer. - */ -VX_EXPORT void VXInstructionDecoder_SetInstructionPointer( - VXInstructionDecoderContext *ctx, - uint64_t instructionPointer); - -/* ============================================================================================= */ - -#ifdef __cplusplus -} -#endif - -#endif /* _VDE_VXINSTRUCTIONDECODERC_H_ */ diff --git a/Bindings/C/VXInstructionFormatterC.h b/Bindings/C/VXInstructionFormatterC.h deleted file mode 100644 index 0507ec8..0000000 --- a/Bindings/C/VXInstructionFormatterC.h +++ /dev/null @@ -1,161 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 14. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#ifndef _VDE_VXINSTRUCTIONFORMATTERC_H_ -#define _VDE_VXINSTRUCTIONFORMATTERC_H_ - -#include "VXDisassemblerTypesC.h" -#include "VXDisassemblerUtilsC.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* VXBaseSymbolResolver ======================================================================== */ - -typedef struct _VXBaseSymbolResolverContext -{ - VXContextDescriptor d; -} VXBaseSymbolResolverContext; - -/** - * @brief Releases a symbol resolver. - * @param ctx The context of the symbol resolver to free. - * The context may no longer used after it was released. - */ -VX_EXPORT void VXBaseSymbolResolver_Release( - VXBaseSymbolResolverContext *ctx); - -/** - * @brief Resolves a symbol. - * @param ctx The symbol resolver context. - * @param info The instruction info. - * @param address The address. - * @param offset Pointer to an unsigned 64 bit integer that receives an offset relative to - * the base address of the symbol. - * @return The name of the symbol if the symbol was found, else @c NULL. - */ -VX_EXPORT const char* VXBaseSymbolResolver_ResolveSymbol( - VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, - uint64_t address, - uint64_t *offset); - -/* VXCustomSymbolResolver ====================================================================== */ - -typedef const char* (*VXCustomSymbolResolver_ResolveSymbolCallback)( - const VXInstructionInfo *info, - uint64_t address, - uint64_t *offset, - void *userData); - -/** - * @brief Creates a custom symbol resolver. - * @param resolverCb The resolver callback consulted when symbols need to be resolved. - * @param userData A pointer to arbitrary data passed to the resolver callback. - * May also be @c NULL. - * @return @c NULL if it fails, else a symbol resolver context. - */ -VX_EXPORT VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( - VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, - void *userData); - -/* VXBaseInstructionFormatter ================================================================== */ - -typedef struct _VXBaseInstructionFormatterContext -{ - VXContextDescriptor d; -} VXBaseInstructionFormatterContext; - -/** - * @brief Formats a decoded instruction. - * @param ctx The instruction formatter context. - * @param info The instruction info. - * @return Pointer to the formatted instruction string. This pointer remains valid until - * this function is called again or the context is released. - */ -VX_EXPORT const char* VXBaseInstructionFormatter_FormatInstruction( - VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info); - -/** - * @brief Returns a pointer to the current symbol resolver. - * @param ctx The instruction formatter context. - * @return Pointer to the current symbol resolver or @c NULL if no symbol resolver is used. - */ -VX_EXPORT VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( - const VXBaseInstructionFormatterContext *ctx); - -/** - * @brief Sets a new symbol resolver. - * @param ctx The instruction formatter context. - * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol - * resolver should be used. - */ -VX_EXPORT void VXBaseInstructionFormatter_SetSymbolResolver( - VXBaseInstructionFormatterContext *ctx, - VXBaseSymbolResolverContext *resolver); - -/** - * @brief Releases an instruction formatter. - * @param ctx The context of the instruction formatter to release. - * The context may no longer used after it has been released. - */ -VX_EXPORT void VXBaseInstructionFormatter_Release( - VXBaseInstructionFormatterContext *ctx); - -/* VXIntelInstructionFormatter ================================================================ */ - -/** - * @brief Creates an Intel-syntax instruction formatter. - * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see VXBaseInstructionFormatter_Release - */ -VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); - -/** - * @brief Creates an Intel-syntax instruction formatter. - * @param resolver The symbol resolver consulted to resolve symbols on formatting. - * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see VXBaseInstructionFormatter_Release - */ -VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( - VXBaseSymbolResolverContext *resolver); - -/* ============================================================================================= */ - -#ifdef __cplusplus -} -#endif - -#endif /* _VDE_VXINSTRUCTIONFORMATTERC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXOpcodeTableC.h b/Bindings/C/VXOpcodeTableC.h deleted file mode 100644 index f36cc41..0000000 --- a/Bindings/C/VXOpcodeTableC.h +++ /dev/null @@ -1,1504 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 04. February 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#ifndef _VDE_VXOPCODETABLEC_H_ -#define _VDE_VXOPCODETABLEC_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * @brief Values that represent an instruction mnemonic. - */ -typedef enum _VXInstructionMnemonic /* : uint16_t */ -{ - /* 000 */ MNEM_INVALID, - /* 001 */ MNEM_AAA, - /* 002 */ MNEM_AAD, - /* 003 */ MNEM_AAM, - /* 004 */ MNEM_AAS, - /* 005 */ MNEM_ADC, - /* 006 */ MNEM_ADD, - /* 007 */ MNEM_ADDPD, - /* 008 */ MNEM_ADDPS, - /* 009 */ MNEM_ADDSD, - /* 00A */ MNEM_ADDSS, - /* 00B */ MNEM_ADDSUBPD, - /* 00C */ MNEM_ADDSUBPS, - /* 00D */ MNEM_AESDEC, - /* 00E */ MNEM_AESDECLAST, - /* 00F */ MNEM_AESENC, - /* 010 */ MNEM_AESENCLAST, - /* 011 */ MNEM_AESIMC, - /* 012 */ MNEM_AESKEYGENASSIST, - /* 013 */ MNEM_AND, - /* 014 */ MNEM_ANDNPD, - /* 015 */ MNEM_ANDNPS, - /* 016 */ MNEM_ANDPD, - /* 017 */ MNEM_ANDPS, - /* 018 */ MNEM_ARPL, - /* 019 */ MNEM_BLENDPD, - /* 01A */ MNEM_BLENDPS, - /* 01B */ MNEM_BLENDVPD, - /* 01C */ MNEM_BLENDVPS, - /* 01D */ MNEM_BOUND, - /* 01E */ MNEM_BSF, - /* 01F */ MNEM_BSR, - /* 020 */ MNEM_BSWAP, - /* 021 */ MNEM_BT, - /* 022 */ MNEM_BTC, - /* 023 */ MNEM_BTR, - /* 024 */ MNEM_BTS, - /* 025 */ MNEM_CALL, - /* 026 */ MNEM_CBW, - /* 027 */ MNEM_CDQ, - /* 028 */ MNEM_CDQE, - /* 029 */ MNEM_CLC, - /* 02A */ MNEM_CLD, - /* 02B */ MNEM_CLFLUSH, - /* 02C */ MNEM_CLGI, - /* 02D */ MNEM_CLI, - /* 02E */ MNEM_CLTS, - /* 02F */ MNEM_CMC, - /* 030 */ MNEM_CMOVA, - /* 031 */ MNEM_CMOVAE, - /* 032 */ MNEM_CMOVB, - /* 033 */ MNEM_CMOVBE, - /* 034 */ MNEM_CMOVE, - /* 035 */ MNEM_CMOVG, - /* 036 */ MNEM_CMOVGE, - /* 037 */ MNEM_CMOVL, - /* 038 */ MNEM_CMOVLE, - /* 039 */ MNEM_CMOVNE, - /* 03A */ MNEM_CMOVNO, - /* 03B */ MNEM_CMOVNP, - /* 03C */ MNEM_CMOVNS, - /* 03D */ MNEM_CMOVO, - /* 03E */ MNEM_CMOVP, - /* 03F */ MNEM_CMOVS, - /* 040 */ MNEM_CMP, - /* 041 */ MNEM_CMPPD, - /* 042 */ MNEM_CMPPS, - /* 043 */ MNEM_CMPSB, - /* 044 */ MNEM_CMPSD, - /* 045 */ MNEM_CMPSQ, - /* 046 */ MNEM_CMPSS, - /* 047 */ MNEM_CMPSW, - /* 048 */ MNEM_CMPXCHG, - /* 049 */ MNEM_CMPXCHG16B, - /* 04A */ MNEM_CMPXCHG8B, - /* 04B */ MNEM_COMISD, - /* 04C */ MNEM_COMISS, - /* 04D */ MNEM_CPUID, - /* 04E */ MNEM_CQO, - /* 04F */ MNEM_CRC32, - /* 050 */ MNEM_CVTDQ2PD, - /* 051 */ MNEM_CVTDQ2PS, - /* 052 */ MNEM_CVTPD2DQ, - /* 053 */ MNEM_CVTPD2PI, - /* 054 */ MNEM_CVTPD2PS, - /* 055 */ MNEM_CVTPI2PD, - /* 056 */ MNEM_CVTPI2PS, - /* 057 */ MNEM_CVTPS2DQ, - /* 058 */ MNEM_CVTPS2PD, - /* 059 */ MNEM_CVTPS2PI, - /* 05A */ MNEM_CVTSD2SI, - /* 05B */ MNEM_CVTSD2SS, - /* 05C */ MNEM_CVTSI2SD, - /* 05D */ MNEM_CVTSI2SS, - /* 05E */ MNEM_CVTSS2SD, - /* 05F */ MNEM_CVTSS2SI, - /* 060 */ MNEM_CVTTPD2DQ, - /* 061 */ MNEM_CVTTPD2PI, - /* 062 */ MNEM_CVTTPS2DQ, - /* 063 */ MNEM_CVTTPS2PI, - /* 064 */ MNEM_CVTTSD2SI, - /* 065 */ MNEM_CVTTSS2SI, - /* 066 */ MNEM_CWD, - /* 067 */ MNEM_CWDE, - /* 068 */ MNEM_DAA, - /* 069 */ MNEM_DAS, - /* 06A */ MNEM_DEC, - /* 06B */ MNEM_DIV, - /* 06C */ MNEM_DIVPD, - /* 06D */ MNEM_DIVPS, - /* 06E */ MNEM_DIVSD, - /* 06F */ MNEM_DIVSS, - /* 070 */ MNEM_DPPD, - /* 071 */ MNEM_DPPS, - /* 072 */ MNEM_EMMS, - /* 073 */ MNEM_ENTER, - /* 074 */ MNEM_EXTRACTPS, - /* 075 */ MNEM_F2XM1, - /* 076 */ MNEM_FABS, - /* 077 */ MNEM_FADD, - /* 078 */ MNEM_FADDP, - /* 079 */ MNEM_FBLD, - /* 07A */ MNEM_FBSTP, - /* 07B */ MNEM_FCHS, - /* 07C */ MNEM_FCLEX, - /* 07D */ MNEM_FCMOVB, - /* 07E */ MNEM_FCMOVBE, - /* 07F */ MNEM_FCMOVE, - /* 080 */ MNEM_FCMOVNB, - /* 081 */ MNEM_FCMOVNBE, - /* 082 */ MNEM_FCMOVNE, - /* 083 */ MNEM_FCMOVNU, - /* 084 */ MNEM_FCMOVU, - /* 085 */ MNEM_FCOM, - /* 086 */ MNEM_FCOM2, - /* 087 */ MNEM_FCOMI, - /* 088 */ MNEM_FCOMIP, - /* 089 */ MNEM_FCOMP, - /* 08A */ MNEM_FCOMP3, - /* 08B */ MNEM_FCOMP5, - /* 08C */ MNEM_FCOMPP, - /* 08D */ MNEM_FCOS, - /* 08E */ MNEM_FDECSTP, - /* 08F */ MNEM_FDIV, - /* 090 */ MNEM_FDIVP, - /* 091 */ MNEM_FDIVR, - /* 092 */ MNEM_FDIVRP, - /* 093 */ MNEM_FEMMS, - /* 094 */ MNEM_FFREE, - /* 095 */ MNEM_FFREEP, - /* 096 */ MNEM_FIADD, - /* 097 */ MNEM_FICOM, - /* 098 */ MNEM_FICOMP, - /* 099 */ MNEM_FIDIV, - /* 09A */ MNEM_FIDIVR, - /* 09B */ MNEM_FILD, - /* 09C */ MNEM_FIMUL, - /* 09D */ MNEM_FINCSTP, - /* 09E */ MNEM_FIST, - /* 09F */ MNEM_FISTP, - /* 0A0 */ MNEM_FISTTP, - /* 0A1 */ MNEM_FISUB, - /* 0A2 */ MNEM_FISUBR, - /* 0A3 */ MNEM_FLD, - /* 0A4 */ MNEM_FLD1, - /* 0A5 */ MNEM_FLDCW, - /* 0A6 */ MNEM_FLDENV, - /* 0A7 */ MNEM_FLDL2E, - /* 0A8 */ MNEM_FLDL2T, - /* 0A9 */ MNEM_FLDLG2, - /* 0AA */ MNEM_FLDLN2, - /* 0AB */ MNEM_FLDPI, - /* 0AC */ MNEM_FLDZ, - /* 0AD */ MNEM_FMUL, - /* 0AE */ MNEM_FMULP, - /* 0AF */ MNEM_FNDISI, - /* 0B0 */ MNEM_FNENI, - /* 0B1 */ MNEM_FNINIT, - /* 0B2 */ MNEM_FNOP, - /* 0B3 */ MNEM_FNSAVE, - /* 0B4 */ MNEM_FNSETPM, - /* 0B5 */ MNEM_FNSTCW, - /* 0B6 */ MNEM_FNSTENV, - /* 0B7 */ MNEM_FNSTSW, - /* 0B8 */ MNEM_FPATAN, - /* 0B9 */ MNEM_FPREM, - /* 0BA */ MNEM_FPREM1, - /* 0BB */ MNEM_FPTAN, - /* 0BC */ MNEM_FRNDINT, - /* 0BD */ MNEM_FRSTOR, - /* 0BE */ MNEM_FRSTPM, - /* 0BF */ MNEM_FSCALE, - /* 0C0 */ MNEM_FSIN, - /* 0C1 */ MNEM_FSINCOS, - /* 0C2 */ MNEM_FSQRT, - /* 0C3 */ MNEM_FST, - /* 0C4 */ MNEM_FSTP, - /* 0C5 */ MNEM_FSTP1, - /* 0C6 */ MNEM_FSTP8, - /* 0C7 */ MNEM_FSTP9, - /* 0C8 */ MNEM_FSUB, - /* 0C9 */ MNEM_FSUBP, - /* 0CA */ MNEM_FSUBR, - /* 0CB */ MNEM_FSUBRP, - /* 0CC */ MNEM_FTST, - /* 0CD */ MNEM_FUCOM, - /* 0CE */ MNEM_FUCOMI, - /* 0CF */ MNEM_FUCOMIP, - /* 0D0 */ MNEM_FUCOMP, - /* 0D1 */ MNEM_FUCOMPP, - /* 0D2 */ MNEM_FXAM, - /* 0D3 */ MNEM_FXCH, - /* 0D4 */ MNEM_FXCH4, - /* 0D5 */ MNEM_FXCH7, - /* 0D6 */ MNEM_FXRSTOR, - /* 0D7 */ MNEM_FXSAVE, - /* 0D8 */ MNEM_FXTRACT, - /* 0D9 */ MNEM_FYL2X, - /* 0DA */ MNEM_FYL2XP1, - /* 0DB */ MNEM_GETSEC, - /* 0DC */ MNEM_HADDPD, - /* 0DD */ MNEM_HADDPS, - /* 0DE */ MNEM_HLT, - /* 0DF */ MNEM_HSUBPD, - /* 0E0 */ MNEM_HSUBPS, - /* 0E1 */ MNEM_IDIV, - /* 0E2 */ MNEM_IMUL, - /* 0E3 */ MNEM_IN, - /* 0E4 */ MNEM_INC, - /* 0E5 */ MNEM_INSB, - /* 0E6 */ MNEM_INSD, - /* 0E7 */ MNEM_INSERTPS, - /* 0E8 */ MNEM_INSW, - /* 0E9 */ MNEM_INT, - /* 0EA */ MNEM_INT1, - /* 0EB */ MNEM_INT3, - /* 0EC */ MNEM_INTO, - /* 0ED */ MNEM_INVD, - /* 0EE */ MNEM_INVEPT, - /* 0EF */ MNEM_INVLPG, - /* 0F0 */ MNEM_INVLPGA, - /* 0F1 */ MNEM_INVVPID, - /* 0F2 */ MNEM_IRETD, - /* 0F3 */ MNEM_IRETQ, - /* 0F4 */ MNEM_IRETW, - /* 0F5 */ MNEM_JA, - /* 0F6 */ MNEM_JB, - /* 0F7 */ MNEM_JBE, - /* 0F8 */ MNEM_JCXZ, - /* 0F9 */ MNEM_JE, - /* 0FA */ MNEM_JECXZ, - /* 0FB */ MNEM_JG, - /* 0FC */ MNEM_JGE, - /* 0FD */ MNEM_JL, - /* 0FE */ MNEM_JLE, - /* 0FF */ MNEM_JMP, - /* 100 */ MNEM_JNB, - /* 101 */ MNEM_JNE, - /* 102 */ MNEM_JNO, - /* 103 */ MNEM_JNP, - /* 104 */ MNEM_JNS, - /* 105 */ MNEM_JO, - /* 106 */ MNEM_JP, - /* 107 */ MNEM_JRCXZ, - /* 108 */ MNEM_JS, - /* 109 */ MNEM_LAHF, - /* 10A */ MNEM_LAR, - /* 10B */ MNEM_LDDQU, - /* 10C */ MNEM_LDMXCSR, - /* 10D */ MNEM_LDS, - /* 10E */ MNEM_LEA, - /* 10F */ MNEM_LEAVE, - /* 110 */ MNEM_LES, - /* 111 */ MNEM_LFENCE, - /* 112 */ MNEM_LFS, - /* 113 */ MNEM_LGDT, - /* 114 */ MNEM_LGS, - /* 115 */ MNEM_LIDT, - /* 116 */ MNEM_LLDT, - /* 117 */ MNEM_LMSW, - /* 118 */ MNEM_LOCK, - /* 119 */ MNEM_LODSB, - /* 11A */ MNEM_LODSD, - /* 11B */ MNEM_LODSQ, - /* 11C */ MNEM_LODSW, - /* 11D */ MNEM_LOOP, - /* 11E */ MNEM_LOOPE, - /* 11F */ MNEM_LOOPNE, - /* 120 */ MNEM_LSL, - /* 121 */ MNEM_LSS, - /* 122 */ MNEM_LTR, - /* 123 */ MNEM_MASKMOVDQU, - /* 124 */ MNEM_MASKMOVQ, - /* 125 */ MNEM_MAXPD, - /* 126 */ MNEM_MAXPS, - /* 127 */ MNEM_MAXSD, - /* 128 */ MNEM_MAXSS, - /* 129 */ MNEM_MFENCE, - /* 12A */ MNEM_MINPD, - /* 12B */ MNEM_MINPS, - /* 12C */ MNEM_MINSD, - /* 12D */ MNEM_MINSS, - /* 12E */ MNEM_MONITOR, - /* 12F */ MNEM_MONTMUL, - /* 130 */ MNEM_MOV, - /* 131 */ MNEM_MOVAPD, - /* 132 */ MNEM_MOVAPS, - /* 133 */ MNEM_MOVBE, - /* 134 */ MNEM_MOVD, - /* 135 */ MNEM_MOVDDUP, - /* 136 */ MNEM_MOVDQ2Q, - /* 137 */ MNEM_MOVDQA, - /* 138 */ MNEM_MOVDQU, - /* 139 */ MNEM_MOVHLPS, - /* 13A */ MNEM_MOVHPD, - /* 13B */ MNEM_MOVHPS, - /* 13C */ MNEM_MOVLHPS, - /* 13D */ MNEM_MOVLPD, - /* 13E */ MNEM_MOVLPS, - /* 13F */ MNEM_MOVMSKPD, - /* 140 */ MNEM_MOVMSKPS, - /* 141 */ MNEM_MOVNTDQ, - /* 142 */ MNEM_MOVNTDQA, - /* 143 */ MNEM_MOVNTI, - /* 144 */ MNEM_MOVNTPD, - /* 145 */ MNEM_MOVNTPS, - /* 146 */ MNEM_MOVNTQ, - /* 147 */ MNEM_MOVQ, - /* 148 */ MNEM_MOVQ2DQ, - /* 149 */ MNEM_MOVSB, - /* 14A */ MNEM_MOVSD, - /* 14B */ MNEM_MOVSHDUP, - /* 14C */ MNEM_MOVSLDUP, - /* 14D */ MNEM_MOVSQ, - /* 14E */ MNEM_MOVSS, - /* 14F */ MNEM_MOVSW, - /* 150 */ MNEM_MOVSX, - /* 151 */ MNEM_MOVSXD, - /* 152 */ MNEM_MOVUPD, - /* 153 */ MNEM_MOVUPS, - /* 154 */ MNEM_MOVZX, - /* 155 */ MNEM_MPSADBW, - /* 156 */ MNEM_MUL, - /* 157 */ MNEM_MULPD, - /* 158 */ MNEM_MULPS, - /* 159 */ MNEM_MULSD, - /* 15A */ MNEM_MULSS, - /* 15B */ MNEM_MWAIT, - /* 15C */ MNEM_NEG, - /* 15D */ MNEM_NOP, - /* 15E */ MNEM_NOT, - /* 15F */ MNEM_OR, - /* 160 */ MNEM_ORPD, - /* 161 */ MNEM_ORPS, - /* 162 */ MNEM_OUT, - /* 163 */ MNEM_OUTSB, - /* 164 */ MNEM_OUTSD, - /* 165 */ MNEM_OUTSW, - /* 166 */ MNEM_PABSB, - /* 167 */ MNEM_PABSD, - /* 168 */ MNEM_PABSW, - /* 169 */ MNEM_PACKSSDW, - /* 16A */ MNEM_PACKSSWB, - /* 16B */ MNEM_PACKUSDW, - /* 16C */ MNEM_PACKUSWB, - /* 16D */ MNEM_PADDB, - /* 16E */ MNEM_PADDD, - /* 16F */ MNEM_PADDQ, - /* 170 */ MNEM_PADDSB, - /* 171 */ MNEM_PADDSW, - /* 172 */ MNEM_PADDUSB, - /* 173 */ MNEM_PADDUSW, - /* 174 */ MNEM_PADDW, - /* 175 */ MNEM_PALIGNR, - /* 176 */ MNEM_PAND, - /* 177 */ MNEM_PANDN, - /* 178 */ MNEM_PAUSE, - /* 179 */ MNEM_PAVGB, - /* 17A */ MNEM_PAVGUSB, - /* 17B */ MNEM_PAVGW, - /* 17C */ MNEM_PBLENDVB, - /* 17D */ MNEM_PBLENDW, - /* 17E */ MNEM_PCLMULQDQ, - /* 17F */ MNEM_PCMPEQB, - /* 180 */ MNEM_PCMPEQD, - /* 181 */ MNEM_PCMPEQQ, - /* 182 */ MNEM_PCMPEQW, - /* 183 */ MNEM_PCMPESTRI, - /* 184 */ MNEM_PCMPESTRM, - /* 185 */ MNEM_PCMPGTB, - /* 186 */ MNEM_PCMPGTD, - /* 187 */ MNEM_PCMPGTQ, - /* 188 */ MNEM_PCMPGTW, - /* 189 */ MNEM_PCMPISTRI, - /* 18A */ MNEM_PCMPISTRM, - /* 18B */ MNEM_PEXTRB, - /* 18C */ MNEM_PEXTRD, - /* 18D */ MNEM_PEXTRQ, - /* 18E */ MNEM_PEXTRW, - /* 18F */ MNEM_PF2ID, - /* 190 */ MNEM_PF2IW, - /* 191 */ MNEM_PFACC, - /* 192 */ MNEM_PFADD, - /* 193 */ MNEM_PFCMPEQ, - /* 194 */ MNEM_PFCMPGE, - /* 195 */ MNEM_PFCMPGT, - /* 196 */ MNEM_PFMAX, - /* 197 */ MNEM_PFMIN, - /* 198 */ MNEM_PFMUL, - /* 199 */ MNEM_PFNACC, - /* 19A */ MNEM_PFPNACC, - /* 19B */ MNEM_PFRCP, - /* 19C */ MNEM_PFRCPIT1, - /* 19D */ MNEM_PFRCPIT2, - /* 19E */ MNEM_PFRSQIT1, - /* 19F */ MNEM_PFRSQRT, - /* 1A0 */ MNEM_PFSUB, - /* 1A1 */ MNEM_PFSUBR, - /* 1A2 */ MNEM_PHADDD, - /* 1A3 */ MNEM_PHADDSW, - /* 1A4 */ MNEM_PHADDW, - /* 1A5 */ MNEM_PHMINPOSUW, - /* 1A6 */ MNEM_PHSUBD, - /* 1A7 */ MNEM_PHSUBSW, - /* 1A8 */ MNEM_PHSUBW, - /* 1A9 */ MNEM_PI2FD, - /* 1AA */ MNEM_PI2FW, - /* 1AB */ MNEM_PINSRB, - /* 1AC */ MNEM_PINSRD, - /* 1AD */ MNEM_PINSRQ, - /* 1AE */ MNEM_PINSRW, - /* 1AF */ MNEM_PMADDUBSW, - /* 1B0 */ MNEM_PMADDWD, - /* 1B1 */ MNEM_PMAXSB, - /* 1B2 */ MNEM_PMAXSD, - /* 1B3 */ MNEM_PMAXSW, - /* 1B4 */ MNEM_PMAXUB, - /* 1B5 */ MNEM_PMAXUD, - /* 1B6 */ MNEM_PMAXUW, - /* 1B7 */ MNEM_PMINSB, - /* 1B8 */ MNEM_PMINSD, - /* 1B9 */ MNEM_PMINSW, - /* 1BA */ MNEM_PMINUB, - /* 1BB */ MNEM_PMINUD, - /* 1BC */ MNEM_PMINUW, - /* 1BD */ MNEM_PMOVMSKB, - /* 1BE */ MNEM_PMOVSXBD, - /* 1BF */ MNEM_PMOVSXBQ, - /* 1C0 */ MNEM_PMOVSXBW, - /* 1C1 */ MNEM_PMOVSXDQ, - /* 1C2 */ MNEM_PMOVSXWD, - /* 1C3 */ MNEM_PMOVSXWQ, - /* 1C4 */ MNEM_PMOVZXBD, - /* 1C5 */ MNEM_PMOVZXBQ, - /* 1C6 */ MNEM_PMOVZXBW, - /* 1C7 */ MNEM_PMOVZXDQ, - /* 1C8 */ MNEM_PMOVZXWD, - /* 1C9 */ MNEM_PMOVZXWQ, - /* 1CA */ MNEM_PMULDQ, - /* 1CB */ MNEM_PMULHRSW, - /* 1CC */ MNEM_PMULHRW, - /* 1CD */ MNEM_PMULHUW, - /* 1CE */ MNEM_PMULHW, - /* 1CF */ MNEM_PMULLD, - /* 1D0 */ MNEM_PMULLW, - /* 1D1 */ MNEM_PMULUDQ, - /* 1D2 */ MNEM_POP, - /* 1D3 */ MNEM_POPA, - /* 1D4 */ MNEM_POPAD, - /* 1D5 */ MNEM_POPCNT, - /* 1D6 */ MNEM_POPFD, - /* 1D7 */ MNEM_POPFQ, - /* 1D8 */ MNEM_POPFW, - /* 1D9 */ MNEM_POR, - /* 1DA */ MNEM_PREFETCH, - /* 1DB */ MNEM_PREFETCHNTA, - /* 1DC */ MNEM_PREFETCHT0, - /* 1DD */ MNEM_PREFETCHT1, - /* 1DE */ MNEM_PREFETCHT2, - /* 1DF */ MNEM_PSADBW, - /* 1E0 */ MNEM_PSHUFB, - /* 1E1 */ MNEM_PSHUFD, - /* 1E2 */ MNEM_PSHUFHW, - /* 1E3 */ MNEM_PSHUFLW, - /* 1E4 */ MNEM_PSHUFW, - /* 1E5 */ MNEM_PSIGNB, - /* 1E6 */ MNEM_PSIGND, - /* 1E7 */ MNEM_PSIGNW, - /* 1E8 */ MNEM_PSLLD, - /* 1E9 */ MNEM_PSLLDQ, - /* 1EA */ MNEM_PSLLQ, - /* 1EB */ MNEM_PSLLW, - /* 1EC */ MNEM_PSRAD, - /* 1ED */ MNEM_PSRAW, - /* 1EE */ MNEM_PSRLD, - /* 1EF */ MNEM_PSRLDQ, - /* 1F0 */ MNEM_PSRLQ, - /* 1F1 */ MNEM_PSRLW, - /* 1F2 */ MNEM_PSUBB, - /* 1F3 */ MNEM_PSUBD, - /* 1F4 */ MNEM_PSUBQ, - /* 1F5 */ MNEM_PSUBSB, - /* 1F6 */ MNEM_PSUBSW, - /* 1F7 */ MNEM_PSUBUSB, - /* 1F8 */ MNEM_PSUBUSW, - /* 1F9 */ MNEM_PSUBW, - /* 1FA */ MNEM_PSWAPD, - /* 1FB */ MNEM_PTEST, - /* 1FC */ MNEM_PUNPCKHBW, - /* 1FD */ MNEM_PUNPCKHDQ, - /* 1FE */ MNEM_PUNPCKHQDQ, - /* 1FF */ MNEM_PUNPCKHWD, - /* 200 */ MNEM_PUNPCKLBW, - /* 201 */ MNEM_PUNPCKLDQ, - /* 202 */ MNEM_PUNPCKLQDQ, - /* 203 */ MNEM_PUNPCKLWD, - /* 204 */ MNEM_PUSH, - /* 205 */ MNEM_PUSHA, - /* 206 */ MNEM_PUSHAD, - /* 207 */ MNEM_PUSHFD, - /* 208 */ MNEM_PUSHFQ, - /* 209 */ MNEM_PUSHFW, - /* 20A */ MNEM_PXOR, - /* 20B */ MNEM_RCL, - /* 20C */ MNEM_RCPPS, - /* 20D */ MNEM_RCPSS, - /* 20E */ MNEM_RCR, - /* 20F */ MNEM_RDMSR, - /* 210 */ MNEM_RDPMC, - /* 211 */ MNEM_RDRAND, - /* 212 */ MNEM_RDTSC, - /* 213 */ MNEM_RDTSCP, - /* 214 */ MNEM_REP, - /* 215 */ MNEM_REPNE, - /* 216 */ MNEM_RET, - /* 217 */ MNEM_RETF, - /* 218 */ MNEM_ROL, - /* 219 */ MNEM_ROR, - /* 21A */ MNEM_ROUNDPD, - /* 21B */ MNEM_ROUNDPS, - /* 21C */ MNEM_ROUNDSD, - /* 21D */ MNEM_ROUNDSS, - /* 21E */ MNEM_RSM, - /* 21F */ MNEM_RSQRTPS, - /* 220 */ MNEM_RSQRTSS, - /* 221 */ MNEM_SAHF, - /* 222 */ MNEM_SALC, - /* 223 */ MNEM_SAR, - /* 224 */ MNEM_SBB, - /* 225 */ MNEM_SCASB, - /* 226 */ MNEM_SCASD, - /* 227 */ MNEM_SCASQ, - /* 228 */ MNEM_SCASW, - /* 229 */ MNEM_SETA, - /* 22A */ MNEM_SETAE, - /* 22B */ MNEM_SETB, - /* 22C */ MNEM_SETBE, - /* 22D */ MNEM_SETE, - /* 22E */ MNEM_SETG, - /* 22F */ MNEM_SETGE, - /* 230 */ MNEM_SETL, - /* 231 */ MNEM_SETLE, - /* 232 */ MNEM_SETNE, - /* 233 */ MNEM_SETNO, - /* 234 */ MNEM_SETNP, - /* 235 */ MNEM_SETNS, - /* 236 */ MNEM_SETO, - /* 237 */ MNEM_SETP, - /* 238 */ MNEM_SETS, - /* 239 */ MNEM_SFENCE, - /* 23A */ MNEM_SGDT, - /* 23B */ MNEM_SHL, - /* 23C */ MNEM_SHLD, - /* 23D */ MNEM_SHR, - /* 23E */ MNEM_SHRD, - /* 23F */ MNEM_SHUFPD, - /* 240 */ MNEM_SHUFPS, - /* 241 */ MNEM_SIDT, - /* 242 */ MNEM_SKINIT, - /* 243 */ MNEM_SLDT, - /* 244 */ MNEM_SMSW, - /* 245 */ MNEM_SQRTPD, - /* 246 */ MNEM_SQRTPS, - /* 247 */ MNEM_SQRTSD, - /* 248 */ MNEM_SQRTSS, - /* 249 */ MNEM_STC, - /* 24A */ MNEM_STD, - /* 24B */ MNEM_STGI, - /* 24C */ MNEM_STI, - /* 24D */ MNEM_STMXCSR, - /* 24E */ MNEM_STOSB, - /* 24F */ MNEM_STOSD, - /* 250 */ MNEM_STOSQ, - /* 251 */ MNEM_STOSW, - /* 252 */ MNEM_STR, - /* 253 */ MNEM_SUB, - /* 254 */ MNEM_SUBPD, - /* 255 */ MNEM_SUBPS, - /* 256 */ MNEM_SUBSD, - /* 257 */ MNEM_SUBSS, - /* 258 */ MNEM_SWAPGS, - /* 259 */ MNEM_SYSCALL, - /* 25A */ MNEM_SYSENTER, - /* 25B */ MNEM_SYSEXIT, - /* 25C */ MNEM_SYSRET, - /* 25D */ MNEM_TEST, - /* 25E */ MNEM_UCOMISD, - /* 25F */ MNEM_UCOMISS, - /* 260 */ MNEM_UD2, - /* 261 */ MNEM_UNPCKHPD, - /* 262 */ MNEM_UNPCKHPS, - /* 263 */ MNEM_UNPCKLPD, - /* 264 */ MNEM_UNPCKLPS, - /* 265 */ MNEM_VADDPD, - /* 266 */ MNEM_VADDPS, - /* 267 */ MNEM_VADDSD, - /* 268 */ MNEM_VADDSS, - /* 269 */ MNEM_VADDSUBPD, - /* 26A */ MNEM_VADDSUBPS, - /* 26B */ MNEM_VAESDEC, - /* 26C */ MNEM_VAESDECLAST, - /* 26D */ MNEM_VAESENC, - /* 26E */ MNEM_VAESENCLAST, - /* 26F */ MNEM_VAESIMC, - /* 270 */ MNEM_VAESKEYGENASSIST, - /* 271 */ MNEM_VANDNPD, - /* 272 */ MNEM_VANDNPS, - /* 273 */ MNEM_VANDPD, - /* 274 */ MNEM_VANDPS, - /* 275 */ MNEM_VBLENDPD, - /* 276 */ MNEM_VBLENDPS, - /* 277 */ MNEM_VBLENDVPD, - /* 278 */ MNEM_VBLENDVPS, - /* 279 */ MNEM_VBROADCASTSD, - /* 27A */ MNEM_VBROADCASTSS, - /* 27B */ MNEM_VCMPPD, - /* 27C */ MNEM_VCMPPS, - /* 27D */ MNEM_VCMPSD, - /* 27E */ MNEM_VCMPSS, - /* 27F */ MNEM_VCOMISD, - /* 280 */ MNEM_VCOMISS, - /* 281 */ MNEM_VCVTDQ2PD, - /* 282 */ MNEM_VCVTDQ2PS, - /* 283 */ MNEM_VCVTPD2DQ, - /* 284 */ MNEM_VCVTPD2PS, - /* 285 */ MNEM_VCVTPS2DQ, - /* 286 */ MNEM_VCVTPS2PD, - /* 287 */ MNEM_VCVTSD2SI, - /* 288 */ MNEM_VCVTSD2SS, - /* 289 */ MNEM_VCVTSI2SD, - /* 28A */ MNEM_VCVTSI2SS, - /* 28B */ MNEM_VCVTSS2SD, - /* 28C */ MNEM_VCVTSS2SI, - /* 28D */ MNEM_VCVTTPD2DQ, - /* 28E */ MNEM_VCVTTPS2DQ, - /* 28F */ MNEM_VCVTTSD2SI, - /* 290 */ MNEM_VCVTTSS2SI, - /* 291 */ MNEM_VDIVPD, - /* 292 */ MNEM_VDIVPS, - /* 293 */ MNEM_VDIVSD, - /* 294 */ MNEM_VDIVSS, - /* 295 */ MNEM_VDPPD, - /* 296 */ MNEM_VDPPS, - /* 297 */ MNEM_VERR, - /* 298 */ MNEM_VERW, - /* 299 */ MNEM_VEXTRACTF128, - /* 29A */ MNEM_VEXTRACTPS, - /* 29B */ MNEM_VHADDPD, - /* 29C */ MNEM_VHADDPS, - /* 29D */ MNEM_VHSUBPD, - /* 29E */ MNEM_VHSUBPS, - /* 29F */ MNEM_VINSERTF128, - /* 2A0 */ MNEM_VINSERTPS, - /* 2A1 */ MNEM_VLDDQU, - /* 2A2 */ MNEM_VMASKMOVDQU, - /* 2A3 */ MNEM_VMASKMOVPD, - /* 2A4 */ MNEM_VMASKMOVPS, - /* 2A5 */ MNEM_VMAXPD, - /* 2A6 */ MNEM_VMAXPS, - /* 2A7 */ MNEM_VMAXSD, - /* 2A8 */ MNEM_VMAXSS, - /* 2A9 */ MNEM_VMCALL, - /* 2AA */ MNEM_VMCLEAR, - /* 2AB */ MNEM_VMINPD, - /* 2AC */ MNEM_VMINPS, - /* 2AD */ MNEM_VMINSD, - /* 2AE */ MNEM_VMINSS, - /* 2AF */ MNEM_VMLAUNCH, - /* 2B0 */ MNEM_VMLOAD, - /* 2B1 */ MNEM_VMMCALL, - /* 2B2 */ MNEM_VMOVAPD, - /* 2B3 */ MNEM_VMOVAPS, - /* 2B4 */ MNEM_VMOVD, - /* 2B5 */ MNEM_VMOVDDUP, - /* 2B6 */ MNEM_VMOVDQA, - /* 2B7 */ MNEM_VMOVDQU, - /* 2B8 */ MNEM_VMOVHLPS, - /* 2B9 */ MNEM_VMOVHPD, - /* 2BA */ MNEM_VMOVHPS, - /* 2BB */ MNEM_VMOVLHPS, - /* 2BC */ MNEM_VMOVLPD, - /* 2BD */ MNEM_VMOVLPS, - /* 2BE */ MNEM_VMOVMSKPD, - /* 2BF */ MNEM_VMOVMSKPS, - /* 2C0 */ MNEM_VMOVNTDQ, - /* 2C1 */ MNEM_VMOVNTDQA, - /* 2C2 */ MNEM_VMOVNTPD, - /* 2C3 */ MNEM_VMOVNTPS, - /* 2C4 */ MNEM_VMOVQ, - /* 2C5 */ MNEM_VMOVSD, - /* 2C6 */ MNEM_VMOVSHDUP, - /* 2C7 */ MNEM_VMOVSLDUP, - /* 2C8 */ MNEM_VMOVSS, - /* 2C9 */ MNEM_VMOVUPD, - /* 2CA */ MNEM_VMOVUPS, - /* 2CB */ MNEM_VMPSADBW, - /* 2CC */ MNEM_VMPTRLD, - /* 2CD */ MNEM_VMPTRST, - /* 2CE */ MNEM_VMREAD, - /* 2CF */ MNEM_VMRESUME, - /* 2D0 */ MNEM_VMRUN, - /* 2D1 */ MNEM_VMSAVE, - /* 2D2 */ MNEM_VMULPD, - /* 2D3 */ MNEM_VMULPS, - /* 2D4 */ MNEM_VMULSD, - /* 2D5 */ MNEM_VMULSS, - /* 2D6 */ MNEM_VMWRITE, - /* 2D7 */ MNEM_VMXOFF, - /* 2D8 */ MNEM_VMXON, - /* 2D9 */ MNEM_VORPD, - /* 2DA */ MNEM_VORPS, - /* 2DB */ MNEM_VPABSB, - /* 2DC */ MNEM_VPABSD, - /* 2DD */ MNEM_VPABSW, - /* 2DE */ MNEM_VPACKSSDW, - /* 2DF */ MNEM_VPACKSSWB, - /* 2E0 */ MNEM_VPACKUSDW, - /* 2E1 */ MNEM_VPACKUSWB, - /* 2E2 */ MNEM_VPADDB, - /* 2E3 */ MNEM_VPADDD, - /* 2E4 */ MNEM_VPADDQ, - /* 2E5 */ MNEM_VPADDSB, - /* 2E6 */ MNEM_VPADDSW, - /* 2E7 */ MNEM_VPADDUSB, - /* 2E8 */ MNEM_VPADDUSW, - /* 2E9 */ MNEM_VPADDW, - /* 2EA */ MNEM_VPALIGNR, - /* 2EB */ MNEM_VPAND, - /* 2EC */ MNEM_VPANDN, - /* 2ED */ MNEM_VPAVGB, - /* 2EE */ MNEM_VPAVGW, - /* 2EF */ MNEM_VPBLENDVB, - /* 2F0 */ MNEM_VPBLENDW, - /* 2F1 */ MNEM_VPCLMULQDQ, - /* 2F2 */ MNEM_VPCMPEQB, - /* 2F3 */ MNEM_VPCMPEQD, - /* 2F4 */ MNEM_VPCMPEQQ, - /* 2F5 */ MNEM_VPCMPEQW, - /* 2F6 */ MNEM_VPCMPESTRI, - /* 2F7 */ MNEM_VPCMPESTRM, - /* 2F8 */ MNEM_VPCMPGTB, - /* 2F9 */ MNEM_VPCMPGTD, - /* 2FA */ MNEM_VPCMPGTQ, - /* 2FB */ MNEM_VPCMPGTW, - /* 2FC */ MNEM_VPCMPISTRI, - /* 2FD */ MNEM_VPCMPISTRM, - /* 2FE */ MNEM_VPERM2F128, - /* 2FF */ MNEM_VPERMILPD, - /* 300 */ MNEM_VPERMILPS, - /* 301 */ MNEM_VPEXTRB, - /* 302 */ MNEM_VPEXTRD, - /* 303 */ MNEM_VPEXTRQ, - /* 304 */ MNEM_VPEXTRW, - /* 305 */ MNEM_VPHADDD, - /* 306 */ MNEM_VPHADDSW, - /* 307 */ MNEM_VPHADDW, - /* 308 */ MNEM_VPHMINPOSUW, - /* 309 */ MNEM_VPHSUBD, - /* 30A */ MNEM_VPHSUBSW, - /* 30B */ MNEM_VPHSUBW, - /* 30C */ MNEM_VPINSRB, - /* 30D */ MNEM_VPINSRD, - /* 30E */ MNEM_VPINSRQ, - /* 30F */ MNEM_VPINSRW, - /* 310 */ MNEM_VPMADDUBSW, - /* 311 */ MNEM_VPMADDWD, - /* 312 */ MNEM_VPMAXSB, - /* 313 */ MNEM_VPMAXSD, - /* 314 */ MNEM_VPMAXSW, - /* 315 */ MNEM_VPMAXUB, - /* 316 */ MNEM_VPMAXUD, - /* 317 */ MNEM_VPMAXUW, - /* 318 */ MNEM_VPMINSB, - /* 319 */ MNEM_VPMINSD, - /* 31A */ MNEM_VPMINSW, - /* 31B */ MNEM_VPMINUB, - /* 31C */ MNEM_VPMINUD, - /* 31D */ MNEM_VPMINUW, - /* 31E */ MNEM_VPMOVMSKB, - /* 31F */ MNEM_VPMOVSXBD, - /* 320 */ MNEM_VPMOVSXBQ, - /* 321 */ MNEM_VPMOVSXBW, - /* 322 */ MNEM_VPMOVSXWD, - /* 323 */ MNEM_VPMOVSXWQ, - /* 324 */ MNEM_VPMOVZXBD, - /* 325 */ MNEM_VPMOVZXBQ, - /* 326 */ MNEM_VPMOVZXBW, - /* 327 */ MNEM_VPMOVZXDQ, - /* 328 */ MNEM_VPMOVZXWD, - /* 329 */ MNEM_VPMOVZXWQ, - /* 32A */ MNEM_VPMULDQ, - /* 32B */ MNEM_VPMULHRSW, - /* 32C */ MNEM_VPMULHUW, - /* 32D */ MNEM_VPMULHW, - /* 32E */ MNEM_VPMULLD, - /* 32F */ MNEM_VPMULLW, - /* 330 */ MNEM_VPOR, - /* 331 */ MNEM_VPSADBW, - /* 332 */ MNEM_VPSHUFB, - /* 333 */ MNEM_VPSHUFD, - /* 334 */ MNEM_VPSHUFHW, - /* 335 */ MNEM_VPSHUFLW, - /* 336 */ MNEM_VPSIGNB, - /* 337 */ MNEM_VPSIGND, - /* 338 */ MNEM_VPSIGNW, - /* 339 */ MNEM_VPSLLD, - /* 33A */ MNEM_VPSLLDQ, - /* 33B */ MNEM_VPSLLQ, - /* 33C */ MNEM_VPSLLW, - /* 33D */ MNEM_VPSRAD, - /* 33E */ MNEM_VPSRAW, - /* 33F */ MNEM_VPSRLD, - /* 340 */ MNEM_VPSRLDQ, - /* 341 */ MNEM_VPSRLQ, - /* 342 */ MNEM_VPSRLW, - /* 343 */ MNEM_VPSUBB, - /* 344 */ MNEM_VPSUBD, - /* 345 */ MNEM_VPSUBQ, - /* 346 */ MNEM_VPSUBSB, - /* 347 */ MNEM_VPSUBSW, - /* 348 */ MNEM_VPSUBUSB, - /* 349 */ MNEM_VPSUBUSW, - /* 34A */ MNEM_VPSUBW, - /* 34B */ MNEM_VPTEST, - /* 34C */ MNEM_VPUNPCKHBW, - /* 34D */ MNEM_VPUNPCKHDQ, - /* 34E */ MNEM_VPUNPCKHQDQ, - /* 34F */ MNEM_VPUNPCKHWD, - /* 350 */ MNEM_VPUNPCKLBW, - /* 351 */ MNEM_VPUNPCKLDQ, - /* 352 */ MNEM_VPUNPCKLQDQ, - /* 353 */ MNEM_VPUNPCKLWD, - /* 354 */ MNEM_VPXOR, - /* 355 */ MNEM_VRCPPS, - /* 356 */ MNEM_VRCPSS, - /* 357 */ MNEM_VROUNDPD, - /* 358 */ MNEM_VROUNDPS, - /* 359 */ MNEM_VROUNDSD, - /* 35A */ MNEM_VROUNDSS, - /* 35B */ MNEM_VRSQRTPS, - /* 35C */ MNEM_VRSQRTSS, - /* 35D */ MNEM_VSHUFPD, - /* 35E */ MNEM_VSHUFPS, - /* 35F */ MNEM_VSQRTPD, - /* 360 */ MNEM_VSQRTPS, - /* 361 */ MNEM_VSQRTSD, - /* 362 */ MNEM_VSQRTSS, - /* 363 */ MNEM_VSTMXCSR, - /* 364 */ MNEM_VSUBPD, - /* 365 */ MNEM_VSUBPS, - /* 366 */ MNEM_VSUBSD, - /* 367 */ MNEM_VSUBSS, - /* 368 */ MNEM_VTESTPD, - /* 369 */ MNEM_VTESTPS, - /* 36A */ MNEM_VUCOMISD, - /* 36B */ MNEM_VUCOMISS, - /* 36C */ MNEM_VUNPCKHPD, - /* 36D */ MNEM_VUNPCKHPS, - /* 36E */ MNEM_VUNPCKLPD, - /* 36F */ MNEM_VUNPCKLPS, - /* 370 */ MNEM_VXORPD, - /* 371 */ MNEM_VXORPS, - /* 372 */ MNEM_VZEROALL, - /* 373 */ MNEM_VZEROUPPER, - /* 374 */ MNEM_WAIT, - /* 375 */ MNEM_WBINVD, - /* 376 */ MNEM_WRMSR, - /* 377 */ MNEM_XADD, - /* 378 */ MNEM_XCHG, - /* 379 */ MNEM_XCRYPTCBC, - /* 37A */ MNEM_XCRYPTCFB, - /* 37B */ MNEM_XCRYPTCTR, - /* 37C */ MNEM_XCRYPTECB, - /* 37D */ MNEM_XCRYPTOFB, - /* 37E */ MNEM_XGETBV, - /* 37F */ MNEM_XLATB, - /* 380 */ MNEM_XOR, - /* 381 */ MNEM_XORPD, - /* 382 */ MNEM_XORPS, - /* 383 */ MNEM_XRSTOR, - /* 384 */ MNEM_XSAVE, - /* 385 */ MNEM_XSETBV, - /* 386 */ MNEM_XSHA1, - /* 387 */ MNEM_XSHA256, - /* 388 */ MNEM_XSTORE, - - MNEM_FORCE_WORD = 0x7FFF -} VXInstructionMnemonic; - -/** - * @brief Defines an alias representing an opcode tree node. An opcode tree node is a 16 bit - * unsigned integer value with its first 4 bits reserved for the node type. - */ -typedef uint16_t VXOpcodeTreeNode; - -/** - * @brief Values that represent the type of an opcode tree node. - */ -typedef enum _VXOpcodeTreeNodeType /* : uint8_t */ -{ - /** - * @brief Reference to a concrete instruction definition. - */ - OTNT_INSTRUCTION_DEFINITION = 0, - /** - * @brief Reference to an opcode table. - */ - OTNT_TABLE = 1, - /** - * @brief Reference to a modrm_mod switch table. - */ - OTNT_MODRM_MOD = 2, - /** - * @brief Reference to a modrm_reg switch table. - */ - OTNT_MODRM_REG = 3, - /** - * @brief Reference to a modrm_rm switch table. - */ - OTNT_MODRM_RM = 4, - /** - * @brief Reference to a mandatory-prefix switch table. - */ - OTNT_MANDATORY = 5, - /** - * @brief Reference to a x87 opcode table. - */ - OTNT_X87 = 6, - /** - * @brief Reference to an address-size switch table. - */ - OTNT_ADDRESS_SIZE = 7, - /** - * @brief Reference to an operand-size switch table. - */ - OTNT_OPERAND_SIZE = 8, - /** - * @brief Reference to a cpu-mode switch table. - */ - OTNT_MODE = 9, - /** - * @brief Reference to a vendor switch table. - */ - OTNT_VENDOR = 10, - /** - * @brief Reference to a 3dnow! opcode table. - */ - OTNT_AMD3DNOW = 11, - /** - * @brief Reference to a vex-prefix switch table. - */ - OTNT_VEX = 12, - /** - * @brief Reference to a vex_w switch table. - */ - OTNT_VEXW = 13, - /** - * @brief Reference to a vex_l switch table. - */ - OTNT_VEXL = 14 -} VXOpcodeTreeNodeType; - -/** - * @brief Values that represent the type of an operand in the instruction definition. - */ -typedef enum _VXDefinedOperandType /* : uint8_t */ -{ - /* - * @brief No operand. - */ - DOT_NONE, - /* - * @brief Direct address. The instruction has no ModR/M byte; the address of the operand is - * encoded in the instruction; no base register, index register, or scaling factor - * can be applied. - */ - DOT_A, - /* - * @brief The reg field of the ModR/M byte selects a control register. - */ - DOT_C, - /* - * @brief The reg field of the ModR/M byte selects a debug register. - */ - DOT_D, - /* - * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either - * a general-purpose register or a memory address. If it is a memory address, the - * address is computed from a segment register and any of the following values: - * a base register, an index register, a scaling factor, or a displacement. - */ - DOT_E, - /* - * @brief rFLAGS register. - */ - DOT_F, - /* - * @brief The reg field of the ModR/M byte selects a general register. - */ - DOT_G, - /* - * @brief The r/m field of the ModR/M byte always selects a general register, regardless of - * the mod field. - */ - DOT_H, - /* - * @brief Immediate data. The operand value is encoded in subsequent bytes of the - * instruction. - */ - DOT_I, - /* - * @brief Signed immediate data. The operand value is encoded in subsequent bytes of the - * instruction. - */ - DOT_sI, - /* - * @brief Constant immediate data value of 1. - */ - DOT_I1, - /* - * @brief The instruction contains a relative offset to be added to the instruction pointer - * register. - */ - DOT_J, - /* - * @brief Source operand is encoded in immediate byte (VEX only). - */ - DOT_L, - /* - * @brief The ModR/M byte may refer only to memory: mod != 11bin. - */ - DOT_M, - /* - * @brief Combination of M and R. - */ - DOT_MR, - /* - * @brief Combination of M and U. - */ - DOT_MU, - /* - * @brief The R/M field of the ModR/M byte selects a packed quadword MMX technology register. - */ - DOT_N, - /* - * @brief The instruction has no ModR/M byte; the offset of the operand is coded as a word, - * double word or quad word (depending on address size attribute) in the instruction. - * No base register, index register, or scaling factor can be applied. - */ - DOT_O, - /* - * @brief The reg field of the ModR/M byte selects a packed quadword MMX technology register. - */ - DOT_P, - /* - * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either - * an MMX technology register or a memory address. If it is a memory address, the - * address is computed from a segment register and any of the following values: - * a base register, an index register, a scaling factor, and a displacement. - */ - DOT_Q, - /* - * @brief The mod field of the ModR/M byte may refer only to a general register. - */ - DOT_R, - /* - * @brief The reg field of the ModR/M byte selects a segment register. - */ - DOT_S, - /* - * @brief The R/M field of the ModR/M byte selects a 128-bit XMM register. - */ - DOT_U, - /* - * @brief The reg field of the ModR/M byte selects a 128-bit XMM register. - */ - DOT_V, - /* - * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either - * a 128-bit XMM register or a memory address. If it is a memory address, the address - * is computed from a segment register and any of the following values: - * a base register, an index register, a scaling factor, and a displacement. - */ - DOT_W, - /** - * @brief Register 0. - */ - DOT_R0, - /** - * @brief Register 1. - */ - DOT_R1, - /** - * @brief Register 2. - */ - DOT_R2, - /** - * @brief Register 3. - */ - DOT_R3, - /** - * @brief Register 4. - */ - DOT_R4, - /** - * @brief Register 5. - */ - DOT_R5, - /** - * @brief Register 6. - */ - DOT_R6, - /** - * @brief Register 7. - */ - DOT_R7, - /** - * @brief AL register. - */ - DOT_AL, - /** - * @brief CL register. - */ - DOT_CL, - /** - * @brief DL register. - */ - DOT_DL, - /** - * @brief AX register. - */ - DOT_AX, - /** - * @brief CX register. - */ - DOT_CX, - /** - * @brief DX register. - */ - DOT_DX, - /** - * @brief EAX register. - */ - DOT_EAX, - /** - * @brief ECX register. - */ - DOT_ECX, - /** - * @brief EDX register. - */ - DOT_EDX, - /** - * @brief RAX register. - */ - DOT_RAX, - /** - * @brief RCX register. - */ - DOT_RCX, - /** - * @brief RDX register. - */ - DOT_RDX, - /** - * @brief ES segment register. - */ - DOT_ES, - /** - * @brief CS segment register. - */ - DOT_CS, - /** - * @brief SS segment register. - */ - DOT_SS, - /** - * @brief DS segment register. - */ - DOT_DS, - /** - * @brief FS segment register. - */ - DOT_FS, - /** - * @brief GS segment register. - */ - DOT_GS, - /** - * @brief Floating point register 0. - */ - DOT_ST0, - /** - * @brief Floating point register 1. - */ - DOT_ST1, - /** - * @brief Floating point register 2. - */ - DOT_ST2, - /** - * @brief Floating point register 3. - */ - DOT_ST3, - /** - * @brief Floating point register 4. - */ - DOT_ST4, - /** - * @brief Floating point register 5. - */ - DOT_ST5, - /** - * @brief Floating point register 6. - */ - DOT_ST6, - /** - * @brief Floating point register 7. - */ - DOT_ST7 -} VXDefinedOperandType; - -/** - * @brief Values that represent the size of an operand in the instruction definition. - * Do not change the order or the values of this enum! - */ -typedef enum _VXDefinedOperandSize /* : uint8_t */ -{ - /** - * @brief No operand. - */ - DOS_NA = 0, - /** - * @brief Word, dword or qword. - */ - DOS_Z, - /** - * @brief Word, dword or qword. - */ - DOS_V, - /** - * @brief Dword or qword. - */ - DOS_Y, - /** - * @brief Oword or yword. - */ - DOS_X, - /** - * @brief Dword or qword, depending on the disassembler mode. - */ - DOS_RDQ, - /* - * @brief Byte, regardless of operand-size attribute. - */ - DOS_B, - /* - * @brief Word, regardless of operand-size attribute. - */ - DOS_W, - /* - * @brief Doubleword, regardless of operand-size attribute. - */ - DOS_D, - /* - * @brief Quadword, regardless of operand-size attribute. - */ - DOS_Q, - /* - * @brief 10-byte far pointer. - */ - DOS_T, - /** - * @brief TODO: - */ - DOS_O, - /* - * @brief Double-quadword, regardless of operand-size attribute. - */ - DOS_DQ, - /* - * @brief Quad-quadword, regardless of operand-size attribute. - */ - DOS_QQ, - /** - * @brief B sized register or D sized memory operand. - */ - DOS_BD = (DOS_B << 4) | DOS_D, - /** - * @brief B sized register or V sized memory operand. - */ - DOS_BV = (DOS_B << 4) | DOS_V, - /** - * @brief W sized register or D sized memory operand. - */ - DOS_WD = (DOS_W << 4) | DOS_D, - /** - * @brief W sized register or V sized memory operand. - */ - DOS_WV = (DOS_W << 4) | DOS_V, - /** - * @brief W sized register or Y sized memory operand. - */ - DOS_WY = (DOS_W << 4) | DOS_Y, - /** - * @brief D sized register or Y sized memory operand. - */ - DOS_DY = (DOS_D << 4) | DOS_Y, - /** - * @brief W sized register or O sized memory operand. - */ - DOS_WO = (DOS_W << 4) | DOS_O, - /** - * @brief D sized register or O sized memory operand. - */ - DOS_DO = (DOS_D << 4) | DOS_O, - /** - * @brief Q sized register or O sized memory operand. - */ - DOS_QO = (DOS_Q << 4) | DOS_O, -} VXDefinedOperandSize; - -/** - * @brief Values that represent optional flags in the instruction definition. - * Do not change the order or the values of this enum! - */ -typedef enum _VXInstructionDefinitionFlags /* : uint16_t */ -{ - /** - * @brief The instruction accepts the rex.b prefix value. - */ - IDF_ACCEPTS_REXB = 0x0001, - /** - * @brief The instruction accepts the rex.x prefix value. - */ - IDF_ACCEPTS_REXX = 0x0002, - /** - * @brief The instruction accepts the rex.r prefix value. - */ - IDF_ACCEPTS_REXR = 0x0004, - /** - * @brief The instruction accepts the rex.w prefix value. - */ - IDF_ACCEPTS_REXW = 0x0008, - /** - * @brief The instruction accepts the address size override prefix (0x67). - */ - IDF_ACCEPTS_ADDRESS_SIZE_PREFIX = 0x0010, - /** - * @brief The instruction accepts the operand size override prefix (0x66). - */ - IDF_ACCEPTS_OPERAND_SIZE_PREFIX = 0x0020, - /** - * @brief The instruction accepts the segment override prefix. - */ - IDF_ACCEPTS_SEGMENT_PREFIX = 0x0040, - /** - * @brief The instruction accepts the REP prefix. - */ - IDF_ACCEPTS_REP_PREFIX = 0x0080, - /** - * @brief The instruction accepts the vex.l prefix value. - */ - IDF_ACCEPTS_VEXL = 0x0100, - /** - * @brief The instruction is invalid in 64 bit mode. - */ - IDF_INVALID_64 = 0x0200, - /** - * @brief The instructions operand size defaults to quadword in 64 bit mode. - */ - IDF_DEFAULT_64 = 0x0400, - /** - * @brief The first operand of the instruction is accessed in write mode. - */ - IDF_OPERAND1_WRITE = 0x0800, - /** - * @brief The first operand of the instruction is accessed in read-write mode. - */ - IDF_OPERAND1_READWRITE = 0x1000, - /** - * @brief The second operand of the instruction is accessed in write mode. - */ - IDF_OPERAND2_WRITE = 0x2000, - /** - * @brief The second operand of the instruction is accessed in read-write mode. - */ - IDF_OPERAND2_READWRITE = 0x4000, - - IDF_FORCE_WORD = 0x7FFF -} VXInstructionDefinitionFlags; - -#pragma pack (push, 1) -/** - * @brief An operand definition. - */ -typedef struct _VXOperandDefinition -{ - /** - * @brief The defined operand type. - * @see VXDefinedOperandType - */ - uint8_t type; - /** - * @brief The defined operand size. - * @see VXDefinedOperandType - */ - uint8_t size; -} VXOperandDefinition; - -/** - * @brief An instruction definition. - */ -typedef struct _VXInstructionDefinition -{ - /** - * @brief The instruction mnemonic. - * @see VXInstructionMnemonic - */ - uint16_t mnemonic; - /** - * @brief The operand definitions for all four possible operands. - */ - VXOperandDefinition operand[4]; - /** - * @brief Additional flags for the instruction definition. - */ - uint16_t flags; -} VXInstructionDefinition; -#pragma pack (pop) - -#ifdef __cplusplus -} -#endif - -#endif // _VDE_VXOPCODETABLEC_H_ \ No newline at end of file diff --git a/Bindings/C/VXDisassemblerC.h b/Bindings/Cpp/VXDisassembler.hpp similarity index 76% rename from Bindings/C/VXDisassemblerC.h rename to Bindings/Cpp/VXDisassembler.hpp index 173e45f..c537e68 100644 --- a/Bindings/C/VXDisassemblerC.h +++ b/Bindings/Cpp/VXDisassembler.hpp @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : athre0z + Modifications : - Last change : 04. February 2015 + Last change : 29. October 2014 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,14 +28,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - **************************************************************************************************/ +**************************************************************************************************/ -#ifndef _VDE_VXDISASSEMBLERC_H_ -#define _VDE_VXDISASSEMBLERC_H_ +#pragma once -#include "VXDisassemblerTypesC.h" -#include "VXInstructionDecoderC.h" -#include "VXInstructionFormatterC.h" -#include "VXDisassemblerUtilsC.h" - -#endif /* _VDE_VXDISASSEMBLERC_H_ */ \ No newline at end of file +#include "VXDisassemblerTypes.hpp" +#include "VXInstructionDecoder.hpp" +#include "VXInstructionFormatter.hpp" +#include "VXDisassemblerUtils.hpp" diff --git a/Bindings/C/VXDisassemblerTypesC.h b/Bindings/Cpp/VXDisassemblerTypes.hpp similarity index 80% rename from Bindings/C/VXDisassemblerTypesC.h rename to Bindings/Cpp/VXDisassemblerTypes.hpp index 2667dd4..1e0d526 100644 --- a/Bindings/C/VXDisassemblerTypesC.h +++ b/Bindings/Cpp/VXDisassemblerTypes.hpp @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : athre0z + Modifications : - Last change : 04. February 2015 + Last change : 22. October 2014 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,23 +29,18 @@ * SOFTWARE. **************************************************************************************************/ - -#ifndef _VDE_VXDISASSEMBLERTYPESC_H_ -#define _VDE_VXDISASSEMBLERTYPESC_H_ +#pragma once #include -#include -#include "VXOpcodeTableC.h" +#include "VXOpcodeTable.hpp" -#ifdef __cplusplus -extern "C" +namespace Verteron { -#endif /** * @brief Values that represent additional flags of a decoded instruction. */ -typedef enum _VXInstructionFlags /* : uint32_t */ +enum InstructionFlags : uint32_t { IF_NONE = 0x00000000, /** @@ -127,157 +122,149 @@ typedef enum _VXInstructionFlags /* : uint32_t */ /** * @brief An error occured while decoding the instruction operands. */ - IF_ERROR_OPERAND = 0x01000000, - - IF_FORCE_DWORD = 0x7FFFFFFF -} VXInstructionFlags; + IF_ERROR_OPERAND = 0x01000000 +}; /** * @brief Values that represent a cpu register. */ -typedef enum _VXRegister /* : uint16_t */ +enum class VXRegister : uint16_t { - REG_NONE, + NONE, /* 8 bit general purpose registers */ - REG_AL, REG_CL, REG_DL, REG_BL, - REG_AH, REG_CH, REG_DH, REG_BH, - REG_SPL, REG_BPL, REG_SIL, REG_DIL, - REG_R8B, REG_R9B, REG_R10B, REG_R11B, - REG_R12B, REG_R13B, REG_R14B, REG_R15B, + AL, CL, DL, BL, + AH, CH, DH, BH, + SPL, BPL, SIL, DIL, + R8B, R9B, R10B, R11B, + R12B, R13B, R14B, R15B, /* 16 bit general purpose registers */ - REG_AX, REG_CX, REG_DX, REG_BX, - REG_SP, REG_BP, REG_SI, REG_DI, - REG_R8W, REG_R9W, REG_R10W, REG_R11W, - REG_R12W, REG_R13W, REG_R14W, REG_R15W, + AX, CX, DX, BX, + SP, BP, SI, DI, + R8W, R9W, R10W, R11W, + R12W, R13W, R14W, R15W, /* 32 bit general purpose registers */ - REG_EAX, REG_ECX, REG_EDX, REG_EBX, - REG_ESP, REG_EBP, REG_ESI, REG_EDI, - REG_R8D, REG_R9D, REG_R10D, REG_R11D, - REG_R12D, REG_R13D, REG_R14D, REG_R15D, + EAX, ECX, EDX, EBX, + ESP, EBP, ESI, EDI, + R8D, R9D, R10D, R11D, + R12D, R13D, R14D, R15D, /* 64 bit general purpose registers */ - REG_RAX, REG_RCX, REG_RDX, REG_RBX, - REG_RSP, REG_RBP, REG_RSI, REG_RDI, - REG_R8, REG_R9, REG_R10, REG_R11, - REG_R12, REG_R13, REG_R14, REG_R15, + RAX, RCX, RDX, RBX, + RSP, RBP, RSI, RDI, + R8, R9, R10, R11, + R12, R13, R14, R15, /* segment registers */ - REG_ES, REG_CS, REG_SS, - REG_DS, REG_FS, REG_GS, + ES, CS, SS, + DS, FS, GS, /* control registers */ - REG_CR0, REG_CR1, REG_CR2, REG_CR3, - REG_CR4, REG_CR5, REG_CR6, REG_CR7, - REG_CR8, REG_CR9, REG_CR10, REG_CR11, - REG_CR12, REG_CR13, REG_CR14, REG_CR15, + CR0, CR1, CR2, CR3, + CR4, CR5, CR6, CR7, + CR8, CR9, CR10, CR11, + CR12, CR13, CR14, CR15, /* debug registers */ - REG_DR0, REG_DR1, REG_DR2, REG_DR3, - REG_DR4, REG_DR5, REG_DR6, REG_DR7, - REG_DR8, REG_DR9, REG_DR10, REG_DR11, - REG_DR12, REG_DR13, REG_DR14, REG_DR15, + DR0, DR1, DR2, DR3, + DR4, DR5, DR6, DR7, + DR8, DR9, DR10, DR11, + DR12, DR13, DR14, DR15, /* mmx registers */ - REG_MM0, REG_MM1, REG_MM2, REG_MM3, - REG_MM4, REG_MM5, REG_MM6, REG_MM7, + MM0, MM1, MM2, MM3, + MM4, MM5, MM6, MM7, /* x87 registers */ - REG_ST0, REG_ST1, REG_ST2, REG_ST3, - REG_ST4, REG_ST5, REG_ST6, REG_ST7, + ST0, ST1, ST2, ST3, + ST4, ST5, ST6, ST7, /* extended multimedia registers */ - REG_XMM0, REG_XMM1, REG_XMM2, REG_XMM3, - REG_XMM4, REG_XMM5, REG_XMM6, REG_XMM7, - REG_XMM8, REG_XMM9, REG_XMM10, REG_XMM11, - REG_XMM12, REG_XMM13, REG_XMM14, REG_XMM15, + XMM0, XMM1, XMM2, XMM3, + XMM4, XMM5, XMM6, XMM7, + XMM8, XMM9, XMM10, XMM11, + XMM12, XMM13, XMM14, XMM15, /* 256 bit multimedia registers */ - REG_YMM0, REG_YMM1, REG_YMM2, REG_YMM3, - REG_YMM4, REG_YMM5, REG_YMM6, REG_YMM7, - REG_YMM8, REG_YMM9, REG_YMM10, REG_YMM11, - REG_YMM12, REG_YMM13, REG_YMM14, YMM15, + YMM0, YMM1, YMM2, YMM3, + YMM4, YMM5, YMM6, YMM7, + YMM8, YMM9, YMM10, YMM11, + YMM12, YMM13, YMM14, YMM15, /* instruction pointer register */ - REG_RIP, - - REG_FORCE_WORD = 0x7FFF -} VXRegister; + RIP +}; /** * @brief Values that represent the type of a decoded operand. */ -typedef enum _VXOperandType /*: uint8_t*/ +enum class VXOperandType : uint8_t { /** * @brief The operand is not used. */ - OPTYPE_NONE, + NONE, /** * @brief The operand is a register operand. */ - OPTYPE_REGISTER, + REGISTER, /** * @brief The operand is a memory operand. */ - OPTYPE_MEMORY, + MEMORY, /** * @brief The operand is a pointer operand. */ - OPTYPE_POINTER, + POINTER, /** * @brief The operand is an immediate operand. */ - OPTYPE_IMMEDIATE, + IMMEDIATE, /** * @brief The operand is a relative immediate operand. */ - OPTYPE_REL_IMMEDIATE, + REL_IMMEDIATE, /** * @brief The operand is a constant value. */ - OPTYPE_CONSTANT -} VXOperandType; + CONSTANT +}; /** * @brief Values that represent the operand access mode. */ -typedef enum _VXOperandAccessMode /* : uint8_t */ +enum class VXOperandAccessMode : uint8_t { - OPACCESSMODE_NA, + NA, /** * @brief The operand is accessed in read-only mode. */ - OPACCESSMODE_READ, + READ, /** * @brief The operand is accessed in write mode. */ - OPACCESSMODE_WRITE, + WRITE, /** * @brief The operand is accessed in read-write mode. */ - OPACCESSMODE_READWRITE -} VXOperandAccessMode; + READWRITE +}; /** * @brief This struct holds information about a decoded operand. */ -typedef struct _VXOperandInfo +struct VXOperandInfo { /** * @brief The type of the operand. - * @see VXOperandType */ - uint8_t type; + VXOperandType type; /** * @brief The size of the operand. */ uint16_t size; /** * @brief The operand access mode. - * @see VXOperandAccessMode */ - uint8_t access_mode; + VXOperandAccessMode access_mode; /** * @brief The base register. - * @see VXRegister */ - uint16_t base; + VXRegister base; /** * @brief The index register. - * @see VXRegister */ - uint16_t index; + VXRegister index; /** * @brief The scale factor. */ @@ -308,12 +295,12 @@ typedef struct _VXOperandInfo uint32_t off; } ptr; } lval; -} VXOperandInfo; +}; /** * @brief This struct holds information about a decoded instruction. */ -typedef struct _VXInstructionInfo +struct VXInstructionInfo { /** * @brief The instruction flags. @@ -321,9 +308,8 @@ typedef struct _VXInstructionInfo uint32_t flags; /** * @brief The instruction mnemonic. - * @see VXInstructionMnemonic */ - uint16_t mnemonic; + VXInstructionMnemonic mnemonic; /** * @brief The total length of the instruction. */ @@ -355,9 +341,8 @@ typedef struct _VXInstructionInfo /** * @brief The segment register. This value will default to @c NONE, if no segment register * prefix is present. - * @see VXRegister */ - uint16_t segment; + VXRegister segment; /** * @brief The rex prefix byte. */ @@ -539,10 +524,6 @@ typedef struct _VXInstructionInfo * This field is used to properly format relative instructions. */ uint64_t instrPointer; -} VXInstructionInfo; +}; -#ifdef __cplusplus } -#endif - -#endif /* _VDE_VXDISASSEMBLERTYPESC_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXDisassemblerUtils.cpp b/Bindings/Cpp/VXDisassemblerUtils.cpp similarity index 98% rename from VerteronDisassemblerEngine/VXDisassemblerUtils.cpp rename to Bindings/Cpp/VXDisassemblerUtils.cpp index f8d640f..1dad08f 100644 --- a/VerteronDisassemblerEngine/VXDisassemblerUtils.cpp +++ b/Bindings/Cpp/VXDisassemblerUtils.cpp @@ -29,7 +29,7 @@ * SOFTWARE. **************************************************************************************************/ -#include "VXDisassemblerUtils.h" +#include "VXDisassemblerUtils.hpp" #include namespace Verteron diff --git a/Bindings/C/VXDisassemblerUtilsC.h b/Bindings/Cpp/VXDisassemblerUtils.hpp similarity index 76% rename from Bindings/C/VXDisassemblerUtilsC.h rename to Bindings/Cpp/VXDisassemblerUtils.hpp index 9ab74ca..72086d2 100644 --- a/Bindings/C/VXDisassemblerUtilsC.h +++ b/Bindings/Cpp/VXDisassemblerUtils.hpp @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : athre0z + Modifications : - Last change : 04. February 2015 + Last change : 30. October 2014 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,26 +29,13 @@ * SOFTWARE. **************************************************************************************************/ - -#ifndef _VDE_VXDISASSEMBLERUTILSC_H_ -#define _VDE_VXDISASSEMBLERUTILSC_H_ - -#include "VXDisassemblerTypesC.h" -#include "VXInternalConfig.h" +#pragma once #include +#include "VXDisassemblerTypes.hpp" - -#ifdef __cplusplus -extern "C" +namespace Verteron { -#endif - -typedef struct _VXContextDescriptor -{ - uint8_t type; - void *ptr; -} VXContextDescriptor; /** * @brief Calculates the absolute target address of a relative instruction operand. @@ -56,12 +43,6 @@ typedef struct _VXContextDescriptor * @param operand The operand. * @return The absolute target address. */ -VX_EXPORT uint64_t VXCalcAbsoluteTarget( - const VXInstructionInfo *info, - const VXOperandInfo *operand); +uint64_t VDECalcAbsoluteTarget(const VXInstructionInfo &info, const VXOperandInfo &operand); -#ifdef __cplusplus } -#endif - -#endif /* _VDE_VXDISASSEMBLERUTILSC_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.cpp b/Bindings/Cpp/VXInstructionDecoder.cpp similarity index 99% rename from VerteronDisassemblerEngine/VXInstructionDecoder.cpp rename to Bindings/Cpp/VXInstructionDecoder.cpp index d6537d8..1861388 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.cpp +++ b/Bindings/Cpp/VXInstructionDecoder.cpp @@ -29,7 +29,7 @@ * SOFTWARE. **************************************************************************************************/ -#include "VXInstructionDecoder.h" +#include "VXInstructionDecoder.hpp" #include namespace Verteron diff --git a/Bindings/Cpp/VXInstructionDecoder.hpp b/Bindings/Cpp/VXInstructionDecoder.hpp new file mode 100644 index 0000000..7ecf592 --- /dev/null +++ b/Bindings/Cpp/VXInstructionDecoder.hpp @@ -0,0 +1,718 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : + + Last change : 29. October 2014 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ +#pragma once + +#include +#include +#include "VXDisassemblerTypes.hpp" + +namespace Verteron +{ + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief The base class for all data-source implementations. + */ +class VXBaseDataSource +{ +private: + uint8_t m_currentInput; +protected: + /** + * @brief Override this method in your custom data source implementations. + * Reads the next byte from the data source. This method increases the current + * input position by one. + * @return The current input byte. + */ + virtual uint8_t internalInputPeek() = 0; + /** + * @brief Override this method in your custom data source implementations. + * Reads the next byte from the data source. This method does NOT increase the + * current input position. + * @return The current input byte. + */ + virtual uint8_t internalInputNext() = 0; +protected: + /** + * @brief Default constructor. + */ + VXBaseDataSource() { }; +public: + /** + * @brief Destructor. + */ + virtual ~VXBaseDataSource() { }; +public: + /** + * @brief Reads the next byte from the data source. This method does NOT increase the + * current input position or the @c length field of the @c info parameter. + * @param info The instruction info. + * @return The current input byte. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + */ + uint8_t inputPeek(VXInstructionInfo &info); + /** + * @brief Reads the next byte from the data source. This method increases the current + * input position and the @c length field of the @c info parameter. + * This method also appends the new byte to to @c data field of the @c info + * parameter. + * @param info The instruction info. + * @return The current input byte. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + */ + uint8_t inputNext(VXInstructionInfo &info); + /** + * @brief Reads the next byte(s) from the data source. This method increases the current + * input position and the @c length field of the @c info parameter. + * This method also appends the new byte(s) to to @c data field of the @c info + * parameter. + * @param info The instruction info. + * @return The current input data. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + */ + template + T inputNext(VXInstructionInfo &info); + /** + * @brief Returns the current input byte. The current input byte is set everytime the + * @c inputPeek or @c inputNext method is called. + * @return The current input byte. + */ + uint8_t inputCurrent() const; +public: + /** + * @brief Override this method in your custom data source implementations. + * Signals, if the end of the data source is reached. + * @return True if end of input, false if not. + */ + virtual bool isEndOfInput() const = 0; + /** + * @brief Override this method in your custom data source implementations. + * Returns the current input position. + * @return The current input position. + */ + virtual uint64_t getPosition() const = 0; + /** + * @brief Override this method in your custom data source implementations. + * Sets a new input position. + * @param position The new input position. + * @return Returns false, if the new position exceeds the maximum input length. + */ + virtual bool setPosition(uint64_t position) = 0; +}; + +inline uint8_t VXBaseDataSource::inputPeek(VXInstructionInfo &info) +{ + if (info.length == 15) + { + info.flags |= IF_ERROR_LENGTH; + return 0; + } + if (isEndOfInput()) + { + info.flags |= IF_ERROR_END_OF_INPUT; + return 0; + } + m_currentInput = internalInputPeek(); + return m_currentInput; +} + +inline uint8_t VXBaseDataSource::inputNext(VXInstructionInfo &info) +{ + if (info.length == 15) + { + info.flags |= IF_ERROR_LENGTH; + return 0; + } + if (isEndOfInput()) + { + info.flags |= IF_ERROR_END_OF_INPUT; + return 0; + } + m_currentInput = internalInputNext(); + info.data[info.length] = m_currentInput; + info.length++; + return m_currentInput; +} + +template +inline T VXBaseDataSource::inputNext(VXInstructionInfo &info) +{ + static_assert(std::is_integral::value, "integral type required"); + T result = 0; + for (unsigned i = 0; i < (sizeof(T) / sizeof(uint8_t)); ++i) + { + T b = inputNext(info); + if (!b && (info.flags & IF_ERROR_MASK)) + { + return 0; + } + result |= (b << (i * 8)); + } + return result; +} + +inline uint8_t VXBaseDataSource::inputCurrent() const +{ + return m_currentInput; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief A memory-buffer based data source for the @c VXInstructionDecoder class. + */ +class VXMemoryDataSource : public VXBaseDataSource +{ +private: + const void *m_inputBuffer; + uint64_t m_inputBufferLen; + uint64_t m_inputBufferPos; +protected: + /** + * @brief Reads the next byte from the data source. This method increases the current + * input position by one. + * @return The current input byte. + */ + uint8_t internalInputPeek() override; + /** + * @brief Reads the next byte from the data source. This method does NOT increase the + * current input position. + * @return The current input byte. + */ + uint8_t internalInputNext() override; +public: + /** + * @brief Constructor. + * @param buffer The input buffer. + * @param bufferLen The length of the input buffer. + */ + VXMemoryDataSource(const void* buffer, size_t bufferLen) + : m_inputBuffer(buffer) + , m_inputBufferLen(bufferLen) + , m_inputBufferPos(0) { }; +public: + /** + * @brief Signals, if the end of the data source is reached. + * @return True if end of input, false if not. + */ + bool isEndOfInput() const override; + /** + * @brief Returns the current input position. + * @return The current input position. + */ + uint64_t getPosition() const override; + /** + * @brief Sets a new input position. + * @param position The new input position. + * @return Returns false, if the new position exceeds the maximum input length. + */ + bool setPosition(uint64_t position) override; +}; + +inline uint8_t VXMemoryDataSource::internalInputPeek() +{ + return *(static_cast(m_inputBuffer) + m_inputBufferPos); +} + +inline uint8_t VXMemoryDataSource::internalInputNext() +{ + ++m_inputBufferPos; + return *(static_cast(m_inputBuffer) + m_inputBufferPos - 1); +} + +inline bool VXMemoryDataSource::isEndOfInput() const +{ + return (m_inputBufferPos >= m_inputBufferLen); +} + +inline uint64_t VXMemoryDataSource::getPosition() const +{ + return m_inputBufferPos; +} + +inline bool VXMemoryDataSource::setPosition(uint64_t position) +{ + m_inputBufferPos = position; + return isEndOfInput(); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief A stream based data source for the @c VXInstructionDecoder class. + */ +class VXStreamDataSource : public VXBaseDataSource +{ +private: + std::istream *m_inputStream; +protected: + /** + * @brief Reads the next byte from the data source. This method increases the current + * input position by one. + * @return The current input byte. + */ + uint8_t internalInputPeek() override; + /** + * @brief Reads the next byte from the data source. This method does NOT increase the + * current input position. + * @return The current input byte. + */ + uint8_t internalInputNext() override; +public: + /** + * @brief Constructor. + * @param stream The input stream. + */ + explicit VXStreamDataSource(std::istream *stream) + : m_inputStream(stream) { }; +public: + /** + * @brief Signals, if the end of the data source is reached. + * @return True if end of input, false if not. + */ + bool isEndOfInput() const override; + /** + * @brief Returns the current input position. + * @return The current input position. + */ + uint64_t getPosition() const override; + /** + * @brief Sets a new input position. + * @param position The new input position. + * @return Returns false, if the new position exceeds the maximum input length. + */ + bool setPosition(uint64_t position) override; +}; + +inline uint8_t VXStreamDataSource::internalInputPeek() +{ + if (!m_inputStream) + { + return 0; + } + return m_inputStream->peek(); +} + +inline uint8_t VXStreamDataSource::internalInputNext() +{ + if (!m_inputStream) + { + return 0; + } + return m_inputStream->get(); +} + +inline bool VXStreamDataSource::isEndOfInput() const +{ + if (!m_inputStream) + { + return true; + } + // We use good() instead of eof() to make sure the decoding will fail, if an stream internal + // error occured. + return !m_inputStream->good(); +} + +inline uint64_t VXStreamDataSource::getPosition() const +{ + if (!m_inputStream) + { + return 0; + } + return m_inputStream->tellg(); +} + +inline bool VXStreamDataSource::setPosition(uint64_t position) +{ + if (!m_inputStream) + { + return false; + } + m_inputStream->seekg(position); + return isEndOfInput(); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief Values that represent a disassembler mode. + */ +enum class VXDisassemblerMode : uint8_t +{ + M16BIT, + M32BIT, + M64BIT +}; + +/** + * @brief Values that represent an instruction-set vendor. + */ +enum class VXInstructionSetVendor : uint8_t +{ + ANY, + INTEL, + AMD +}; + +/** + * @brief The @c VXInstructionDecoder class decodes x86/x86-64 assembly instructions from a + * given data source. + */ +class VXInstructionDecoder +{ +private: + enum class RegisterClass : uint8_t + { + GENERAL_PURPOSE, + MMX, + CONTROL, + DEBUG, + SEGMENT, + XMM + }; +private: + VXBaseDataSource *m_dataSource; + VXDisassemblerMode m_disassemblerMode; + VXInstructionSetVendor m_preferredVendor; + uint64_t m_instructionPointer; +private: + /** + * @brief Reads the next byte from the data source. This method does NOT increase the + * current input position or the @c length field of the @c info parameter. + * @param info The instruction info. + * @return The current input byte. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + */ + uint8_t inputPeek(VXInstructionInfo &info); + /** + * @brief Reads the next byte from the data source. This method increases the current + * input position and the @c length field of the @info parameter. + * This method also appends the new byte to to @c data field of the @c info + * parameter. + * @param info The instruction info. + * @return The current input byte. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + */ + uint8_t inputNext(VXInstructionInfo &info); + /** + * @brief Reads the next byte(s) from the data source. This method increases the current + * input position and the @c length field of the @info parameter. + * This method also appends the new byte(s) to to @c data field of the @c info + * parameter. + * @param info The instruction info. + * @return The current input data. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + */ + template + T inputNext(VXInstructionInfo &info); + /** + * @brief Returns the current input byte. The current input byte is set everytime the + * @c inputPeek or @c inputNext method is called. + * @return The current input byte. + */ + uint8_t inputCurrent() const; +private: + /** + * @brief Decodes a register operand. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param registerClass The register class to use. + * @param registerId The register id. + * @param operandSize The defined size of the operand. + * @return True if it succeeds, false if it fails. + */ + bool decodeRegisterOperand(VXInstructionInfo &info, VXOperandInfo &operand, + RegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize) const; + /** + * @brief Decodes a register/memory operand. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param registerClass The register class to use. + * @param operandSize The defined size of the operand. + * @return True if it succeeds, false if it fails. + */ + bool decodeRegisterMemoryOperand(VXInstructionInfo &info, VXOperandInfo &operand, + RegisterClass registerClass, VXDefinedOperandSize operandSize); + /** + * @brief Decodes an immediate operand. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operandSize The defined size of the operand. + * @return True if it succeeds, false if it fails. + */ + bool decodeImmediate(VXInstructionInfo &info, VXOperandInfo &operand, + VXDefinedOperandSize operandSize); + /** + * @brief Decodes a displacement operand. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param size The size of the displacement data. + * @return True if it succeeds, false if it fails. + */ + bool decodeDisplacement(VXInstructionInfo &info, VXOperandInfo &operand, uint8_t size); +private: + /** + * @brief Decodes the modrm field of the instruction. This method reads an additional + * input byte. + * @param The @c VXInstructionInfo struct that receives the decoded data. + * @return True if it succeeds, false if it fails. + */ + bool decodeModrm(VXInstructionInfo &info); + /** + * @brief Decodes the sib field of the instruction. This method reads an additional + * input byte. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return True if it succeeds, false if it fails. + */ + bool decodeSIB(VXInstructionInfo &info); + /** + * @brief Decodes vex prefix of the instruction. This method takes the current input byte + * to determine the vex prefix type and reads one or two additional input bytes + * on demand. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return True if it succeeds, false if it fails. + */ + bool decodeVex(VXInstructionInfo &info); +private: + /** + * @brief Returns the effective operand size. + * @param info The instruction info. + * @param operandSize The defined operand size. + * @return The effective operand size. + */ + uint16_t getEffectiveOperandSize(const VXInstructionInfo &info, + VXDefinedOperandSize operandSize) const; + /** + * @brief Decodes all instruction operands. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return True if it succeeds, false if it fails. + */ + bool decodeOperands(VXInstructionInfo &info); + /** + * @brief Decodes the specified instruction operand. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operandType The defined type of the operand. + * @param operandSize The defined size of the operand. + * @return True if it succeeds, false if it fails. + */ + bool decodeOperand(VXInstructionInfo &info, VXOperandInfo &operand, + VXDefinedOperandType operandType, VXDefinedOperandSize operandSize); +private: + /** + * @brief Resolves the effective operand and address mode of the instruction. + * This method requires a non-null value in the @c instrDefinition field of the + * @c info struct. + * @param info The @c VXInstructionInfo struct that receives the effective operand and + * address mode. + */ + void resolveOperandAndAddressMode(VXInstructionInfo &info) const; + /** + * @brief Calculates the effective REX/VEX.w, r, x, b, l values. + * This method requires a non-null value in the @c instrDefinition field of the + * @c info struct. + * @param info The @c VXInstructionInfo struct that receives the effective operand and + * address mode. + */ + void calculateEffectiveRexVexValues(VXInstructionInfo &info) const; +private: + /** + * @brief Collects and decodes optional instruction prefixes. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return True if it succeeds, false if it fails. + */ + bool decodePrefixes(VXInstructionInfo &info); + /** + * @brief Collects and decodes the instruction opcodes using the opcode tree. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return True if it succeeds, false if it fails. + */ + bool decodeOpcode(VXInstructionInfo &info); +public: + /** + * @brief Default constructor. + */ + VXInstructionDecoder(); + /** + * @brief Constructor. + * @param input A reference to the input data source. + * @param disassemblerMode The disasasembler mode. + * @param preferredVendor The preferred instruction-set vendor. + * @param instructionPointer The initial instruction pointer. + */ + explicit VXInstructionDecoder(VXBaseDataSource *input, + VXDisassemblerMode disassemblerMode = VXDisassemblerMode::M32BIT, + VXInstructionSetVendor preferredVendor = VXInstructionSetVendor::ANY, + uint64_t instructionPointer = 0); +public: + /** + * @brief Decodes the next instruction from the input data source. + * @param info The @c VXInstructionInfo struct that receives the information about the + * decoded instruction. + * @return This method returns false, if the current position has exceeded the maximum input + * length. + * In all other cases (valid and invalid instructions) the return value is true. + */ + bool decodeInstruction(VXInstructionInfo &info); +public: + /** + * @brief Returns a pointer to the current data source. + * @return A pointer to the current data source. + */ + VXBaseDataSource* getDataSource() const; + /** + * @brief Sets a new data source. + * @param input A reference to the new input data source. + */ + void setDataSource(VXBaseDataSource *input); + /** + * @brief Returns the current disassembler mode. + * @return The current disassembler mode. + */ + VXDisassemblerMode getDisassemblerMode() const; + /** + * @brief Sets the current disassembler mode. + * @param disassemblerMode The new disassembler mode. + */ + void setDisassemblerMode(VXDisassemblerMode disassemblerMode); + /** + * @brief Returns the preferred instruction-set vendor. + * @return The preferred instruction-set vendor. + */ + VXInstructionSetVendor getPreferredVendor() const; + /** + * @brief Sets the preferred instruction-set vendor. + * @param preferredVendor The new preferred instruction-set vendor. + */ + void setPreferredVendor(VXInstructionSetVendor preferredVendor); + /** + * @brief Returns the current instruction pointer. + * @return The current instruction pointer. + */ + uint64_t getInstructionPointer() const; + /** + * @brief Sets a new instruction pointer. + * @param instructionPointer The new instruction pointer. + */ + void setInstructionPointer(uint64_t instructionPointer); +}; + +inline uint8_t VXInstructionDecoder::inputPeek(VXInstructionInfo &info) +{ + if (!m_dataSource) + { + info.flags |= IF_ERROR_END_OF_INPUT; + return 0; + } + return m_dataSource->inputPeek(info); +} + +inline uint8_t VXInstructionDecoder::inputNext(VXInstructionInfo &info) +{ + if (!m_dataSource) + { + info.flags |= IF_ERROR_END_OF_INPUT; + return 0; + } + return m_dataSource->inputNext(info); +} + +template +inline T VXInstructionDecoder::inputNext(VXInstructionInfo &info) +{ + if (!m_dataSource) + { + info.flags |= IF_ERROR_END_OF_INPUT; + return 0; + } + return m_dataSource->inputNext(info); +} + +inline uint8_t VXInstructionDecoder::inputCurrent() const +{ + if (!m_dataSource) + { + return 0; + } + return m_dataSource->inputCurrent(); +} + +inline VXBaseDataSource* VXInstructionDecoder::getDataSource() const +{ + return m_dataSource; +} + +inline void VXInstructionDecoder::setDataSource(VXBaseDataSource *input) +{ + m_dataSource = input; +} + +inline VXDisassemblerMode VXInstructionDecoder::getDisassemblerMode() const +{ + return m_disassemblerMode; +} + +inline void VXInstructionDecoder::setDisassemblerMode(VXDisassemblerMode disassemblerMode) +{ + m_disassemblerMode = disassemblerMode; +} + +inline VXInstructionSetVendor VXInstructionDecoder::getPreferredVendor() const +{ + return m_preferredVendor; +} + +inline void VXInstructionDecoder::setPreferredVendor(VXInstructionSetVendor preferredVendor) +{ + m_preferredVendor = preferredVendor; +} + +inline uint64_t VXInstructionDecoder::getInstructionPointer() const +{ + return m_instructionPointer; +} + +inline void VXInstructionDecoder::setInstructionPointer(uint64_t instructionPointer) +{ + m_instructionPointer = instructionPointer; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +} diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.cpp b/Bindings/Cpp/VXInstructionFormatter.cpp similarity index 99% rename from VerteronDisassemblerEngine/VXInstructionFormatter.cpp rename to Bindings/Cpp/VXInstructionFormatter.cpp index b8ac894..a5e0d7f 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.cpp +++ b/Bindings/Cpp/VXInstructionFormatter.cpp @@ -29,8 +29,8 @@ * SOFTWARE. **************************************************************************************************/ -#include "VXInstructionFormatter.h" -#include "VXDisassemblerUtils.h" +#include "VXInstructionFormatter.hpp" +#include "VXDisassemblerUtils.hpp" #include #include #include diff --git a/Bindings/Cpp/VXInstructionFormatter.hpp b/Bindings/Cpp/VXInstructionFormatter.hpp new file mode 100644 index 0000000..b63b263 --- /dev/null +++ b/Bindings/Cpp/VXInstructionFormatter.hpp @@ -0,0 +1,320 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : + + Last change : 22. October 2014 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ +#pragma once + +#include +#include +#include +#include "VXDisassemblerTypes.hpp" + +namespace Verteron +{ + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief Base class for all symbol resolver implementations. + */ +class VXBaseSymbolResolver +{ +public: + /** + * @brief Destructor. + */ + virtual ~VXBaseSymbolResolver(); +public: + /** + * @brief Resolves a symbol. + * @param info The instruction info. + * @param address The address. + * @param offset Reference to an unsigned 64 bit integer that receives an offset + * relative to the base address of the symbol. + * @return The name of the symbol, if the symbol was found, @c NULL if not. + */ + virtual const char* resolveSymbol(const VXInstructionInfo &info, uint64_t address, + uint64_t &offset); +}; + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief Base class for all instruction formatter implementations. + */ +class VXBaseInstructionFormatter +{ +private: + static const char *m_registerStrings[]; + VXBaseSymbolResolver *m_symbolResolver; + std::vector m_outputBuffer; + size_t m_outputStringLen; + bool m_outputUppercase; +protected: + /** + * @brief Clears the output string buffer. + */ + void outputClear(); + /** + * @brief Returns the content of the output string buffer. + * @return Pointer to the content of the ouput string buffer. + */ + const char* outputString(); + /** + * @brief Appends text to the ouput string buffer. + * @param text The text. + */ + void outputAppend(const char *text); + /** + * @brief Appends formatted text to the output string buffer. + * @param format The format string. + */ + void outputAppendFormatted(const char *format, ...); + /** + * @brief Changes automatic conversion of characters to uppercase. + * @param uppercase Set true to enable automatic uppercase conversion. + */ + void outputSetUppercase(bool uppercase); + /** + * @brief Appends a formatted address to the output string buffer. + * @param info The instruction info. + * @param address The address. + * @param resolveSymbols If this parameter is true, the method will try to display a + * smybol name instead of the numeric value. + */ + void outputAppendAddress(const VXInstructionInfo &info, uint64_t address, + bool resolveSymbols = true); + /** + * @brief Appends a formatted immediate value to the output string buffer. + * @param info The instruction info. + * @param operand The immediate operand. + * @param resolveSymbols If this parameter is true, the method will try to display a + * smybol name instead of the numeric value. + */ + void outputAppendImmediate(const VXInstructionInfo &info, const VXOperandInfo &operand, + bool resolveSymbols = false); + /** + * @brief Appends a formatted memory displacement value to the output string buffer. + * @param info The instruction info. + * @param operand The memory operand. + */ + void outputAppendDisplacement(const VXInstructionInfo &info, const VXOperandInfo &operand); +protected: + /** + * @brief Returns the string representation of a given register. + * @param reg The register. + * @return The string representation of the given register. + */ + const char* registerToString(VXRegister reg) const; + /** + * @brief Resolves a symbol. + * @param info The instruction info. + * @param address The address. + * @param offset Reference to an unsigned 64 bit integer that receives an offset + * relative to the base address of the symbol. + * @return The name of the symbol, if the symbol was found, @c NULL if not. + */ + const char* resolveSymbol(const VXInstructionInfo &info, uint64_t address, + uint64_t &offset) const; +protected: + /** + * @brief Override this method to implement a custom disassembly syntax. Use the + * @c outputAppend and @c outputAppendFormatted methods to fill the internal + * string buffer. + * @param info The instruction info. + */ + virtual void internalFormatInstruction(const VXInstructionInfo &info); + /** + * @brief Default constructor. + */ + VXBaseInstructionFormatter(); + /** + * @brief Constructor. + * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol + * resolver should be used. + */ + explicit VXBaseInstructionFormatter(VXBaseSymbolResolver *symbolResolver); +public: + /** + * @brief Destructor. + */ + virtual ~VXBaseInstructionFormatter(); +public: + /** + * @brief Formats a decoded instruction. + * @param info The instruction info. + * @return Pointer to the formatted instruction string. + */ + const char* formatInstruction(const VXInstructionInfo &info); +public: + /** + * @brief Returns a pointer to the current symbol resolver. + * @return Pointer to the current symbol resolver or @c NULL, if no symbol resolver is used. + */ + VXBaseSymbolResolver* getSymbolResolver() const; + /** + * @brief Sets a new symbol resolver. + * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol + * resolver should be used. + */ + void setSymbolResolver(VXBaseSymbolResolver *symbolResolver); +}; + +inline void VXBaseInstructionFormatter::outputSetUppercase(bool uppercase) +{ + m_outputUppercase = uppercase; +} + +inline char const* VXBaseInstructionFormatter::registerToString(VXRegister reg) const +{ + if (reg == VXRegister::NONE) + { + return "error"; + } + return m_registerStrings[static_cast(reg) - 1]; +} + +inline char const* VXBaseInstructionFormatter::resolveSymbol(const VXInstructionInfo &info, + uint64_t address, uint64_t &offset) const +{ + if (m_symbolResolver) + { + return m_symbolResolver->resolveSymbol(info, address, offset); + } + return nullptr; +} + +inline VXBaseSymbolResolver* VXBaseInstructionFormatter::getSymbolResolver() const +{ + return m_symbolResolver; +} + +inline void VXBaseInstructionFormatter::setSymbolResolver(VXBaseSymbolResolver *symbolResolver) +{ + m_symbolResolver = symbolResolver; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief Intel syntax instruction formatter. + */ +class VXIntelInstructionFormatter : public VXBaseInstructionFormatter +{ +private: + /** + * @brief Appends an operand cast to the output string buffer. + * @param info The instruction info. + * @param operand The operand. + */ + void outputAppendOperandCast(const VXInstructionInfo &info, const VXOperandInfo &operand); + /** + * @brief Formats the specified operand and appends the resulting string to the output + * buffer. + * @param info The instruction info. + * @param operand The operand. + */ + void formatOperand(const VXInstructionInfo &info, const VXOperandInfo &operand); +protected: + /** + * @brief Fills the internal string buffer with an intel style formatted instruction string. + * @param info The instruction info. + */ + void internalFormatInstruction(const VXInstructionInfo &info) override; +public: + /** + * @brief Default constructor. + */ + VXIntelInstructionFormatter(); + /** + * @brief Constructor. + * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol + * resolver should be used. + */ + explicit VXIntelInstructionFormatter(VXBaseSymbolResolver *symbolResolver); + /** + * @brief Destructor. + */ + ~VXIntelInstructionFormatter() override; +}; + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief Simple symbol resolver that only matches exact addresses. + */ +class VXExactSymbolResolver : public VXBaseSymbolResolver +{ +private: + std::unordered_map m_symbolMap; +public: + /** + * @brief Destructor. + */ + ~VXExactSymbolResolver() override; +public: + /** + * @brief Resolves a symbol. + * @param info The instruction info. + * @param address The address. + * @param offset Reference to an unsigned 64 bit integer that receives an offset + * relative to the base address of the symbol. + * @return The name of the symbol, if the symbol was found, @c NULL if not. + */ + const char* resolveSymbol(const VXInstructionInfo &info, uint64_t address, + uint64_t &offset) override; +public: + /** + * @brief Query if the given address is a known symbol. + * @param address The address. + * @return True if the address is known, false if not. + */ + bool containsSymbol(uint64_t address) const; + /** + * @brief Adds or changes a symbol. + * @param address The address. + * @param name The symbol name. + */ + void setSymbol(uint64_t address, const char* name); + /** + * @brief Removes the symbol described by address. This will invalidate all char pointers + * to the specific symbol name. + * @param address The address. + */ + void removeSymbol(uint64_t address); + /** + * @brief Clears the symbol tree. + */ + void clear(); +}; + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +} diff --git a/VerteronDisassemblerEngine/VXOpcodeTable.cpp b/Bindings/Cpp/VXOpcodeTable.cpp similarity index 99% rename from VerteronDisassemblerEngine/VXOpcodeTable.cpp rename to Bindings/Cpp/VXOpcodeTable.cpp index 72438f2..5b6b5e8 100644 --- a/VerteronDisassemblerEngine/VXOpcodeTable.cpp +++ b/Bindings/Cpp/VXOpcodeTable.cpp @@ -29,7 +29,7 @@ * SOFTWARE. **************************************************************************************************/ -#include "VXOpcodeTable.h" +#include "VXOpcodeTable.hpp" namespace Verteron { diff --git a/Bindings/Cpp/VXOpcodeTable.hpp b/Bindings/Cpp/VXOpcodeTable.hpp new file mode 100644 index 0000000..bf13060 --- /dev/null +++ b/Bindings/Cpp/VXOpcodeTable.hpp @@ -0,0 +1,1753 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : + + Last change : 29. October 2014 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ +#pragma once + +#include +#include + +namespace Verteron +{ + +/** + * @brief Values that represent an instruction mnemonic. + */ +enum class VXInstructionMnemonic : uint16_t +{ + /* 000 */ INVALID, + /* 001 */ AAA, + /* 002 */ AAD, + /* 003 */ AAM, + /* 004 */ AAS, + /* 005 */ ADC, + /* 006 */ ADD, + /* 007 */ ADDPD, + /* 008 */ ADDPS, + /* 009 */ ADDSD, + /* 00A */ ADDSS, + /* 00B */ ADDSUBPD, + /* 00C */ ADDSUBPS, + /* 00D */ AESDEC, + /* 00E */ AESDECLAST, + /* 00F */ AESENC, + /* 010 */ AESENCLAST, + /* 011 */ AESIMC, + /* 012 */ AESKEYGENASSIST, + /* 013 */ AND, + /* 014 */ ANDNPD, + /* 015 */ ANDNPS, + /* 016 */ ANDPD, + /* 017 */ ANDPS, + /* 018 */ ARPL, + /* 019 */ BLENDPD, + /* 01A */ BLENDPS, + /* 01B */ BLENDVPD, + /* 01C */ BLENDVPS, + /* 01D */ BOUND, + /* 01E */ BSF, + /* 01F */ BSR, + /* 020 */ BSWAP, + /* 021 */ BT, + /* 022 */ BTC, + /* 023 */ BTR, + /* 024 */ BTS, + /* 025 */ CALL, + /* 026 */ CBW, + /* 027 */ CDQ, + /* 028 */ CDQE, + /* 029 */ CLC, + /* 02A */ CLD, + /* 02B */ CLFLUSH, + /* 02C */ CLGI, + /* 02D */ CLI, + /* 02E */ CLTS, + /* 02F */ CMC, + /* 030 */ CMOVA, + /* 031 */ CMOVAE, + /* 032 */ CMOVB, + /* 033 */ CMOVBE, + /* 034 */ CMOVE, + /* 035 */ CMOVG, + /* 036 */ CMOVGE, + /* 037 */ CMOVL, + /* 038 */ CMOVLE, + /* 039 */ CMOVNE, + /* 03A */ CMOVNO, + /* 03B */ CMOVNP, + /* 03C */ CMOVNS, + /* 03D */ CMOVO, + /* 03E */ CMOVP, + /* 03F */ CMOVS, + /* 040 */ CMP, + /* 041 */ CMPPD, + /* 042 */ CMPPS, + /* 043 */ CMPSB, + /* 044 */ CMPSD, + /* 045 */ CMPSQ, + /* 046 */ CMPSS, + /* 047 */ CMPSW, + /* 048 */ CMPXCHG, + /* 049 */ CMPXCHG16B, + /* 04A */ CMPXCHG8B, + /* 04B */ COMISD, + /* 04C */ COMISS, + /* 04D */ CPUID, + /* 04E */ CQO, + /* 04F */ CRC32, + /* 050 */ CVTDQ2PD, + /* 051 */ CVTDQ2PS, + /* 052 */ CVTPD2DQ, + /* 053 */ CVTPD2PI, + /* 054 */ CVTPD2PS, + /* 055 */ CVTPI2PD, + /* 056 */ CVTPI2PS, + /* 057 */ CVTPS2DQ, + /* 058 */ CVTPS2PD, + /* 059 */ CVTPS2PI, + /* 05A */ CVTSD2SI, + /* 05B */ CVTSD2SS, + /* 05C */ CVTSI2SD, + /* 05D */ CVTSI2SS, + /* 05E */ CVTSS2SD, + /* 05F */ CVTSS2SI, + /* 060 */ CVTTPD2DQ, + /* 061 */ CVTTPD2PI, + /* 062 */ CVTTPS2DQ, + /* 063 */ CVTTPS2PI, + /* 064 */ CVTTSD2SI, + /* 065 */ CVTTSS2SI, + /* 066 */ CWD, + /* 067 */ CWDE, + /* 068 */ DAA, + /* 069 */ DAS, + /* 06A */ DEC, + /* 06B */ DIV, + /* 06C */ DIVPD, + /* 06D */ DIVPS, + /* 06E */ DIVSD, + /* 06F */ DIVSS, + /* 070 */ DPPD, + /* 071 */ DPPS, + /* 072 */ EMMS, + /* 073 */ ENTER, + /* 074 */ EXTRACTPS, + /* 075 */ F2XM1, + /* 076 */ FABS, + /* 077 */ FADD, + /* 078 */ FADDP, + /* 079 */ FBLD, + /* 07A */ FBSTP, + /* 07B */ FCHS, + /* 07C */ FCLEX, + /* 07D */ FCMOVB, + /* 07E */ FCMOVBE, + /* 07F */ FCMOVE, + /* 080 */ FCMOVNB, + /* 081 */ FCMOVNBE, + /* 082 */ FCMOVNE, + /* 083 */ FCMOVNU, + /* 084 */ FCMOVU, + /* 085 */ FCOM, + /* 086 */ FCOM2, + /* 087 */ FCOMI, + /* 088 */ FCOMIP, + /* 089 */ FCOMP, + /* 08A */ FCOMP3, + /* 08B */ FCOMP5, + /* 08C */ FCOMPP, + /* 08D */ FCOS, + /* 08E */ FDECSTP, + /* 08F */ FDIV, + /* 090 */ FDIVP, + /* 091 */ FDIVR, + /* 092 */ FDIVRP, + /* 093 */ FEMMS, + /* 094 */ FFREE, + /* 095 */ FFREEP, + /* 096 */ FIADD, + /* 097 */ FICOM, + /* 098 */ FICOMP, + /* 099 */ FIDIV, + /* 09A */ FIDIVR, + /* 09B */ FILD, + /* 09C */ FIMUL, + /* 09D */ FINCSTP, + /* 09E */ FIST, + /* 09F */ FISTP, + /* 0A0 */ FISTTP, + /* 0A1 */ FISUB, + /* 0A2 */ FISUBR, + /* 0A3 */ FLD, + /* 0A4 */ FLD1, + /* 0A5 */ FLDCW, + /* 0A6 */ FLDENV, + /* 0A7 */ FLDL2E, + /* 0A8 */ FLDL2T, + /* 0A9 */ FLDLG2, + /* 0AA */ FLDLN2, + /* 0AB */ FLDPI, + /* 0AC */ FLDZ, + /* 0AD */ FMUL, + /* 0AE */ FMULP, + /* 0AF */ FNDISI, + /* 0B0 */ FNENI, + /* 0B1 */ FNINIT, + /* 0B2 */ FNOP, + /* 0B3 */ FNSAVE, + /* 0B4 */ FNSETPM, + /* 0B5 */ FNSTCW, + /* 0B6 */ FNSTENV, + /* 0B7 */ FNSTSW, + /* 0B8 */ FPATAN, + /* 0B9 */ FPREM, + /* 0BA */ FPREM1, + /* 0BB */ FPTAN, + /* 0BC */ FRNDINT, + /* 0BD */ FRSTOR, + /* 0BE */ FRSTPM, + /* 0BF */ FSCALE, + /* 0C0 */ FSIN, + /* 0C1 */ FSINCOS, + /* 0C2 */ FSQRT, + /* 0C3 */ FST, + /* 0C4 */ FSTP, + /* 0C5 */ FSTP1, + /* 0C6 */ FSTP8, + /* 0C7 */ FSTP9, + /* 0C8 */ FSUB, + /* 0C9 */ FSUBP, + /* 0CA */ FSUBR, + /* 0CB */ FSUBRP, + /* 0CC */ FTST, + /* 0CD */ FUCOM, + /* 0CE */ FUCOMI, + /* 0CF */ FUCOMIP, + /* 0D0 */ FUCOMP, + /* 0D1 */ FUCOMPP, + /* 0D2 */ FXAM, + /* 0D3 */ FXCH, + /* 0D4 */ FXCH4, + /* 0D5 */ FXCH7, + /* 0D6 */ FXRSTOR, + /* 0D7 */ FXSAVE, + /* 0D8 */ FXTRACT, + /* 0D9 */ FYL2X, + /* 0DA */ FYL2XP1, + /* 0DB */ GETSEC, + /* 0DC */ HADDPD, + /* 0DD */ HADDPS, + /* 0DE */ HLT, + /* 0DF */ HSUBPD, + /* 0E0 */ HSUBPS, + /* 0E1 */ IDIV, + /* 0E2 */ IMUL, + /* 0E3 */ IN, + /* 0E4 */ INC, + /* 0E5 */ INSB, + /* 0E6 */ INSD, + /* 0E7 */ INSERTPS, + /* 0E8 */ INSW, + /* 0E9 */ INT, + /* 0EA */ INT1, + /* 0EB */ INT3, + /* 0EC */ INTO, + /* 0ED */ INVD, + /* 0EE */ INVEPT, + /* 0EF */ INVLPG, + /* 0F0 */ INVLPGA, + /* 0F1 */ INVVPID, + /* 0F2 */ IRETD, + /* 0F3 */ IRETQ, + /* 0F4 */ IRETW, + /* 0F5 */ JA, + /* 0F6 */ JB, + /* 0F7 */ JBE, + /* 0F8 */ JCXZ, + /* 0F9 */ JE, + /* 0FA */ JECXZ, + /* 0FB */ JG, + /* 0FC */ JGE, + /* 0FD */ JL, + /* 0FE */ JLE, + /* 0FF */ JMP, + /* 100 */ JNB, + /* 101 */ JNE, + /* 102 */ JNO, + /* 103 */ JNP, + /* 104 */ JNS, + /* 105 */ JO, + /* 106 */ JP, + /* 107 */ JRCXZ, + /* 108 */ JS, + /* 109 */ LAHF, + /* 10A */ LAR, + /* 10B */ LDDQU, + /* 10C */ LDMXCSR, + /* 10D */ LDS, + /* 10E */ LEA, + /* 10F */ LEAVE, + /* 110 */ LES, + /* 111 */ LFENCE, + /* 112 */ LFS, + /* 113 */ LGDT, + /* 114 */ LGS, + /* 115 */ LIDT, + /* 116 */ LLDT, + /* 117 */ LMSW, + /* 118 */ LOCK, + /* 119 */ LODSB, + /* 11A */ LODSD, + /* 11B */ LODSQ, + /* 11C */ LODSW, + /* 11D */ LOOP, + /* 11E */ LOOPE, + /* 11F */ LOOPNE, + /* 120 */ LSL, + /* 121 */ LSS, + /* 122 */ LTR, + /* 123 */ MASKMOVDQU, + /* 124 */ MASKMOVQ, + /* 125 */ MAXPD, + /* 126 */ MAXPS, + /* 127 */ MAXSD, + /* 128 */ MAXSS, + /* 129 */ MFENCE, + /* 12A */ MINPD, + /* 12B */ MINPS, + /* 12C */ MINSD, + /* 12D */ MINSS, + /* 12E */ MONITOR, + /* 12F */ MONTMUL, + /* 130 */ MOV, + /* 131 */ MOVAPD, + /* 132 */ MOVAPS, + /* 133 */ MOVBE, + /* 134 */ MOVD, + /* 135 */ MOVDDUP, + /* 136 */ MOVDQ2Q, + /* 137 */ MOVDQA, + /* 138 */ MOVDQU, + /* 139 */ MOVHLPS, + /* 13A */ MOVHPD, + /* 13B */ MOVHPS, + /* 13C */ MOVLHPS, + /* 13D */ MOVLPD, + /* 13E */ MOVLPS, + /* 13F */ MOVMSKPD, + /* 140 */ MOVMSKPS, + /* 141 */ MOVNTDQ, + /* 142 */ MOVNTDQA, + /* 143 */ MOVNTI, + /* 144 */ MOVNTPD, + /* 145 */ MOVNTPS, + /* 146 */ MOVNTQ, + /* 147 */ MOVQ, + /* 148 */ MOVQ2DQ, + /* 149 */ MOVSB, + /* 14A */ MOVSD, + /* 14B */ MOVSHDUP, + /* 14C */ MOVSLDUP, + /* 14D */ MOVSQ, + /* 14E */ MOVSS, + /* 14F */ MOVSW, + /* 150 */ MOVSX, + /* 151 */ MOVSXD, + /* 152 */ MOVUPD, + /* 153 */ MOVUPS, + /* 154 */ MOVZX, + /* 155 */ MPSADBW, + /* 156 */ MUL, + /* 157 */ MULPD, + /* 158 */ MULPS, + /* 159 */ MULSD, + /* 15A */ MULSS, + /* 15B */ MWAIT, + /* 15C */ NEG, + /* 15D */ NOP, + /* 15E */ NOT, + /* 15F */ OR, + /* 160 */ ORPD, + /* 161 */ ORPS, + /* 162 */ OUT, + /* 163 */ OUTSB, + /* 164 */ OUTSD, + /* 165 */ OUTSW, + /* 166 */ PABSB, + /* 167 */ PABSD, + /* 168 */ PABSW, + /* 169 */ PACKSSDW, + /* 16A */ PACKSSWB, + /* 16B */ PACKUSDW, + /* 16C */ PACKUSWB, + /* 16D */ PADDB, + /* 16E */ PADDD, + /* 16F */ PADDQ, + /* 170 */ PADDSB, + /* 171 */ PADDSW, + /* 172 */ PADDUSB, + /* 173 */ PADDUSW, + /* 174 */ PADDW, + /* 175 */ PALIGNR, + /* 176 */ PAND, + /* 177 */ PANDN, + /* 178 */ PAUSE, + /* 179 */ PAVGB, + /* 17A */ PAVGUSB, + /* 17B */ PAVGW, + /* 17C */ PBLENDVB, + /* 17D */ PBLENDW, + /* 17E */ PCLMULQDQ, + /* 17F */ PCMPEQB, + /* 180 */ PCMPEQD, + /* 181 */ PCMPEQQ, + /* 182 */ PCMPEQW, + /* 183 */ PCMPESTRI, + /* 184 */ PCMPESTRM, + /* 185 */ PCMPGTB, + /* 186 */ PCMPGTD, + /* 187 */ PCMPGTQ, + /* 188 */ PCMPGTW, + /* 189 */ PCMPISTRI, + /* 18A */ PCMPISTRM, + /* 18B */ PEXTRB, + /* 18C */ PEXTRD, + /* 18D */ PEXTRQ, + /* 18E */ PEXTRW, + /* 18F */ PF2ID, + /* 190 */ PF2IW, + /* 191 */ PFACC, + /* 192 */ PFADD, + /* 193 */ PFCMPEQ, + /* 194 */ PFCMPGE, + /* 195 */ PFCMPGT, + /* 196 */ PFMAX, + /* 197 */ PFMIN, + /* 198 */ PFMUL, + /* 199 */ PFNACC, + /* 19A */ PFPNACC, + /* 19B */ PFRCP, + /* 19C */ PFRCPIT1, + /* 19D */ PFRCPIT2, + /* 19E */ PFRSQIT1, + /* 19F */ PFRSQRT, + /* 1A0 */ PFSUB, + /* 1A1 */ PFSUBR, + /* 1A2 */ PHADDD, + /* 1A3 */ PHADDSW, + /* 1A4 */ PHADDW, + /* 1A5 */ PHMINPOSUW, + /* 1A6 */ PHSUBD, + /* 1A7 */ PHSUBSW, + /* 1A8 */ PHSUBW, + /* 1A9 */ PI2FD, + /* 1AA */ PI2FW, + /* 1AB */ PINSRB, + /* 1AC */ PINSRD, + /* 1AD */ PINSRQ, + /* 1AE */ PINSRW, + /* 1AF */ PMADDUBSW, + /* 1B0 */ PMADDWD, + /* 1B1 */ PMAXSB, + /* 1B2 */ PMAXSD, + /* 1B3 */ PMAXSW, + /* 1B4 */ PMAXUB, + /* 1B5 */ PMAXUD, + /* 1B6 */ PMAXUW, + /* 1B7 */ PMINSB, + /* 1B8 */ PMINSD, + /* 1B9 */ PMINSW, + /* 1BA */ PMINUB, + /* 1BB */ PMINUD, + /* 1BC */ PMINUW, + /* 1BD */ PMOVMSKB, + /* 1BE */ PMOVSXBD, + /* 1BF */ PMOVSXBQ, + /* 1C0 */ PMOVSXBW, + /* 1C1 */ PMOVSXDQ, + /* 1C2 */ PMOVSXWD, + /* 1C3 */ PMOVSXWQ, + /* 1C4 */ PMOVZXBD, + /* 1C5 */ PMOVZXBQ, + /* 1C6 */ PMOVZXBW, + /* 1C7 */ PMOVZXDQ, + /* 1C8 */ PMOVZXWD, + /* 1C9 */ PMOVZXWQ, + /* 1CA */ PMULDQ, + /* 1CB */ PMULHRSW, + /* 1CC */ PMULHRW, + /* 1CD */ PMULHUW, + /* 1CE */ PMULHW, + /* 1CF */ PMULLD, + /* 1D0 */ PMULLW, + /* 1D1 */ PMULUDQ, + /* 1D2 */ POP, + /* 1D3 */ POPA, + /* 1D4 */ POPAD, + /* 1D5 */ POPCNT, + /* 1D6 */ POPFD, + /* 1D7 */ POPFQ, + /* 1D8 */ POPFW, + /* 1D9 */ POR, + /* 1DA */ PREFETCH, + /* 1DB */ PREFETCHNTA, + /* 1DC */ PREFETCHT0, + /* 1DD */ PREFETCHT1, + /* 1DE */ PREFETCHT2, + /* 1DF */ PSADBW, + /* 1E0 */ PSHUFB, + /* 1E1 */ PSHUFD, + /* 1E2 */ PSHUFHW, + /* 1E3 */ PSHUFLW, + /* 1E4 */ PSHUFW, + /* 1E5 */ PSIGNB, + /* 1E6 */ PSIGND, + /* 1E7 */ PSIGNW, + /* 1E8 */ PSLLD, + /* 1E9 */ PSLLDQ, + /* 1EA */ PSLLQ, + /* 1EB */ PSLLW, + /* 1EC */ PSRAD, + /* 1ED */ PSRAW, + /* 1EE */ PSRLD, + /* 1EF */ PSRLDQ, + /* 1F0 */ PSRLQ, + /* 1F1 */ PSRLW, + /* 1F2 */ PSUBB, + /* 1F3 */ PSUBD, + /* 1F4 */ PSUBQ, + /* 1F5 */ PSUBSB, + /* 1F6 */ PSUBSW, + /* 1F7 */ PSUBUSB, + /* 1F8 */ PSUBUSW, + /* 1F9 */ PSUBW, + /* 1FA */ PSWAPD, + /* 1FB */ PTEST, + /* 1FC */ PUNPCKHBW, + /* 1FD */ PUNPCKHDQ, + /* 1FE */ PUNPCKHQDQ, + /* 1FF */ PUNPCKHWD, + /* 200 */ PUNPCKLBW, + /* 201 */ PUNPCKLDQ, + /* 202 */ PUNPCKLQDQ, + /* 203 */ PUNPCKLWD, + /* 204 */ PUSH, + /* 205 */ PUSHA, + /* 206 */ PUSHAD, + /* 207 */ PUSHFD, + /* 208 */ PUSHFQ, + /* 209 */ PUSHFW, + /* 20A */ PXOR, + /* 20B */ RCL, + /* 20C */ RCPPS, + /* 20D */ RCPSS, + /* 20E */ RCR, + /* 20F */ RDMSR, + /* 210 */ RDPMC, + /* 211 */ RDRAND, + /* 212 */ RDTSC, + /* 213 */ RDTSCP, + /* 214 */ REP, + /* 215 */ REPNE, + /* 216 */ RET, + /* 217 */ RETF, + /* 218 */ ROL, + /* 219 */ ROR, + /* 21A */ ROUNDPD, + /* 21B */ ROUNDPS, + /* 21C */ ROUNDSD, + /* 21D */ ROUNDSS, + /* 21E */ RSM, + /* 21F */ RSQRTPS, + /* 220 */ RSQRTSS, + /* 221 */ SAHF, + /* 222 */ SALC, + /* 223 */ SAR, + /* 224 */ SBB, + /* 225 */ SCASB, + /* 226 */ SCASD, + /* 227 */ SCASQ, + /* 228 */ SCASW, + /* 229 */ SETA, + /* 22A */ SETAE, + /* 22B */ SETB, + /* 22C */ SETBE, + /* 22D */ SETE, + /* 22E */ SETG, + /* 22F */ SETGE, + /* 230 */ SETL, + /* 231 */ SETLE, + /* 232 */ SETNE, + /* 233 */ SETNO, + /* 234 */ SETNP, + /* 235 */ SETNS, + /* 236 */ SETO, + /* 237 */ SETP, + /* 238 */ SETS, + /* 239 */ SFENCE, + /* 23A */ SGDT, + /* 23B */ SHL, + /* 23C */ SHLD, + /* 23D */ SHR, + /* 23E */ SHRD, + /* 23F */ SHUFPD, + /* 240 */ SHUFPS, + /* 241 */ SIDT, + /* 242 */ SKINIT, + /* 243 */ SLDT, + /* 244 */ SMSW, + /* 245 */ SQRTPD, + /* 246 */ SQRTPS, + /* 247 */ SQRTSD, + /* 248 */ SQRTSS, + /* 249 */ STC, + /* 24A */ STD, + /* 24B */ STGI, + /* 24C */ STI, + /* 24D */ STMXCSR, + /* 24E */ STOSB, + /* 24F */ STOSD, + /* 250 */ STOSQ, + /* 251 */ STOSW, + /* 252 */ STR, + /* 253 */ SUB, + /* 254 */ SUBPD, + /* 255 */ SUBPS, + /* 256 */ SUBSD, + /* 257 */ SUBSS, + /* 258 */ SWAPGS, + /* 259 */ SYSCALL, + /* 25A */ SYSENTER, + /* 25B */ SYSEXIT, + /* 25C */ SYSRET, + /* 25D */ TEST, + /* 25E */ UCOMISD, + /* 25F */ UCOMISS, + /* 260 */ UD2, + /* 261 */ UNPCKHPD, + /* 262 */ UNPCKHPS, + /* 263 */ UNPCKLPD, + /* 264 */ UNPCKLPS, + /* 265 */ VADDPD, + /* 266 */ VADDPS, + /* 267 */ VADDSD, + /* 268 */ VADDSS, + /* 269 */ VADDSUBPD, + /* 26A */ VADDSUBPS, + /* 26B */ VAESDEC, + /* 26C */ VAESDECLAST, + /* 26D */ VAESENC, + /* 26E */ VAESENCLAST, + /* 26F */ VAESIMC, + /* 270 */ VAESKEYGENASSIST, + /* 271 */ VANDNPD, + /* 272 */ VANDNPS, + /* 273 */ VANDPD, + /* 274 */ VANDPS, + /* 275 */ VBLENDPD, + /* 276 */ VBLENDPS, + /* 277 */ VBLENDVPD, + /* 278 */ VBLENDVPS, + /* 279 */ VBROADCASTSD, + /* 27A */ VBROADCASTSS, + /* 27B */ VCMPPD, + /* 27C */ VCMPPS, + /* 27D */ VCMPSD, + /* 27E */ VCMPSS, + /* 27F */ VCOMISD, + /* 280 */ VCOMISS, + /* 281 */ VCVTDQ2PD, + /* 282 */ VCVTDQ2PS, + /* 283 */ VCVTPD2DQ, + /* 284 */ VCVTPD2PS, + /* 285 */ VCVTPS2DQ, + /* 286 */ VCVTPS2PD, + /* 287 */ VCVTSD2SI, + /* 288 */ VCVTSD2SS, + /* 289 */ VCVTSI2SD, + /* 28A */ VCVTSI2SS, + /* 28B */ VCVTSS2SD, + /* 28C */ VCVTSS2SI, + /* 28D */ VCVTTPD2DQ, + /* 28E */ VCVTTPS2DQ, + /* 28F */ VCVTTSD2SI, + /* 290 */ VCVTTSS2SI, + /* 291 */ VDIVPD, + /* 292 */ VDIVPS, + /* 293 */ VDIVSD, + /* 294 */ VDIVSS, + /* 295 */ VDPPD, + /* 296 */ VDPPS, + /* 297 */ VERR, + /* 298 */ VERW, + /* 299 */ VEXTRACTF128, + /* 29A */ VEXTRACTPS, + /* 29B */ VHADDPD, + /* 29C */ VHADDPS, + /* 29D */ VHSUBPD, + /* 29E */ VHSUBPS, + /* 29F */ VINSERTF128, + /* 2A0 */ VINSERTPS, + /* 2A1 */ VLDDQU, + /* 2A2 */ VMASKMOVDQU, + /* 2A3 */ VMASKMOVPD, + /* 2A4 */ VMASKMOVPS, + /* 2A5 */ VMAXPD, + /* 2A6 */ VMAXPS, + /* 2A7 */ VMAXSD, + /* 2A8 */ VMAXSS, + /* 2A9 */ VMCALL, + /* 2AA */ VMCLEAR, + /* 2AB */ VMINPD, + /* 2AC */ VMINPS, + /* 2AD */ VMINSD, + /* 2AE */ VMINSS, + /* 2AF */ VMLAUNCH, + /* 2B0 */ VMLOAD, + /* 2B1 */ VMMCALL, + /* 2B2 */ VMOVAPD, + /* 2B3 */ VMOVAPS, + /* 2B4 */ VMOVD, + /* 2B5 */ VMOVDDUP, + /* 2B6 */ VMOVDQA, + /* 2B7 */ VMOVDQU, + /* 2B8 */ VMOVHLPS, + /* 2B9 */ VMOVHPD, + /* 2BA */ VMOVHPS, + /* 2BB */ VMOVLHPS, + /* 2BC */ VMOVLPD, + /* 2BD */ VMOVLPS, + /* 2BE */ VMOVMSKPD, + /* 2BF */ VMOVMSKPS, + /* 2C0 */ VMOVNTDQ, + /* 2C1 */ VMOVNTDQA, + /* 2C2 */ VMOVNTPD, + /* 2C3 */ VMOVNTPS, + /* 2C4 */ VMOVQ, + /* 2C5 */ VMOVSD, + /* 2C6 */ VMOVSHDUP, + /* 2C7 */ VMOVSLDUP, + /* 2C8 */ VMOVSS, + /* 2C9 */ VMOVUPD, + /* 2CA */ VMOVUPS, + /* 2CB */ VMPSADBW, + /* 2CC */ VMPTRLD, + /* 2CD */ VMPTRST, + /* 2CE */ VMREAD, + /* 2CF */ VMRESUME, + /* 2D0 */ VMRUN, + /* 2D1 */ VMSAVE, + /* 2D2 */ VMULPD, + /* 2D3 */ VMULPS, + /* 2D4 */ VMULSD, + /* 2D5 */ VMULSS, + /* 2D6 */ VMWRITE, + /* 2D7 */ VMXOFF, + /* 2D8 */ VMXON, + /* 2D9 */ VORPD, + /* 2DA */ VORPS, + /* 2DB */ VPABSB, + /* 2DC */ VPABSD, + /* 2DD */ VPABSW, + /* 2DE */ VPACKSSDW, + /* 2DF */ VPACKSSWB, + /* 2E0 */ VPACKUSDW, + /* 2E1 */ VPACKUSWB, + /* 2E2 */ VPADDB, + /* 2E3 */ VPADDD, + /* 2E4 */ VPADDQ, + /* 2E5 */ VPADDSB, + /* 2E6 */ VPADDSW, + /* 2E7 */ VPADDUSB, + /* 2E8 */ VPADDUSW, + /* 2E9 */ VPADDW, + /* 2EA */ VPALIGNR, + /* 2EB */ VPAND, + /* 2EC */ VPANDN, + /* 2ED */ VPAVGB, + /* 2EE */ VPAVGW, + /* 2EF */ VPBLENDVB, + /* 2F0 */ VPBLENDW, + /* 2F1 */ VPCLMULQDQ, + /* 2F2 */ VPCMPEQB, + /* 2F3 */ VPCMPEQD, + /* 2F4 */ VPCMPEQQ, + /* 2F5 */ VPCMPEQW, + /* 2F6 */ VPCMPESTRI, + /* 2F7 */ VPCMPESTRM, + /* 2F8 */ VPCMPGTB, + /* 2F9 */ VPCMPGTD, + /* 2FA */ VPCMPGTQ, + /* 2FB */ VPCMPGTW, + /* 2FC */ VPCMPISTRI, + /* 2FD */ VPCMPISTRM, + /* 2FE */ VPERM2F128, + /* 2FF */ VPERMILPD, + /* 300 */ VPERMILPS, + /* 301 */ VPEXTRB, + /* 302 */ VPEXTRD, + /* 303 */ VPEXTRQ, + /* 304 */ VPEXTRW, + /* 305 */ VPHADDD, + /* 306 */ VPHADDSW, + /* 307 */ VPHADDW, + /* 308 */ VPHMINPOSUW, + /* 309 */ VPHSUBD, + /* 30A */ VPHSUBSW, + /* 30B */ VPHSUBW, + /* 30C */ VPINSRB, + /* 30D */ VPINSRD, + /* 30E */ VPINSRQ, + /* 30F */ VPINSRW, + /* 310 */ VPMADDUBSW, + /* 311 */ VPMADDWD, + /* 312 */ VPMAXSB, + /* 313 */ VPMAXSD, + /* 314 */ VPMAXSW, + /* 315 */ VPMAXUB, + /* 316 */ VPMAXUD, + /* 317 */ VPMAXUW, + /* 318 */ VPMINSB, + /* 319 */ VPMINSD, + /* 31A */ VPMINSW, + /* 31B */ VPMINUB, + /* 31C */ VPMINUD, + /* 31D */ VPMINUW, + /* 31E */ VPMOVMSKB, + /* 31F */ VPMOVSXBD, + /* 320 */ VPMOVSXBQ, + /* 321 */ VPMOVSXBW, + /* 322 */ VPMOVSXWD, + /* 323 */ VPMOVSXWQ, + /* 324 */ VPMOVZXBD, + /* 325 */ VPMOVZXBQ, + /* 326 */ VPMOVZXBW, + /* 327 */ VPMOVZXDQ, + /* 328 */ VPMOVZXWD, + /* 329 */ VPMOVZXWQ, + /* 32A */ VPMULDQ, + /* 32B */ VPMULHRSW, + /* 32C */ VPMULHUW, + /* 32D */ VPMULHW, + /* 32E */ VPMULLD, + /* 32F */ VPMULLW, + /* 330 */ VPOR, + /* 331 */ VPSADBW, + /* 332 */ VPSHUFB, + /* 333 */ VPSHUFD, + /* 334 */ VPSHUFHW, + /* 335 */ VPSHUFLW, + /* 336 */ VPSIGNB, + /* 337 */ VPSIGND, + /* 338 */ VPSIGNW, + /* 339 */ VPSLLD, + /* 33A */ VPSLLDQ, + /* 33B */ VPSLLQ, + /* 33C */ VPSLLW, + /* 33D */ VPSRAD, + /* 33E */ VPSRAW, + /* 33F */ VPSRLD, + /* 340 */ VPSRLDQ, + /* 341 */ VPSRLQ, + /* 342 */ VPSRLW, + /* 343 */ VPSUBB, + /* 344 */ VPSUBD, + /* 345 */ VPSUBQ, + /* 346 */ VPSUBSB, + /* 347 */ VPSUBSW, + /* 348 */ VPSUBUSB, + /* 349 */ VPSUBUSW, + /* 34A */ VPSUBW, + /* 34B */ VPTEST, + /* 34C */ VPUNPCKHBW, + /* 34D */ VPUNPCKHDQ, + /* 34E */ VPUNPCKHQDQ, + /* 34F */ VPUNPCKHWD, + /* 350 */ VPUNPCKLBW, + /* 351 */ VPUNPCKLDQ, + /* 352 */ VPUNPCKLQDQ, + /* 353 */ VPUNPCKLWD, + /* 354 */ VPXOR, + /* 355 */ VRCPPS, + /* 356 */ VRCPSS, + /* 357 */ VROUNDPD, + /* 358 */ VROUNDPS, + /* 359 */ VROUNDSD, + /* 35A */ VROUNDSS, + /* 35B */ VRSQRTPS, + /* 35C */ VRSQRTSS, + /* 35D */ VSHUFPD, + /* 35E */ VSHUFPS, + /* 35F */ VSQRTPD, + /* 360 */ VSQRTPS, + /* 361 */ VSQRTSD, + /* 362 */ VSQRTSS, + /* 363 */ VSTMXCSR, + /* 364 */ VSUBPD, + /* 365 */ VSUBPS, + /* 366 */ VSUBSD, + /* 367 */ VSUBSS, + /* 368 */ VTESTPD, + /* 369 */ VTESTPS, + /* 36A */ VUCOMISD, + /* 36B */ VUCOMISS, + /* 36C */ VUNPCKHPD, + /* 36D */ VUNPCKHPS, + /* 36E */ VUNPCKLPD, + /* 36F */ VUNPCKLPS, + /* 370 */ VXORPD, + /* 371 */ VXORPS, + /* 372 */ VZEROALL, + /* 373 */ VZEROUPPER, + /* 374 */ WAIT, + /* 375 */ WBINVD, + /* 376 */ WRMSR, + /* 377 */ XADD, + /* 378 */ XCHG, + /* 379 */ XCRYPTCBC, + /* 37A */ XCRYPTCFB, + /* 37B */ XCRYPTCTR, + /* 37C */ XCRYPTECB, + /* 37D */ XCRYPTOFB, + /* 37E */ XGETBV, + /* 37F */ XLATB, + /* 380 */ XOR, + /* 381 */ XORPD, + /* 382 */ XORPS, + /* 383 */ XRSTOR, + /* 384 */ XSAVE, + /* 385 */ XSETBV, + /* 386 */ XSHA1, + /* 387 */ XSHA256, + /* 388 */ XSTORE, +}; + +/** + * @brief Defines an alias representing an opcode tree node. An opcode tree node is a 16 bit + * unsigned integer value with its first 4 bits reserved for the node type. + */ +typedef uint16_t VXOpcodeTreeNode; + +/** + * @brief Values that represent the type of an opcode tree node. + */ +enum class VXOpcodeTreeNodeType : uint8_t +{ + /** + * @brief Reference to a concrete instruction definition. + */ + INSTRUCTION_DEFINITION = 0, + /** + * @brief Reference to an opcode table. + */ + TABLE = 1, + /** + * @brief Reference to a modrm_mod switch table. + */ + MODRM_MOD = 2, + /** + * @brief Reference to a modrm_reg switch table. + */ + MODRM_REG = 3, + /** + * @brief Reference to a modrm_rm switch table. + */ + MODRM_RM = 4, + /** + * @brief Reference to a mandatory-prefix switch table. + */ + MANDATORY = 5, + /** + * @brief Reference to a x87 opcode table. + */ + X87 = 6, + /** + * @brief Reference to an address-size switch table. + */ + ADDRESS_SIZE = 7, + /** + * @brief Reference to an operand-size switch table. + */ + OPERAND_SIZE = 8, + /** + * @brief Reference to a cpu-mode switch table. + */ + MODE = 9, + /** + * @brief Reference to a vendor switch table. + */ + VENDOR = 10, + /** + * @brief Reference to a 3dnow! opcode table. + */ + AMD3DNOW = 11, + /** + * @brief Reference to a vex-prefix switch table. + */ + VEX = 12, + /** + * @brief Reference to a vex_w switch table. + */ + VEXW = 13, + /** + * @brief Reference to a vex_l switch table. + */ + VEXL = 14 +}; + +/** + * @brief Values that represent the type of an operand in the instruction definition. + */ +enum class VXDefinedOperandType : uint8_t +{ + /* + * @brief No operand. + */ + NONE, + /* + * @brief Direct address. The instruction has no ModR/M byte; the address of the operand is + * encoded in the instruction; no base register, index register, or scaling factor + * can be applied. + */ + A, + /* + * @brief The reg field of the ModR/M byte selects a control register. + */ + C, + /* + * @brief The reg field of the ModR/M byte selects a debug register. + */ + D, + /* + * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either + * a general-purpose register or a memory address. If it is a memory address, the + * address is computed from a segment register and any of the following values: + * a base register, an index register, a scaling factor, or a displacement. + */ + E, + /* + * @brief rFLAGS register. + */ + F, + /* + * @brief The reg field of the ModR/M byte selects a general register. + */ + G, + /* + * @brief The r/m field of the ModR/M byte always selects a general register, regardless of + * the mod field. + */ + H, + /* + * @brief Immediate data. The operand value is encoded in subsequent bytes of the + * instruction. + */ + I, + /* + * @brief Signed immediate data. The operand value is encoded in subsequent bytes of the + * instruction. + */ + sI, + /* + * @brief Constant immediate data value of 1. + */ + I1, + /* + * @brief The instruction contains a relative offset to be added to the instruction pointer + * register. + */ + J, + /* + * @brief Source operand is encoded in immediate byte (VEX only). + */ + L, + /* + * @brief The ModR/M byte may refer only to memory: mod != 11bin. + */ + M, + /* + * @brief Combination of M and R. + */ + MR, + /* + * @brief Combination of M and U. + */ + MU, + /* + * @brief The R/M field of the ModR/M byte selects a packed quadword MMX technology register. + */ + N, + /* + * @brief The instruction has no ModR/M byte; the offset of the operand is coded as a word, + * double word or quad word (depending on address size attribute) in the instruction. + * No base register, index register, or scaling factor can be applied. + */ + O, + /* + * @brief The reg field of the ModR/M byte selects a packed quadword MMX technology register. + */ + P, + /* + * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either + * an MMX technology register or a memory address. If it is a memory address, the + * address is computed from a segment register and any of the following values: + * a base register, an index register, a scaling factor, and a displacement. + */ + Q, + /* + * @brief The mod field of the ModR/M byte may refer only to a general register. + */ + R, + /* + * @brief The reg field of the ModR/M byte selects a segment register. + */ + S, + /* + * @brief The R/M field of the ModR/M byte selects a 128-bit XMM register. + */ + U, + /* + * @brief The reg field of the ModR/M byte selects a 128-bit XMM register. + */ + V, + /* + * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either + * a 128-bit XMM register or a memory address. If it is a memory address, the address + * is computed from a segment register and any of the following values: + * a base register, an index register, a scaling factor, and a displacement. + */ + W, + /** + * @brief Register 0. + */ + R0, + /** + * @brief Register 1. + */ + R1, + /** + * @brief Register 2. + */ + R2, + /** + * @brief Register 3. + */ + R3, + /** + * @brief Register 4. + */ + R4, + /** + * @brief Register 5. + */ + R5, + /** + * @brief Register 6. + */ + R6, + /** + * @brief Register 7. + */ + R7, + /** + * @brief AL register. + */ + AL, + /** + * @brief CL register. + */ + CL, + /** + * @brief DL register. + */ + DL, + /** + * @brief AX register. + */ + AX, + /** + * @brief CX register. + */ + CX, + /** + * @brief DX register. + */ + DX, + /** + * @brief EAX register. + */ + EAX, + /** + * @brief ECX register. + */ + ECX, + /** + * @brief EDX register. + */ + EDX, + /** + * @brief RAX register. + */ + RAX, + /** + * @brief RCX register. + */ + RCX, + /** + * @brief RDX register. + */ + RDX, + /** + * @brief ES segment register. + */ + ES, + /** + * @brief CS segment register. + */ + CS, + /** + * @brief SS segment register. + */ + SS, + /** + * @brief DS segment register. + */ + DS, + /** + * @brief FS segment register. + */ + FS, + /** + * @brief GS segment register. + */ + GS, + /** + * @brief Floating point register 0. + */ + ST0, + /** + * @brief Floating point register 1. + */ + ST1, + /** + * @brief Floating point register 2. + */ + ST2, + /** + * @brief Floating point register 3. + */ + ST3, + /** + * @brief Floating point register 4. + */ + ST4, + /** + * @brief Floating point register 5. + */ + ST5, + /** + * @brief Floating point register 6. + */ + ST6, + /** + * @brief Floating point register 7. + */ + ST7 +}; + +/** + * @brief Values that represent the size of an operand in the instruction definition. + * Do not change the order or the values of this enum! + */ +enum class VXDefinedOperandSize : uint8_t +{ + /** + * @brief No operand. + */ + NA = 0, + /** + * @brief Word, dword or qword. + */ + Z, + /** + * @brief Word, dword or qword. + */ + V, + /** + * @brief Dword or qword. + */ + Y, + /** + * @brief Oword or yword. + */ + X, + /** + * @brief Dword or qword, depending on the disassembler mode. + */ + RDQ, + /* + * @brief Byte, regardless of operand-size attribute. + */ + B, + /* + * @brief Word, regardless of operand-size attribute. + */ + W, + /* + * @brief Doubleword, regardless of operand-size attribute. + */ + D, + /* + * @brief Quadword, regardless of operand-size attribute. + */ + Q, + /* + * @brief 10-byte far pointer. + */ + T, + /** + * @brief TODO: + */ + O, + /* + * @brief Double-quadword, regardless of operand-size attribute. + */ + DQ, + /* + * @brief Quad-quadword, regardless of operand-size attribute. + */ + QQ, + /** + * @brief B sized register or D sized memory operand. + */ + BD = (static_cast(B) << 4) | static_cast(D), + /** + * @brief B sized register or V sized memory operand. + */ + BV = (static_cast(B) << 4) | static_cast(V), + /** + * @brief W sized register or D sized memory operand. + */ + WD = (static_cast(W) << 4) | static_cast(D), + /** + * @brief W sized register or V sized memory operand. + */ + WV = (static_cast(W) << 4) | static_cast(V), + /** + * @brief W sized register or Y sized memory operand. + */ + WY = (static_cast(W) << 4) | static_cast(Y), + /** + * @brief D sized register or Y sized memory operand. + */ + DY = (static_cast(D) << 4) | static_cast(Y), + /** + * @brief W sized register or O sized memory operand. + */ + WO = (static_cast(W) << 4) | static_cast(O), + /** + * @brief D sized register or O sized memory operand. + */ + DO = (static_cast(D) << 4) | static_cast(O), + /** + * @brief Q sized register or O sized memory operand. + */ + QO = (static_cast(Q) << 4) | static_cast(O), +}; + +/** + * @brief Values that represent optional flags in the instruction definition. + * Do not change the order or the values of this enum! + */ +enum VXInstructionDefinitionFlags : uint16_t +{ + /** + * @brief The instruction accepts the rex.b prefix value. + */ + IDF_ACCEPTS_REXB = 0x0001, + /** + * @brief The instruction accepts the rex.x prefix value. + */ + IDF_ACCEPTS_REXX = 0x0002, + /** + * @brief The instruction accepts the rex.r prefix value. + */ + IDF_ACCEPTS_REXR = 0x0004, + /** + * @brief The instruction accepts the rex.w prefix value. + */ + IDF_ACCEPTS_REXW = 0x0008, + /** + * @brief The instruction accepts the address size override prefix (0x67). + */ + IDF_ACCEPTS_ADDRESS_SIZE_PREFIX = 0x0010, + /** + * @brief The instruction accepts the operand size override prefix (0x66). + */ + IDF_ACCEPTS_OPERAND_SIZE_PREFIX = 0x0020, + /** + * @brief The instruction accepts the segment override prefix. + */ + IDF_ACCEPTS_SEGMENT_PREFIX = 0x0040, + /** + * @brief The instruction accepts the REP prefix. + */ + IDF_ACCEPTS_REP_PREFIX = 0x0080, + /** + * @brief The instruction accepts the vex.l prefix value. + */ + IDF_ACCEPTS_VEXL = 0x0100, + /** + * @brief The instruction is invalid in 64 bit mode. + */ + IDF_INVALID_64 = 0x0200, + /** + * @brief The instructions operand size defaults to quadword in 64 bit mode. + */ + IDF_DEFAULT_64 = 0x0400, + /** + * @brief The first operand of the instruction is accessed in write mode. + */ + IDF_OPERAND1_WRITE = 0x0800, + /** + * @brief The first operand of the instruction is accessed in read-write mode. + */ + IDF_OPERAND1_READWRITE = 0x1000, + /** + * @brief The second operand of the instruction is accessed in write mode. + */ + IDF_OPERAND2_WRITE = 0x2000, + /** + * @brief The second operand of the instruction is accessed in read-write mode. + */ + IDF_OPERAND2_READWRITE = 0x4000 +}; + +#pragma pack (push, 1) +/** + * @brief An operand definition. + */ +struct VXOperandDefinition +{ + /** + * @brief The defined operand type. + */ + VXDefinedOperandType type; + /** + * @brief The defined operand size. + */ + VXDefinedOperandSize size; +}; +/** + * @brief An instruction definition. + */ +struct VXInstructionDefinition +{ + /** + * @brief The instruction mnemonic. + */ + VXInstructionMnemonic mnemonic; + /** + * @brief The operand definitions for all four possible operands. + */ + VXOperandDefinition operand[4]; + /** + * @brief Additional flags for the instruction definition. + */ + uint16_t flags; +}; +#pragma pack (pop) + +namespace Internal +{ + +/** + * @brief Contains all opcode tables. + * Indexed by the numeric value of the opcode. + */ +extern const VXOpcodeTreeNode optreeTable[][256]; +/** + * @brief Contains all modrm_mod switch tables. + * Index values: + * 0 = [modrm_mod == !11] + * 1 = [modrm_mod == 11] + */ +extern const VXOpcodeTreeNode optreeModrmMod[][2]; +/** + * @brief Contains all modrm_reg switch tables. + * Indexed by the numeric value of the modrm_reg field. + */ +extern const VXOpcodeTreeNode optreeModrmReg[][8]; +/** + * @brief Contains all modrm_rm switch tables. + * Indexed by the numeric value of the modrm_rm field. + */ +extern const VXOpcodeTreeNode optreeModrmRm[][8]; +/** + * @brief Contains all mandatory-prefix switch tables. + * Index values: + * 0 = none + * 1 = F2 + * 2 = F3 + * 3 = 66 + */ +extern const VXOpcodeTreeNode optreeMandatory[][4]; +/** + * @brief Contains all x87 opcode tables. + * Indexed by the numeric value of the 6 lowest bits of the modrm byte (modrm_mod should + * always be 11). + */ +extern const VXOpcodeTreeNode optreeX87[][64]; +/** + * @brief Contains all address-size switch tables. + * Index values: + * 0 = 16 + * 1 = 32 + * 2 = 64 + */ +extern const VXOpcodeTreeNode optreeAddressSize[][3]; +/** + * @brief Contains all operand-size switch tables. + * Index values: + * 0 = 16 + * 1 = 32 + * 2 = 64 + */ +extern const VXOpcodeTreeNode optreeOperandSize[][3]; +/** + * @brief Contains all cpu-mode switch tables. + * Index values: + * 0 = [!= 64] + * 1 = 64 + */ +extern const VXOpcodeTreeNode optreeMode[][2]; +/** + * @brief Contains all vendor switch tables. + * Index values: + * 0 = AMD + * 1 = Intel + */ +extern const VXOpcodeTreeNode optreeVendor[][2]; +/** + * @brief Contains all 3dnow! switch tables. + * Indexed by the numeric value of the 3dnow! opcode. + */ +extern const VXOpcodeTreeNode optree3dnow[][256]; +/** + * @brief Contains all vex switch tables. + * Index values: + * 0 = none + * 1 = 0F + * 2 = 0F38 + * 3 = 0F3A + * 4 = 66 + * 5 = 66_0F + * 6 = 66_0F38 + * 7 = 66_0F3A + * 8 = F3 + * 9 = F3_0F + * A = F3_0F38 + * B = F3_0F3A + * C = F2 + * D = F2_0F + * E = F2_0F38 + * F = F2_0F3A + */ +extern const VXOpcodeTreeNode optreeVex[][16]; +/** + * @brief Contains all vex_w switch tables. + * Indexed by the numeric value of the vex_w field. + */ +extern const VXOpcodeTreeNode optreeVexW[][2]; +/** + * @brief Contains all vex_l switch tables. + * Indexed by the numeric value of the vex_l field. + */ +extern const VXOpcodeTreeNode optreeVexL[][2]; +/** + * @brief Contains all instruction definitions. + */ +extern const VXInstructionDefinition instrDefinitions[]; +/** + * @brief Contains all instruction mnemonic strings. + */ +extern const char* instrMnemonicStrings[]; + +/** + * @brief Returns the type of the specified opcode tree node. + * @param node The node. + * @return The type of the specified opcode tree node. + */ +inline VXOpcodeTreeNodeType VDEGetOpcodeNodeType(VXOpcodeTreeNode node) +{ + return static_cast((node >> 12) & 0x0F); +} + +/** + * @brief Returns the value of the specified opcode tree node. + * @param node The node. + * @return The value of the specified opcode tree node. + */ +inline uint16_t VDEGetOpcodeNodeValue(VXOpcodeTreeNode node) +{ + return (node & 0x0FFF); +} + +/** + * @brief Returns the root node of the opcode tree. + * @return The root node of the opcode tree. + */ +inline VXOpcodeTreeNode VDEGetOpcodeTreeRoot() +{ + return 0x1000; +} + +/** + * @brief Returns a child node of @c parent specified by @c index. + * @param parent The parent node. + * @param index The index of the child node to retrieve. + * @return The specified child node. + */ +inline VXOpcodeTreeNode VDEGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_t index) +{ + using namespace Internal; + VXOpcodeTreeNodeType nodeType = VDEGetOpcodeNodeType(parent); + uint16_t tableIndex = VDEGetOpcodeNodeValue(parent); + switch (nodeType) + { + case VXOpcodeTreeNodeType::TABLE: + assert(index < 256); + return optreeTable[tableIndex][index]; + case VXOpcodeTreeNodeType::MODRM_MOD: + assert(index < 2); + return optreeModrmMod[tableIndex][index]; + case VXOpcodeTreeNodeType::MODRM_REG: + assert(index < 8); + return optreeModrmReg[tableIndex][index]; + case VXOpcodeTreeNodeType::MODRM_RM: + assert(index < 8); + return optreeModrmRm[tableIndex][index]; + case VXOpcodeTreeNodeType::MANDATORY: + assert(index < 4); + return optreeMandatory[tableIndex][index]; + case VXOpcodeTreeNodeType::X87: + assert(index < 64); + return optreeX87[tableIndex][index]; + case VXOpcodeTreeNodeType::ADDRESS_SIZE: + assert(index < 3); + return optreeAddressSize[tableIndex][index]; + case VXOpcodeTreeNodeType::OPERAND_SIZE: + assert(index < 3); + return optreeOperandSize[tableIndex][index]; + case VXOpcodeTreeNodeType::MODE: + assert(index < 2); + return optreeMode[tableIndex][index]; + case VXOpcodeTreeNodeType::VENDOR: + assert(index < 3); + return optreeVendor[tableIndex][index]; + case VXOpcodeTreeNodeType::AMD3DNOW: + assert(index < 256); + return optree3dnow[tableIndex][index]; + case VXOpcodeTreeNodeType::VEX: + assert(index < 16); + return optreeVex[tableIndex][index]; + case VXOpcodeTreeNodeType::VEXW: + assert(index < 2); + return optreeVexW[tableIndex][index]; + case VXOpcodeTreeNodeType::VEXL: + assert(index < 2); + return optreeVexL[tableIndex][index]; + default: + assert(0); + } + return 0xFFFF; +} + +/** + * @brief Returns the instruction definition that is linked to the given @c node. + * @param node The instruction definition node. + * @return Pointer to the instruction definition. + */ +inline const VXInstructionDefinition* VDEGetInstructionDefinition(VXOpcodeTreeNode node) +{ + assert(VDEGetOpcodeNodeType(node) == VXOpcodeTreeNodeType::INSTRUCTION_DEFINITION); + return &instrDefinitions[node & 0x0FFF]; +} + +/** + * @brief Returns the specified instruction mnemonic string. + * @param mnemonic The mnemonic. + * @return The instruction mnemonic string. + */ +inline const char* VDEGetInstructionMnemonicString(VXInstructionMnemonic mnemonic) +{ + return instrMnemonicStrings[static_cast(mnemonic)]; +} + +/** + * @brief Returns the numeric value for a simple operand size definition. + * @param operandSize The defined operand size. + * @return The the numeric value for the simple operand size definition. + */ +inline uint16_t VDEGetSimpleOperandSize(VXDefinedOperandSize operandSize) +{ + static uint16_t operandSizes[8] = + { + 8, 16, 32, 64, 80, 12, 128, 256 + }; + uint16_t index = + static_cast(operandSize) - static_cast(VXDefinedOperandSize::B); + assert(index < 8); + return operandSizes[index]; +} + +/** + * @brief Returns the memory-size part of a complex operand size definition. + * @param operandSize The defined operand size. + * @return The memory-size part of the operand size definition. + */ +inline VXDefinedOperandSize VDEGetComplexOperandMemSize(VXDefinedOperandSize operandSize) +{ + return static_cast(static_cast(operandSize) & 0x0F); +} + +/** + * @brief Returns the register-size part of a complex operand size definition. + * @param operandSize The defined operand size. + * @return The register-size part of the operand size definition. + */ +inline VXDefinedOperandSize VDEGetComplexOperandRegSize(VXDefinedOperandSize operandSize) +{ + return static_cast((static_cast(operandSize) >> 4) & 0x0F); +} + +} + +} diff --git a/CMakeLists.txt b/CMakeLists.txt index f47e14d..5766517 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,9 @@ cmake_minimum_required(VERSION 2.8.12) project(VerteronDisassemblerEngine) +option(BUILD_SHARED "Build shared libraries rather than static ones" FALSE) option(BUILD_EXAMPLES "Build examples" TRUE) -option(BUILD_C_BINDINGS "Build C bindings" TRUE) # TODO: default to FALSE when ready +option(BUILD_CPP_BINDINGS "Build C++ bindings" TRUE) if (NOT CONFIGURED_ONCE) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR @@ -27,57 +28,62 @@ set(vde_headers "VerteronDisassemblerEngine/VXDisassemblerUtils.h" "VerteronDisassemblerEngine/VXInstructionDecoder.h" "VerteronDisassemblerEngine/VXInstructionFormatter.h" - "VerteronDisassemblerEngine/VXOpcodeTable.h") + "VerteronDisassemblerEngine/VXOpcodeTable.h" + "VerteronDisassemblerEngine/VXOpcodeTableInternal.h" + "VerteronDisassemblerEngine/VXInternalHelpers.h" + "VerteronDisassemblerEngine/VXInternalConfig.h") set(vde_sources - "VerteronDisassemblerEngine/VXDisassemblerUtils.cpp" - "VerteronDisassemblerEngine/VXInstructionFormatter.cpp" - "VerteronDisassemblerEngine/VXOpcodeTable.cpp" - "VerteronDisassemblerEngine/VXInstructionDecoder.cpp") + "VerteronDisassemblerEngine/VXDisassemblerUtils.c" + "VerteronDisassemblerEngine/VXInstructionFormatter.c" + "VerteronDisassemblerEngine/VXOpcodeTable.c" + "VerteronDisassemblerEngine/VXInstructionDecoder.c") -add_library("VerteronDisassemblerEngine" ${vde_headers} ${vde_sources}) +#if (BUILD_SHARED) +# add_definitions("-DVX_BUILD_SHARED") +# add_library("VerteronDisassemblerEngine" SHARED ${vde_headers} ${vde_sources}) +#else () + add_library("VerteronDisassemblerEngine" STATIC ${vde_headers} ${vde_sources}) +#endif () -# C bindings -if (BUILD_C_BINDINGS) - set(vdec_headers - "Bindings/C/VXDisassemblerC.h" - "Bindings/C/VXDisassemblerTypesC.h" - "Bindings/C/VXDisassemblerUtilsC.h" - "Bindings/C/VXInstructionDecoderC.h" - "Bindings/C/VXInstructionFormatterC.h" - "Bindings/C/VXOpcodeTableC.h" - "Bindings/C/VXOpcodeTableInternalC.h" - "Bindings/C/VXInternalHelpersC.h" - "Bindings/C/VXInternalConfig.h") - set(vdec_sources - "Bindings/C/VXDisassemblerUtilsC.c" - "Bindings/C/VXInstructionFormatterC.c" - "Bindings/C/VXOpcodeTableC.c" - "Bindings/C/VXInstructionDecoderC.c") - add_library("VerteronDisassemblerEngineC" ${vdec_headers} ${vdec_sources}) - target_link_libraries("VerteronDisassemblerEngineC" "VerteronDisassemblerEngine") +# C++ bindings +if (BUILD_CPP_BINDINGS) + set(vdecpp_headers + "Bindings/Cpp/VXDisassembler.hpp" + "Bindings/Cpp/VXDisassemblerTypes.hpp" + "Bindings/Cpp/VXDisassemblerUtils.hpp" + "Bindings/Cpp/VXInstructionDecoder.hpp" + "Bindings/Cpp/VXInstructionFormatter.hpp" + "Bindings/Cpp/VXOpcodeTable.hpp") + set(vdecpp_sources + "Bindings/Cpp/VXDisassemblerUtils.cpp" + "Bindings/Cpp/VXInstructionFormatter.cpp" + "Bindings/Cpp/VXOpcodeTable.cpp" + "Bindings/Cpp/VXInstructionDecoder.cpp") + add_library("VerteronDisassemblerEngineCpp" ${vdecpp_headers} ${vdecpp_sources}) + target_link_libraries("VerteronDisassemblerEngineCpp" "VerteronDisassemblerEngine") endif () # Examples if (BUILD_EXAMPLES) include_directories("VerteronDisassemblerEngine") - add_executable("CustomDataSource" "Examples/CustomDataSource/Main.cpp") + add_executable("CustomDataSource" "Examples/CustomDataSource/Main.c") target_link_libraries("CustomDataSource" "VerteronDisassemblerEngine") - add_executable("PerformanceTest" "Examples/PerformanceTest/Main.cpp") + add_executable("PerformanceTest" "Examples/PerformanceTest/Main.c") target_link_libraries("PerformanceTest" "VerteronDisassemblerEngine") - add_executable("SimpleDemo" "Examples/SimpleDemo/Main.cpp") + add_executable("SimpleDemo" "Examples/SimpleDemo/Main.c") target_link_libraries("SimpleDemo" "VerteronDisassemblerEngine") - if (BUILD_C_BINDINGS) - add_executable("CBindingsTest" "Examples/CBindings/test.c") - include_directories("Bindings/C") - target_link_libraries("CBindingsTest" "VerteronDisassemblerEngineC") + if (BUILD_CPP_BINDINGS) + add_executable("CppBindingsTest" "Examples/CppBindings/Main.cpp") + include_directories("Bindings/Cpp") + target_link_libraries("CppBindingsTest" "VerteronDisassemblerEngineCpp") endif () if (WIN32) - add_executable("SymbolResolver" "Examples/SymbolResolver/Main.cpp") + add_executable("SymbolResolver" "Examples/SymbolResolver/Main.c") target_link_libraries("SymbolResolver" "VerteronDisassemblerEngine") else () message(STATUS "Example 'SymbolResolver' not compatible with platform, ignoring.") diff --git a/Examples/SimpleDemo/Main.cpp b/Examples/CppBindings/Main.cpp similarity index 99% rename from Examples/SimpleDemo/Main.cpp rename to Examples/CppBindings/Main.cpp index cdc582d..3f67a61 100644 --- a/Examples/SimpleDemo/Main.cpp +++ b/Examples/CppBindings/Main.cpp @@ -32,7 +32,8 @@ #include #include #include -#include + +#include using namespace Verteron; diff --git a/Examples/CustomDataSource/CustomDataSource.vcxproj b/Examples/CustomDataSource/CustomDataSource.vcxproj deleted file mode 100644 index 6e9f686..0000000 --- a/Examples/CustomDataSource/CustomDataSource.vcxproj +++ /dev/null @@ -1,157 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {EB0F5A04-EE14-4779-9B29-322876CD45C8} - Win32Proj - CustomDataSource - 2 - Custom DataSource - - - - Application - true - v120 - Unicode - - - Application - true - v120 - Unicode - - - Application - false - v120 - true - Unicode - - - Application - false - v120 - true - Unicode - - - - - - - - - - - - - - - - - - - true - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - true - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - false - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - false - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - true - true - - - - - - - - {f5c6f0a7-f75d-42bd-a8ab-a2d1d5f67099} - - - - - - \ No newline at end of file diff --git a/Examples/CustomDataSource/CustomDataSource.vcxproj.filters b/Examples/CustomDataSource/CustomDataSource.vcxproj.filters deleted file mode 100644 index d3e9077..0000000 --- a/Examples/CustomDataSource/CustomDataSource.vcxproj.filters +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Examples/CustomDataSource/Main.cpp b/Examples/CustomDataSource/Main.c similarity index 100% rename from Examples/CustomDataSource/Main.cpp rename to Examples/CustomDataSource/Main.c diff --git a/Examples/Examples.sln b/Examples/Examples.sln deleted file mode 100644 index a700b31..0000000 --- a/Examples/Examples.sln +++ /dev/null @@ -1,90 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30723.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "1 - Simple Demo", "SimpleDemo\SimpleDemo.vcxproj", "{BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "2 - Custom DataSource", "CustomDataSource\CustomDataSource.vcxproj", "{EB0F5A04-EE14-4779-9B29-322876CD45C8}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "3 - Symbol Resolver", "SymbolResolver\SymbolResolver.vcxproj", "{B6CA4362-2714-451C-8063-12195ABD7CD7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VerteronDisassemblerEngine", "..\VerteronDisassemblerEngine\VerteronDisassemblerEngine.vcxproj", "{F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "4 - Performance Test", "PerformanceTest\PerformanceTest.vcxproj", "{4A0B7BE7-72C9-4A95-90CA-D56C50F10401}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Mixed Platforms = Release|Mixed Platforms - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Debug|Win32.ActiveCfg = Debug|Win32 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Debug|Win32.Build.0 = Debug|Win32 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Debug|x64.ActiveCfg = Debug|x64 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Debug|x64.Build.0 = Debug|x64 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Release|Mixed Platforms.Build.0 = Release|Win32 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Release|Win32.ActiveCfg = Release|Win32 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Release|Win32.Build.0 = Release|Win32 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Release|x64.ActiveCfg = Release|x64 - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D}.Release|x64.Build.0 = Release|x64 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Debug|Win32.ActiveCfg = Debug|Win32 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Debug|Win32.Build.0 = Debug|Win32 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Debug|x64.ActiveCfg = Debug|x64 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Debug|x64.Build.0 = Debug|x64 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Release|Mixed Platforms.Build.0 = Release|Win32 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Release|Win32.ActiveCfg = Release|Win32 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Release|Win32.Build.0 = Release|Win32 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Release|x64.ActiveCfg = Release|x64 - {EB0F5A04-EE14-4779-9B29-322876CD45C8}.Release|x64.Build.0 = Release|x64 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Debug|Win32.ActiveCfg = Debug|Win32 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Debug|Win32.Build.0 = Debug|Win32 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Debug|x64.ActiveCfg = Debug|x64 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Debug|x64.Build.0 = Debug|x64 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Release|Mixed Platforms.Build.0 = Release|Win32 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Release|Win32.ActiveCfg = Release|Win32 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Release|Win32.Build.0 = Release|Win32 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Release|x64.ActiveCfg = Release|x64 - {B6CA4362-2714-451C-8063-12195ABD7CD7}.Release|x64.Build.0 = Release|x64 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|Win32.ActiveCfg = Debug|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|Win32.Build.0 = Debug|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|x64.ActiveCfg = Debug|x64 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|x64.Build.0 = Debug|x64 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|Mixed Platforms.Build.0 = Release|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|Win32.ActiveCfg = Release|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|Win32.Build.0 = Release|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|x64.ActiveCfg = Release|x64 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|x64.Build.0 = Release|x64 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Debug|Win32.ActiveCfg = Debug|Win32 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Debug|Win32.Build.0 = Debug|Win32 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Debug|x64.ActiveCfg = Debug|x64 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Debug|x64.Build.0 = Debug|x64 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Release|Mixed Platforms.Build.0 = Release|Win32 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Release|Win32.ActiveCfg = Release|Win32 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Release|Win32.Build.0 = Release|Win32 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Release|x64.ActiveCfg = Release|x64 - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Examples/PerformanceTest/Main.cpp b/Examples/PerformanceTest/Main.c similarity index 100% rename from Examples/PerformanceTest/Main.cpp rename to Examples/PerformanceTest/Main.c diff --git a/Examples/PerformanceTest/PerformanceTest.vcxproj b/Examples/PerformanceTest/PerformanceTest.vcxproj deleted file mode 100644 index 87e34c4..0000000 --- a/Examples/PerformanceTest/PerformanceTest.vcxproj +++ /dev/null @@ -1,157 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {4A0B7BE7-72C9-4A95-90CA-D56C50F10401} - Win32Proj - PerformanceTest - 4 - Performance Test - - - - Application - true - v120 - Unicode - - - Application - true - v120 - Unicode - - - Application - false - v120 - true - Unicode - - - Application - false - v120 - true - Unicode - - - - - - - - - - - - - - - - - - - true - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - true - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - false - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - false - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - true - true - - - - - - - - {f5c6f0a7-f75d-42bd-a8ab-a2d1d5f67099} - - - - - - \ No newline at end of file diff --git a/Examples/PerformanceTest/PerformanceTest.vcxproj.filters b/Examples/PerformanceTest/PerformanceTest.vcxproj.filters deleted file mode 100644 index d3e9077..0000000 --- a/Examples/PerformanceTest/PerformanceTest.vcxproj.filters +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Examples/CBindings/test.c b/Examples/SimpleDemo/Main.c similarity index 99% rename from Examples/CBindings/test.c rename to Examples/SimpleDemo/Main.c index ae68857..a159526 100644 --- a/Examples/CBindings/test.c +++ b/Examples/SimpleDemo/Main.c @@ -30,7 +30,7 @@ **************************************************************************************************/ -#include +#include #include #include diff --git a/Examples/SimpleDemo/SimpleDemo.vcxproj b/Examples/SimpleDemo/SimpleDemo.vcxproj deleted file mode 100644 index 15332e3..0000000 --- a/Examples/SimpleDemo/SimpleDemo.vcxproj +++ /dev/null @@ -1,157 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {BC5CDE9B-9F84-453E-8131-B56F67FD0E4D} - Win32Proj - SimpleDemo - 1 - Simple Demo - - - - Application - true - v120 - Unicode - - - Application - true - v120 - Unicode - - - Application - false - v120 - true - Unicode - - - Application - false - v120 - true - Unicode - - - - - - - - - - - - - - - - - - - true - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - true - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - false - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - false - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - true - true - - - - - - - - {f5c6f0a7-f75d-42bd-a8ab-a2d1d5f67099} - - - - - - \ No newline at end of file diff --git a/Examples/SimpleDemo/SimpleDemo.vcxproj.filters b/Examples/SimpleDemo/SimpleDemo.vcxproj.filters deleted file mode 100644 index d3e9077..0000000 --- a/Examples/SimpleDemo/SimpleDemo.vcxproj.filters +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Examples/SymbolResolver/Main.cpp b/Examples/SymbolResolver/Main.c similarity index 95% rename from Examples/SymbolResolver/Main.cpp rename to Examples/SymbolResolver/Main.c index 8e7cdc3..f73c8dc 100644 --- a/Examples/SymbolResolver/Main.cpp +++ b/Examples/SymbolResolver/Main.c @@ -29,27 +29,27 @@ * SOFTWARE. **************************************************************************************************/ -#include -#include -#include + #include #include -using namespace Verteron; - int main(int argc, char* argv[]) { + // TODO: port to C + /* + // Find module base in memory void *moduleBase = GetModuleHandle("kernel32.dll"); - uintptr_t baseAddress = reinterpret_cast(moduleBase); + uintptr_t baseAddress = (uintptr_t)moduleBase; + // Parse PE headers - PIMAGE_DOS_HEADER dosHeader = static_cast(moduleBase); + PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)moduleBase; if (dosHeader->e_magic != IMAGE_DOS_SIGNATURE) { return 1; } - PIMAGE_NT_HEADERS ntHeaders = - reinterpret_cast(baseAddress + dosHeader->e_lfanew); + + PIMAGE_NT_HEADERS ntHeaders = (PIMAGE_NT_HEADERS)(baseAddress + dosHeader->e_lfanew); if (ntHeaders->Signature != IMAGE_NT_SIGNATURE) { return 1; @@ -187,5 +187,7 @@ int main(int argc, char* argv[]) sectionHeader++; } out.close(); + */ + return 0; } diff --git a/Examples/SymbolResolver/SymbolResolver.vcxproj b/Examples/SymbolResolver/SymbolResolver.vcxproj deleted file mode 100644 index adcc661..0000000 --- a/Examples/SymbolResolver/SymbolResolver.vcxproj +++ /dev/null @@ -1,157 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {B6CA4362-2714-451C-8063-12195ABD7CD7} - Win32Proj - SymbolResolver - 3 - Symbol Resolver - - - - Application - true - v120 - Unicode - - - Application - true - v120 - Unicode - - - Application - false - v120 - true - Unicode - - - Application - false - v120 - true - Unicode - - - - - - - - - - - - - - - - - - - true - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - true - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - false - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - false - ..\..\VerteronDisassemblerEngine\;$(IncludePath) - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - - - Console - true - true - true - - - - - - - - {f5c6f0a7-f75d-42bd-a8ab-a2d1d5f67099} - - - - - - \ No newline at end of file diff --git a/Examples/SymbolResolver/SymbolResolver.vcxproj.filters b/Examples/SymbolResolver/SymbolResolver.vcxproj.filters deleted file mode 100644 index d3e9077..0000000 --- a/Examples/SymbolResolver/SymbolResolver.vcxproj.filters +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/VerteronDisassemblerEngine.sln b/VerteronDisassemblerEngine.sln deleted file mode 100644 index c5db4b1..0000000 --- a/VerteronDisassemblerEngine.sln +++ /dev/null @@ -1,38 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30723.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VerteronDisassemblerEngine", "VerteronDisassemblerEngine\VerteronDisassemblerEngine.vcxproj", "{F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OptableGenerator", "OptableGenerator\OptableGenerator.vcxproj", "{EFA075B8-AFB9-4E06-99AD-BD58F50A9500}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|Win32.ActiveCfg = Debug|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|Win32.Build.0 = Debug|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|x64.ActiveCfg = Debug|x64 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Debug|x64.Build.0 = Debug|x64 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|Win32.ActiveCfg = Release|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|Win32.Build.0 = Release|Win32 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|x64.ActiveCfg = Release|x64 - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099}.Release|x64.Build.0 = Release|x64 - {EFA075B8-AFB9-4E06-99AD-BD58F50A9500}.Debug|Win32.ActiveCfg = Debug|Win32 - {EFA075B8-AFB9-4E06-99AD-BD58F50A9500}.Debug|Win32.Build.0 = Debug|Win32 - {EFA075B8-AFB9-4E06-99AD-BD58F50A9500}.Debug|x64.ActiveCfg = Debug|x64 - {EFA075B8-AFB9-4E06-99AD-BD58F50A9500}.Debug|x64.Build.0 = Debug|x64 - {EFA075B8-AFB9-4E06-99AD-BD58F50A9500}.Release|Win32.ActiveCfg = Release|Win32 - {EFA075B8-AFB9-4E06-99AD-BD58F50A9500}.Release|Win32.Build.0 = Release|Win32 - {EFA075B8-AFB9-4E06-99AD-BD58F50A9500}.Release|x64.ActiveCfg = Release|x64 - {EFA075B8-AFB9-4E06-99AD-BD58F50A9500}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/VerteronDisassemblerEngine/VXDisassembler.h b/VerteronDisassemblerEngine/VXDisassembler.h index 271d8d9..1baf7c3 100644 --- a/VerteronDisassemblerEngine/VXDisassembler.h +++ b/VerteronDisassemblerEngine/VXDisassembler.h @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : + Modifications : athre0z - Last change : 29. October 2014 + Last change : 04. February 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,10 +28,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ -#pragma once + **************************************************************************************************/ + +#ifndef _VDE_VXDISASSEMBLERC_H_ +#define _VDE_VXDISASSEMBLERC_H_ #include "VXDisassemblerTypes.h" #include "VXInstructionDecoder.h" #include "VXInstructionFormatter.h" #include "VXDisassemblerUtils.h" + +#endif /* _VDE_VXDISASSEMBLERC_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXDisassemblerTypes.h b/VerteronDisassemblerEngine/VXDisassemblerTypes.h index b4d97b9..ab16c5b 100644 --- a/VerteronDisassemblerEngine/VXDisassemblerTypes.h +++ b/VerteronDisassemblerEngine/VXDisassemblerTypes.h @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : + Modifications : athre0z - Last change : 22. October 2014 + Last change : 04. February 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,18 +29,23 @@ * SOFTWARE. **************************************************************************************************/ -#pragma once + +#ifndef _VDE_VXDISASSEMBLERTYPESC_H_ +#define _VDE_VXDISASSEMBLERTYPESC_H_ #include +#include #include "VXOpcodeTable.h" -namespace Verteron +#ifdef __cplusplus +extern "C" { +#endif /** * @brief Values that represent additional flags of a decoded instruction. */ -enum InstructionFlags : uint32_t +typedef enum _VXInstructionFlags /* : uint32_t */ { IF_NONE = 0x00000000, /** @@ -122,149 +127,157 @@ enum InstructionFlags : uint32_t /** * @brief An error occured while decoding the instruction operands. */ - IF_ERROR_OPERAND = 0x01000000 -}; + IF_ERROR_OPERAND = 0x01000000, + + IF_FORCE_DWORD = 0x7FFFFFFF +} VXInstructionFlags; /** * @brief Values that represent a cpu register. */ -enum class VXRegister : uint16_t +typedef enum _VXRegister /* : uint16_t */ { - NONE, + REG_NONE, /* 8 bit general purpose registers */ - AL, CL, DL, BL, - AH, CH, DH, BH, - SPL, BPL, SIL, DIL, - R8B, R9B, R10B, R11B, - R12B, R13B, R14B, R15B, + REG_AL, REG_CL, REG_DL, REG_BL, + REG_AH, REG_CH, REG_DH, REG_BH, + REG_SPL, REG_BPL, REG_SIL, REG_DIL, + REG_R8B, REG_R9B, REG_R10B, REG_R11B, + REG_R12B, REG_R13B, REG_R14B, REG_R15B, /* 16 bit general purpose registers */ - AX, CX, DX, BX, - SP, BP, SI, DI, - R8W, R9W, R10W, R11W, - R12W, R13W, R14W, R15W, + REG_AX, REG_CX, REG_DX, REG_BX, + REG_SP, REG_BP, REG_SI, REG_DI, + REG_R8W, REG_R9W, REG_R10W, REG_R11W, + REG_R12W, REG_R13W, REG_R14W, REG_R15W, /* 32 bit general purpose registers */ - EAX, ECX, EDX, EBX, - ESP, EBP, ESI, EDI, - R8D, R9D, R10D, R11D, - R12D, R13D, R14D, R15D, + REG_EAX, REG_ECX, REG_EDX, REG_EBX, + REG_ESP, REG_EBP, REG_ESI, REG_EDI, + REG_R8D, REG_R9D, REG_R10D, REG_R11D, + REG_R12D, REG_R13D, REG_R14D, REG_R15D, /* 64 bit general purpose registers */ - RAX, RCX, RDX, RBX, - RSP, RBP, RSI, RDI, - R8, R9, R10, R11, - R12, R13, R14, R15, + REG_RAX, REG_RCX, REG_RDX, REG_RBX, + REG_RSP, REG_RBP, REG_RSI, REG_RDI, + REG_R8, REG_R9, REG_R10, REG_R11, + REG_R12, REG_R13, REG_R14, REG_R15, /* segment registers */ - ES, CS, SS, - DS, FS, GS, + REG_ES, REG_CS, REG_SS, + REG_DS, REG_FS, REG_GS, /* control registers */ - CR0, CR1, CR2, CR3, - CR4, CR5, CR6, CR7, - CR8, CR9, CR10, CR11, - CR12, CR13, CR14, CR15, + REG_CR0, REG_CR1, REG_CR2, REG_CR3, + REG_CR4, REG_CR5, REG_CR6, REG_CR7, + REG_CR8, REG_CR9, REG_CR10, REG_CR11, + REG_CR12, REG_CR13, REG_CR14, REG_CR15, /* debug registers */ - DR0, DR1, DR2, DR3, - DR4, DR5, DR6, DR7, - DR8, DR9, DR10, DR11, - DR12, DR13, DR14, DR15, + REG_DR0, REG_DR1, REG_DR2, REG_DR3, + REG_DR4, REG_DR5, REG_DR6, REG_DR7, + REG_DR8, REG_DR9, REG_DR10, REG_DR11, + REG_DR12, REG_DR13, REG_DR14, REG_DR15, /* mmx registers */ - MM0, MM1, MM2, MM3, - MM4, MM5, MM6, MM7, + REG_MM0, REG_MM1, REG_MM2, REG_MM3, + REG_MM4, REG_MM5, REG_MM6, REG_MM7, /* x87 registers */ - ST0, ST1, ST2, ST3, - ST4, ST5, ST6, ST7, + REG_ST0, REG_ST1, REG_ST2, REG_ST3, + REG_ST4, REG_ST5, REG_ST6, REG_ST7, /* extended multimedia registers */ - XMM0, XMM1, XMM2, XMM3, - XMM4, XMM5, XMM6, XMM7, - XMM8, XMM9, XMM10, XMM11, - XMM12, XMM13, XMM14, XMM15, + REG_XMM0, REG_XMM1, REG_XMM2, REG_XMM3, + REG_XMM4, REG_XMM5, REG_XMM6, REG_XMM7, + REG_XMM8, REG_XMM9, REG_XMM10, REG_XMM11, + REG_XMM12, REG_XMM13, REG_XMM14, REG_XMM15, /* 256 bit multimedia registers */ - YMM0, YMM1, YMM2, YMM3, - YMM4, YMM5, YMM6, YMM7, - YMM8, YMM9, YMM10, YMM11, - YMM12, YMM13, YMM14, YMM15, + REG_YMM0, REG_YMM1, REG_YMM2, REG_YMM3, + REG_YMM4, REG_YMM5, REG_YMM6, REG_YMM7, + REG_YMM8, REG_YMM9, REG_YMM10, REG_YMM11, + REG_YMM12, REG_YMM13, REG_YMM14, YMM15, /* instruction pointer register */ - RIP -}; + REG_RIP, + + REG_FORCE_WORD = 0x7FFF +} VXRegister; /** * @brief Values that represent the type of a decoded operand. */ -enum class VXOperandType : uint8_t +typedef enum _VXOperandType /*: uint8_t*/ { /** * @brief The operand is not used. */ - NONE, + OPTYPE_NONE, /** * @brief The operand is a register operand. */ - REGISTER, + OPTYPE_REGISTER, /** * @brief The operand is a memory operand. */ - MEMORY, + OPTYPE_MEMORY, /** * @brief The operand is a pointer operand. */ - POINTER, + OPTYPE_POINTER, /** * @brief The operand is an immediate operand. */ - IMMEDIATE, + OPTYPE_IMMEDIATE, /** * @brief The operand is a relative immediate operand. */ - REL_IMMEDIATE, + OPTYPE_REL_IMMEDIATE, /** * @brief The operand is a constant value. */ - CONSTANT -}; + OPTYPE_CONSTANT +} VXOperandType; /** * @brief Values that represent the operand access mode. */ -enum class VXOperandAccessMode : uint8_t +typedef enum _VXOperandAccessMode /* : uint8_t */ { - NA, + OPACCESSMODE_NA, /** * @brief The operand is accessed in read-only mode. */ - READ, + OPACCESSMODE_READ, /** * @brief The operand is accessed in write mode. */ - WRITE, + OPACCESSMODE_WRITE, /** * @brief The operand is accessed in read-write mode. */ - READWRITE -}; + OPACCESSMODE_READWRITE +} VXOperandAccessMode; /** * @brief This struct holds information about a decoded operand. */ -struct VXOperandInfo +typedef struct _VXOperandInfo { /** * @brief The type of the operand. + * @see VXOperandType */ - VXOperandType type; + uint8_t type; /** * @brief The size of the operand. */ uint16_t size; /** * @brief The operand access mode. + * @see VXOperandAccessMode */ - VXOperandAccessMode access_mode; + uint8_t access_mode; /** * @brief The base register. + * @see VXRegister */ - VXRegister base; + uint16_t base; /** * @brief The index register. + * @see VXRegister */ - VXRegister index; + uint16_t index; /** * @brief The scale factor. */ @@ -295,12 +308,12 @@ struct VXOperandInfo uint32_t off; } ptr; } lval; -}; +} VXOperandInfo; /** * @brief This struct holds information about a decoded instruction. */ -struct VXInstructionInfo +typedef struct _VXInstructionInfo { /** * @brief The instruction flags. @@ -308,8 +321,9 @@ struct VXInstructionInfo uint32_t flags; /** * @brief The instruction mnemonic. + * @see VXInstructionMnemonic */ - VXInstructionMnemonic mnemonic; + uint16_t mnemonic; /** * @brief The total length of the instruction. */ @@ -341,8 +355,9 @@ struct VXInstructionInfo /** * @brief The segment register. This value will default to @c NONE, if no segment register * prefix is present. + * @see VXRegister */ - VXRegister segment; + uint16_t segment; /** * @brief The rex prefix byte. */ @@ -524,6 +539,10 @@ struct VXInstructionInfo * This field is used to properly format relative instructions. */ uint64_t instrPointer; -}; +} VXInstructionInfo; +#ifdef __cplusplus } +#endif + +#endif /* _VDE_VXDISASSEMBLERTYPESC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXDisassemblerUtilsC.c b/VerteronDisassemblerEngine/VXDisassemblerUtils.c similarity index 98% rename from Bindings/C/VXDisassemblerUtilsC.c rename to VerteronDisassemblerEngine/VXDisassemblerUtils.c index 9ef2bbb..5c392a7 100644 --- a/Bindings/C/VXDisassemblerUtilsC.c +++ b/VerteronDisassemblerEngine/VXDisassemblerUtils.c @@ -30,7 +30,7 @@ **************************************************************************************************/ -#include "VXDisassemblerUtilsC.h" +#include "VXDisassemblerUtils.h" #include diff --git a/VerteronDisassemblerEngine/VXDisassemblerUtils.h b/VerteronDisassemblerEngine/VXDisassemblerUtils.h index e62d9b1..d259d36 100644 --- a/VerteronDisassemblerEngine/VXDisassemblerUtils.h +++ b/VerteronDisassemblerEngine/VXDisassemblerUtils.h @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : + Modifications : athre0z - Last change : 30. October 2014 + Last change : 04. February 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,13 +29,26 @@ * SOFTWARE. **************************************************************************************************/ -#pragma once + +#ifndef _VDE_VXDISASSEMBLERUTILSC_H_ +#define _VDE_VXDISASSEMBLERUTILSC_H_ + +#include "VXDisassemblerTypes.h" +#include "VXInternalConfig.h" #include -#include "VXDisassemblerTypes.h" -namespace Verteron + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _VXContextDescriptor +{ + uint8_t type; + void *ptr; +} VXContextDescriptor; /** * @brief Calculates the absolute target address of a relative instruction operand. @@ -43,6 +56,12 @@ namespace Verteron * @param operand The operand. * @return The absolute target address. */ -uint64_t VDECalcAbsoluteTarget(const VXInstructionInfo &info, const VXOperandInfo &operand); +VX_EXPORT uint64_t VXCalcAbsoluteTarget( + const VXInstructionInfo *info, + const VXOperandInfo *operand); +#ifdef __cplusplus } +#endif + +#endif /* _VDE_VXDISASSEMBLERUTILSC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXInstructionDecoderC.c b/VerteronDisassemblerEngine/VXInstructionDecoder.c similarity index 99% rename from Bindings/C/VXInstructionDecoderC.c rename to VerteronDisassemblerEngine/VXInstructionDecoder.c index 7b2f675..51a10bd 100644 --- a/Bindings/C/VXInstructionDecoderC.c +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.c @@ -30,9 +30,9 @@ **************************************************************************************************/ -#include "VXInstructionDecoderC.h" -#include "VXInternalHelpersC.h" -#include "VXOpcodeTableInternalC.h" +#include "VXInstructionDecoder.h" +#include "VXInternalHelpers.h" +#include "VXOpcodeTableInternal.h" #include #include @@ -1605,7 +1605,8 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, if (info->instrDefinition->flags & IDF_OPERAND1_WRITE) { info->operand[0].access_mode = OPACCESSMODE_WRITE; - } else if (info->instrDefinition->flags & IDF_OPERAND1_READWRITE) + } + else if (info->instrDefinition->flags & IDF_OPERAND1_READWRITE) { info->operand[0].access_mode = OPACCESSMODE_READWRITE; } @@ -1615,7 +1616,8 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, if (info->instrDefinition->flags & IDF_OPERAND2_WRITE) { info->operand[1].access_mode = OPACCESSMODE_WRITE; - } else if (info->instrDefinition->flags & IDF_OPERAND2_READWRITE) + } + else if (info->instrDefinition->flags & IDF_OPERAND2_READWRITE) { info->operand[1].access_mode = OPACCESSMODE_READWRITE; } @@ -1654,7 +1656,8 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, // Set child node index for next iteration index = info->vex_m_mmmm + (info->vex_pp << 2); - } else + } + else { index = 0; } @@ -1672,6 +1675,7 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, } node = VXGetOpcodeTreeChild(node, index); } while (nodeType != OTNT_INSTRUCTION_DEFINITION); + return false; } diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.h b/VerteronDisassemblerEngine/VXInstructionDecoder.h index 70b02c5..c19efc0 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.h +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.h @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : + Modifications : athre0z - Last change : 29. October 2014 + Last change : 14. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,690 +29,276 @@ * SOFTWARE. **************************************************************************************************/ -#pragma once -#include -#include +#ifndef _VDE_VXINSTRUCTIONDECODERC_H_ +#define _VDE_VXINSTRUCTIONDECODERC_H_ + #include "VXDisassemblerTypes.h" +#include "VXDisassemblerUtils.h" -namespace Verteron +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* VXBaseDataSource ============================================================================ */ + +typedef struct _VXBaseDataSourceContext { VXContextDescriptor d; } VXBaseDataSourceContext; /** - * @brief The base class for all data-source implementations. + * @brief Releases a data source. + * @param ctx The context to release. + * The context may no longer be used after it was released. */ -class VXBaseDataSource -{ -private: - uint8_t m_currentInput; -protected: - /** - * @brief Override this method in your custom data source implementations. - * Reads the next byte from the data source. This method increases the current - * input position by one. - * @return The current input byte. - */ - virtual uint8_t internalInputPeek() = 0; - /** - * @brief Override this method in your custom data source implementations. - * Reads the next byte from the data source. This method does NOT increase the - * current input position. - * @return The current input byte. - */ - virtual uint8_t internalInputNext() = 0; -protected: - /** - * @brief Default constructor. - */ - VXBaseDataSource() { }; -public: - /** - * @brief Destructor. - */ - virtual ~VXBaseDataSource() { }; -public: - /** - * @brief Reads the next byte from the data source. This method does NOT increase the - * current input position or the @c length field of the @c info parameter. - * @param info The instruction info. - * @return The current input byte. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - */ - uint8_t inputPeek(VXInstructionInfo &info); - /** - * @brief Reads the next byte from the data source. This method increases the current - * input position and the @c length field of the @c info parameter. - * This method also appends the new byte to to @c data field of the @c info - * parameter. - * @param info The instruction info. - * @return The current input byte. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - */ - uint8_t inputNext(VXInstructionInfo &info); - /** - * @brief Reads the next byte(s) from the data source. This method increases the current - * input position and the @c length field of the @c info parameter. - * This method also appends the new byte(s) to to @c data field of the @c info - * parameter. - * @param info The instruction info. - * @return The current input data. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - */ - template - T inputNext(VXInstructionInfo &info); - /** - * @brief Returns the current input byte. The current input byte is set everytime the - * @c inputPeek or @c inputNext method is called. - * @return The current input byte. - */ - uint8_t inputCurrent() const; -public: - /** - * @brief Override this method in your custom data source implementations. - * Signals, if the end of the data source is reached. - * @return True if end of input, false if not. - */ - virtual bool isEndOfInput() const = 0; - /** - * @brief Override this method in your custom data source implementations. - * Returns the current input position. - * @return The current input position. - */ - virtual uint64_t getPosition() const = 0; - /** - * @brief Override this method in your custom data source implementations. - * Sets a new input position. - * @param position The new input position. - * @return Returns false, if the new position exceeds the maximum input length. - */ - virtual bool setPosition(uint64_t position) = 0; -}; - -inline uint8_t VXBaseDataSource::inputPeek(VXInstructionInfo &info) -{ - if (info.length == 15) - { - info.flags |= IF_ERROR_LENGTH; - return 0; - } - if (isEndOfInput()) - { - info.flags |= IF_ERROR_END_OF_INPUT; - return 0; - } - m_currentInput = internalInputPeek(); - return m_currentInput; -} - -inline uint8_t VXBaseDataSource::inputNext(VXInstructionInfo &info) -{ - if (info.length == 15) - { - info.flags |= IF_ERROR_LENGTH; - return 0; - } - if (isEndOfInput()) - { - info.flags |= IF_ERROR_END_OF_INPUT; - return 0; - } - m_currentInput = internalInputNext(); - info.data[info.length] = m_currentInput; - info.length++; - return m_currentInput; -} - -template -inline T VXBaseDataSource::inputNext(VXInstructionInfo &info) -{ - static_assert(std::is_integral::value, "integral type required"); - T result = 0; - for (unsigned i = 0; i < (sizeof(T) / sizeof(uint8_t)); ++i) - { - T b = inputNext(info); - if (!b && (info.flags & IF_ERROR_MASK)) - { - return 0; - } - result |= (b << (i * 8)); - } - return result; -} - -inline uint8_t VXBaseDataSource::inputCurrent() const -{ - return m_currentInput; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// +VX_EXPORT void VXBaseDataSource_Release( + VXBaseDataSourceContext *ctx); /** - * @brief A memory-buffer based data source for the @c VXInstructionDecoder class. + * @brief Reads the next byte from the data source without altering the current input position + * or the @c length field of the @c info parameter. + * @param ctx The data source context. + * @param info The instruction info struct. + * @return The current input byte. If the result is zero, you should always check the @c flags + * field of the @c info parameter for error flags. Possible error values are + * @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ -class VXMemoryDataSource : public VXBaseDataSource -{ -private: - const void *m_inputBuffer; - uint64_t m_inputBufferLen; - uint64_t m_inputBufferPos; -protected: - /** - * @brief Reads the next byte from the data source. This method increases the current - * input position by one. - * @return The current input byte. - */ - uint8_t internalInputPeek() override; - /** - * @brief Reads the next byte from the data source. This method does NOT increase the - * current input position. - * @return The current input byte. - */ - uint8_t internalInputNext() override; -public: - /** - * @brief Constructor. - * @param buffer The input buffer. - * @param bufferLen The length of the input buffer. - */ - VXMemoryDataSource(const void* buffer, size_t bufferLen) - : m_inputBuffer(buffer) - , m_inputBufferLen(bufferLen) - , m_inputBufferPos(0) { }; -public: - /** - * @brief Signals, if the end of the data source is reached. - * @return True if end of input, false if not. - */ - bool isEndOfInput() const override; - /** - * @brief Returns the current input position. - * @return The current input position. - */ - uint64_t getPosition() const override; - /** - * @brief Sets a new input position. - * @param position The new input position. - * @return Returns false, if the new position exceeds the maximum input length. - */ - bool setPosition(uint64_t position) override; -}; - -inline uint8_t VXMemoryDataSource::internalInputPeek() -{ - return *(static_cast(m_inputBuffer) + m_inputBufferPos); -} - -inline uint8_t VXMemoryDataSource::internalInputNext() -{ - ++m_inputBufferPos; - return *(static_cast(m_inputBuffer) + m_inputBufferPos - 1); -} - -inline bool VXMemoryDataSource::isEndOfInput() const -{ - return (m_inputBufferPos >= m_inputBufferLen); -} - -inline uint64_t VXMemoryDataSource::getPosition() const -{ - return m_inputBufferPos; -} - -inline bool VXMemoryDataSource::setPosition(uint64_t position) -{ - m_inputBufferPos = position; - return isEndOfInput(); -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// +VX_EXPORT uint8_t VXBaseDataSource_InputPeek( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); /** - * @brief A stream based data source for the @c VXInstructionDecoder class. + * @brief Reads the next byte from the data source. + * @param ctx The data soruce context. + * @param info The instruction info. + * @return The current input byte. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + * This method increases the current input position and the @c length field of the @c info + * parameter. This function also appends the new byte to to @c data field of the @c info + * parameter. + */ +VX_EXPORT uint8_t VXBaseDataSource_InputNext8( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); + +/** + * @copydoc VXBaseDataSource_InputNext8 */ -class VXStreamDataSource : public VXBaseDataSource -{ -private: - std::istream *m_inputStream; -protected: - /** - * @brief Reads the next byte from the data source. This method increases the current - * input position by one. - * @return The current input byte. - */ - uint8_t internalInputPeek() override; - /** - * @brief Reads the next byte from the data source. This method does NOT increase the - * current input position. - * @return The current input byte. - */ - uint8_t internalInputNext() override; -public: - /** - * @brief Constructor. - * @param stream The input stream. - */ - explicit VXStreamDataSource(std::istream *stream) - : m_inputStream(stream) { }; -public: - /** - * @brief Signals, if the end of the data source is reached. - * @return True if end of input, false if not. - */ - bool isEndOfInput() const override; - /** - * @brief Returns the current input position. - * @return The current input position. - */ - uint64_t getPosition() const override; - /** - * @brief Sets a new input position. - * @param position The new input position. - * @return Returns false, if the new position exceeds the maximum input length. - */ - bool setPosition(uint64_t position) override; -}; +VX_EXPORT uint16_t VXBaseDataSource_InputNext16( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); -inline uint8_t VXStreamDataSource::internalInputPeek() -{ - if (!m_inputStream) - { - return 0; - } - return m_inputStream->peek(); -} +/** + * @copydoc VXBaseDataSource_InputNext8 + */ +VX_EXPORT uint32_t VXBaseDataSource_InputNext32( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); -inline uint8_t VXStreamDataSource::internalInputNext() -{ - if (!m_inputStream) - { - return 0; - } - return m_inputStream->get(); -} +/** + * @copydoc VXBaseDataSource_InputNext8 + */ +VX_EXPORT uint64_t VXBaseDataSource_InputNext64( + VXBaseDataSourceContext *ctx, + VXInstructionInfo *info); -inline bool VXStreamDataSource::isEndOfInput() const -{ - if (!m_inputStream) - { - return true; - } - // We use good() instead of eof() to make sure the decoding will fail, if an stream internal - // error occured. - return !m_inputStream->good(); -} +/** + * @brief Returns the current input byte. + * @param ctx The data soruce context. + * @return The current input byte. + * The current input byte is set everytime the @c inputPeek or @c inputNext method is called. + */ +// TODO: check long descr +VX_EXPORT uint8_t VXBaseDataSource_InputCurrent( + const VXBaseDataSourceContext *ctx); -inline uint64_t VXStreamDataSource::getPosition() const -{ - if (!m_inputStream) - { - return 0; - } - return m_inputStream->tellg(); -} +/** + * @brief Queries if the end of the data source is reached. + * @param ctx The data soruce context. + * @return @c true if end of input, @c false if not. + */ +VX_EXPORT bool VXBaseDataSource_IsEndOfInput( + const VXBaseDataSourceContext *ctx); -inline bool VXStreamDataSource::setPosition(uint64_t position) -{ - if (!m_inputStream) - { - return false; - } - m_inputStream->seekg(position); - return isEndOfInput(); -} +/** + * @brief Returns the current input position. + * @param ctx The data soruce context. + * @return The current input position. + */ +VX_EXPORT uint64_t VXBaseDataSource_GetPosition( + const VXBaseDataSourceContext *ctx); -/////////////////////////////////////////////////////////////////////////////////////////////////// +/** + * @brief Sets a new input position. + * @param ctx The data soruce context. + * @param position The new input position. + * @return @c false if the new position exceeds the maximum input length. + */ +VX_EXPORT bool VXBaseDataSource_SetPosition( + VXBaseDataSourceContext *ctx, + uint64_t position); + +/* VXMemoryDataSource ========================================================================== */ + +/** + * @brief Creates a memory data source. + * @param buffer The input buffer. + * @param bufferLen THe length of the input buffer. + * @return @c NULL if it fails, else a data source context. + * @see VXBaseDataSource_Release + */ +// TODO: verify return value +VX_EXPORT VXBaseDataSourceContext* VXMemoryDataSource_Create( + const void* buffer, + size_t bufferLen); + +/* Enums ======================================================================================= */ /** * @brief Values that represent a disassembler mode. */ -enum class VXDisassemblerMode : uint8_t +typedef enum _VXDisassemblerMode /* : uint8_t */ { - M16BIT, - M32BIT, - M64BIT -}; + DM_M16BIT, + DM_M32BIT, + DM_M64BIT +} VXDisassemblerMode; /** * @brief Values that represent an instruction-set vendor. */ -enum class VXInstructionSetVendor : uint8_t +typedef enum _VXInstructionSetVendor /* : uint8_t */ { - ANY, - INTEL, - AMD -}; + ISV_ANY, + ISV_INTEL, + ISV_AMD +} VXInstructionSetVendor; + +/* VXInstructionDecoder ======================================================================== */ + +typedef struct _VXInstructionDecoderContext +{ + VXContextDescriptor d; +} VXInstructionDecoderContext; /** - * @brief The @c VXInstructionDecoder class decodes x86/x86-64 assembly instructions from a - * given data source. + * @brief Creates an instruction decoder. + * @return @c NULL if it fails, else an instruction decoder context. + * @see VXInstructionDecoder_Release */ -class VXInstructionDecoder -{ -private: - enum class RegisterClass : uint8_t - { - GENERAL_PURPOSE, - MMX, - CONTROL, - DEBUG, - SEGMENT, - XMM - }; -private: - VXBaseDataSource *m_dataSource; - VXDisassemblerMode m_disassemblerMode; - VXInstructionSetVendor m_preferredVendor; - uint64_t m_instructionPointer; -private: - /** - * @brief Reads the next byte from the data source. This method does NOT increase the - * current input position or the @c length field of the @c info parameter. - * @param info The instruction info. - * @return The current input byte. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - */ - uint8_t inputPeek(VXInstructionInfo &info); - /** - * @brief Reads the next byte from the data source. This method increases the current - * input position and the @c length field of the @info parameter. - * This method also appends the new byte to to @c data field of the @c info - * parameter. - * @param info The instruction info. - * @return The current input byte. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - */ - uint8_t inputNext(VXInstructionInfo &info); - /** - * @brief Reads the next byte(s) from the data source. This method increases the current - * input position and the @c length field of the @info parameter. - * This method also appends the new byte(s) to to @c data field of the @c info - * parameter. - * @param info The instruction info. - * @return The current input data. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - */ - template - T inputNext(VXInstructionInfo &info); - /** - * @brief Returns the current input byte. The current input byte is set everytime the - * @c inputPeek or @c inputNext method is called. - * @return The current input byte. - */ - uint8_t inputCurrent() const; -private: - /** - * @brief Decodes a register operand. - * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. - * @param registerClass The register class to use. - * @param registerId The register id. - * @param operandSize The defined size of the operand. - * @return True if it succeeds, false if it fails. - */ - bool decodeRegisterOperand(VXInstructionInfo &info, VXOperandInfo &operand, - RegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize) const; - /** - * @brief Decodes a register/memory operand. - * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. - * @param registerClass The register class to use. - * @param operandSize The defined size of the operand. - * @return True if it succeeds, false if it fails. - */ - bool decodeRegisterMemoryOperand(VXInstructionInfo &info, VXOperandInfo &operand, - RegisterClass registerClass, VXDefinedOperandSize operandSize); - /** - * @brief Decodes an immediate operand. - * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. - * @param operandSize The defined size of the operand. - * @return True if it succeeds, false if it fails. - */ - bool decodeImmediate(VXInstructionInfo &info, VXOperandInfo &operand, - VXDefinedOperandSize operandSize); - /** - * @brief Decodes a displacement operand. - * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. - * @param size The size of the displacement data. - * @return True if it succeeds, false if it fails. - */ - bool decodeDisplacement(VXInstructionInfo &info, VXOperandInfo &operand, uint8_t size); -private: - /** - * @brief Decodes the modrm field of the instruction. This method reads an additional - * input byte. - * @param The @c VXInstructionInfo struct that receives the decoded data. - * @return True if it succeeds, false if it fails. - */ - bool decodeModrm(VXInstructionInfo &info); - /** - * @brief Decodes the sib field of the instruction. This method reads an additional - * input byte. - * @param info The @c VXInstructionInfo struct that receives the decoded data. - * @return True if it succeeds, false if it fails. - */ - bool decodeSIB(VXInstructionInfo &info); - /** - * @brief Decodes vex prefix of the instruction. This method takes the current input byte - * to determine the vex prefix type and reads one or two additional input bytes - * on demand. - * @param info The @c VXInstructionInfo struct that receives the decoded data. - * @return True if it succeeds, false if it fails. - */ - bool decodeVex(VXInstructionInfo &info); -private: - /** - * @brief Returns the effective operand size. - * @param info The instruction info. - * @param operandSize The defined operand size. - * @return The effective operand size. - */ - uint16_t getEffectiveOperandSize(const VXInstructionInfo &info, - VXDefinedOperandSize operandSize) const; - /** - * @brief Decodes all instruction operands. - * @param info The @c VXInstructionInfo struct that receives the decoded data. - * @return True if it succeeds, false if it fails. - */ - bool decodeOperands(VXInstructionInfo &info); - /** - * @brief Decodes the specified instruction operand. - * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. - * @param operandType The defined type of the operand. - * @param operandSize The defined size of the operand. - * @return True if it succeeds, false if it fails. - */ - bool decodeOperand(VXInstructionInfo &info, VXOperandInfo &operand, - VXDefinedOperandType operandType, VXDefinedOperandSize operandSize); -private: - /** - * @brief Resolves the effective operand and address mode of the instruction. - * This method requires a non-null value in the @c instrDefinition field of the - * @c info struct. - * @param info The @c VXInstructionInfo struct that receives the effective operand and - * address mode. - */ - void resolveOperandAndAddressMode(VXInstructionInfo &info) const; - /** - * @brief Calculates the effective REX/VEX.w, r, x, b, l values. - * This method requires a non-null value in the @c instrDefinition field of the - * @c info struct. - * @param info The @c VXInstructionInfo struct that receives the effective operand and - * address mode. - */ - void calculateEffectiveRexVexValues(VXInstructionInfo &info) const; -private: - /** - * @brief Collects and decodes optional instruction prefixes. - * @param info The @c VXInstructionInfo struct that receives the decoded data. - * @return True if it succeeds, false if it fails. - */ - bool decodePrefixes(VXInstructionInfo &info); - /** - * @brief Collects and decodes the instruction opcodes using the opcode tree. - * @param info The @c VXInstructionInfo struct that receives the decoded data. - * @return True if it succeeds, false if it fails. - */ - bool decodeOpcode(VXInstructionInfo &info); -public: - /** - * @brief Default constructor. - */ - VXInstructionDecoder(); - /** - * @brief Constructor. - * @param input A reference to the input data source. - * @param disassemblerMode The disasasembler mode. - * @param preferredVendor The preferred instruction-set vendor. - * @param instructionPointer The initial instruction pointer. - */ - explicit VXInstructionDecoder(VXBaseDataSource *input, - VXDisassemblerMode disassemblerMode = VXDisassemblerMode::M32BIT, - VXInstructionSetVendor preferredVendor = VXInstructionSetVendor::ANY, - uint64_t instructionPointer = 0); -public: - /** - * @brief Decodes the next instruction from the input data source. - * @param info The @c VXInstructionInfo struct that receives the information about the - * decoded instruction. - * @return This method returns false, if the current position has exceeded the maximum input - * length. - * In all other cases (valid and invalid instructions) the return value is true. - */ - bool decodeInstruction(VXInstructionInfo &info); -public: - /** - * @brief Returns a pointer to the current data source. - * @return A pointer to the current data source. - */ - VXBaseDataSource* getDataSource() const; - /** - * @brief Sets a new data source. - * @param input A reference to the new input data source. - */ - void setDataSource(VXBaseDataSource *input); - /** - * @brief Returns the current disassembler mode. - * @return The current disassembler mode. - */ - VXDisassemblerMode getDisassemblerMode() const; - /** - * @brief Sets the current disassembler mode. - * @param disassemblerMode The new disassembler mode. - */ - void setDisassemblerMode(VXDisassemblerMode disassemblerMode); - /** - * @brief Returns the preferred instruction-set vendor. - * @return The preferred instruction-set vendor. - */ - VXInstructionSetVendor getPreferredVendor() const; - /** - * @brief Sets the preferred instruction-set vendor. - * @param preferredVendor The new preferred instruction-set vendor. - */ - void setPreferredVendor(VXInstructionSetVendor preferredVendor); - /** - * @brief Returns the current instruction pointer. - * @return The current instruction pointer. - */ - uint64_t getInstructionPointer() const; - /** - * @brief Sets a new instruction pointer. - * @param instructionPointer The new instruction pointer. - */ - void setInstructionPointer(uint64_t instructionPointer); -}; +// TODO: verify return value +VX_EXPORT VXInstructionDecoderContext* VXInstructionDecoder_Create(void); -inline uint8_t VXInstructionDecoder::inputPeek(VXInstructionInfo &info) -{ - if (!m_dataSource) - { - info.flags |= IF_ERROR_END_OF_INPUT; - return 0; - } - return m_dataSource->inputPeek(info); +/** + * @brief Creates an instruction decoder. + * @param input A reference to the input data source. + * @param disassemblerMode The disassembler mode. + * @param preferredVendor The preferred instruction-set vendor. + * @param instructionPointer The initial instruction pointer. + * @return @c NULL if it fails, else an instruction decoder context. + * @see VXInstructionDecoder_Release + */ +VX_EXPORT VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( + VXBaseDataSourceContext *input, + VXDisassemblerMode disassemblerMode, + VXInstructionSetVendor preferredVendor, + uint64_t instructionPointer); + +/** + * @brief Releases an instruction decoder. + * @param ctx The context of the instruction decoder to release. + */ +VX_EXPORT void VXInstructionDecoder_Release( + VXInstructionDecoderContext *ctx); + +/** + * @brief Decodes the next instruction from the input data source. + * @param ctx The instruction decoder context. + * @param info The @c VXInstructionInfo struct that receives the information about the decoded + * instruction. + * @return This function returns @c false if the current position exceeds the maximum input + * length. In all other cases (valid and invalid instructions) the return value is + * @c true. + */ +VX_EXPORT bool VXInstructionDecoder_DecodeInstruction( + VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); + +/** + * @brief Returns a pointer to the current data source. + * @param ctx The instruction decoder context. + * @return The context of the data source. + */ +VX_EXPORT VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( + const VXInstructionDecoderContext *ctx); + +/** + * @brief Sets a new data source. + * @param ctx The instruction decoder context. + * @param input The context of the new input data source. + */ +VX_EXPORT void VXInstructionDecoder_SetDataSource( + VXInstructionDecoderContext *ctx, + VXBaseDataSourceContext *input); + +/** + * @brief Returns the current disassembler mode. + * @param ctx The instruction decoder context. + * @return The current disassembler mode. + */ +VX_EXPORT VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( + const VXInstructionDecoderContext *ctx); + +/** + * @brief Sets the current disassembler mode. + * @param ctx The instruction decoder context. + * @param disassemblerMode The new disassembler mode. + */ +VX_EXPORT void VXInstructionDecoder_SetDisassemblerMode( + VXInstructionDecoderContext *ctx, + VXDisassemblerMode disassemblerMode); + +/** + * @brief Returns the preferred instruction-set vendor. + * @param ctx The instruction decoder context. + * @return The preferred instruction-set vendor. + */ +VX_EXPORT VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( + const VXInstructionDecoderContext *ctx); + +/** + * @brief Sets the preferred instruction-set vendor. + * @param ctx The instruction decoder context. + * @param preferredVendor The new preferred instruction-set vendor. + */ +VX_EXPORT void VXInstructionDecoder_SetPreferredVendor( + VXInstructionDecoderContext *ctx, + VXInstructionSetVendor preferredVendor); + +/** + * @brief Returns the current instruction pointer. + * @param ctx The instruction decoder context. + * @return The current instruction pointer. + */ +VX_EXPORT uint64_t VXInstructionDecoder_GetInstructionPointer( + const VXInstructionDecoderContext *ctx); + +/** + * @brief Sets a new instruction pointer. + * @param ctx The instruction decoder context. + * @param instructionPointer The new instruction pointer. + */ +VX_EXPORT void VXInstructionDecoder_SetInstructionPointer( + VXInstructionDecoderContext *ctx, + uint64_t instructionPointer); + +/* ============================================================================================= */ + +#ifdef __cplusplus } +#endif -inline uint8_t VXInstructionDecoder::inputNext(VXInstructionInfo &info) -{ - if (!m_dataSource) - { - info.flags |= IF_ERROR_END_OF_INPUT; - return 0; - } - return m_dataSource->inputNext(info); -} - -template -inline T VXInstructionDecoder::inputNext(VXInstructionInfo &info) -{ - if (!m_dataSource) - { - info.flags |= IF_ERROR_END_OF_INPUT; - return 0; - } - return m_dataSource->inputNext(info); -} - -inline uint8_t VXInstructionDecoder::inputCurrent() const -{ - if (!m_dataSource) - { - return 0; - } - return m_dataSource->inputCurrent(); -} - -inline VXBaseDataSource* VXInstructionDecoder::getDataSource() const -{ - return m_dataSource; -} - -inline void VXInstructionDecoder::setDataSource(VXBaseDataSource *input) -{ - m_dataSource = input; -} - -inline VXDisassemblerMode VXInstructionDecoder::getDisassemblerMode() const -{ - return m_disassemblerMode; -} - -inline void VXInstructionDecoder::setDisassemblerMode(VXDisassemblerMode disassemblerMode) -{ - m_disassemblerMode = disassemblerMode; -} - -inline VXInstructionSetVendor VXInstructionDecoder::getPreferredVendor() const -{ - return m_preferredVendor; -} - -inline void VXInstructionDecoder::setPreferredVendor(VXInstructionSetVendor preferredVendor) -{ - m_preferredVendor = preferredVendor; -} - -inline uint64_t VXInstructionDecoder::getInstructionPointer() const -{ - return m_instructionPointer; -} - -inline void VXInstructionDecoder::setInstructionPointer(uint64_t instructionPointer) -{ - m_instructionPointer = instructionPointer; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -} +#endif /* _VDE_VXINSTRUCTIONDECODERC_H_ */ diff --git a/Bindings/C/VXInstructionFormatterC.c b/VerteronDisassemblerEngine/VXInstructionFormatter.c similarity index 99% rename from Bindings/C/VXInstructionFormatterC.c rename to VerteronDisassemblerEngine/VXInstructionFormatter.c index 9af2ecb..9edd724 100644 --- a/Bindings/C/VXInstructionFormatterC.c +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.c @@ -30,10 +30,10 @@ **************************************************************************************************/ -#include "VXInstructionFormatterC.h" -#include "VXDisassemblerUtilsC.h" -#include "VXInternalHelpersC.h" -#include "VXOpcodeTableInternalC.h" +#include "VXInstructionFormatter.h" +#include "VXDisassemblerUtils.h" +#include "VXInternalHelpers.h" +#include "VXOpcodeTableInternal.h" #include #include diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.h b/VerteronDisassemblerEngine/VXInstructionFormatter.h index 762eeab..43729e6 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.h +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.h @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : + Modifications : athre0z - Last change : 22. October 2014 + Last change : 14. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,292 +29,133 @@ * SOFTWARE. **************************************************************************************************/ -#pragma once -#include -#include -#include +#ifndef _VDE_VXINSTRUCTIONFORMATTERC_H_ +#define _VDE_VXINSTRUCTIONFORMATTERC_H_ + #include "VXDisassemblerTypes.h" +#include "VXDisassemblerUtils.h" -namespace Verteron +#ifdef __cplusplus +extern "C" { +#endif -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* VXBaseSymbolResolver ======================================================================== */ + +typedef struct _VXBaseSymbolResolverContext +{ + VXContextDescriptor d; +} VXBaseSymbolResolverContext; /** - * @brief Base class for all symbol resolver implementations. + * @brief Releases a symbol resolver. + * @param ctx The context of the symbol resolver to free. + * The context may no longer used after it was released. */ -class VXBaseSymbolResolver -{ -public: - /** - * @brief Destructor. - */ - virtual ~VXBaseSymbolResolver(); -public: - /** - * @brief Resolves a symbol. - * @param info The instruction info. - * @param address The address. - * @param offset Reference to an unsigned 64 bit integer that receives an offset - * relative to the base address of the symbol. - * @return The name of the symbol, if the symbol was found, @c NULL if not. - */ - virtual const char* resolveSymbol(const VXInstructionInfo &info, uint64_t address, - uint64_t &offset); -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////// +VX_EXPORT void VXBaseSymbolResolver_Release( + VXBaseSymbolResolverContext *ctx); /** - * @brief Base class for all instruction formatter implementations. + * @brief Resolves a symbol. + * @param ctx The symbol resolver context. + * @param info The instruction info. + * @param address The address. + * @param offset Pointer to an unsigned 64 bit integer that receives an offset relative to + * the base address of the symbol. + * @return The name of the symbol if the symbol was found, else @c NULL. */ -class VXBaseInstructionFormatter -{ -private: - static const char *m_registerStrings[]; - VXBaseSymbolResolver *m_symbolResolver; - std::vector m_outputBuffer; - size_t m_outputStringLen; - bool m_outputUppercase; -protected: - /** - * @brief Clears the output string buffer. - */ - void outputClear(); - /** - * @brief Returns the content of the output string buffer. - * @return Pointer to the content of the ouput string buffer. - */ - const char* outputString(); - /** - * @brief Appends text to the ouput string buffer. - * @param text The text. - */ - void outputAppend(const char *text); - /** - * @brief Appends formatted text to the output string buffer. - * @param format The format string. - */ - void outputAppendFormatted(const char *format, ...); - /** - * @brief Changes automatic conversion of characters to uppercase. - * @param uppercase Set true to enable automatic uppercase conversion. - */ - void outputSetUppercase(bool uppercase); - /** - * @brief Appends a formatted address to the output string buffer. - * @param info The instruction info. - * @param address The address. - * @param resolveSymbols If this parameter is true, the method will try to display a - * smybol name instead of the numeric value. - */ - void outputAppendAddress(const VXInstructionInfo &info, uint64_t address, - bool resolveSymbols = true); - /** - * @brief Appends a formatted immediate value to the output string buffer. - * @param info The instruction info. - * @param operand The immediate operand. - * @param resolveSymbols If this parameter is true, the method will try to display a - * smybol name instead of the numeric value. - */ - void outputAppendImmediate(const VXInstructionInfo &info, const VXOperandInfo &operand, - bool resolveSymbols = false); - /** - * @brief Appends a formatted memory displacement value to the output string buffer. - * @param info The instruction info. - * @param operand The memory operand. - */ - void outputAppendDisplacement(const VXInstructionInfo &info, const VXOperandInfo &operand); -protected: - /** - * @brief Returns the string representation of a given register. - * @param reg The register. - * @return The string representation of the given register. - */ - const char* registerToString(VXRegister reg) const; - /** - * @brief Resolves a symbol. - * @param info The instruction info. - * @param address The address. - * @param offset Reference to an unsigned 64 bit integer that receives an offset - * relative to the base address of the symbol. - * @return The name of the symbol, if the symbol was found, @c NULL if not. - */ - const char* resolveSymbol(const VXInstructionInfo &info, uint64_t address, - uint64_t &offset) const; -protected: - /** - * @brief Override this method to implement a custom disassembly syntax. Use the - * @c outputAppend and @c outputAppendFormatted methods to fill the internal - * string buffer. - * @param info The instruction info. - */ - virtual void internalFormatInstruction(const VXInstructionInfo &info); - /** - * @brief Default constructor. - */ - VXBaseInstructionFormatter(); - /** - * @brief Constructor. - * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol - * resolver should be used. - */ - explicit VXBaseInstructionFormatter(VXBaseSymbolResolver *symbolResolver); -public: - /** - * @brief Destructor. - */ - virtual ~VXBaseInstructionFormatter(); -public: - /** - * @brief Formats a decoded instruction. - * @param info The instruction info. - * @return Pointer to the formatted instruction string. - */ - const char* formatInstruction(const VXInstructionInfo &info); -public: - /** - * @brief Returns a pointer to the current symbol resolver. - * @return Pointer to the current symbol resolver or @c NULL, if no symbol resolver is used. - */ - VXBaseSymbolResolver* getSymbolResolver() const; - /** - * @brief Sets a new symbol resolver. - * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol - * resolver should be used. - */ - void setSymbolResolver(VXBaseSymbolResolver *symbolResolver); -}; +VX_EXPORT const char* VXBaseSymbolResolver_ResolveSymbol( + VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, + uint64_t address, + uint64_t *offset); -inline void VXBaseInstructionFormatter::outputSetUppercase(bool uppercase) -{ - m_outputUppercase = uppercase; -} +/* VXCustomSymbolResolver ====================================================================== */ -inline char const* VXBaseInstructionFormatter::registerToString(VXRegister reg) const -{ - if (reg == VXRegister::NONE) - { - return "error"; - } - return m_registerStrings[static_cast(reg) - 1]; -} - -inline char const* VXBaseInstructionFormatter::resolveSymbol(const VXInstructionInfo &info, - uint64_t address, uint64_t &offset) const -{ - if (m_symbolResolver) - { - return m_symbolResolver->resolveSymbol(info, address, offset); - } - return nullptr; -} - -inline VXBaseSymbolResolver* VXBaseInstructionFormatter::getSymbolResolver() const -{ - return m_symbolResolver; -} - -inline void VXBaseInstructionFormatter::setSymbolResolver(VXBaseSymbolResolver *symbolResolver) -{ - m_symbolResolver = symbolResolver; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// +typedef const char* (*VXCustomSymbolResolver_ResolveSymbolCallback)( + const VXInstructionInfo *info, + uint64_t address, + uint64_t *offset, + void *userData); /** - * @brief Intel syntax instruction formatter. + * @brief Creates a custom symbol resolver. + * @param resolverCb The resolver callback consulted when symbols need to be resolved. + * @param userData A pointer to arbitrary data passed to the resolver callback. + * May also be @c NULL. + * @return @c NULL if it fails, else a symbol resolver context. */ -class VXIntelInstructionFormatter : public VXBaseInstructionFormatter -{ -private: - /** - * @brief Appends an operand cast to the output string buffer. - * @param info The instruction info. - * @param operand The operand. - */ - void outputAppendOperandCast(const VXInstructionInfo &info, const VXOperandInfo &operand); - /** - * @brief Formats the specified operand and appends the resulting string to the output - * buffer. - * @param info The instruction info. - * @param operand The operand. - */ - void formatOperand(const VXInstructionInfo &info, const VXOperandInfo &operand); -protected: - /** - * @brief Fills the internal string buffer with an intel style formatted instruction string. - * @param info The instruction info. - */ - void internalFormatInstruction(const VXInstructionInfo &info) override; -public: - /** - * @brief Default constructor. - */ - VXIntelInstructionFormatter(); - /** - * @brief Constructor. - * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol - * resolver should be used. - */ - explicit VXIntelInstructionFormatter(VXBaseSymbolResolver *symbolResolver); - /** - * @brief Destructor. - */ - ~VXIntelInstructionFormatter() override; -}; +VX_EXPORT VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( + VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, + void *userData); -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* VXBaseInstructionFormatter ================================================================== */ + +typedef struct _VXBaseInstructionFormatterContext +{ + VXContextDescriptor d; +} VXBaseInstructionFormatterContext; /** - * @brief Simple symbol resolver that only matches exact addresses. + * @brief Formats a decoded instruction. + * @param ctx The instruction formatter context. + * @param info The instruction info. + * @return Pointer to the formatted instruction string. This pointer remains valid until + * this function is called again or the context is released. */ -class VXExactSymbolResolver : public VXBaseSymbolResolver -{ -private: - std::unordered_map m_symbolMap; -public: - /** - * @brief Destructor. - */ - ~VXExactSymbolResolver() override; -public: - /** - * @brief Resolves a symbol. - * @param info The instruction info. - * @param address The address. - * @param offset Reference to an unsigned 64 bit integer that receives an offset - * relative to the base address of the symbol. - * @return The name of the symbol, if the symbol was found, @c NULL if not. - */ - const char* resolveSymbol(const VXInstructionInfo &info, uint64_t address, - uint64_t &offset) override; -public: - /** - * @brief Query if the given address is a known symbol. - * @param address The address. - * @return True if the address is known, false if not. - */ - bool containsSymbol(uint64_t address) const; - /** - * @brief Adds or changes a symbol. - * @param address The address. - * @param name The symbol name. - */ - void setSymbol(uint64_t address, const char* name); - /** - * @brief Removes the symbol described by address. This will invalidate all char pointers - * to the specific symbol name. - * @param address The address. - */ - void removeSymbol(uint64_t address); - /** - * @brief Clears the symbol tree. - */ - void clear(); -}; +VX_EXPORT const char* VXBaseInstructionFormatter_FormatInstruction( + VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info); -/////////////////////////////////////////////////////////////////////////////////////////////////// +/** + * @brief Returns a pointer to the current symbol resolver. + * @param ctx The instruction formatter context. + * @return Pointer to the current symbol resolver or @c NULL if no symbol resolver is used. + */ +VX_EXPORT VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( + const VXBaseInstructionFormatterContext *ctx); +/** + * @brief Sets a new symbol resolver. + * @param ctx The instruction formatter context. + * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol + * resolver should be used. + */ +VX_EXPORT void VXBaseInstructionFormatter_SetSymbolResolver( + VXBaseInstructionFormatterContext *ctx, + VXBaseSymbolResolverContext *resolver); + +/** + * @brief Releases an instruction formatter. + * @param ctx The context of the instruction formatter to release. + * The context may no longer used after it has been released. + */ +VX_EXPORT void VXBaseInstructionFormatter_Release( + VXBaseInstructionFormatterContext *ctx); + +/* VXIntelInstructionFormatter ================================================================ */ + +/** + * @brief Creates an Intel-syntax instruction formatter. + * @return @c NULL if it fails, else an Intel instruction formatter context. + * @see VXBaseInstructionFormatter_Release + */ +VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); + +/** + * @brief Creates an Intel-syntax instruction formatter. + * @param resolver The symbol resolver consulted to resolve symbols on formatting. + * @return @c NULL if it fails, else an Intel instruction formatter context. + * @see VXBaseInstructionFormatter_Release + */ +VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( + VXBaseSymbolResolverContext *resolver); + +/* ============================================================================================= */ + +#ifdef __cplusplus } +#endif + +#endif /* _VDE_VXINSTRUCTIONFORMATTERC_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXInternalConfig.h b/VerteronDisassemblerEngine/VXInternalConfig.h similarity index 84% rename from Bindings/C/VXInternalConfig.h rename to VerteronDisassemblerEngine/VXInternalConfig.h index 260f008..536ed0c 100644 --- a/Bindings/C/VXInternalConfig.h +++ b/VerteronDisassemblerEngine/VXInternalConfig.h @@ -39,6 +39,14 @@ # define VX_INLINE extern inline #endif -#define VX_EXPORT +#ifdef VX_BUILD_SHARED /* set by CMake */ +# if defined(_MSC_VER) +# define VX_EXPORT __declspec(dllexport) +# elif defined(__GNUC__) || defined(__clang__) +# define VX_EXPORT __attribute__((dllexport)) +# endif +#else +# define VX_EXPORT +#endif #endif /* _VDE_VXINTERNALCONFIG_H_ */ \ No newline at end of file diff --git a/Bindings/C/VXInternalHelpersC.h b/VerteronDisassemblerEngine/VXInternalHelpers.h similarity index 98% rename from Bindings/C/VXInternalHelpersC.h rename to VerteronDisassemblerEngine/VXInternalHelpers.h index 0c63be2..9e17910 100644 --- a/Bindings/C/VXInternalHelpersC.h +++ b/VerteronDisassemblerEngine/VXInternalHelpers.h @@ -33,8 +33,8 @@ #ifndef _VDE_VXINTERNALHELPERS_H_ #define _VDE_VXINTERNALHELPERS_H_ -#include "VXInstructionDecoderC.h" -#include "VXInstructionFormatterC.h" +#include "VXInstructionDecoder.h" +#include "VXInstructionFormatter.h" #include "VXInternalConfig.h" #include diff --git a/Bindings/C/VXOpcodeTableC.c b/VerteronDisassemblerEngine/VXOpcodeTable.c similarity index 99% rename from Bindings/C/VXOpcodeTableC.c rename to VerteronDisassemblerEngine/VXOpcodeTable.c index c1a90ff..5a38d5e 100644 --- a/Bindings/C/VXOpcodeTableC.c +++ b/VerteronDisassemblerEngine/VXOpcodeTable.c @@ -30,7 +30,7 @@ **************************************************************************************************/ -#include "VXOpcodeTableC.h" +#include "VXOpcodeTable.h" #define VX_INVALID 0 #define VX_NODE(type, n) ((VXOpcodeTreeNode)type << 12 | (n)) diff --git a/VerteronDisassemblerEngine/VXOpcodeTable.h b/VerteronDisassemblerEngine/VXOpcodeTable.h index bf13060..f36cc41 100644 --- a/VerteronDisassemblerEngine/VXOpcodeTable.h +++ b/VerteronDisassemblerEngine/VXOpcodeTable.h @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : + Modifications : athre0z - Last change : 29. October 2014 + Last change : 04. February 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,925 +29,931 @@ * SOFTWARE. **************************************************************************************************/ -#pragma once + +#ifndef _VDE_VXOPCODETABLEC_H_ +#define _VDE_VXOPCODETABLEC_H_ #include -#include +#include -namespace Verteron +#ifdef __cplusplus +extern "C" { +#endif /** * @brief Values that represent an instruction mnemonic. */ -enum class VXInstructionMnemonic : uint16_t +typedef enum _VXInstructionMnemonic /* : uint16_t */ { - /* 000 */ INVALID, - /* 001 */ AAA, - /* 002 */ AAD, - /* 003 */ AAM, - /* 004 */ AAS, - /* 005 */ ADC, - /* 006 */ ADD, - /* 007 */ ADDPD, - /* 008 */ ADDPS, - /* 009 */ ADDSD, - /* 00A */ ADDSS, - /* 00B */ ADDSUBPD, - /* 00C */ ADDSUBPS, - /* 00D */ AESDEC, - /* 00E */ AESDECLAST, - /* 00F */ AESENC, - /* 010 */ AESENCLAST, - /* 011 */ AESIMC, - /* 012 */ AESKEYGENASSIST, - /* 013 */ AND, - /* 014 */ ANDNPD, - /* 015 */ ANDNPS, - /* 016 */ ANDPD, - /* 017 */ ANDPS, - /* 018 */ ARPL, - /* 019 */ BLENDPD, - /* 01A */ BLENDPS, - /* 01B */ BLENDVPD, - /* 01C */ BLENDVPS, - /* 01D */ BOUND, - /* 01E */ BSF, - /* 01F */ BSR, - /* 020 */ BSWAP, - /* 021 */ BT, - /* 022 */ BTC, - /* 023 */ BTR, - /* 024 */ BTS, - /* 025 */ CALL, - /* 026 */ CBW, - /* 027 */ CDQ, - /* 028 */ CDQE, - /* 029 */ CLC, - /* 02A */ CLD, - /* 02B */ CLFLUSH, - /* 02C */ CLGI, - /* 02D */ CLI, - /* 02E */ CLTS, - /* 02F */ CMC, - /* 030 */ CMOVA, - /* 031 */ CMOVAE, - /* 032 */ CMOVB, - /* 033 */ CMOVBE, - /* 034 */ CMOVE, - /* 035 */ CMOVG, - /* 036 */ CMOVGE, - /* 037 */ CMOVL, - /* 038 */ CMOVLE, - /* 039 */ CMOVNE, - /* 03A */ CMOVNO, - /* 03B */ CMOVNP, - /* 03C */ CMOVNS, - /* 03D */ CMOVO, - /* 03E */ CMOVP, - /* 03F */ CMOVS, - /* 040 */ CMP, - /* 041 */ CMPPD, - /* 042 */ CMPPS, - /* 043 */ CMPSB, - /* 044 */ CMPSD, - /* 045 */ CMPSQ, - /* 046 */ CMPSS, - /* 047 */ CMPSW, - /* 048 */ CMPXCHG, - /* 049 */ CMPXCHG16B, - /* 04A */ CMPXCHG8B, - /* 04B */ COMISD, - /* 04C */ COMISS, - /* 04D */ CPUID, - /* 04E */ CQO, - /* 04F */ CRC32, - /* 050 */ CVTDQ2PD, - /* 051 */ CVTDQ2PS, - /* 052 */ CVTPD2DQ, - /* 053 */ CVTPD2PI, - /* 054 */ CVTPD2PS, - /* 055 */ CVTPI2PD, - /* 056 */ CVTPI2PS, - /* 057 */ CVTPS2DQ, - /* 058 */ CVTPS2PD, - /* 059 */ CVTPS2PI, - /* 05A */ CVTSD2SI, - /* 05B */ CVTSD2SS, - /* 05C */ CVTSI2SD, - /* 05D */ CVTSI2SS, - /* 05E */ CVTSS2SD, - /* 05F */ CVTSS2SI, - /* 060 */ CVTTPD2DQ, - /* 061 */ CVTTPD2PI, - /* 062 */ CVTTPS2DQ, - /* 063 */ CVTTPS2PI, - /* 064 */ CVTTSD2SI, - /* 065 */ CVTTSS2SI, - /* 066 */ CWD, - /* 067 */ CWDE, - /* 068 */ DAA, - /* 069 */ DAS, - /* 06A */ DEC, - /* 06B */ DIV, - /* 06C */ DIVPD, - /* 06D */ DIVPS, - /* 06E */ DIVSD, - /* 06F */ DIVSS, - /* 070 */ DPPD, - /* 071 */ DPPS, - /* 072 */ EMMS, - /* 073 */ ENTER, - /* 074 */ EXTRACTPS, - /* 075 */ F2XM1, - /* 076 */ FABS, - /* 077 */ FADD, - /* 078 */ FADDP, - /* 079 */ FBLD, - /* 07A */ FBSTP, - /* 07B */ FCHS, - /* 07C */ FCLEX, - /* 07D */ FCMOVB, - /* 07E */ FCMOVBE, - /* 07F */ FCMOVE, - /* 080 */ FCMOVNB, - /* 081 */ FCMOVNBE, - /* 082 */ FCMOVNE, - /* 083 */ FCMOVNU, - /* 084 */ FCMOVU, - /* 085 */ FCOM, - /* 086 */ FCOM2, - /* 087 */ FCOMI, - /* 088 */ FCOMIP, - /* 089 */ FCOMP, - /* 08A */ FCOMP3, - /* 08B */ FCOMP5, - /* 08C */ FCOMPP, - /* 08D */ FCOS, - /* 08E */ FDECSTP, - /* 08F */ FDIV, - /* 090 */ FDIVP, - /* 091 */ FDIVR, - /* 092 */ FDIVRP, - /* 093 */ FEMMS, - /* 094 */ FFREE, - /* 095 */ FFREEP, - /* 096 */ FIADD, - /* 097 */ FICOM, - /* 098 */ FICOMP, - /* 099 */ FIDIV, - /* 09A */ FIDIVR, - /* 09B */ FILD, - /* 09C */ FIMUL, - /* 09D */ FINCSTP, - /* 09E */ FIST, - /* 09F */ FISTP, - /* 0A0 */ FISTTP, - /* 0A1 */ FISUB, - /* 0A2 */ FISUBR, - /* 0A3 */ FLD, - /* 0A4 */ FLD1, - /* 0A5 */ FLDCW, - /* 0A6 */ FLDENV, - /* 0A7 */ FLDL2E, - /* 0A8 */ FLDL2T, - /* 0A9 */ FLDLG2, - /* 0AA */ FLDLN2, - /* 0AB */ FLDPI, - /* 0AC */ FLDZ, - /* 0AD */ FMUL, - /* 0AE */ FMULP, - /* 0AF */ FNDISI, - /* 0B0 */ FNENI, - /* 0B1 */ FNINIT, - /* 0B2 */ FNOP, - /* 0B3 */ FNSAVE, - /* 0B4 */ FNSETPM, - /* 0B5 */ FNSTCW, - /* 0B6 */ FNSTENV, - /* 0B7 */ FNSTSW, - /* 0B8 */ FPATAN, - /* 0B9 */ FPREM, - /* 0BA */ FPREM1, - /* 0BB */ FPTAN, - /* 0BC */ FRNDINT, - /* 0BD */ FRSTOR, - /* 0BE */ FRSTPM, - /* 0BF */ FSCALE, - /* 0C0 */ FSIN, - /* 0C1 */ FSINCOS, - /* 0C2 */ FSQRT, - /* 0C3 */ FST, - /* 0C4 */ FSTP, - /* 0C5 */ FSTP1, - /* 0C6 */ FSTP8, - /* 0C7 */ FSTP9, - /* 0C8 */ FSUB, - /* 0C9 */ FSUBP, - /* 0CA */ FSUBR, - /* 0CB */ FSUBRP, - /* 0CC */ FTST, - /* 0CD */ FUCOM, - /* 0CE */ FUCOMI, - /* 0CF */ FUCOMIP, - /* 0D0 */ FUCOMP, - /* 0D1 */ FUCOMPP, - /* 0D2 */ FXAM, - /* 0D3 */ FXCH, - /* 0D4 */ FXCH4, - /* 0D5 */ FXCH7, - /* 0D6 */ FXRSTOR, - /* 0D7 */ FXSAVE, - /* 0D8 */ FXTRACT, - /* 0D9 */ FYL2X, - /* 0DA */ FYL2XP1, - /* 0DB */ GETSEC, - /* 0DC */ HADDPD, - /* 0DD */ HADDPS, - /* 0DE */ HLT, - /* 0DF */ HSUBPD, - /* 0E0 */ HSUBPS, - /* 0E1 */ IDIV, - /* 0E2 */ IMUL, - /* 0E3 */ IN, - /* 0E4 */ INC, - /* 0E5 */ INSB, - /* 0E6 */ INSD, - /* 0E7 */ INSERTPS, - /* 0E8 */ INSW, - /* 0E9 */ INT, - /* 0EA */ INT1, - /* 0EB */ INT3, - /* 0EC */ INTO, - /* 0ED */ INVD, - /* 0EE */ INVEPT, - /* 0EF */ INVLPG, - /* 0F0 */ INVLPGA, - /* 0F1 */ INVVPID, - /* 0F2 */ IRETD, - /* 0F3 */ IRETQ, - /* 0F4 */ IRETW, - /* 0F5 */ JA, - /* 0F6 */ JB, - /* 0F7 */ JBE, - /* 0F8 */ JCXZ, - /* 0F9 */ JE, - /* 0FA */ JECXZ, - /* 0FB */ JG, - /* 0FC */ JGE, - /* 0FD */ JL, - /* 0FE */ JLE, - /* 0FF */ JMP, - /* 100 */ JNB, - /* 101 */ JNE, - /* 102 */ JNO, - /* 103 */ JNP, - /* 104 */ JNS, - /* 105 */ JO, - /* 106 */ JP, - /* 107 */ JRCXZ, - /* 108 */ JS, - /* 109 */ LAHF, - /* 10A */ LAR, - /* 10B */ LDDQU, - /* 10C */ LDMXCSR, - /* 10D */ LDS, - /* 10E */ LEA, - /* 10F */ LEAVE, - /* 110 */ LES, - /* 111 */ LFENCE, - /* 112 */ LFS, - /* 113 */ LGDT, - /* 114 */ LGS, - /* 115 */ LIDT, - /* 116 */ LLDT, - /* 117 */ LMSW, - /* 118 */ LOCK, - /* 119 */ LODSB, - /* 11A */ LODSD, - /* 11B */ LODSQ, - /* 11C */ LODSW, - /* 11D */ LOOP, - /* 11E */ LOOPE, - /* 11F */ LOOPNE, - /* 120 */ LSL, - /* 121 */ LSS, - /* 122 */ LTR, - /* 123 */ MASKMOVDQU, - /* 124 */ MASKMOVQ, - /* 125 */ MAXPD, - /* 126 */ MAXPS, - /* 127 */ MAXSD, - /* 128 */ MAXSS, - /* 129 */ MFENCE, - /* 12A */ MINPD, - /* 12B */ MINPS, - /* 12C */ MINSD, - /* 12D */ MINSS, - /* 12E */ MONITOR, - /* 12F */ MONTMUL, - /* 130 */ MOV, - /* 131 */ MOVAPD, - /* 132 */ MOVAPS, - /* 133 */ MOVBE, - /* 134 */ MOVD, - /* 135 */ MOVDDUP, - /* 136 */ MOVDQ2Q, - /* 137 */ MOVDQA, - /* 138 */ MOVDQU, - /* 139 */ MOVHLPS, - /* 13A */ MOVHPD, - /* 13B */ MOVHPS, - /* 13C */ MOVLHPS, - /* 13D */ MOVLPD, - /* 13E */ MOVLPS, - /* 13F */ MOVMSKPD, - /* 140 */ MOVMSKPS, - /* 141 */ MOVNTDQ, - /* 142 */ MOVNTDQA, - /* 143 */ MOVNTI, - /* 144 */ MOVNTPD, - /* 145 */ MOVNTPS, - /* 146 */ MOVNTQ, - /* 147 */ MOVQ, - /* 148 */ MOVQ2DQ, - /* 149 */ MOVSB, - /* 14A */ MOVSD, - /* 14B */ MOVSHDUP, - /* 14C */ MOVSLDUP, - /* 14D */ MOVSQ, - /* 14E */ MOVSS, - /* 14F */ MOVSW, - /* 150 */ MOVSX, - /* 151 */ MOVSXD, - /* 152 */ MOVUPD, - /* 153 */ MOVUPS, - /* 154 */ MOVZX, - /* 155 */ MPSADBW, - /* 156 */ MUL, - /* 157 */ MULPD, - /* 158 */ MULPS, - /* 159 */ MULSD, - /* 15A */ MULSS, - /* 15B */ MWAIT, - /* 15C */ NEG, - /* 15D */ NOP, - /* 15E */ NOT, - /* 15F */ OR, - /* 160 */ ORPD, - /* 161 */ ORPS, - /* 162 */ OUT, - /* 163 */ OUTSB, - /* 164 */ OUTSD, - /* 165 */ OUTSW, - /* 166 */ PABSB, - /* 167 */ PABSD, - /* 168 */ PABSW, - /* 169 */ PACKSSDW, - /* 16A */ PACKSSWB, - /* 16B */ PACKUSDW, - /* 16C */ PACKUSWB, - /* 16D */ PADDB, - /* 16E */ PADDD, - /* 16F */ PADDQ, - /* 170 */ PADDSB, - /* 171 */ PADDSW, - /* 172 */ PADDUSB, - /* 173 */ PADDUSW, - /* 174 */ PADDW, - /* 175 */ PALIGNR, - /* 176 */ PAND, - /* 177 */ PANDN, - /* 178 */ PAUSE, - /* 179 */ PAVGB, - /* 17A */ PAVGUSB, - /* 17B */ PAVGW, - /* 17C */ PBLENDVB, - /* 17D */ PBLENDW, - /* 17E */ PCLMULQDQ, - /* 17F */ PCMPEQB, - /* 180 */ PCMPEQD, - /* 181 */ PCMPEQQ, - /* 182 */ PCMPEQW, - /* 183 */ PCMPESTRI, - /* 184 */ PCMPESTRM, - /* 185 */ PCMPGTB, - /* 186 */ PCMPGTD, - /* 187 */ PCMPGTQ, - /* 188 */ PCMPGTW, - /* 189 */ PCMPISTRI, - /* 18A */ PCMPISTRM, - /* 18B */ PEXTRB, - /* 18C */ PEXTRD, - /* 18D */ PEXTRQ, - /* 18E */ PEXTRW, - /* 18F */ PF2ID, - /* 190 */ PF2IW, - /* 191 */ PFACC, - /* 192 */ PFADD, - /* 193 */ PFCMPEQ, - /* 194 */ PFCMPGE, - /* 195 */ PFCMPGT, - /* 196 */ PFMAX, - /* 197 */ PFMIN, - /* 198 */ PFMUL, - /* 199 */ PFNACC, - /* 19A */ PFPNACC, - /* 19B */ PFRCP, - /* 19C */ PFRCPIT1, - /* 19D */ PFRCPIT2, - /* 19E */ PFRSQIT1, - /* 19F */ PFRSQRT, - /* 1A0 */ PFSUB, - /* 1A1 */ PFSUBR, - /* 1A2 */ PHADDD, - /* 1A3 */ PHADDSW, - /* 1A4 */ PHADDW, - /* 1A5 */ PHMINPOSUW, - /* 1A6 */ PHSUBD, - /* 1A7 */ PHSUBSW, - /* 1A8 */ PHSUBW, - /* 1A9 */ PI2FD, - /* 1AA */ PI2FW, - /* 1AB */ PINSRB, - /* 1AC */ PINSRD, - /* 1AD */ PINSRQ, - /* 1AE */ PINSRW, - /* 1AF */ PMADDUBSW, - /* 1B0 */ PMADDWD, - /* 1B1 */ PMAXSB, - /* 1B2 */ PMAXSD, - /* 1B3 */ PMAXSW, - /* 1B4 */ PMAXUB, - /* 1B5 */ PMAXUD, - /* 1B6 */ PMAXUW, - /* 1B7 */ PMINSB, - /* 1B8 */ PMINSD, - /* 1B9 */ PMINSW, - /* 1BA */ PMINUB, - /* 1BB */ PMINUD, - /* 1BC */ PMINUW, - /* 1BD */ PMOVMSKB, - /* 1BE */ PMOVSXBD, - /* 1BF */ PMOVSXBQ, - /* 1C0 */ PMOVSXBW, - /* 1C1 */ PMOVSXDQ, - /* 1C2 */ PMOVSXWD, - /* 1C3 */ PMOVSXWQ, - /* 1C4 */ PMOVZXBD, - /* 1C5 */ PMOVZXBQ, - /* 1C6 */ PMOVZXBW, - /* 1C7 */ PMOVZXDQ, - /* 1C8 */ PMOVZXWD, - /* 1C9 */ PMOVZXWQ, - /* 1CA */ PMULDQ, - /* 1CB */ PMULHRSW, - /* 1CC */ PMULHRW, - /* 1CD */ PMULHUW, - /* 1CE */ PMULHW, - /* 1CF */ PMULLD, - /* 1D0 */ PMULLW, - /* 1D1 */ PMULUDQ, - /* 1D2 */ POP, - /* 1D3 */ POPA, - /* 1D4 */ POPAD, - /* 1D5 */ POPCNT, - /* 1D6 */ POPFD, - /* 1D7 */ POPFQ, - /* 1D8 */ POPFW, - /* 1D9 */ POR, - /* 1DA */ PREFETCH, - /* 1DB */ PREFETCHNTA, - /* 1DC */ PREFETCHT0, - /* 1DD */ PREFETCHT1, - /* 1DE */ PREFETCHT2, - /* 1DF */ PSADBW, - /* 1E0 */ PSHUFB, - /* 1E1 */ PSHUFD, - /* 1E2 */ PSHUFHW, - /* 1E3 */ PSHUFLW, - /* 1E4 */ PSHUFW, - /* 1E5 */ PSIGNB, - /* 1E6 */ PSIGND, - /* 1E7 */ PSIGNW, - /* 1E8 */ PSLLD, - /* 1E9 */ PSLLDQ, - /* 1EA */ PSLLQ, - /* 1EB */ PSLLW, - /* 1EC */ PSRAD, - /* 1ED */ PSRAW, - /* 1EE */ PSRLD, - /* 1EF */ PSRLDQ, - /* 1F0 */ PSRLQ, - /* 1F1 */ PSRLW, - /* 1F2 */ PSUBB, - /* 1F3 */ PSUBD, - /* 1F4 */ PSUBQ, - /* 1F5 */ PSUBSB, - /* 1F6 */ PSUBSW, - /* 1F7 */ PSUBUSB, - /* 1F8 */ PSUBUSW, - /* 1F9 */ PSUBW, - /* 1FA */ PSWAPD, - /* 1FB */ PTEST, - /* 1FC */ PUNPCKHBW, - /* 1FD */ PUNPCKHDQ, - /* 1FE */ PUNPCKHQDQ, - /* 1FF */ PUNPCKHWD, - /* 200 */ PUNPCKLBW, - /* 201 */ PUNPCKLDQ, - /* 202 */ PUNPCKLQDQ, - /* 203 */ PUNPCKLWD, - /* 204 */ PUSH, - /* 205 */ PUSHA, - /* 206 */ PUSHAD, - /* 207 */ PUSHFD, - /* 208 */ PUSHFQ, - /* 209 */ PUSHFW, - /* 20A */ PXOR, - /* 20B */ RCL, - /* 20C */ RCPPS, - /* 20D */ RCPSS, - /* 20E */ RCR, - /* 20F */ RDMSR, - /* 210 */ RDPMC, - /* 211 */ RDRAND, - /* 212 */ RDTSC, - /* 213 */ RDTSCP, - /* 214 */ REP, - /* 215 */ REPNE, - /* 216 */ RET, - /* 217 */ RETF, - /* 218 */ ROL, - /* 219 */ ROR, - /* 21A */ ROUNDPD, - /* 21B */ ROUNDPS, - /* 21C */ ROUNDSD, - /* 21D */ ROUNDSS, - /* 21E */ RSM, - /* 21F */ RSQRTPS, - /* 220 */ RSQRTSS, - /* 221 */ SAHF, - /* 222 */ SALC, - /* 223 */ SAR, - /* 224 */ SBB, - /* 225 */ SCASB, - /* 226 */ SCASD, - /* 227 */ SCASQ, - /* 228 */ SCASW, - /* 229 */ SETA, - /* 22A */ SETAE, - /* 22B */ SETB, - /* 22C */ SETBE, - /* 22D */ SETE, - /* 22E */ SETG, - /* 22F */ SETGE, - /* 230 */ SETL, - /* 231 */ SETLE, - /* 232 */ SETNE, - /* 233 */ SETNO, - /* 234 */ SETNP, - /* 235 */ SETNS, - /* 236 */ SETO, - /* 237 */ SETP, - /* 238 */ SETS, - /* 239 */ SFENCE, - /* 23A */ SGDT, - /* 23B */ SHL, - /* 23C */ SHLD, - /* 23D */ SHR, - /* 23E */ SHRD, - /* 23F */ SHUFPD, - /* 240 */ SHUFPS, - /* 241 */ SIDT, - /* 242 */ SKINIT, - /* 243 */ SLDT, - /* 244 */ SMSW, - /* 245 */ SQRTPD, - /* 246 */ SQRTPS, - /* 247 */ SQRTSD, - /* 248 */ SQRTSS, - /* 249 */ STC, - /* 24A */ STD, - /* 24B */ STGI, - /* 24C */ STI, - /* 24D */ STMXCSR, - /* 24E */ STOSB, - /* 24F */ STOSD, - /* 250 */ STOSQ, - /* 251 */ STOSW, - /* 252 */ STR, - /* 253 */ SUB, - /* 254 */ SUBPD, - /* 255 */ SUBPS, - /* 256 */ SUBSD, - /* 257 */ SUBSS, - /* 258 */ SWAPGS, - /* 259 */ SYSCALL, - /* 25A */ SYSENTER, - /* 25B */ SYSEXIT, - /* 25C */ SYSRET, - /* 25D */ TEST, - /* 25E */ UCOMISD, - /* 25F */ UCOMISS, - /* 260 */ UD2, - /* 261 */ UNPCKHPD, - /* 262 */ UNPCKHPS, - /* 263 */ UNPCKLPD, - /* 264 */ UNPCKLPS, - /* 265 */ VADDPD, - /* 266 */ VADDPS, - /* 267 */ VADDSD, - /* 268 */ VADDSS, - /* 269 */ VADDSUBPD, - /* 26A */ VADDSUBPS, - /* 26B */ VAESDEC, - /* 26C */ VAESDECLAST, - /* 26D */ VAESENC, - /* 26E */ VAESENCLAST, - /* 26F */ VAESIMC, - /* 270 */ VAESKEYGENASSIST, - /* 271 */ VANDNPD, - /* 272 */ VANDNPS, - /* 273 */ VANDPD, - /* 274 */ VANDPS, - /* 275 */ VBLENDPD, - /* 276 */ VBLENDPS, - /* 277 */ VBLENDVPD, - /* 278 */ VBLENDVPS, - /* 279 */ VBROADCASTSD, - /* 27A */ VBROADCASTSS, - /* 27B */ VCMPPD, - /* 27C */ VCMPPS, - /* 27D */ VCMPSD, - /* 27E */ VCMPSS, - /* 27F */ VCOMISD, - /* 280 */ VCOMISS, - /* 281 */ VCVTDQ2PD, - /* 282 */ VCVTDQ2PS, - /* 283 */ VCVTPD2DQ, - /* 284 */ VCVTPD2PS, - /* 285 */ VCVTPS2DQ, - /* 286 */ VCVTPS2PD, - /* 287 */ VCVTSD2SI, - /* 288 */ VCVTSD2SS, - /* 289 */ VCVTSI2SD, - /* 28A */ VCVTSI2SS, - /* 28B */ VCVTSS2SD, - /* 28C */ VCVTSS2SI, - /* 28D */ VCVTTPD2DQ, - /* 28E */ VCVTTPS2DQ, - /* 28F */ VCVTTSD2SI, - /* 290 */ VCVTTSS2SI, - /* 291 */ VDIVPD, - /* 292 */ VDIVPS, - /* 293 */ VDIVSD, - /* 294 */ VDIVSS, - /* 295 */ VDPPD, - /* 296 */ VDPPS, - /* 297 */ VERR, - /* 298 */ VERW, - /* 299 */ VEXTRACTF128, - /* 29A */ VEXTRACTPS, - /* 29B */ VHADDPD, - /* 29C */ VHADDPS, - /* 29D */ VHSUBPD, - /* 29E */ VHSUBPS, - /* 29F */ VINSERTF128, - /* 2A0 */ VINSERTPS, - /* 2A1 */ VLDDQU, - /* 2A2 */ VMASKMOVDQU, - /* 2A3 */ VMASKMOVPD, - /* 2A4 */ VMASKMOVPS, - /* 2A5 */ VMAXPD, - /* 2A6 */ VMAXPS, - /* 2A7 */ VMAXSD, - /* 2A8 */ VMAXSS, - /* 2A9 */ VMCALL, - /* 2AA */ VMCLEAR, - /* 2AB */ VMINPD, - /* 2AC */ VMINPS, - /* 2AD */ VMINSD, - /* 2AE */ VMINSS, - /* 2AF */ VMLAUNCH, - /* 2B0 */ VMLOAD, - /* 2B1 */ VMMCALL, - /* 2B2 */ VMOVAPD, - /* 2B3 */ VMOVAPS, - /* 2B4 */ VMOVD, - /* 2B5 */ VMOVDDUP, - /* 2B6 */ VMOVDQA, - /* 2B7 */ VMOVDQU, - /* 2B8 */ VMOVHLPS, - /* 2B9 */ VMOVHPD, - /* 2BA */ VMOVHPS, - /* 2BB */ VMOVLHPS, - /* 2BC */ VMOVLPD, - /* 2BD */ VMOVLPS, - /* 2BE */ VMOVMSKPD, - /* 2BF */ VMOVMSKPS, - /* 2C0 */ VMOVNTDQ, - /* 2C1 */ VMOVNTDQA, - /* 2C2 */ VMOVNTPD, - /* 2C3 */ VMOVNTPS, - /* 2C4 */ VMOVQ, - /* 2C5 */ VMOVSD, - /* 2C6 */ VMOVSHDUP, - /* 2C7 */ VMOVSLDUP, - /* 2C8 */ VMOVSS, - /* 2C9 */ VMOVUPD, - /* 2CA */ VMOVUPS, - /* 2CB */ VMPSADBW, - /* 2CC */ VMPTRLD, - /* 2CD */ VMPTRST, - /* 2CE */ VMREAD, - /* 2CF */ VMRESUME, - /* 2D0 */ VMRUN, - /* 2D1 */ VMSAVE, - /* 2D2 */ VMULPD, - /* 2D3 */ VMULPS, - /* 2D4 */ VMULSD, - /* 2D5 */ VMULSS, - /* 2D6 */ VMWRITE, - /* 2D7 */ VMXOFF, - /* 2D8 */ VMXON, - /* 2D9 */ VORPD, - /* 2DA */ VORPS, - /* 2DB */ VPABSB, - /* 2DC */ VPABSD, - /* 2DD */ VPABSW, - /* 2DE */ VPACKSSDW, - /* 2DF */ VPACKSSWB, - /* 2E0 */ VPACKUSDW, - /* 2E1 */ VPACKUSWB, - /* 2E2 */ VPADDB, - /* 2E3 */ VPADDD, - /* 2E4 */ VPADDQ, - /* 2E5 */ VPADDSB, - /* 2E6 */ VPADDSW, - /* 2E7 */ VPADDUSB, - /* 2E8 */ VPADDUSW, - /* 2E9 */ VPADDW, - /* 2EA */ VPALIGNR, - /* 2EB */ VPAND, - /* 2EC */ VPANDN, - /* 2ED */ VPAVGB, - /* 2EE */ VPAVGW, - /* 2EF */ VPBLENDVB, - /* 2F0 */ VPBLENDW, - /* 2F1 */ VPCLMULQDQ, - /* 2F2 */ VPCMPEQB, - /* 2F3 */ VPCMPEQD, - /* 2F4 */ VPCMPEQQ, - /* 2F5 */ VPCMPEQW, - /* 2F6 */ VPCMPESTRI, - /* 2F7 */ VPCMPESTRM, - /* 2F8 */ VPCMPGTB, - /* 2F9 */ VPCMPGTD, - /* 2FA */ VPCMPGTQ, - /* 2FB */ VPCMPGTW, - /* 2FC */ VPCMPISTRI, - /* 2FD */ VPCMPISTRM, - /* 2FE */ VPERM2F128, - /* 2FF */ VPERMILPD, - /* 300 */ VPERMILPS, - /* 301 */ VPEXTRB, - /* 302 */ VPEXTRD, - /* 303 */ VPEXTRQ, - /* 304 */ VPEXTRW, - /* 305 */ VPHADDD, - /* 306 */ VPHADDSW, - /* 307 */ VPHADDW, - /* 308 */ VPHMINPOSUW, - /* 309 */ VPHSUBD, - /* 30A */ VPHSUBSW, - /* 30B */ VPHSUBW, - /* 30C */ VPINSRB, - /* 30D */ VPINSRD, - /* 30E */ VPINSRQ, - /* 30F */ VPINSRW, - /* 310 */ VPMADDUBSW, - /* 311 */ VPMADDWD, - /* 312 */ VPMAXSB, - /* 313 */ VPMAXSD, - /* 314 */ VPMAXSW, - /* 315 */ VPMAXUB, - /* 316 */ VPMAXUD, - /* 317 */ VPMAXUW, - /* 318 */ VPMINSB, - /* 319 */ VPMINSD, - /* 31A */ VPMINSW, - /* 31B */ VPMINUB, - /* 31C */ VPMINUD, - /* 31D */ VPMINUW, - /* 31E */ VPMOVMSKB, - /* 31F */ VPMOVSXBD, - /* 320 */ VPMOVSXBQ, - /* 321 */ VPMOVSXBW, - /* 322 */ VPMOVSXWD, - /* 323 */ VPMOVSXWQ, - /* 324 */ VPMOVZXBD, - /* 325 */ VPMOVZXBQ, - /* 326 */ VPMOVZXBW, - /* 327 */ VPMOVZXDQ, - /* 328 */ VPMOVZXWD, - /* 329 */ VPMOVZXWQ, - /* 32A */ VPMULDQ, - /* 32B */ VPMULHRSW, - /* 32C */ VPMULHUW, - /* 32D */ VPMULHW, - /* 32E */ VPMULLD, - /* 32F */ VPMULLW, - /* 330 */ VPOR, - /* 331 */ VPSADBW, - /* 332 */ VPSHUFB, - /* 333 */ VPSHUFD, - /* 334 */ VPSHUFHW, - /* 335 */ VPSHUFLW, - /* 336 */ VPSIGNB, - /* 337 */ VPSIGND, - /* 338 */ VPSIGNW, - /* 339 */ VPSLLD, - /* 33A */ VPSLLDQ, - /* 33B */ VPSLLQ, - /* 33C */ VPSLLW, - /* 33D */ VPSRAD, - /* 33E */ VPSRAW, - /* 33F */ VPSRLD, - /* 340 */ VPSRLDQ, - /* 341 */ VPSRLQ, - /* 342 */ VPSRLW, - /* 343 */ VPSUBB, - /* 344 */ VPSUBD, - /* 345 */ VPSUBQ, - /* 346 */ VPSUBSB, - /* 347 */ VPSUBSW, - /* 348 */ VPSUBUSB, - /* 349 */ VPSUBUSW, - /* 34A */ VPSUBW, - /* 34B */ VPTEST, - /* 34C */ VPUNPCKHBW, - /* 34D */ VPUNPCKHDQ, - /* 34E */ VPUNPCKHQDQ, - /* 34F */ VPUNPCKHWD, - /* 350 */ VPUNPCKLBW, - /* 351 */ VPUNPCKLDQ, - /* 352 */ VPUNPCKLQDQ, - /* 353 */ VPUNPCKLWD, - /* 354 */ VPXOR, - /* 355 */ VRCPPS, - /* 356 */ VRCPSS, - /* 357 */ VROUNDPD, - /* 358 */ VROUNDPS, - /* 359 */ VROUNDSD, - /* 35A */ VROUNDSS, - /* 35B */ VRSQRTPS, - /* 35C */ VRSQRTSS, - /* 35D */ VSHUFPD, - /* 35E */ VSHUFPS, - /* 35F */ VSQRTPD, - /* 360 */ VSQRTPS, - /* 361 */ VSQRTSD, - /* 362 */ VSQRTSS, - /* 363 */ VSTMXCSR, - /* 364 */ VSUBPD, - /* 365 */ VSUBPS, - /* 366 */ VSUBSD, - /* 367 */ VSUBSS, - /* 368 */ VTESTPD, - /* 369 */ VTESTPS, - /* 36A */ VUCOMISD, - /* 36B */ VUCOMISS, - /* 36C */ VUNPCKHPD, - /* 36D */ VUNPCKHPS, - /* 36E */ VUNPCKLPD, - /* 36F */ VUNPCKLPS, - /* 370 */ VXORPD, - /* 371 */ VXORPS, - /* 372 */ VZEROALL, - /* 373 */ VZEROUPPER, - /* 374 */ WAIT, - /* 375 */ WBINVD, - /* 376 */ WRMSR, - /* 377 */ XADD, - /* 378 */ XCHG, - /* 379 */ XCRYPTCBC, - /* 37A */ XCRYPTCFB, - /* 37B */ XCRYPTCTR, - /* 37C */ XCRYPTECB, - /* 37D */ XCRYPTOFB, - /* 37E */ XGETBV, - /* 37F */ XLATB, - /* 380 */ XOR, - /* 381 */ XORPD, - /* 382 */ XORPS, - /* 383 */ XRSTOR, - /* 384 */ XSAVE, - /* 385 */ XSETBV, - /* 386 */ XSHA1, - /* 387 */ XSHA256, - /* 388 */ XSTORE, -}; + /* 000 */ MNEM_INVALID, + /* 001 */ MNEM_AAA, + /* 002 */ MNEM_AAD, + /* 003 */ MNEM_AAM, + /* 004 */ MNEM_AAS, + /* 005 */ MNEM_ADC, + /* 006 */ MNEM_ADD, + /* 007 */ MNEM_ADDPD, + /* 008 */ MNEM_ADDPS, + /* 009 */ MNEM_ADDSD, + /* 00A */ MNEM_ADDSS, + /* 00B */ MNEM_ADDSUBPD, + /* 00C */ MNEM_ADDSUBPS, + /* 00D */ MNEM_AESDEC, + /* 00E */ MNEM_AESDECLAST, + /* 00F */ MNEM_AESENC, + /* 010 */ MNEM_AESENCLAST, + /* 011 */ MNEM_AESIMC, + /* 012 */ MNEM_AESKEYGENASSIST, + /* 013 */ MNEM_AND, + /* 014 */ MNEM_ANDNPD, + /* 015 */ MNEM_ANDNPS, + /* 016 */ MNEM_ANDPD, + /* 017 */ MNEM_ANDPS, + /* 018 */ MNEM_ARPL, + /* 019 */ MNEM_BLENDPD, + /* 01A */ MNEM_BLENDPS, + /* 01B */ MNEM_BLENDVPD, + /* 01C */ MNEM_BLENDVPS, + /* 01D */ MNEM_BOUND, + /* 01E */ MNEM_BSF, + /* 01F */ MNEM_BSR, + /* 020 */ MNEM_BSWAP, + /* 021 */ MNEM_BT, + /* 022 */ MNEM_BTC, + /* 023 */ MNEM_BTR, + /* 024 */ MNEM_BTS, + /* 025 */ MNEM_CALL, + /* 026 */ MNEM_CBW, + /* 027 */ MNEM_CDQ, + /* 028 */ MNEM_CDQE, + /* 029 */ MNEM_CLC, + /* 02A */ MNEM_CLD, + /* 02B */ MNEM_CLFLUSH, + /* 02C */ MNEM_CLGI, + /* 02D */ MNEM_CLI, + /* 02E */ MNEM_CLTS, + /* 02F */ MNEM_CMC, + /* 030 */ MNEM_CMOVA, + /* 031 */ MNEM_CMOVAE, + /* 032 */ MNEM_CMOVB, + /* 033 */ MNEM_CMOVBE, + /* 034 */ MNEM_CMOVE, + /* 035 */ MNEM_CMOVG, + /* 036 */ MNEM_CMOVGE, + /* 037 */ MNEM_CMOVL, + /* 038 */ MNEM_CMOVLE, + /* 039 */ MNEM_CMOVNE, + /* 03A */ MNEM_CMOVNO, + /* 03B */ MNEM_CMOVNP, + /* 03C */ MNEM_CMOVNS, + /* 03D */ MNEM_CMOVO, + /* 03E */ MNEM_CMOVP, + /* 03F */ MNEM_CMOVS, + /* 040 */ MNEM_CMP, + /* 041 */ MNEM_CMPPD, + /* 042 */ MNEM_CMPPS, + /* 043 */ MNEM_CMPSB, + /* 044 */ MNEM_CMPSD, + /* 045 */ MNEM_CMPSQ, + /* 046 */ MNEM_CMPSS, + /* 047 */ MNEM_CMPSW, + /* 048 */ MNEM_CMPXCHG, + /* 049 */ MNEM_CMPXCHG16B, + /* 04A */ MNEM_CMPXCHG8B, + /* 04B */ MNEM_COMISD, + /* 04C */ MNEM_COMISS, + /* 04D */ MNEM_CPUID, + /* 04E */ MNEM_CQO, + /* 04F */ MNEM_CRC32, + /* 050 */ MNEM_CVTDQ2PD, + /* 051 */ MNEM_CVTDQ2PS, + /* 052 */ MNEM_CVTPD2DQ, + /* 053 */ MNEM_CVTPD2PI, + /* 054 */ MNEM_CVTPD2PS, + /* 055 */ MNEM_CVTPI2PD, + /* 056 */ MNEM_CVTPI2PS, + /* 057 */ MNEM_CVTPS2DQ, + /* 058 */ MNEM_CVTPS2PD, + /* 059 */ MNEM_CVTPS2PI, + /* 05A */ MNEM_CVTSD2SI, + /* 05B */ MNEM_CVTSD2SS, + /* 05C */ MNEM_CVTSI2SD, + /* 05D */ MNEM_CVTSI2SS, + /* 05E */ MNEM_CVTSS2SD, + /* 05F */ MNEM_CVTSS2SI, + /* 060 */ MNEM_CVTTPD2DQ, + /* 061 */ MNEM_CVTTPD2PI, + /* 062 */ MNEM_CVTTPS2DQ, + /* 063 */ MNEM_CVTTPS2PI, + /* 064 */ MNEM_CVTTSD2SI, + /* 065 */ MNEM_CVTTSS2SI, + /* 066 */ MNEM_CWD, + /* 067 */ MNEM_CWDE, + /* 068 */ MNEM_DAA, + /* 069 */ MNEM_DAS, + /* 06A */ MNEM_DEC, + /* 06B */ MNEM_DIV, + /* 06C */ MNEM_DIVPD, + /* 06D */ MNEM_DIVPS, + /* 06E */ MNEM_DIVSD, + /* 06F */ MNEM_DIVSS, + /* 070 */ MNEM_DPPD, + /* 071 */ MNEM_DPPS, + /* 072 */ MNEM_EMMS, + /* 073 */ MNEM_ENTER, + /* 074 */ MNEM_EXTRACTPS, + /* 075 */ MNEM_F2XM1, + /* 076 */ MNEM_FABS, + /* 077 */ MNEM_FADD, + /* 078 */ MNEM_FADDP, + /* 079 */ MNEM_FBLD, + /* 07A */ MNEM_FBSTP, + /* 07B */ MNEM_FCHS, + /* 07C */ MNEM_FCLEX, + /* 07D */ MNEM_FCMOVB, + /* 07E */ MNEM_FCMOVBE, + /* 07F */ MNEM_FCMOVE, + /* 080 */ MNEM_FCMOVNB, + /* 081 */ MNEM_FCMOVNBE, + /* 082 */ MNEM_FCMOVNE, + /* 083 */ MNEM_FCMOVNU, + /* 084 */ MNEM_FCMOVU, + /* 085 */ MNEM_FCOM, + /* 086 */ MNEM_FCOM2, + /* 087 */ MNEM_FCOMI, + /* 088 */ MNEM_FCOMIP, + /* 089 */ MNEM_FCOMP, + /* 08A */ MNEM_FCOMP3, + /* 08B */ MNEM_FCOMP5, + /* 08C */ MNEM_FCOMPP, + /* 08D */ MNEM_FCOS, + /* 08E */ MNEM_FDECSTP, + /* 08F */ MNEM_FDIV, + /* 090 */ MNEM_FDIVP, + /* 091 */ MNEM_FDIVR, + /* 092 */ MNEM_FDIVRP, + /* 093 */ MNEM_FEMMS, + /* 094 */ MNEM_FFREE, + /* 095 */ MNEM_FFREEP, + /* 096 */ MNEM_FIADD, + /* 097 */ MNEM_FICOM, + /* 098 */ MNEM_FICOMP, + /* 099 */ MNEM_FIDIV, + /* 09A */ MNEM_FIDIVR, + /* 09B */ MNEM_FILD, + /* 09C */ MNEM_FIMUL, + /* 09D */ MNEM_FINCSTP, + /* 09E */ MNEM_FIST, + /* 09F */ MNEM_FISTP, + /* 0A0 */ MNEM_FISTTP, + /* 0A1 */ MNEM_FISUB, + /* 0A2 */ MNEM_FISUBR, + /* 0A3 */ MNEM_FLD, + /* 0A4 */ MNEM_FLD1, + /* 0A5 */ MNEM_FLDCW, + /* 0A6 */ MNEM_FLDENV, + /* 0A7 */ MNEM_FLDL2E, + /* 0A8 */ MNEM_FLDL2T, + /* 0A9 */ MNEM_FLDLG2, + /* 0AA */ MNEM_FLDLN2, + /* 0AB */ MNEM_FLDPI, + /* 0AC */ MNEM_FLDZ, + /* 0AD */ MNEM_FMUL, + /* 0AE */ MNEM_FMULP, + /* 0AF */ MNEM_FNDISI, + /* 0B0 */ MNEM_FNENI, + /* 0B1 */ MNEM_FNINIT, + /* 0B2 */ MNEM_FNOP, + /* 0B3 */ MNEM_FNSAVE, + /* 0B4 */ MNEM_FNSETPM, + /* 0B5 */ MNEM_FNSTCW, + /* 0B6 */ MNEM_FNSTENV, + /* 0B7 */ MNEM_FNSTSW, + /* 0B8 */ MNEM_FPATAN, + /* 0B9 */ MNEM_FPREM, + /* 0BA */ MNEM_FPREM1, + /* 0BB */ MNEM_FPTAN, + /* 0BC */ MNEM_FRNDINT, + /* 0BD */ MNEM_FRSTOR, + /* 0BE */ MNEM_FRSTPM, + /* 0BF */ MNEM_FSCALE, + /* 0C0 */ MNEM_FSIN, + /* 0C1 */ MNEM_FSINCOS, + /* 0C2 */ MNEM_FSQRT, + /* 0C3 */ MNEM_FST, + /* 0C4 */ MNEM_FSTP, + /* 0C5 */ MNEM_FSTP1, + /* 0C6 */ MNEM_FSTP8, + /* 0C7 */ MNEM_FSTP9, + /* 0C8 */ MNEM_FSUB, + /* 0C9 */ MNEM_FSUBP, + /* 0CA */ MNEM_FSUBR, + /* 0CB */ MNEM_FSUBRP, + /* 0CC */ MNEM_FTST, + /* 0CD */ MNEM_FUCOM, + /* 0CE */ MNEM_FUCOMI, + /* 0CF */ MNEM_FUCOMIP, + /* 0D0 */ MNEM_FUCOMP, + /* 0D1 */ MNEM_FUCOMPP, + /* 0D2 */ MNEM_FXAM, + /* 0D3 */ MNEM_FXCH, + /* 0D4 */ MNEM_FXCH4, + /* 0D5 */ MNEM_FXCH7, + /* 0D6 */ MNEM_FXRSTOR, + /* 0D7 */ MNEM_FXSAVE, + /* 0D8 */ MNEM_FXTRACT, + /* 0D9 */ MNEM_FYL2X, + /* 0DA */ MNEM_FYL2XP1, + /* 0DB */ MNEM_GETSEC, + /* 0DC */ MNEM_HADDPD, + /* 0DD */ MNEM_HADDPS, + /* 0DE */ MNEM_HLT, + /* 0DF */ MNEM_HSUBPD, + /* 0E0 */ MNEM_HSUBPS, + /* 0E1 */ MNEM_IDIV, + /* 0E2 */ MNEM_IMUL, + /* 0E3 */ MNEM_IN, + /* 0E4 */ MNEM_INC, + /* 0E5 */ MNEM_INSB, + /* 0E6 */ MNEM_INSD, + /* 0E7 */ MNEM_INSERTPS, + /* 0E8 */ MNEM_INSW, + /* 0E9 */ MNEM_INT, + /* 0EA */ MNEM_INT1, + /* 0EB */ MNEM_INT3, + /* 0EC */ MNEM_INTO, + /* 0ED */ MNEM_INVD, + /* 0EE */ MNEM_INVEPT, + /* 0EF */ MNEM_INVLPG, + /* 0F0 */ MNEM_INVLPGA, + /* 0F1 */ MNEM_INVVPID, + /* 0F2 */ MNEM_IRETD, + /* 0F3 */ MNEM_IRETQ, + /* 0F4 */ MNEM_IRETW, + /* 0F5 */ MNEM_JA, + /* 0F6 */ MNEM_JB, + /* 0F7 */ MNEM_JBE, + /* 0F8 */ MNEM_JCXZ, + /* 0F9 */ MNEM_JE, + /* 0FA */ MNEM_JECXZ, + /* 0FB */ MNEM_JG, + /* 0FC */ MNEM_JGE, + /* 0FD */ MNEM_JL, + /* 0FE */ MNEM_JLE, + /* 0FF */ MNEM_JMP, + /* 100 */ MNEM_JNB, + /* 101 */ MNEM_JNE, + /* 102 */ MNEM_JNO, + /* 103 */ MNEM_JNP, + /* 104 */ MNEM_JNS, + /* 105 */ MNEM_JO, + /* 106 */ MNEM_JP, + /* 107 */ MNEM_JRCXZ, + /* 108 */ MNEM_JS, + /* 109 */ MNEM_LAHF, + /* 10A */ MNEM_LAR, + /* 10B */ MNEM_LDDQU, + /* 10C */ MNEM_LDMXCSR, + /* 10D */ MNEM_LDS, + /* 10E */ MNEM_LEA, + /* 10F */ MNEM_LEAVE, + /* 110 */ MNEM_LES, + /* 111 */ MNEM_LFENCE, + /* 112 */ MNEM_LFS, + /* 113 */ MNEM_LGDT, + /* 114 */ MNEM_LGS, + /* 115 */ MNEM_LIDT, + /* 116 */ MNEM_LLDT, + /* 117 */ MNEM_LMSW, + /* 118 */ MNEM_LOCK, + /* 119 */ MNEM_LODSB, + /* 11A */ MNEM_LODSD, + /* 11B */ MNEM_LODSQ, + /* 11C */ MNEM_LODSW, + /* 11D */ MNEM_LOOP, + /* 11E */ MNEM_LOOPE, + /* 11F */ MNEM_LOOPNE, + /* 120 */ MNEM_LSL, + /* 121 */ MNEM_LSS, + /* 122 */ MNEM_LTR, + /* 123 */ MNEM_MASKMOVDQU, + /* 124 */ MNEM_MASKMOVQ, + /* 125 */ MNEM_MAXPD, + /* 126 */ MNEM_MAXPS, + /* 127 */ MNEM_MAXSD, + /* 128 */ MNEM_MAXSS, + /* 129 */ MNEM_MFENCE, + /* 12A */ MNEM_MINPD, + /* 12B */ MNEM_MINPS, + /* 12C */ MNEM_MINSD, + /* 12D */ MNEM_MINSS, + /* 12E */ MNEM_MONITOR, + /* 12F */ MNEM_MONTMUL, + /* 130 */ MNEM_MOV, + /* 131 */ MNEM_MOVAPD, + /* 132 */ MNEM_MOVAPS, + /* 133 */ MNEM_MOVBE, + /* 134 */ MNEM_MOVD, + /* 135 */ MNEM_MOVDDUP, + /* 136 */ MNEM_MOVDQ2Q, + /* 137 */ MNEM_MOVDQA, + /* 138 */ MNEM_MOVDQU, + /* 139 */ MNEM_MOVHLPS, + /* 13A */ MNEM_MOVHPD, + /* 13B */ MNEM_MOVHPS, + /* 13C */ MNEM_MOVLHPS, + /* 13D */ MNEM_MOVLPD, + /* 13E */ MNEM_MOVLPS, + /* 13F */ MNEM_MOVMSKPD, + /* 140 */ MNEM_MOVMSKPS, + /* 141 */ MNEM_MOVNTDQ, + /* 142 */ MNEM_MOVNTDQA, + /* 143 */ MNEM_MOVNTI, + /* 144 */ MNEM_MOVNTPD, + /* 145 */ MNEM_MOVNTPS, + /* 146 */ MNEM_MOVNTQ, + /* 147 */ MNEM_MOVQ, + /* 148 */ MNEM_MOVQ2DQ, + /* 149 */ MNEM_MOVSB, + /* 14A */ MNEM_MOVSD, + /* 14B */ MNEM_MOVSHDUP, + /* 14C */ MNEM_MOVSLDUP, + /* 14D */ MNEM_MOVSQ, + /* 14E */ MNEM_MOVSS, + /* 14F */ MNEM_MOVSW, + /* 150 */ MNEM_MOVSX, + /* 151 */ MNEM_MOVSXD, + /* 152 */ MNEM_MOVUPD, + /* 153 */ MNEM_MOVUPS, + /* 154 */ MNEM_MOVZX, + /* 155 */ MNEM_MPSADBW, + /* 156 */ MNEM_MUL, + /* 157 */ MNEM_MULPD, + /* 158 */ MNEM_MULPS, + /* 159 */ MNEM_MULSD, + /* 15A */ MNEM_MULSS, + /* 15B */ MNEM_MWAIT, + /* 15C */ MNEM_NEG, + /* 15D */ MNEM_NOP, + /* 15E */ MNEM_NOT, + /* 15F */ MNEM_OR, + /* 160 */ MNEM_ORPD, + /* 161 */ MNEM_ORPS, + /* 162 */ MNEM_OUT, + /* 163 */ MNEM_OUTSB, + /* 164 */ MNEM_OUTSD, + /* 165 */ MNEM_OUTSW, + /* 166 */ MNEM_PABSB, + /* 167 */ MNEM_PABSD, + /* 168 */ MNEM_PABSW, + /* 169 */ MNEM_PACKSSDW, + /* 16A */ MNEM_PACKSSWB, + /* 16B */ MNEM_PACKUSDW, + /* 16C */ MNEM_PACKUSWB, + /* 16D */ MNEM_PADDB, + /* 16E */ MNEM_PADDD, + /* 16F */ MNEM_PADDQ, + /* 170 */ MNEM_PADDSB, + /* 171 */ MNEM_PADDSW, + /* 172 */ MNEM_PADDUSB, + /* 173 */ MNEM_PADDUSW, + /* 174 */ MNEM_PADDW, + /* 175 */ MNEM_PALIGNR, + /* 176 */ MNEM_PAND, + /* 177 */ MNEM_PANDN, + /* 178 */ MNEM_PAUSE, + /* 179 */ MNEM_PAVGB, + /* 17A */ MNEM_PAVGUSB, + /* 17B */ MNEM_PAVGW, + /* 17C */ MNEM_PBLENDVB, + /* 17D */ MNEM_PBLENDW, + /* 17E */ MNEM_PCLMULQDQ, + /* 17F */ MNEM_PCMPEQB, + /* 180 */ MNEM_PCMPEQD, + /* 181 */ MNEM_PCMPEQQ, + /* 182 */ MNEM_PCMPEQW, + /* 183 */ MNEM_PCMPESTRI, + /* 184 */ MNEM_PCMPESTRM, + /* 185 */ MNEM_PCMPGTB, + /* 186 */ MNEM_PCMPGTD, + /* 187 */ MNEM_PCMPGTQ, + /* 188 */ MNEM_PCMPGTW, + /* 189 */ MNEM_PCMPISTRI, + /* 18A */ MNEM_PCMPISTRM, + /* 18B */ MNEM_PEXTRB, + /* 18C */ MNEM_PEXTRD, + /* 18D */ MNEM_PEXTRQ, + /* 18E */ MNEM_PEXTRW, + /* 18F */ MNEM_PF2ID, + /* 190 */ MNEM_PF2IW, + /* 191 */ MNEM_PFACC, + /* 192 */ MNEM_PFADD, + /* 193 */ MNEM_PFCMPEQ, + /* 194 */ MNEM_PFCMPGE, + /* 195 */ MNEM_PFCMPGT, + /* 196 */ MNEM_PFMAX, + /* 197 */ MNEM_PFMIN, + /* 198 */ MNEM_PFMUL, + /* 199 */ MNEM_PFNACC, + /* 19A */ MNEM_PFPNACC, + /* 19B */ MNEM_PFRCP, + /* 19C */ MNEM_PFRCPIT1, + /* 19D */ MNEM_PFRCPIT2, + /* 19E */ MNEM_PFRSQIT1, + /* 19F */ MNEM_PFRSQRT, + /* 1A0 */ MNEM_PFSUB, + /* 1A1 */ MNEM_PFSUBR, + /* 1A2 */ MNEM_PHADDD, + /* 1A3 */ MNEM_PHADDSW, + /* 1A4 */ MNEM_PHADDW, + /* 1A5 */ MNEM_PHMINPOSUW, + /* 1A6 */ MNEM_PHSUBD, + /* 1A7 */ MNEM_PHSUBSW, + /* 1A8 */ MNEM_PHSUBW, + /* 1A9 */ MNEM_PI2FD, + /* 1AA */ MNEM_PI2FW, + /* 1AB */ MNEM_PINSRB, + /* 1AC */ MNEM_PINSRD, + /* 1AD */ MNEM_PINSRQ, + /* 1AE */ MNEM_PINSRW, + /* 1AF */ MNEM_PMADDUBSW, + /* 1B0 */ MNEM_PMADDWD, + /* 1B1 */ MNEM_PMAXSB, + /* 1B2 */ MNEM_PMAXSD, + /* 1B3 */ MNEM_PMAXSW, + /* 1B4 */ MNEM_PMAXUB, + /* 1B5 */ MNEM_PMAXUD, + /* 1B6 */ MNEM_PMAXUW, + /* 1B7 */ MNEM_PMINSB, + /* 1B8 */ MNEM_PMINSD, + /* 1B9 */ MNEM_PMINSW, + /* 1BA */ MNEM_PMINUB, + /* 1BB */ MNEM_PMINUD, + /* 1BC */ MNEM_PMINUW, + /* 1BD */ MNEM_PMOVMSKB, + /* 1BE */ MNEM_PMOVSXBD, + /* 1BF */ MNEM_PMOVSXBQ, + /* 1C0 */ MNEM_PMOVSXBW, + /* 1C1 */ MNEM_PMOVSXDQ, + /* 1C2 */ MNEM_PMOVSXWD, + /* 1C3 */ MNEM_PMOVSXWQ, + /* 1C4 */ MNEM_PMOVZXBD, + /* 1C5 */ MNEM_PMOVZXBQ, + /* 1C6 */ MNEM_PMOVZXBW, + /* 1C7 */ MNEM_PMOVZXDQ, + /* 1C8 */ MNEM_PMOVZXWD, + /* 1C9 */ MNEM_PMOVZXWQ, + /* 1CA */ MNEM_PMULDQ, + /* 1CB */ MNEM_PMULHRSW, + /* 1CC */ MNEM_PMULHRW, + /* 1CD */ MNEM_PMULHUW, + /* 1CE */ MNEM_PMULHW, + /* 1CF */ MNEM_PMULLD, + /* 1D0 */ MNEM_PMULLW, + /* 1D1 */ MNEM_PMULUDQ, + /* 1D2 */ MNEM_POP, + /* 1D3 */ MNEM_POPA, + /* 1D4 */ MNEM_POPAD, + /* 1D5 */ MNEM_POPCNT, + /* 1D6 */ MNEM_POPFD, + /* 1D7 */ MNEM_POPFQ, + /* 1D8 */ MNEM_POPFW, + /* 1D9 */ MNEM_POR, + /* 1DA */ MNEM_PREFETCH, + /* 1DB */ MNEM_PREFETCHNTA, + /* 1DC */ MNEM_PREFETCHT0, + /* 1DD */ MNEM_PREFETCHT1, + /* 1DE */ MNEM_PREFETCHT2, + /* 1DF */ MNEM_PSADBW, + /* 1E0 */ MNEM_PSHUFB, + /* 1E1 */ MNEM_PSHUFD, + /* 1E2 */ MNEM_PSHUFHW, + /* 1E3 */ MNEM_PSHUFLW, + /* 1E4 */ MNEM_PSHUFW, + /* 1E5 */ MNEM_PSIGNB, + /* 1E6 */ MNEM_PSIGND, + /* 1E7 */ MNEM_PSIGNW, + /* 1E8 */ MNEM_PSLLD, + /* 1E9 */ MNEM_PSLLDQ, + /* 1EA */ MNEM_PSLLQ, + /* 1EB */ MNEM_PSLLW, + /* 1EC */ MNEM_PSRAD, + /* 1ED */ MNEM_PSRAW, + /* 1EE */ MNEM_PSRLD, + /* 1EF */ MNEM_PSRLDQ, + /* 1F0 */ MNEM_PSRLQ, + /* 1F1 */ MNEM_PSRLW, + /* 1F2 */ MNEM_PSUBB, + /* 1F3 */ MNEM_PSUBD, + /* 1F4 */ MNEM_PSUBQ, + /* 1F5 */ MNEM_PSUBSB, + /* 1F6 */ MNEM_PSUBSW, + /* 1F7 */ MNEM_PSUBUSB, + /* 1F8 */ MNEM_PSUBUSW, + /* 1F9 */ MNEM_PSUBW, + /* 1FA */ MNEM_PSWAPD, + /* 1FB */ MNEM_PTEST, + /* 1FC */ MNEM_PUNPCKHBW, + /* 1FD */ MNEM_PUNPCKHDQ, + /* 1FE */ MNEM_PUNPCKHQDQ, + /* 1FF */ MNEM_PUNPCKHWD, + /* 200 */ MNEM_PUNPCKLBW, + /* 201 */ MNEM_PUNPCKLDQ, + /* 202 */ MNEM_PUNPCKLQDQ, + /* 203 */ MNEM_PUNPCKLWD, + /* 204 */ MNEM_PUSH, + /* 205 */ MNEM_PUSHA, + /* 206 */ MNEM_PUSHAD, + /* 207 */ MNEM_PUSHFD, + /* 208 */ MNEM_PUSHFQ, + /* 209 */ MNEM_PUSHFW, + /* 20A */ MNEM_PXOR, + /* 20B */ MNEM_RCL, + /* 20C */ MNEM_RCPPS, + /* 20D */ MNEM_RCPSS, + /* 20E */ MNEM_RCR, + /* 20F */ MNEM_RDMSR, + /* 210 */ MNEM_RDPMC, + /* 211 */ MNEM_RDRAND, + /* 212 */ MNEM_RDTSC, + /* 213 */ MNEM_RDTSCP, + /* 214 */ MNEM_REP, + /* 215 */ MNEM_REPNE, + /* 216 */ MNEM_RET, + /* 217 */ MNEM_RETF, + /* 218 */ MNEM_ROL, + /* 219 */ MNEM_ROR, + /* 21A */ MNEM_ROUNDPD, + /* 21B */ MNEM_ROUNDPS, + /* 21C */ MNEM_ROUNDSD, + /* 21D */ MNEM_ROUNDSS, + /* 21E */ MNEM_RSM, + /* 21F */ MNEM_RSQRTPS, + /* 220 */ MNEM_RSQRTSS, + /* 221 */ MNEM_SAHF, + /* 222 */ MNEM_SALC, + /* 223 */ MNEM_SAR, + /* 224 */ MNEM_SBB, + /* 225 */ MNEM_SCASB, + /* 226 */ MNEM_SCASD, + /* 227 */ MNEM_SCASQ, + /* 228 */ MNEM_SCASW, + /* 229 */ MNEM_SETA, + /* 22A */ MNEM_SETAE, + /* 22B */ MNEM_SETB, + /* 22C */ MNEM_SETBE, + /* 22D */ MNEM_SETE, + /* 22E */ MNEM_SETG, + /* 22F */ MNEM_SETGE, + /* 230 */ MNEM_SETL, + /* 231 */ MNEM_SETLE, + /* 232 */ MNEM_SETNE, + /* 233 */ MNEM_SETNO, + /* 234 */ MNEM_SETNP, + /* 235 */ MNEM_SETNS, + /* 236 */ MNEM_SETO, + /* 237 */ MNEM_SETP, + /* 238 */ MNEM_SETS, + /* 239 */ MNEM_SFENCE, + /* 23A */ MNEM_SGDT, + /* 23B */ MNEM_SHL, + /* 23C */ MNEM_SHLD, + /* 23D */ MNEM_SHR, + /* 23E */ MNEM_SHRD, + /* 23F */ MNEM_SHUFPD, + /* 240 */ MNEM_SHUFPS, + /* 241 */ MNEM_SIDT, + /* 242 */ MNEM_SKINIT, + /* 243 */ MNEM_SLDT, + /* 244 */ MNEM_SMSW, + /* 245 */ MNEM_SQRTPD, + /* 246 */ MNEM_SQRTPS, + /* 247 */ MNEM_SQRTSD, + /* 248 */ MNEM_SQRTSS, + /* 249 */ MNEM_STC, + /* 24A */ MNEM_STD, + /* 24B */ MNEM_STGI, + /* 24C */ MNEM_STI, + /* 24D */ MNEM_STMXCSR, + /* 24E */ MNEM_STOSB, + /* 24F */ MNEM_STOSD, + /* 250 */ MNEM_STOSQ, + /* 251 */ MNEM_STOSW, + /* 252 */ MNEM_STR, + /* 253 */ MNEM_SUB, + /* 254 */ MNEM_SUBPD, + /* 255 */ MNEM_SUBPS, + /* 256 */ MNEM_SUBSD, + /* 257 */ MNEM_SUBSS, + /* 258 */ MNEM_SWAPGS, + /* 259 */ MNEM_SYSCALL, + /* 25A */ MNEM_SYSENTER, + /* 25B */ MNEM_SYSEXIT, + /* 25C */ MNEM_SYSRET, + /* 25D */ MNEM_TEST, + /* 25E */ MNEM_UCOMISD, + /* 25F */ MNEM_UCOMISS, + /* 260 */ MNEM_UD2, + /* 261 */ MNEM_UNPCKHPD, + /* 262 */ MNEM_UNPCKHPS, + /* 263 */ MNEM_UNPCKLPD, + /* 264 */ MNEM_UNPCKLPS, + /* 265 */ MNEM_VADDPD, + /* 266 */ MNEM_VADDPS, + /* 267 */ MNEM_VADDSD, + /* 268 */ MNEM_VADDSS, + /* 269 */ MNEM_VADDSUBPD, + /* 26A */ MNEM_VADDSUBPS, + /* 26B */ MNEM_VAESDEC, + /* 26C */ MNEM_VAESDECLAST, + /* 26D */ MNEM_VAESENC, + /* 26E */ MNEM_VAESENCLAST, + /* 26F */ MNEM_VAESIMC, + /* 270 */ MNEM_VAESKEYGENASSIST, + /* 271 */ MNEM_VANDNPD, + /* 272 */ MNEM_VANDNPS, + /* 273 */ MNEM_VANDPD, + /* 274 */ MNEM_VANDPS, + /* 275 */ MNEM_VBLENDPD, + /* 276 */ MNEM_VBLENDPS, + /* 277 */ MNEM_VBLENDVPD, + /* 278 */ MNEM_VBLENDVPS, + /* 279 */ MNEM_VBROADCASTSD, + /* 27A */ MNEM_VBROADCASTSS, + /* 27B */ MNEM_VCMPPD, + /* 27C */ MNEM_VCMPPS, + /* 27D */ MNEM_VCMPSD, + /* 27E */ MNEM_VCMPSS, + /* 27F */ MNEM_VCOMISD, + /* 280 */ MNEM_VCOMISS, + /* 281 */ MNEM_VCVTDQ2PD, + /* 282 */ MNEM_VCVTDQ2PS, + /* 283 */ MNEM_VCVTPD2DQ, + /* 284 */ MNEM_VCVTPD2PS, + /* 285 */ MNEM_VCVTPS2DQ, + /* 286 */ MNEM_VCVTPS2PD, + /* 287 */ MNEM_VCVTSD2SI, + /* 288 */ MNEM_VCVTSD2SS, + /* 289 */ MNEM_VCVTSI2SD, + /* 28A */ MNEM_VCVTSI2SS, + /* 28B */ MNEM_VCVTSS2SD, + /* 28C */ MNEM_VCVTSS2SI, + /* 28D */ MNEM_VCVTTPD2DQ, + /* 28E */ MNEM_VCVTTPS2DQ, + /* 28F */ MNEM_VCVTTSD2SI, + /* 290 */ MNEM_VCVTTSS2SI, + /* 291 */ MNEM_VDIVPD, + /* 292 */ MNEM_VDIVPS, + /* 293 */ MNEM_VDIVSD, + /* 294 */ MNEM_VDIVSS, + /* 295 */ MNEM_VDPPD, + /* 296 */ MNEM_VDPPS, + /* 297 */ MNEM_VERR, + /* 298 */ MNEM_VERW, + /* 299 */ MNEM_VEXTRACTF128, + /* 29A */ MNEM_VEXTRACTPS, + /* 29B */ MNEM_VHADDPD, + /* 29C */ MNEM_VHADDPS, + /* 29D */ MNEM_VHSUBPD, + /* 29E */ MNEM_VHSUBPS, + /* 29F */ MNEM_VINSERTF128, + /* 2A0 */ MNEM_VINSERTPS, + /* 2A1 */ MNEM_VLDDQU, + /* 2A2 */ MNEM_VMASKMOVDQU, + /* 2A3 */ MNEM_VMASKMOVPD, + /* 2A4 */ MNEM_VMASKMOVPS, + /* 2A5 */ MNEM_VMAXPD, + /* 2A6 */ MNEM_VMAXPS, + /* 2A7 */ MNEM_VMAXSD, + /* 2A8 */ MNEM_VMAXSS, + /* 2A9 */ MNEM_VMCALL, + /* 2AA */ MNEM_VMCLEAR, + /* 2AB */ MNEM_VMINPD, + /* 2AC */ MNEM_VMINPS, + /* 2AD */ MNEM_VMINSD, + /* 2AE */ MNEM_VMINSS, + /* 2AF */ MNEM_VMLAUNCH, + /* 2B0 */ MNEM_VMLOAD, + /* 2B1 */ MNEM_VMMCALL, + /* 2B2 */ MNEM_VMOVAPD, + /* 2B3 */ MNEM_VMOVAPS, + /* 2B4 */ MNEM_VMOVD, + /* 2B5 */ MNEM_VMOVDDUP, + /* 2B6 */ MNEM_VMOVDQA, + /* 2B7 */ MNEM_VMOVDQU, + /* 2B8 */ MNEM_VMOVHLPS, + /* 2B9 */ MNEM_VMOVHPD, + /* 2BA */ MNEM_VMOVHPS, + /* 2BB */ MNEM_VMOVLHPS, + /* 2BC */ MNEM_VMOVLPD, + /* 2BD */ MNEM_VMOVLPS, + /* 2BE */ MNEM_VMOVMSKPD, + /* 2BF */ MNEM_VMOVMSKPS, + /* 2C0 */ MNEM_VMOVNTDQ, + /* 2C1 */ MNEM_VMOVNTDQA, + /* 2C2 */ MNEM_VMOVNTPD, + /* 2C3 */ MNEM_VMOVNTPS, + /* 2C4 */ MNEM_VMOVQ, + /* 2C5 */ MNEM_VMOVSD, + /* 2C6 */ MNEM_VMOVSHDUP, + /* 2C7 */ MNEM_VMOVSLDUP, + /* 2C8 */ MNEM_VMOVSS, + /* 2C9 */ MNEM_VMOVUPD, + /* 2CA */ MNEM_VMOVUPS, + /* 2CB */ MNEM_VMPSADBW, + /* 2CC */ MNEM_VMPTRLD, + /* 2CD */ MNEM_VMPTRST, + /* 2CE */ MNEM_VMREAD, + /* 2CF */ MNEM_VMRESUME, + /* 2D0 */ MNEM_VMRUN, + /* 2D1 */ MNEM_VMSAVE, + /* 2D2 */ MNEM_VMULPD, + /* 2D3 */ MNEM_VMULPS, + /* 2D4 */ MNEM_VMULSD, + /* 2D5 */ MNEM_VMULSS, + /* 2D6 */ MNEM_VMWRITE, + /* 2D7 */ MNEM_VMXOFF, + /* 2D8 */ MNEM_VMXON, + /* 2D9 */ MNEM_VORPD, + /* 2DA */ MNEM_VORPS, + /* 2DB */ MNEM_VPABSB, + /* 2DC */ MNEM_VPABSD, + /* 2DD */ MNEM_VPABSW, + /* 2DE */ MNEM_VPACKSSDW, + /* 2DF */ MNEM_VPACKSSWB, + /* 2E0 */ MNEM_VPACKUSDW, + /* 2E1 */ MNEM_VPACKUSWB, + /* 2E2 */ MNEM_VPADDB, + /* 2E3 */ MNEM_VPADDD, + /* 2E4 */ MNEM_VPADDQ, + /* 2E5 */ MNEM_VPADDSB, + /* 2E6 */ MNEM_VPADDSW, + /* 2E7 */ MNEM_VPADDUSB, + /* 2E8 */ MNEM_VPADDUSW, + /* 2E9 */ MNEM_VPADDW, + /* 2EA */ MNEM_VPALIGNR, + /* 2EB */ MNEM_VPAND, + /* 2EC */ MNEM_VPANDN, + /* 2ED */ MNEM_VPAVGB, + /* 2EE */ MNEM_VPAVGW, + /* 2EF */ MNEM_VPBLENDVB, + /* 2F0 */ MNEM_VPBLENDW, + /* 2F1 */ MNEM_VPCLMULQDQ, + /* 2F2 */ MNEM_VPCMPEQB, + /* 2F3 */ MNEM_VPCMPEQD, + /* 2F4 */ MNEM_VPCMPEQQ, + /* 2F5 */ MNEM_VPCMPEQW, + /* 2F6 */ MNEM_VPCMPESTRI, + /* 2F7 */ MNEM_VPCMPESTRM, + /* 2F8 */ MNEM_VPCMPGTB, + /* 2F9 */ MNEM_VPCMPGTD, + /* 2FA */ MNEM_VPCMPGTQ, + /* 2FB */ MNEM_VPCMPGTW, + /* 2FC */ MNEM_VPCMPISTRI, + /* 2FD */ MNEM_VPCMPISTRM, + /* 2FE */ MNEM_VPERM2F128, + /* 2FF */ MNEM_VPERMILPD, + /* 300 */ MNEM_VPERMILPS, + /* 301 */ MNEM_VPEXTRB, + /* 302 */ MNEM_VPEXTRD, + /* 303 */ MNEM_VPEXTRQ, + /* 304 */ MNEM_VPEXTRW, + /* 305 */ MNEM_VPHADDD, + /* 306 */ MNEM_VPHADDSW, + /* 307 */ MNEM_VPHADDW, + /* 308 */ MNEM_VPHMINPOSUW, + /* 309 */ MNEM_VPHSUBD, + /* 30A */ MNEM_VPHSUBSW, + /* 30B */ MNEM_VPHSUBW, + /* 30C */ MNEM_VPINSRB, + /* 30D */ MNEM_VPINSRD, + /* 30E */ MNEM_VPINSRQ, + /* 30F */ MNEM_VPINSRW, + /* 310 */ MNEM_VPMADDUBSW, + /* 311 */ MNEM_VPMADDWD, + /* 312 */ MNEM_VPMAXSB, + /* 313 */ MNEM_VPMAXSD, + /* 314 */ MNEM_VPMAXSW, + /* 315 */ MNEM_VPMAXUB, + /* 316 */ MNEM_VPMAXUD, + /* 317 */ MNEM_VPMAXUW, + /* 318 */ MNEM_VPMINSB, + /* 319 */ MNEM_VPMINSD, + /* 31A */ MNEM_VPMINSW, + /* 31B */ MNEM_VPMINUB, + /* 31C */ MNEM_VPMINUD, + /* 31D */ MNEM_VPMINUW, + /* 31E */ MNEM_VPMOVMSKB, + /* 31F */ MNEM_VPMOVSXBD, + /* 320 */ MNEM_VPMOVSXBQ, + /* 321 */ MNEM_VPMOVSXBW, + /* 322 */ MNEM_VPMOVSXWD, + /* 323 */ MNEM_VPMOVSXWQ, + /* 324 */ MNEM_VPMOVZXBD, + /* 325 */ MNEM_VPMOVZXBQ, + /* 326 */ MNEM_VPMOVZXBW, + /* 327 */ MNEM_VPMOVZXDQ, + /* 328 */ MNEM_VPMOVZXWD, + /* 329 */ MNEM_VPMOVZXWQ, + /* 32A */ MNEM_VPMULDQ, + /* 32B */ MNEM_VPMULHRSW, + /* 32C */ MNEM_VPMULHUW, + /* 32D */ MNEM_VPMULHW, + /* 32E */ MNEM_VPMULLD, + /* 32F */ MNEM_VPMULLW, + /* 330 */ MNEM_VPOR, + /* 331 */ MNEM_VPSADBW, + /* 332 */ MNEM_VPSHUFB, + /* 333 */ MNEM_VPSHUFD, + /* 334 */ MNEM_VPSHUFHW, + /* 335 */ MNEM_VPSHUFLW, + /* 336 */ MNEM_VPSIGNB, + /* 337 */ MNEM_VPSIGND, + /* 338 */ MNEM_VPSIGNW, + /* 339 */ MNEM_VPSLLD, + /* 33A */ MNEM_VPSLLDQ, + /* 33B */ MNEM_VPSLLQ, + /* 33C */ MNEM_VPSLLW, + /* 33D */ MNEM_VPSRAD, + /* 33E */ MNEM_VPSRAW, + /* 33F */ MNEM_VPSRLD, + /* 340 */ MNEM_VPSRLDQ, + /* 341 */ MNEM_VPSRLQ, + /* 342 */ MNEM_VPSRLW, + /* 343 */ MNEM_VPSUBB, + /* 344 */ MNEM_VPSUBD, + /* 345 */ MNEM_VPSUBQ, + /* 346 */ MNEM_VPSUBSB, + /* 347 */ MNEM_VPSUBSW, + /* 348 */ MNEM_VPSUBUSB, + /* 349 */ MNEM_VPSUBUSW, + /* 34A */ MNEM_VPSUBW, + /* 34B */ MNEM_VPTEST, + /* 34C */ MNEM_VPUNPCKHBW, + /* 34D */ MNEM_VPUNPCKHDQ, + /* 34E */ MNEM_VPUNPCKHQDQ, + /* 34F */ MNEM_VPUNPCKHWD, + /* 350 */ MNEM_VPUNPCKLBW, + /* 351 */ MNEM_VPUNPCKLDQ, + /* 352 */ MNEM_VPUNPCKLQDQ, + /* 353 */ MNEM_VPUNPCKLWD, + /* 354 */ MNEM_VPXOR, + /* 355 */ MNEM_VRCPPS, + /* 356 */ MNEM_VRCPSS, + /* 357 */ MNEM_VROUNDPD, + /* 358 */ MNEM_VROUNDPS, + /* 359 */ MNEM_VROUNDSD, + /* 35A */ MNEM_VROUNDSS, + /* 35B */ MNEM_VRSQRTPS, + /* 35C */ MNEM_VRSQRTSS, + /* 35D */ MNEM_VSHUFPD, + /* 35E */ MNEM_VSHUFPS, + /* 35F */ MNEM_VSQRTPD, + /* 360 */ MNEM_VSQRTPS, + /* 361 */ MNEM_VSQRTSD, + /* 362 */ MNEM_VSQRTSS, + /* 363 */ MNEM_VSTMXCSR, + /* 364 */ MNEM_VSUBPD, + /* 365 */ MNEM_VSUBPS, + /* 366 */ MNEM_VSUBSD, + /* 367 */ MNEM_VSUBSS, + /* 368 */ MNEM_VTESTPD, + /* 369 */ MNEM_VTESTPS, + /* 36A */ MNEM_VUCOMISD, + /* 36B */ MNEM_VUCOMISS, + /* 36C */ MNEM_VUNPCKHPD, + /* 36D */ MNEM_VUNPCKHPS, + /* 36E */ MNEM_VUNPCKLPD, + /* 36F */ MNEM_VUNPCKLPS, + /* 370 */ MNEM_VXORPD, + /* 371 */ MNEM_VXORPS, + /* 372 */ MNEM_VZEROALL, + /* 373 */ MNEM_VZEROUPPER, + /* 374 */ MNEM_WAIT, + /* 375 */ MNEM_WBINVD, + /* 376 */ MNEM_WRMSR, + /* 377 */ MNEM_XADD, + /* 378 */ MNEM_XCHG, + /* 379 */ MNEM_XCRYPTCBC, + /* 37A */ MNEM_XCRYPTCFB, + /* 37B */ MNEM_XCRYPTCTR, + /* 37C */ MNEM_XCRYPTECB, + /* 37D */ MNEM_XCRYPTOFB, + /* 37E */ MNEM_XGETBV, + /* 37F */ MNEM_XLATB, + /* 380 */ MNEM_XOR, + /* 381 */ MNEM_XORPD, + /* 382 */ MNEM_XORPS, + /* 383 */ MNEM_XRSTOR, + /* 384 */ MNEM_XSAVE, + /* 385 */ MNEM_XSETBV, + /* 386 */ MNEM_XSHA1, + /* 387 */ MNEM_XSHA256, + /* 388 */ MNEM_XSTORE, + + MNEM_FORCE_WORD = 0x7FFF +} VXInstructionMnemonic; /** * @brief Defines an alias representing an opcode tree node. An opcode tree node is a 16 bit @@ -958,435 +964,435 @@ typedef uint16_t VXOpcodeTreeNode; /** * @brief Values that represent the type of an opcode tree node. */ -enum class VXOpcodeTreeNodeType : uint8_t +typedef enum _VXOpcodeTreeNodeType /* : uint8_t */ { /** * @brief Reference to a concrete instruction definition. */ - INSTRUCTION_DEFINITION = 0, + OTNT_INSTRUCTION_DEFINITION = 0, /** * @brief Reference to an opcode table. */ - TABLE = 1, + OTNT_TABLE = 1, /** * @brief Reference to a modrm_mod switch table. */ - MODRM_MOD = 2, + OTNT_MODRM_MOD = 2, /** * @brief Reference to a modrm_reg switch table. */ - MODRM_REG = 3, + OTNT_MODRM_REG = 3, /** * @brief Reference to a modrm_rm switch table. */ - MODRM_RM = 4, + OTNT_MODRM_RM = 4, /** * @brief Reference to a mandatory-prefix switch table. */ - MANDATORY = 5, + OTNT_MANDATORY = 5, /** * @brief Reference to a x87 opcode table. */ - X87 = 6, + OTNT_X87 = 6, /** * @brief Reference to an address-size switch table. */ - ADDRESS_SIZE = 7, + OTNT_ADDRESS_SIZE = 7, /** * @brief Reference to an operand-size switch table. */ - OPERAND_SIZE = 8, + OTNT_OPERAND_SIZE = 8, /** * @brief Reference to a cpu-mode switch table. */ - MODE = 9, + OTNT_MODE = 9, /** * @brief Reference to a vendor switch table. */ - VENDOR = 10, + OTNT_VENDOR = 10, /** * @brief Reference to a 3dnow! opcode table. */ - AMD3DNOW = 11, + OTNT_AMD3DNOW = 11, /** * @brief Reference to a vex-prefix switch table. */ - VEX = 12, + OTNT_VEX = 12, /** * @brief Reference to a vex_w switch table. */ - VEXW = 13, + OTNT_VEXW = 13, /** * @brief Reference to a vex_l switch table. */ - VEXL = 14 -}; + OTNT_VEXL = 14 +} VXOpcodeTreeNodeType; /** * @brief Values that represent the type of an operand in the instruction definition. */ -enum class VXDefinedOperandType : uint8_t +typedef enum _VXDefinedOperandType /* : uint8_t */ { /* * @brief No operand. */ - NONE, + DOT_NONE, /* * @brief Direct address. The instruction has no ModR/M byte; the address of the operand is * encoded in the instruction; no base register, index register, or scaling factor * can be applied. */ - A, + DOT_A, /* * @brief The reg field of the ModR/M byte selects a control register. */ - C, + DOT_C, /* * @brief The reg field of the ModR/M byte selects a debug register. */ - D, + DOT_D, /* * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either * a general-purpose register or a memory address. If it is a memory address, the * address is computed from a segment register and any of the following values: * a base register, an index register, a scaling factor, or a displacement. */ - E, + DOT_E, /* * @brief rFLAGS register. */ - F, + DOT_F, /* * @brief The reg field of the ModR/M byte selects a general register. */ - G, + DOT_G, /* * @brief The r/m field of the ModR/M byte always selects a general register, regardless of * the mod field. */ - H, + DOT_H, /* * @brief Immediate data. The operand value is encoded in subsequent bytes of the * instruction. */ - I, + DOT_I, /* * @brief Signed immediate data. The operand value is encoded in subsequent bytes of the * instruction. */ - sI, + DOT_sI, /* * @brief Constant immediate data value of 1. */ - I1, + DOT_I1, /* * @brief The instruction contains a relative offset to be added to the instruction pointer * register. */ - J, + DOT_J, /* * @brief Source operand is encoded in immediate byte (VEX only). */ - L, + DOT_L, /* * @brief The ModR/M byte may refer only to memory: mod != 11bin. */ - M, + DOT_M, /* * @brief Combination of M and R. */ - MR, + DOT_MR, /* * @brief Combination of M and U. */ - MU, + DOT_MU, /* * @brief The R/M field of the ModR/M byte selects a packed quadword MMX technology register. */ - N, + DOT_N, /* * @brief The instruction has no ModR/M byte; the offset of the operand is coded as a word, * double word or quad word (depending on address size attribute) in the instruction. * No base register, index register, or scaling factor can be applied. */ - O, + DOT_O, /* * @brief The reg field of the ModR/M byte selects a packed quadword MMX technology register. */ - P, + DOT_P, /* * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either * an MMX technology register or a memory address. If it is a memory address, the * address is computed from a segment register and any of the following values: * a base register, an index register, a scaling factor, and a displacement. */ - Q, + DOT_Q, /* * @brief The mod field of the ModR/M byte may refer only to a general register. */ - R, + DOT_R, /* * @brief The reg field of the ModR/M byte selects a segment register. */ - S, + DOT_S, /* * @brief The R/M field of the ModR/M byte selects a 128-bit XMM register. */ - U, + DOT_U, /* * @brief The reg field of the ModR/M byte selects a 128-bit XMM register. */ - V, + DOT_V, /* * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either * a 128-bit XMM register or a memory address. If it is a memory address, the address * is computed from a segment register and any of the following values: * a base register, an index register, a scaling factor, and a displacement. */ - W, + DOT_W, /** * @brief Register 0. */ - R0, + DOT_R0, /** * @brief Register 1. */ - R1, + DOT_R1, /** * @brief Register 2. */ - R2, + DOT_R2, /** * @brief Register 3. */ - R3, + DOT_R3, /** * @brief Register 4. */ - R4, + DOT_R4, /** * @brief Register 5. */ - R5, + DOT_R5, /** * @brief Register 6. */ - R6, + DOT_R6, /** * @brief Register 7. */ - R7, + DOT_R7, /** * @brief AL register. */ - AL, + DOT_AL, /** * @brief CL register. */ - CL, + DOT_CL, /** * @brief DL register. */ - DL, + DOT_DL, /** * @brief AX register. */ - AX, + DOT_AX, /** * @brief CX register. */ - CX, + DOT_CX, /** * @brief DX register. */ - DX, + DOT_DX, /** * @brief EAX register. */ - EAX, + DOT_EAX, /** * @brief ECX register. */ - ECX, + DOT_ECX, /** * @brief EDX register. */ - EDX, + DOT_EDX, /** * @brief RAX register. */ - RAX, + DOT_RAX, /** * @brief RCX register. */ - RCX, + DOT_RCX, /** * @brief RDX register. */ - RDX, + DOT_RDX, /** * @brief ES segment register. */ - ES, + DOT_ES, /** * @brief CS segment register. */ - CS, + DOT_CS, /** * @brief SS segment register. */ - SS, + DOT_SS, /** * @brief DS segment register. */ - DS, + DOT_DS, /** * @brief FS segment register. */ - FS, + DOT_FS, /** * @brief GS segment register. */ - GS, + DOT_GS, /** * @brief Floating point register 0. */ - ST0, + DOT_ST0, /** * @brief Floating point register 1. */ - ST1, + DOT_ST1, /** * @brief Floating point register 2. */ - ST2, + DOT_ST2, /** * @brief Floating point register 3. */ - ST3, + DOT_ST3, /** * @brief Floating point register 4. */ - ST4, + DOT_ST4, /** * @brief Floating point register 5. */ - ST5, + DOT_ST5, /** * @brief Floating point register 6. */ - ST6, + DOT_ST6, /** * @brief Floating point register 7. */ - ST7 -}; + DOT_ST7 +} VXDefinedOperandType; /** * @brief Values that represent the size of an operand in the instruction definition. * Do not change the order or the values of this enum! */ -enum class VXDefinedOperandSize : uint8_t +typedef enum _VXDefinedOperandSize /* : uint8_t */ { /** * @brief No operand. */ - NA = 0, + DOS_NA = 0, /** * @brief Word, dword or qword. */ - Z, + DOS_Z, /** * @brief Word, dword or qword. */ - V, + DOS_V, /** * @brief Dword or qword. */ - Y, + DOS_Y, /** * @brief Oword or yword. */ - X, + DOS_X, /** * @brief Dword or qword, depending on the disassembler mode. */ - RDQ, + DOS_RDQ, /* * @brief Byte, regardless of operand-size attribute. */ - B, + DOS_B, /* * @brief Word, regardless of operand-size attribute. */ - W, + DOS_W, /* * @brief Doubleword, regardless of operand-size attribute. */ - D, + DOS_D, /* * @brief Quadword, regardless of operand-size attribute. */ - Q, + DOS_Q, /* * @brief 10-byte far pointer. */ - T, + DOS_T, /** * @brief TODO: */ - O, + DOS_O, /* * @brief Double-quadword, regardless of operand-size attribute. */ - DQ, + DOS_DQ, /* * @brief Quad-quadword, regardless of operand-size attribute. */ - QQ, + DOS_QQ, /** * @brief B sized register or D sized memory operand. */ - BD = (static_cast(B) << 4) | static_cast(D), + DOS_BD = (DOS_B << 4) | DOS_D, /** * @brief B sized register or V sized memory operand. */ - BV = (static_cast(B) << 4) | static_cast(V), + DOS_BV = (DOS_B << 4) | DOS_V, /** * @brief W sized register or D sized memory operand. */ - WD = (static_cast(W) << 4) | static_cast(D), + DOS_WD = (DOS_W << 4) | DOS_D, /** * @brief W sized register or V sized memory operand. */ - WV = (static_cast(W) << 4) | static_cast(V), + DOS_WV = (DOS_W << 4) | DOS_V, /** * @brief W sized register or Y sized memory operand. */ - WY = (static_cast(W) << 4) | static_cast(Y), + DOS_WY = (DOS_W << 4) | DOS_Y, /** * @brief D sized register or Y sized memory operand. */ - DY = (static_cast(D) << 4) | static_cast(Y), + DOS_DY = (DOS_D << 4) | DOS_Y, /** * @brief W sized register or O sized memory operand. */ - WO = (static_cast(W) << 4) | static_cast(O), + DOS_WO = (DOS_W << 4) | DOS_O, /** * @brief D sized register or O sized memory operand. */ - DO = (static_cast(D) << 4) | static_cast(O), + DOS_DO = (DOS_D << 4) | DOS_O, /** * @brief Q sized register or O sized memory operand. */ - QO = (static_cast(Q) << 4) | static_cast(O), -}; + DOS_QO = (DOS_Q << 4) | DOS_O, +} VXDefinedOperandSize; /** * @brief Values that represent optional flags in the instruction definition. * Do not change the order or the values of this enum! */ -enum VXInstructionDefinitionFlags : uint16_t +typedef enum _VXInstructionDefinitionFlags /* : uint16_t */ { /** * @brief The instruction accepts the rex.b prefix value. @@ -1447,33 +1453,39 @@ enum VXInstructionDefinitionFlags : uint16_t /** * @brief The second operand of the instruction is accessed in read-write mode. */ - IDF_OPERAND2_READWRITE = 0x4000 -}; + IDF_OPERAND2_READWRITE = 0x4000, + + IDF_FORCE_WORD = 0x7FFF +} VXInstructionDefinitionFlags; #pragma pack (push, 1) /** * @brief An operand definition. */ -struct VXOperandDefinition +typedef struct _VXOperandDefinition { /** * @brief The defined operand type. + * @see VXDefinedOperandType */ - VXDefinedOperandType type; + uint8_t type; /** * @brief The defined operand size. + * @see VXDefinedOperandType */ - VXDefinedOperandSize size; -}; + uint8_t size; +} VXOperandDefinition; + /** * @brief An instruction definition. */ -struct VXInstructionDefinition +typedef struct _VXInstructionDefinition { /** * @brief The instruction mnemonic. + * @see VXInstructionMnemonic */ - VXInstructionMnemonic mnemonic; + uint16_t mnemonic; /** * @brief The operand definitions for all four possible operands. */ @@ -1482,272 +1494,11 @@ struct VXInstructionDefinition * @brief Additional flags for the instruction definition. */ uint16_t flags; -}; +} VXInstructionDefinition; #pragma pack (pop) -namespace Internal -{ - -/** - * @brief Contains all opcode tables. - * Indexed by the numeric value of the opcode. - */ -extern const VXOpcodeTreeNode optreeTable[][256]; -/** - * @brief Contains all modrm_mod switch tables. - * Index values: - * 0 = [modrm_mod == !11] - * 1 = [modrm_mod == 11] - */ -extern const VXOpcodeTreeNode optreeModrmMod[][2]; -/** - * @brief Contains all modrm_reg switch tables. - * Indexed by the numeric value of the modrm_reg field. - */ -extern const VXOpcodeTreeNode optreeModrmReg[][8]; -/** - * @brief Contains all modrm_rm switch tables. - * Indexed by the numeric value of the modrm_rm field. - */ -extern const VXOpcodeTreeNode optreeModrmRm[][8]; -/** - * @brief Contains all mandatory-prefix switch tables. - * Index values: - * 0 = none - * 1 = F2 - * 2 = F3 - * 3 = 66 - */ -extern const VXOpcodeTreeNode optreeMandatory[][4]; -/** - * @brief Contains all x87 opcode tables. - * Indexed by the numeric value of the 6 lowest bits of the modrm byte (modrm_mod should - * always be 11). - */ -extern const VXOpcodeTreeNode optreeX87[][64]; -/** - * @brief Contains all address-size switch tables. - * Index values: - * 0 = 16 - * 1 = 32 - * 2 = 64 - */ -extern const VXOpcodeTreeNode optreeAddressSize[][3]; -/** - * @brief Contains all operand-size switch tables. - * Index values: - * 0 = 16 - * 1 = 32 - * 2 = 64 - */ -extern const VXOpcodeTreeNode optreeOperandSize[][3]; -/** - * @brief Contains all cpu-mode switch tables. - * Index values: - * 0 = [!= 64] - * 1 = 64 - */ -extern const VXOpcodeTreeNode optreeMode[][2]; -/** - * @brief Contains all vendor switch tables. - * Index values: - * 0 = AMD - * 1 = Intel - */ -extern const VXOpcodeTreeNode optreeVendor[][2]; -/** - * @brief Contains all 3dnow! switch tables. - * Indexed by the numeric value of the 3dnow! opcode. - */ -extern const VXOpcodeTreeNode optree3dnow[][256]; -/** - * @brief Contains all vex switch tables. - * Index values: - * 0 = none - * 1 = 0F - * 2 = 0F38 - * 3 = 0F3A - * 4 = 66 - * 5 = 66_0F - * 6 = 66_0F38 - * 7 = 66_0F3A - * 8 = F3 - * 9 = F3_0F - * A = F3_0F38 - * B = F3_0F3A - * C = F2 - * D = F2_0F - * E = F2_0F38 - * F = F2_0F3A - */ -extern const VXOpcodeTreeNode optreeVex[][16]; -/** - * @brief Contains all vex_w switch tables. - * Indexed by the numeric value of the vex_w field. - */ -extern const VXOpcodeTreeNode optreeVexW[][2]; -/** - * @brief Contains all vex_l switch tables. - * Indexed by the numeric value of the vex_l field. - */ -extern const VXOpcodeTreeNode optreeVexL[][2]; -/** - * @brief Contains all instruction definitions. - */ -extern const VXInstructionDefinition instrDefinitions[]; -/** - * @brief Contains all instruction mnemonic strings. - */ -extern const char* instrMnemonicStrings[]; - -/** - * @brief Returns the type of the specified opcode tree node. - * @param node The node. - * @return The type of the specified opcode tree node. - */ -inline VXOpcodeTreeNodeType VDEGetOpcodeNodeType(VXOpcodeTreeNode node) -{ - return static_cast((node >> 12) & 0x0F); -} - -/** - * @brief Returns the value of the specified opcode tree node. - * @param node The node. - * @return The value of the specified opcode tree node. - */ -inline uint16_t VDEGetOpcodeNodeValue(VXOpcodeTreeNode node) -{ - return (node & 0x0FFF); +#ifdef __cplusplus } +#endif -/** - * @brief Returns the root node of the opcode tree. - * @return The root node of the opcode tree. - */ -inline VXOpcodeTreeNode VDEGetOpcodeTreeRoot() -{ - return 0x1000; -} - -/** - * @brief Returns a child node of @c parent specified by @c index. - * @param parent The parent node. - * @param index The index of the child node to retrieve. - * @return The specified child node. - */ -inline VXOpcodeTreeNode VDEGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_t index) -{ - using namespace Internal; - VXOpcodeTreeNodeType nodeType = VDEGetOpcodeNodeType(parent); - uint16_t tableIndex = VDEGetOpcodeNodeValue(parent); - switch (nodeType) - { - case VXOpcodeTreeNodeType::TABLE: - assert(index < 256); - return optreeTable[tableIndex][index]; - case VXOpcodeTreeNodeType::MODRM_MOD: - assert(index < 2); - return optreeModrmMod[tableIndex][index]; - case VXOpcodeTreeNodeType::MODRM_REG: - assert(index < 8); - return optreeModrmReg[tableIndex][index]; - case VXOpcodeTreeNodeType::MODRM_RM: - assert(index < 8); - return optreeModrmRm[tableIndex][index]; - case VXOpcodeTreeNodeType::MANDATORY: - assert(index < 4); - return optreeMandatory[tableIndex][index]; - case VXOpcodeTreeNodeType::X87: - assert(index < 64); - return optreeX87[tableIndex][index]; - case VXOpcodeTreeNodeType::ADDRESS_SIZE: - assert(index < 3); - return optreeAddressSize[tableIndex][index]; - case VXOpcodeTreeNodeType::OPERAND_SIZE: - assert(index < 3); - return optreeOperandSize[tableIndex][index]; - case VXOpcodeTreeNodeType::MODE: - assert(index < 2); - return optreeMode[tableIndex][index]; - case VXOpcodeTreeNodeType::VENDOR: - assert(index < 3); - return optreeVendor[tableIndex][index]; - case VXOpcodeTreeNodeType::AMD3DNOW: - assert(index < 256); - return optree3dnow[tableIndex][index]; - case VXOpcodeTreeNodeType::VEX: - assert(index < 16); - return optreeVex[tableIndex][index]; - case VXOpcodeTreeNodeType::VEXW: - assert(index < 2); - return optreeVexW[tableIndex][index]; - case VXOpcodeTreeNodeType::VEXL: - assert(index < 2); - return optreeVexL[tableIndex][index]; - default: - assert(0); - } - return 0xFFFF; -} - -/** - * @brief Returns the instruction definition that is linked to the given @c node. - * @param node The instruction definition node. - * @return Pointer to the instruction definition. - */ -inline const VXInstructionDefinition* VDEGetInstructionDefinition(VXOpcodeTreeNode node) -{ - assert(VDEGetOpcodeNodeType(node) == VXOpcodeTreeNodeType::INSTRUCTION_DEFINITION); - return &instrDefinitions[node & 0x0FFF]; -} - -/** - * @brief Returns the specified instruction mnemonic string. - * @param mnemonic The mnemonic. - * @return The instruction mnemonic string. - */ -inline const char* VDEGetInstructionMnemonicString(VXInstructionMnemonic mnemonic) -{ - return instrMnemonicStrings[static_cast(mnemonic)]; -} - -/** - * @brief Returns the numeric value for a simple operand size definition. - * @param operandSize The defined operand size. - * @return The the numeric value for the simple operand size definition. - */ -inline uint16_t VDEGetSimpleOperandSize(VXDefinedOperandSize operandSize) -{ - static uint16_t operandSizes[8] = - { - 8, 16, 32, 64, 80, 12, 128, 256 - }; - uint16_t index = - static_cast(operandSize) - static_cast(VXDefinedOperandSize::B); - assert(index < 8); - return operandSizes[index]; -} - -/** - * @brief Returns the memory-size part of a complex operand size definition. - * @param operandSize The defined operand size. - * @return The memory-size part of the operand size definition. - */ -inline VXDefinedOperandSize VDEGetComplexOperandMemSize(VXDefinedOperandSize operandSize) -{ - return static_cast(static_cast(operandSize) & 0x0F); -} - -/** - * @brief Returns the register-size part of a complex operand size definition. - * @param operandSize The defined operand size. - * @return The register-size part of the operand size definition. - */ -inline VXDefinedOperandSize VDEGetComplexOperandRegSize(VXDefinedOperandSize operandSize) -{ - return static_cast((static_cast(operandSize) >> 4) & 0x0F); -} - -} - -} +#endif // _VDE_VXOPCODETABLEC_H_ \ No newline at end of file diff --git a/Bindings/C/VXOpcodeTableInternalC.h b/VerteronDisassemblerEngine/VXOpcodeTableInternal.h similarity index 99% rename from Bindings/C/VXOpcodeTableInternalC.h rename to VerteronDisassemblerEngine/VXOpcodeTableInternal.h index 54e1614..06c4c08 100644 --- a/Bindings/C/VXOpcodeTableInternalC.h +++ b/VerteronDisassemblerEngine/VXOpcodeTableInternal.h @@ -34,7 +34,7 @@ #define _VDE_VXOPCODETABLEINTERNAL_H_ #include -#include "VXOpcodeTableC.h" +#include "VXOpcodeTable.h" /** * @brief Contains all opcode tables. diff --git a/VerteronDisassemblerEngine/VerteronDisassemblerEngine.vcxproj b/VerteronDisassemblerEngine/VerteronDisassemblerEngine.vcxproj deleted file mode 100644 index 0628199..0000000 --- a/VerteronDisassemblerEngine/VerteronDisassemblerEngine.vcxproj +++ /dev/null @@ -1,147 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - - - - - - - - - - - - - - - {F5C6F0A7-F75D-42BD-A8AB-A2D1D5F67099} - Win32Proj - VerteronDisassemblerEngine - - - - StaticLibrary - true - v120 - Unicode - - - StaticLibrary - true - v120 - Unicode - - - StaticLibrary - false - v120 - true - Unicode - - - StaticLibrary - false - v120 - true - Unicode - - - - - - - - - - - - - - - - - - - - - - - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - - - Windows - true - - - - - - - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - - - Windows - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - - - Windows - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - - - Windows - true - true - true - - - - - - \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VerteronDisassemblerEngine.vcxproj.filters b/VerteronDisassemblerEngine/VerteronDisassemblerEngine.vcxproj.filters deleted file mode 100644 index e106092..0000000 --- a/VerteronDisassemblerEngine/VerteronDisassemblerEngine.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file From f845185fa1081e280d3a16326a7566f00ba39c2e Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 16 Mar 2015 17:58:07 +0100 Subject: [PATCH 17/33] improved build when compiling shared libraries --- CMakeLists.txt | 15 ++++++++------- VerteronDisassemblerEngine/VXInternalConfig.h | 16 ++++++---------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5766517..6ef983b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,9 @@ cmake_minimum_required(VERSION 2.8.12) +include(GenerateExportHeader) project(VerteronDisassemblerEngine) -option(BUILD_SHARED "Build shared libraries rather than static ones" FALSE) +option(BUILD_SHARED_LIBS "Build shared libraries rather than static ones" FALSE) option(BUILD_EXAMPLES "Build examples" TRUE) option(BUILD_CPP_BINDINGS "Build C++ bindings" TRUE) @@ -38,12 +39,12 @@ set(vde_sources "VerteronDisassemblerEngine/VXOpcodeTable.c" "VerteronDisassemblerEngine/VXInstructionDecoder.c") -#if (BUILD_SHARED) -# add_definitions("-DVX_BUILD_SHARED") -# add_library("VerteronDisassemblerEngine" SHARED ${vde_headers} ${vde_sources}) -#else () - add_library("VerteronDisassemblerEngine" STATIC ${vde_headers} ${vde_sources}) -#endif () +add_library("VerteronDisassemblerEngine" ${vde_headers} ${vde_sources}) +generate_export_header( + "VerteronDisassemblerEngine" + BASE_NAME "VX" + EXPORT_FILE_NAME "VXExportConfig.h") +include_directories(${PROJECT_BINARY_DIR}) # C++ bindings if (BUILD_CPP_BINDINGS) diff --git a/VerteronDisassemblerEngine/VXInternalConfig.h b/VerteronDisassemblerEngine/VXInternalConfig.h index 536ed0c..b58f8b3 100644 --- a/VerteronDisassemblerEngine/VXInternalConfig.h +++ b/VerteronDisassemblerEngine/VXInternalConfig.h @@ -30,6 +30,12 @@ **************************************************************************************************/ +/* + * Include CMake generated header defining macros im-/exporting functions statically or + * dynamically depending what the user requested from CMake. + */ +#include "VXExportConfig.h" + #ifndef _VDE_VXINTERNALCONFIG_H_ #define _VDE_VXINTERNALCONFIG_H_ @@ -39,14 +45,4 @@ # define VX_INLINE extern inline #endif -#ifdef VX_BUILD_SHARED /* set by CMake */ -# if defined(_MSC_VER) -# define VX_EXPORT __declspec(dllexport) -# elif defined(__GNUC__) || defined(__clang__) -# define VX_EXPORT __attribute__((dllexport)) -# endif -#else -# define VX_EXPORT -#endif - #endif /* _VDE_VXINTERNALCONFIG_H_ */ \ No newline at end of file From 7e61d260dfeffad7648d34098343ca4d94d18935 Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 16 Mar 2015 18:30:14 +0100 Subject: [PATCH 18/33] CMakeLists.txt now orders MSVC to statically link against the CRT when we build a static library --- CMakeLists.txt | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ef983b..454168b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,9 @@ include(GenerateExportHeader) project(VerteronDisassemblerEngine) option(BUILD_SHARED_LIBS "Build shared libraries rather than static ones" FALSE) +option(FORCE_SHARED_CRT + "Forces shared linkage against the CRT even when building a static library" + FALSE) option(BUILD_EXAMPLES "Build examples" TRUE) option(BUILD_CPP_BINDINGS "Build C++ bindings" TRUE) @@ -12,7 +15,7 @@ if (NOT CONFIGURED_ONCE) "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(compiler_specific "-Werror") set(compiler_specific_cxx "-std=c++0x") - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + elseif (MSVC) set(compiler_specific "/WX /D_CRT_SECURE_NO_WARNINGS") endif () @@ -22,6 +25,23 @@ if (NOT CONFIGURED_ONCE) CACHE STRING "Flags used by the compiler during all build types." FORCE) endif () +# CMake always orders MSVC to build with a shared CRT. Hack CMake variables in order +# to generate with a statically linked CRT when we build as a static library. +if (MSVC AND NOT BUILD_SHARED_LIBS AND NOT FORCE_SHARED_CRT) + set(manipulated_vars + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_MINSIZEREL + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELWITHDEBINFO + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_MINSIZEREL + CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_RELWITHDEBINFO) + foreach (cur_var ${manipulated_vars}) + string(REPLACE "/MD" "/MT" ${cur_var} "${${cur_var}}") + endforeach () +endif () + # Library set(vde_headers "VerteronDisassemblerEngine/VXDisassembler.h" From a4b07c6f83911f1336cdea96da257c63763a11e9 Mon Sep 17 00:00:00 2001 From: Ende! Date: Mon, 16 Mar 2015 19:06:37 +0100 Subject: [PATCH 19/33] fixed build with clang (again..) --- VerteronDisassemblerEngine/VXInternalConfig.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VerteronDisassemblerEngine/VXInternalConfig.h b/VerteronDisassemblerEngine/VXInternalConfig.h index b58f8b3..ba4c6b2 100644 --- a/VerteronDisassemblerEngine/VXInternalConfig.h +++ b/VerteronDisassemblerEngine/VXInternalConfig.h @@ -42,7 +42,7 @@ #ifdef _MSC_VER # define VX_INLINE __inline #else -# define VX_INLINE extern inline +# define VX_INLINE static inline #endif -#endif /* _VDE_VXINTERNALCONFIG_H_ */ \ No newline at end of file +#endif /* _VDE_VXINTERNALCONFIG_H_ */ From 48fd6786327ecb763005816f3b2d307de74ab227 Mon Sep 17 00:00:00 2001 From: flobernd Date: Wed, 18 Mar 2015 16:21:09 +0100 Subject: [PATCH 20/33] fixed data source position not beeing correct if the end of the input was reached while decoding an invalid instruction --- .../VXInstructionDecoder.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.c b/VerteronDisassemblerEngine/VXInstructionDecoder.c index 51a10bd..395ac7c 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.c +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.c @@ -1773,14 +1773,6 @@ DecodeError: info->instrAddress = instrAddress; info->instrDefinition = VXGetInstructionDefinition(0); - // Return with error, if the end of the input source was reached while decoding the - // invalid instruction - if (info->flags & IF_ERROR_END_OF_INPUT) - { - info->length = 0; - return false; - } - // Decrement the input position, if more than one byte was read from the input data // source while decoding the invalid instruction if (info->length != 1) @@ -1790,6 +1782,14 @@ DecodeError: info->length = 1; } + // Return with error, if the end of the input source was reached while decoding the + // invalid instruction + if (info->flags & IF_ERROR_END_OF_INPUT) + { + info->length = 0; + return false; + } + return true; } From 0df2deb78a123a5dee5bfd2a32a2a308658a8cbc Mon Sep 17 00:00:00 2001 From: flobernd Date: Wed, 18 Mar 2015 16:53:49 +0100 Subject: [PATCH 21/33] cosmetic changes --- .../VXInstructionDecoder.c | 110 ++++++++++------- .../VXInstructionFormatter.c | 116 ++++++++++-------- 2 files changed, 131 insertions(+), 95 deletions(-) diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.c b/VerteronDisassemblerEngine/VXInstructionDecoder.c index 395ac7c..e94f460 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.c +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.c @@ -79,7 +79,8 @@ typedef struct _VXMemoryDataSource uint64_t inputBufferPos; } VXMemoryDataSource; -static void VXMemoryDataSource_Construct(VXBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen); +static void VXMemoryDataSource_Construct(VXBaseDataSourceContext *ctx, const void* buffer, + size_t bufferLen); static void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx); VXBaseDataSourceContext* VXMemoryDataSource_Create(const void* buffer, size_t bufferLen); static uint8_t VXMemoryDataSource_InternalInputPeek(VXBaseDataSourceContext *ctx); @@ -108,37 +109,70 @@ typedef enum _VXRegisterClass /* : uint8_t */ RC_XMM } VXRegisterClass; -static uint8_t VXInstructionDecoder_InputPeek(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static uint8_t VXInstructionDecoder_InputNext8(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static uint16_t VXInstructionDecoder_InputNext16(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static uint32_t VXInstructionDecoder_InputNext32(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static uint64_t VXInstructionDecoder_InputNext64(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static uint8_t VXInstructionDecoder_InputPeek(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +static uint8_t VXInstructionDecoder_InputNext8(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +static uint16_t VXInstructionDecoder_InputNext16(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +static uint32_t VXInstructionDecoder_InputNext32(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +static uint64_t VXInstructionDecoder_InputNext64(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); static uint8_t VXInstructionDecoder_InputCurrent(const VXInstructionDecoderContext *ctx); -VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource(const VXInstructionDecoderContext *ctx); -void VXInstructionDecoder_SetDataSource(VXInstructionDecoderContext *ctx, VXBaseDataSourceContext *input); -VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode(const VXInstructionDecoderContext *ctx); -void VXInstructionDecoder_SetDisassemblerMode(VXInstructionDecoderContext *ctx, VXDisassemblerMode disassemblerMode); -VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor(const VXInstructionDecoderContext *ctx); -void VXInstructionDecoder_SetPreferredVendor(VXInstructionDecoderContext *ctx, VXInstructionSetVendor preferredVendor); +VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( + const VXInstructionDecoderContext *ctx); +void VXInstructionDecoder_SetDataSource(VXInstructionDecoderContext *ctx, + VXBaseDataSourceContext *input); +VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( + const VXInstructionDecoderContext *ctx); +void VXInstructionDecoder_SetDisassemblerMode(VXInstructionDecoderContext *ctx, + VXDisassemblerMode disassemblerMode); +VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( + const VXInstructionDecoderContext *ctx); +void VXInstructionDecoder_SetPreferredVendor(VXInstructionDecoderContext *ctx, + VXInstructionSetVendor preferredVendor); uint64_t VXInstructionDecoder_GetInstructionPointer(const VXInstructionDecoderContext *ctx); -void VXInstructionDecoder_SetInstructionPointer(VXInstructionDecoderContext *ctx, uint64_t instructionPointer); -static bool VXInstructionDecoder_DecodeRegisterOperand(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize); -static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, VXDefinedOperandSize operandSize); -static bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandSize operandSize); -static bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, uint8_t size); -static bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static uint16_t VXInstructionDecoder_GetEffectiveOperandSize(const VXInstructionDecoderContext *ctx, const VXInstructionInfo *info, VXDefinedOperandSize operandSize); -static bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandType operandType, VXDefinedOperandSize operandSize); -static void VXInstructionDecoder_ResolveOperandAndAddressMode(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static void VXInstructionDecoder_CalculateEffectiveRexVexValues(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +void VXInstructionDecoder_SetInstructionPointer(VXInstructionDecoderContext *ctx, + uint64_t instructionPointer); +static bool VXInstructionDecoder_DecodeRegisterOperand(const VXInstructionDecoderContext *ctx, + VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, + uint8_t registerId, VXDefinedOperandSize operandSize); +static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, + VXDefinedOperandSize operandSize); +static bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandSize operandSize); +static bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info, VXOperandInfo *operand, uint8_t size); +static bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +static uint16_t VXInstructionDecoder_GetEffectiveOperandSize( + const VXInstructionDecoderContext *ctx, const VXInstructionInfo *info, + VXDefinedOperandSize operandSize); +static bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandType operandType, + VXDefinedOperandSize operandSize); +static void VXInstructionDecoder_ResolveOperandAndAddressMode( + const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static void VXInstructionDecoder_CalculateEffectiveRexVexValues( + const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); +static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); VXInstructionDecoderContext* VXInstructionDecoder_Create(void); -VXInstructionDecoderContext* VXInstructionDecoder_CreateEx(VXBaseDataSourceContext *input, VXDisassemblerMode disassemblerMode, VXInstructionSetVendor preferredVendor, uint64_t instructionPointer); -bool VXInstructionDecoder_DecodeInstruction(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( + VXBaseDataSourceContext *input, VXDisassemblerMode disassemblerMode, + VXInstructionSetVendor preferredVendor, uint64_t instructionPointer); +bool VXInstructionDecoder_DecodeInstruction(VXInstructionDecoderContext *ctx, + VXInstructionInfo *info); /* Implementation ============================================================================== */ @@ -330,12 +364,9 @@ static bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_ /* VXInstructionDecoder ------------------------------------------------------------------------ */ -void VXInstructionDecoder_Construct( - VXInstructionDecoderContext *ctx, - VXBaseDataSourceContext *input, - VXDisassemblerMode disassemblerMode, - VXInstructionSetVendor preferredVendor, - uint64_t instructionPointer) +void VXInstructionDecoder_Construct(VXInstructionDecoderContext *ctx, + VXBaseDataSourceContext *input, VXDisassemblerMode disassemblerMode, + VXInstructionSetVendor preferredVendor, uint64_t instructionPointer) { VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); @@ -355,10 +386,8 @@ VXInstructionDecoderContext* VXInstructionDecoder_Create(void) return VXInstructionDecoder_CreateEx(NULL, DM_M32BIT, ISV_ANY, 0); } -VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( - VXBaseDataSourceContext *input, - VXDisassemblerMode disassemblerMode, - VXInstructionSetVendor preferredVendor, +VXInstructionDecoderContext* VXInstructionDecoder_CreateEx(VXBaseDataSourceContext *input, + VXDisassemblerMode disassemblerMode, VXInstructionSetVendor preferredVendor, uint64_t instructionPointer) { VXInstructionDecoder *thiz = malloc(sizeof(VXInstructionDecoder)); @@ -1679,8 +1708,7 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, return false; } -bool VXInstructionDecoder_DecodeInstruction( - VXInstructionDecoderContext *ctx, +bool VXInstructionDecoder_DecodeInstruction(VXInstructionDecoderContext *ctx, VXInstructionInfo *info) { VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.c b/VerteronDisassemblerEngine/VXInstructionFormatter.c index 9edd724..f173927 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.c +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.c @@ -62,7 +62,8 @@ typedef struct _VXBaseSymbolResolver static void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx); static void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx); -const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); +const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, uint64_t address, uint64_t *offset); /* VXBaseInstructionFormatter ------------------------------------------------------------------ */ @@ -82,22 +83,36 @@ typedef struct _VXBaseInstructionFormatter bool outputUppercase; } VXBaseInstructionFormatter; -static void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); +static void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, + VXBaseSymbolResolverContext *symbolResolver); static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx); /*static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, bool uppercase);*/ -static char const* VXBaseInstructionFormatter_RegisterToString(const VXBaseInstructionFormatterContext *ctx, VXRegister reg); -static char const* VXBaseInstructionFormatter_ResolveSymbol(const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); -VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver(const VXBaseInstructionFormatterContext *ctx); -void VXBaseInstructionFormatter_SetSymbolResolver(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); -const char* VXBaseInstructionFormatter_FormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); +static char const* VXBaseInstructionFormatter_RegisterToString( + const VXBaseInstructionFormatterContext *ctx, VXRegister reg); +static char const* VXBaseInstructionFormatter_ResolveSymbol( + const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, + uint64_t *offset); +VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( + const VXBaseInstructionFormatterContext *ctx); +void VXBaseInstructionFormatter_SetSymbolResolver(VXBaseInstructionFormatterContext *ctx, + VXBaseSymbolResolverContext *symbolResolver); +const char* VXBaseInstructionFormatter_FormatInstruction(VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info); static void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx); static char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx); -static void VXBaseInstructionFormatter_OutputAppend(VXBaseInstructionFormatterContext *ctx, char const *text); -static void VXBaseInstructionFormatter_OutputAppendFormatted(VXBaseInstructionFormatterContext *ctx, char const *format, ...); -static void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, bool resolveSymbols); -static void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols); -static void VXBaseInstructionFormatter_OutputAppendDisplacement(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); +static void VXBaseInstructionFormatter_OutputAppend(VXBaseInstructionFormatterContext *ctx, + char const *text); +static void VXBaseInstructionFormatter_OutputAppendFormatted( + VXBaseInstructionFormatterContext *ctx, char const *format, ...); +static void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info, uint64_t address, bool resolveSymbols); +static void VXBaseInstructionFormatter_OutputAppendImmediate( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, + const VXOperandInfo *operand, bool resolveSymbols); +static void VXBaseInstructionFormatter_OutputAppendDisplacement( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, + const VXOperandInfo *operand); /* VXCustomSymbolResolver ---------------------------------------------------------------------- */ @@ -108,10 +123,13 @@ typedef struct _VXCustomSymbolResolver void *userData; } VXCustomSymbolResolver; -static void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); +static void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, + VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); static void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); -VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create(VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); -static const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); +VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( + VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); +static const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, uint64_t address, uint64_t *offset); /* VXIntelInstructionFormatter ----------------------------------------------------------------- */ @@ -121,12 +139,18 @@ typedef struct _VXIntelInstructionFormatter } VXIntelInstructionFormatter; VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); -VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx(VXBaseSymbolResolverContext *resolver); -static void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); +VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( + VXBaseSymbolResolverContext *resolver); +static void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, + VXBaseSymbolResolverContext *symbolResolver); static void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); -static void VXIntelInstructionFormatter_OutputAppendOperandCast(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); -static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); -static void VXIntelInstructionFormatter_InternalFormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); +static void VXIntelInstructionFormatter_OutputAppendOperandCast( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, + const VXOperandInfo *operand); +static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info, const VXOperandInfo *operand); +static void VXIntelInstructionFormatter_InternalFormatInstruction( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); /* Implementation ============================================================================== */ @@ -142,8 +166,7 @@ void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx) } -void VXBaseSymbolResolver_Release( - VXBaseSymbolResolverContext *ctx) +void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx) { VXBaseSymbolResolver *thiz = VXBaseSymbolResolver_thiz(ctx); @@ -156,11 +179,8 @@ void VXBaseSymbolResolver_Release( free(ctx); } -const char* VXBaseSymbolResolver_ResolveSymbol( - VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, - uint64_t address, - uint64_t *offset) +const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, uint64_t address, uint64_t *offset) { assert(VXBaseSymbolResolver_thiz(ctx)->resolveCallback); return VXBaseSymbolResolver_thiz(ctx)->resolveCallback(ctx, info, address, offset); @@ -168,10 +188,8 @@ const char* VXBaseSymbolResolver_ResolveSymbol( /* VXCustomSymbolResolver ---------------------------------------------------------------------- */ -static void VXCustomSymbolResolver_Construct( - VXBaseSymbolResolverContext *ctx, - VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, - void *userData) +static void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, + VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData) { VXBaseSymbolResolver_Construct(ctx); VXCustomSymbolResolver *thiz = VXCustomSymbolResolver_thiz(ctx); @@ -189,8 +207,7 @@ static void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx) } VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( - VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, - void *userData) + VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData) { VXCustomSymbolResolver *thiz = malloc(sizeof(VXCustomSymbolResolver)); VXBaseSymbolResolverContext *ctx = malloc(sizeof(VXBaseSymbolResolverContext)); @@ -208,11 +225,8 @@ VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( return ctx; } -static const char* VXCustomSymbolResolver_Resolve( - VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, - uint64_t address, - uint64_t *offset) +static const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, + const VXInstructionInfo *info, uint64_t address, uint64_t *offset) { VXCustomSymbolResolver *thiz = VXCustomSymbolResolver_thiz(ctx); return thiz->resolve(info, address, offset, thiz->userData); @@ -276,8 +290,8 @@ static const char* VXBaseInstructionFormatter_registerStrings[] = "rip" }; -static void VXBaseInstructionFormatter_Construct( - VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver) +static void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, + VXBaseSymbolResolverContext *symbolResolver) { VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); @@ -301,8 +315,7 @@ static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContex } } -void VXBaseInstructionFormatter_Release( - VXBaseInstructionFormatterContext *ctx) +void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx) { VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); @@ -485,8 +498,8 @@ static void VXBaseInstructionFormatter_OutputAppendFormatted( } static void VXBaseInstructionFormatter_OutputAppendAddress( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, - uint64_t address, bool resolveSymbols) + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, + bool resolveSymbols) { uint64_t offset = 0; const char* name = NULL; @@ -529,10 +542,8 @@ static void VXBaseInstructionFormatter_OutputAppendAddress( } static void VXBaseInstructionFormatter_OutputAppendImmediate( - VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info, - const VXOperandInfo *operand, - bool resolveSymbols) + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, + const VXOperandInfo *operand, bool resolveSymbols) { assert(operand->type == OPTYPE_IMMEDIATE); uint64_t value = 0; @@ -695,8 +706,7 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( } static void VXIntelInstructionFormatter_OutputAppendOperandCast( - VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info, + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand) { switch(operand->size) @@ -727,10 +737,8 @@ static void VXIntelInstructionFormatter_OutputAppendOperandCast( } } -static void VXIntelInstructionFormatter_FormatOperand( - VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info, - const VXOperandInfo *operand) +static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, + const VXInstructionInfo *info, const VXOperandInfo *operand) { switch (operand->type) { From 9e2cceb2be29e25386984eb03f016cecfa8daeb9 Mon Sep 17 00:00:00 2001 From: Ende! Date: Thu, 19 Mar 2015 15:14:47 +0100 Subject: [PATCH 22/33] ported doxygen comments for internal functions from C++ headers to C sources --- .../VXInstructionDecoder.c | 248 +++++++++++++++--- .../VXInstructionFormatter.c | 149 +++++++++-- 2 files changed, 348 insertions(+), 49 deletions(-) diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.c b/VerteronDisassemblerEngine/VXInstructionDecoder.c index e94f460..9f93bc6 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.c +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.c @@ -60,14 +60,17 @@ typedef struct _VXBaseDataSource VXBaseDataSource_SetPositionCallback setPosition; } VXBaseDataSource; +/** + * @brief Constructor. + * @param ctx The context. + */ static void VXBaseDataSource_Construct(VXBaseDataSourceContext *ctx); + +/** + * @brief Destructor. + * @param ctx The context. + */ static void VXBaseDataSource_Destruct(VXBaseDataSourceContext *ctx); -uint8_t VXBaseDataSource_InputPeek(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); -uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); -uint16_t VXBaseDataSource_InputNext16(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); -uint32_t VXBaseDataSource_InputNext32(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); -uint64_t VXBaseDataSource_InputNext64(VXBaseDataSourceContext *ctx, VXInstructionInfo *info); -uint8_t VXBaseDataSource_InputCurrent(const VXBaseDataSourceContext *ctx); /* VXMemoryDataSource -------------------------------------------------------------------------- */ @@ -79,14 +82,50 @@ typedef struct _VXMemoryDataSource uint64_t inputBufferPos; } VXMemoryDataSource; +/** + * @brief Constructor. + * @param ctx The context. + * @param buffer The buffer. + * @param bufferLen Length of the buffer. + */ static void VXMemoryDataSource_Construct(VXBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen); + +/** + * @brief Destructor. + * @param ctx The context. + */ static void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx); -VXBaseDataSourceContext* VXMemoryDataSource_Create(const void* buffer, size_t bufferLen); + +/** + * @brief Reads the next byte from the data source. + * @param ctx The context. + * @return The current input byte. + * This method increases the current input position by one. + */ static uint8_t VXMemoryDataSource_InternalInputPeek(VXBaseDataSourceContext *ctx); + +/** + * @brief Reads the next byte from the data source. + * @param ctx The context. + * @return The current input byte. + * This method does NOT increase the current input position. + */ static uint8_t VXMemoryDataSource_InternalInputNext(VXBaseDataSourceContext *ctx); + +/** + * @copydoc VXBaseDataSource_IsEndOfInput + */ static bool VXMemoryDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx); + +/** + * @copydoc VXBaseDataSource_GetPosition + */ static uint64_t VXMemoryDataSource_GetPosition(const VXBaseDataSourceContext *ctx); + +/** + * @copydoc VXBaseDataSource_SetPosition + */ static bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position); /* VXInstructionDecoder ------------------------------------------------------------------------ */ @@ -109,70 +148,212 @@ typedef enum _VXRegisterClass /* : uint8_t */ RC_XMM } VXRegisterClass; +/** + * @brief Reads the next byte from the data source. + * @param ctx The context. + * @param info The instruction info. + * @return The current input byte. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + * This method does NOT increase the current input position or the @c length field of the + * @c info parameter. + */ static uint8_t VXInstructionDecoder_InputPeek(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @brief Reads the next byte(s) from the data source. + * @param ctx The context. + * @param info The instruction info. + * @return The current input data. If the result is zero, you should always check the + * @c flags field of the @c info parameter for error flags. + * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. + * This method increases the current input position and the @c length field of the @info + * parameter. This method also appends the new byte(s) to to @c data field of the @c info + * parameter. + */ static uint8_t VXInstructionDecoder_InputNext8(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @copydoc VXInstructionDecoder_InputNext8 + */ static uint16_t VXInstructionDecoder_InputNext16(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @copydoc VXInstructionDecoder_InputNext8 + */ static uint32_t VXInstructionDecoder_InputNext32(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @copydoc VXInstructionDecoder_InputNext8 + */ static uint64_t VXInstructionDecoder_InputNext64(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @brief Returns the current input byte. + * @param ctx The context. + * @return The current input byte. + * The current input byte is set everytime the @c VXInstructionDecoder_InputPeek or + * @c VXInstructionDecoder_InputNextXX function is called. + */ static uint8_t VXInstructionDecoder_InputCurrent(const VXInstructionDecoderContext *ctx); -VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( - const VXInstructionDecoderContext *ctx); -void VXInstructionDecoder_SetDataSource(VXInstructionDecoderContext *ctx, - VXBaseDataSourceContext *input); -VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( - const VXInstructionDecoderContext *ctx); -void VXInstructionDecoder_SetDisassemblerMode(VXInstructionDecoderContext *ctx, - VXDisassemblerMode disassemblerMode); -VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( - const VXInstructionDecoderContext *ctx); -void VXInstructionDecoder_SetPreferredVendor(VXInstructionDecoderContext *ctx, - VXInstructionSetVendor preferredVendor); -uint64_t VXInstructionDecoder_GetInstructionPointer(const VXInstructionDecoderContext *ctx); -void VXInstructionDecoder_SetInstructionPointer(VXInstructionDecoderContext *ctx, - uint64_t instructionPointer); + +/** + * @brief Decodes a register operand. + * @param ctx The context. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param registerClass The register class to use. + * @param registerId The register id. + * @param operandSize The defined size of the operand. + * @return @c true if it succeeds, @c false if it fails. + */ static bool VXInstructionDecoder_DecodeRegisterOperand(const VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize); + +/** + * @brief Decodes a register/memory operand. + * @param ctx The context. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param registerClass The register class to use. + * @param operandSize The defined size of the operand. + * @return @c true if it succeeds, @c false if it fails. + */ static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, VXDefinedOperandSize operandSize); + +/** + * @brief Decodes an immediate operand. + * @param ctx The context. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operandSize The defined size of the operand. + * @return @c true if it succeeds, @c false if it fails. + */ static bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandSize operandSize); + +/** + * @brief Decodes a displacement operand. + * @param ctx The context. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param size The size of the displacement data. + * @return @c true if it succeeds, @c false if it fails. + */ static bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, uint8_t size); + +/** + * @brief Decodes the ModRM field of the instruction. + * @param ctx The context. + * @param The @c VXInstructionInfo struct that receives the decoded data. + * @return @c true if it succeeds, @c false if it fails. + * This method reads an additional input byte. + */ static bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @brief Decodes the SIB field of the instruction. + * @param ctx The context. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return @c true if it succeeds, @c false if it fails.1 + * This method reads an additional input byte. + */ static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @brief Decodes VEX prefix of the instruction. + * @param ctx The context. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return @c true if it succeeds, @c false if it fails. + * This method takes the current input byte to determine the vex prefix type and reads one or + * two additional input bytes on demand. + */ static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @brief Returns the effective operand size. + * @param ctx The context. + * @param info The instruction info. + * @param operandSize The defined operand size. + * @return The effective operand size. + */ static uint16_t VXInstructionDecoder_GetEffectiveOperandSize( const VXInstructionDecoderContext *ctx, const VXInstructionInfo *info, VXDefinedOperandSize operandSize); + +/** + * @brief Decodes all instruction operands. + * @param ctx The context. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return @c true if it succeeds, @c false if it fails. + */ static bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @brief Decodes the specified instruction operand. + * @param ctx The context. + * @param info The instruction info. + * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operandType The defined type of the operand. + * @param operandSize The defined size of the operand. + * @return @c true if it succeeds, @c false if it fails. + */ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandType operandType, VXDefinedOperandSize operandSize); + +/** + * @brief Resolves the effective operand and address mode of the instruction. + * @param ctx The context. + * @param info The @c VXInstructionInfo struct that receives the effective operand and + * address mode. + * @remarks This function requires a non-null value in the @c instrDefinition field of the + * @c info struct. + */ static void VXInstructionDecoder_ResolveOperandAndAddressMode( const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @brief Calculates the effective REX/VEX.w, r, x, b, l values. + * @param ctx The context. + * @param info The @c VXInstructionInfo struct that receives the effective operand and + * address mode. + * @remarks This method requires a non-null value in the @c instrDefinition field of the + * @c info struct. + */ static void VXInstructionDecoder_CalculateEffectiveRexVexValues( const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @brief Collects and decodes optional instruction prefixes. + * @param ctx The context. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return @c true if it succeeds, @c false if it fails. + */ static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); + +/** + * @brief Collects and decodes the instruction opcodes using the opcode tree. + * @param ctx The context. + * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @return @c true if it succeeds, @c false if it fails. + */ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, VXInstructionInfo *info); -VXInstructionDecoderContext* VXInstructionDecoder_Create(void); -VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( - VXBaseDataSourceContext *input, VXDisassemblerMode disassemblerMode, - VXInstructionSetVendor preferredVendor, uint64_t instructionPointer); -bool VXInstructionDecoder_DecodeInstruction(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); /* Implementation ============================================================================== */ @@ -842,10 +1023,10 @@ static bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, info->modrm_rm = (info->modrm >> 0) & 0x07; } - // The @c decodeModrm method might get called multiple times during the opcode- and the - // operand decoding, but the effective REX/VEX fields are not initialized before the end of - // the opcode decoding process-> As the extended values are only used for the operand decoding, - // we should have no problems-> + // This function might get called multiple times during the opcode- and the operand decoding, + // but the effective REX/VEX fields are not initialized before the end of the opcode + // decoding process-> As the extended values are only used for the operand decoding, we + // should have no problems-> info->modrm_reg_ext = (info->eff_rexvex_r << 3) | info->modrm_reg; info->modrm_rm_ext = (info->eff_rexvex_b << 3) | info->modrm_rm; return true; @@ -856,6 +1037,7 @@ static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, { assert(info->flags & IF_MODRM); assert((info->modrm_rm & 0x7) == 4); + if (!(info->flags & IF_SIB)) { info->sib = VXInstructionDecoder_InputNext8(ctx, info); @@ -872,6 +1054,7 @@ static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, info->sib_index_ext = (info->eff_rexvex_x << 3) | info->sib_index; info->sib_base_ext = (info->eff_rexvex_b << 3) | info->sib_base; } + return true; } @@ -924,6 +1107,7 @@ static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, default: assert(0); } + if (info->vex_m_mmmm > 3) { // TODO: Add proper error flag diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.c b/VerteronDisassemblerEngine/VXInstructionFormatter.c index f173927..4ad27a5 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.c +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.c @@ -59,11 +59,17 @@ typedef struct _VXBaseSymbolResolver VXBaseSymbolResolver_ResolveSymbolCallback resolveCallback; } VXBaseSymbolResolver; +/** + * @brief Constructor. + * @param ctx The context. + */ static void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx); + +/** + * @brief Destructor. + * @param ctx The context. + */ static void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); -void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx); -const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, uint64_t address, uint64_t *offset); /* VXBaseInstructionFormatter ------------------------------------------------------------------ */ @@ -83,33 +89,103 @@ typedef struct _VXBaseInstructionFormatter bool outputUppercase; } VXBaseInstructionFormatter; +/** + * @brief Constructor. + * @param ctx The context. + * @param symbolResolver The symbol resolver to use when formatting addresses. + */ static void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); + +/** + * @brief Destructor. + * @param ctx The context. + */ static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); -void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx); -/*static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, bool uppercase);*/ + +/*static void VXBaseInstructionFormatter_OutputSetUppercase( + VXBaseInstructionFormatterContext *ctx, bool uppercase);*/ + +/** + * @brief Returns the string representation of a given register. + * @param ctx The context. + * @param reg The register. + * @return The string representation of the given register. + */ static char const* VXBaseInstructionFormatter_RegisterToString( const VXBaseInstructionFormatterContext *ctx, VXRegister reg); + +/** + * @brief Resolves a symbol. + * @param ctx The context. + * @param info The instruction info. + * @param address The address. + * @param offset Reference to an unsigned 64 bit integer that receives an offset relative + * to the base address of the symbol. + * @return The name of the symbol, if the symbol was found, @c NULL if not. + */ static char const* VXBaseInstructionFormatter_ResolveSymbol( const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); -VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( - const VXBaseInstructionFormatterContext *ctx); -void VXBaseInstructionFormatter_SetSymbolResolver(VXBaseInstructionFormatterContext *ctx, - VXBaseSymbolResolverContext *symbolResolver); -const char* VXBaseInstructionFormatter_FormatInstruction(VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info); + +/** + * @brief Clears the output string buffer. + * @param ctx The context. + */ static void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx); + +/** + * @brief Returns the content of the output string buffer. + * @param ctx The context. + * @return Pointer to the content of the ouput string buffer. + */ static char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx); + +/** + * @brief Appends text to the ouput string buffer. + * @param ctx The context. + * @param text The text. + */ static void VXBaseInstructionFormatter_OutputAppend(VXBaseInstructionFormatterContext *ctx, char const *text); + +/** + * @brief Appends formatted text to the output string buffer. + * @param ctx The context. + * @param format The format string. + */ static void VXBaseInstructionFormatter_OutputAppendFormatted( VXBaseInstructionFormatterContext *ctx, char const *format, ...); + +/** + * @brief Appends a formatted address to the output string buffer. + * @param ctx The context. + * @param info The instruction info. + * @param address The address. + * @param resolveSymbols If this parameter is true, the function will try to display a + * smybol name instead of the numeric value. + */ static void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info, uint64_t address, bool resolveSymbols); + const VXInstructionInfo *info, uint64_t address, bool resolveSymbols); + +/** + * @brief Appends a formatted immediate value to the output string buffer. + * @param ctx The context. + * @param info The instruction info. + * @param operand The immediate operand. + * @param resolveSymbols If this parameter is true, the function will try to display a + * smybol name instead of the numeric value. + */ static void VXBaseInstructionFormatter_OutputAppendImmediate( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols); + +/** + * @brief Appends a formatted memory displacement value to the output string buffer. + * @param ctx The context. + * @param info The instruction info. + * @param operand The memory operand. + */ static void VXBaseInstructionFormatter_OutputAppendDisplacement( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); @@ -123,11 +199,24 @@ typedef struct _VXCustomSymbolResolver void *userData; } VXCustomSymbolResolver; +/** + * @brief Constructor. + * @param ctx The context. + * @param resolverCb The resolver callback. + * @param userData User defined data passed to the resolver callback. + */ static void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); + +/** + * @brief Destructor. + * @param ctx The context. + */ static void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); -VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( - VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); + +/** + * @copydoc VXBaseSymbolResolver_Resolve + */ static const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset); @@ -138,17 +227,43 @@ typedef struct _VXIntelInstructionFormatter VXBaseInstructionFormatter super; } VXIntelInstructionFormatter; -VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); -VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( - VXBaseSymbolResolverContext *resolver); +/** + * @brief Constructor. + * @param ctx The context. + * @param symbolResolver The symbol resolver used to resolve addresses. + * @param userData User defined data passed to the resolver callback. + */ static void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver); + +/** + * @brief Destructor. + * @param ctx The context. + */ static void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); + +/** + * @brief Appends an operand cast to the output string buffer. + * @param ctx The context. + * @param info The instruction info. + * @param operand The operand. + */ static void VXIntelInstructionFormatter_OutputAppendOperandCast( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); + +/** + * @brief Formats the specified operand and appends it to the output buffer. + * @param ctx The context. + * @param info The instruction info. + * @param operand The operand. + */ static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand); + +/** + * @coypdoc VXBaseInstructionFormatter_InternalFormatInstruction + */ static void VXIntelInstructionFormatter_InternalFormatInstruction( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); From f94792e4f9a11f9210f6afc9149e2e426fa16859 Mon Sep 17 00:00:00 2001 From: Ende! Date: Thu, 19 Mar 2015 17:13:37 +0100 Subject: [PATCH 23/33] added custom data source and made some fixes - added "class" VXCustomDataSource allowing a user to write a custom data source - increased warning level on MSVC to /W4 and resolved warnings arising from that - added VX_UNUSED macro that allows shutting up unused-arg warnings explicitly when needed --- Bindings/Cpp/VXInstructionDecoder.hpp | 4 +- CMakeLists.txt | 2 +- Examples/CppBindings/Main.cpp | 2 + Examples/CustomDataSource/Main.c | 8 +- Examples/PerformanceTest/Main.c | 8 +- Examples/SymbolResolver/Main.c | 6 +- .../VXInstructionDecoder.c | 108 +++++++++++++++--- .../VXInstructionDecoder.h | 30 ++++- .../VXInstructionFormatter.c | 32 +++--- VerteronDisassemblerEngine/VXInternalConfig.h | 2 + .../VXInternalHelpers.h | 23 +++- .../VXOpcodeTableInternal.h | 8 +- 12 files changed, 185 insertions(+), 48 deletions(-) diff --git a/Bindings/Cpp/VXInstructionDecoder.hpp b/Bindings/Cpp/VXInstructionDecoder.hpp index 7ecf592..216b4d0 100644 --- a/Bindings/Cpp/VXInstructionDecoder.hpp +++ b/Bindings/Cpp/VXInstructionDecoder.hpp @@ -323,7 +323,7 @@ inline uint8_t VXStreamDataSource::internalInputPeek() { return 0; } - return m_inputStream->peek(); + return static_cast(m_inputStream->peek()); } inline uint8_t VXStreamDataSource::internalInputNext() @@ -332,7 +332,7 @@ inline uint8_t VXStreamDataSource::internalInputNext() { return 0; } - return m_inputStream->get(); + return static_cast(m_inputStream->get()); } inline bool VXStreamDataSource::isEndOfInput() const diff --git a/CMakeLists.txt b/CMakeLists.txt index 454168b..3cec443 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ if (NOT CONFIGURED_ONCE) set(compiler_specific "-Werror") set(compiler_specific_cxx "-std=c++0x") elseif (MSVC) - set(compiler_specific "/WX /D_CRT_SECURE_NO_WARNINGS") + set(compiler_specific "/WX /W4 /D_CRT_SECURE_NO_WARNINGS") endif () set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${compiler_specific} ${compiler_specific_cxx}" diff --git a/Examples/CppBindings/Main.cpp b/Examples/CppBindings/Main.cpp index 3f67a61..7cadb0c 100644 --- a/Examples/CppBindings/Main.cpp +++ b/Examples/CppBindings/Main.cpp @@ -39,6 +39,8 @@ using namespace Verteron; int main(int argc, char* argv[]) { + (void)argc; (void)argv; + uint8_t data32[] = { 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x6A, 0xFE, 0x68, 0xD8, 0x18, 0x09, 0x77, 0x68, 0x85, 0xD2, diff --git a/Examples/CustomDataSource/Main.c b/Examples/CustomDataSource/Main.c index a08a382..4db36ce 100644 --- a/Examples/CustomDataSource/Main.c +++ b/Examples/CustomDataSource/Main.c @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : + Modifications : athre0z - Last change : 29. October 2014 + Last change : 19. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -30,8 +30,12 @@ **************************************************************************************************/ +#include + int main(int argc, char* argv[]) { + VX_UNUSED(argc); VX_UNUSED(argv); + // TODO: return 0; } diff --git a/Examples/PerformanceTest/Main.c b/Examples/PerformanceTest/Main.c index a08a382..4db36ce 100644 --- a/Examples/PerformanceTest/Main.c +++ b/Examples/PerformanceTest/Main.c @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : + Modifications : athre0z - Last change : 29. October 2014 + Last change : 19. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -30,8 +30,12 @@ **************************************************************************************************/ +#include + int main(int argc, char* argv[]) { + VX_UNUSED(argc); VX_UNUSED(argv); + // TODO: return 0; } diff --git a/Examples/SymbolResolver/Main.c b/Examples/SymbolResolver/Main.c index f73c8dc..ec98236 100644 --- a/Examples/SymbolResolver/Main.c +++ b/Examples/SymbolResolver/Main.c @@ -6,9 +6,9 @@ Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : + Modifications : athre0z - Last change : 29. October 2014 + Last change : 19. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -35,6 +35,8 @@ int main(int argc, char* argv[]) { + VX_UNUSED(argc); VX_UNUSED(argv); + // TODO: port to C /* diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.c b/VerteronDisassemblerEngine/VXInstructionDecoder.c index 9f93bc6..d9aa5c1 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.c +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.c @@ -8,7 +8,7 @@ Original Author : Florian Bernd Modifications : athre0z - Last change : 13. March 2015 + Last change : 19. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -42,13 +42,6 @@ /* VXBaseDataSource ---------------------------------------------------------------------------- */ -typedef void(*VXBaseDataSource_DestructionCallback)(VXBaseDataSourceContext *ctx); -typedef uint8_t(*VXBaseDataSource_InputCallback)(VXBaseDataSourceContext *ctx); -typedef bool(*VXBaseDataSource_IsEndOfInputCallback)(const VXBaseDataSourceContext *ctx); -typedef uint64_t(*VXBaseDataSource_GetPositionCallback)(const VXBaseDataSourceContext *ctx); -typedef bool(*VXBaseDataSource_SetPositionCallback)( - VXBaseDataSourceContext *ctx, uint64_t position); - typedef struct _VXBaseDataSource { uint8_t currentInput; @@ -128,6 +121,38 @@ static uint64_t VXMemoryDataSource_GetPosition(const VXBaseDataSourceContext *ct */ static bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position); +/* VXCustomDataSource -------------------------------------------------------------------------- */ + +typedef struct _VXCustomDataSource +{ + VXBaseDataSource super; + VXBaseDataSource_DestructionCallback userDestruct; // may be NULL +} VXCustomDataSource; + +/** + * @brief Constructor. + * @param ctx The context. + * @param inputPeekCb The callback peeking the next input byte. + * @param inputNextCb The callback consuming the next input byte. + * @param isEndOfInputCb The callback determining if the end of input was reached. + * @param getPositionCb The callback obtaining the current input position. + * @param setPositionCb The callback setting the current input position. + * @param destructionCb The destruction callback. May be @c NULL. + */ +static void VXCustomDataSource_Construct(VXBaseDataSourceContext *ctx, + VXBaseDataSource_InputCallback inputPeekCb, + VXBaseDataSource_InputCallback inputNextCb, + VXBaseDataSource_IsEndOfInputCallback isEndOfInputCb, + VXBaseDataSource_GetPositionCallback getPositionCb, + VXBaseDataSource_SetPositionCallback setPositionCb, + VXBaseDataSource_DestructionCallback destructionCb); + +/** + * @brief Destructor. + * @param The context. + */ +static void VXCustomDataSource_Destruct(VXBaseDataSourceContext *ctx); + /* VXInstructionDecoder ------------------------------------------------------------------------ */ typedef struct _VXInstructionDecoder @@ -367,7 +392,7 @@ static void VXBaseDataSource_Construct(VXBaseDataSourceContext *ctx) static void VXBaseDataSource_Destruct(VXBaseDataSourceContext *ctx) { - + VX_UNUSED(ctx); } void VXBaseDataSource_Release(VXBaseDataSourceContext *ctx) @@ -543,6 +568,61 @@ static bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_ return thiz->super.isEndOfInput(ctx); } +/* VXCustomDataSource -------------------------------------------------------------------------- */ + +static void VXCustomDataSource_Construct(VXBaseDataSourceContext *ctx, + VXBaseDataSource_InputCallback inputPeekCb, + VXBaseDataSource_InputCallback inputNextCb, + VXBaseDataSource_IsEndOfInputCallback isEndOfInputCb, + VXBaseDataSource_GetPositionCallback getPositionCb, + VXBaseDataSource_SetPositionCallback setPositionCb, + VXBaseDataSource_DestructionCallback destructionCb) +{ + VXBaseDataSource_Construct(ctx); + + VXCustomDataSource *thiz = VXCustomDataSource_thiz(ctx); + thiz->super.destruct = &VXCustomDataSource_Destruct; + thiz->super.internalInputPeek = inputPeekCb; + thiz->super.internalInputNext = inputNextCb; + thiz->super.isEndOfInput = isEndOfInputCb; + thiz->super.getPosition = getPositionCb; + thiz->super.setPosition = setPositionCb; + + thiz->userDestruct = destructionCb; +} + +static void VXCustomDataSource_Destruct(VXBaseDataSourceContext *ctx) +{ + VXCustomDataSource *thiz = VXCustomDataSource_thiz(ctx); + + if (thiz->userDestruct) + { + thiz->userDestruct(ctx); + } + + VXBaseDataSource_Destruct(ctx); +} + +VXBaseDataSourceContext* VXCustomDataSource_Create( + VXBaseDataSource_InputCallback inputPeekCb, + VXBaseDataSource_InputCallback inputNextCb, + VXBaseDataSource_IsEndOfInputCallback isEndOfInputCb, + VXBaseDataSource_GetPositionCallback getPositionCb, + VXBaseDataSource_SetPositionCallback setPositionCb, + VXBaseDataSource_DestructionCallback destructionCb) +{ + VXCustomDataSource *thiz = malloc(sizeof(VXCustomDataSource)); + VXBaseDataSourceContext *ctx = malloc(sizeof(VXBaseDataSourceContext)); + + ctx->d.type = TYPE_CUSTOMDATASOURCE; + ctx->d.ptr = thiz; + + VXCustomDataSource_Construct(ctx, inputPeekCb, inputNextCb, isEndOfInputCb, getPositionCb, + setPositionCb, destructionCb); + + return ctx; +} + /* VXInstructionDecoder ------------------------------------------------------------------------ */ void VXInstructionDecoder_Construct(VXInstructionDecoderContext *ctx, @@ -559,7 +639,7 @@ void VXInstructionDecoder_Construct(VXInstructionDecoderContext *ctx, void VXInstructionDecoder_Destruct(VXInstructionDecoderContext *ctx) { - + VX_UNUSED(ctx); } VXInstructionDecoderContext* VXInstructionDecoder_Create(void) @@ -1377,7 +1457,7 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, case DOT_R6: case DOT_R7: return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, - ((info->eff_rexvex_b << 3) | operandType - DOT_R0), operandSize); + (uint8_t)((info->eff_rexvex_b << 3) | operandType - DOT_R0), operandSize); case DOT_AL: case DOT_AX: case DOT_EAX: @@ -1411,7 +1491,7 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, } } operand->type = OPTYPE_REGISTER; - operand->base = operandType - DOT_ES + REG_ES; + operand->base = (uint16_t)(operandType - DOT_ES + REG_ES); operand->size = 16; break; case DOT_ST0: @@ -1423,7 +1503,7 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, case DOT_ST6: case DOT_ST7: operand->type = OPTYPE_REGISTER; - operand->base = operandType - DOT_ST0 + REG_ST0; + operand->base = (uint16_t)(operandType - DOT_ST0 + REG_ST0); operand->size = 80; break; default: @@ -1472,6 +1552,8 @@ static void VXInstructionDecoder_ResolveOperandAndAddressMode( static void VXInstructionDecoder_CalculateEffectiveRexVexValues( const VXInstructionDecoderContext *ctx, VXInstructionInfo *info) { + VX_UNUSED(ctx); + assert(info->instrDefinition); uint8_t rex = info->rex; if (info->flags & IF_PREFIX_VEX) diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.h b/VerteronDisassemblerEngine/VXInstructionDecoder.h index c19efc0..34a04d0 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.h +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.h @@ -48,6 +48,13 @@ extern "C" typedef struct _VXBaseDataSourceContext { VXContextDescriptor d; } VXBaseDataSourceContext; +typedef void(*VXBaseDataSource_DestructionCallback)(VXBaseDataSourceContext *ctx); +typedef uint8_t(*VXBaseDataSource_InputCallback)(VXBaseDataSourceContext *ctx); +typedef bool(*VXBaseDataSource_IsEndOfInputCallback)(const VXBaseDataSourceContext *ctx); +typedef uint64_t(*VXBaseDataSource_GetPositionCallback)(const VXBaseDataSourceContext *ctx); +typedef bool(*VXBaseDataSource_SetPositionCallback)( + VXBaseDataSourceContext *ctx, uint64_t position); + /** * @brief Releases a data source. * @param ctx The context to release. @@ -150,11 +157,32 @@ VX_EXPORT bool VXBaseDataSource_SetPosition( * @return @c NULL if it fails, else a data source context. * @see VXBaseDataSource_Release */ -// TODO: verify return value VX_EXPORT VXBaseDataSourceContext* VXMemoryDataSource_Create( const void* buffer, size_t bufferLen); +/* VXCustomDataSource ========================================================================== */ + +/** + * @brief Creates a custom daat source. + * @param ctx The context. + * @param inputPeekCb The callback peeking the next input byte. + * @param inputNextCb The callback consuming the next input byte. + * @param isEndOfInputCb The callback determining if the end of input was reached. + * @param getPositionCb The callback obtaining the current input position. + * @param setPositionCb The callback setting the current input position. + * @param destructionCb The destruction callback. May be @c NULL. + * @return @c NULL if it fails, else a data source context. + * @see VXBaseDataSource_Release + */ +VX_EXPORT VXBaseDataSourceContext* VXCustomDataSource_Create( + VXBaseDataSource_InputCallback inputPeekCb, + VXBaseDataSource_InputCallback inputNextCb, + VXBaseDataSource_IsEndOfInputCallback isEndOfInputCb, + VXBaseDataSource_GetPositionCallback getPositionCb, + VXBaseDataSource_SetPositionCallback setPositionCb, + VXBaseDataSource_DestructionCallback destructionCb); + /* Enums ======================================================================================= */ /** diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.c b/VerteronDisassemblerEngine/VXInstructionFormatter.c index 4ad27a5..84113dd 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.c +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.c @@ -8,7 +8,7 @@ Original Author : Florian Bernd Modifications : athre0z - Last change : 14. March 2014 + Last change : 19. March 2014 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -183,12 +183,10 @@ static void VXBaseInstructionFormatter_OutputAppendImmediate( /** * @brief Appends a formatted memory displacement value to the output string buffer. * @param ctx The context. - * @param info The instruction info. * @param operand The memory operand. */ static void VXBaseInstructionFormatter_OutputAppendDisplacement( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, - const VXOperandInfo *operand); + VXBaseInstructionFormatterContext *ctx, const VXOperandInfo *operand); /* VXCustomSymbolResolver ---------------------------------------------------------------------- */ @@ -245,12 +243,10 @@ static void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterConte /** * @brief Appends an operand cast to the output string buffer. * @param ctx The context. - * @param info The instruction info. * @param operand The operand. */ static void VXIntelInstructionFormatter_OutputAppendOperandCast( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, - const VXOperandInfo *operand); + VXBaseInstructionFormatterContext *ctx, const VXOperandInfo *operand); /** * @brief Formats the specified operand and appends it to the output buffer. @@ -278,7 +274,7 @@ void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx) void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx) { - + VX_UNUSED(ctx); } void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx) @@ -454,6 +450,8 @@ static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionForma static char const* VXBaseInstructionFormatter_RegisterToString( const VXBaseInstructionFormatterContext *ctx, VXRegister reg) { + VX_UNUSED(ctx); + if (reg == REG_NONE) { return "error"; @@ -553,7 +551,7 @@ static void VXBaseInstructionFormatter_OutputAppend( { for (size_t i = offset; i < thiz->outputStringLen - 1; ++i) { - thiz->outputBuffer[i] = toupper(thiz->outputBuffer[i]); + thiz->outputBuffer[i] = (char)toupper(thiz->outputBuffer[i]); } } } @@ -605,7 +603,7 @@ static void VXBaseInstructionFormatter_OutputAppendFormatted( { for (size_t i = offset; i < thiz->outputStringLen - 1; ++i) { - thiz->outputBuffer[i] = toupper(thiz->outputBuffer[i]); + thiz->outputBuffer[i] = (char)toupper(thiz->outputBuffer[i]); } } @@ -725,8 +723,7 @@ static void VXBaseInstructionFormatter_OutputAppendImmediate( } static void VXBaseInstructionFormatter_OutputAppendDisplacement( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, - const VXOperandInfo *operand) + VXBaseInstructionFormatterContext *ctx, const VXOperandInfo *operand) { assert(operand->offset > 0); if ((operand->base == REG_NONE) && (operand->index == REG_NONE)) @@ -821,8 +818,7 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( } static void VXIntelInstructionFormatter_OutputAppendOperandCast( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, - const VXOperandInfo *operand) + VXBaseInstructionFormatterContext *ctx, const VXOperandInfo *operand) { switch(operand->size) { @@ -895,7 +891,7 @@ static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatter if (operand->offset) { - VXBaseInstructionFormatter_OutputAppendDisplacement(ctx, info, operand); + VXBaseInstructionFormatter_OutputAppendDisplacement(ctx, operand); } } VXBaseInstructionFormatter_OutputAppend(ctx, "]"); @@ -996,7 +992,7 @@ static void VXIntelInstructionFormatter_InternalFormatInstruction( if (cast) { - VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, info, &info->operand[0]); + VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[0]); } VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[0]); } @@ -1021,7 +1017,7 @@ static void VXIntelInstructionFormatter_InternalFormatInstruction( if (cast) { - VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, info, &info->operand[1]); + VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[1]); } VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[1]); } @@ -1039,7 +1035,7 @@ static void VXIntelInstructionFormatter_InternalFormatInstruction( if (cast) { - VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, info, &info->operand[2]); + VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[2]); } VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[2]); diff --git a/VerteronDisassemblerEngine/VXInternalConfig.h b/VerteronDisassemblerEngine/VXInternalConfig.h index ba4c6b2..2e88351 100644 --- a/VerteronDisassemblerEngine/VXInternalConfig.h +++ b/VerteronDisassemblerEngine/VXInternalConfig.h @@ -45,4 +45,6 @@ # define VX_INLINE static inline #endif +#define VX_UNUSED(x) ((void)x) + #endif /* _VDE_VXINTERNALCONFIG_H_ */ diff --git a/VerteronDisassemblerEngine/VXInternalHelpers.h b/VerteronDisassemblerEngine/VXInternalHelpers.h index 9e17910..e310bbe 100644 --- a/VerteronDisassemblerEngine/VXInternalHelpers.h +++ b/VerteronDisassemblerEngine/VXInternalHelpers.h @@ -8,7 +8,7 @@ Original Author : athre0z Modifications : - Last change : 13. March 2015 + Last change : 19. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -45,6 +45,7 @@ typedef enum _VXTypeId { TYPE_BASEDATASOURCE, TYPE_MEMORYDATASOURCE, + TYPE_CUSTOMDATASOURCE, TYPE_INSTRUCTIONDECODER, TYPE_BASESYMBOLRESOLVER, TYPE_CUSTOMSYMBOLRESOLVER, @@ -58,7 +59,8 @@ VX_INLINE struct _VXBaseDataSource* VXBaseDataSource_thiz( VXBaseDataSourceContext *ctx) { assert(ctx->d.type == TYPE_BASEDATASOURCE - || ctx->d.type == TYPE_MEMORYDATASOURCE); + || ctx->d.type == TYPE_MEMORYDATASOURCE + || ctx->d.type == TYPE_CUSTOMDATASOURCE); return (struct _VXBaseDataSource*)ctx->d.ptr; } @@ -66,7 +68,8 @@ VX_INLINE const struct _VXBaseDataSource* VXBaseDataSource_cthiz( const VXBaseDataSourceContext *ctx) { assert(ctx->d.type == TYPE_BASEDATASOURCE - || ctx->d.type == TYPE_MEMORYDATASOURCE); + || ctx->d.type == TYPE_MEMORYDATASOURCE + || ctx->d.type == TYPE_CUSTOMDATASOURCE); return (const struct _VXBaseDataSource*)ctx->d.ptr; } @@ -84,6 +87,20 @@ VX_INLINE const struct _VXMemoryDataSource* VXMemoryDataSource_cthiz( return (const struct _VXMemoryDataSource*)ctx->d.ptr; } +VX_INLINE struct _VXCustomDataSource* VXCustomDataSource_thiz( + VXBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMDATASOURCE); + return (struct _VXCustomDataSource*)ctx->d.ptr; +} + +VX_INLINE const struct _VXCustomDataSource* VXCustomDataSource_cthiz( + const VXBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMDATASOURCE); + return (const struct _VXCustomDataSource*)ctx->d.ptr; +} + VX_INLINE struct _VXInstructionDecoder* VXInstructionDecoder_thiz( VXInstructionDecoderContext *ctx) { diff --git a/VerteronDisassemblerEngine/VXOpcodeTableInternal.h b/VerteronDisassemblerEngine/VXOpcodeTableInternal.h index 06c4c08..347f079 100644 --- a/VerteronDisassemblerEngine/VXOpcodeTableInternal.h +++ b/VerteronDisassemblerEngine/VXOpcodeTableInternal.h @@ -5,10 +5,10 @@ Remarks : Freeware, Copyright must be included - Original Author : athre0z - Modifications : + Original Author : Florian Bernd + Modifications : athre0z - Last change : 14. March 2015 + Last change : 19. March 2015 * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -285,7 +285,7 @@ VX_INLINE uint16_t VXGetSimpleOperandSize(VXDefinedOperandSize operandSize) 8, 16, 32, 64, 80, 12, 128, 256 }; - uint16_t index = operandSize - DOS_B; + uint16_t index = (uint16_t)(operandSize - DOS_B); assert(index < 8); return operandSizes[index]; } From b93ddf848b7c498dcc9af72705791b4f63c25b63 Mon Sep 17 00:00:00 2001 From: Ende! Date: Thu, 19 Mar 2015 19:30:25 +0100 Subject: [PATCH 24/33] fixed potential memory leak --- .../VXInstructionDecoder.c | 32 +++++++++++++++++++ .../VXInstructionFormatter.c | 20 ++++++++++++ 2 files changed, 52 insertions(+) diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.c b/VerteronDisassemblerEngine/VXInstructionDecoder.c index d9aa5c1..1296aee 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.c +++ b/VerteronDisassemblerEngine/VXInstructionDecoder.c @@ -526,6 +526,15 @@ VXBaseDataSourceContext* VXMemoryDataSource_Create( if (!thiz || !ctx) { + if (thiz) + { + free(thiz); + } + if (ctx) + { + free(ctx); + } + return NULL; } @@ -614,6 +623,20 @@ VXBaseDataSourceContext* VXCustomDataSource_Create( VXCustomDataSource *thiz = malloc(sizeof(VXCustomDataSource)); VXBaseDataSourceContext *ctx = malloc(sizeof(VXBaseDataSourceContext)); + if (!thiz || !ctx) + { + if (thiz) + { + free(thiz); + } + if (ctx) + { + free(ctx); + } + + return NULL; + } + ctx->d.type = TYPE_CUSTOMDATASOURCE; ctx->d.ptr = thiz; @@ -656,6 +679,15 @@ VXInstructionDecoderContext* VXInstructionDecoder_CreateEx(VXBaseDataSourceConte if (!thiz || !ctx) { + if (thiz) + { + free(thiz); + } + if (ctx) + { + free(ctx); + } + return NULL; } diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.c b/VerteronDisassemblerEngine/VXInstructionFormatter.c index 84113dd..4613095 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.c +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.c @@ -325,6 +325,15 @@ VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( if (!thiz || !ctx) { + if (thiz) + { + free(thiz); + } + if (ctx) + { + free(ctx); + } + return NULL; } @@ -807,7 +816,18 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( VXBaseInstructionFormatterContext *ctx = malloc(sizeof(VXBaseInstructionFormatterContext)); if (!thiz || !ctx) + { + if (thiz) + { + free(thiz); + } + if (ctx) + { + free(ctx); + } + return NULL; + } ctx->d.type = TYPE_INTELINSTRUCTIONFORMATTER; ctx->d.ptr = thiz; From 7e26fa168358f7681f54aeca2ef85ff020c0cabd Mon Sep 17 00:00:00 2001 From: Ende! Date: Thu, 19 Mar 2015 21:05:14 +0100 Subject: [PATCH 25/33] introduced custom instruction formatters --- .../VXInstructionFormatter.c | 66 ++++++++++++++++++- .../VXInstructionFormatter.h | 15 ++++- .../VXInternalHelpers.h | 21 +++++- 3 files changed, 97 insertions(+), 5 deletions(-) diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.c b/VerteronDisassemblerEngine/VXInstructionFormatter.c index 4613095..13f7643 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.c +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.c @@ -75,8 +75,6 @@ static void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); typedef void(*VXBaseInstructionFormatter_DestructionCallback)( VXBaseInstructionFormatterContext *ctx); -typedef void(*VXBaseInstructionFormatter_InternalFormatInstructionCallback)( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); typedef struct _VXBaseInstructionFormatter { @@ -263,6 +261,27 @@ static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatter static void VXIntelInstructionFormatter_InternalFormatInstruction( VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); +/* VXCustomInstructionFormatter ---------------------------------------------------------------- */ + +typedef struct _VXCustomInstructionFormatter +{ + VXBaseInstructionFormatter super; +} VXCustomInstructionFormatter; + +/** + * @brief Contructor. + * @param ctx The context. + * @param formatInsnCb The callback formatting the instruction. + */ +static void VXCustomInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, + VXBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb); + +/** + * @brief Destructor. + * @param ctx The context. + */ +static void VXCustomInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); + /* Implementation ============================================================================== */ /* VXBaseSymbolResolver ------------------------------------------------------------------------ */ @@ -1069,6 +1088,49 @@ static void VXIntelInstructionFormatter_InternalFormatInstruction( } } +/* VXCustomInstructionFormatter ---------------------------------------------------------------- */ + +static void VXCustomInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, + VXBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb) +{ + VXBaseInstructionFormatter_Construct(ctx, NULL); + + VXCustomInstructionFormatter *thiz = VXCustomInstructionFormatter_thiz(ctx); + thiz->super.internalFormat = formatInsnCb; +} + +static void VXCustomInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) +{ + VXBaseInstructionFormatter_Destruct(ctx); +} + +VX_EXPORT VXBaseInstructionFormatterContext* VXCustomInstructionFormatter_Create( + VXBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb) +{ + VXCustomInstructionFormatter *thiz = malloc(sizeof(VXCustomInstructionFormatter)); + VXBaseInstructionFormatterContext *ctx = malloc(sizeof(VXBaseInstructionFormatterContext)); + + if (!thiz || !ctx) + { + if (thiz) + { + free(thiz); + } + if (ctx) + { + free(ctx); + } + + return NULL; + } + + ctx->d.type = TYPE_CUSTOMINSTRUCTIONFORMATTER; + ctx->d.ptr = thiz; + + VXCustomInstructionFormatter_Construct(ctx, formatInsnCb); + return ctx; +} + /* --------------------------------------------------------------------------------------------- */ /* ============================================================================================= */ diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.h b/VerteronDisassemblerEngine/VXInstructionFormatter.h index 43729e6..42b2c03 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.h +++ b/VerteronDisassemblerEngine/VXInstructionFormatter.h @@ -97,6 +97,9 @@ typedef struct _VXBaseInstructionFormatterContext VXContextDescriptor d; } VXBaseInstructionFormatterContext; +typedef void(*VXBaseInstructionFormatter_InternalFormatInstructionCallback)( + VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); + /** * @brief Formats a decoded instruction. * @param ctx The instruction formatter context. @@ -134,7 +137,7 @@ VX_EXPORT void VXBaseInstructionFormatter_SetSymbolResolver( VX_EXPORT void VXBaseInstructionFormatter_Release( VXBaseInstructionFormatterContext *ctx); -/* VXIntelInstructionFormatter ================================================================ */ +/* VXIntelInstructionFormatter ================================================================= */ /** * @brief Creates an Intel-syntax instruction formatter. @@ -152,6 +155,16 @@ VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create( VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( VXBaseSymbolResolverContext *resolver); +/* VXCustomInstructionFormatter ================================================================ */ + +/** + * @brief Creats a custom instruction formatter. + * @param formatInsnCb The callback formatting the instruction. + * @return @c NULL if it fails, else a custom instruction formatter context. + */ +VX_EXPORT VXBaseInstructionFormatterContext* VXCustomInstructionFormatter_Create( + VXBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb); + /* ============================================================================================= */ #ifdef __cplusplus diff --git a/VerteronDisassemblerEngine/VXInternalHelpers.h b/VerteronDisassemblerEngine/VXInternalHelpers.h index e310bbe..1389f85 100644 --- a/VerteronDisassemblerEngine/VXInternalHelpers.h +++ b/VerteronDisassemblerEngine/VXInternalHelpers.h @@ -51,6 +51,7 @@ typedef enum _VXTypeId TYPE_CUSTOMSYMBOLRESOLVER, TYPE_BASEINSTRUCTIONFORMATTER, TYPE_INTELINSTRUCTIONFORMATTER, + TYPE_CUSTOMINSTRUCTIONFORMATTER, } VXTypeId; /* Context conversion helpers ================================================================== */ @@ -149,7 +150,8 @@ VX_INLINE struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_thiz( VXBaseInstructionFormatterContext *ctx) { assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); + || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER + || ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); return (struct _VXBaseInstructionFormatter*)ctx->d.ptr; } @@ -157,7 +159,8 @@ VX_INLINE const struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_c const VXBaseInstructionFormatterContext *ctx) { assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); + || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER + || ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); return (const struct _VXBaseInstructionFormatter*)ctx->d.ptr; } @@ -175,6 +178,20 @@ VX_INLINE const struct _VXIntelInstructionFormatter* VXIntelInstructionFormatter return (const struct _VXIntelInstructionFormatter*)ctx->d.ptr; } +VX_INLINE struct _VXCustomInstructionFormatter* VXCustomInstructionFormatter_thiz( + VXBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); + return (struct _VXCustomInstructionFormatter*)ctx->d.ptr; +} + +VX_INLINE const struct _VXCustomInstructionFormatter* VXCustomInstructionFormatter_cthiz( + const VXBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); + return (struct _VXCustomInstructionFormatter*)ctx->d.ptr; +} + /* ============================================================================================= */ #endif /* _VDE_VXINTERNALHELPERS_H_ */ \ No newline at end of file From de31261273418b0e21f969df355e1ace9ced5792 Mon Sep 17 00:00:00 2001 From: athre0z Date: Tue, 12 May 2015 03:42:25 +0200 Subject: [PATCH 26/33] changed VX prefix to ZyDis (scriptually) --- Bindings/Cpp/VXOpcodeTable.cpp | 9655 ----------------- ...Disassembler.hpp => ZyDisDisassembler.hpp} | 8 +- ...erTypes.hpp => ZyDisDisassemblerTypes.hpp} | 28 +- ...erUtils.cpp => ZyDisDisassemblerUtils.cpp} | 10 +- ...erUtils.hpp => ZyDisDisassemblerUtils.hpp} | 4 +- ...ecoder.cpp => ZyDisInstructionDecoder.cpp} | 482 +- ...ecoder.hpp => ZyDisInstructionDecoder.hpp} | 186 +- ...tter.cpp => ZyDisInstructionFormatter.cpp} | 150 +- ...tter.hpp => ZyDisInstructionFormatter.hpp} | 68 +- Bindings/Cpp/ZyDisOpcodeTable.cpp | 9655 +++++++++++++++++ ...VXOpcodeTable.hpp => ZyDisOpcodeTable.hpp} | 116 +- CMakeLists.txt | 50 +- Examples/CppBindings/Main.cpp | 2 +- Examples/CustomDataSource/Main.c | 4 +- Examples/PerformanceTest/Main.c | 4 +- Examples/SimpleDemo/Main.c | 48 +- Examples/SymbolResolver/Main.c | 62 +- .../VXInternalHelpers.h | 197 - .../{VXDisassembler.h => ZyDisDisassembler.h} | 14 +- ...emblerTypes.h => ZyDisDisassemblerTypes.h} | 48 +- ...emblerUtils.c => ZyDisDisassemblerUtils.c} | 4 +- ...emblerUtils.h => ZyDisDisassemblerUtils.h} | 20 +- ...ionDecoder.c => ZyDisInstructionDecoder.c} | 794 +- ...ionDecoder.h => ZyDisInstructionDecoder.h} | 186 +- ...ormatter.c => ZyDisInstructionFormatter.c} | 490 +- ...ormatter.h => ZyDisInstructionFormatter.h} | 88 +- ...InternalConfig.h => ZyDisInternalConfig.h} | 14 +- .../ZyDisInternalHelpers.h | 197 + .../{VXOpcodeTable.c => ZyDisOpcodeTable.c} | 7558 ++++++------- .../{VXOpcodeTable.h => ZyDisOpcodeTable.h} | 48 +- ...eInternal.h => ZyDisOpcodeTableInternal.h} | 68 +- 31 files changed, 15129 insertions(+), 15129 deletions(-) delete mode 100644 Bindings/Cpp/VXOpcodeTable.cpp rename Bindings/Cpp/{VXDisassembler.hpp => ZyDisDisassembler.hpp} (90%) rename Bindings/Cpp/{VXDisassemblerTypes.hpp => ZyDisDisassemblerTypes.hpp} (97%) rename Bindings/Cpp/{VXDisassemblerUtils.cpp => ZyDisDisassemblerUtils.cpp} (85%) rename Bindings/Cpp/{VXDisassemblerUtils.hpp => ZyDisDisassemblerUtils.hpp} (92%) rename Bindings/Cpp/{VXInstructionDecoder.cpp => ZyDisInstructionDecoder.cpp} (69%) rename Bindings/Cpp/{VXInstructionDecoder.hpp => ZyDisInstructionDecoder.hpp} (75%) rename Bindings/Cpp/{VXInstructionFormatter.cpp => ZyDisInstructionFormatter.cpp} (76%) rename Bindings/Cpp/{VXInstructionFormatter.hpp => ZyDisInstructionFormatter.hpp} (79%) create mode 100644 Bindings/Cpp/ZyDisOpcodeTable.cpp rename Bindings/Cpp/{VXOpcodeTable.hpp => ZyDisOpcodeTable.hpp} (92%) delete mode 100644 VerteronDisassemblerEngine/VXInternalHelpers.h rename VerteronDisassemblerEngine/{VXDisassembler.h => ZyDisDisassembler.h} (85%) rename VerteronDisassemblerEngine/{VXDisassemblerTypes.h => ZyDisDisassemblerTypes.h} (95%) rename VerteronDisassemblerEngine/{VXDisassemblerUtils.c => ZyDisDisassemblerUtils.c} (94%) rename VerteronDisassemblerEngine/{VXDisassemblerUtils.h => ZyDisDisassemblerUtils.h} (82%) rename VerteronDisassemblerEngine/{VXInstructionDecoder.c => ZyDisInstructionDecoder.c} (62%) rename VerteronDisassemblerEngine/{VXInstructionDecoder.h => ZyDisInstructionDecoder.h} (59%) rename VerteronDisassemblerEngine/{VXInstructionFormatter.c => ZyDisInstructionFormatter.c} (52%) rename VerteronDisassemblerEngine/{VXInstructionFormatter.h => ZyDisInstructionFormatter.h} (61%) rename VerteronDisassemblerEngine/{VXInternalConfig.h => ZyDisInternalConfig.h} (86%) create mode 100644 VerteronDisassemblerEngine/ZyDisInternalHelpers.h rename VerteronDisassemblerEngine/{VXOpcodeTable.c => ZyDisOpcodeTable.c} (73%) rename VerteronDisassemblerEngine/{VXOpcodeTable.h => ZyDisOpcodeTable.h} (97%) rename VerteronDisassemblerEngine/{VXOpcodeTableInternal.h => ZyDisOpcodeTableInternal.h} (77%) diff --git a/Bindings/Cpp/VXOpcodeTable.cpp b/Bindings/Cpp/VXOpcodeTable.cpp deleted file mode 100644 index 5b6b5e8..0000000 --- a/Bindings/Cpp/VXOpcodeTable.cpp +++ /dev/null @@ -1,9655 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : - - Last change : 14. October 2014 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ -#include "VXOpcodeTable.hpp" - -namespace Verteron -{ - -namespace Internal -{ - -#define VX_INVALID 0 -#define NODE(type, n) (static_cast(type) << 12 | (n)) - -const VXOpcodeTreeNode optreeTable[][256] = -{ - { - /* 00 */ 0x0015, - /* 01 */ 0x0014, - /* 02 */ 0x0016, - /* 03 */ 0x0018, - /* 04 */ 0x0017, - /* 05 */ 0x0010, - /* 06 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0000), - /* 07 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0001), - /* 08 */ 0x0394, - /* 09 */ 0x0393, - /* 0A */ 0x0396, - /* 0B */ 0x0395, - /* 0C */ 0x0390, - /* 0D */ 0x038F, - /* 0E */ NODE(VXOpcodeTreeNodeType::MODE, 0x0002), - /* 0F */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0001), - /* 10 */ 0x000B, - /* 11 */ 0x000A, - /* 12 */ 0x000C, - /* 13 */ 0x000E, - /* 14 */ 0x000D, - /* 15 */ 0x0006, - /* 16 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0007), - /* 17 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0008), - /* 18 */ 0x04FE, - /* 19 */ 0x04F7, - /* 1A */ 0x04F8, - /* 1B */ 0x04FB, - /* 1C */ 0x04FA, - /* 1D */ 0x04F9, - /* 1E */ NODE(VXOpcodeTreeNodeType::MODE, 0x0009), - /* 1F */ NODE(VXOpcodeTreeNodeType::MODE, 0x000A), - /* 20 */ 0x0026, - /* 21 */ 0x0027, - /* 22 */ 0x0025, - /* 23 */ 0x002C, - /* 24 */ 0x002D, - /* 25 */ 0x002E, - /* 26 */ VX_INVALID, - /* 27 */ NODE(VXOpcodeTreeNodeType::MODE, 0x000B), - /* 28 */ 0x0542, - /* 29 */ 0x0549, - /* 2A */ 0x0548, - /* 2B */ 0x054B, - /* 2C */ 0x054A, - /* 2D */ 0x0547, - /* 2E */ VX_INVALID, - /* 2F */ NODE(VXOpcodeTreeNodeType::MODE, 0x000C), - /* 30 */ 0x06B8, - /* 31 */ 0x06B9, - /* 32 */ 0x06B6, - /* 33 */ 0x06B7, - /* 34 */ 0x06BA, - /* 35 */ 0x06BB, - /* 36 */ VX_INVALID, - /* 37 */ NODE(VXOpcodeTreeNodeType::MODE, 0x000D), - /* 38 */ 0x006C, - /* 39 */ 0x006D, - /* 3A */ 0x006B, - /* 3B */ 0x006A, - /* 3C */ 0x0070, - /* 3D */ 0x006F, - /* 3E */ VX_INVALID, - /* 3F */ NODE(VXOpcodeTreeNodeType::MODE, 0x000E), - /* 40 */ 0x02AB, - /* 41 */ 0x02AC, - /* 42 */ 0x02B2, - /* 43 */ 0x02B1, - /* 44 */ 0x02B3, - /* 45 */ 0x02B4, - /* 46 */ 0x02AE, - /* 47 */ 0x02AD, - /* 48 */ 0x00A7, - /* 49 */ 0x00A6, - /* 4A */ 0x00A8, - /* 4B */ 0x00AA, - /* 4C */ 0x00A9, - /* 4D */ 0x00A2, - /* 4E */ 0x00A1, - /* 4F */ 0x00A3, - /* 50 */ 0x04B4, - /* 51 */ 0x04B9, - /* 52 */ 0x04B3, - /* 53 */ 0x04AE, - /* 54 */ 0x04AF, - /* 55 */ 0x04B0, - /* 56 */ 0x04B1, - /* 57 */ 0x04B2, - /* 58 */ 0x0449, - /* 59 */ 0x0447, - /* 5A */ 0x0448, - /* 5B */ 0x0442, - /* 5C */ 0x043E, - /* 5D */ 0x043D, - /* 5E */ 0x043F, - /* 5F */ 0x0441, - /* 60 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0007), - /* 61 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0008), - /* 62 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0013), - /* 63 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0014), - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ 0x04B7, - /* 69 */ 0x02A4, - /* 6A */ 0x04AB, - /* 6B */ 0x02A6, - /* 6C */ 0x02B5, - /* 6D */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0009), - /* 6E */ 0x039F, - /* 6F */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x000A), - /* 70 */ 0x02E8, - /* 71 */ 0x02E2, - /* 72 */ 0x02CA, - /* 73 */ 0x02DE, - /* 74 */ 0x02CE, - /* 75 */ 0x02E1, - /* 76 */ 0x02CB, - /* 77 */ 0x02C7, - /* 78 */ 0x02ED, - /* 79 */ 0x02E6, - /* 7A */ 0x02EB, - /* 7B */ 0x02E5, - /* 7C */ 0x02D5, - /* 7D */ 0x02D3, - /* 7E */ 0x02D8, - /* 7F */ 0x02D1, - /* 80 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0013), - /* 81 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0014), - /* 82 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0015), - /* 83 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0016), - /* 84 */ 0x055C, - /* 85 */ 0x055D, - /* 86 */ 0x06A8, - /* 87 */ 0x06A7, - /* 88 */ 0x0334, - /* 89 */ 0x0336, - /* 8A */ 0x0335, - /* 8B */ 0x0331, - /* 8C */ 0x031D, - /* 8D */ 0x02F4, - /* 8E */ 0x031C, - /* 8F */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0017), - /* 90 */ 0x06A9, - /* 91 */ 0x06AB, - /* 92 */ 0x06AA, - /* 93 */ 0x06A3, - /* 94 */ 0x06A2, - /* 95 */ 0x06A4, - /* 96 */ 0x06A6, - /* 97 */ 0x06A5, - /* 98 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x000B), - /* 99 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x000C), - /* 9A */ NODE(VXOpcodeTreeNodeType::MODE, 0x001D), - /* 9B */ 0x069D, - /* 9C */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x000D), - /* 9D */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x000E), - /* 9E */ 0x04EF, - /* 9F */ 0x02EF, - /* A0 */ 0x031B, - /* A1 */ 0x0320, - /* A2 */ 0x031F, - /* A3 */ 0x031E, - /* A4 */ 0x0367, - /* A5 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x000F), - /* A6 */ 0x0076, - /* A7 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0010), - /* A8 */ 0x055E, - /* A9 */ 0x055B, - /* AA */ 0x053D, - /* AB */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0011), - /* AC */ 0x0300, - /* AD */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0012), - /* AE */ 0x0501, - /* AF */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0013), - /* B0 */ 0x0317, - /* B1 */ 0x031A, - /* B2 */ 0x0318, - /* B3 */ 0x0319, - /* B4 */ 0x0321, - /* B5 */ 0x032C, - /* B6 */ 0x032B, - /* B7 */ 0x032A, - /* B8 */ 0x032D, - /* B9 */ 0x0330, - /* BA */ 0x032F, - /* BB */ 0x032E, - /* BC */ 0x0329, - /* BD */ 0x0324, - /* BE */ 0x0323, - /* BF */ 0x0322, - /* C0 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0018), - /* C1 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0019), - /* C2 */ 0x04D9, - /* C3 */ 0x04D8, - /* C4 */ NODE(VXOpcodeTreeNodeType::VEX, 0x0000), - /* C5 */ NODE(VXOpcodeTreeNodeType::VEX, 0x0001), - /* C6 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x001E), - /* C7 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x001F), - /* C8 */ 0x00B4, - /* C9 */ 0x02F5, - /* CA */ 0x04DA, - /* CB */ 0x04DB, - /* CC */ 0x02BB, - /* CD */ 0x02B9, - /* CE */ NODE(VXOpcodeTreeNodeType::MODE, 0x0027), - /* CF */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0017), - /* D0 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0020), - /* D1 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0021), - /* D2 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0022), - /* D3 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0023), - /* D4 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0028), - /* D5 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0029), - /* D6 */ NODE(VXOpcodeTreeNodeType::MODE, 0x002A), - /* D7 */ 0x06B2, - /* D8 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0015), - /* D9 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0016), - /* DA */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0017), - /* DB */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0018), - /* DC */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0019), - /* DD */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x001A), - /* DE */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x001B), - /* DF */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x001C), - /* E0 */ 0x0306, - /* E1 */ 0x0305, - /* E2 */ 0x0304, - /* E3 */ NODE(VXOpcodeTreeNodeType::ADDRESS_SIZE, 0x0000), - /* E4 */ 0x02A9, - /* E5 */ 0x02AA, - /* E6 */ 0x039D, - /* E7 */ 0x039E, - /* E8 */ 0x004E, - /* E9 */ 0x02DB, - /* EA */ NODE(VXOpcodeTreeNodeType::MODE, 0x002B), - /* EB */ 0x02DD, - /* EC */ 0x02A7, - /* ED */ 0x02A8, - /* EE */ 0x039B, - /* EF */ 0x039C, - /* F0 */ 0x02FF, - /* F1 */ 0x02BA, - /* F2 */ 0x04D7, - /* F3 */ 0x04D6, - /* F4 */ 0x029D, - /* F5 */ 0x0059, - /* F6 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x002C), - /* F7 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x002D), - /* F8 */ 0x0053, - /* F9 */ 0x0538, - /* FA */ 0x0057, - /* FB */ 0x053B, - /* FC */ 0x0054, - /* FD */ 0x0539, - /* FE */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x002E), - /* FF */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x002F), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0000), - /* 01 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0000), - /* 02 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0003), - /* 03 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0004), - /* 04 */ VX_INVALID, - /* 05 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0005), - /* 06 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0006), - /* 07 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0007), - /* 08 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0008), - /* 09 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0009), - /* 0A */ VX_INVALID, - /* 0B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x000A), - /* 0C */ VX_INVALID, - /* 0D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x000B), - /* 0E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x000C), - /* 0F */ NODE(VXOpcodeTreeNodeType::AMD3DNOW, 0x0000), - /* 10 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x000D), - /* 11 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x000E), - /* 12 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0001), - /* 13 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0011), - /* 14 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0012), - /* 15 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0013), - /* 16 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0002), - /* 17 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0016), - /* 18 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0017), - /* 19 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0018), - /* 1A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0019), - /* 1B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x001A), - /* 1C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x001B), - /* 1D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x001C), - /* 1E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x001D), - /* 1F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x001E), - /* 20 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x001F), - /* 21 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0020), - /* 22 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0021), - /* 23 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0022), - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0023), - /* 29 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0024), - /* 2A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0025), - /* 2B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0026), - /* 2C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0027), - /* 2D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0028), - /* 2E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0029), - /* 2F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x002A), - /* 30 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x002B), - /* 31 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x002C), - /* 32 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x002D), - /* 33 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x002E), - /* 34 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x002F), - /* 35 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0030), - /* 36 */ VX_INVALID, - /* 37 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0031), - /* 38 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0002), - /* 39 */ VX_INVALID, - /* 3A */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0003), - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0081), - /* 41 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0082), - /* 42 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0083), - /* 43 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0084), - /* 44 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0085), - /* 45 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0086), - /* 46 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0087), - /* 47 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0088), - /* 48 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0089), - /* 49 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x008A), - /* 4A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x008B), - /* 4B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x008C), - /* 4C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x008D), - /* 4D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x008E), - /* 4E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x008F), - /* 4F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0090), - /* 50 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0091), - /* 51 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0092), - /* 52 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0093), - /* 53 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0094), - /* 54 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0095), - /* 55 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0096), - /* 56 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0097), - /* 57 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0098), - /* 58 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0099), - /* 59 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x009A), - /* 5A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x009B), - /* 5B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x009C), - /* 5C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x009D), - /* 5D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x009E), - /* 5E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x009F), - /* 5F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A0), - /* 60 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A1), - /* 61 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A2), - /* 62 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A3), - /* 63 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A4), - /* 64 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A5), - /* 65 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A6), - /* 66 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A7), - /* 67 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A8), - /* 68 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00A9), - /* 69 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00AA), - /* 6A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00AB), - /* 6B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00AC), - /* 6C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00AD), - /* 6D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00AE), - /* 6E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00AF), - /* 6F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B0), - /* 70 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B1), - /* 71 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B2), - /* 72 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B3), - /* 73 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B4), - /* 74 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B5), - /* 75 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B6), - /* 76 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B7), - /* 77 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B8), - /* 78 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00B9), - /* 79 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BA), - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BB), - /* 7D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BC), - /* 7E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BD), - /* 7F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BE), - /* 80 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00BF), - /* 81 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C0), - /* 82 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C1), - /* 83 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C2), - /* 84 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C3), - /* 85 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C4), - /* 86 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C5), - /* 87 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C6), - /* 88 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C7), - /* 89 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C8), - /* 8A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00C9), - /* 8B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00CA), - /* 8C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00CB), - /* 8D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00CC), - /* 8E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00CD), - /* 8F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00CE), - /* 90 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00CF), - /* 91 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D0), - /* 92 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D1), - /* 93 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D2), - /* 94 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D3), - /* 95 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D4), - /* 96 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D5), - /* 97 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D6), - /* 98 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D7), - /* 99 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D8), - /* 9A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00D9), - /* 9B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00DA), - /* 9C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00DB), - /* 9D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00DC), - /* 9E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00DD), - /* 9F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00DE), - /* A0 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00DF), - /* A1 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E0), - /* A2 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E1), - /* A3 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E2), - /* A4 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E3), - /* A5 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E4), - /* A6 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0003), - /* A7 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0004), - /* A8 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E7), - /* A9 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E8), - /* AA */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E9), - /* AB */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00EA), - /* AC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00EB), - /* AD */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00EC), - /* AE */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0005), - /* AF */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00EF), - /* B0 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F0), - /* B1 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F1), - /* B2 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F2), - /* B3 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F3), - /* B4 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F4), - /* B5 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F5), - /* B6 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F6), - /* B7 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F7), - /* B8 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F8), - /* B9 */ VX_INVALID, - /* BA */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00F9), - /* BB */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00FA), - /* BC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00FB), - /* BD */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00FC), - /* BE */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00FD), - /* BF */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00FE), - /* C0 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00FF), - /* C1 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0100), - /* C2 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0101), - /* C3 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0102), - /* C4 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0103), - /* C5 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0104), - /* C6 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0105), - /* C7 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0006), - /* C8 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0108), - /* C9 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0109), - /* CA */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x010A), - /* CB */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x010B), - /* CC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x010C), - /* CD */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x010D), - /* CE */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x010E), - /* CF */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x010F), - /* D0 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0110), - /* D1 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0111), - /* D2 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0112), - /* D3 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0113), - /* D4 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0114), - /* D5 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0115), - /* D6 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0116), - /* D7 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0117), - /* D8 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0118), - /* D9 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0119), - /* DA */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x011A), - /* DB */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x011B), - /* DC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x011C), - /* DD */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x011D), - /* DE */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x011E), - /* DF */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x011F), - /* E0 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0120), - /* E1 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0121), - /* E2 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0122), - /* E3 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0123), - /* E4 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0124), - /* E5 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0125), - /* E6 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0126), - /* E7 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0127), - /* E8 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0128), - /* E9 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0129), - /* EA */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x012A), - /* EB */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x012B), - /* EC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x012C), - /* ED */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x012D), - /* EE */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x012E), - /* EF */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x012F), - /* F0 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0130), - /* F1 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0131), - /* F2 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0132), - /* F3 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0133), - /* F4 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0134), - /* F5 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0135), - /* F6 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0136), - /* F7 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0007), - /* F8 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0138), - /* F9 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0139), - /* FA */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x013A), - /* FB */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x013B), - /* FC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x013C), - /* FD */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x013D), - /* FE */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x013E), - /* FF */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0032), - /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0033), - /* 02 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0034), - /* 03 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0035), - /* 04 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0036), - /* 05 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0037), - /* 06 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0038), - /* 07 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0039), - /* 08 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003A), - /* 09 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003B), - /* 0A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003C), - /* 0B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003D), - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003E), - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x003F), - /* 15 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0040), - /* 16 */ VX_INVALID, - /* 17 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0041), - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0042), - /* 1D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0043), - /* 1E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0044), - /* 1F */ VX_INVALID, - /* 20 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0045), - /* 21 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0046), - /* 22 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0047), - /* 23 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0048), - /* 24 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0049), - /* 25 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004A), - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004B), - /* 29 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004C), - /* 2A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004D), - /* 2B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004E), - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x004F), - /* 31 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0050), - /* 32 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0051), - /* 33 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0052), - /* 34 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0053), - /* 35 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0054), - /* 36 */ VX_INVALID, - /* 37 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0055), - /* 38 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0056), - /* 39 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0057), - /* 3A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0058), - /* 3B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0059), - /* 3C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x005A), - /* 3D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x005B), - /* 3E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x005C), - /* 3F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x005D), - /* 40 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x005E), - /* 41 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x005F), - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0060), - /* 81 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0061), - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0062), - /* DC */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0063), - /* DD */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0064), - /* DE */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0065), - /* DF */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0066), - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0067), - /* F1 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0068), - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0069), - /* 09 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006A), - /* 0A */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006B), - /* 0B */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006C), - /* 0C */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006D), - /* 0D */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006E), - /* 0E */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x006F), - /* 0F */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0070), - /* 10 */ VX_INVALID, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0071), - /* 15 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0072), - /* 16 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0073), - /* 17 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0074), - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0075), - /* 21 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0076), - /* 22 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0077), - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, - /* 2A */ VX_INVALID, - /* 2B */ VX_INVALID, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0078), - /* 41 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0079), - /* 42 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007A), - /* 43 */ VX_INVALID, - /* 44 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007B), - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, - /* 60 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007C), - /* 61 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007D), - /* 62 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007E), - /* 63 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x007F), - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0080), - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ 0x05E6, - /* 11 */ 0x05E5, - /* 12 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0008), - /* 13 */ 0x05CC, - /* 14 */ 0x0698, - /* 15 */ 0x0696, - /* 16 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0009), - /* 17 */ 0x05C7, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ 0x05B8, - /* 29 */ 0x05B7, - /* 2A */ VX_INVALID, - /* 2B */ 0x05D2, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ 0x0694, - /* 2F */ 0x0581, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ 0x05CE, - /* 51 */ 0x0689, - /* 52 */ 0x0684, - /* 53 */ 0x067E, - /* 54 */ 0x0575, - /* 55 */ 0x0573, - /* 56 */ 0x05F6, - /* 57 */ 0x069A, - /* 58 */ 0x0567, - /* 59 */ 0x05EF, - /* 5A */ 0x0587, - /* 5B */ 0x0583, - /* 5C */ 0x068E, - /* 5D */ 0x05AF, - /* 5E */ 0x0593, - /* 5F */ 0x05A9, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0000), - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000A), - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ 0x057D, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ 0x0687, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ VX_INVALID, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ 0x05E4, - /* 11 */ 0x05E3, - /* 12 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000B), - /* 13 */ 0x05CA, - /* 14 */ 0x0697, - /* 15 */ 0x0695, - /* 16 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000C), - /* 17 */ 0x05C5, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ 0x05B5, - /* 29 */ 0x05B6, - /* 2A */ VX_INVALID, - /* 2B */ 0x05D1, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ 0x0693, - /* 2F */ 0x0580, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ 0x05CD, - /* 51 */ 0x0688, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ 0x0574, - /* 55 */ 0x0572, - /* 56 */ 0x05F5, - /* 57 */ 0x0699, - /* 58 */ 0x0566, - /* 59 */ 0x05EE, - /* 5A */ 0x0585, - /* 5B */ 0x0586, - /* 5C */ 0x068D, - /* 5D */ 0x05AE, - /* 5E */ 0x0592, - /* 5F */ 0x05A8, - /* 60 */ 0x0679, - /* 61 */ 0x067C, - /* 62 */ 0x067A, - /* 63 */ 0x05FB, - /* 64 */ 0x0614, - /* 65 */ 0x0617, - /* 66 */ 0x0615, - /* 67 */ 0x05FD, - /* 68 */ 0x0675, - /* 69 */ 0x0678, - /* 6A */ 0x0676, - /* 6B */ 0x05FA, - /* 6C */ 0x067B, - /* 6D */ 0x0677, - /* 6E */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0014), - /* 6F */ 0x05BF, - /* 70 */ 0x0654, - /* 71 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x001B), - /* 72 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x001C), - /* 73 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x001D), - /* 74 */ 0x060E, - /* 75 */ 0x0611, - /* 76 */ 0x060F, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ 0x059C, - /* 7D */ 0x059E, - /* 7E */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0015), - /* 7F */ 0x05C0, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ 0x057C, - /* C3 */ VX_INVALID, - /* C4 */ 0x0630, - /* C5 */ 0x0623, - /* C6 */ 0x0686, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ 0x056A, - /* D1 */ 0x066B, - /* D2 */ 0x0665, - /* D3 */ 0x0669, - /* D4 */ 0x0600, - /* D5 */ 0x0650, - /* D6 */ 0x05D4, - /* D7 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0004), - /* D8 */ 0x0671, - /* D9 */ 0x0672, - /* DA */ 0x063C, - /* DB */ 0x0607, - /* DC */ 0x0603, - /* DD */ 0x0604, - /* DE */ 0x0636, - /* DF */ 0x0608, - /* E0 */ 0x0609, - /* E1 */ 0x0663, - /* E2 */ 0x0662, - /* E3 */ 0x060A, - /* E4 */ 0x064D, - /* E5 */ 0x064E, - /* E6 */ 0x058E, - /* E7 */ 0x05CF, - /* E8 */ 0x066F, - /* E9 */ 0x0670, - /* EA */ 0x063B, - /* EB */ 0x0651, - /* EC */ 0x0601, - /* ED */ 0x0602, - /* EE */ 0x0635, - /* EF */ 0x067D, - /* F0 */ VX_INVALID, - /* F1 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0005), - /* F2 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0006), - /* F3 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0007), - /* F4 */ VX_INVALID, - /* F5 */ 0x0632, - /* F6 */ 0x0652, - /* F7 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000D), - /* F8 */ 0x066C, - /* F9 */ 0x0673, - /* FA */ 0x066D, - /* FB */ 0x066E, - /* FC */ 0x05FE, - /* FD */ 0x0605, - /* FE */ 0x05FF, - /* FF */ VX_INVALID, - }, - { - /* 00 */ 0x0653, - /* 01 */ 0x0627, - /* 02 */ 0x0625, - /* 03 */ 0x0626, - /* 04 */ 0x0631, - /* 05 */ 0x062B, - /* 06 */ 0x0629, - /* 07 */ 0x062A, - /* 08 */ 0x0657, - /* 09 */ 0x0659, - /* 0A */ 0x0658, - /* 0B */ 0x064C, - /* 0C */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0000), - /* 0D */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0001), - /* 0E */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0002), - /* 0F */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0003), - /* 10 */ VX_INVALID, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ VX_INVALID, - /* 17 */ 0x0674, - /* 18 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0004), - /* 19 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0005), - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ 0x05F7, - /* 1D */ 0x05F9, - /* 1E */ 0x05F8, - /* 1F */ VX_INVALID, - /* 20 */ 0x0642, - /* 21 */ 0x0640, - /* 22 */ 0x0641, - /* 23 */ 0x0643, - /* 24 */ 0x0644, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ 0x064B, - /* 29 */ 0x0610, - /* 2A */ 0x05D0, - /* 2B */ 0x05FC, - /* 2C */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0006), - /* 2D */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0007), - /* 2E */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0008), - /* 2F */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0009), - /* 30 */ 0x0647, - /* 31 */ 0x0645, - /* 32 */ 0x0646, - /* 33 */ 0x0649, - /* 34 */ 0x064A, - /* 35 */ 0x0648, - /* 36 */ VX_INVALID, - /* 37 */ 0x0616, - /* 38 */ 0x0639, - /* 39 */ 0x063A, - /* 3A */ 0x063E, - /* 3B */ 0x063D, - /* 3C */ 0x0633, - /* 3D */ 0x0634, - /* 3E */ 0x0638, - /* 3F */ 0x0637, - /* 40 */ 0x064F, - /* 41 */ 0x0628, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ 0x0570, - /* DC */ 0x056E, - /* DD */ 0x056F, - /* DE */ 0x056C, - /* DF */ 0x056D, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000A), - /* 05 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000B), - /* 06 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000C), - /* 07 */ VX_INVALID, - /* 08 */ 0x0681, - /* 09 */ 0x0680, - /* 0A */ 0x0683, - /* 0B */ 0x0682, - /* 0C */ 0x0577, - /* 0D */ 0x0576, - /* 0E */ 0x060C, - /* 0F */ 0x0606, - /* 10 */ VX_INVALID, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000D), - /* 15 */ 0x0624, - /* 16 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0016), - /* 17 */ 0x059B, - /* 18 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0011), - /* 19 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0012), - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0013), - /* 21 */ 0x05A1, - /* 22 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0025), - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, - /* 2A */ VX_INVALID, - /* 2B */ VX_INVALID, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ 0x0597, - /* 41 */ 0x0596, - /* 42 */ 0x05E7, - /* 43 */ VX_INVALID, - /* 44 */ 0x060D, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0016), - /* 4B */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0017), - /* 4C */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0018), - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, - /* 60 */ 0x0613, - /* 61 */ 0x0612, - /* 62 */ 0x0619, - /* 63 */ 0x0618, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ 0x0571, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000E), - /* 11 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x000F), - /* 12 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0010), - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0011), - /* 17 */ VX_INVALID, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, - /* 2A */ 0x058B, - /* 2B */ VX_INVALID, - /* 2C */ 0x0591, - /* 2D */ 0x058D, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ 0x068B, - /* 52 */ 0x0685, - /* 53 */ 0x067F, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ 0x0569, - /* 59 */ 0x05F1, - /* 5A */ 0x058C, - /* 5B */ 0x058F, - /* 5C */ 0x0690, - /* 5D */ 0x05B1, - /* 5E */ 0x0595, - /* 5F */ 0x05AB, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ 0x05C2, - /* 70 */ 0x0655, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ 0x05D3, - /* 7F */ 0x05C1, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ 0x057F, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ VX_INVALID, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ 0x0582, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0012), - /* 11 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0013), - /* 12 */ NODE(VXOpcodeTreeNodeType::MODRM_MOD, 0x0014), - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ VX_INVALID, - /* 17 */ VX_INVALID, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, - /* 2A */ 0x058A, - /* 2B */ VX_INVALID, - /* 2C */ 0x0590, - /* 2D */ 0x0588, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ 0x068A, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ 0x0568, - /* 59 */ 0x05F0, - /* 5A */ 0x0589, - /* 5B */ VX_INVALID, - /* 5C */ 0x068F, - /* 5D */ 0x05B0, - /* 5E */ 0x0594, - /* 5F */ 0x05AA, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ 0x0656, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ 0x059D, - /* 7D */ 0x059F, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ 0x057E, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ 0x056B, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ VX_INVALID, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ 0x0584, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ 0x05A2, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, - }, -}; - -const VXOpcodeTreeNode optreeModrmMod[][2] = -{ - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0001), - /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0002), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x000F), - /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0010), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0014), - /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0015), - }, - { - /* 00 */ VX_INVALID, - /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E5), - }, - { - /* 00 */ VX_INVALID, - /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00E6), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00ED), - /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x00EE), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0106), - /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0107), - }, - { - /* 00 */ VX_INVALID, - /* 01 */ NODE(VXOpcodeTreeNodeType::MANDATORY, 0x0137), - }, - { - /* 00 */ 0x05CB, - /* 01 */ 0x05C3, - }, - { - /* 00 */ 0x05C6, - /* 01 */ 0x05C8, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x001A), - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x05C9, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x05C4, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05A3, - }, - { - /* 00 */ 0x05E2, - /* 01 */ 0x05DF, - }, - { - /* 00 */ 0x05E0, - /* 01 */ 0x05E1, - }, - { - /* 00 */ 0x05DE, - /* 01 */ 0x05DD, - }, - { - /* 00 */ 0x05DB, - /* 01 */ 0x05DC, - }, - { - /* 00 */ 0x05DA, - /* 01 */ 0x05D9, - }, - { - /* 00 */ 0x05D8, - /* 01 */ 0x05D7, - }, - { - /* 00 */ 0x05BE, - /* 01 */ 0x05BD, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0024), - /* 01 */ NODE(VXOpcodeTreeNodeType::X87, 0x0000), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0025), - /* 01 */ NODE(VXOpcodeTreeNodeType::X87, 0x0001), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0026), - /* 01 */ NODE(VXOpcodeTreeNodeType::X87, 0x0002), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0027), - /* 01 */ NODE(VXOpcodeTreeNodeType::X87, 0x0003), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0028), - /* 01 */ NODE(VXOpcodeTreeNodeType::X87, 0x0004), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0029), - /* 01 */ NODE(VXOpcodeTreeNodeType::X87, 0x0005), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x002A), - /* 01 */ NODE(VXOpcodeTreeNodeType::X87, 0x0006), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x002B), - /* 01 */ NODE(VXOpcodeTreeNodeType::X87, 0x0007), - }, -}; - -const VXOpcodeTreeNode optreeModrmReg[][8] = -{ - { - /* 00 */ 0x0531, - /* 01 */ 0x0541, - /* 02 */ 0x02FC, - /* 03 */ 0x0309, - /* 04 */ 0x0598, - /* 05 */ 0x0599, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x0516, - /* 01 */ 0x052F, - /* 02 */ 0x02F9, - /* 03 */ 0x02FB, - /* 04 */ 0x0533, - /* 05 */ VX_INVALID, - /* 06 */ 0x02FE, - /* 07 */ 0x02C0, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0000), - /* 01 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0001), - /* 02 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0002), - /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0003), - /* 04 */ 0x0532, - /* 05 */ VX_INVALID, - /* 06 */ 0x02FD, - /* 07 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0004), - }, - { - /* 00 */ 0x0455, - /* 01 */ 0x0456, - /* 02 */ 0x0457, - /* 03 */ 0x0458, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x0486, - /* 03 */ VX_INVALID, - /* 04 */ 0x0479, - /* 05 */ VX_INVALID, - /* 06 */ 0x0470, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x0485, - /* 03 */ VX_INVALID, - /* 04 */ 0x0478, - /* 05 */ VX_INVALID, - /* 06 */ 0x0473, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x047E, - /* 03 */ VX_INVALID, - /* 04 */ 0x0475, - /* 05 */ VX_INVALID, - /* 06 */ 0x0468, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x047C, - /* 03 */ VX_INVALID, - /* 04 */ 0x0476, - /* 05 */ VX_INVALID, - /* 06 */ 0x046A, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x0482, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ 0x046D, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x0481, - /* 03 */ 0x0480, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ 0x046C, - /* 07 */ 0x046B, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0005), - /* 01 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0006), - /* 02 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0007), - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0008), - /* 01 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x0009), - /* 02 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x000A), - /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x000B), - /* 04 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x000C), - /* 05 */ NODE(VXOpcodeTreeNodeType::MODRM_RM, 0x000D), - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x0296, - /* 01 */ 0x0295, - /* 02 */ 0x02F2, - /* 03 */ 0x053C, - /* 04 */ 0x06C0, - /* 05 */ 0x06BF, - /* 06 */ VX_INVALID, - /* 07 */ 0x0055, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ 0x02F7, - /* 06 */ 0x0310, - /* 07 */ 0x0515, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ 0x0043, - /* 05 */ 0x0049, - /* 06 */ 0x0047, - /* 07 */ 0x0045, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0006), - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0015), - /* 07 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0016), - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0017), - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0018), - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ 0x04D3, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x000F, - /* 01 */ 0x0392, - /* 02 */ 0x0005, - /* 03 */ 0x04FF, - /* 04 */ 0x0028, - /* 05 */ 0x0544, - /* 06 */ 0x06BC, - /* 07 */ 0x006E, - }, - { - /* 00 */ 0x0013, - /* 01 */ 0x0391, - /* 02 */ 0x0009, - /* 03 */ 0x0500, - /* 04 */ 0x0029, - /* 05 */ 0x0543, - /* 06 */ 0x06B5, - /* 07 */ 0x0072, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0015), - /* 01 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0016), - /* 02 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0017), - /* 03 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0018), - /* 04 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0019), - /* 05 */ NODE(VXOpcodeTreeNodeType::MODE, 0x001A), - /* 06 */ NODE(VXOpcodeTreeNodeType::MODE, 0x001B), - /* 07 */ NODE(VXOpcodeTreeNodeType::MODE, 0x001C), - }, - { - /* 00 */ 0x0012, - /* 01 */ 0x0397, - /* 02 */ 0x0008, - /* 03 */ 0x04FD, - /* 04 */ 0x002B, - /* 05 */ 0x0545, - /* 06 */ 0x06B4, - /* 07 */ 0x0071, - }, - { - /* 00 */ 0x0440, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x04DE, - /* 01 */ 0x04E6, - /* 02 */ 0x04C6, - /* 03 */ 0x04D0, - /* 04 */ 0x0517, - /* 05 */ 0x0526, - /* 06 */ 0x051D, - /* 07 */ 0x04F3, - }, - { - /* 00 */ 0x04DF, - /* 01 */ 0x04E7, - /* 02 */ 0x04C7, - /* 03 */ 0x04CE, - /* 04 */ 0x051C, - /* 05 */ 0x0528, - /* 06 */ 0x051E, - /* 07 */ 0x04F6, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x068C, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x066A, - /* 03 */ VX_INVALID, - /* 04 */ 0x0664, - /* 05 */ VX_INVALID, - /* 06 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0001), - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x0666, - /* 03 */ VX_INVALID, - /* 04 */ 0x0661, - /* 05 */ VX_INVALID, - /* 06 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0002), - /* 07 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x0668, - /* 03 */ 0x0667, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0003), - /* 07 */ 0x065C, - }, - { - /* 00 */ 0x0333, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x0332, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x04DD, - /* 01 */ 0x04E5, - /* 02 */ 0x04C8, - /* 03 */ 0x04CD, - /* 04 */ 0x0522, - /* 05 */ 0x0527, - /* 06 */ 0x051F, - /* 07 */ 0x04F1, - }, - { - /* 00 */ 0x04DC, - /* 01 */ 0x04E2, - /* 02 */ 0x04C5, - /* 03 */ 0x04CF, - /* 04 */ 0x0520, - /* 05 */ 0x052A, - /* 06 */ 0x0519, - /* 07 */ 0x04F4, - }, - { - /* 00 */ 0x04E1, - /* 01 */ 0x04E3, - /* 02 */ 0x04C3, - /* 03 */ 0x04CC, - /* 04 */ 0x0521, - /* 05 */ 0x0529, - /* 06 */ 0x051A, - /* 07 */ 0x04F2, - }, - { - /* 00 */ 0x04E0, - /* 01 */ 0x04E4, - /* 02 */ 0x04C4, - /* 03 */ 0x04CB, - /* 04 */ 0x0518, - /* 05 */ 0x0525, - /* 06 */ 0x051B, - /* 07 */ 0x04F5, - }, - { - /* 00 */ 0x00BB, - /* 01 */ 0x01CF, - /* 02 */ 0x0119, - /* 03 */ 0x013D, - /* 04 */ 0x022C, - /* 05 */ 0x0245, - /* 06 */ 0x0166, - /* 07 */ 0x0171, - }, - { - /* 00 */ 0x01BC, - /* 01 */ VX_INVALID, - /* 02 */ 0x01FF, - /* 03 */ 0x020B, - /* 04 */ 0x01C3, - /* 05 */ 0x01C2, - /* 06 */ 0x01EB, - /* 07 */ 0x01EA, - }, - { - /* 00 */ 0x019A, - /* 01 */ 0x01A8, - /* 02 */ 0x019C, - /* 03 */ 0x019F, - /* 04 */ 0x01B3, - /* 05 */ 0x01B5, - /* 06 */ 0x01A1, - /* 07 */ 0x01A3, - }, - { - /* 00 */ 0x01A4, - /* 01 */ 0x01B1, - /* 02 */ 0x01AB, - /* 03 */ 0x01AD, - /* 04 */ VX_INVALID, - /* 05 */ 0x01BA, - /* 06 */ VX_INVALID, - /* 07 */ 0x020A, - }, - { - /* 00 */ 0x00BA, - /* 01 */ 0x01D2, - /* 02 */ 0x0118, - /* 03 */ 0x013E, - /* 04 */ 0x022B, - /* 05 */ 0x0243, - /* 06 */ 0x0158, - /* 07 */ 0x017A, - }, - { - /* 00 */ 0x01BB, - /* 01 */ 0x01AF, - /* 02 */ 0x01FE, - /* 03 */ 0x0209, - /* 04 */ 0x01F3, - /* 05 */ VX_INVALID, - /* 06 */ 0x01E8, - /* 07 */ 0x01ED, - }, - { - /* 00 */ 0x019B, - /* 01 */ 0x01A7, - /* 02 */ 0x019D, - /* 03 */ 0x019E, - /* 04 */ 0x01B2, - /* 05 */ 0x01B4, - /* 06 */ 0x01A0, - /* 07 */ 0x01A2, - }, - { - /* 00 */ 0x01A6, - /* 01 */ 0x01B0, - /* 02 */ 0x01AA, - /* 03 */ 0x01AE, - /* 04 */ 0x00D2, - /* 05 */ 0x01A5, - /* 06 */ 0x00D3, - /* 07 */ 0x01AC, - }, - { - /* 00 */ 0x0557, - /* 01 */ 0x0558, - /* 02 */ 0x038E, - /* 03 */ 0x0385, - /* 04 */ 0x037E, - /* 05 */ 0x02A5, - /* 06 */ 0x00AC, - /* 07 */ 0x02A0, - }, - { - /* 00 */ 0x0559, - /* 01 */ 0x055A, - /* 02 */ 0x038D, - /* 03 */ 0x0384, - /* 04 */ 0x037D, - /* 05 */ 0x02A3, - /* 06 */ 0x00AB, - /* 07 */ 0x02A1, - }, - { - /* 00 */ 0x02AF, - /* 01 */ 0x00A4, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x02B0, - /* 01 */ 0x00A5, - /* 02 */ NODE(VXOpcodeTreeNodeType::MODE, 0x002C), - /* 03 */ 0x004C, - /* 04 */ 0x02D9, - /* 05 */ 0x02DA, - /* 06 */ 0x04B8, - /* 07 */ VX_INVALID, - }, -}; - -const VXOpcodeTreeNode optreeModrmRm[][8] = -{ - { - /* 00 */ VX_INVALID, - /* 01 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0000), - /* 02 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0001), - /* 03 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0002), - /* 04 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0003), - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x0315, - /* 01 */ 0x0383, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x06B1, - /* 01 */ 0x06C1, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0004), - /* 01 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0005), - /* 02 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0006), - /* 03 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0007), - /* 04 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0008), - /* 05 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0009), - /* 06 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x000A), - /* 07 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x000B), - }, - { - /* 00 */ 0x0550, - /* 01 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x000C), - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x0316, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x06C2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x06C3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x06C4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x06AF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x06AC, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x06AE, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x06AD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, - { - /* 00 */ 0x06B0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - }, -}; - -const VXOpcodeTreeNode optreeMandatory[][4] = -{ - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0000), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0001), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0002), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02F0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0307, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0551, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0058, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0556, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02BD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x069E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0561, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0454, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0189, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0379, - /* 01 */ 0x0368, - /* 02 */ 0x0371, - /* 03 */ 0x0377, - }, - { - /* 00 */ 0x0378, - /* 01 */ 0x036A, - /* 02 */ 0x0370, - /* 03 */ 0x0376, - }, - { - /* 00 */ 0x0355, - /* 01 */ 0x0345, - /* 02 */ 0x036D, - /* 03 */ 0x0353, - }, - { - /* 00 */ 0x034C, - /* 01 */ 0x0346, - /* 02 */ 0x036E, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0354, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0352, - }, - { - /* 00 */ 0x0565, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0564, - }, - { - /* 00 */ 0x0563, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0562, - }, - { - /* 00 */ 0x0350, - /* 01 */ VX_INVALID, - /* 02 */ 0x036B, - /* 03 */ 0x034E, - }, - { - /* 00 */ 0x0351, - /* 01 */ VX_INVALID, - /* 02 */ 0x036C, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x034F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x034D, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0003), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x038A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x038B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x038C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0389, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0386, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0387, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0388, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0325, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0328, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0327, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0326, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x033A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0338, - }, - { - /* 00 */ 0x0339, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0337, - }, - { - /* 00 */ 0x008D, - /* 01 */ 0x0093, - /* 02 */ 0x0094, - /* 03 */ 0x008C, - }, - { - /* 00 */ 0x035C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x035B, - }, - { - /* 00 */ 0x009A, - /* 01 */ 0x009B, - /* 02 */ 0x009C, - /* 03 */ 0x0098, - }, - { - /* 00 */ 0x0090, - /* 01 */ 0x0091, - /* 02 */ 0x0096, - /* 03 */ 0x008A, - }, - { - /* 00 */ 0x0560, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x055F, - }, - { - /* 00 */ 0x0082, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0081, - }, - { - /* 00 */ 0x069F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x04D4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x04D1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x04D2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0003), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0004), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x029A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x045B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x045C, - }, - { - /* 00 */ 0x03FD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03FE, - }, - { - /* 00 */ 0x03FA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03F9, - }, - { - /* 00 */ 0x03FB, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03FC, - }, - { - /* 00 */ 0x040E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x040F, - }, - { - /* 00 */ 0x0405, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0404, - }, - { - /* 00 */ 0x0400, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0401, - }, - { - /* 00 */ 0x0402, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0403, - }, - { - /* 00 */ 0x0461, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0462, - }, - { - /* 00 */ 0x0466, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0465, - }, - { - /* 00 */ 0x0464, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0463, - }, - { - /* 00 */ 0x0431, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0432, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03CA, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0037, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0036, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x049A, - }, - { - /* 00 */ 0x03A3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03A2, - }, - { - /* 00 */ 0x03A6, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03A7, - }, - { - /* 00 */ 0x03A4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03A5, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0426, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0424, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0425, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0428, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0429, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0427, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0430, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03D1, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0359, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03AC, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x042C, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x042A, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x042B, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x042E, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x042F, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x042D, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03DA, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x041A, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x041B, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0421, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0420, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0412, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0413, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0419, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0418, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0438, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03FF, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0005), - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0006), - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0023, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0021, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0022, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x001F, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0020, - }, - { - /* 00 */ 0x033B, - /* 01 */ 0x0086, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x033C, - /* 01 */ 0x0085, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04E9, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04E8, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04EB, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04EA, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0035, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0034, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03CB, - }, - { - /* 00 */ 0x03BF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03C0, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03DF, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03E3, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0000), - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x00B5, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0408, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x02B7, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0001), - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x00B2, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x00B1, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x037C, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03CC, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03D5, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03D4, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03DE, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03DD, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0024, - }, - { - /* 00 */ 0x0067, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0064, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x005C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x005B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x005E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0063, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x005D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x005A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0069, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0066, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0068, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0065, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0061, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0060, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0062, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x005F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0357, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0356, - }, - { - /* 00 */ 0x0535, - /* 01 */ 0x0536, - /* 02 */ 0x0537, - /* 03 */ 0x0534, - }, - { - /* 00 */ 0x04ED, - /* 01 */ VX_INVALID, - /* 02 */ 0x04EE, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x04C9, - /* 01 */ VX_INVALID, - /* 02 */ 0x04CA, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0032, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0031, - }, - { - /* 00 */ 0x0030, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x002F, - }, - { - /* 00 */ 0x039A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0399, - }, - { - /* 00 */ 0x06BE, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x06BD, - }, - { - /* 00 */ 0x001A, - /* 01 */ 0x001B, - /* 02 */ 0x001C, - /* 03 */ 0x0019, - }, - { - /* 00 */ 0x0380, - /* 01 */ 0x0381, - /* 02 */ 0x0382, - /* 03 */ 0x037F, - }, - { - /* 00 */ 0x008F, - /* 01 */ 0x0092, - /* 02 */ 0x0095, - /* 03 */ 0x008B, - }, - { - /* 00 */ 0x0088, - /* 01 */ VX_INVALID, - /* 02 */ 0x0099, - /* 03 */ 0x008E, - }, - { - /* 00 */ 0x054D, - /* 01 */ 0x054E, - /* 02 */ 0x054F, - /* 03 */ 0x054C, - }, - { - /* 00 */ 0x0312, - /* 01 */ 0x0313, - /* 02 */ 0x0314, - /* 03 */ 0x0311, - }, - { - /* 00 */ 0x00AE, - /* 01 */ 0x00AF, - /* 02 */ 0x00B0, - /* 03 */ 0x00AD, - }, - { - /* 00 */ 0x030D, - /* 01 */ 0x030E, - /* 02 */ 0x030F, - /* 03 */ 0x030C, - }, - { - /* 00 */ 0x04A2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04A3, - }, - { - /* 00 */ 0x04A7, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04A8, - }, - { - /* 00 */ 0x04A5, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04A4, - }, - { - /* 00 */ 0x03AA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03AB, - }, - { - /* 00 */ 0x03D7, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03D6, - }, - { - /* 00 */ 0x03DC, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03DB, - }, - { - /* 00 */ 0x03D8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03D9, - }, - { - /* 00 */ 0x03AD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03AE, - }, - { - /* 00 */ 0x049B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x049C, - }, - { - /* 00 */ 0x04A1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04A0, - }, - { - /* 00 */ 0x049E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x049D, - }, - { - /* 00 */ 0x03A8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03A9, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04A6, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x049F, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0002), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0003), - }, - { - /* 00 */ 0x0363, - /* 01 */ VX_INVALID, - /* 02 */ 0x034A, - /* 03 */ 0x0348, - }, - { - /* 00 */ 0x0460, - /* 01 */ 0x045F, - /* 02 */ 0x045E, - /* 03 */ 0x045D, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0004), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0005), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0006), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0007), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0008), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0009), - }, - { - /* 00 */ 0x03CD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03CE, - }, - { - /* 00 */ 0x03D2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03D3, - }, - { - /* 00 */ 0x03D0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03CF, - }, - { - /* 00 */ 0x00B3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0013), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0014), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x029C, - /* 02 */ VX_INVALID, - /* 03 */ 0x029B, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x029F, - /* 02 */ VX_INVALID, - /* 03 */ 0x029E, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0004), - /* 01 */ VX_INVALID, - /* 02 */ 0x035F, - /* 03 */ NODE(VXOpcodeTreeNodeType::OPERAND_SIZE, 0x0005), - }, - { - /* 00 */ 0x0362, - /* 01 */ VX_INVALID, - /* 02 */ 0x034B, - /* 03 */ 0x0349, - }, - { - /* 00 */ 0x02E9, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02E3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02C9, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02DF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02CF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02E0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02CC, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02C8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02EE, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02E7, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02EA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02E4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02D6, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02D4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02D7, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02D2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0512, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x050F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0507, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0506, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0509, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x050E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0508, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0505, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0514, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0511, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0513, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0510, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x050C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x050B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x050D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x050A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x04B5, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x044A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0083, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0044, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0524, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0523, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000A), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000B), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x04B6, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0444, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x04EC, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x004A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x052C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x052B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000C), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000D), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02A2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x007C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x007D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0308, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0048, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02F8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x02FA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x037B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x037A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ 0x044D, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000E), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0046, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0039, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x003A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0373, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0374, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x06A1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x06A0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0075, - /* 01 */ 0x0077, - /* 02 */ 0x007A, - /* 03 */ 0x0074, - }, - { - /* 00 */ 0x035A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x040D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x040C, - }, - { - /* 00 */ 0x03E4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03E5, - }, - { - /* 00 */ 0x052E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x052D, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x000F), - /* 01 */ VX_INVALID, - /* 02 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0010), - /* 03 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0011), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODRM_REG, 0x0012), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x003F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x003D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0040, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x003C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x003E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x003B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0042, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0041, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x001E, - /* 02 */ VX_INVALID, - /* 03 */ 0x001D, - }, - { - /* 00 */ 0x0487, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0488, - }, - { - /* 00 */ 0x047D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x047F, - }, - { - /* 00 */ 0x0483, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0484, - }, - { - /* 00 */ 0x03B3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03B4, - }, - { - /* 00 */ 0x0439, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x043A, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x0347, - /* 02 */ 0x0366, - /* 03 */ 0x0361, - }, - { - /* 00 */ 0x0422, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0423, - }, - { - /* 00 */ 0x0494, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0493, - }, - { - /* 00 */ 0x0496, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0495, - }, - { - /* 00 */ 0x041E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x041F, - }, - { - /* 00 */ 0x03C1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03C2, - }, - { - /* 00 */ 0x03BA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03B9, - }, - { - /* 00 */ 0x03BB, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03BC, - }, - { - /* 00 */ 0x0417, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0416, - }, - { - /* 00 */ 0x03C3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03C4, - }, - { - /* 00 */ 0x03C5, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03C6, - }, - { - /* 00 */ 0x047A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x047B, - }, - { - /* 00 */ 0x0477, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0474, - }, - { - /* 00 */ 0x03C8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03C9, - }, - { - /* 00 */ 0x0434, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0435, - }, - { - /* 00 */ 0x0436, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0437, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x0089, - /* 02 */ 0x0087, - /* 03 */ 0x0097, - }, - { - /* 00 */ 0x035D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0358, - }, - { - /* 00 */ 0x048F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0490, - }, - { - /* 00 */ 0x0492, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0491, - }, - { - /* 00 */ 0x041C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x041D, - }, - { - /* 00 */ 0x0453, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0452, - }, - { - /* 00 */ 0x03B6, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03B5, - }, - { - /* 00 */ 0x03B8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03B7, - }, - { - /* 00 */ 0x0414, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0415, - }, - { - /* 00 */ 0x04C1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x04C2, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x02F1, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - }, - { - /* 00 */ 0x0472, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0471, - }, - { - /* 00 */ 0x0469, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0467, - }, - { - /* 00 */ 0x046E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x046F, - }, - { - /* 00 */ 0x043B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x043C, - }, - { - /* 00 */ 0x0411, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0410, - }, - { - /* 00 */ 0x045A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0459, - }, - { - /* 00 */ 0x030B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x030A, - }, - { - /* 00 */ 0x0489, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x048A, - }, - { - /* 00 */ 0x0498, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x0497, - }, - { - /* 00 */ 0x048B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x048C, - }, - { - /* 00 */ 0x048D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x048E, - }, - { - /* 00 */ 0x03AF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03B0, - }, - { - /* 00 */ 0x03BE, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03BD, - }, - { - /* 00 */ 0x03B1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ 0x03B2, - }, -}; - -const VXOpcodeTreeNode optreeX87[][64] = -{ - { - /* 00 */ 0x00BC, - /* 01 */ 0x00BF, - /* 02 */ 0x00C2, - /* 03 */ 0x00C1, - /* 04 */ 0x00C0, - /* 05 */ 0x00C5, - /* 06 */ 0x00C3, - /* 07 */ 0x00C4, - /* 08 */ 0x01CE, - /* 09 */ 0x01CD, - /* 0A */ 0x01D9, - /* 0B */ 0x01DA, - /* 0C */ 0x01DB, - /* 0D */ 0x01D6, - /* 0E */ 0x01D7, - /* 0F */ 0x01D8, - /* 10 */ 0x011A, - /* 11 */ 0x011C, - /* 12 */ 0x011B, - /* 13 */ 0x0117, - /* 14 */ 0x0116, - /* 15 */ 0x011D, - /* 16 */ 0x011F, - /* 17 */ 0x011E, - /* 18 */ 0x013A, - /* 19 */ 0x0141, - /* 1A */ 0x013C, - /* 1B */ 0x0138, - /* 1C */ 0x013B, - /* 1D */ 0x0140, - /* 1E */ 0x013F, - /* 1F */ 0x0139, - /* 20 */ 0x022E, - /* 21 */ 0x0226, - /* 22 */ 0x0229, - /* 23 */ 0x0232, - /* 24 */ 0x0231, - /* 25 */ 0x022D, - /* 26 */ 0x022A, - /* 27 */ 0x0227, - /* 28 */ 0x0246, - /* 29 */ 0x024B, - /* 2A */ 0x024C, - /* 2B */ 0x024A, - /* 2C */ 0x0248, - /* 2D */ 0x0249, - /* 2E */ 0x0250, - /* 2F */ 0x0251, - /* 30 */ 0x0161, - /* 31 */ 0x0162, - /* 32 */ 0x0155, - /* 33 */ 0x015A, - /* 34 */ 0x0159, - /* 35 */ 0x0156, - /* 36 */ 0x0157, - /* 37 */ 0x0163, - /* 38 */ 0x0172, - /* 39 */ 0x016F, - /* 3A */ 0x0170, - /* 3B */ 0x0173, - /* 3C */ 0x0176, - /* 3D */ 0x0177, - /* 3E */ 0x0174, - /* 3F */ 0x0175, - }, - { - /* 00 */ 0x01BD, - /* 01 */ 0x01C0, - /* 02 */ 0x01BF, - /* 03 */ 0x01BE, - /* 04 */ 0x01B7, - /* 05 */ 0x01B6, - /* 06 */ 0x01B9, - /* 07 */ 0x01B8, - /* 08 */ 0x0281, - /* 09 */ 0x0282, - /* 0A */ 0x0283, - /* 0B */ 0x0280, - /* 0C */ 0x027D, - /* 0D */ 0x027E, - /* 0E */ 0x027F, - /* 0F */ 0x0284, - /* 10 */ 0x01E7, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ VX_INVALID, - /* 17 */ VX_INVALID, - /* 18 */ 0x0213, - /* 19 */ 0x0212, - /* 1A */ 0x0215, - /* 1B */ 0x0214, - /* 1C */ 0x020F, - /* 1D */ 0x020E, - /* 1E */ 0x0211, - /* 1F */ 0x0210, - /* 20 */ 0x00D4, - /* 21 */ 0x00B7, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ 0x025A, - /* 25 */ 0x027C, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ 0x01C1, - /* 29 */ 0x01C5, - /* 2A */ 0x01C4, - /* 2B */ 0x01C8, - /* 2C */ 0x01C6, - /* 2D */ 0x01C7, - /* 2E */ 0x01C9, - /* 2F */ VX_INVALID, - /* 30 */ 0x00B6, - /* 31 */ 0x0298, - /* 32 */ 0x01F1, - /* 33 */ 0x01EE, - /* 34 */ 0x0297, - /* 35 */ 0x01F0, - /* 36 */ 0x0154, - /* 37 */ 0x01A9, - /* 38 */ 0x01EF, - /* 39 */ 0x0299, - /* 3A */ 0x01F8, - /* 3B */ 0x01F7, - /* 3C */ 0x01F2, - /* 3D */ 0x01F5, - /* 3E */ 0x01F6, - /* 3F */ 0x0153, - }, - { - /* 00 */ 0x00D9, - /* 01 */ 0x00DA, - /* 02 */ 0x00DB, - /* 03 */ 0x00D6, - /* 04 */ 0x00D7, - /* 05 */ 0x00D8, - /* 06 */ 0x00DD, - /* 07 */ 0x00DC, - /* 08 */ 0x00E6, - /* 09 */ 0x00E7, - /* 0A */ 0x00E8, - /* 0B */ 0x00EC, - /* 0C */ 0x00ED, - /* 0D */ 0x00EB, - /* 0E */ 0x00E9, - /* 0F */ 0x00EA, - /* 10 */ 0x00E4, - /* 11 */ 0x00E5, - /* 12 */ 0x00E2, - /* 13 */ 0x00E3, - /* 14 */ 0x00DF, - /* 15 */ 0x00DE, - /* 16 */ 0x00E0, - /* 17 */ 0x00E1, - /* 18 */ 0x0113, - /* 19 */ 0x0114, - /* 1A */ 0x0115, - /* 1B */ 0x010F, - /* 1C */ 0x010E, - /* 1D */ 0x0110, - /* 1E */ 0x0111, - /* 1F */ 0x0112, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ 0x027B, - /* 2A */ VX_INVALID, - /* 2B */ VX_INVALID, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - }, - { - /* 00 */ 0x00F0, - /* 01 */ 0x00F1, - /* 02 */ 0x00EE, - /* 03 */ 0x00EF, - /* 04 */ 0x00F4, - /* 05 */ 0x00F5, - /* 06 */ 0x00F2, - /* 07 */ 0x00F3, - /* 08 */ 0x0103, - /* 09 */ 0x0102, - /* 0A */ 0x0105, - /* 0B */ 0x0104, - /* 0C */ 0x00FF, - /* 0D */ 0x00FE, - /* 0E */ 0x0101, - /* 0F */ 0x0100, - /* 10 */ 0x00F8, - /* 11 */ 0x00F9, - /* 12 */ 0x00F6, - /* 13 */ 0x00F7, - /* 14 */ 0x00FC, - /* 15 */ 0x00FD, - /* 16 */ 0x00FA, - /* 17 */ 0x00FB, - /* 18 */ 0x010B, - /* 19 */ 0x010A, - /* 1A */ 0x010D, - /* 1B */ 0x010C, - /* 1C */ 0x0107, - /* 1D */ 0x0106, - /* 1E */ 0x0109, - /* 1F */ 0x0108, - /* 20 */ 0x01E5, - /* 21 */ 0x01E4, - /* 22 */ 0x00D5, - /* 23 */ 0x01E6, - /* 24 */ 0x01E9, - /* 25 */ 0x01F4, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ 0x0269, - /* 29 */ 0x026A, - /* 2A */ 0x0265, - /* 2B */ 0x0264, - /* 2C */ 0x0263, - /* 2D */ 0x0268, - /* 2E */ 0x0267, - /* 2F */ 0x0266, - /* 30 */ 0x0129, - /* 31 */ 0x0128, - /* 32 */ 0x012B, - /* 33 */ 0x012A, - /* 34 */ 0x012F, - /* 35 */ 0x012E, - /* 36 */ 0x012D, - /* 37 */ 0x012C, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - }, - { - /* 00 */ 0x00B9, - /* 01 */ 0x00B8, - /* 02 */ 0x00C6, - /* 03 */ 0x00C9, - /* 04 */ 0x00C8, - /* 05 */ 0x00C7, - /* 06 */ 0x00BE, - /* 07 */ 0x00BD, - /* 08 */ 0x01D1, - /* 09 */ 0x01D0, - /* 0A */ 0x01D5, - /* 0B */ 0x01D4, - /* 0C */ 0x01D3, - /* 0D */ 0x01CC, - /* 0E */ 0x01CB, - /* 0F */ 0x01CA, - /* 10 */ 0x0125, - /* 11 */ 0x0124, - /* 12 */ 0x0127, - /* 13 */ 0x0126, - /* 14 */ 0x0121, - /* 15 */ 0x0120, - /* 16 */ 0x0123, - /* 17 */ 0x0122, - /* 18 */ 0x0148, - /* 19 */ 0x0142, - /* 1A */ 0x0145, - /* 1B */ 0x0144, - /* 1C */ 0x0143, - /* 1D */ 0x0147, - /* 1E */ 0x0146, - /* 1F */ 0x0149, - /* 20 */ 0x024F, - /* 21 */ 0x0247, - /* 22 */ 0x0241, - /* 23 */ 0x0242, - /* 24 */ 0x0240, - /* 25 */ 0x024E, - /* 26 */ 0x024D, - /* 27 */ 0x0244, - /* 28 */ 0x0228, - /* 29 */ 0x0235, - /* 2A */ 0x0234, - /* 2B */ 0x0237, - /* 2C */ 0x0236, - /* 2D */ 0x0233, - /* 2E */ 0x0230, - /* 2F */ 0x022F, - /* 30 */ 0x017B, - /* 31 */ 0x0178, - /* 32 */ 0x0179, - /* 33 */ 0x017C, - /* 34 */ 0x017F, - /* 35 */ 0x0180, - /* 36 */ 0x017D, - /* 37 */ 0x017E, - /* 38 */ 0x015E, - /* 39 */ 0x015F, - /* 3A */ 0x0160, - /* 3B */ 0x015B, - /* 3C */ 0x015C, - /* 3D */ 0x015D, - /* 3E */ 0x0164, - /* 3F */ 0x0165, - }, - { - /* 00 */ 0x018F, - /* 01 */ 0x018E, - /* 02 */ 0x0191, - /* 03 */ 0x0190, - /* 04 */ 0x018B, - /* 05 */ 0x018A, - /* 06 */ 0x018D, - /* 07 */ 0x018C, - /* 08 */ 0x028A, - /* 09 */ 0x0289, - /* 0A */ 0x028C, - /* 0B */ 0x028B, - /* 0C */ 0x0286, - /* 0D */ 0x0285, - /* 0E */ 0x0288, - /* 0F */ 0x0287, - /* 10 */ 0x0200, - /* 11 */ 0x0202, - /* 12 */ 0x0201, - /* 13 */ 0x01FA, - /* 14 */ 0x01F9, - /* 15 */ 0x01FB, - /* 16 */ 0x01FD, - /* 17 */ 0x01FC, - /* 18 */ 0x020D, - /* 19 */ 0x020C, - /* 1A */ 0x0208, - /* 1B */ 0x0204, - /* 1C */ 0x0203, - /* 1D */ 0x0205, - /* 1E */ 0x0207, - /* 1F */ 0x0206, - /* 20 */ 0x025D, - /* 21 */ 0x025C, - /* 22 */ 0x025B, - /* 23 */ 0x025E, - /* 24 */ 0x0261, - /* 25 */ 0x0262, - /* 26 */ 0x025F, - /* 27 */ 0x0260, - /* 28 */ 0x0278, - /* 29 */ 0x0277, - /* 2A */ 0x027A, - /* 2B */ 0x0279, - /* 2C */ 0x0274, - /* 2D */ 0x0273, - /* 2E */ 0x0276, - /* 2F */ 0x0275, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - }, - { - /* 00 */ 0x00CC, - /* 01 */ 0x00CD, - /* 02 */ 0x00CA, - /* 03 */ 0x00CB, - /* 04 */ 0x00D0, - /* 05 */ 0x00D1, - /* 06 */ 0x00CE, - /* 07 */ 0x00CF, - /* 08 */ 0x01E1, - /* 09 */ 0x01E0, - /* 0A */ 0x01E3, - /* 0B */ 0x01E2, - /* 0C */ 0x01DD, - /* 0D */ 0x01DC, - /* 0E */ 0x01DF, - /* 0F */ 0x01DE, - /* 10 */ 0x014F, - /* 11 */ 0x014E, - /* 12 */ 0x0151, - /* 13 */ 0x0150, - /* 14 */ 0x014B, - /* 15 */ 0x014A, - /* 16 */ 0x014D, - /* 17 */ 0x014C, - /* 18 */ VX_INVALID, - /* 19 */ 0x0152, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ 0x0258, - /* 21 */ 0x0259, - /* 22 */ 0x0256, - /* 23 */ 0x0257, - /* 24 */ 0x0253, - /* 25 */ 0x0252, - /* 26 */ 0x0255, - /* 27 */ 0x0254, - /* 28 */ 0x023B, - /* 29 */ 0x023D, - /* 2A */ 0x023C, - /* 2B */ 0x0239, - /* 2C */ 0x0238, - /* 2D */ 0x023A, - /* 2E */ 0x023E, - /* 2F */ 0x023F, - /* 30 */ 0x0186, - /* 31 */ 0x0185, - /* 32 */ 0x0188, - /* 33 */ 0x0187, - /* 34 */ 0x0182, - /* 35 */ 0x0181, - /* 36 */ 0x0184, - /* 37 */ 0x0183, - /* 38 */ 0x016C, - /* 39 */ 0x016B, - /* 3A */ 0x016E, - /* 3B */ 0x016D, - /* 3C */ 0x0168, - /* 3D */ 0x0167, - /* 3E */ 0x016A, - /* 3F */ 0x0169, - }, - { - /* 00 */ 0x0199, - /* 01 */ 0x0196, - /* 02 */ 0x0197, - /* 03 */ 0x0198, - /* 04 */ 0x0193, - /* 05 */ 0x0192, - /* 06 */ 0x0195, - /* 07 */ 0x0194, - /* 08 */ 0x028F, - /* 09 */ 0x0290, - /* 0A */ 0x028D, - /* 0B */ 0x028E, - /* 0C */ 0x0293, - /* 0D */ 0x0294, - /* 0E */ 0x0291, - /* 0F */ 0x0292, - /* 10 */ 0x021B, - /* 11 */ 0x021A, - /* 12 */ 0x021D, - /* 13 */ 0x021C, - /* 14 */ 0x0217, - /* 15 */ 0x0216, - /* 16 */ 0x0219, - /* 17 */ 0x0218, - /* 18 */ 0x0220, - /* 19 */ 0x0221, - /* 1A */ 0x021E, - /* 1B */ 0x021F, - /* 1C */ 0x0224, - /* 1D */ 0x0225, - /* 1E */ 0x0222, - /* 1F */ 0x0223, - /* 20 */ 0x01EC, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ 0x0271, - /* 29 */ 0x0272, - /* 2A */ 0x026D, - /* 2B */ 0x026C, - /* 2C */ 0x026B, - /* 2D */ 0x0270, - /* 2E */ 0x026F, - /* 2F */ 0x026E, - /* 30 */ 0x0136, - /* 31 */ 0x0137, - /* 32 */ 0x0133, - /* 33 */ 0x0134, - /* 34 */ 0x0135, - /* 35 */ 0x0130, - /* 36 */ 0x0131, - /* 37 */ 0x0132, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - }, -}; - -const VXOpcodeTreeNode optreeAddressSize[][3] = -{ - { - /* 00 */ 0x02CD, - /* 01 */ 0x02D0, - /* 02 */ 0x02EC, - }, -}; - -const VXOpcodeTreeNode optreeOperandSize[][3] = -{ - { - /* 00 */ 0x03E0, - /* 01 */ 0x03E1, - /* 02 */ 0x03E2, - }, - { - /* 00 */ 0x0409, - /* 01 */ 0x040A, - /* 02 */ 0x040B, - }, - { - /* 00 */ 0x033D, - /* 01 */ 0x0343, - /* 02 */ 0x035E, - }, - { - /* 00 */ 0x0341, - /* 01 */ 0x0342, - /* 02 */ 0x0364, - }, - { - /* 00 */ 0x0344, - /* 01 */ 0x033E, - /* 02 */ 0x0365, - }, - { - /* 00 */ 0x0340, - /* 01 */ 0x033F, - /* 02 */ 0x0360, - }, - { - /* 00 */ 0x007F, - /* 01 */ 0x0080, - /* 02 */ 0x007E, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x000F), - /* 01 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0010), - /* 02 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0011), - /* 01 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0012), - /* 02 */ VX_INVALID, - }, - { - /* 00 */ 0x02B8, - /* 01 */ 0x02B6, - /* 02 */ VX_INVALID, - }, - { - /* 00 */ 0x03A1, - /* 01 */ 0x03A0, - /* 02 */ VX_INVALID, - }, - { - /* 00 */ 0x0050, - /* 01 */ 0x009E, - /* 02 */ 0x0052, - }, - { - /* 00 */ 0x009D, - /* 01 */ 0x0051, - /* 02 */ 0x0084, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x001E), - /* 01 */ NODE(VXOpcodeTreeNodeType::MODE, 0x001F), - /* 02 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0020), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0021), - /* 01 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0022), - /* 02 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0023), - }, - { - /* 00 */ 0x0372, - /* 01 */ 0x0369, - /* 02 */ 0x036F, - }, - { - /* 00 */ 0x007B, - /* 01 */ 0x0078, - /* 02 */ 0x0079, - }, - { - /* 00 */ 0x0540, - /* 01 */ 0x053E, - /* 02 */ 0x053F, - }, - { - /* 00 */ 0x0303, - /* 01 */ 0x0301, - /* 02 */ 0x0302, - }, - { - /* 00 */ 0x0504, - /* 01 */ 0x0502, - /* 02 */ 0x0503, - }, - { - /* 00 */ 0x05BB, - /* 01 */ 0x05BA, - /* 02 */ 0x05D5, - }, - { - /* 00 */ 0x05B9, - /* 01 */ 0x05BC, - /* 02 */ 0x05D6, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000E), - /* 01 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x000F), - /* 02 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0010), - }, - { - /* 00 */ 0x02C6, - /* 01 */ 0x02C4, - /* 02 */ 0x02C5, - }, -}; - -const VXOpcodeTreeNode optreeMode[][2] = -{ - { - /* 00 */ 0x04AA, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0445, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x04AD, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0553, - /* 01 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x000D), - }, - { - /* 00 */ 0x0555, - /* 01 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x000E), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x000F), - /* 01 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0010), - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0011), - /* 01 */ NODE(VXOpcodeTreeNodeType::VENDOR, 0x0012), - }, - { - /* 00 */ 0x04AC, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0446, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x04A9, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0443, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x009F, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x00A0, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0001, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0004, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x04BA, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x04BB, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x044B, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x044C, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0038, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0033, - /* 01 */ 0x0375, - }, - { - /* 00 */ 0x0011, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0398, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0007, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x04FC, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x002A, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0546, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x06B3, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0073, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x004F, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x04C0, - /* 01 */ 0x04BF, - }, - { - /* 00 */ 0x04BC, - /* 01 */ 0x04BE, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x04BD, - }, - { - /* 00 */ 0x0451, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x044E, - /* 01 */ 0x0450, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x044F, - }, - { - /* 00 */ 0x02F6, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0014), - /* 01 */ NODE(VXOpcodeTreeNodeType::VEXW, 0x0015), - }, - { - /* 00 */ 0x02F3, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x02BC, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0003, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0002, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x04F0, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x02DC, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x004D, - /* 01 */ 0x004B, - }, -}; - -const VXOpcodeTreeNode optreeVendor[][2] = -{ - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05AC, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05B2, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05EB, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05F3, - }, - { - /* 00 */ 0x05EC, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x05B4, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x05B3, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x05ED, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x053A, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0056, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0530, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x02C1, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x04D5, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x0552, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x0554, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x02BE, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x02BF, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x02C3, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x02C2, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05EA, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05F2, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05E8, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05E9, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05F4, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05AD, - }, -}; - -const VXOpcodeTreeNode optree3dnow[][256] = -{ - { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ 0x0407, - /* 0D */ 0x0406, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ VX_INVALID, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ VX_INVALID, - /* 17 */ VX_INVALID, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ 0x03E7, - /* 1D */ 0x03E6, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, - /* 2A */ VX_INVALID, - /* 2B */ VX_INVALID, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ 0x03F0, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ 0x03F1, - /* 8F */ VX_INVALID, - /* 90 */ 0x03EB, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ 0x03EE, - /* 95 */ VX_INVALID, - /* 96 */ 0x03F2, - /* 97 */ 0x03F6, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ 0x03F7, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ 0x03E9, - /* 9F */ VX_INVALID, - /* A0 */ 0x03EC, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ 0x03ED, - /* A5 */ VX_INVALID, - /* A6 */ 0x03F3, - /* A7 */ 0x03F5, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ 0x03F8, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ 0x03E8, - /* AF */ VX_INVALID, - /* B0 */ 0x03EA, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ 0x03EF, - /* B5 */ VX_INVALID, - /* B6 */ 0x03F4, - /* B7 */ 0x0433, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ 0x0499, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ 0x03C7, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ VX_INVALID, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, - }, -}; - -const VXOpcodeTreeNode optreeVex[][16] = -{ - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0024), - /* 01 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0004), - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0005), - /* 06 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0006), - /* 07 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0007), - /* 08 */ VX_INVALID, - /* 09 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0008), - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0009), - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::MODE, 0x0026), - /* 01 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0004), - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0005), - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0008), - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ NODE(VXOpcodeTreeNodeType::TABLE, 0x0009), - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - }, -}; - -const VXOpcodeTreeNode optreeVexW[][2] = -{ - { - /* 00 */ 0x061D, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x061C, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0692, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0691, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x057B, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0008), - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x05A6, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x05A5, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x05A7, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x05A4, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x061E, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x061B, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x0009), - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x061F, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0620, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0621, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x0622, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000A), - /* 01 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000B), - /* 01 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000C), - /* 01 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000D), - /* 01 */ VX_INVALID, - }, - { - /* 00 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000E), - /* 01 */ NODE(VXOpcodeTreeNodeType::VEXL, 0x000F), - }, - { - /* 00 */ 0x0579, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x0578, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x060B, - /* 01 */ VX_INVALID, - }, -}; - -const VXOpcodeTreeNode optreeVexL[][2] = -{ - { - /* 00 */ 0x069C, - /* 01 */ 0x069B, - }, - { - /* 00 */ 0x0660, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x065A, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x065E, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x063F, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x065F, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x065B, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x065D, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x057A, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x061A, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x05A0, - }, - { - /* 00 */ VX_INVALID, - /* 01 */ 0x059A, - }, - { - /* 00 */ 0x062C, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x062E, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x062D, - /* 01 */ VX_INVALID, - }, - { - /* 00 */ 0x062F, - /* 01 */ VX_INVALID, - }, -}; - -#undef VX_INVALID -#undef NODE - -#define OPI_NONE { VXDefinedOperandType::NONE, VXDefinedOperandSize::NA } -#define OPI_AL { VXDefinedOperandType::AL, VXDefinedOperandSize::B } -#define OPI_AX { VXDefinedOperandType::AX, VXDefinedOperandSize::W } -#define OPI_Av { VXDefinedOperandType::A, VXDefinedOperandSize::V } -#define OPI_C { VXDefinedOperandType::C, VXDefinedOperandSize::NA } -#define OPI_CL { VXDefinedOperandType::CL, VXDefinedOperandSize::B } -#define OPI_CS { VXDefinedOperandType::CS, VXDefinedOperandSize::NA } -#define OPI_CX { VXDefinedOperandType::CX, VXDefinedOperandSize::W } -#define OPI_D { VXDefinedOperandType::D, VXDefinedOperandSize::NA } -#define OPI_DL { VXDefinedOperandType::DL, VXDefinedOperandSize::B } -#define OPI_DS { VXDefinedOperandType::DS, VXDefinedOperandSize::NA } -#define OPI_DX { VXDefinedOperandType::DX, VXDefinedOperandSize::W } -#define OPI_E { VXDefinedOperandType::E, VXDefinedOperandSize::NA } -#define OPI_ES { VXDefinedOperandType::ES, VXDefinedOperandSize::NA } -#define OPI_Eb { VXDefinedOperandType::E, VXDefinedOperandSize::B } -#define OPI_Ed { VXDefinedOperandType::E, VXDefinedOperandSize::D } -#define OPI_Eq { VXDefinedOperandType::E, VXDefinedOperandSize::Q } -#define OPI_Ev { VXDefinedOperandType::E, VXDefinedOperandSize::V } -#define OPI_Ew { VXDefinedOperandType::E, VXDefinedOperandSize::W } -#define OPI_Ey { VXDefinedOperandType::E, VXDefinedOperandSize::Y } -#define OPI_Ez { VXDefinedOperandType::E, VXDefinedOperandSize::Z } -#define OPI_FS { VXDefinedOperandType::FS, VXDefinedOperandSize::NA } -#define OPI_Fv { VXDefinedOperandType::F, VXDefinedOperandSize::V } -#define OPI_G { VXDefinedOperandType::G, VXDefinedOperandSize::NA } -#define OPI_GS { VXDefinedOperandType::GS, VXDefinedOperandSize::NA } -#define OPI_Gb { VXDefinedOperandType::G, VXDefinedOperandSize::B } -#define OPI_Gd { VXDefinedOperandType::G, VXDefinedOperandSize::D } -#define OPI_Gq { VXDefinedOperandType::G, VXDefinedOperandSize::Q } -#define OPI_Gv { VXDefinedOperandType::G, VXDefinedOperandSize::V } -#define OPI_Gw { VXDefinedOperandType::G, VXDefinedOperandSize::W } -#define OPI_Gy { VXDefinedOperandType::G, VXDefinedOperandSize::Y } -#define OPI_Gz { VXDefinedOperandType::G, VXDefinedOperandSize::Z } -#define OPI_H { VXDefinedOperandType::H, VXDefinedOperandSize::X } -#define OPI_Hqq { VXDefinedOperandType::H, VXDefinedOperandSize::QQ } -#define OPI_Hx { VXDefinedOperandType::H, VXDefinedOperandSize::X } -#define OPI_I1 { VXDefinedOperandType::I1, VXDefinedOperandSize::NA } -#define OPI_Ib { VXDefinedOperandType::I, VXDefinedOperandSize::B } -#define OPI_Iv { VXDefinedOperandType::I, VXDefinedOperandSize::V } -#define OPI_Iw { VXDefinedOperandType::I, VXDefinedOperandSize::W } -#define OPI_Iz { VXDefinedOperandType::I, VXDefinedOperandSize::Z } -#define OPI_Jb { VXDefinedOperandType::J, VXDefinedOperandSize::B } -#define OPI_Jv { VXDefinedOperandType::J, VXDefinedOperandSize::V } -#define OPI_Jz { VXDefinedOperandType::J, VXDefinedOperandSize::Z } -#define OPI_L { VXDefinedOperandType::L, VXDefinedOperandSize::O } -#define OPI_Lx { VXDefinedOperandType::L, VXDefinedOperandSize::X } -#define OPI_M { VXDefinedOperandType::M, VXDefinedOperandSize::NA } -#define OPI_Mb { VXDefinedOperandType::M, VXDefinedOperandSize::B } -#define OPI_MbRd { VXDefinedOperandType::MR, VXDefinedOperandSize::BD } -#define OPI_MbRv { VXDefinedOperandType::MR, VXDefinedOperandSize::BV } -#define OPI_Md { VXDefinedOperandType::M, VXDefinedOperandSize::D } -#define OPI_MdRy { VXDefinedOperandType::MR, VXDefinedOperandSize::DY } -#define OPI_MdU { VXDefinedOperandType::MU, VXDefinedOperandSize::DO } -#define OPI_Mdq { VXDefinedOperandType::M, VXDefinedOperandSize::DQ } -#define OPI_Mo { VXDefinedOperandType::M, VXDefinedOperandSize::O } -#define OPI_Mq { VXDefinedOperandType::M, VXDefinedOperandSize::Q } -#define OPI_MqU { VXDefinedOperandType::MU, VXDefinedOperandSize::QO } -#define OPI_Ms { VXDefinedOperandType::M, VXDefinedOperandSize::W } -#define OPI_Mt { VXDefinedOperandType::M, VXDefinedOperandSize::T } -#define OPI_Mv { VXDefinedOperandType::M, VXDefinedOperandSize::V } -#define OPI_Mw { VXDefinedOperandType::M, VXDefinedOperandSize::W } -#define OPI_MwRd { VXDefinedOperandType::MR, VXDefinedOperandSize::WD } -#define OPI_MwRv { VXDefinedOperandType::MR, VXDefinedOperandSize::WV } -#define OPI_MwRy { VXDefinedOperandType::MR, VXDefinedOperandSize::WY } -#define OPI_MwU { VXDefinedOperandType::MU, VXDefinedOperandSize::WO } -#define OPI_N { VXDefinedOperandType::N, VXDefinedOperandSize::Q } -#define OPI_Ob { VXDefinedOperandType::O, VXDefinedOperandSize::B } -#define OPI_Ov { VXDefinedOperandType::O, VXDefinedOperandSize::V } -#define OPI_Ow { VXDefinedOperandType::O, VXDefinedOperandSize::W } -#define OPI_P { VXDefinedOperandType::P, VXDefinedOperandSize::Q } -#define OPI_Q { VXDefinedOperandType::Q, VXDefinedOperandSize::Q } -#define OPI_R { VXDefinedOperandType::R, VXDefinedOperandSize::RDQ } -#define OPI_R0b { VXDefinedOperandType::R0, VXDefinedOperandSize::B } -#define OPI_R0v { VXDefinedOperandType::R0, VXDefinedOperandSize::V } -#define OPI_R0w { VXDefinedOperandType::R0, VXDefinedOperandSize::W } -#define OPI_R0y { VXDefinedOperandType::R0, VXDefinedOperandSize::Y } -#define OPI_R0z { VXDefinedOperandType::R0, VXDefinedOperandSize::Z } -#define OPI_R1b { VXDefinedOperandType::R1, VXDefinedOperandSize::B } -#define OPI_R1v { VXDefinedOperandType::R1, VXDefinedOperandSize::V } -#define OPI_R1w { VXDefinedOperandType::R1, VXDefinedOperandSize::W } -#define OPI_R1y { VXDefinedOperandType::R1, VXDefinedOperandSize::Y } -#define OPI_R1z { VXDefinedOperandType::R1, VXDefinedOperandSize::Z } -#define OPI_R2b { VXDefinedOperandType::R2, VXDefinedOperandSize::B } -#define OPI_R2v { VXDefinedOperandType::R2, VXDefinedOperandSize::V } -#define OPI_R2w { VXDefinedOperandType::R2, VXDefinedOperandSize::W } -#define OPI_R2y { VXDefinedOperandType::R2, VXDefinedOperandSize::Y } -#define OPI_R2z { VXDefinedOperandType::R2, VXDefinedOperandSize::Z } -#define OPI_R3b { VXDefinedOperandType::R3, VXDefinedOperandSize::B } -#define OPI_R3v { VXDefinedOperandType::R3, VXDefinedOperandSize::V } -#define OPI_R3w { VXDefinedOperandType::R3, VXDefinedOperandSize::W } -#define OPI_R3y { VXDefinedOperandType::R3, VXDefinedOperandSize::Y } -#define OPI_R3z { VXDefinedOperandType::R3, VXDefinedOperandSize::Z } -#define OPI_R4b { VXDefinedOperandType::R4, VXDefinedOperandSize::B } -#define OPI_R4v { VXDefinedOperandType::R4, VXDefinedOperandSize::V } -#define OPI_R4w { VXDefinedOperandType::R4, VXDefinedOperandSize::W } -#define OPI_R4y { VXDefinedOperandType::R4, VXDefinedOperandSize::Y } -#define OPI_R4z { VXDefinedOperandType::R4, VXDefinedOperandSize::Z } -#define OPI_R5b { VXDefinedOperandType::R5, VXDefinedOperandSize::B } -#define OPI_R5v { VXDefinedOperandType::R5, VXDefinedOperandSize::V } -#define OPI_R5w { VXDefinedOperandType::R5, VXDefinedOperandSize::W } -#define OPI_R5y { VXDefinedOperandType::R5, VXDefinedOperandSize::Y } -#define OPI_R5z { VXDefinedOperandType::R5, VXDefinedOperandSize::Z } -#define OPI_R6b { VXDefinedOperandType::R6, VXDefinedOperandSize::B } -#define OPI_R6v { VXDefinedOperandType::R6, VXDefinedOperandSize::V } -#define OPI_R6w { VXDefinedOperandType::R6, VXDefinedOperandSize::W } -#define OPI_R6y { VXDefinedOperandType::R6, VXDefinedOperandSize::Y } -#define OPI_R6z { VXDefinedOperandType::R6, VXDefinedOperandSize::Z } -#define OPI_R7b { VXDefinedOperandType::R7, VXDefinedOperandSize::B } -#define OPI_R7v { VXDefinedOperandType::R7, VXDefinedOperandSize::V } -#define OPI_R7w { VXDefinedOperandType::R7, VXDefinedOperandSize::W } -#define OPI_R7y { VXDefinedOperandType::R7, VXDefinedOperandSize::Y } -#define OPI_R7z { VXDefinedOperandType::R7, VXDefinedOperandSize::Z } -#define OPI_S { VXDefinedOperandType::S, VXDefinedOperandSize::W } -#define OPI_SS { VXDefinedOperandType::SS, VXDefinedOperandSize::NA } -#define OPI_ST0 { VXDefinedOperandType::ST0, VXDefinedOperandSize::NA } -#define OPI_ST1 { VXDefinedOperandType::ST1, VXDefinedOperandSize::NA } -#define OPI_ST2 { VXDefinedOperandType::ST2, VXDefinedOperandSize::NA } -#define OPI_ST3 { VXDefinedOperandType::ST3, VXDefinedOperandSize::NA } -#define OPI_ST4 { VXDefinedOperandType::ST4, VXDefinedOperandSize::NA } -#define OPI_ST5 { VXDefinedOperandType::ST5, VXDefinedOperandSize::NA } -#define OPI_ST6 { VXDefinedOperandType::ST6, VXDefinedOperandSize::NA } -#define OPI_ST7 { VXDefinedOperandType::ST7, VXDefinedOperandSize::NA } -#define OPI_U { VXDefinedOperandType::U, VXDefinedOperandSize::O } -#define OPI_Ux { VXDefinedOperandType::U, VXDefinedOperandSize::X } -#define OPI_V { VXDefinedOperandType::V, VXDefinedOperandSize::DQ } -#define OPI_Vdq { VXDefinedOperandType::V, VXDefinedOperandSize::DQ } -#define OPI_Vqq { VXDefinedOperandType::V, VXDefinedOperandSize::QQ } -#define OPI_Vsd { VXDefinedOperandType::V, VXDefinedOperandSize::Q } -#define OPI_Vx { VXDefinedOperandType::V, VXDefinedOperandSize::X } -#define OPI_W { VXDefinedOperandType::W, VXDefinedOperandSize::DQ } -#define OPI_Wdq { VXDefinedOperandType::W, VXDefinedOperandSize::DQ } -#define OPI_Wqq { VXDefinedOperandType::W, VXDefinedOperandSize::QQ } -#define OPI_Wsd { VXDefinedOperandType::W, VXDefinedOperandSize::Q } -#define OPI_Wx { VXDefinedOperandType::W, VXDefinedOperandSize::X } -#define OPI_eAX { VXDefinedOperandType::EAX, VXDefinedOperandSize::Z } -#define OPI_eCX { VXDefinedOperandType::ECX, VXDefinedOperandSize::Z } -#define OPI_eDX { VXDefinedOperandType::EDX, VXDefinedOperandSize::Z } -#define OPI_rAX { VXDefinedOperandType::RAX, VXDefinedOperandSize::V } -#define OPI_rCX { VXDefinedOperandType::RCX, VXDefinedOperandSize::V } -#define OPI_rDX { VXDefinedOperandType::RDX, VXDefinedOperandSize::V } -#define OPI_sIb { VXDefinedOperandType::sI, VXDefinedOperandSize::B } -#define OPI_sIz { VXDefinedOperandType::sI, VXDefinedOperandSize::Z } - -const VXInstructionDefinition instrDefinitions[] = -{ - /* 000 */ { VXInstructionMnemonic::INVALID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 001 */ { VXInstructionMnemonic::AAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 002 */ { VXInstructionMnemonic::AAD, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 003 */ { VXInstructionMnemonic::AAM, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 004 */ { VXInstructionMnemonic::AAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 005 */ { VXInstructionMnemonic::ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 006 */ { VXInstructionMnemonic::ADC, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 007 */ { VXInstructionMnemonic::ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 008 */ { VXInstructionMnemonic::ADC, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 009 */ { VXInstructionMnemonic::ADC, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00A */ { VXInstructionMnemonic::ADC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00B */ { VXInstructionMnemonic::ADC, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00C */ { VXInstructionMnemonic::ADC, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00D */ { VXInstructionMnemonic::ADC, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 00E */ { VXInstructionMnemonic::ADC, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00F */ { VXInstructionMnemonic::ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 010 */ { VXInstructionMnemonic::ADD, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 011 */ { VXInstructionMnemonic::ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 012 */ { VXInstructionMnemonic::ADD, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 013 */ { VXInstructionMnemonic::ADD, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 014 */ { VXInstructionMnemonic::ADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 015 */ { VXInstructionMnemonic::ADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 016 */ { VXInstructionMnemonic::ADD, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 017 */ { VXInstructionMnemonic::ADD, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 018 */ { VXInstructionMnemonic::ADD, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 019 */ { VXInstructionMnemonic::ADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01A */ { VXInstructionMnemonic::ADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01B */ { VXInstructionMnemonic::ADDSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01C */ { VXInstructionMnemonic::ADDSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01D */ { VXInstructionMnemonic::ADDSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01E */ { VXInstructionMnemonic::ADDSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01F */ { VXInstructionMnemonic::AESDEC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 020 */ { VXInstructionMnemonic::AESDECLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 021 */ { VXInstructionMnemonic::AESENC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 022 */ { VXInstructionMnemonic::AESENCLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 023 */ { VXInstructionMnemonic::AESIMC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 024 */ { VXInstructionMnemonic::AESKEYGENASSIST, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 025 */ { VXInstructionMnemonic::AND, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 026 */ { VXInstructionMnemonic::AND, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 027 */ { VXInstructionMnemonic::AND, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 028 */ { VXInstructionMnemonic::AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 029 */ { VXInstructionMnemonic::AND, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 02A */ { VXInstructionMnemonic::AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 02B */ { VXInstructionMnemonic::AND, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 02C */ { VXInstructionMnemonic::AND, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 02D */ { VXInstructionMnemonic::AND, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 02E */ { VXInstructionMnemonic::AND, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 02F */ { VXInstructionMnemonic::ANDNPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 030 */ { VXInstructionMnemonic::ANDNPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 031 */ { VXInstructionMnemonic::ANDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 032 */ { VXInstructionMnemonic::ANDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 033 */ { VXInstructionMnemonic::ARPL, { OPI_Ew, OPI_Gw, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 034 */ { VXInstructionMnemonic::BLENDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 035 */ { VXInstructionMnemonic::BLENDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 036 */ { VXInstructionMnemonic::BLENDVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 037 */ { VXInstructionMnemonic::BLENDVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 038 */ { VXInstructionMnemonic::BOUND, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 039 */ { VXInstructionMnemonic::BSF, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 03A */ { VXInstructionMnemonic::BSR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 03B */ { VXInstructionMnemonic::BSWAP, { OPI_R5y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03C */ { VXInstructionMnemonic::BSWAP, { OPI_R3y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03D */ { VXInstructionMnemonic::BSWAP, { OPI_R1y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03E */ { VXInstructionMnemonic::BSWAP, { OPI_R4y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03F */ { VXInstructionMnemonic::BSWAP, { OPI_R0y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 040 */ { VXInstructionMnemonic::BSWAP, { OPI_R2y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 041 */ { VXInstructionMnemonic::BSWAP, { OPI_R7y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 042 */ { VXInstructionMnemonic::BSWAP, { OPI_R6y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 043 */ { VXInstructionMnemonic::BT, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 044 */ { VXInstructionMnemonic::BT, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 045 */ { VXInstructionMnemonic::BTC, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 046 */ { VXInstructionMnemonic::BTC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 047 */ { VXInstructionMnemonic::BTR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 048 */ { VXInstructionMnemonic::BTR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 049 */ { VXInstructionMnemonic::BTS, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 04A */ { VXInstructionMnemonic::BTS, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 04B */ { VXInstructionMnemonic::CALL, { OPI_Eq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 04C */ { VXInstructionMnemonic::CALL, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 04D */ { VXInstructionMnemonic::CALL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 04E */ { VXInstructionMnemonic::CALL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 04F */ { VXInstructionMnemonic::CALL, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 050 */ { VXInstructionMnemonic::CBW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 051 */ { VXInstructionMnemonic::CDQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 052 */ { VXInstructionMnemonic::CDQE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 053 */ { VXInstructionMnemonic::CLC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 054 */ { VXInstructionMnemonic::CLD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 055 */ { VXInstructionMnemonic::CLFLUSH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 056 */ { VXInstructionMnemonic::CLGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 057 */ { VXInstructionMnemonic::CLI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 058 */ { VXInstructionMnemonic::CLTS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 059 */ { VXInstructionMnemonic::CMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 05A */ { VXInstructionMnemonic::CMOVA, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05B */ { VXInstructionMnemonic::CMOVAE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05C */ { VXInstructionMnemonic::CMOVB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05D */ { VXInstructionMnemonic::CMOVBE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05E */ { VXInstructionMnemonic::CMOVE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05F */ { VXInstructionMnemonic::CMOVG, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 060 */ { VXInstructionMnemonic::CMOVGE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 061 */ { VXInstructionMnemonic::CMOVL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 062 */ { VXInstructionMnemonic::CMOVLE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 063 */ { VXInstructionMnemonic::CMOVNE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 064 */ { VXInstructionMnemonic::CMOVNO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 065 */ { VXInstructionMnemonic::CMOVNP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 066 */ { VXInstructionMnemonic::CMOVNS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 067 */ { VXInstructionMnemonic::CMOVO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 068 */ { VXInstructionMnemonic::CMOVP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 069 */ { VXInstructionMnemonic::CMOVS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 06A */ { VXInstructionMnemonic::CMP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06B */ { VXInstructionMnemonic::CMP, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06C */ { VXInstructionMnemonic::CMP, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06D */ { VXInstructionMnemonic::CMP, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06E */ { VXInstructionMnemonic::CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06F */ { VXInstructionMnemonic::CMP, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 070 */ { VXInstructionMnemonic::CMP, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, - /* 071 */ { VXInstructionMnemonic::CMP, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 072 */ { VXInstructionMnemonic::CMP, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 073 */ { VXInstructionMnemonic::CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 }, - /* 074 */ { VXInstructionMnemonic::CMPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 075 */ { VXInstructionMnemonic::CMPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 076 */ { VXInstructionMnemonic::CMPSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 077 */ { VXInstructionMnemonic::CMPSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 078 */ { VXInstructionMnemonic::CMPSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 079 */ { VXInstructionMnemonic::CMPSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 07A */ { VXInstructionMnemonic::CMPSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07B */ { VXInstructionMnemonic::CMPSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 07C */ { VXInstructionMnemonic::CMPXCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07D */ { VXInstructionMnemonic::CMPXCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07E */ { VXInstructionMnemonic::CMPXCHG16B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07F */ { VXInstructionMnemonic::CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 080 */ { VXInstructionMnemonic::CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 081 */ { VXInstructionMnemonic::COMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 082 */ { VXInstructionMnemonic::COMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 083 */ { VXInstructionMnemonic::CPUID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 084 */ { VXInstructionMnemonic::CQO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 085 */ { VXInstructionMnemonic::CRC32, { OPI_Gy, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 086 */ { VXInstructionMnemonic::CRC32, { OPI_Gy, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 087 */ { VXInstructionMnemonic::CVTDQ2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 088 */ { VXInstructionMnemonic::CVTDQ2PS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 089 */ { VXInstructionMnemonic::CVTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08A */ { VXInstructionMnemonic::CVTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08B */ { VXInstructionMnemonic::CVTPD2PS, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08C */ { VXInstructionMnemonic::CVTPI2PD, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08D */ { VXInstructionMnemonic::CVTPI2PS, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08E */ { VXInstructionMnemonic::CVTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08F */ { VXInstructionMnemonic::CVTPS2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 090 */ { VXInstructionMnemonic::CVTPS2PI, { OPI_P, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 091 */ { VXInstructionMnemonic::CVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 092 */ { VXInstructionMnemonic::CVTSD2SS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 093 */ { VXInstructionMnemonic::CVTSI2SD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 094 */ { VXInstructionMnemonic::CVTSI2SS, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 095 */ { VXInstructionMnemonic::CVTSS2SD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 096 */ { VXInstructionMnemonic::CVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 097 */ { VXInstructionMnemonic::CVTTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 098 */ { VXInstructionMnemonic::CVTTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 099 */ { VXInstructionMnemonic::CVTTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09A */ { VXInstructionMnemonic::CVTTPS2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09B */ { VXInstructionMnemonic::CVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09C */ { VXInstructionMnemonic::CVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09D */ { VXInstructionMnemonic::CWD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 09E */ { VXInstructionMnemonic::CWDE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 09F */ { VXInstructionMnemonic::DAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 0A0 */ { VXInstructionMnemonic::DAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 0A1 */ { VXInstructionMnemonic::DEC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A2 */ { VXInstructionMnemonic::DEC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A3 */ { VXInstructionMnemonic::DEC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A4 */ { VXInstructionMnemonic::DEC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0A5 */ { VXInstructionMnemonic::DEC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0A6 */ { VXInstructionMnemonic::DEC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A7 */ { VXInstructionMnemonic::DEC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A8 */ { VXInstructionMnemonic::DEC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A9 */ { VXInstructionMnemonic::DEC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0AA */ { VXInstructionMnemonic::DEC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0AB */ { VXInstructionMnemonic::DIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 0AC */ { VXInstructionMnemonic::DIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 0AD */ { VXInstructionMnemonic::DIVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0AE */ { VXInstructionMnemonic::DIVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0AF */ { VXInstructionMnemonic::DIVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B0 */ { VXInstructionMnemonic::DIVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B1 */ { VXInstructionMnemonic::DPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B2 */ { VXInstructionMnemonic::DPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B3 */ { VXInstructionMnemonic::EMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0B4 */ { VXInstructionMnemonic::ENTER, { OPI_Iw, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, - /* 0B5 */ { VXInstructionMnemonic::EXTRACTPS, { OPI_MdRy, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 0B6 */ { VXInstructionMnemonic::F2XM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0B7 */ { VXInstructionMnemonic::FABS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0B8 */ { VXInstructionMnemonic::FADD, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0B9 */ { VXInstructionMnemonic::FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BA */ { VXInstructionMnemonic::FADD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0BB */ { VXInstructionMnemonic::FADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0BC */ { VXInstructionMnemonic::FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BD */ { VXInstructionMnemonic::FADD, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BE */ { VXInstructionMnemonic::FADD, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BF */ { VXInstructionMnemonic::FADD, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0C0 */ { VXInstructionMnemonic::FADD, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0C1 */ { VXInstructionMnemonic::FADD, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0C2 */ { VXInstructionMnemonic::FADD, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0C3 */ { VXInstructionMnemonic::FADD, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0C4 */ { VXInstructionMnemonic::FADD, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0C5 */ { VXInstructionMnemonic::FADD, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0C6 */ { VXInstructionMnemonic::FADD, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0C7 */ { VXInstructionMnemonic::FADD, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0C8 */ { VXInstructionMnemonic::FADD, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0C9 */ { VXInstructionMnemonic::FADD, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CA */ { VXInstructionMnemonic::FADDP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CB */ { VXInstructionMnemonic::FADDP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CC */ { VXInstructionMnemonic::FADDP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CD */ { VXInstructionMnemonic::FADDP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CE */ { VXInstructionMnemonic::FADDP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CF */ { VXInstructionMnemonic::FADDP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0D0 */ { VXInstructionMnemonic::FADDP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0D1 */ { VXInstructionMnemonic::FADDP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0D2 */ { VXInstructionMnemonic::FBLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0D3 */ { VXInstructionMnemonic::FBSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0D4 */ { VXInstructionMnemonic::FCHS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0D5 */ { VXInstructionMnemonic::FCLEX, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0D6 */ { VXInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0D7 */ { VXInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0D8 */ { VXInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0D9 */ { VXInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0DA */ { VXInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0DB */ { VXInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0DC */ { VXInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0DD */ { VXInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0DE */ { VXInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0DF */ { VXInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0E0 */ { VXInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0E1 */ { VXInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0E2 */ { VXInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0E3 */ { VXInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0E4 */ { VXInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0E5 */ { VXInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0E6 */ { VXInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0E7 */ { VXInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0E8 */ { VXInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0E9 */ { VXInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0EA */ { VXInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0EB */ { VXInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0EC */ { VXInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0ED */ { VXInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0EE */ { VXInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0EF */ { VXInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0F0 */ { VXInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0F1 */ { VXInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0F2 */ { VXInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0F3 */ { VXInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0F4 */ { VXInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0F5 */ { VXInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0F6 */ { VXInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0F7 */ { VXInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0F8 */ { VXInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0F9 */ { VXInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0FA */ { VXInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0FB */ { VXInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0FC */ { VXInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0FD */ { VXInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0FE */ { VXInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0FF */ { VXInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 100 */ { VXInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 101 */ { VXInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 102 */ { VXInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 103 */ { VXInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 104 */ { VXInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 105 */ { VXInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 106 */ { VXInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 107 */ { VXInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 108 */ { VXInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 109 */ { VXInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 10A */ { VXInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 10B */ { VXInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 10C */ { VXInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 10D */ { VXInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 10E */ { VXInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 10F */ { VXInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 110 */ { VXInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 111 */ { VXInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 112 */ { VXInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 113 */ { VXInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 114 */ { VXInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 115 */ { VXInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 116 */ { VXInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 117 */ { VXInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 118 */ { VXInstructionMnemonic::FCOM, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 119 */ { VXInstructionMnemonic::FCOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 11A */ { VXInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 11B */ { VXInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 11C */ { VXInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 11D */ { VXInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 11E */ { VXInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 11F */ { VXInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 120 */ { VXInstructionMnemonic::FCOM2, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 121 */ { VXInstructionMnemonic::FCOM2, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 122 */ { VXInstructionMnemonic::FCOM2, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 123 */ { VXInstructionMnemonic::FCOM2, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 124 */ { VXInstructionMnemonic::FCOM2, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 125 */ { VXInstructionMnemonic::FCOM2, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 126 */ { VXInstructionMnemonic::FCOM2, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 127 */ { VXInstructionMnemonic::FCOM2, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 128 */ { VXInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 129 */ { VXInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 12A */ { VXInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 12B */ { VXInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 12C */ { VXInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 12D */ { VXInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 12E */ { VXInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 12F */ { VXInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 130 */ { VXInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 131 */ { VXInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 132 */ { VXInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 133 */ { VXInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 134 */ { VXInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 135 */ { VXInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 136 */ { VXInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 137 */ { VXInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 138 */ { VXInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 139 */ { VXInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 13A */ { VXInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 13B */ { VXInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 13C */ { VXInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 13D */ { VXInstructionMnemonic::FCOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 13E */ { VXInstructionMnemonic::FCOMP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 13F */ { VXInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 140 */ { VXInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 141 */ { VXInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 142 */ { VXInstructionMnemonic::FCOMP3, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 143 */ { VXInstructionMnemonic::FCOMP3, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 144 */ { VXInstructionMnemonic::FCOMP3, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 145 */ { VXInstructionMnemonic::FCOMP3, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 146 */ { VXInstructionMnemonic::FCOMP3, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 147 */ { VXInstructionMnemonic::FCOMP3, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 148 */ { VXInstructionMnemonic::FCOMP3, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 149 */ { VXInstructionMnemonic::FCOMP3, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14A */ { VXInstructionMnemonic::FCOMP5, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14B */ { VXInstructionMnemonic::FCOMP5, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14C */ { VXInstructionMnemonic::FCOMP5, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14D */ { VXInstructionMnemonic::FCOMP5, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14E */ { VXInstructionMnemonic::FCOMP5, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14F */ { VXInstructionMnemonic::FCOMP5, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 150 */ { VXInstructionMnemonic::FCOMP5, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 151 */ { VXInstructionMnemonic::FCOMP5, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 152 */ { VXInstructionMnemonic::FCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 153 */ { VXInstructionMnemonic::FCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 154 */ { VXInstructionMnemonic::FDECSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 155 */ { VXInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 156 */ { VXInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 157 */ { VXInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 158 */ { VXInstructionMnemonic::FDIV, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 159 */ { VXInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 15A */ { VXInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 15B */ { VXInstructionMnemonic::FDIV, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15C */ { VXInstructionMnemonic::FDIV, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15D */ { VXInstructionMnemonic::FDIV, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15E */ { VXInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15F */ { VXInstructionMnemonic::FDIV, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 160 */ { VXInstructionMnemonic::FDIV, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 161 */ { VXInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 162 */ { VXInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 163 */ { VXInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 164 */ { VXInstructionMnemonic::FDIV, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 165 */ { VXInstructionMnemonic::FDIV, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 166 */ { VXInstructionMnemonic::FDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 167 */ { VXInstructionMnemonic::FDIVP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 168 */ { VXInstructionMnemonic::FDIVP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 169 */ { VXInstructionMnemonic::FDIVP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16A */ { VXInstructionMnemonic::FDIVP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16B */ { VXInstructionMnemonic::FDIVP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16C */ { VXInstructionMnemonic::FDIVP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16D */ { VXInstructionMnemonic::FDIVP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16E */ { VXInstructionMnemonic::FDIVP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16F */ { VXInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 170 */ { VXInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 171 */ { VXInstructionMnemonic::FDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 172 */ { VXInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 173 */ { VXInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 174 */ { VXInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 175 */ { VXInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 176 */ { VXInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 177 */ { VXInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 178 */ { VXInstructionMnemonic::FDIVR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 179 */ { VXInstructionMnemonic::FDIVR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17A */ { VXInstructionMnemonic::FDIVR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 17B */ { VXInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17C */ { VXInstructionMnemonic::FDIVR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17D */ { VXInstructionMnemonic::FDIVR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17E */ { VXInstructionMnemonic::FDIVR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17F */ { VXInstructionMnemonic::FDIVR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 180 */ { VXInstructionMnemonic::FDIVR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 181 */ { VXInstructionMnemonic::FDIVRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 182 */ { VXInstructionMnemonic::FDIVRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 183 */ { VXInstructionMnemonic::FDIVRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 184 */ { VXInstructionMnemonic::FDIVRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 185 */ { VXInstructionMnemonic::FDIVRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 186 */ { VXInstructionMnemonic::FDIVRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 187 */ { VXInstructionMnemonic::FDIVRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 188 */ { VXInstructionMnemonic::FDIVRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 189 */ { VXInstructionMnemonic::FEMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18A */ { VXInstructionMnemonic::FFREE, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18B */ { VXInstructionMnemonic::FFREE, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18C */ { VXInstructionMnemonic::FFREE, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18D */ { VXInstructionMnemonic::FFREE, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18E */ { VXInstructionMnemonic::FFREE, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18F */ { VXInstructionMnemonic::FFREE, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 190 */ { VXInstructionMnemonic::FFREE, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 191 */ { VXInstructionMnemonic::FFREE, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 192 */ { VXInstructionMnemonic::FFREEP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 193 */ { VXInstructionMnemonic::FFREEP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 194 */ { VXInstructionMnemonic::FFREEP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 195 */ { VXInstructionMnemonic::FFREEP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 196 */ { VXInstructionMnemonic::FFREEP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 197 */ { VXInstructionMnemonic::FFREEP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 198 */ { VXInstructionMnemonic::FFREEP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 199 */ { VXInstructionMnemonic::FFREEP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 19A */ { VXInstructionMnemonic::FIADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19B */ { VXInstructionMnemonic::FIADD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19C */ { VXInstructionMnemonic::FICOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19D */ { VXInstructionMnemonic::FICOM, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19E */ { VXInstructionMnemonic::FICOMP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19F */ { VXInstructionMnemonic::FICOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A0 */ { VXInstructionMnemonic::FIDIV, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A1 */ { VXInstructionMnemonic::FIDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A2 */ { VXInstructionMnemonic::FIDIVR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A3 */ { VXInstructionMnemonic::FIDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A4 */ { VXInstructionMnemonic::FILD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A5 */ { VXInstructionMnemonic::FILD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A6 */ { VXInstructionMnemonic::FILD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A7 */ { VXInstructionMnemonic::FIMUL, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A8 */ { VXInstructionMnemonic::FIMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A9 */ { VXInstructionMnemonic::FINCSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1AA */ { VXInstructionMnemonic::FIST, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AB */ { VXInstructionMnemonic::FIST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AC */ { VXInstructionMnemonic::FISTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AD */ { VXInstructionMnemonic::FISTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AE */ { VXInstructionMnemonic::FISTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AF */ { VXInstructionMnemonic::FISTTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B0 */ { VXInstructionMnemonic::FISTTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B1 */ { VXInstructionMnemonic::FISTTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B2 */ { VXInstructionMnemonic::FISUB, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B3 */ { VXInstructionMnemonic::FISUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B4 */ { VXInstructionMnemonic::FISUBR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B5 */ { VXInstructionMnemonic::FISUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B6 */ { VXInstructionMnemonic::FLD, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1B7 */ { VXInstructionMnemonic::FLD, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1B8 */ { VXInstructionMnemonic::FLD, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1B9 */ { VXInstructionMnemonic::FLD, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1BA */ { VXInstructionMnemonic::FLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1BB */ { VXInstructionMnemonic::FLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1BC */ { VXInstructionMnemonic::FLD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1BD */ { VXInstructionMnemonic::FLD, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1BE */ { VXInstructionMnemonic::FLD, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1BF */ { VXInstructionMnemonic::FLD, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C0 */ { VXInstructionMnemonic::FLD, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C1 */ { VXInstructionMnemonic::FLD1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C2 */ { VXInstructionMnemonic::FLDCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1C3 */ { VXInstructionMnemonic::FLDENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1C4 */ { VXInstructionMnemonic::FLDL2E, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C5 */ { VXInstructionMnemonic::FLDL2T, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C6 */ { VXInstructionMnemonic::FLDLG2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C7 */ { VXInstructionMnemonic::FLDLN2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C8 */ { VXInstructionMnemonic::FLDPI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C9 */ { VXInstructionMnemonic::FLDZ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1CA */ { VXInstructionMnemonic::FMUL, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CB */ { VXInstructionMnemonic::FMUL, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CC */ { VXInstructionMnemonic::FMUL, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CD */ { VXInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 1CE */ { VXInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CF */ { VXInstructionMnemonic::FMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1D0 */ { VXInstructionMnemonic::FMUL, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D1 */ { VXInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D2 */ { VXInstructionMnemonic::FMUL, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1D3 */ { VXInstructionMnemonic::FMUL, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D4 */ { VXInstructionMnemonic::FMUL, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D5 */ { VXInstructionMnemonic::FMUL, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D6 */ { VXInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 1D7 */ { VXInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 1D8 */ { VXInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 1D9 */ { VXInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 1DA */ { VXInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 1DB */ { VXInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 1DC */ { VXInstructionMnemonic::FMULP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1DD */ { VXInstructionMnemonic::FMULP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1DE */ { VXInstructionMnemonic::FMULP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1DF */ { VXInstructionMnemonic::FMULP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E0 */ { VXInstructionMnemonic::FMULP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E1 */ { VXInstructionMnemonic::FMULP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E2 */ { VXInstructionMnemonic::FMULP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E3 */ { VXInstructionMnemonic::FMULP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E4 */ { VXInstructionMnemonic::FNDISI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E5 */ { VXInstructionMnemonic::FNENI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E6 */ { VXInstructionMnemonic::FNINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E7 */ { VXInstructionMnemonic::FNOP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E8 */ { VXInstructionMnemonic::FNSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1E9 */ { VXInstructionMnemonic::FNSETPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1EA */ { VXInstructionMnemonic::FNSTCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1EB */ { VXInstructionMnemonic::FNSTENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1EC */ { VXInstructionMnemonic::FNSTSW, { OPI_AX, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1ED */ { VXInstructionMnemonic::FNSTSW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1EE */ { VXInstructionMnemonic::FPATAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1EF */ { VXInstructionMnemonic::FPREM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F0 */ { VXInstructionMnemonic::FPREM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F1 */ { VXInstructionMnemonic::FPTAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F2 */ { VXInstructionMnemonic::FRNDINT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F3 */ { VXInstructionMnemonic::FRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1F4 */ { VXInstructionMnemonic::FRSTPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F5 */ { VXInstructionMnemonic::FSCALE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F6 */ { VXInstructionMnemonic::FSIN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F7 */ { VXInstructionMnemonic::FSINCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F8 */ { VXInstructionMnemonic::FSQRT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F9 */ { VXInstructionMnemonic::FST, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FA */ { VXInstructionMnemonic::FST, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FB */ { VXInstructionMnemonic::FST, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FC */ { VXInstructionMnemonic::FST, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FD */ { VXInstructionMnemonic::FST, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FE */ { VXInstructionMnemonic::FST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1FF */ { VXInstructionMnemonic::FST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 200 */ { VXInstructionMnemonic::FST, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 201 */ { VXInstructionMnemonic::FST, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 202 */ { VXInstructionMnemonic::FST, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 203 */ { VXInstructionMnemonic::FSTP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 204 */ { VXInstructionMnemonic::FSTP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 205 */ { VXInstructionMnemonic::FSTP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 206 */ { VXInstructionMnemonic::FSTP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 207 */ { VXInstructionMnemonic::FSTP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 208 */ { VXInstructionMnemonic::FSTP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 209 */ { VXInstructionMnemonic::FSTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 20A */ { VXInstructionMnemonic::FSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 20B */ { VXInstructionMnemonic::FSTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 20C */ { VXInstructionMnemonic::FSTP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 20D */ { VXInstructionMnemonic::FSTP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 20E */ { VXInstructionMnemonic::FSTP1, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 20F */ { VXInstructionMnemonic::FSTP1, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 210 */ { VXInstructionMnemonic::FSTP1, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 211 */ { VXInstructionMnemonic::FSTP1, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 212 */ { VXInstructionMnemonic::FSTP1, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 213 */ { VXInstructionMnemonic::FSTP1, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 214 */ { VXInstructionMnemonic::FSTP1, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 215 */ { VXInstructionMnemonic::FSTP1, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 216 */ { VXInstructionMnemonic::FSTP8, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 217 */ { VXInstructionMnemonic::FSTP8, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 218 */ { VXInstructionMnemonic::FSTP8, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 219 */ { VXInstructionMnemonic::FSTP8, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21A */ { VXInstructionMnemonic::FSTP8, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21B */ { VXInstructionMnemonic::FSTP8, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21C */ { VXInstructionMnemonic::FSTP8, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21D */ { VXInstructionMnemonic::FSTP8, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21E */ { VXInstructionMnemonic::FSTP9, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21F */ { VXInstructionMnemonic::FSTP9, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 220 */ { VXInstructionMnemonic::FSTP9, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 221 */ { VXInstructionMnemonic::FSTP9, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 222 */ { VXInstructionMnemonic::FSTP9, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 223 */ { VXInstructionMnemonic::FSTP9, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 224 */ { VXInstructionMnemonic::FSTP9, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 225 */ { VXInstructionMnemonic::FSTP9, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 226 */ { VXInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 227 */ { VXInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 228 */ { VXInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 229 */ { VXInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 22A */ { VXInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 22B */ { VXInstructionMnemonic::FSUB, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 22C */ { VXInstructionMnemonic::FSUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 22D */ { VXInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 22E */ { VXInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 22F */ { VXInstructionMnemonic::FSUB, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 230 */ { VXInstructionMnemonic::FSUB, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 231 */ { VXInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 232 */ { VXInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 233 */ { VXInstructionMnemonic::FSUB, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 234 */ { VXInstructionMnemonic::FSUB, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 235 */ { VXInstructionMnemonic::FSUB, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 236 */ { VXInstructionMnemonic::FSUB, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 237 */ { VXInstructionMnemonic::FSUB, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 238 */ { VXInstructionMnemonic::FSUBP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 239 */ { VXInstructionMnemonic::FSUBP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23A */ { VXInstructionMnemonic::FSUBP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23B */ { VXInstructionMnemonic::FSUBP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23C */ { VXInstructionMnemonic::FSUBP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23D */ { VXInstructionMnemonic::FSUBP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23E */ { VXInstructionMnemonic::FSUBP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23F */ { VXInstructionMnemonic::FSUBP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 240 */ { VXInstructionMnemonic::FSUBR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 241 */ { VXInstructionMnemonic::FSUBR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 242 */ { VXInstructionMnemonic::FSUBR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 243 */ { VXInstructionMnemonic::FSUBR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 244 */ { VXInstructionMnemonic::FSUBR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 245 */ { VXInstructionMnemonic::FSUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 246 */ { VXInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 247 */ { VXInstructionMnemonic::FSUBR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 248 */ { VXInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 249 */ { VXInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 24A */ { VXInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 24B */ { VXInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 24C */ { VXInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 24D */ { VXInstructionMnemonic::FSUBR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 24E */ { VXInstructionMnemonic::FSUBR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 24F */ { VXInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 250 */ { VXInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 251 */ { VXInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 252 */ { VXInstructionMnemonic::FSUBRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 253 */ { VXInstructionMnemonic::FSUBRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 254 */ { VXInstructionMnemonic::FSUBRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 255 */ { VXInstructionMnemonic::FSUBRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 256 */ { VXInstructionMnemonic::FSUBRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 257 */ { VXInstructionMnemonic::FSUBRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 258 */ { VXInstructionMnemonic::FSUBRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 259 */ { VXInstructionMnemonic::FSUBRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 25A */ { VXInstructionMnemonic::FTST, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25B */ { VXInstructionMnemonic::FUCOM, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25C */ { VXInstructionMnemonic::FUCOM, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25D */ { VXInstructionMnemonic::FUCOM, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25E */ { VXInstructionMnemonic::FUCOM, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25F */ { VXInstructionMnemonic::FUCOM, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 260 */ { VXInstructionMnemonic::FUCOM, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 261 */ { VXInstructionMnemonic::FUCOM, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 262 */ { VXInstructionMnemonic::FUCOM, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 263 */ { VXInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 264 */ { VXInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 265 */ { VXInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 266 */ { VXInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 267 */ { VXInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 268 */ { VXInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 269 */ { VXInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 26A */ { VXInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 26B */ { VXInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 26C */ { VXInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 26D */ { VXInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 26E */ { VXInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 26F */ { VXInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 270 */ { VXInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 271 */ { VXInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 272 */ { VXInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 273 */ { VXInstructionMnemonic::FUCOMP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 274 */ { VXInstructionMnemonic::FUCOMP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 275 */ { VXInstructionMnemonic::FUCOMP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 276 */ { VXInstructionMnemonic::FUCOMP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 277 */ { VXInstructionMnemonic::FUCOMP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 278 */ { VXInstructionMnemonic::FUCOMP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 279 */ { VXInstructionMnemonic::FUCOMP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27A */ { VXInstructionMnemonic::FUCOMP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27B */ { VXInstructionMnemonic::FUCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27C */ { VXInstructionMnemonic::FXAM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27D */ { VXInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 27E */ { VXInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 27F */ { VXInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 280 */ { VXInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 281 */ { VXInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 282 */ { VXInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 283 */ { VXInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 284 */ { VXInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 285 */ { VXInstructionMnemonic::FXCH4, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 286 */ { VXInstructionMnemonic::FXCH4, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 287 */ { VXInstructionMnemonic::FXCH4, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 288 */ { VXInstructionMnemonic::FXCH4, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 289 */ { VXInstructionMnemonic::FXCH4, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28A */ { VXInstructionMnemonic::FXCH4, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28B */ { VXInstructionMnemonic::FXCH4, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28C */ { VXInstructionMnemonic::FXCH4, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28D */ { VXInstructionMnemonic::FXCH7, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28E */ { VXInstructionMnemonic::FXCH7, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28F */ { VXInstructionMnemonic::FXCH7, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 290 */ { VXInstructionMnemonic::FXCH7, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 291 */ { VXInstructionMnemonic::FXCH7, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 292 */ { VXInstructionMnemonic::FXCH7, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 293 */ { VXInstructionMnemonic::FXCH7, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 294 */ { VXInstructionMnemonic::FXCH7, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 295 */ { VXInstructionMnemonic::FXRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 296 */ { VXInstructionMnemonic::FXSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 297 */ { VXInstructionMnemonic::FXTRACT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 298 */ { VXInstructionMnemonic::FYL2X, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 299 */ { VXInstructionMnemonic::FYL2XP1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 29A */ { VXInstructionMnemonic::GETSEC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 29B */ { VXInstructionMnemonic::HADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 29C */ { VXInstructionMnemonic::HADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 29D */ { VXInstructionMnemonic::HLT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 29E */ { VXInstructionMnemonic::HSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 29F */ { VXInstructionMnemonic::HSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A0 */ { VXInstructionMnemonic::IDIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2A1 */ { VXInstructionMnemonic::IDIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2A2 */ { VXInstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A3 */ { VXInstructionMnemonic::IMUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A4 */ { VXInstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_Iz, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A5 */ { VXInstructionMnemonic::IMUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A6 */ { VXInstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_sIb, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A7 */ { VXInstructionMnemonic::IN, { OPI_AL, OPI_DX, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 2A8 */ { VXInstructionMnemonic::IN, { OPI_eAX, OPI_DX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2A9 */ { VXInstructionMnemonic::IN, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 2AA */ { VXInstructionMnemonic::IN, { OPI_eAX, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2AB */ { VXInstructionMnemonic::INC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AC */ { VXInstructionMnemonic::INC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AD */ { VXInstructionMnemonic::INC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AE */ { VXInstructionMnemonic::INC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AF */ { VXInstructionMnemonic::INC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2B0 */ { VXInstructionMnemonic::INC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2B1 */ { VXInstructionMnemonic::INC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B2 */ { VXInstructionMnemonic::INC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B3 */ { VXInstructionMnemonic::INC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B4 */ { VXInstructionMnemonic::INC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B5 */ { VXInstructionMnemonic::INSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 2B6 */ { VXInstructionMnemonic::INSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 2B7 */ { VXInstructionMnemonic::INSERTPS, { OPI_V, OPI_Md, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2B8 */ { VXInstructionMnemonic::INSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 2B9 */ { VXInstructionMnemonic::INT, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BA */ { VXInstructionMnemonic::INT1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BB */ { VXInstructionMnemonic::INT3, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BC */ { VXInstructionMnemonic::INTO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 2BD */ { VXInstructionMnemonic::INVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BE */ { VXInstructionMnemonic::INVEPT, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2BF */ { VXInstructionMnemonic::INVEPT, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2C0 */ { VXInstructionMnemonic::INVLPG, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2C1 */ { VXInstructionMnemonic::INVLPGA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2C2 */ { VXInstructionMnemonic::INVVPID, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2C3 */ { VXInstructionMnemonic::INVVPID, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2C4 */ { VXInstructionMnemonic::IRETD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 2C5 */ { VXInstructionMnemonic::IRETQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 2C6 */ { VXInstructionMnemonic::IRETW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 2C7 */ { VXInstructionMnemonic::JA, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2C8 */ { VXInstructionMnemonic::JA, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2C9 */ { VXInstructionMnemonic::JB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2CA */ { VXInstructionMnemonic::JB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2CB */ { VXInstructionMnemonic::JBE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2CC */ { VXInstructionMnemonic::JBE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2CD */ { VXInstructionMnemonic::JCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, - /* 2CE */ { VXInstructionMnemonic::JE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2CF */ { VXInstructionMnemonic::JE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D0 */ { VXInstructionMnemonic::JECXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, - /* 2D1 */ { VXInstructionMnemonic::JG, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D2 */ { VXInstructionMnemonic::JG, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D3 */ { VXInstructionMnemonic::JGE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D4 */ { VXInstructionMnemonic::JGE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D5 */ { VXInstructionMnemonic::JL, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D6 */ { VXInstructionMnemonic::JL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D7 */ { VXInstructionMnemonic::JLE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D8 */ { VXInstructionMnemonic::JLE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D9 */ { VXInstructionMnemonic::JMP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 2DA */ { VXInstructionMnemonic::JMP, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2DB */ { VXInstructionMnemonic::JMP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 2DC */ { VXInstructionMnemonic::JMP, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 2DD */ { VXInstructionMnemonic::JMP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, - /* 2DE */ { VXInstructionMnemonic::JNB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2DF */ { VXInstructionMnemonic::JNB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E0 */ { VXInstructionMnemonic::JNE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E1 */ { VXInstructionMnemonic::JNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E2 */ { VXInstructionMnemonic::JNO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E3 */ { VXInstructionMnemonic::JNO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E4 */ { VXInstructionMnemonic::JNP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E5 */ { VXInstructionMnemonic::JNP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E6 */ { VXInstructionMnemonic::JNS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E7 */ { VXInstructionMnemonic::JNS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E8 */ { VXInstructionMnemonic::JO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E9 */ { VXInstructionMnemonic::JO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2EA */ { VXInstructionMnemonic::JP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2EB */ { VXInstructionMnemonic::JP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2EC */ { VXInstructionMnemonic::JRCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, - /* 2ED */ { VXInstructionMnemonic::JS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2EE */ { VXInstructionMnemonic::JS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2EF */ { VXInstructionMnemonic::LAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2F0 */ { VXInstructionMnemonic::LAR, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F1 */ { VXInstructionMnemonic::LDDQU, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F2 */ { VXInstructionMnemonic::LDMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2F3 */ { VXInstructionMnemonic::LDS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2F4 */ { VXInstructionMnemonic::LEA, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F5 */ { VXInstructionMnemonic::LEAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2F6 */ { VXInstructionMnemonic::LES, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2F7 */ { VXInstructionMnemonic::LFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2F8 */ { VXInstructionMnemonic::LFS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F9 */ { VXInstructionMnemonic::LGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FA */ { VXInstructionMnemonic::LGS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2FB */ { VXInstructionMnemonic::LIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FC */ { VXInstructionMnemonic::LLDT, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FD */ { VXInstructionMnemonic::LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FE */ { VXInstructionMnemonic::LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FF */ { VXInstructionMnemonic::LOCK, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 300 */ { VXInstructionMnemonic::LODSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 301 */ { VXInstructionMnemonic::LODSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 302 */ { VXInstructionMnemonic::LODSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 303 */ { VXInstructionMnemonic::LODSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 304 */ { VXInstructionMnemonic::LOOP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 305 */ { VXInstructionMnemonic::LOOPE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 306 */ { VXInstructionMnemonic::LOOPNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 307 */ { VXInstructionMnemonic::LSL, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 308 */ { VXInstructionMnemonic::LSS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 309 */ { VXInstructionMnemonic::LTR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 30A */ { VXInstructionMnemonic::MASKMOVDQU, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 30B */ { VXInstructionMnemonic::MASKMOVQ, { OPI_P, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 30C */ { VXInstructionMnemonic::MAXPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 30D */ { VXInstructionMnemonic::MAXPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 30E */ { VXInstructionMnemonic::MAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 30F */ { VXInstructionMnemonic::MAXSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 310 */ { VXInstructionMnemonic::MFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 311 */ { VXInstructionMnemonic::MINPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 312 */ { VXInstructionMnemonic::MINPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 313 */ { VXInstructionMnemonic::MINSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 314 */ { VXInstructionMnemonic::MINSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 315 */ { VXInstructionMnemonic::MONITOR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 316 */ { VXInstructionMnemonic::MONTMUL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 317 */ { VXInstructionMnemonic::MOV, { OPI_R0b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 318 */ { VXInstructionMnemonic::MOV, { OPI_R2b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 319 */ { VXInstructionMnemonic::MOV, { OPI_R3b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31A */ { VXInstructionMnemonic::MOV, { OPI_R1b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31B */ { VXInstructionMnemonic::MOV, { OPI_AL, OPI_Ob, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 31C */ { VXInstructionMnemonic::MOV, { OPI_S, OPI_MwRv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31D */ { VXInstructionMnemonic::MOV, { OPI_MwRv, OPI_S, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31E */ { VXInstructionMnemonic::MOV, { OPI_Ov, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 31F */ { VXInstructionMnemonic::MOV, { OPI_Ob, OPI_AL, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 320 */ { VXInstructionMnemonic::MOV, { OPI_rAX, OPI_Ov, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 321 */ { VXInstructionMnemonic::MOV, { OPI_R4b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 322 */ { VXInstructionMnemonic::MOV, { OPI_R7v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 323 */ { VXInstructionMnemonic::MOV, { OPI_R6v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 324 */ { VXInstructionMnemonic::MOV, { OPI_R5v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 325 */ { VXInstructionMnemonic::MOV, { OPI_R, OPI_C, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 326 */ { VXInstructionMnemonic::MOV, { OPI_D, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 327 */ { VXInstructionMnemonic::MOV, { OPI_C, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 328 */ { VXInstructionMnemonic::MOV, { OPI_R, OPI_D, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 329 */ { VXInstructionMnemonic::MOV, { OPI_R4v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32A */ { VXInstructionMnemonic::MOV, { OPI_R7b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32B */ { VXInstructionMnemonic::MOV, { OPI_R6b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32C */ { VXInstructionMnemonic::MOV, { OPI_R5b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32D */ { VXInstructionMnemonic::MOV, { OPI_R0v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32E */ { VXInstructionMnemonic::MOV, { OPI_R3v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32F */ { VXInstructionMnemonic::MOV, { OPI_R2v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 330 */ { VXInstructionMnemonic::MOV, { OPI_R1v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 331 */ { VXInstructionMnemonic::MOV, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 332 */ { VXInstructionMnemonic::MOV, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 333 */ { VXInstructionMnemonic::MOV, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 334 */ { VXInstructionMnemonic::MOV, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 335 */ { VXInstructionMnemonic::MOV, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 336 */ { VXInstructionMnemonic::MOV, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 337 */ { VXInstructionMnemonic::MOVAPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 338 */ { VXInstructionMnemonic::MOVAPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 339 */ { VXInstructionMnemonic::MOVAPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33A */ { VXInstructionMnemonic::MOVAPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33B */ { VXInstructionMnemonic::MOVBE, { OPI_Gv, OPI_Mv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33C */ { VXInstructionMnemonic::MOVBE, { OPI_Mv, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33D */ { VXInstructionMnemonic::MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33E */ { VXInstructionMnemonic::MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33F */ { VXInstructionMnemonic::MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 340 */ { VXInstructionMnemonic::MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 341 */ { VXInstructionMnemonic::MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 342 */ { VXInstructionMnemonic::MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 343 */ { VXInstructionMnemonic::MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 344 */ { VXInstructionMnemonic::MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 345 */ { VXInstructionMnemonic::MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 346 */ { VXInstructionMnemonic::MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 347 */ { VXInstructionMnemonic::MOVDQ2Q, { OPI_P, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 348 */ { VXInstructionMnemonic::MOVDQA, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 349 */ { VXInstructionMnemonic::MOVDQA, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34A */ { VXInstructionMnemonic::MOVDQU, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34B */ { VXInstructionMnemonic::MOVDQU, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34C */ { VXInstructionMnemonic::MOVHLPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34D */ { VXInstructionMnemonic::MOVHPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34E */ { VXInstructionMnemonic::MOVHPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34F */ { VXInstructionMnemonic::MOVHPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 350 */ { VXInstructionMnemonic::MOVHPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 351 */ { VXInstructionMnemonic::MOVLHPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 352 */ { VXInstructionMnemonic::MOVLPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 353 */ { VXInstructionMnemonic::MOVLPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 354 */ { VXInstructionMnemonic::MOVLPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 355 */ { VXInstructionMnemonic::MOVLPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 356 */ { VXInstructionMnemonic::MOVMSKPD, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 357 */ { VXInstructionMnemonic::MOVMSKPS, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 358 */ { VXInstructionMnemonic::MOVNTDQ, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 359 */ { VXInstructionMnemonic::MOVNTDQA, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35A */ { VXInstructionMnemonic::MOVNTI, { OPI_M, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35B */ { VXInstructionMnemonic::MOVNTPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35C */ { VXInstructionMnemonic::MOVNTPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35D */ { VXInstructionMnemonic::MOVNTQ, { OPI_M, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35E */ { VXInstructionMnemonic::MOVQ, { OPI_P, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35F */ { VXInstructionMnemonic::MOVQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 360 */ { VXInstructionMnemonic::MOVQ, { OPI_Eq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 361 */ { VXInstructionMnemonic::MOVQ, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 362 */ { VXInstructionMnemonic::MOVQ, { OPI_Q, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 363 */ { VXInstructionMnemonic::MOVQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 364 */ { VXInstructionMnemonic::MOVQ, { OPI_V, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 365 */ { VXInstructionMnemonic::MOVQ, { OPI_Eq, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 366 */ { VXInstructionMnemonic::MOVQ2DQ, { OPI_V, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_OPERAND1_WRITE }, - /* 367 */ { VXInstructionMnemonic::MOVSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_OPERAND1_WRITE }, - /* 368 */ { VXInstructionMnemonic::MOVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 369 */ { VXInstructionMnemonic::MOVSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 36A */ { VXInstructionMnemonic::MOVSD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36B */ { VXInstructionMnemonic::MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36C */ { VXInstructionMnemonic::MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36D */ { VXInstructionMnemonic::MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36E */ { VXInstructionMnemonic::MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36F */ { VXInstructionMnemonic::MOVSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 370 */ { VXInstructionMnemonic::MOVSS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 371 */ { VXInstructionMnemonic::MOVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 372 */ { VXInstructionMnemonic::MOVSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 373 */ { VXInstructionMnemonic::MOVSX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 374 */ { VXInstructionMnemonic::MOVSX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 375 */ { VXInstructionMnemonic::MOVSXD, { OPI_Gq, OPI_Ed, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 376 */ { VXInstructionMnemonic::MOVUPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 377 */ { VXInstructionMnemonic::MOVUPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 378 */ { VXInstructionMnemonic::MOVUPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 379 */ { VXInstructionMnemonic::MOVUPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 37A */ { VXInstructionMnemonic::MOVZX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 37B */ { VXInstructionMnemonic::MOVZX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 37C */ { VXInstructionMnemonic::MPSADBW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 37D */ { VXInstructionMnemonic::MUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 37E */ { VXInstructionMnemonic::MUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 37F */ { VXInstructionMnemonic::MULPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 380 */ { VXInstructionMnemonic::MULPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 381 */ { VXInstructionMnemonic::MULSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 382 */ { VXInstructionMnemonic::MULSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 383 */ { VXInstructionMnemonic::MWAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 384 */ { VXInstructionMnemonic::NEG, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 385 */ { VXInstructionMnemonic::NEG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 386 */ { VXInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 387 */ { VXInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 388 */ { VXInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 389 */ { VXInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38A */ { VXInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38B */ { VXInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38C */ { VXInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38D */ { VXInstructionMnemonic::NOT, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 38E */ { VXInstructionMnemonic::NOT, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 38F */ { VXInstructionMnemonic::OR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 390 */ { VXInstructionMnemonic::OR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 391 */ { VXInstructionMnemonic::OR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 392 */ { VXInstructionMnemonic::OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 393 */ { VXInstructionMnemonic::OR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 394 */ { VXInstructionMnemonic::OR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 395 */ { VXInstructionMnemonic::OR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 396 */ { VXInstructionMnemonic::OR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 397 */ { VXInstructionMnemonic::OR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 398 */ { VXInstructionMnemonic::OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 399 */ { VXInstructionMnemonic::ORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 39A */ { VXInstructionMnemonic::ORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 39B */ { VXInstructionMnemonic::OUT, { OPI_DX, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, - /* 39C */ { VXInstructionMnemonic::OUT, { OPI_DX, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 39D */ { VXInstructionMnemonic::OUT, { OPI_Ib, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, - /* 39E */ { VXInstructionMnemonic::OUT, { OPI_Ib, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 39F */ { VXInstructionMnemonic::OUTSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 3A0 */ { VXInstructionMnemonic::OUTSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 3A1 */ { VXInstructionMnemonic::OUTSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 3A2 */ { VXInstructionMnemonic::PABSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A3 */ { VXInstructionMnemonic::PABSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A4 */ { VXInstructionMnemonic::PABSD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A5 */ { VXInstructionMnemonic::PABSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A6 */ { VXInstructionMnemonic::PABSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A7 */ { VXInstructionMnemonic::PABSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A8 */ { VXInstructionMnemonic::PACKSSDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3A9 */ { VXInstructionMnemonic::PACKSSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AA */ { VXInstructionMnemonic::PACKSSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AB */ { VXInstructionMnemonic::PACKSSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AC */ { VXInstructionMnemonic::PACKUSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AD */ { VXInstructionMnemonic::PACKUSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AE */ { VXInstructionMnemonic::PACKUSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AF */ { VXInstructionMnemonic::PADDB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B0 */ { VXInstructionMnemonic::PADDB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B1 */ { VXInstructionMnemonic::PADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B2 */ { VXInstructionMnemonic::PADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B3 */ { VXInstructionMnemonic::PADDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B4 */ { VXInstructionMnemonic::PADDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B5 */ { VXInstructionMnemonic::PADDSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B6 */ { VXInstructionMnemonic::PADDSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B7 */ { VXInstructionMnemonic::PADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B8 */ { VXInstructionMnemonic::PADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B9 */ { VXInstructionMnemonic::PADDUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BA */ { VXInstructionMnemonic::PADDUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BB */ { VXInstructionMnemonic::PADDUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BC */ { VXInstructionMnemonic::PADDUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BD */ { VXInstructionMnemonic::PADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BE */ { VXInstructionMnemonic::PADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BF */ { VXInstructionMnemonic::PALIGNR, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C0 */ { VXInstructionMnemonic::PALIGNR, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C1 */ { VXInstructionMnemonic::PAND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C2 */ { VXInstructionMnemonic::PAND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C3 */ { VXInstructionMnemonic::PANDN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C4 */ { VXInstructionMnemonic::PANDN, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C5 */ { VXInstructionMnemonic::PAVGB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C6 */ { VXInstructionMnemonic::PAVGB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C7 */ { VXInstructionMnemonic::PAVGUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C8 */ { VXInstructionMnemonic::PAVGW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C9 */ { VXInstructionMnemonic::PAVGW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CA */ { VXInstructionMnemonic::PBLENDVB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CB */ { VXInstructionMnemonic::PBLENDW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CC */ { VXInstructionMnemonic::PCLMULQDQ, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CD */ { VXInstructionMnemonic::PCMPEQB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CE */ { VXInstructionMnemonic::PCMPEQB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CF */ { VXInstructionMnemonic::PCMPEQD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D0 */ { VXInstructionMnemonic::PCMPEQD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D1 */ { VXInstructionMnemonic::PCMPEQQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3D2 */ { VXInstructionMnemonic::PCMPEQW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D3 */ { VXInstructionMnemonic::PCMPEQW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D4 */ { VXInstructionMnemonic::PCMPESTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3D5 */ { VXInstructionMnemonic::PCMPESTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3D6 */ { VXInstructionMnemonic::PCMPGTB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D7 */ { VXInstructionMnemonic::PCMPGTB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D8 */ { VXInstructionMnemonic::PCMPGTD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D9 */ { VXInstructionMnemonic::PCMPGTD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3DA */ { VXInstructionMnemonic::PCMPGTQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3DB */ { VXInstructionMnemonic::PCMPGTW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3DC */ { VXInstructionMnemonic::PCMPGTW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3DD */ { VXInstructionMnemonic::PCMPISTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3DE */ { VXInstructionMnemonic::PCMPISTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3DF */ { VXInstructionMnemonic::PEXTRB, { OPI_MbRv, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 3E0 */ { VXInstructionMnemonic::PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E1 */ { VXInstructionMnemonic::PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E2 */ { VXInstructionMnemonic::PEXTRQ, { OPI_Eq, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 3E3 */ { VXInstructionMnemonic::PEXTRW, { OPI_MwRd, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E4 */ { VXInstructionMnemonic::PEXTRW, { OPI_Gd, OPI_N, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E5 */ { VXInstructionMnemonic::PEXTRW, { OPI_Gd, OPI_U, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E6 */ { VXInstructionMnemonic::PF2ID, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E7 */ { VXInstructionMnemonic::PF2IW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E8 */ { VXInstructionMnemonic::PFACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3E9 */ { VXInstructionMnemonic::PFADD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EA */ { VXInstructionMnemonic::PFCMPEQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EB */ { VXInstructionMnemonic::PFCMPGE, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EC */ { VXInstructionMnemonic::PFCMPGT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3ED */ { VXInstructionMnemonic::PFMAX, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EE */ { VXInstructionMnemonic::PFMIN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EF */ { VXInstructionMnemonic::PFMUL, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F0 */ { VXInstructionMnemonic::PFNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F1 */ { VXInstructionMnemonic::PFPNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F2 */ { VXInstructionMnemonic::PFRCP, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F3 */ { VXInstructionMnemonic::PFRCPIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F4 */ { VXInstructionMnemonic::PFRCPIT2, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F5 */ { VXInstructionMnemonic::PFRSQIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F6 */ { VXInstructionMnemonic::PFRSQRT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F7 */ { VXInstructionMnemonic::PFSUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F8 */ { VXInstructionMnemonic::PFSUBR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F9 */ { VXInstructionMnemonic::PHADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FA */ { VXInstructionMnemonic::PHADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FB */ { VXInstructionMnemonic::PHADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FC */ { VXInstructionMnemonic::PHADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FD */ { VXInstructionMnemonic::PHADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FE */ { VXInstructionMnemonic::PHADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FF */ { VXInstructionMnemonic::PHMINPOSUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 400 */ { VXInstructionMnemonic::PHSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 401 */ { VXInstructionMnemonic::PHSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 402 */ { VXInstructionMnemonic::PHSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 403 */ { VXInstructionMnemonic::PHSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 404 */ { VXInstructionMnemonic::PHSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 405 */ { VXInstructionMnemonic::PHSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 406 */ { VXInstructionMnemonic::PI2FD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 407 */ { VXInstructionMnemonic::PI2FW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 408 */ { VXInstructionMnemonic::PINSRB, { OPI_V, OPI_MbRd, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 409 */ { VXInstructionMnemonic::PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 40A */ { VXInstructionMnemonic::PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 40B */ { VXInstructionMnemonic::PINSRQ, { OPI_V, OPI_Eq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 40C */ { VXInstructionMnemonic::PINSRW, { OPI_V, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 40D */ { VXInstructionMnemonic::PINSRW, { OPI_P, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 40E */ { VXInstructionMnemonic::PMADDUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 40F */ { VXInstructionMnemonic::PMADDUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 410 */ { VXInstructionMnemonic::PMADDWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 411 */ { VXInstructionMnemonic::PMADDWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 412 */ { VXInstructionMnemonic::PMAXSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 413 */ { VXInstructionMnemonic::PMAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 414 */ { VXInstructionMnemonic::PMAXSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 415 */ { VXInstructionMnemonic::PMAXSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 416 */ { VXInstructionMnemonic::PMAXUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 417 */ { VXInstructionMnemonic::PMAXUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 418 */ { VXInstructionMnemonic::PMAXUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 419 */ { VXInstructionMnemonic::PMAXUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41A */ { VXInstructionMnemonic::PMINSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41B */ { VXInstructionMnemonic::PMINSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41C */ { VXInstructionMnemonic::PMINSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41D */ { VXInstructionMnemonic::PMINSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41E */ { VXInstructionMnemonic::PMINUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41F */ { VXInstructionMnemonic::PMINUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 420 */ { VXInstructionMnemonic::PMINUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 421 */ { VXInstructionMnemonic::PMINUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 422 */ { VXInstructionMnemonic::PMOVMSKB, { OPI_Gd, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 423 */ { VXInstructionMnemonic::PMOVMSKB, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 424 */ { VXInstructionMnemonic::PMOVSXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 425 */ { VXInstructionMnemonic::PMOVSXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 426 */ { VXInstructionMnemonic::PMOVSXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 427 */ { VXInstructionMnemonic::PMOVSXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 428 */ { VXInstructionMnemonic::PMOVSXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 429 */ { VXInstructionMnemonic::PMOVSXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42A */ { VXInstructionMnemonic::PMOVZXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42B */ { VXInstructionMnemonic::PMOVZXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42C */ { VXInstructionMnemonic::PMOVZXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42D */ { VXInstructionMnemonic::PMOVZXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42E */ { VXInstructionMnemonic::PMOVZXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42F */ { VXInstructionMnemonic::PMOVZXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 430 */ { VXInstructionMnemonic::PMULDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 431 */ { VXInstructionMnemonic::PMULHRSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 432 */ { VXInstructionMnemonic::PMULHRSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 433 */ { VXInstructionMnemonic::PMULHRW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 434 */ { VXInstructionMnemonic::PMULHUW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 435 */ { VXInstructionMnemonic::PMULHUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 436 */ { VXInstructionMnemonic::PMULHW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 437 */ { VXInstructionMnemonic::PMULHW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 438 */ { VXInstructionMnemonic::PMULLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 439 */ { VXInstructionMnemonic::PMULLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43A */ { VXInstructionMnemonic::PMULLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43B */ { VXInstructionMnemonic::PMULUDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43C */ { VXInstructionMnemonic::PMULUDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43D */ { VXInstructionMnemonic::POP, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 43E */ { VXInstructionMnemonic::POP, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 43F */ { VXInstructionMnemonic::POP, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 440 */ { VXInstructionMnemonic::POP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 441 */ { VXInstructionMnemonic::POP, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 442 */ { VXInstructionMnemonic::POP, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 443 */ { VXInstructionMnemonic::POP, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 444 */ { VXInstructionMnemonic::POP, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 445 */ { VXInstructionMnemonic::POP, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 446 */ { VXInstructionMnemonic::POP, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 447 */ { VXInstructionMnemonic::POP, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 448 */ { VXInstructionMnemonic::POP, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 449 */ { VXInstructionMnemonic::POP, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 44A */ { VXInstructionMnemonic::POP, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 44B */ { VXInstructionMnemonic::POPA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 44C */ { VXInstructionMnemonic::POPAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 44D */ { VXInstructionMnemonic::POPCNT, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 44E */ { VXInstructionMnemonic::POPFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 44F */ { VXInstructionMnemonic::POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 450 */ { VXInstructionMnemonic::POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 451 */ { VXInstructionMnemonic::POPFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 452 */ { VXInstructionMnemonic::POR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 453 */ { VXInstructionMnemonic::POR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 454 */ { VXInstructionMnemonic::PREFETCH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 455 */ { VXInstructionMnemonic::PREFETCHNTA, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 456 */ { VXInstructionMnemonic::PREFETCHT0, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 457 */ { VXInstructionMnemonic::PREFETCHT1, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 458 */ { VXInstructionMnemonic::PREFETCHT2, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 459 */ { VXInstructionMnemonic::PSADBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45A */ { VXInstructionMnemonic::PSADBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45B */ { VXInstructionMnemonic::PSHUFB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45C */ { VXInstructionMnemonic::PSHUFB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45D */ { VXInstructionMnemonic::PSHUFD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 45E */ { VXInstructionMnemonic::PSHUFHW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 45F */ { VXInstructionMnemonic::PSHUFLW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 460 */ { VXInstructionMnemonic::PSHUFW, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 461 */ { VXInstructionMnemonic::PSIGNB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 462 */ { VXInstructionMnemonic::PSIGNB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 463 */ { VXInstructionMnemonic::PSIGND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 464 */ { VXInstructionMnemonic::PSIGND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 465 */ { VXInstructionMnemonic::PSIGNW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 466 */ { VXInstructionMnemonic::PSIGNW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 467 */ { VXInstructionMnemonic::PSLLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 468 */ { VXInstructionMnemonic::PSLLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 469 */ { VXInstructionMnemonic::PSLLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46A */ { VXInstructionMnemonic::PSLLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46B */ { VXInstructionMnemonic::PSLLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46C */ { VXInstructionMnemonic::PSLLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46D */ { VXInstructionMnemonic::PSLLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 46E */ { VXInstructionMnemonic::PSLLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46F */ { VXInstructionMnemonic::PSLLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 470 */ { VXInstructionMnemonic::PSLLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 471 */ { VXInstructionMnemonic::PSLLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 472 */ { VXInstructionMnemonic::PSLLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 473 */ { VXInstructionMnemonic::PSLLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 474 */ { VXInstructionMnemonic::PSRAD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 475 */ { VXInstructionMnemonic::PSRAD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 476 */ { VXInstructionMnemonic::PSRAD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 477 */ { VXInstructionMnemonic::PSRAD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 478 */ { VXInstructionMnemonic::PSRAW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 479 */ { VXInstructionMnemonic::PSRAW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 47A */ { VXInstructionMnemonic::PSRAW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47B */ { VXInstructionMnemonic::PSRAW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47C */ { VXInstructionMnemonic::PSRLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47D */ { VXInstructionMnemonic::PSRLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47E */ { VXInstructionMnemonic::PSRLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 47F */ { VXInstructionMnemonic::PSRLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 480 */ { VXInstructionMnemonic::PSRLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 481 */ { VXInstructionMnemonic::PSRLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 482 */ { VXInstructionMnemonic::PSRLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 483 */ { VXInstructionMnemonic::PSRLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 484 */ { VXInstructionMnemonic::PSRLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 485 */ { VXInstructionMnemonic::PSRLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 486 */ { VXInstructionMnemonic::PSRLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 487 */ { VXInstructionMnemonic::PSRLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 488 */ { VXInstructionMnemonic::PSRLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 489 */ { VXInstructionMnemonic::PSUBB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48A */ { VXInstructionMnemonic::PSUBB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48B */ { VXInstructionMnemonic::PSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48C */ { VXInstructionMnemonic::PSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48D */ { VXInstructionMnemonic::PSUBQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48E */ { VXInstructionMnemonic::PSUBQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48F */ { VXInstructionMnemonic::PSUBSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 490 */ { VXInstructionMnemonic::PSUBSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 491 */ { VXInstructionMnemonic::PSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 492 */ { VXInstructionMnemonic::PSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 493 */ { VXInstructionMnemonic::PSUBUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 494 */ { VXInstructionMnemonic::PSUBUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 495 */ { VXInstructionMnemonic::PSUBUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 496 */ { VXInstructionMnemonic::PSUBUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 497 */ { VXInstructionMnemonic::PSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 498 */ { VXInstructionMnemonic::PSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 499 */ { VXInstructionMnemonic::PSWAPD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 49A */ { VXInstructionMnemonic::PTEST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 49B */ { VXInstructionMnemonic::PUNPCKHBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49C */ { VXInstructionMnemonic::PUNPCKHBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49D */ { VXInstructionMnemonic::PUNPCKHDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49E */ { VXInstructionMnemonic::PUNPCKHDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49F */ { VXInstructionMnemonic::PUNPCKHQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A0 */ { VXInstructionMnemonic::PUNPCKHWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A1 */ { VXInstructionMnemonic::PUNPCKHWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A2 */ { VXInstructionMnemonic::PUNPCKLBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A3 */ { VXInstructionMnemonic::PUNPCKLBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A4 */ { VXInstructionMnemonic::PUNPCKLDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A5 */ { VXInstructionMnemonic::PUNPCKLDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A6 */ { VXInstructionMnemonic::PUNPCKLQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A7 */ { VXInstructionMnemonic::PUNPCKLWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A8 */ { VXInstructionMnemonic::PUNPCKLWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A9 */ { VXInstructionMnemonic::PUSH, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AA */ { VXInstructionMnemonic::PUSH, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AB */ { VXInstructionMnemonic::PUSH, { OPI_sIb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 4AC */ { VXInstructionMnemonic::PUSH, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AD */ { VXInstructionMnemonic::PUSH, { OPI_CS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AE */ { VXInstructionMnemonic::PUSH, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4AF */ { VXInstructionMnemonic::PUSH, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B0 */ { VXInstructionMnemonic::PUSH, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B1 */ { VXInstructionMnemonic::PUSH, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B2 */ { VXInstructionMnemonic::PUSH, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B3 */ { VXInstructionMnemonic::PUSH, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B4 */ { VXInstructionMnemonic::PUSH, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B5 */ { VXInstructionMnemonic::PUSH, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4B6 */ { VXInstructionMnemonic::PUSH, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4B7 */ { VXInstructionMnemonic::PUSH, { OPI_sIz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4B8 */ { VXInstructionMnemonic::PUSH, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B9 */ { VXInstructionMnemonic::PUSH, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4BA */ { VXInstructionMnemonic::PUSHA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 4BB */ { VXInstructionMnemonic::PUSHAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 4BC */ { VXInstructionMnemonic::PUSHFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 4BD */ { VXInstructionMnemonic::PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4BE */ { VXInstructionMnemonic::PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4BF */ { VXInstructionMnemonic::PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4C0 */ { VXInstructionMnemonic::PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 4C1 */ { VXInstructionMnemonic::PXOR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C2 */ { VXInstructionMnemonic::PXOR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C3 */ { VXInstructionMnemonic::RCL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C4 */ { VXInstructionMnemonic::RCL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C5 */ { VXInstructionMnemonic::RCL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C6 */ { VXInstructionMnemonic::RCL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C7 */ { VXInstructionMnemonic::RCL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C8 */ { VXInstructionMnemonic::RCL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C9 */ { VXInstructionMnemonic::RCPPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4CA */ { VXInstructionMnemonic::RCPSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4CB */ { VXInstructionMnemonic::RCR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CC */ { VXInstructionMnemonic::RCR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CD */ { VXInstructionMnemonic::RCR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CE */ { VXInstructionMnemonic::RCR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CF */ { VXInstructionMnemonic::RCR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4D0 */ { VXInstructionMnemonic::RCR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4D1 */ { VXInstructionMnemonic::RDMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D2 */ { VXInstructionMnemonic::RDPMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D3 */ { VXInstructionMnemonic::RDRAND, { OPI_R, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4D4 */ { VXInstructionMnemonic::RDTSC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D5 */ { VXInstructionMnemonic::RDTSCP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D6 */ { VXInstructionMnemonic::REP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D7 */ { VXInstructionMnemonic::REPNE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D8 */ { VXInstructionMnemonic::RET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D9 */ { VXInstructionMnemonic::RET, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4DA */ { VXInstructionMnemonic::RETF, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4DB */ { VXInstructionMnemonic::RETF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4DC */ { VXInstructionMnemonic::ROL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4DD */ { VXInstructionMnemonic::ROL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4DE */ { VXInstructionMnemonic::ROL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4DF */ { VXInstructionMnemonic::ROL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E0 */ { VXInstructionMnemonic::ROL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E1 */ { VXInstructionMnemonic::ROL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E2 */ { VXInstructionMnemonic::ROR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E3 */ { VXInstructionMnemonic::ROR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E4 */ { VXInstructionMnemonic::ROR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E5 */ { VXInstructionMnemonic::ROR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E6 */ { VXInstructionMnemonic::ROR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E7 */ { VXInstructionMnemonic::ROR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E8 */ { VXInstructionMnemonic::ROUNDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4E9 */ { VXInstructionMnemonic::ROUNDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EA */ { VXInstructionMnemonic::ROUNDSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EB */ { VXInstructionMnemonic::ROUNDSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EC */ { VXInstructionMnemonic::RSM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4ED */ { VXInstructionMnemonic::RSQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EE */ { VXInstructionMnemonic::RSQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EF */ { VXInstructionMnemonic::SAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4F0 */ { VXInstructionMnemonic::SALC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 4F1 */ { VXInstructionMnemonic::SAR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F2 */ { VXInstructionMnemonic::SAR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F3 */ { VXInstructionMnemonic::SAR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F4 */ { VXInstructionMnemonic::SAR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F5 */ { VXInstructionMnemonic::SAR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F6 */ { VXInstructionMnemonic::SAR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F7 */ { VXInstructionMnemonic::SBB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4F8 */ { VXInstructionMnemonic::SBB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4F9 */ { VXInstructionMnemonic::SBB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 4FA */ { VXInstructionMnemonic::SBB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 4FB */ { VXInstructionMnemonic::SBB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4FC */ { VXInstructionMnemonic::SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 4FD */ { VXInstructionMnemonic::SBB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4FE */ { VXInstructionMnemonic::SBB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4FF */ { VXInstructionMnemonic::SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 500 */ { VXInstructionMnemonic::SBB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 501 */ { VXInstructionMnemonic::SCASB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 502 */ { VXInstructionMnemonic::SCASD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 503 */ { VXInstructionMnemonic::SCASQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 504 */ { VXInstructionMnemonic::SCASW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 505 */ { VXInstructionMnemonic::SETA, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 506 */ { VXInstructionMnemonic::SETAE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 507 */ { VXInstructionMnemonic::SETB, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 508 */ { VXInstructionMnemonic::SETBE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 509 */ { VXInstructionMnemonic::SETE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50A */ { VXInstructionMnemonic::SETG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50B */ { VXInstructionMnemonic::SETGE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50C */ { VXInstructionMnemonic::SETL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50D */ { VXInstructionMnemonic::SETLE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50E */ { VXInstructionMnemonic::SETNE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50F */ { VXInstructionMnemonic::SETNO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 510 */ { VXInstructionMnemonic::SETNP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 511 */ { VXInstructionMnemonic::SETNS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 512 */ { VXInstructionMnemonic::SETO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 513 */ { VXInstructionMnemonic::SETP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 514 */ { VXInstructionMnemonic::SETS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 515 */ { VXInstructionMnemonic::SFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 516 */ { VXInstructionMnemonic::SGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 517 */ { VXInstructionMnemonic::SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 518 */ { VXInstructionMnemonic::SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 519 */ { VXInstructionMnemonic::SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51A */ { VXInstructionMnemonic::SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51B */ { VXInstructionMnemonic::SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51C */ { VXInstructionMnemonic::SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51D */ { VXInstructionMnemonic::SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51E */ { VXInstructionMnemonic::SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51F */ { VXInstructionMnemonic::SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 520 */ { VXInstructionMnemonic::SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 521 */ { VXInstructionMnemonic::SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 522 */ { VXInstructionMnemonic::SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 523 */ { VXInstructionMnemonic::SHLD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 524 */ { VXInstructionMnemonic::SHLD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 525 */ { VXInstructionMnemonic::SHR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 526 */ { VXInstructionMnemonic::SHR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 527 */ { VXInstructionMnemonic::SHR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 528 */ { VXInstructionMnemonic::SHR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 529 */ { VXInstructionMnemonic::SHR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52A */ { VXInstructionMnemonic::SHR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52B */ { VXInstructionMnemonic::SHRD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52C */ { VXInstructionMnemonic::SHRD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52D */ { VXInstructionMnemonic::SHUFPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52E */ { VXInstructionMnemonic::SHUFPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52F */ { VXInstructionMnemonic::SIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 530 */ { VXInstructionMnemonic::SKINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 531 */ { VXInstructionMnemonic::SLDT, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 532 */ { VXInstructionMnemonic::SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 533 */ { VXInstructionMnemonic::SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 534 */ { VXInstructionMnemonic::SQRTPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 535 */ { VXInstructionMnemonic::SQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 536 */ { VXInstructionMnemonic::SQRTSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 537 */ { VXInstructionMnemonic::SQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 538 */ { VXInstructionMnemonic::STC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 539 */ { VXInstructionMnemonic::STD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 53A */ { VXInstructionMnemonic::STGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 53B */ { VXInstructionMnemonic::STI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 53C */ { VXInstructionMnemonic::STMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 53D */ { VXInstructionMnemonic::STOSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 53E */ { VXInstructionMnemonic::STOSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 53F */ { VXInstructionMnemonic::STOSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 540 */ { VXInstructionMnemonic::STOSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 541 */ { VXInstructionMnemonic::STR, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 542 */ { VXInstructionMnemonic::SUB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 543 */ { VXInstructionMnemonic::SUB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 544 */ { VXInstructionMnemonic::SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 545 */ { VXInstructionMnemonic::SUB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 546 */ { VXInstructionMnemonic::SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 547 */ { VXInstructionMnemonic::SUB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 548 */ { VXInstructionMnemonic::SUB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 549 */ { VXInstructionMnemonic::SUB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54A */ { VXInstructionMnemonic::SUB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 54B */ { VXInstructionMnemonic::SUB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54C */ { VXInstructionMnemonic::SUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54D */ { VXInstructionMnemonic::SUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54E */ { VXInstructionMnemonic::SUBSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54F */ { VXInstructionMnemonic::SUBSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 550 */ { VXInstructionMnemonic::SWAPGS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 551 */ { VXInstructionMnemonic::SYSCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 552 */ { VXInstructionMnemonic::SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 553 */ { VXInstructionMnemonic::SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 554 */ { VXInstructionMnemonic::SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 555 */ { VXInstructionMnemonic::SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 556 */ { VXInstructionMnemonic::SYSRET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 557 */ { VXInstructionMnemonic::TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 558 */ { VXInstructionMnemonic::TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 559 */ { VXInstructionMnemonic::TEST, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55A */ { VXInstructionMnemonic::TEST, { OPI_Ev, OPI_Iz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55B */ { VXInstructionMnemonic::TEST, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 55C */ { VXInstructionMnemonic::TEST, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55D */ { VXInstructionMnemonic::TEST, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55E */ { VXInstructionMnemonic::TEST, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, - /* 55F */ { VXInstructionMnemonic::UCOMISD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 560 */ { VXInstructionMnemonic::UCOMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 561 */ { VXInstructionMnemonic::UD2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 562 */ { VXInstructionMnemonic::UNPCKHPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 563 */ { VXInstructionMnemonic::UNPCKHPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 564 */ { VXInstructionMnemonic::UNPCKLPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 565 */ { VXInstructionMnemonic::UNPCKLPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 566 */ { VXInstructionMnemonic::VADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 567 */ { VXInstructionMnemonic::VADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 568 */ { VXInstructionMnemonic::VADDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 569 */ { VXInstructionMnemonic::VADDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56A */ { VXInstructionMnemonic::VADDSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56B */ { VXInstructionMnemonic::VADDSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56C */ { VXInstructionMnemonic::VAESDEC, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56D */ { VXInstructionMnemonic::VAESDECLAST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56E */ { VXInstructionMnemonic::VAESENC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56F */ { VXInstructionMnemonic::VAESENCLAST, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 570 */ { VXInstructionMnemonic::VAESIMC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 571 */ { VXInstructionMnemonic::VAESKEYGENASSIST, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 572 */ { VXInstructionMnemonic::VANDNPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 573 */ { VXInstructionMnemonic::VANDNPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 574 */ { VXInstructionMnemonic::VANDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 575 */ { VXInstructionMnemonic::VANDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 576 */ { VXInstructionMnemonic::VBLENDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 577 */ { VXInstructionMnemonic::VBLENDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 578 */ { VXInstructionMnemonic::VBLENDVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 579 */ { VXInstructionMnemonic::VBLENDVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 57A */ { VXInstructionMnemonic::VBROADCASTSD, { OPI_Vqq, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 57B */ { VXInstructionMnemonic::VBROADCASTSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 57C */ { VXInstructionMnemonic::VCMPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 57D */ { VXInstructionMnemonic::VCMPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 57E */ { VXInstructionMnemonic::VCMPSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 57F */ { VXInstructionMnemonic::VCMPSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 580 */ { VXInstructionMnemonic::VCOMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 581 */ { VXInstructionMnemonic::VCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 582 */ { VXInstructionMnemonic::VCVTDQ2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 583 */ { VXInstructionMnemonic::VCVTDQ2PS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 584 */ { VXInstructionMnemonic::VCVTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 585 */ { VXInstructionMnemonic::VCVTPD2PS, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 586 */ { VXInstructionMnemonic::VCVTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 587 */ { VXInstructionMnemonic::VCVTPS2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 588 */ { VXInstructionMnemonic::VCVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 589 */ { VXInstructionMnemonic::VCVTSD2SS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58A */ { VXInstructionMnemonic::VCVTSI2SD, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58B */ { VXInstructionMnemonic::VCVTSI2SS, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58C */ { VXInstructionMnemonic::VCVTSS2SD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58D */ { VXInstructionMnemonic::VCVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58E */ { VXInstructionMnemonic::VCVTTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 58F */ { VXInstructionMnemonic::VCVTTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 590 */ { VXInstructionMnemonic::VCVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 591 */ { VXInstructionMnemonic::VCVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 592 */ { VXInstructionMnemonic::VDIVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 593 */ { VXInstructionMnemonic::VDIVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 594 */ { VXInstructionMnemonic::VDIVSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 595 */ { VXInstructionMnemonic::VDIVSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 596 */ { VXInstructionMnemonic::VDPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 597 */ { VXInstructionMnemonic::VDPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 598 */ { VXInstructionMnemonic::VERR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 599 */ { VXInstructionMnemonic::VERW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 59A */ { VXInstructionMnemonic::VEXTRACTF128, { OPI_Wdq, OPI_Vqq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 59B */ { VXInstructionMnemonic::VEXTRACTPS, { OPI_MdRy, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 59C */ { VXInstructionMnemonic::VHADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 59D */ { VXInstructionMnemonic::VHADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 59E */ { VXInstructionMnemonic::VHSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 59F */ { VXInstructionMnemonic::VHSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5A0 */ { VXInstructionMnemonic::VINSERTF128, { OPI_Vqq, OPI_Hqq, OPI_Wdq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A1 */ { VXInstructionMnemonic::VINSERTPS, { OPI_Vx, OPI_Hx, OPI_Md, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5A2 */ { VXInstructionMnemonic::VLDDQU, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A3 */ { VXInstructionMnemonic::VMASKMOVDQU, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5A4 */ { VXInstructionMnemonic::VMASKMOVPD, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A5 */ { VXInstructionMnemonic::VMASKMOVPD, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A6 */ { VXInstructionMnemonic::VMASKMOVPS, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A7 */ { VXInstructionMnemonic::VMASKMOVPS, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A8 */ { VXInstructionMnemonic::VMAXPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5A9 */ { VXInstructionMnemonic::VMAXPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5AA */ { VXInstructionMnemonic::VMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5AB */ { VXInstructionMnemonic::VMAXSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5AC */ { VXInstructionMnemonic::VMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5AD */ { VXInstructionMnemonic::VMCLEAR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5AE */ { VXInstructionMnemonic::VMINPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5AF */ { VXInstructionMnemonic::VMINPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5B0 */ { VXInstructionMnemonic::VMINSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5B1 */ { VXInstructionMnemonic::VMINSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5B2 */ { VXInstructionMnemonic::VMLAUNCH, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5B3 */ { VXInstructionMnemonic::VMLOAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5B4 */ { VXInstructionMnemonic::VMMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5B5 */ { VXInstructionMnemonic::VMOVAPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B6 */ { VXInstructionMnemonic::VMOVAPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B7 */ { VXInstructionMnemonic::VMOVAPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B8 */ { VXInstructionMnemonic::VMOVAPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B9 */ { VXInstructionMnemonic::VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BA */ { VXInstructionMnemonic::VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BB */ { VXInstructionMnemonic::VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BC */ { VXInstructionMnemonic::VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BD */ { VXInstructionMnemonic::VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BE */ { VXInstructionMnemonic::VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BF */ { VXInstructionMnemonic::VMOVDQA, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C0 */ { VXInstructionMnemonic::VMOVDQA, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C1 */ { VXInstructionMnemonic::VMOVDQU, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C2 */ { VXInstructionMnemonic::VMOVDQU, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C3 */ { VXInstructionMnemonic::VMOVHLPS, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C4 */ { VXInstructionMnemonic::VMOVHPD, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C5 */ { VXInstructionMnemonic::VMOVHPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C6 */ { VXInstructionMnemonic::VMOVHPS, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C7 */ { VXInstructionMnemonic::VMOVHPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C8 */ { VXInstructionMnemonic::VMOVLHPS, { OPI_Vx, OPI_Hx, OPI_Ux, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C9 */ { VXInstructionMnemonic::VMOVLPD, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CA */ { VXInstructionMnemonic::VMOVLPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CB */ { VXInstructionMnemonic::VMOVLPS, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CC */ { VXInstructionMnemonic::VMOVLPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CD */ { VXInstructionMnemonic::VMOVMSKPD, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5CE */ { VXInstructionMnemonic::VMOVMSKPS, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CF */ { VXInstructionMnemonic::VMOVNTDQ, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D0 */ { VXInstructionMnemonic::VMOVNTDQA, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D1 */ { VXInstructionMnemonic::VMOVNTPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D2 */ { VXInstructionMnemonic::VMOVNTPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D3 */ { VXInstructionMnemonic::VMOVQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D4 */ { VXInstructionMnemonic::VMOVQ, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D5 */ { VXInstructionMnemonic::VMOVQ, { OPI_Vx, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D6 */ { VXInstructionMnemonic::VMOVQ, { OPI_Eq, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D7 */ { VXInstructionMnemonic::VMOVSD, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D8 */ { VXInstructionMnemonic::VMOVSD, { OPI_Mq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D9 */ { VXInstructionMnemonic::VMOVSD, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5DA */ { VXInstructionMnemonic::VMOVSD, { OPI_V, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5DB */ { VXInstructionMnemonic::VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DC */ { VXInstructionMnemonic::VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DD */ { VXInstructionMnemonic::VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DE */ { VXInstructionMnemonic::VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DF */ { VXInstructionMnemonic::VMOVSS, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E0 */ { VXInstructionMnemonic::VMOVSS, { OPI_Md, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E1 */ { VXInstructionMnemonic::VMOVSS, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E2 */ { VXInstructionMnemonic::VMOVSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E3 */ { VXInstructionMnemonic::VMOVUPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E4 */ { VXInstructionMnemonic::VMOVUPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E5 */ { VXInstructionMnemonic::VMOVUPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E6 */ { VXInstructionMnemonic::VMOVUPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E7 */ { VXInstructionMnemonic::VMPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5E8 */ { VXInstructionMnemonic::VMPTRLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5E9 */ { VXInstructionMnemonic::VMPTRST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5EA */ { VXInstructionMnemonic::VMREAD, { OPI_Ey, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 5EB */ { VXInstructionMnemonic::VMRESUME, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5EC */ { VXInstructionMnemonic::VMRUN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5ED */ { VXInstructionMnemonic::VMSAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5EE */ { VXInstructionMnemonic::VMULPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5EF */ { VXInstructionMnemonic::VMULPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5F0 */ { VXInstructionMnemonic::VMULSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5F1 */ { VXInstructionMnemonic::VMULSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5F2 */ { VXInstructionMnemonic::VMWRITE, { OPI_Gy, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 5F3 */ { VXInstructionMnemonic::VMXOFF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5F4 */ { VXInstructionMnemonic::VMXON, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5F5 */ { VXInstructionMnemonic::VORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5F6 */ { VXInstructionMnemonic::VORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 5F7 */ { VXInstructionMnemonic::VPABSB, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5F8 */ { VXInstructionMnemonic::VPABSD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5F9 */ { VXInstructionMnemonic::VPABSW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5FA */ { VXInstructionMnemonic::VPACKSSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FB */ { VXInstructionMnemonic::VPACKSSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FC */ { VXInstructionMnemonic::VPACKUSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FD */ { VXInstructionMnemonic::VPACKUSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FE */ { VXInstructionMnemonic::VPADDB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FF */ { VXInstructionMnemonic::VPADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 600 */ { VXInstructionMnemonic::VPADDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 601 */ { VXInstructionMnemonic::VPADDSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 602 */ { VXInstructionMnemonic::VPADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 603 */ { VXInstructionMnemonic::VPADDUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 604 */ { VXInstructionMnemonic::VPADDUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 605 */ { VXInstructionMnemonic::VPADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 606 */ { VXInstructionMnemonic::VPALIGNR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 607 */ { VXInstructionMnemonic::VPAND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 608 */ { VXInstructionMnemonic::VPANDN, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 609 */ { VXInstructionMnemonic::VPAVGB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60A */ { VXInstructionMnemonic::VPAVGW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60B */ { VXInstructionMnemonic::VPBLENDVB, { OPI_V, OPI_H, OPI_W, OPI_L }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 60C */ { VXInstructionMnemonic::VPBLENDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60D */ { VXInstructionMnemonic::VPCLMULQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60E */ { VXInstructionMnemonic::VPCMPEQB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60F */ { VXInstructionMnemonic::VPCMPEQD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 610 */ { VXInstructionMnemonic::VPCMPEQQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 611 */ { VXInstructionMnemonic::VPCMPEQW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 612 */ { VXInstructionMnemonic::VPCMPESTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 613 */ { VXInstructionMnemonic::VPCMPESTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 614 */ { VXInstructionMnemonic::VPCMPGTB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 615 */ { VXInstructionMnemonic::VPCMPGTD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 616 */ { VXInstructionMnemonic::VPCMPGTQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 617 */ { VXInstructionMnemonic::VPCMPGTW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 618 */ { VXInstructionMnemonic::VPCMPISTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 619 */ { VXInstructionMnemonic::VPCMPISTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 61A */ { VXInstructionMnemonic::VPERM2F128, { OPI_Vqq, OPI_Hqq, OPI_Wqq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61B */ { VXInstructionMnemonic::VPERMILPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61C */ { VXInstructionMnemonic::VPERMILPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61D */ { VXInstructionMnemonic::VPERMILPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61E */ { VXInstructionMnemonic::VPERMILPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61F */ { VXInstructionMnemonic::VPEXTRB, { OPI_MbRv, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 620 */ { VXInstructionMnemonic::VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 621 */ { VXInstructionMnemonic::VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 622 */ { VXInstructionMnemonic::VPEXTRQ, { OPI_Eq, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 623 */ { VXInstructionMnemonic::VPEXTRW, { OPI_Gd, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 624 */ { VXInstructionMnemonic::VPEXTRW, { OPI_MwRd, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 625 */ { VXInstructionMnemonic::VPHADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 626 */ { VXInstructionMnemonic::VPHADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 627 */ { VXInstructionMnemonic::VPHADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 628 */ { VXInstructionMnemonic::VPHMINPOSUW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 629 */ { VXInstructionMnemonic::VPHSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 62A */ { VXInstructionMnemonic::VPHSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 62B */ { VXInstructionMnemonic::VPHSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 62C */ { VXInstructionMnemonic::VPINSRB, { OPI_V, OPI_H, OPI_MbRd, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 62D */ { VXInstructionMnemonic::VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 62E */ { VXInstructionMnemonic::VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 62F */ { VXInstructionMnemonic::VPINSRQ, { OPI_V, OPI_H, OPI_Eq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 630 */ { VXInstructionMnemonic::VPINSRW, { OPI_Vx, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 631 */ { VXInstructionMnemonic::VPMADDUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 632 */ { VXInstructionMnemonic::VPMADDWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 633 */ { VXInstructionMnemonic::VPMAXSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 634 */ { VXInstructionMnemonic::VPMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 635 */ { VXInstructionMnemonic::VPMAXSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 636 */ { VXInstructionMnemonic::VPMAXUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 637 */ { VXInstructionMnemonic::VPMAXUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 638 */ { VXInstructionMnemonic::VPMAXUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 639 */ { VXInstructionMnemonic::VPMINSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63A */ { VXInstructionMnemonic::VPMINSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63B */ { VXInstructionMnemonic::VPMINSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63C */ { VXInstructionMnemonic::VPMINUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63D */ { VXInstructionMnemonic::VPMINUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63E */ { VXInstructionMnemonic::VPMINUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63F */ { VXInstructionMnemonic::VPMOVMSKB, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 640 */ { VXInstructionMnemonic::VPMOVSXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 641 */ { VXInstructionMnemonic::VPMOVSXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 642 */ { VXInstructionMnemonic::VPMOVSXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 643 */ { VXInstructionMnemonic::VPMOVSXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 644 */ { VXInstructionMnemonic::VPMOVSXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 645 */ { VXInstructionMnemonic::VPMOVZXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 646 */ { VXInstructionMnemonic::VPMOVZXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 647 */ { VXInstructionMnemonic::VPMOVZXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 648 */ { VXInstructionMnemonic::VPMOVZXDQ, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 649 */ { VXInstructionMnemonic::VPMOVZXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 64A */ { VXInstructionMnemonic::VPMOVZXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 64B */ { VXInstructionMnemonic::VPMULDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64C */ { VXInstructionMnemonic::VPMULHRSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64D */ { VXInstructionMnemonic::VPMULHUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64E */ { VXInstructionMnemonic::VPMULHW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64F */ { VXInstructionMnemonic::VPMULLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 650 */ { VXInstructionMnemonic::VPMULLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 651 */ { VXInstructionMnemonic::VPOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 652 */ { VXInstructionMnemonic::VPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 653 */ { VXInstructionMnemonic::VPSHUFB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 654 */ { VXInstructionMnemonic::VPSHUFD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 655 */ { VXInstructionMnemonic::VPSHUFHW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 656 */ { VXInstructionMnemonic::VPSHUFLW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 657 */ { VXInstructionMnemonic::VPSIGNB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 658 */ { VXInstructionMnemonic::VPSIGND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 659 */ { VXInstructionMnemonic::VPSIGNW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 65A */ { VXInstructionMnemonic::VPSLLD, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65B */ { VXInstructionMnemonic::VPSLLD, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65C */ { VXInstructionMnemonic::VPSLLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 65D */ { VXInstructionMnemonic::VPSLLQ, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65E */ { VXInstructionMnemonic::VPSLLQ, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65F */ { VXInstructionMnemonic::VPSLLW, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 660 */ { VXInstructionMnemonic::VPSLLW, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 661 */ { VXInstructionMnemonic::VPSRAD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 662 */ { VXInstructionMnemonic::VPSRAD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 663 */ { VXInstructionMnemonic::VPSRAW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 664 */ { VXInstructionMnemonic::VPSRAW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 665 */ { VXInstructionMnemonic::VPSRLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 666 */ { VXInstructionMnemonic::VPSRLD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 667 */ { VXInstructionMnemonic::VPSRLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 668 */ { VXInstructionMnemonic::VPSRLQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 669 */ { VXInstructionMnemonic::VPSRLQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66A */ { VXInstructionMnemonic::VPSRLW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66B */ { VXInstructionMnemonic::VPSRLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66C */ { VXInstructionMnemonic::VPSUBB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66D */ { VXInstructionMnemonic::VPSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66E */ { VXInstructionMnemonic::VPSUBQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66F */ { VXInstructionMnemonic::VPSUBSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 670 */ { VXInstructionMnemonic::VPSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 671 */ { VXInstructionMnemonic::VPSUBUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 672 */ { VXInstructionMnemonic::VPSUBUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 673 */ { VXInstructionMnemonic::VPSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 674 */ { VXInstructionMnemonic::VPTEST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 675 */ { VXInstructionMnemonic::VPUNPCKHBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 676 */ { VXInstructionMnemonic::VPUNPCKHDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 677 */ { VXInstructionMnemonic::VPUNPCKHQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 678 */ { VXInstructionMnemonic::VPUNPCKHWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 679 */ { VXInstructionMnemonic::VPUNPCKLBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67A */ { VXInstructionMnemonic::VPUNPCKLDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67B */ { VXInstructionMnemonic::VPUNPCKLQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67C */ { VXInstructionMnemonic::VPUNPCKLWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67D */ { VXInstructionMnemonic::VPXOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67E */ { VXInstructionMnemonic::VRCPPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 67F */ { VXInstructionMnemonic::VRCPSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 680 */ { VXInstructionMnemonic::VROUNDPD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 681 */ { VXInstructionMnemonic::VROUNDPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 682 */ { VXInstructionMnemonic::VROUNDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 683 */ { VXInstructionMnemonic::VROUNDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 684 */ { VXInstructionMnemonic::VRSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 685 */ { VXInstructionMnemonic::VRSQRTSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 686 */ { VXInstructionMnemonic::VSHUFPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 687 */ { VXInstructionMnemonic::VSHUFPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 688 */ { VXInstructionMnemonic::VSQRTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 689 */ { VXInstructionMnemonic::VSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 68A */ { VXInstructionMnemonic::VSQRTSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 68B */ { VXInstructionMnemonic::VSQRTSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 68C */ { VXInstructionMnemonic::VSTMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 68D */ { VXInstructionMnemonic::VSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 68E */ { VXInstructionMnemonic::VSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 68F */ { VXInstructionMnemonic::VSUBSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 690 */ { VXInstructionMnemonic::VSUBSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 691 */ { VXInstructionMnemonic::VTESTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 692 */ { VXInstructionMnemonic::VTESTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 693 */ { VXInstructionMnemonic::VUCOMISD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 694 */ { VXInstructionMnemonic::VUCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 695 */ { VXInstructionMnemonic::VUNPCKHPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 696 */ { VXInstructionMnemonic::VUNPCKHPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 697 */ { VXInstructionMnemonic::VUNPCKLPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 698 */ { VXInstructionMnemonic::VUNPCKLPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 699 */ { VXInstructionMnemonic::VXORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 69A */ { VXInstructionMnemonic::VXORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 69B */ { VXInstructionMnemonic::VZEROALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69C */ { VXInstructionMnemonic::VZEROUPPER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69D */ { VXInstructionMnemonic::WAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69E */ { VXInstructionMnemonic::WBINVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69F */ { VXInstructionMnemonic::WRMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6A0 */ { VXInstructionMnemonic::XADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, - /* 6A1 */ { VXInstructionMnemonic::XADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, - /* 6A2 */ { VXInstructionMnemonic::XCHG, { OPI_R4v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A3 */ { VXInstructionMnemonic::XCHG, { OPI_R3v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A4 */ { VXInstructionMnemonic::XCHG, { OPI_R5v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A5 */ { VXInstructionMnemonic::XCHG, { OPI_R7v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A6 */ { VXInstructionMnemonic::XCHG, { OPI_R6v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A7 */ { VXInstructionMnemonic::XCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A8 */ { VXInstructionMnemonic::XCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A9 */ { VXInstructionMnemonic::XCHG, { OPI_R0v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6AA */ { VXInstructionMnemonic::XCHG, { OPI_R2v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6AB */ { VXInstructionMnemonic::XCHG, { OPI_R1v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6AC */ { VXInstructionMnemonic::XCRYPTCBC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6AD */ { VXInstructionMnemonic::XCRYPTCFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6AE */ { VXInstructionMnemonic::XCRYPTCTR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6AF */ { VXInstructionMnemonic::XCRYPTECB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6B0 */ { VXInstructionMnemonic::XCRYPTOFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6B1 */ { VXInstructionMnemonic::XGETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6B2 */ { VXInstructionMnemonic::XLATB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 6B3 */ { VXInstructionMnemonic::XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 6B4 */ { VXInstructionMnemonic::XOR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B5 */ { VXInstructionMnemonic::XOR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B6 */ { VXInstructionMnemonic::XOR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B7 */ { VXInstructionMnemonic::XOR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B8 */ { VXInstructionMnemonic::XOR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B9 */ { VXInstructionMnemonic::XOR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BA */ { VXInstructionMnemonic::XOR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 6BB */ { VXInstructionMnemonic::XOR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 6BC */ { VXInstructionMnemonic::XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BD */ { VXInstructionMnemonic::XORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BE */ { VXInstructionMnemonic::XORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BF */ { VXInstructionMnemonic::XRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 6C0 */ { VXInstructionMnemonic::XSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 6C1 */ { VXInstructionMnemonic::XSETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6C2 */ { VXInstructionMnemonic::XSHA1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6C3 */ { VXInstructionMnemonic::XSHA256, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6C4 */ { VXInstructionMnemonic::XSTORE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, -}; - -#undef OPI_NONE -#undef OPI_AL -#undef OPI_AX -#undef OPI_Av -#undef OPI_C -#undef OPI_CL -#undef OPI_CS -#undef OPI_CX -#undef OPI_D -#undef OPI_DL -#undef OPI_DS -#undef OPI_DX -#undef OPI_E -#undef OPI_ES -#undef OPI_Eb -#undef OPI_Ed -#undef OPI_Eq -#undef OPI_Ev -#undef OPI_Ew -#undef OPI_Ey -#undef OPI_Ez -#undef OPI_FS -#undef OPI_Fv -#undef OPI_G -#undef OPI_GS -#undef OPI_Gb -#undef OPI_Gd -#undef OPI_Gq -#undef OPI_Gv -#undef OPI_Gw -#undef OPI_Gy -#undef OPI_Gz -#undef OPI_H -#undef OPI_Hqq -#undef OPI_Hx -#undef OPI_I1 -#undef OPI_Ib -#undef OPI_Iv -#undef OPI_Iw -#undef OPI_Iz -#undef OPI_Jb -#undef OPI_Jv -#undef OPI_Jz -#undef OPI_L -#undef OPI_Lx -#undef OPI_M -#undef OPI_Mb -#undef OPI_MbRd -#undef OPI_MbRv -#undef OPI_Md -#undef OPI_MdRy -#undef OPI_MdU -#undef OPI_Mdq -#undef OPI_Mo -#undef OPI_Mq -#undef OPI_MqU -#undef OPI_Ms -#undef OPI_Mt -#undef OPI_Mv -#undef OPI_Mw -#undef OPI_MwRd -#undef OPI_MwRv -#undef OPI_MwRy -#undef OPI_MwU -#undef OPI_N -#undef OPI_Ob -#undef OPI_Ov -#undef OPI_Ow -#undef OPI_P -#undef OPI_Q -#undef OPI_R -#undef OPI_R0b -#undef OPI_R0v -#undef OPI_R0w -#undef OPI_R0y -#undef OPI_R0z -#undef OPI_R1b -#undef OPI_R1v -#undef OPI_R1w -#undef OPI_R1y -#undef OPI_R1z -#undef OPI_R2b -#undef OPI_R2v -#undef OPI_R2w -#undef OPI_R2y -#undef OPI_R2z -#undef OPI_R3b -#undef OPI_R3v -#undef OPI_R3w -#undef OPI_R3y -#undef OPI_R3z -#undef OPI_R4b -#undef OPI_R4v -#undef OPI_R4w -#undef OPI_R4y -#undef OPI_R4z -#undef OPI_R5b -#undef OPI_R5v -#undef OPI_R5w -#undef OPI_R5y -#undef OPI_R5z -#undef OPI_R6b -#undef OPI_R6v -#undef OPI_R6w -#undef OPI_R6y -#undef OPI_R6z -#undef OPI_R7b -#undef OPI_R7v -#undef OPI_R7w -#undef OPI_R7y -#undef OPI_R7z -#undef OPI_S -#undef OPI_SS -#undef OPI_ST0 -#undef OPI_ST1 -#undef OPI_ST2 -#undef OPI_ST3 -#undef OPI_ST4 -#undef OPI_ST5 -#undef OPI_ST6 -#undef OPI_ST7 -#undef OPI_U -#undef OPI_Ux -#undef OPI_V -#undef OPI_Vdq -#undef OPI_Vqq -#undef OPI_Vsd -#undef OPI_Vx -#undef OPI_W -#undef OPI_Wdq -#undef OPI_Wqq -#undef OPI_Wsd -#undef OPI_Wx -#undef OPI_eAX -#undef OPI_eCX -#undef OPI_eDX -#undef OPI_rAX -#undef OPI_rCX -#undef OPI_rDX -#undef OPI_sIb -#undef OPI_sIz - -const char* instrMnemonicStrings[] = -{ - /* 000 */ "invalid", - /* 001 */ "aaa", - /* 002 */ "aad", - /* 003 */ "aam", - /* 004 */ "aas", - /* 005 */ "adc", - /* 006 */ "add", - /* 007 */ "addpd", - /* 008 */ "addps", - /* 009 */ "addsd", - /* 00A */ "addss", - /* 00B */ "addsubpd", - /* 00C */ "addsubps", - /* 00D */ "aesdec", - /* 00E */ "aesdeclast", - /* 00F */ "aesenc", - /* 010 */ "aesenclast", - /* 011 */ "aesimc", - /* 012 */ "aeskeygenassist", - /* 013 */ "and", - /* 014 */ "andnpd", - /* 015 */ "andnps", - /* 016 */ "andpd", - /* 017 */ "andps", - /* 018 */ "arpl", - /* 019 */ "blendpd", - /* 01A */ "blendps", - /* 01B */ "blendvpd", - /* 01C */ "blendvps", - /* 01D */ "bound", - /* 01E */ "bsf", - /* 01F */ "bsr", - /* 020 */ "bswap", - /* 021 */ "bt", - /* 022 */ "btc", - /* 023 */ "btr", - /* 024 */ "bts", - /* 025 */ "call", - /* 026 */ "cbw", - /* 027 */ "cdq", - /* 028 */ "cdqe", - /* 029 */ "clc", - /* 02A */ "cld", - /* 02B */ "clflush", - /* 02C */ "clgi", - /* 02D */ "cli", - /* 02E */ "clts", - /* 02F */ "cmc", - /* 030 */ "cmova", - /* 031 */ "cmovae", - /* 032 */ "cmovb", - /* 033 */ "cmovbe", - /* 034 */ "cmove", - /* 035 */ "cmovg", - /* 036 */ "cmovge", - /* 037 */ "cmovl", - /* 038 */ "cmovle", - /* 039 */ "cmovne", - /* 03A */ "cmovno", - /* 03B */ "cmovnp", - /* 03C */ "cmovns", - /* 03D */ "cmovo", - /* 03E */ "cmovp", - /* 03F */ "cmovs", - /* 040 */ "cmp", - /* 041 */ "cmppd", - /* 042 */ "cmpps", - /* 043 */ "cmpsb", - /* 044 */ "cmpsd", - /* 045 */ "cmpsq", - /* 046 */ "cmpss", - /* 047 */ "cmpsw", - /* 048 */ "cmpxchg", - /* 049 */ "cmpxchg16b", - /* 04A */ "cmpxchg8b", - /* 04B */ "comisd", - /* 04C */ "comiss", - /* 04D */ "cpuid", - /* 04E */ "cqo", - /* 04F */ "crc32", - /* 050 */ "cvtdq2pd", - /* 051 */ "cvtdq2ps", - /* 052 */ "cvtpd2dq", - /* 053 */ "cvtpd2pi", - /* 054 */ "cvtpd2ps", - /* 055 */ "cvtpi2pd", - /* 056 */ "cvtpi2ps", - /* 057 */ "cvtps2dq", - /* 058 */ "cvtps2pd", - /* 059 */ "cvtps2pi", - /* 05A */ "cvtsd2si", - /* 05B */ "cvtsd2ss", - /* 05C */ "cvtsi2sd", - /* 05D */ "cvtsi2ss", - /* 05E */ "cvtss2sd", - /* 05F */ "cvtss2si", - /* 060 */ "cvttpd2dq", - /* 061 */ "cvttpd2pi", - /* 062 */ "cvttps2dq", - /* 063 */ "cvttps2pi", - /* 064 */ "cvttsd2si", - /* 065 */ "cvttss2si", - /* 066 */ "cwd", - /* 067 */ "cwde", - /* 068 */ "daa", - /* 069 */ "das", - /* 06A */ "dec", - /* 06B */ "div", - /* 06C */ "divpd", - /* 06D */ "divps", - /* 06E */ "divsd", - /* 06F */ "divss", - /* 070 */ "dppd", - /* 071 */ "dpps", - /* 072 */ "emms", - /* 073 */ "enter", - /* 074 */ "extractps", - /* 075 */ "f2xm1", - /* 076 */ "fabs", - /* 077 */ "fadd", - /* 078 */ "faddp", - /* 079 */ "fbld", - /* 07A */ "fbstp", - /* 07B */ "fchs", - /* 07C */ "fclex", - /* 07D */ "fcmovb", - /* 07E */ "fcmovbe", - /* 07F */ "fcmove", - /* 080 */ "fcmovnb", - /* 081 */ "fcmovnbe", - /* 082 */ "fcmovne", - /* 083 */ "fcmovnu", - /* 084 */ "fcmovu", - /* 085 */ "fcom", - /* 086 */ "fcom2", - /* 087 */ "fcomi", - /* 088 */ "fcomip", - /* 089 */ "fcomp", - /* 08A */ "fcomp3", - /* 08B */ "fcomp5", - /* 08C */ "fcompp", - /* 08D */ "fcos", - /* 08E */ "fdecstp", - /* 08F */ "fdiv", - /* 090 */ "fdivp", - /* 091 */ "fdivr", - /* 092 */ "fdivrp", - /* 093 */ "femms", - /* 094 */ "ffree", - /* 095 */ "ffreep", - /* 096 */ "fiadd", - /* 097 */ "ficom", - /* 098 */ "ficomp", - /* 099 */ "fidiv", - /* 09A */ "fidivr", - /* 09B */ "fild", - /* 09C */ "fimul", - /* 09D */ "fincstp", - /* 09E */ "fist", - /* 09F */ "fistp", - /* 0A0 */ "fisttp", - /* 0A1 */ "fisub", - /* 0A2 */ "fisubr", - /* 0A3 */ "fld", - /* 0A4 */ "fld1", - /* 0A5 */ "fldcw", - /* 0A6 */ "fldenv", - /* 0A7 */ "fldl2e", - /* 0A8 */ "fldl2t", - /* 0A9 */ "fldlg2", - /* 0AA */ "fldln2", - /* 0AB */ "fldpi", - /* 0AC */ "fldz", - /* 0AD */ "fmul", - /* 0AE */ "fmulp", - /* 0AF */ "fndisi", - /* 0B0 */ "fneni", - /* 0B1 */ "fninit", - /* 0B2 */ "fnop", - /* 0B3 */ "fnsave", - /* 0B4 */ "fnsetpm", - /* 0B5 */ "fnstcw", - /* 0B6 */ "fnstenv", - /* 0B7 */ "fnstsw", - /* 0B8 */ "fpatan", - /* 0B9 */ "fprem", - /* 0BA */ "fprem1", - /* 0BB */ "fptan", - /* 0BC */ "frndint", - /* 0BD */ "frstor", - /* 0BE */ "frstpm", - /* 0BF */ "fscale", - /* 0C0 */ "fsin", - /* 0C1 */ "fsincos", - /* 0C2 */ "fsqrt", - /* 0C3 */ "fst", - /* 0C4 */ "fstp", - /* 0C5 */ "fstp1", - /* 0C6 */ "fstp8", - /* 0C7 */ "fstp9", - /* 0C8 */ "fsub", - /* 0C9 */ "fsubp", - /* 0CA */ "fsubr", - /* 0CB */ "fsubrp", - /* 0CC */ "ftst", - /* 0CD */ "fucom", - /* 0CE */ "fucomi", - /* 0CF */ "fucomip", - /* 0D0 */ "fucomp", - /* 0D1 */ "fucompp", - /* 0D2 */ "fxam", - /* 0D3 */ "fxch", - /* 0D4 */ "fxch4", - /* 0D5 */ "fxch7", - /* 0D6 */ "fxrstor", - /* 0D7 */ "fxsave", - /* 0D8 */ "fxtract", - /* 0D9 */ "fyl2x", - /* 0DA */ "fyl2xp1", - /* 0DB */ "getsec", - /* 0DC */ "haddpd", - /* 0DD */ "haddps", - /* 0DE */ "hlt", - /* 0DF */ "hsubpd", - /* 0E0 */ "hsubps", - /* 0E1 */ "idiv", - /* 0E2 */ "imul", - /* 0E3 */ "in", - /* 0E4 */ "inc", - /* 0E5 */ "insb", - /* 0E6 */ "insd", - /* 0E7 */ "insertps", - /* 0E8 */ "insw", - /* 0E9 */ "int", - /* 0EA */ "int1", - /* 0EB */ "int3", - /* 0EC */ "into", - /* 0ED */ "invd", - /* 0EE */ "invept", - /* 0EF */ "invlpg", - /* 0F0 */ "invlpga", - /* 0F1 */ "invvpid", - /* 0F2 */ "iretd", - /* 0F3 */ "iretq", - /* 0F4 */ "iretw", - /* 0F5 */ "ja", - /* 0F6 */ "jb", - /* 0F7 */ "jbe", - /* 0F8 */ "jcxz", - /* 0F9 */ "je", - /* 0FA */ "jecxz", - /* 0FB */ "jg", - /* 0FC */ "jge", - /* 0FD */ "jl", - /* 0FE */ "jle", - /* 0FF */ "jmp", - /* 100 */ "jnb", - /* 101 */ "jne", - /* 102 */ "jno", - /* 103 */ "jnp", - /* 104 */ "jns", - /* 105 */ "jo", - /* 106 */ "jp", - /* 107 */ "jrcxz", - /* 108 */ "js", - /* 109 */ "lahf", - /* 10A */ "lar", - /* 10B */ "lddqu", - /* 10C */ "ldmxcsr", - /* 10D */ "lds", - /* 10E */ "lea", - /* 10F */ "leave", - /* 110 */ "les", - /* 111 */ "lfence", - /* 112 */ "lfs", - /* 113 */ "lgdt", - /* 114 */ "lgs", - /* 115 */ "lidt", - /* 116 */ "lldt", - /* 117 */ "lmsw", - /* 118 */ "lock", - /* 119 */ "lodsb", - /* 11A */ "lodsd", - /* 11B */ "lodsq", - /* 11C */ "lodsw", - /* 11D */ "loop", - /* 11E */ "loope", - /* 11F */ "loopne", - /* 120 */ "lsl", - /* 121 */ "lss", - /* 122 */ "ltr", - /* 123 */ "maskmovdqu", - /* 124 */ "maskmovq", - /* 125 */ "maxpd", - /* 126 */ "maxps", - /* 127 */ "maxsd", - /* 128 */ "maxss", - /* 129 */ "mfence", - /* 12A */ "minpd", - /* 12B */ "minps", - /* 12C */ "minsd", - /* 12D */ "minss", - /* 12E */ "monitor", - /* 12F */ "montmul", - /* 130 */ "mov", - /* 131 */ "movapd", - /* 132 */ "movaps", - /* 133 */ "movbe", - /* 134 */ "movd", - /* 135 */ "movddup", - /* 136 */ "movdq2q", - /* 137 */ "movdqa", - /* 138 */ "movdqu", - /* 139 */ "movhlps", - /* 13A */ "movhpd", - /* 13B */ "movhps", - /* 13C */ "movlhps", - /* 13D */ "movlpd", - /* 13E */ "movlps", - /* 13F */ "movmskpd", - /* 140 */ "movmskps", - /* 141 */ "movntdq", - /* 142 */ "movntdqa", - /* 143 */ "movnti", - /* 144 */ "movntpd", - /* 145 */ "movntps", - /* 146 */ "movntq", - /* 147 */ "movq", - /* 148 */ "movq2dq", - /* 149 */ "movsb", - /* 14A */ "movsd", - /* 14B */ "movshdup", - /* 14C */ "movsldup", - /* 14D */ "movsq", - /* 14E */ "movss", - /* 14F */ "movsw", - /* 150 */ "movsx", - /* 151 */ "movsxd", - /* 152 */ "movupd", - /* 153 */ "movups", - /* 154 */ "movzx", - /* 155 */ "mpsadbw", - /* 156 */ "mul", - /* 157 */ "mulpd", - /* 158 */ "mulps", - /* 159 */ "mulsd", - /* 15A */ "mulss", - /* 15B */ "mwait", - /* 15C */ "neg", - /* 15D */ "nop", - /* 15E */ "not", - /* 15F */ "or", - /* 160 */ "orpd", - /* 161 */ "orps", - /* 162 */ "out", - /* 163 */ "outsb", - /* 164 */ "outsd", - /* 165 */ "outsw", - /* 166 */ "pabsb", - /* 167 */ "pabsd", - /* 168 */ "pabsw", - /* 169 */ "packssdw", - /* 16A */ "packsswb", - /* 16B */ "packusdw", - /* 16C */ "packuswb", - /* 16D */ "paddb", - /* 16E */ "paddd", - /* 16F */ "paddq", - /* 170 */ "paddsb", - /* 171 */ "paddsw", - /* 172 */ "paddusb", - /* 173 */ "paddusw", - /* 174 */ "paddw", - /* 175 */ "palignr", - /* 176 */ "pand", - /* 177 */ "pandn", - /* 178 */ "pause", - /* 179 */ "pavgb", - /* 17A */ "pavgusb", - /* 17B */ "pavgw", - /* 17C */ "pblendvb", - /* 17D */ "pblendw", - /* 17E */ "pclmulqdq", - /* 17F */ "pcmpeqb", - /* 180 */ "pcmpeqd", - /* 181 */ "pcmpeqq", - /* 182 */ "pcmpeqw", - /* 183 */ "pcmpestri", - /* 184 */ "pcmpestrm", - /* 185 */ "pcmpgtb", - /* 186 */ "pcmpgtd", - /* 187 */ "pcmpgtq", - /* 188 */ "pcmpgtw", - /* 189 */ "pcmpistri", - /* 18A */ "pcmpistrm", - /* 18B */ "pextrb", - /* 18C */ "pextrd", - /* 18D */ "pextrq", - /* 18E */ "pextrw", - /* 18F */ "pf2id", - /* 190 */ "pf2iw", - /* 191 */ "pfacc", - /* 192 */ "pfadd", - /* 193 */ "pfcmpeq", - /* 194 */ "pfcmpge", - /* 195 */ "pfcmpgt", - /* 196 */ "pfmax", - /* 197 */ "pfmin", - /* 198 */ "pfmul", - /* 199 */ "pfnacc", - /* 19A */ "pfpnacc", - /* 19B */ "pfrcp", - /* 19C */ "pfrcpit1", - /* 19D */ "pfrcpit2", - /* 19E */ "pfrsqit1", - /* 19F */ "pfrsqrt", - /* 1A0 */ "pfsub", - /* 1A1 */ "pfsubr", - /* 1A2 */ "phaddd", - /* 1A3 */ "phaddsw", - /* 1A4 */ "phaddw", - /* 1A5 */ "phminposuw", - /* 1A6 */ "phsubd", - /* 1A7 */ "phsubsw", - /* 1A8 */ "phsubw", - /* 1A9 */ "pi2fd", - /* 1AA */ "pi2fw", - /* 1AB */ "pinsrb", - /* 1AC */ "pinsrd", - /* 1AD */ "pinsrq", - /* 1AE */ "pinsrw", - /* 1AF */ "pmaddubsw", - /* 1B0 */ "pmaddwd", - /* 1B1 */ "pmaxsb", - /* 1B2 */ "pmaxsd", - /* 1B3 */ "pmaxsw", - /* 1B4 */ "pmaxub", - /* 1B5 */ "pmaxud", - /* 1B6 */ "pmaxuw", - /* 1B7 */ "pminsb", - /* 1B8 */ "pminsd", - /* 1B9 */ "pminsw", - /* 1BA */ "pminub", - /* 1BB */ "pminud", - /* 1BC */ "pminuw", - /* 1BD */ "pmovmskb", - /* 1BE */ "pmovsxbd", - /* 1BF */ "pmovsxbq", - /* 1C0 */ "pmovsxbw", - /* 1C1 */ "pmovsxdq", - /* 1C2 */ "pmovsxwd", - /* 1C3 */ "pmovsxwq", - /* 1C4 */ "pmovzxbd", - /* 1C5 */ "pmovzxbq", - /* 1C6 */ "pmovzxbw", - /* 1C7 */ "pmovzxdq", - /* 1C8 */ "pmovzxwd", - /* 1C9 */ "pmovzxwq", - /* 1CA */ "pmuldq", - /* 1CB */ "pmulhrsw", - /* 1CC */ "pmulhrw", - /* 1CD */ "pmulhuw", - /* 1CE */ "pmulhw", - /* 1CF */ "pmulld", - /* 1D0 */ "pmullw", - /* 1D1 */ "pmuludq", - /* 1D2 */ "pop", - /* 1D3 */ "popa", - /* 1D4 */ "popad", - /* 1D5 */ "popcnt", - /* 1D6 */ "popfd", - /* 1D7 */ "popfq", - /* 1D8 */ "popfw", - /* 1D9 */ "por", - /* 1DA */ "prefetch", - /* 1DB */ "prefetchnta", - /* 1DC */ "prefetcht0", - /* 1DD */ "prefetcht1", - /* 1DE */ "prefetcht2", - /* 1DF */ "psadbw", - /* 1E0 */ "pshufb", - /* 1E1 */ "pshufd", - /* 1E2 */ "pshufhw", - /* 1E3 */ "pshuflw", - /* 1E4 */ "pshufw", - /* 1E5 */ "psignb", - /* 1E6 */ "psignd", - /* 1E7 */ "psignw", - /* 1E8 */ "pslld", - /* 1E9 */ "pslldq", - /* 1EA */ "psllq", - /* 1EB */ "psllw", - /* 1EC */ "psrad", - /* 1ED */ "psraw", - /* 1EE */ "psrld", - /* 1EF */ "psrldq", - /* 1F0 */ "psrlq", - /* 1F1 */ "psrlw", - /* 1F2 */ "psubb", - /* 1F3 */ "psubd", - /* 1F4 */ "psubq", - /* 1F5 */ "psubsb", - /* 1F6 */ "psubsw", - /* 1F7 */ "psubusb", - /* 1F8 */ "psubusw", - /* 1F9 */ "psubw", - /* 1FA */ "pswapd", - /* 1FB */ "ptest", - /* 1FC */ "punpckhbw", - /* 1FD */ "punpckhdq", - /* 1FE */ "punpckhqdq", - /* 1FF */ "punpckhwd", - /* 200 */ "punpcklbw", - /* 201 */ "punpckldq", - /* 202 */ "punpcklqdq", - /* 203 */ "punpcklwd", - /* 204 */ "push", - /* 205 */ "pusha", - /* 206 */ "pushad", - /* 207 */ "pushfd", - /* 208 */ "pushfq", - /* 209 */ "pushfw", - /* 20A */ "pxor", - /* 20B */ "rcl", - /* 20C */ "rcpps", - /* 20D */ "rcpss", - /* 20E */ "rcr", - /* 20F */ "rdmsr", - /* 210 */ "rdpmc", - /* 211 */ "rdrand", - /* 212 */ "rdtsc", - /* 213 */ "rdtscp", - /* 214 */ "rep", - /* 215 */ "repne", - /* 216 */ "ret", - /* 217 */ "retf", - /* 218 */ "rol", - /* 219 */ "ror", - /* 21A */ "roundpd", - /* 21B */ "roundps", - /* 21C */ "roundsd", - /* 21D */ "roundss", - /* 21E */ "rsm", - /* 21F */ "rsqrtps", - /* 220 */ "rsqrtss", - /* 221 */ "sahf", - /* 222 */ "salc", - /* 223 */ "sar", - /* 224 */ "sbb", - /* 225 */ "scasb", - /* 226 */ "scasd", - /* 227 */ "scasq", - /* 228 */ "scasw", - /* 229 */ "seta", - /* 22A */ "setae", - /* 22B */ "setb", - /* 22C */ "setbe", - /* 22D */ "sete", - /* 22E */ "setg", - /* 22F */ "setge", - /* 230 */ "setl", - /* 231 */ "setle", - /* 232 */ "setne", - /* 233 */ "setno", - /* 234 */ "setnp", - /* 235 */ "setns", - /* 236 */ "seto", - /* 237 */ "setp", - /* 238 */ "sets", - /* 239 */ "sfence", - /* 23A */ "sgdt", - /* 23B */ "shl", - /* 23C */ "shld", - /* 23D */ "shr", - /* 23E */ "shrd", - /* 23F */ "shufpd", - /* 240 */ "shufps", - /* 241 */ "sidt", - /* 242 */ "skinit", - /* 243 */ "sldt", - /* 244 */ "smsw", - /* 245 */ "sqrtpd", - /* 246 */ "sqrtps", - /* 247 */ "sqrtsd", - /* 248 */ "sqrtss", - /* 249 */ "stc", - /* 24A */ "std", - /* 24B */ "stgi", - /* 24C */ "sti", - /* 24D */ "stmxcsr", - /* 24E */ "stosb", - /* 24F */ "stosd", - /* 250 */ "stosq", - /* 251 */ "stosw", - /* 252 */ "str", - /* 253 */ "sub", - /* 254 */ "subpd", - /* 255 */ "subps", - /* 256 */ "subsd", - /* 257 */ "subss", - /* 258 */ "swapgs", - /* 259 */ "syscall", - /* 25A */ "sysenter", - /* 25B */ "sysexit", - /* 25C */ "sysret", - /* 25D */ "test", - /* 25E */ "ucomisd", - /* 25F */ "ucomiss", - /* 260 */ "ud2", - /* 261 */ "unpckhpd", - /* 262 */ "unpckhps", - /* 263 */ "unpcklpd", - /* 264 */ "unpcklps", - /* 265 */ "vaddpd", - /* 266 */ "vaddps", - /* 267 */ "vaddsd", - /* 268 */ "vaddss", - /* 269 */ "vaddsubpd", - /* 26A */ "vaddsubps", - /* 26B */ "vaesdec", - /* 26C */ "vaesdeclast", - /* 26D */ "vaesenc", - /* 26E */ "vaesenclast", - /* 26F */ "vaesimc", - /* 270 */ "vaeskeygenassist", - /* 271 */ "vandnpd", - /* 272 */ "vandnps", - /* 273 */ "vandpd", - /* 274 */ "vandps", - /* 275 */ "vblendpd", - /* 276 */ "vblendps", - /* 277 */ "vblendvpd", - /* 278 */ "vblendvps", - /* 279 */ "vbroadcastsd", - /* 27A */ "vbroadcastss", - /* 27B */ "vcmppd", - /* 27C */ "vcmpps", - /* 27D */ "vcmpsd", - /* 27E */ "vcmpss", - /* 27F */ "vcomisd", - /* 280 */ "vcomiss", - /* 281 */ "vcvtdq2pd", - /* 282 */ "vcvtdq2ps", - /* 283 */ "vcvtpd2dq", - /* 284 */ "vcvtpd2ps", - /* 285 */ "vcvtps2dq", - /* 286 */ "vcvtps2pd", - /* 287 */ "vcvtsd2si", - /* 288 */ "vcvtsd2ss", - /* 289 */ "vcvtsi2sd", - /* 28A */ "vcvtsi2ss", - /* 28B */ "vcvtss2sd", - /* 28C */ "vcvtss2si", - /* 28D */ "vcvttpd2dq", - /* 28E */ "vcvttps2dq", - /* 28F */ "vcvttsd2si", - /* 290 */ "vcvttss2si", - /* 291 */ "vdivpd", - /* 292 */ "vdivps", - /* 293 */ "vdivsd", - /* 294 */ "vdivss", - /* 295 */ "vdppd", - /* 296 */ "vdpps", - /* 297 */ "verr", - /* 298 */ "verw", - /* 299 */ "vextractf128", - /* 29A */ "vextractps", - /* 29B */ "vhaddpd", - /* 29C */ "vhaddps", - /* 29D */ "vhsubpd", - /* 29E */ "vhsubps", - /* 29F */ "vinsertf128", - /* 2A0 */ "vinsertps", - /* 2A1 */ "vlddqu", - /* 2A2 */ "vmaskmovdqu", - /* 2A3 */ "vmaskmovpd", - /* 2A4 */ "vmaskmovps", - /* 2A5 */ "vmaxpd", - /* 2A6 */ "vmaxps", - /* 2A7 */ "vmaxsd", - /* 2A8 */ "vmaxss", - /* 2A9 */ "vmcall", - /* 2AA */ "vmclear", - /* 2AB */ "vminpd", - /* 2AC */ "vminps", - /* 2AD */ "vminsd", - /* 2AE */ "vminss", - /* 2AF */ "vmlaunch", - /* 2B0 */ "vmload", - /* 2B1 */ "vmmcall", - /* 2B2 */ "vmovapd", - /* 2B3 */ "vmovaps", - /* 2B4 */ "vmovd", - /* 2B5 */ "vmovddup", - /* 2B6 */ "vmovdqa", - /* 2B7 */ "vmovdqu", - /* 2B8 */ "vmovhlps", - /* 2B9 */ "vmovhpd", - /* 2BA */ "vmovhps", - /* 2BB */ "vmovlhps", - /* 2BC */ "vmovlpd", - /* 2BD */ "vmovlps", - /* 2BE */ "vmovmskpd", - /* 2BF */ "vmovmskps", - /* 2C0 */ "vmovntdq", - /* 2C1 */ "vmovntdqa", - /* 2C2 */ "vmovntpd", - /* 2C3 */ "vmovntps", - /* 2C4 */ "vmovq", - /* 2C5 */ "vmovsd", - /* 2C6 */ "vmovshdup", - /* 2C7 */ "vmovsldup", - /* 2C8 */ "vmovss", - /* 2C9 */ "vmovupd", - /* 2CA */ "vmovups", - /* 2CB */ "vmpsadbw", - /* 2CC */ "vmptrld", - /* 2CD */ "vmptrst", - /* 2CE */ "vmread", - /* 2CF */ "vmresume", - /* 2D0 */ "vmrun", - /* 2D1 */ "vmsave", - /* 2D2 */ "vmulpd", - /* 2D3 */ "vmulps", - /* 2D4 */ "vmulsd", - /* 2D5 */ "vmulss", - /* 2D6 */ "vmwrite", - /* 2D7 */ "vmxoff", - /* 2D8 */ "vmxon", - /* 2D9 */ "vorpd", - /* 2DA */ "vorps", - /* 2DB */ "vpabsb", - /* 2DC */ "vpabsd", - /* 2DD */ "vpabsw", - /* 2DE */ "vpackssdw", - /* 2DF */ "vpacksswb", - /* 2E0 */ "vpackusdw", - /* 2E1 */ "vpackuswb", - /* 2E2 */ "vpaddb", - /* 2E3 */ "vpaddd", - /* 2E4 */ "vpaddq", - /* 2E5 */ "vpaddsb", - /* 2E6 */ "vpaddsw", - /* 2E7 */ "vpaddusb", - /* 2E8 */ "vpaddusw", - /* 2E9 */ "vpaddw", - /* 2EA */ "vpalignr", - /* 2EB */ "vpand", - /* 2EC */ "vpandn", - /* 2ED */ "vpavgb", - /* 2EE */ "vpavgw", - /* 2EF */ "vpblendvb", - /* 2F0 */ "vpblendw", - /* 2F1 */ "vpclmulqdq", - /* 2F2 */ "vpcmpeqb", - /* 2F3 */ "vpcmpeqd", - /* 2F4 */ "vpcmpeqq", - /* 2F5 */ "vpcmpeqw", - /* 2F6 */ "vpcmpestri", - /* 2F7 */ "vpcmpestrm", - /* 2F8 */ "vpcmpgtb", - /* 2F9 */ "vpcmpgtd", - /* 2FA */ "vpcmpgtq", - /* 2FB */ "vpcmpgtw", - /* 2FC */ "vpcmpistri", - /* 2FD */ "vpcmpistrm", - /* 2FE */ "vperm2f128", - /* 2FF */ "vpermilpd", - /* 300 */ "vpermilps", - /* 301 */ "vpextrb", - /* 302 */ "vpextrd", - /* 303 */ "vpextrq", - /* 304 */ "vpextrw", - /* 305 */ "vphaddd", - /* 306 */ "vphaddsw", - /* 307 */ "vphaddw", - /* 308 */ "vphminposuw", - /* 309 */ "vphsubd", - /* 30A */ "vphsubsw", - /* 30B */ "vphsubw", - /* 30C */ "vpinsrb", - /* 30D */ "vpinsrd", - /* 30E */ "vpinsrq", - /* 30F */ "vpinsrw", - /* 310 */ "vpmaddubsw", - /* 311 */ "vpmaddwd", - /* 312 */ "vpmaxsb", - /* 313 */ "vpmaxsd", - /* 314 */ "vpmaxsw", - /* 315 */ "vpmaxub", - /* 316 */ "vpmaxud", - /* 317 */ "vpmaxuw", - /* 318 */ "vpminsb", - /* 319 */ "vpminsd", - /* 31A */ "vpminsw", - /* 31B */ "vpminub", - /* 31C */ "vpminud", - /* 31D */ "vpminuw", - /* 31E */ "vpmovmskb", - /* 31F */ "vpmovsxbd", - /* 320 */ "vpmovsxbq", - /* 321 */ "vpmovsxbw", - /* 322 */ "vpmovsxwd", - /* 323 */ "vpmovsxwq", - /* 324 */ "vpmovzxbd", - /* 325 */ "vpmovzxbq", - /* 326 */ "vpmovzxbw", - /* 327 */ "vpmovzxdq", - /* 328 */ "vpmovzxwd", - /* 329 */ "vpmovzxwq", - /* 32A */ "vpmuldq", - /* 32B */ "vpmulhrsw", - /* 32C */ "vpmulhuw", - /* 32D */ "vpmulhw", - /* 32E */ "vpmulld", - /* 32F */ "vpmullw", - /* 330 */ "vpor", - /* 331 */ "vpsadbw", - /* 332 */ "vpshufb", - /* 333 */ "vpshufd", - /* 334 */ "vpshufhw", - /* 335 */ "vpshuflw", - /* 336 */ "vpsignb", - /* 337 */ "vpsignd", - /* 338 */ "vpsignw", - /* 339 */ "vpslld", - /* 33A */ "vpslldq", - /* 33B */ "vpsllq", - /* 33C */ "vpsllw", - /* 33D */ "vpsrad", - /* 33E */ "vpsraw", - /* 33F */ "vpsrld", - /* 340 */ "vpsrldq", - /* 341 */ "vpsrlq", - /* 342 */ "vpsrlw", - /* 343 */ "vpsubb", - /* 344 */ "vpsubd", - /* 345 */ "vpsubq", - /* 346 */ "vpsubsb", - /* 347 */ "vpsubsw", - /* 348 */ "vpsubusb", - /* 349 */ "vpsubusw", - /* 34A */ "vpsubw", - /* 34B */ "vptest", - /* 34C */ "vpunpckhbw", - /* 34D */ "vpunpckhdq", - /* 34E */ "vpunpckhqdq", - /* 34F */ "vpunpckhwd", - /* 350 */ "vpunpcklbw", - /* 351 */ "vpunpckldq", - /* 352 */ "vpunpcklqdq", - /* 353 */ "vpunpcklwd", - /* 354 */ "vpxor", - /* 355 */ "vrcpps", - /* 356 */ "vrcpss", - /* 357 */ "vroundpd", - /* 358 */ "vroundps", - /* 359 */ "vroundsd", - /* 35A */ "vroundss", - /* 35B */ "vrsqrtps", - /* 35C */ "vrsqrtss", - /* 35D */ "vshufpd", - /* 35E */ "vshufps", - /* 35F */ "vsqrtpd", - /* 360 */ "vsqrtps", - /* 361 */ "vsqrtsd", - /* 362 */ "vsqrtss", - /* 363 */ "vstmxcsr", - /* 364 */ "vsubpd", - /* 365 */ "vsubps", - /* 366 */ "vsubsd", - /* 367 */ "vsubss", - /* 368 */ "vtestpd", - /* 369 */ "vtestps", - /* 36A */ "vucomisd", - /* 36B */ "vucomiss", - /* 36C */ "vunpckhpd", - /* 36D */ "vunpckhps", - /* 36E */ "vunpcklpd", - /* 36F */ "vunpcklps", - /* 370 */ "vxorpd", - /* 371 */ "vxorps", - /* 372 */ "vzeroall", - /* 373 */ "vzeroupper", - /* 374 */ "wait", - /* 375 */ "wbinvd", - /* 376 */ "wrmsr", - /* 377 */ "xadd", - /* 378 */ "xchg", - /* 379 */ "xcryptcbc", - /* 37A */ "xcryptcfb", - /* 37B */ "xcryptctr", - /* 37C */ "xcryptecb", - /* 37D */ "xcryptofb", - /* 37E */ "xgetbv", - /* 37F */ "xlatb", - /* 380 */ "xor", - /* 381 */ "xorpd", - /* 382 */ "xorps", - /* 383 */ "xrstor", - /* 384 */ "xsave", - /* 385 */ "xsetbv", - /* 386 */ "xsha1", - /* 387 */ "xsha256", - /* 388 */ "xstore", -}; - -} - -} diff --git a/Bindings/Cpp/VXDisassembler.hpp b/Bindings/Cpp/ZyDisDisassembler.hpp similarity index 90% rename from Bindings/Cpp/VXDisassembler.hpp rename to Bindings/Cpp/ZyDisDisassembler.hpp index c537e68..705e21a 100644 --- a/Bindings/Cpp/VXDisassembler.hpp +++ b/Bindings/Cpp/ZyDisDisassembler.hpp @@ -32,7 +32,7 @@ #pragma once -#include "VXDisassemblerTypes.hpp" -#include "VXInstructionDecoder.hpp" -#include "VXInstructionFormatter.hpp" -#include "VXDisassemblerUtils.hpp" +#include "ZyDisDisassemblerTypes.hpp" +#include "ZyDisInstructionDecoder.hpp" +#include "ZyDisInstructionFormatter.hpp" +#include "ZyDisDisassemblerUtils.hpp" diff --git a/Bindings/Cpp/VXDisassemblerTypes.hpp b/Bindings/Cpp/ZyDisDisassemblerTypes.hpp similarity index 97% rename from Bindings/Cpp/VXDisassemblerTypes.hpp rename to Bindings/Cpp/ZyDisDisassemblerTypes.hpp index 1e0d526..257a4df 100644 --- a/Bindings/Cpp/VXDisassemblerTypes.hpp +++ b/Bindings/Cpp/ZyDisDisassemblerTypes.hpp @@ -32,7 +32,7 @@ #pragma once #include -#include "VXOpcodeTable.hpp" +#include "ZyDisOpcodeTable.hpp" namespace Verteron { @@ -128,7 +128,7 @@ enum InstructionFlags : uint32_t /** * @brief Values that represent a cpu register. */ -enum class VXRegister : uint16_t +enum class ZyDisRegister : uint16_t { NONE, /* 8 bit general purpose registers */ @@ -188,7 +188,7 @@ enum class VXRegister : uint16_t /** * @brief Values that represent the type of a decoded operand. */ -enum class VXOperandType : uint8_t +enum class ZyDisOperandType : uint8_t { /** * @brief The operand is not used. @@ -223,7 +223,7 @@ enum class VXOperandType : uint8_t /** * @brief Values that represent the operand access mode. */ -enum class VXOperandAccessMode : uint8_t +enum class ZyDisOperandAccessMode : uint8_t { NA, /** @@ -243,12 +243,12 @@ enum class VXOperandAccessMode : uint8_t /** * @brief This struct holds information about a decoded operand. */ -struct VXOperandInfo +struct ZyDisOperandInfo { /** * @brief The type of the operand. */ - VXOperandType type; + ZyDisOperandType type; /** * @brief The size of the operand. */ @@ -256,15 +256,15 @@ struct VXOperandInfo /** * @brief The operand access mode. */ - VXOperandAccessMode access_mode; + ZyDisOperandAccessMode access_mode; /** * @brief The base register. */ - VXRegister base; + ZyDisRegister base; /** * @brief The index register. */ - VXRegister index; + ZyDisRegister index; /** * @brief The scale factor. */ @@ -300,7 +300,7 @@ struct VXOperandInfo /** * @brief This struct holds information about a decoded instruction. */ -struct VXInstructionInfo +struct ZyDisInstructionInfo { /** * @brief The instruction flags. @@ -309,7 +309,7 @@ struct VXInstructionInfo /** * @brief The instruction mnemonic. */ - VXInstructionMnemonic mnemonic; + ZyDisInstructionMnemonic mnemonic; /** * @brief The total length of the instruction. */ @@ -337,12 +337,12 @@ struct VXInstructionInfo /** * @brief The decoded operands. */ - VXOperandInfo operand[4]; + ZyDisOperandInfo operand[4]; /** * @brief The segment register. This value will default to @c NONE, if no segment register * prefix is present. */ - VXRegister segment; + ZyDisRegister segment; /** * @brief The rex prefix byte. */ @@ -512,7 +512,7 @@ struct VXInstructionInfo /** * @brief The instruction definition. */ - const VXInstructionDefinition *instrDefinition; + const ZyDisInstructionDefinition *instrDefinition; /** * @brief The instruction address points to the current instruction (relative to the * initial instruction pointer). diff --git a/Bindings/Cpp/VXDisassemblerUtils.cpp b/Bindings/Cpp/ZyDisDisassemblerUtils.cpp similarity index 85% rename from Bindings/Cpp/VXDisassemblerUtils.cpp rename to Bindings/Cpp/ZyDisDisassemblerUtils.cpp index 1dad08f..2c7b61a 100644 --- a/Bindings/Cpp/VXDisassemblerUtils.cpp +++ b/Bindings/Cpp/ZyDisDisassemblerUtils.cpp @@ -29,16 +29,16 @@ * SOFTWARE. **************************************************************************************************/ -#include "VXDisassemblerUtils.hpp" +#include "ZyDisDisassemblerUtils.hpp" #include namespace Verteron { -uint64_t VDECalcAbsoluteTarget(const VXInstructionInfo &info, const VXOperandInfo &operand) +uint64_t VDECalcAbsoluteTarget(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand) { - assert((operand.type == VXOperandType::REL_IMMEDIATE) || - ((operand.type == VXOperandType::MEMORY) && (operand.base == VXRegister::RIP))); + assert((operand.type == ZyDisOperandType::REL_IMMEDIATE) || + ((operand.type == ZyDisOperandType::MEMORY) && (operand.base == ZyDisRegister::RIP))); uint64_t truncMask = 0xFFFFFFFFFFFFFFFFull; if (!(info.flags & IF_DISASSEMBLER_MODE_64)) @@ -46,7 +46,7 @@ uint64_t VDECalcAbsoluteTarget(const VXInstructionInfo &info, const VXOperandInf truncMask >>= (64 - info.operand_mode); } uint16_t size = operand.size; - if ((operand.type == VXOperandType::MEMORY) && (operand.base == VXRegister::RIP)) + if ((operand.type == ZyDisOperandType::MEMORY) && (operand.base == ZyDisRegister::RIP)) { size = operand.offset; } diff --git a/Bindings/Cpp/VXDisassemblerUtils.hpp b/Bindings/Cpp/ZyDisDisassemblerUtils.hpp similarity index 92% rename from Bindings/Cpp/VXDisassemblerUtils.hpp rename to Bindings/Cpp/ZyDisDisassemblerUtils.hpp index 72086d2..6068ade 100644 --- a/Bindings/Cpp/VXDisassemblerUtils.hpp +++ b/Bindings/Cpp/ZyDisDisassemblerUtils.hpp @@ -32,7 +32,7 @@ #pragma once #include -#include "VXDisassemblerTypes.hpp" +#include "ZyDisDisassemblerTypes.hpp" namespace Verteron { @@ -43,6 +43,6 @@ namespace Verteron * @param operand The operand. * @return The absolute target address. */ -uint64_t VDECalcAbsoluteTarget(const VXInstructionInfo &info, const VXOperandInfo &operand); +uint64_t VDECalcAbsoluteTarget(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand); } diff --git a/Bindings/Cpp/VXInstructionDecoder.cpp b/Bindings/Cpp/ZyDisInstructionDecoder.cpp similarity index 69% rename from Bindings/Cpp/VXInstructionDecoder.cpp rename to Bindings/Cpp/ZyDisInstructionDecoder.cpp index 1861388..6672c6c 100644 --- a/Bindings/Cpp/VXInstructionDecoder.cpp +++ b/Bindings/Cpp/ZyDisInstructionDecoder.cpp @@ -29,16 +29,16 @@ * SOFTWARE. **************************************************************************************************/ -#include "VXInstructionDecoder.hpp" +#include "ZyDisInstructionDecoder.hpp" #include namespace Verteron { -bool VXInstructionDecoder::decodeRegisterOperand(VXInstructionInfo &info, VXOperandInfo &operand, - RegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize) const +bool ZyDisInstructionDecoder::decodeRegisterOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, + RegisterClass registerClass, uint8_t registerId, ZyDisDefinedOperandSize operandSize) const { - VXRegister reg = VXRegister::NONE; + ZyDisRegister reg = ZyDisRegister::NONE; uint16_t size = getEffectiveOperandSize(info, operandSize); switch (registerClass) { @@ -46,35 +46,35 @@ bool VXInstructionDecoder::decodeRegisterOperand(VXInstructionInfo &info, VXOper switch (size) { case 64: - reg = static_cast(static_cast(VXRegister::RAX) + registerId); + reg = static_cast(static_cast(ZyDisRegister::RAX) + registerId); break; case 32: - reg = static_cast(static_cast(VXRegister::EAX) + registerId); + reg = static_cast(static_cast(ZyDisRegister::EAX) + registerId); break; case 16: - reg = static_cast(static_cast(VXRegister::AX) + registerId); + reg = static_cast(static_cast(ZyDisRegister::AX) + registerId); break; case 8: // TODO: Only REX? Or VEX too? - if (m_disassemblerMode == VXDisassemblerMode::M64BIT && (info.flags & IF_PREFIX_REX)) + if (m_disassemblerMode == ZyDisDisassemblerMode::M64BIT && (info.flags & IF_PREFIX_REX)) { if (registerId >= 4) { - reg = static_cast( - static_cast(VXRegister::SPL) + (registerId - 4)); + reg = static_cast( + static_cast(ZyDisRegister::SPL) + (registerId - 4)); } else { - reg = static_cast( - static_cast(VXRegister::AL) + registerId); + reg = static_cast( + static_cast(ZyDisRegister::AL) + registerId); } } else { - reg = static_cast(static_cast(VXRegister::AL) + registerId); + reg = static_cast(static_cast(ZyDisRegister::AL) + registerId); } break; case 0: // TODO: Error? - reg = VXRegister::NONE; + reg = ZyDisRegister::NONE; break; default: assert(0); @@ -82,13 +82,13 @@ bool VXInstructionDecoder::decodeRegisterOperand(VXInstructionInfo &info, VXOper break; case RegisterClass::MMX: reg = - static_cast(static_cast(VXRegister::MM0) + (registerId & 0x07)); + static_cast(static_cast(ZyDisRegister::MM0) + (registerId & 0x07)); break; case RegisterClass::CONTROL: - reg = static_cast(static_cast(VXRegister::CR0) + registerId); + reg = static_cast(static_cast(ZyDisRegister::CR0) + registerId); break; case RegisterClass::DEBUG: - reg = static_cast(static_cast(VXRegister::DR0) + registerId); + reg = static_cast(static_cast(ZyDisRegister::DR0) + registerId); break; case RegisterClass::SEGMENT: if ((registerId & 7) > 5) @@ -96,23 +96,23 @@ bool VXInstructionDecoder::decodeRegisterOperand(VXInstructionInfo &info, VXOper info.flags |= IF_ERROR_OPERAND; return false; } - reg = static_cast(static_cast(VXRegister::ES) + (registerId & 0x07)); + reg = static_cast(static_cast(ZyDisRegister::ES) + (registerId & 0x07)); break; case RegisterClass::XMM: - reg = static_cast(registerId + static_cast( - ((size == 256) ? VXRegister::YMM0 : VXRegister::XMM0))); + reg = static_cast(registerId + static_cast( + ((size == 256) ? ZyDisRegister::YMM0 : ZyDisRegister::XMM0))); break; default: assert(0); } - operand.type = VXOperandType::REGISTER; - operand.base = static_cast(reg); + operand.type = ZyDisOperandType::REGISTER; + operand.base = static_cast(reg); operand.size = size; return true; } -bool VXInstructionDecoder::decodeRegisterMemoryOperand(VXInstructionInfo &info, - VXOperandInfo &operand, RegisterClass registerClass, VXDefinedOperandSize operandSize) +bool ZyDisInstructionDecoder::decodeRegisterMemoryOperand(ZyDisInstructionInfo &info, + ZyDisOperandInfo &operand, RegisterClass registerClass, ZyDisDefinedOperandSize operandSize) { if (!decodeModrm(info)) { @@ -127,24 +127,24 @@ bool VXInstructionDecoder::decodeRegisterMemoryOperand(VXInstructionInfo &info, } // Decode memory operand uint8_t offset = 0; - operand.type = VXOperandType::MEMORY; + operand.type = ZyDisOperandType::MEMORY; operand.size = getEffectiveOperandSize(info, operandSize); switch (info.address_mode) { case 16: { - static const VXRegister bases[] = { - VXRegister::BX, VXRegister::BX, VXRegister::BP, VXRegister::BP, - VXRegister::SI, VXRegister::DI, VXRegister::BP, VXRegister::BX }; - static const VXRegister indices[] = { - VXRegister::SI, VXRegister::DI, VXRegister::SI, VXRegister::DI, - VXRegister::NONE, VXRegister::NONE, VXRegister::NONE, VXRegister::NONE }; - operand.base = static_cast(bases[info.modrm_rm_ext & 0x07]); - operand.index = static_cast(indices[info.modrm_rm_ext & 0x07]); + static const ZyDisRegister bases[] = { + ZyDisRegister::BX, ZyDisRegister::BX, ZyDisRegister::BP, ZyDisRegister::BP, + ZyDisRegister::SI, ZyDisRegister::DI, ZyDisRegister::BP, ZyDisRegister::BX }; + static const ZyDisRegister indices[] = { + ZyDisRegister::SI, ZyDisRegister::DI, ZyDisRegister::SI, ZyDisRegister::DI, + ZyDisRegister::NONE, ZyDisRegister::NONE, ZyDisRegister::NONE, ZyDisRegister::NONE }; + operand.base = static_cast(bases[info.modrm_rm_ext & 0x07]); + operand.index = static_cast(indices[info.modrm_rm_ext & 0x07]); operand.scale = 0; if (info.modrm_mod == 0 && info.modrm_rm_ext == 6) { offset = 16; - operand.base = VXRegister::NONE; + operand.base = ZyDisRegister::NONE; } else if (info.modrm_mod == 1) { offset = 8; } else if (info.modrm_mod == 2) { @@ -154,13 +154,13 @@ bool VXInstructionDecoder::decodeRegisterMemoryOperand(VXInstructionInfo &info, break; case 32: operand.base = - static_cast(static_cast(VXRegister::EAX) + info.modrm_rm_ext); + static_cast(static_cast(ZyDisRegister::EAX) + info.modrm_rm_ext); switch (info.modrm_mod) { case 0: if (info.modrm_rm_ext == 5) { - operand.base = VXRegister::NONE; + operand.base = ZyDisRegister::NONE; offset = 32; } break; @@ -180,22 +180,22 @@ bool VXInstructionDecoder::decodeRegisterMemoryOperand(VXInstructionInfo &info, return false; } operand.base = - static_cast(static_cast(VXRegister::EAX) + + static_cast(static_cast(ZyDisRegister::EAX) + info.sib_base_ext); operand.index = - static_cast(static_cast(VXRegister::EAX) + + static_cast(static_cast(ZyDisRegister::EAX) + info.sib_index_ext); operand.scale = (1 << info.sib_scale) & ~1; - if (operand.index == VXRegister::ESP) + if (operand.index == ZyDisRegister::ESP) { - operand.index = VXRegister::NONE; + operand.index = ZyDisRegister::NONE; operand.scale = 0; } - if (operand.base == VXRegister::EBP) + if (operand.base == ZyDisRegister::EBP) { if (info.modrm_mod == 0) { - operand.base = VXRegister::NONE; + operand.base = ZyDisRegister::NONE; } if (info.modrm_mod == 1) { @@ -207,20 +207,20 @@ bool VXInstructionDecoder::decodeRegisterMemoryOperand(VXInstructionInfo &info, } } else { - operand.index = VXRegister::NONE; + operand.index = ZyDisRegister::NONE; operand.scale = 0; } break; case 64: operand.base = - static_cast(static_cast(VXRegister::RAX) + info.modrm_rm_ext); + static_cast(static_cast(ZyDisRegister::RAX) + info.modrm_rm_ext); switch (info.modrm_mod) { case 0: if ((info.modrm_rm_ext & 0x07) == 5) { info.flags |= IF_RELATIVE; - operand.base = VXRegister::RIP; + operand.base = ZyDisRegister::RIP; offset = 32; } break; @@ -240,24 +240,24 @@ bool VXInstructionDecoder::decodeRegisterMemoryOperand(VXInstructionInfo &info, return false; } operand.base = - static_cast(static_cast(VXRegister::RAX) + + static_cast(static_cast(ZyDisRegister::RAX) + info.sib_base_ext); operand.index = - static_cast(static_cast(VXRegister::RAX) + + static_cast(static_cast(ZyDisRegister::RAX) + info.sib_index_ext); - if (operand.index == VXRegister::RSP) + if (operand.index == ZyDisRegister::RSP) { - operand.index = VXRegister::NONE; + operand.index = ZyDisRegister::NONE; operand.scale = 0; } else { operand.scale = (1 << info.sib_scale) & ~1; } - if ((operand.base == VXRegister::RBP) || (operand.base == VXRegister::R13)) + if ((operand.base == ZyDisRegister::RBP) || (operand.base == ZyDisRegister::R13)) { if (info.modrm_mod == 0) { - operand.base = VXRegister::NONE; + operand.base = ZyDisRegister::NONE; } if (info.modrm_mod == 1) { @@ -269,7 +269,7 @@ bool VXInstructionDecoder::decodeRegisterMemoryOperand(VXInstructionInfo &info, } } else { - operand.index = VXRegister::NONE; + operand.index = ZyDisRegister::NONE; operand.scale = 0; } break; @@ -287,10 +287,10 @@ bool VXInstructionDecoder::decodeRegisterMemoryOperand(VXInstructionInfo &info, return true; } -bool VXInstructionDecoder::decodeImmediate(VXInstructionInfo &info, VXOperandInfo &operand, - VXDefinedOperandSize operandSize) +bool ZyDisInstructionDecoder::decodeImmediate(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, + ZyDisDefinedOperandSize operandSize) { - operand.type = VXOperandType::IMMEDIATE; + operand.type = ZyDisOperandType::IMMEDIATE; operand.size = getEffectiveOperandSize(info, operandSize); switch (operand.size) { @@ -317,7 +317,7 @@ bool VXInstructionDecoder::decodeImmediate(VXInstructionInfo &info, VXOperandInf return true; } -bool VXInstructionDecoder::decodeDisplacement(VXInstructionInfo &info, VXOperandInfo &operand, +bool ZyDisInstructionDecoder::decodeDisplacement(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, uint8_t size) { switch (size) @@ -349,7 +349,7 @@ bool VXInstructionDecoder::decodeDisplacement(VXInstructionInfo &info, VXOperand return true; } -bool VXInstructionDecoder::decodeModrm(VXInstructionInfo &info) +bool ZyDisInstructionDecoder::decodeModrm(ZyDisInstructionInfo &info) { if (!(info.flags & IF_MODRM)) { @@ -372,7 +372,7 @@ bool VXInstructionDecoder::decodeModrm(VXInstructionInfo &info) return true; } -bool VXInstructionDecoder::decodeSIB(VXInstructionInfo &info) +bool ZyDisInstructionDecoder::decodeSIB(ZyDisInstructionInfo &info) { assert(info.flags & IF_MODRM); assert((info.modrm_rm & 0x7) == 4); @@ -395,7 +395,7 @@ bool VXInstructionDecoder::decodeSIB(VXInstructionInfo &info) return true; } -bool VXInstructionDecoder::decodeVex(VXInstructionInfo &info) +bool ZyDisInstructionDecoder::decodeVex(ZyDisInstructionInfo &info) { if (!(info.flags & IF_PREFIX_VEX)) { @@ -451,32 +451,32 @@ bool VXInstructionDecoder::decodeVex(VXInstructionInfo &info) return true; } -uint16_t VXInstructionDecoder::getEffectiveOperandSize(const VXInstructionInfo &info, - VXDefinedOperandSize operandSize) const +uint16_t ZyDisInstructionDecoder::getEffectiveOperandSize(const ZyDisInstructionInfo &info, + ZyDisDefinedOperandSize operandSize) const { switch (operandSize) { - case VXDefinedOperandSize::NA: + case ZyDisDefinedOperandSize::NA: return 0; - case VXDefinedOperandSize::Z: + case ZyDisDefinedOperandSize::Z: return (info.operand_mode == 16) ? 16 : 32; - case VXDefinedOperandSize::V: + case ZyDisDefinedOperandSize::V: return info.operand_mode; - case VXDefinedOperandSize::Y: + case ZyDisDefinedOperandSize::Y: return (info.operand_mode == 16) ? 32 : info.operand_mode; - case VXDefinedOperandSize::X: + case ZyDisDefinedOperandSize::X: assert(info.vex_op != 0); return (info.eff_vex_l) ? - getEffectiveOperandSize(info, VXDefinedOperandSize::QQ) : - getEffectiveOperandSize(info, VXDefinedOperandSize::DQ); - case VXDefinedOperandSize::RDQ: - return (m_disassemblerMode == VXDisassemblerMode::M64BIT) ? 64 : 32; + getEffectiveOperandSize(info, ZyDisDefinedOperandSize::QQ) : + getEffectiveOperandSize(info, ZyDisDefinedOperandSize::DQ); + case ZyDisDefinedOperandSize::RDQ: + return (m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) ? 64 : 32; default: return Internal::VDEGetSimpleOperandSize(operandSize); } } -bool VXInstructionDecoder::decodeOperands(VXInstructionInfo &info) +bool ZyDisInstructionDecoder::decodeOperands(ZyDisInstructionInfo &info) { assert(info.instrDefinition); // Always try to decode the first operand @@ -488,7 +488,7 @@ bool VXInstructionDecoder::decodeOperands(VXInstructionInfo &info) // Decode other operands on demand for (unsigned int i = 1; i < 4; ++i) { - if (info.operand[i - 1].type != VXOperandType::NONE) + if (info.operand[i - 1].type != ZyDisOperandType::NONE) { if (!decodeOperand(info, info.operand[i], info.instrDefinition->operand[i].type, info.instrDefinition->operand[i].size)) @@ -500,26 +500,26 @@ bool VXInstructionDecoder::decodeOperands(VXInstructionInfo &info) // Update operand access modes for (unsigned int i = 0; i < 4; ++i) { - if (info.operand[i].type != VXOperandType::NONE) + if (info.operand[i].type != ZyDisOperandType::NONE) { - info.operand[i].access_mode = VXOperandAccessMode::READ; + info.operand[i].access_mode = ZyDisOperandAccessMode::READ; if (i == 0) { if (info.instrDefinition->flags & IDF_OPERAND1_WRITE) { - info.operand[0].access_mode = VXOperandAccessMode::WRITE; + info.operand[0].access_mode = ZyDisOperandAccessMode::WRITE; } else if (info.instrDefinition->flags & IDF_OPERAND1_READWRITE) { - info.operand[0].access_mode = VXOperandAccessMode::READWRITE; + info.operand[0].access_mode = ZyDisOperandAccessMode::READWRITE; } } else if (i == 1) { if (info.instrDefinition->flags & IDF_OPERAND2_WRITE) { - info.operand[1].access_mode = VXOperandAccessMode::WRITE; + info.operand[1].access_mode = ZyDisOperandAccessMode::WRITE; } else if (info.instrDefinition->flags & IDF_OPERAND2_READWRITE) { - info.operand[1].access_mode = VXOperandAccessMode::READWRITE; + info.operand[1].access_mode = ZyDisOperandAccessMode::READWRITE; } } } @@ -527,17 +527,17 @@ bool VXInstructionDecoder::decodeOperands(VXInstructionInfo &info) return true; } -bool VXInstructionDecoder::decodeOperand(VXInstructionInfo &info, VXOperandInfo &operand, - VXDefinedOperandType operandType, VXDefinedOperandSize operandSize) +bool ZyDisInstructionDecoder::decodeOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, + ZyDisDefinedOperandType operandType, ZyDisDefinedOperandSize operandSize) { using namespace Internal; - operand.type = VXOperandType::NONE; + operand.type = ZyDisOperandType::NONE; switch (operandType) { - case VXDefinedOperandType::NONE: + case ZyDisDefinedOperandType::NONE: break; - case VXDefinedOperandType::A: - operand.type = VXOperandType::POINTER; + case ZyDisDefinedOperandType::A: + operand.type = ZyDisOperandType::POINTER; if (info.operand_mode == 16) { operand.size = 32; @@ -553,61 +553,61 @@ bool VXInstructionDecoder::decodeOperand(VXInstructionInfo &info, VXOperandInfo return false; } break; - case VXDefinedOperandType::C: + case ZyDisDefinedOperandType::C: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::CONTROL, info.modrm_reg_ext, operandSize); - case VXDefinedOperandType::D: + case ZyDisDefinedOperandType::D: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::DEBUG, info.modrm_reg_ext, operandSize); - case VXDefinedOperandType::F: + case ZyDisDefinedOperandType::F: // TODO: FAR flag - case VXDefinedOperandType::M: + case ZyDisDefinedOperandType::M: // ModR/M byte may refer only to a register if (info.modrm_mod == 3) { info.flags |= IF_ERROR_OPERAND; return false; } - case VXDefinedOperandType::E: + case ZyDisDefinedOperandType::E: return decodeRegisterMemoryOperand(info, operand, RegisterClass::GENERAL_PURPOSE, operandSize); - case VXDefinedOperandType::G: + case ZyDisDefinedOperandType::G: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, info.modrm_reg_ext, operandSize); - case VXDefinedOperandType::H: + case ZyDisDefinedOperandType::H: assert(info.vex_op != 0); return decodeRegisterOperand(info, operand, RegisterClass::XMM, (0xF & ~info.vex_vvvv), operandSize); - case VXDefinedOperandType::sI: + case ZyDisDefinedOperandType::sI: operand.signed_lval = true; - case VXDefinedOperandType::I: + case ZyDisDefinedOperandType::I: return decodeImmediate(info, operand, operandSize); - case VXDefinedOperandType::I1: - operand.type = VXOperandType::CONSTANT; + case ZyDisDefinedOperandType::I1: + operand.type = ZyDisOperandType::CONSTANT; operand.lval.udword = 1; break; - case VXDefinedOperandType::J: + case ZyDisDefinedOperandType::J: if (!decodeImmediate(info, operand, operandSize)) { return false; } - operand.type = VXOperandType::REL_IMMEDIATE; + operand.type = ZyDisOperandType::REL_IMMEDIATE; operand.signed_lval = true; info.flags |= IF_RELATIVE; break; - case VXDefinedOperandType::L: + case ZyDisDefinedOperandType::L: { assert(info.vex_op != 0); uint8_t imm = inputNext(info); @@ -615,42 +615,42 @@ bool VXInstructionDecoder::decodeOperand(VXInstructionInfo &info, VXOperandInfo { return false; } - uint8_t mask = (m_disassemblerMode == VXDisassemblerMode::M64BIT) ? 0xF : 0x7; + uint8_t mask = (m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) ? 0xF : 0x7; return decodeRegisterOperand(info, operand, RegisterClass::XMM, mask & (imm >> 4), operandSize); } - case VXDefinedOperandType::MR: + case ZyDisDefinedOperandType::MR: return decodeRegisterMemoryOperand(info, operand, RegisterClass::GENERAL_PURPOSE, info.modrm_mod == 3 ? VDEGetComplexOperandRegSize(operandSize) : VDEGetComplexOperandMemSize(operandSize)); - case VXDefinedOperandType::MU: + case ZyDisDefinedOperandType::MU: return decodeRegisterMemoryOperand(info, operand, RegisterClass::XMM, info.modrm_mod == 3 ? VDEGetComplexOperandRegSize(operandSize) : VDEGetComplexOperandMemSize(operandSize)); - case VXDefinedOperandType::N: + case ZyDisDefinedOperandType::N: // ModR/M byte may refer only to memory if (info.modrm_mod != 3) { info.flags |= IF_ERROR_OPERAND; return false; } - case VXDefinedOperandType::Q: + case ZyDisDefinedOperandType::Q: return decodeRegisterMemoryOperand(info, operand, RegisterClass::MMX, operandSize); - case VXDefinedOperandType::O: - operand.type = VXOperandType::MEMORY; - operand.base = VXRegister::NONE; - operand.index = VXRegister::NONE; + case ZyDisDefinedOperandType::O: + operand.type = ZyDisOperandType::MEMORY; + operand.base = ZyDisRegister::NONE; + operand.index = ZyDisRegister::NONE; operand.scale = 0; operand.size = getEffectiveOperandSize(info, operandSize); return decodeDisplacement(info, operand, info.address_mode); - case VXDefinedOperandType::P: + case ZyDisDefinedOperandType::P: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::MMX, info.modrm_reg_ext, operandSize); - case VXDefinedOperandType::R: + case ZyDisDefinedOperandType::R: // ModR/M byte may refer only to memory if (info.modrm_mod != 3) { @@ -659,91 +659,91 @@ bool VXInstructionDecoder::decodeOperand(VXInstructionInfo &info, VXOperandInfo } return decodeRegisterMemoryOperand(info, operand, RegisterClass::GENERAL_PURPOSE, operandSize); - case VXDefinedOperandType::S: + case ZyDisDefinedOperandType::S: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::SEGMENT, info.modrm_reg_ext, operandSize); - case VXDefinedOperandType::U: + case ZyDisDefinedOperandType::U: // ModR/M byte may refer only to memory if (info.modrm_mod != 3) { info.flags |= IF_ERROR_OPERAND; return false; } - case VXDefinedOperandType::W: + case ZyDisDefinedOperandType::W: return decodeRegisterMemoryOperand(info, operand, RegisterClass::XMM, operandSize); - case VXDefinedOperandType::V: + case ZyDisDefinedOperandType::V: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::XMM, info.modrm_reg_ext, operandSize); - case VXDefinedOperandType::R0: - case VXDefinedOperandType::R1: - case VXDefinedOperandType::R2: - case VXDefinedOperandType::R3: - case VXDefinedOperandType::R4: - case VXDefinedOperandType::R5: - case VXDefinedOperandType::R6: - case VXDefinedOperandType::R7: + case ZyDisDefinedOperandType::R0: + case ZyDisDefinedOperandType::R1: + case ZyDisDefinedOperandType::R2: + case ZyDisDefinedOperandType::R3: + case ZyDisDefinedOperandType::R4: + case ZyDisDefinedOperandType::R5: + case ZyDisDefinedOperandType::R6: + case ZyDisDefinedOperandType::R7: return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, ((info.eff_rexvex_b << 3) | (static_cast(operandType) - - static_cast(VXDefinedOperandType::R0))), operandSize); - case VXDefinedOperandType::AL: - case VXDefinedOperandType::AX: - case VXDefinedOperandType::EAX: - case VXDefinedOperandType::RAX: + static_cast(ZyDisDefinedOperandType::R0))), operandSize); + case ZyDisDefinedOperandType::AL: + case ZyDisDefinedOperandType::AX: + case ZyDisDefinedOperandType::EAX: + case ZyDisDefinedOperandType::RAX: return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, 0, operandSize); - case VXDefinedOperandType::CL: - case VXDefinedOperandType::CX: - case VXDefinedOperandType::ECX: - case VXDefinedOperandType::RCX: + case ZyDisDefinedOperandType::CL: + case ZyDisDefinedOperandType::CX: + case ZyDisDefinedOperandType::ECX: + case ZyDisDefinedOperandType::RCX: return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, 1, operandSize); - case VXDefinedOperandType::DL: - case VXDefinedOperandType::DX: - case VXDefinedOperandType::EDX: - case VXDefinedOperandType::RDX: + case ZyDisDefinedOperandType::DL: + case ZyDisDefinedOperandType::DX: + case ZyDisDefinedOperandType::EDX: + case ZyDisDefinedOperandType::RDX: return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, 2, operandSize); - case VXDefinedOperandType::ES: - case VXDefinedOperandType::CS: - case VXDefinedOperandType::SS: - case VXDefinedOperandType::DS: - case VXDefinedOperandType::FS: - case VXDefinedOperandType::GS: - if (m_disassemblerMode == VXDisassemblerMode::M64BIT) + case ZyDisDefinedOperandType::ES: + case ZyDisDefinedOperandType::CS: + case ZyDisDefinedOperandType::SS: + case ZyDisDefinedOperandType::DS: + case ZyDisDefinedOperandType::FS: + case ZyDisDefinedOperandType::GS: + if (m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) { - if ((operandType != VXDefinedOperandType::FS) && - (operandType != VXDefinedOperandType::GS)) + if ((operandType != ZyDisDefinedOperandType::FS) && + (operandType != ZyDisDefinedOperandType::GS)) { info.flags |= IF_ERROR_OPERAND; return false; } } - operand.type = VXOperandType::REGISTER; - operand.base = static_cast((static_cast(operandType) - - static_cast(VXDefinedOperandType::ES)) + - static_cast(VXRegister::ES)); + operand.type = ZyDisOperandType::REGISTER; + operand.base = static_cast((static_cast(operandType) - + static_cast(ZyDisDefinedOperandType::ES)) + + static_cast(ZyDisRegister::ES)); operand.size = 16; break; - case VXDefinedOperandType::ST0: - case VXDefinedOperandType::ST1: - case VXDefinedOperandType::ST2: - case VXDefinedOperandType::ST3: - case VXDefinedOperandType::ST4: - case VXDefinedOperandType::ST5: - case VXDefinedOperandType::ST6: - case VXDefinedOperandType::ST7: - operand.type = VXOperandType::REGISTER; - operand.base = static_cast((static_cast(operandType) - - static_cast(VXDefinedOperandType::ST0)) + - static_cast(VXRegister::ST0)); + case ZyDisDefinedOperandType::ST0: + case ZyDisDefinedOperandType::ST1: + case ZyDisDefinedOperandType::ST2: + case ZyDisDefinedOperandType::ST3: + case ZyDisDefinedOperandType::ST4: + case ZyDisDefinedOperandType::ST5: + case ZyDisDefinedOperandType::ST6: + case ZyDisDefinedOperandType::ST7: + operand.type = ZyDisOperandType::REGISTER; + operand.base = static_cast((static_cast(operandType) - + static_cast(ZyDisDefinedOperandType::ST0)) + + static_cast(ZyDisRegister::ST0)); operand.size = 80; break; default: @@ -752,20 +752,20 @@ bool VXInstructionDecoder::decodeOperand(VXInstructionInfo &info, VXOperandInfo return true; } -void VXInstructionDecoder::resolveOperandAndAddressMode(VXInstructionInfo &info) const +void ZyDisInstructionDecoder::resolveOperandAndAddressMode(ZyDisInstructionInfo &info) const { assert(info.instrDefinition); switch (m_disassemblerMode) { - case VXDisassemblerMode::M16BIT: + case ZyDisDisassemblerMode::M16BIT: info.operand_mode = (info.flags & IF_PREFIX_OPERAND_SIZE) ? 32 : 16; info.address_mode = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 32 : 16; break; - case VXDisassemblerMode::M32BIT: + case ZyDisDisassemblerMode::M32BIT: info.operand_mode = (info.flags & IF_PREFIX_OPERAND_SIZE) ? 16 : 32; info.address_mode = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 16 : 32; break; - case VXDisassemblerMode::M64BIT: + case ZyDisDisassemblerMode::M64BIT: if (info.eff_rexvex_w) { info.operand_mode = 64; @@ -783,7 +783,7 @@ void VXInstructionDecoder::resolveOperandAndAddressMode(VXInstructionInfo &info) } } -void VXInstructionDecoder::calculateEffectiveRexVexValues(VXInstructionInfo &info) const +void ZyDisInstructionDecoder::calculateEffectiveRexVexValues(ZyDisInstructionInfo &info) const { assert(info.instrDefinition); uint8_t rex = info.rex; @@ -809,7 +809,7 @@ void VXInstructionDecoder::calculateEffectiveRexVexValues(VXInstructionInfo &inf info.eff_vex_l = info.vex_l && (info.instrDefinition->flags & IDF_ACCEPTS_VEXL); } -bool VXInstructionDecoder::decodePrefixes(VXInstructionInfo &info) +bool ZyDisInstructionDecoder::decodePrefixes(ZyDisInstructionInfo &info) { bool done = false; do @@ -831,27 +831,27 @@ bool VXInstructionDecoder::decodePrefixes(VXInstructionInfo &info) break; case 0x2E: info.flags |= IF_PREFIX_SEGMENT; - info.segment = VXRegister::CS; + info.segment = ZyDisRegister::CS; break; case 0x36: info.flags |= IF_PREFIX_SEGMENT; - info.segment = VXRegister::SS; + info.segment = ZyDisRegister::SS; break; case 0x3E: info.flags |= IF_PREFIX_SEGMENT; - info.segment = VXRegister::DS; + info.segment = ZyDisRegister::DS; break; case 0x26: info.flags |= IF_PREFIX_SEGMENT; - info.segment = VXRegister::ES; + info.segment = ZyDisRegister::ES; break; case 0x64: info.flags |= IF_PREFIX_SEGMENT; - info.segment = VXRegister::FS; + info.segment = ZyDisRegister::FS; break; case 0x65: info.flags |= IF_PREFIX_SEGMENT; - info.segment = VXRegister::GS; + info.segment = ZyDisRegister::GS; break; case 0x66: info.flags |= IF_PREFIX_OPERAND_SIZE; @@ -860,7 +860,7 @@ bool VXInstructionDecoder::decodePrefixes(VXInstructionInfo &info) info.flags |= IF_PREFIX_ADDRESS_SIZE; break; default: - if ((m_disassemblerMode == VXDisassemblerMode::M64BIT) && + if ((m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) && (inputCurrent() & 0xF0) == 0x40) { info.flags |= IF_PREFIX_REX; @@ -892,7 +892,7 @@ bool VXInstructionDecoder::decodePrefixes(VXInstructionInfo &info) return true; } -bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) +bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) { using namespace Internal; // Read first opcode byte @@ -904,15 +904,15 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) info.opcode[0] = inputCurrent(); info.opcode_length = 1; // Iterate through opcode tree - VXOpcodeTreeNode node = VDEGetOpcodeTreeChild(VDEGetOpcodeTreeRoot(), inputCurrent()); - VXOpcodeTreeNodeType nodeType; + ZyDisOpcodeTreeNode node = VDEGetOpcodeTreeChild(VDEGetOpcodeTreeRoot(), inputCurrent()); + ZyDisOpcodeTreeNodeType nodeType; do { uint16_t index = 0; nodeType = VDEGetOpcodeNodeType(node); switch (nodeType) { - case VXOpcodeTreeNodeType::INSTRUCTION_DEFINITION: + case ZyDisOpcodeTreeNodeType::INSTRUCTION_DEFINITION: { // Check for invalid instruction if (VDEGetOpcodeNodeValue(node) == 0) @@ -921,9 +921,9 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) return false; } // Get instruction definition - const VXInstructionDefinition *instrDefinition = VDEGetInstructionDefinition(node); + const ZyDisInstructionDefinition *instrDefinition = VDEGetInstructionDefinition(node); // Check for invalid 64 bit instruction - if ((m_disassemblerMode == VXDisassemblerMode::M64BIT) && + if ((m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) && (instrDefinition->flags & IDF_INVALID_64)) { info.flags |= IF_ERROR_INVALID_64; @@ -943,7 +943,7 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) } } return true; - case VXOpcodeTreeNodeType::TABLE: + case ZyDisOpcodeTreeNodeType::TABLE: // Read next opcode byte if (!inputNext(info) && (info.flags & IF_ERROR_MASK)) { @@ -956,7 +956,7 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) // Set child node index for next iteration index = inputCurrent(); break; - case VXOpcodeTreeNodeType::MODRM_MOD: + case ZyDisOpcodeTreeNodeType::MODRM_MOD: // Decode modrm byte if (!decodeModrm(info)) { @@ -964,7 +964,7 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) } index = (info.modrm_mod == 0x3) ? 1 : 0; break; - case VXOpcodeTreeNodeType::MODRM_REG: + case ZyDisOpcodeTreeNodeType::MODRM_REG: // Decode modrm byte if (!decodeModrm(info)) { @@ -972,7 +972,7 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) } index = info.modrm_reg; break; - case VXOpcodeTreeNodeType::MODRM_RM: + case ZyDisOpcodeTreeNodeType::MODRM_RM: // Decode modrm byte if (!decodeModrm(info)) { @@ -980,7 +980,7 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) } index = info.modrm_rm; break; - case VXOpcodeTreeNodeType::MANDATORY: + case ZyDisOpcodeTreeNodeType::MANDATORY: // Check if there are any prefixes present if (info.flags & IF_PREFIX_REP) { @@ -1009,7 +1009,7 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) } } break; - case VXOpcodeTreeNodeType::X87: + case ZyDisOpcodeTreeNodeType::X87: // Decode modrm byte if (!decodeModrm(info)) { @@ -1017,63 +1017,63 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) } index = info.modrm - 0xC0; break; - case VXOpcodeTreeNodeType::ADDRESS_SIZE: + case ZyDisOpcodeTreeNodeType::ADDRESS_SIZE: switch (m_disassemblerMode) { - case VXDisassemblerMode::M16BIT: + case ZyDisDisassemblerMode::M16BIT: index = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 1 : 0; break; - case VXDisassemblerMode::M32BIT: + case ZyDisDisassemblerMode::M32BIT: index = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 0 : 1; break; - case VXDisassemblerMode::M64BIT: + case ZyDisDisassemblerMode::M64BIT: index = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 1 : 2; break; default: assert(0); } break; - case VXOpcodeTreeNodeType::OPERAND_SIZE: + case ZyDisOpcodeTreeNodeType::OPERAND_SIZE: switch (m_disassemblerMode) { - case VXDisassemblerMode::M16BIT: + case ZyDisDisassemblerMode::M16BIT: index = (info.flags & IF_PREFIX_OPERAND_SIZE) ? 1 : 0; break; - case VXDisassemblerMode::M32BIT: + case ZyDisDisassemblerMode::M32BIT: index = (info.flags & IF_PREFIX_OPERAND_SIZE) ? 0 : 1; break; - case VXDisassemblerMode::M64BIT: + case ZyDisDisassemblerMode::M64BIT: index = (info.rex_w) ? 2 : ((info.flags & IF_PREFIX_OPERAND_SIZE) ? 0 : 1); break; default: assert(0); } break; - case VXOpcodeTreeNodeType::MODE: - index = (m_disassemblerMode != VXDisassemblerMode::M64BIT) ? 0 : 1; + case ZyDisOpcodeTreeNodeType::MODE: + index = (m_disassemblerMode != ZyDisDisassemblerMode::M64BIT) ? 0 : 1; break; - case VXOpcodeTreeNodeType::VENDOR: + case ZyDisOpcodeTreeNodeType::VENDOR: switch (m_preferredVendor) { - case VXInstructionSetVendor::ANY: + case ZyDisInstructionSetVendor::ANY: index = (VDEGetOpcodeTreeChild(node, 0) != 0) ? 0 : 1; break; - case VXInstructionSetVendor::INTEL: + case ZyDisInstructionSetVendor::INTEL: index = 1; break; - case VXInstructionSetVendor::AMD: + case ZyDisInstructionSetVendor::AMD: index = 0; break; default: assert(0); } break; - case VXOpcodeTreeNodeType::AMD3DNOW: + case ZyDisOpcodeTreeNodeType::AMD3DNOW: { // As all 3dnow instructions got the same operands and flag definitions, we just // decode a random instruction and determine the specific opcode later. assert(VDEGetOpcodeTreeChild(node, 0x0C) != 0); - const VXInstructionDefinition *instrDefinition = + const ZyDisInstructionDefinition *instrDefinition = VDEGetInstructionDefinition(VDEGetOpcodeTreeChild(node, 0x0C)); // Update instruction info info.instrDefinition = instrDefinition; @@ -1097,7 +1097,7 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) instrDefinition = VDEGetInstructionDefinition(VDEGetOpcodeTreeChild(node, info.opcode[2])); if (!instrDefinition || - (instrDefinition->mnemonic == VXInstructionMnemonic::INVALID)) + (instrDefinition->mnemonic == ZyDisInstructionMnemonic::INVALID)) { info.flags |= IF_ERROR_INVALID; return false; @@ -1107,36 +1107,36 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) // Update operand access modes for (unsigned int i = 0; i < 4; ++i) { - if (info.operand[i].type != VXOperandType::NONE) + if (info.operand[i].type != ZyDisOperandType::NONE) { - info.operand[i - 1].access_mode = VXOperandAccessMode::READ; + info.operand[i - 1].access_mode = ZyDisOperandAccessMode::READ; } } - if (info.operand[0].type != VXOperandType::NONE) + if (info.operand[0].type != ZyDisOperandType::NONE) { if (info.instrDefinition->flags & IDF_OPERAND1_WRITE) { - info.operand[0].access_mode = VXOperandAccessMode::WRITE; + info.operand[0].access_mode = ZyDisOperandAccessMode::WRITE; } else if (info.instrDefinition->flags & IDF_OPERAND1_READWRITE) { - info.operand[0].access_mode = VXOperandAccessMode::READWRITE; + info.operand[0].access_mode = ZyDisOperandAccessMode::READWRITE; } } - if (info.operand[1].type != VXOperandType::NONE) + if (info.operand[1].type != ZyDisOperandType::NONE) { if (info.instrDefinition->flags & IDF_OPERAND2_WRITE) { - info.operand[1].access_mode = VXOperandAccessMode::WRITE; + info.operand[1].access_mode = ZyDisOperandAccessMode::WRITE; } else if (info.instrDefinition->flags & IDF_OPERAND2_READWRITE) { - info.operand[1].access_mode = VXOperandAccessMode::READWRITE; + info.operand[1].access_mode = ZyDisOperandAccessMode::READWRITE; } } // Terminate loop return true; } - case VXOpcodeTreeNodeType::VEX: - if ((m_disassemblerMode == VXDisassemblerMode::M64BIT) || + case ZyDisOpcodeTreeNodeType::VEX: + if ((m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) || (((inputCurrent() >> 6) & 0x03) == 0x03)) { // Decode vex prefix @@ -1169,11 +1169,11 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) index = 0; } break; - case VXOpcodeTreeNodeType::VEXW: + case ZyDisOpcodeTreeNodeType::VEXW: assert(info.flags & IF_PREFIX_VEX); index = info.vex_w; break; - case VXOpcodeTreeNodeType::VEXL: + case ZyDisOpcodeTreeNodeType::VEXL: assert(info.flags & IF_PREFIX_VEX); index = info.vex_l; break; @@ -1181,21 +1181,21 @@ bool VXInstructionDecoder::decodeOpcode(VXInstructionInfo &info) assert(0); } node = VDEGetOpcodeTreeChild(node, index); - } while (nodeType != VXOpcodeTreeNodeType::INSTRUCTION_DEFINITION); + } while (nodeType != ZyDisOpcodeTreeNodeType::INSTRUCTION_DEFINITION); return false; } -VXInstructionDecoder::VXInstructionDecoder() +ZyDisInstructionDecoder::ZyDisInstructionDecoder() : m_dataSource(nullptr) - , m_disassemblerMode(VXDisassemblerMode::M32BIT) - , m_preferredVendor(VXInstructionSetVendor::ANY) + , m_disassemblerMode(ZyDisDisassemblerMode::M32BIT) + , m_preferredVendor(ZyDisInstructionSetVendor::ANY) , m_instructionPointer(0) { } -VXInstructionDecoder::VXInstructionDecoder(VXBaseDataSource *input, - VXDisassemblerMode disassemblerMode, VXInstructionSetVendor preferredVendor, +ZyDisInstructionDecoder::ZyDisInstructionDecoder(ZyDisBaseDataSource *input, + ZyDisDisassemblerMode disassemblerMode, ZyDisInstructionSetVendor preferredVendor, uint64_t instructionPointer) : m_dataSource(input) , m_disassemblerMode(disassemblerMode) @@ -1205,20 +1205,20 @@ VXInstructionDecoder::VXInstructionDecoder(VXBaseDataSource *input, } -bool VXInstructionDecoder::decodeInstruction(VXInstructionInfo &info) +bool ZyDisInstructionDecoder::decodeInstruction(ZyDisInstructionInfo &info) { // Clear instruction info memset(&info, 0, sizeof(info)); // Set disassembler mode flags switch (m_disassemblerMode) { - case VXDisassemblerMode::M16BIT: + case ZyDisDisassemblerMode::M16BIT: info.flags |= IF_DISASSEMBLER_MODE_16; break; - case VXDisassemblerMode::M32BIT: + case ZyDisDisassemblerMode::M32BIT: info.flags |= IF_DISASSEMBLER_MODE_32; break; - case VXDisassemblerMode::M64BIT: + case ZyDisDisassemblerMode::M64BIT: info.flags |= IF_DISASSEMBLER_MODE_64; break; default: @@ -1232,34 +1232,34 @@ bool VXInstructionDecoder::decodeInstruction(VXInstructionInfo &info) goto DecodeError; } // SWAPGS is only valid in 64 bit mode - if ((info.mnemonic == VXInstructionMnemonic::SWAPGS) && - (m_disassemblerMode != VXDisassemblerMode::M64BIT)) + if ((info.mnemonic == ZyDisInstructionMnemonic::SWAPGS) && + (m_disassemblerMode != ZyDisDisassemblerMode::M64BIT)) { info.flags &= IF_ERROR_INVALID; goto DecodeError; } // Handle aliases - if (info.mnemonic == VXInstructionMnemonic::XCHG) + if (info.mnemonic == ZyDisInstructionMnemonic::XCHG) { - if ((info.operand[0].type == VXOperandType::REGISTER && - info.operand[0].base == VXRegister::AX && - info.operand[1].type == VXOperandType::REGISTER && - info.operand[1].base == VXRegister::AX) || - (info.operand[0].type == VXOperandType::REGISTER && - info.operand[0].base == VXRegister::EAX && - info.operand[1].type == VXOperandType::REGISTER && - info.operand[1].base == VXRegister::EAX)) + if ((info.operand[0].type == ZyDisOperandType::REGISTER && + info.operand[0].base == ZyDisRegister::AX && + info.operand[1].type == ZyDisOperandType::REGISTER && + info.operand[1].base == ZyDisRegister::AX) || + (info.operand[0].type == ZyDisOperandType::REGISTER && + info.operand[0].base == ZyDisRegister::EAX && + info.operand[1].type == ZyDisOperandType::REGISTER && + info.operand[1].base == ZyDisRegister::EAX)) { - info.mnemonic = VXInstructionMnemonic::NOP; - info.operand[0].type = VXOperandType::NONE; - info.operand[1].type = VXOperandType::NONE; - info.operand[0].access_mode = VXOperandAccessMode::NA; - info.operand[1].access_mode = VXOperandAccessMode::NA; + info.mnemonic = ZyDisInstructionMnemonic::NOP; + info.operand[0].type = ZyDisOperandType::NONE; + info.operand[1].type = ZyDisOperandType::NONE; + info.operand[0].access_mode = ZyDisOperandAccessMode::NA; + info.operand[1].access_mode = ZyDisOperandAccessMode::NA; } } - if ((info.mnemonic == VXInstructionMnemonic::NOP) && (info.flags & IF_PREFIX_REP)) + if ((info.mnemonic == ZyDisInstructionMnemonic::NOP) && (info.flags & IF_PREFIX_REP)) { - info.mnemonic = VXInstructionMnemonic::PAUSE; + info.mnemonic = ZyDisInstructionMnemonic::PAUSE; info.flags &= ~IF_PREFIX_REP; } // Increment instruction pointer diff --git a/Bindings/Cpp/VXInstructionDecoder.hpp b/Bindings/Cpp/ZyDisInstructionDecoder.hpp similarity index 75% rename from Bindings/Cpp/VXInstructionDecoder.hpp rename to Bindings/Cpp/ZyDisInstructionDecoder.hpp index 216b4d0..1f45331 100644 --- a/Bindings/Cpp/VXInstructionDecoder.hpp +++ b/Bindings/Cpp/ZyDisInstructionDecoder.hpp @@ -33,7 +33,7 @@ #include #include -#include "VXDisassemblerTypes.hpp" +#include "ZyDisDisassemblerTypes.hpp" namespace Verteron { @@ -43,7 +43,7 @@ namespace Verteron /** * @brief The base class for all data-source implementations. */ -class VXBaseDataSource +class ZyDisBaseDataSource { private: uint8_t m_currentInput; @@ -66,12 +66,12 @@ protected: /** * @brief Default constructor. */ - VXBaseDataSource() { }; + ZyDisBaseDataSource() { }; public: /** * @brief Destructor. */ - virtual ~VXBaseDataSource() { }; + virtual ~ZyDisBaseDataSource() { }; public: /** * @brief Reads the next byte from the data source. This method does NOT increase the @@ -81,7 +81,7 @@ public: * @c flags field of the @c info parameter for error flags. * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ - uint8_t inputPeek(VXInstructionInfo &info); + uint8_t inputPeek(ZyDisInstructionInfo &info); /** * @brief Reads the next byte from the data source. This method increases the current * input position and the @c length field of the @c info parameter. @@ -92,7 +92,7 @@ public: * @c flags field of the @c info parameter for error flags. * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ - uint8_t inputNext(VXInstructionInfo &info); + uint8_t inputNext(ZyDisInstructionInfo &info); /** * @brief Reads the next byte(s) from the data source. This method increases the current * input position and the @c length field of the @c info parameter. @@ -104,7 +104,7 @@ public: * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ template - T inputNext(VXInstructionInfo &info); + T inputNext(ZyDisInstructionInfo &info); /** * @brief Returns the current input byte. The current input byte is set everytime the * @c inputPeek or @c inputNext method is called. @@ -133,7 +133,7 @@ public: virtual bool setPosition(uint64_t position) = 0; }; -inline uint8_t VXBaseDataSource::inputPeek(VXInstructionInfo &info) +inline uint8_t ZyDisBaseDataSource::inputPeek(ZyDisInstructionInfo &info) { if (info.length == 15) { @@ -149,7 +149,7 @@ inline uint8_t VXBaseDataSource::inputPeek(VXInstructionInfo &info) return m_currentInput; } -inline uint8_t VXBaseDataSource::inputNext(VXInstructionInfo &info) +inline uint8_t ZyDisBaseDataSource::inputNext(ZyDisInstructionInfo &info) { if (info.length == 15) { @@ -168,7 +168,7 @@ inline uint8_t VXBaseDataSource::inputNext(VXInstructionInfo &info) } template -inline T VXBaseDataSource::inputNext(VXInstructionInfo &info) +inline T ZyDisBaseDataSource::inputNext(ZyDisInstructionInfo &info) { static_assert(std::is_integral::value, "integral type required"); T result = 0; @@ -184,7 +184,7 @@ inline T VXBaseDataSource::inputNext(VXInstructionInfo &info) return result; } -inline uint8_t VXBaseDataSource::inputCurrent() const +inline uint8_t ZyDisBaseDataSource::inputCurrent() const { return m_currentInput; } @@ -192,9 +192,9 @@ inline uint8_t VXBaseDataSource::inputCurrent() const /////////////////////////////////////////////////////////////////////////////////////////////////// /** - * @brief A memory-buffer based data source for the @c VXInstructionDecoder class. + * @brief A memory-buffer based data source for the @c ZyDisInstructionDecoder class. */ -class VXMemoryDataSource : public VXBaseDataSource +class ZyDisMemoryDataSource : public ZyDisBaseDataSource { private: const void *m_inputBuffer; @@ -219,7 +219,7 @@ public: * @param buffer The input buffer. * @param bufferLen The length of the input buffer. */ - VXMemoryDataSource(const void* buffer, size_t bufferLen) + ZyDisMemoryDataSource(const void* buffer, size_t bufferLen) : m_inputBuffer(buffer) , m_inputBufferLen(bufferLen) , m_inputBufferPos(0) { }; @@ -242,28 +242,28 @@ public: bool setPosition(uint64_t position) override; }; -inline uint8_t VXMemoryDataSource::internalInputPeek() +inline uint8_t ZyDisMemoryDataSource::internalInputPeek() { return *(static_cast(m_inputBuffer) + m_inputBufferPos); } -inline uint8_t VXMemoryDataSource::internalInputNext() +inline uint8_t ZyDisMemoryDataSource::internalInputNext() { ++m_inputBufferPos; return *(static_cast(m_inputBuffer) + m_inputBufferPos - 1); } -inline bool VXMemoryDataSource::isEndOfInput() const +inline bool ZyDisMemoryDataSource::isEndOfInput() const { return (m_inputBufferPos >= m_inputBufferLen); } -inline uint64_t VXMemoryDataSource::getPosition() const +inline uint64_t ZyDisMemoryDataSource::getPosition() const { return m_inputBufferPos; } -inline bool VXMemoryDataSource::setPosition(uint64_t position) +inline bool ZyDisMemoryDataSource::setPosition(uint64_t position) { m_inputBufferPos = position; return isEndOfInput(); @@ -272,9 +272,9 @@ inline bool VXMemoryDataSource::setPosition(uint64_t position) /////////////////////////////////////////////////////////////////////////////////////////////////// /** - * @brief A stream based data source for the @c VXInstructionDecoder class. + * @brief A stream based data source for the @c ZyDisInstructionDecoder class. */ -class VXStreamDataSource : public VXBaseDataSource +class ZyDisStreamDataSource : public ZyDisBaseDataSource { private: std::istream *m_inputStream; @@ -296,7 +296,7 @@ public: * @brief Constructor. * @param stream The input stream. */ - explicit VXStreamDataSource(std::istream *stream) + explicit ZyDisStreamDataSource(std::istream *stream) : m_inputStream(stream) { }; public: /** @@ -317,7 +317,7 @@ public: bool setPosition(uint64_t position) override; }; -inline uint8_t VXStreamDataSource::internalInputPeek() +inline uint8_t ZyDisStreamDataSource::internalInputPeek() { if (!m_inputStream) { @@ -326,7 +326,7 @@ inline uint8_t VXStreamDataSource::internalInputPeek() return static_cast(m_inputStream->peek()); } -inline uint8_t VXStreamDataSource::internalInputNext() +inline uint8_t ZyDisStreamDataSource::internalInputNext() { if (!m_inputStream) { @@ -335,7 +335,7 @@ inline uint8_t VXStreamDataSource::internalInputNext() return static_cast(m_inputStream->get()); } -inline bool VXStreamDataSource::isEndOfInput() const +inline bool ZyDisStreamDataSource::isEndOfInput() const { if (!m_inputStream) { @@ -346,7 +346,7 @@ inline bool VXStreamDataSource::isEndOfInput() const return !m_inputStream->good(); } -inline uint64_t VXStreamDataSource::getPosition() const +inline uint64_t ZyDisStreamDataSource::getPosition() const { if (!m_inputStream) { @@ -355,7 +355,7 @@ inline uint64_t VXStreamDataSource::getPosition() const return m_inputStream->tellg(); } -inline bool VXStreamDataSource::setPosition(uint64_t position) +inline bool ZyDisStreamDataSource::setPosition(uint64_t position) { if (!m_inputStream) { @@ -370,7 +370,7 @@ inline bool VXStreamDataSource::setPosition(uint64_t position) /** * @brief Values that represent a disassembler mode. */ -enum class VXDisassemblerMode : uint8_t +enum class ZyDisDisassemblerMode : uint8_t { M16BIT, M32BIT, @@ -380,7 +380,7 @@ enum class VXDisassemblerMode : uint8_t /** * @brief Values that represent an instruction-set vendor. */ -enum class VXInstructionSetVendor : uint8_t +enum class ZyDisInstructionSetVendor : uint8_t { ANY, INTEL, @@ -388,10 +388,10 @@ enum class VXInstructionSetVendor : uint8_t }; /** - * @brief The @c VXInstructionDecoder class decodes x86/x86-64 assembly instructions from a + * @brief The @c ZyDisInstructionDecoder class decodes x86/x86-64 assembly instructions from a * given data source. */ -class VXInstructionDecoder +class ZyDisInstructionDecoder { private: enum class RegisterClass : uint8_t @@ -404,9 +404,9 @@ private: XMM }; private: - VXBaseDataSource *m_dataSource; - VXDisassemblerMode m_disassemblerMode; - VXInstructionSetVendor m_preferredVendor; + ZyDisBaseDataSource *m_dataSource; + ZyDisDisassemblerMode m_disassemblerMode; + ZyDisInstructionSetVendor m_preferredVendor; uint64_t m_instructionPointer; private: /** @@ -417,7 +417,7 @@ private: * @c flags field of the @c info parameter for error flags. * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ - uint8_t inputPeek(VXInstructionInfo &info); + uint8_t inputPeek(ZyDisInstructionInfo &info); /** * @brief Reads the next byte from the data source. This method increases the current * input position and the @c length field of the @info parameter. @@ -428,7 +428,7 @@ private: * @c flags field of the @c info parameter for error flags. * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ - uint8_t inputNext(VXInstructionInfo &info); + uint8_t inputNext(ZyDisInstructionInfo &info); /** * @brief Reads the next byte(s) from the data source. This method increases the current * input position and the @c length field of the @info parameter. @@ -440,7 +440,7 @@ private: * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ template - T inputNext(VXInstructionInfo &info); + T inputNext(ZyDisInstructionInfo &info); /** * @brief Returns the current input byte. The current input byte is set everytime the * @c inputPeek or @c inputNext method is called. @@ -451,64 +451,64 @@ private: /** * @brief Decodes a register operand. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param registerClass The register class to use. * @param registerId The register id. * @param operandSize The defined size of the operand. * @return True if it succeeds, false if it fails. */ - bool decodeRegisterOperand(VXInstructionInfo &info, VXOperandInfo &operand, - RegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize) const; + bool decodeRegisterOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, + RegisterClass registerClass, uint8_t registerId, ZyDisDefinedOperandSize operandSize) const; /** * @brief Decodes a register/memory operand. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param registerClass The register class to use. * @param operandSize The defined size of the operand. * @return True if it succeeds, false if it fails. */ - bool decodeRegisterMemoryOperand(VXInstructionInfo &info, VXOperandInfo &operand, - RegisterClass registerClass, VXDefinedOperandSize operandSize); + bool decodeRegisterMemoryOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, + RegisterClass registerClass, ZyDisDefinedOperandSize operandSize); /** * @brief Decodes an immediate operand. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param operandSize The defined size of the operand. * @return True if it succeeds, false if it fails. */ - bool decodeImmediate(VXInstructionInfo &info, VXOperandInfo &operand, - VXDefinedOperandSize operandSize); + bool decodeImmediate(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, + ZyDisDefinedOperandSize operandSize); /** * @brief Decodes a displacement operand. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param size The size of the displacement data. * @return True if it succeeds, false if it fails. */ - bool decodeDisplacement(VXInstructionInfo &info, VXOperandInfo &operand, uint8_t size); + bool decodeDisplacement(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, uint8_t size); private: /** * @brief Decodes the modrm field of the instruction. This method reads an additional * input byte. - * @param The @c VXInstructionInfo struct that receives the decoded data. + * @param The @c ZyDisInstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeModrm(VXInstructionInfo &info); + bool decodeModrm(ZyDisInstructionInfo &info); /** * @brief Decodes the sib field of the instruction. This method reads an additional * input byte. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeSIB(VXInstructionInfo &info); + bool decodeSIB(ZyDisInstructionInfo &info); /** * @brief Decodes vex prefix of the instruction. This method takes the current input byte * to determine the vex prefix type and reads one or two additional input bytes * on demand. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeVex(VXInstructionInfo &info); + bool decodeVex(ZyDisInstructionInfo &info); private: /** * @brief Returns the effective operand size. @@ -516,59 +516,59 @@ private: * @param operandSize The defined operand size. * @return The effective operand size. */ - uint16_t getEffectiveOperandSize(const VXInstructionInfo &info, - VXDefinedOperandSize operandSize) const; + uint16_t getEffectiveOperandSize(const ZyDisInstructionInfo &info, + ZyDisDefinedOperandSize operandSize) const; /** * @brief Decodes all instruction operands. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeOperands(VXInstructionInfo &info); + bool decodeOperands(ZyDisInstructionInfo &info); /** * @brief Decodes the specified instruction operand. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param operandType The defined type of the operand. * @param operandSize The defined size of the operand. * @return True if it succeeds, false if it fails. */ - bool decodeOperand(VXInstructionInfo &info, VXOperandInfo &operand, - VXDefinedOperandType operandType, VXDefinedOperandSize operandSize); + bool decodeOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, + ZyDisDefinedOperandType operandType, ZyDisDefinedOperandSize operandSize); private: /** * @brief Resolves the effective operand and address mode of the instruction. * This method requires a non-null value in the @c instrDefinition field of the * @c info struct. - * @param info The @c VXInstructionInfo struct that receives the effective operand and + * @param info The @c ZyDisInstructionInfo struct that receives the effective operand and * address mode. */ - void resolveOperandAndAddressMode(VXInstructionInfo &info) const; + void resolveOperandAndAddressMode(ZyDisInstructionInfo &info) const; /** * @brief Calculates the effective REX/VEX.w, r, x, b, l values. * This method requires a non-null value in the @c instrDefinition field of the * @c info struct. - * @param info The @c VXInstructionInfo struct that receives the effective operand and + * @param info The @c ZyDisInstructionInfo struct that receives the effective operand and * address mode. */ - void calculateEffectiveRexVexValues(VXInstructionInfo &info) const; + void calculateEffectiveRexVexValues(ZyDisInstructionInfo &info) const; private: /** * @brief Collects and decodes optional instruction prefixes. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodePrefixes(VXInstructionInfo &info); + bool decodePrefixes(ZyDisInstructionInfo &info); /** * @brief Collects and decodes the instruction opcodes using the opcode tree. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeOpcode(VXInstructionInfo &info); + bool decodeOpcode(ZyDisInstructionInfo &info); public: /** * @brief Default constructor. */ - VXInstructionDecoder(); + ZyDisInstructionDecoder(); /** * @brief Constructor. * @param input A reference to the input data source. @@ -576,51 +576,51 @@ public: * @param preferredVendor The preferred instruction-set vendor. * @param instructionPointer The initial instruction pointer. */ - explicit VXInstructionDecoder(VXBaseDataSource *input, - VXDisassemblerMode disassemblerMode = VXDisassemblerMode::M32BIT, - VXInstructionSetVendor preferredVendor = VXInstructionSetVendor::ANY, + explicit ZyDisInstructionDecoder(ZyDisBaseDataSource *input, + ZyDisDisassemblerMode disassemblerMode = ZyDisDisassemblerMode::M32BIT, + ZyDisInstructionSetVendor preferredVendor = ZyDisInstructionSetVendor::ANY, uint64_t instructionPointer = 0); public: /** * @brief Decodes the next instruction from the input data source. - * @param info The @c VXInstructionInfo struct that receives the information about the + * @param info The @c ZyDisInstructionInfo struct that receives the information about the * decoded instruction. * @return This method returns false, if the current position has exceeded the maximum input * length. * In all other cases (valid and invalid instructions) the return value is true. */ - bool decodeInstruction(VXInstructionInfo &info); + bool decodeInstruction(ZyDisInstructionInfo &info); public: /** * @brief Returns a pointer to the current data source. * @return A pointer to the current data source. */ - VXBaseDataSource* getDataSource() const; + ZyDisBaseDataSource* getDataSource() const; /** * @brief Sets a new data source. * @param input A reference to the new input data source. */ - void setDataSource(VXBaseDataSource *input); + void setDataSource(ZyDisBaseDataSource *input); /** * @brief Returns the current disassembler mode. * @return The current disassembler mode. */ - VXDisassemblerMode getDisassemblerMode() const; + ZyDisDisassemblerMode getDisassemblerMode() const; /** * @brief Sets the current disassembler mode. * @param disassemblerMode The new disassembler mode. */ - void setDisassemblerMode(VXDisassemblerMode disassemblerMode); + void setDisassemblerMode(ZyDisDisassemblerMode disassemblerMode); /** * @brief Returns the preferred instruction-set vendor. * @return The preferred instruction-set vendor. */ - VXInstructionSetVendor getPreferredVendor() const; + ZyDisInstructionSetVendor getPreferredVendor() const; /** * @brief Sets the preferred instruction-set vendor. * @param preferredVendor The new preferred instruction-set vendor. */ - void setPreferredVendor(VXInstructionSetVendor preferredVendor); + void setPreferredVendor(ZyDisInstructionSetVendor preferredVendor); /** * @brief Returns the current instruction pointer. * @return The current instruction pointer. @@ -633,7 +633,7 @@ public: void setInstructionPointer(uint64_t instructionPointer); }; -inline uint8_t VXInstructionDecoder::inputPeek(VXInstructionInfo &info) +inline uint8_t ZyDisInstructionDecoder::inputPeek(ZyDisInstructionInfo &info) { if (!m_dataSource) { @@ -643,7 +643,7 @@ inline uint8_t VXInstructionDecoder::inputPeek(VXInstructionInfo &info) return m_dataSource->inputPeek(info); } -inline uint8_t VXInstructionDecoder::inputNext(VXInstructionInfo &info) +inline uint8_t ZyDisInstructionDecoder::inputNext(ZyDisInstructionInfo &info) { if (!m_dataSource) { @@ -654,7 +654,7 @@ inline uint8_t VXInstructionDecoder::inputNext(VXInstructionInfo &info) } template -inline T VXInstructionDecoder::inputNext(VXInstructionInfo &info) +inline T ZyDisInstructionDecoder::inputNext(ZyDisInstructionInfo &info) { if (!m_dataSource) { @@ -664,7 +664,7 @@ inline T VXInstructionDecoder::inputNext(VXInstructionInfo &info) return m_dataSource->inputNext(info); } -inline uint8_t VXInstructionDecoder::inputCurrent() const +inline uint8_t ZyDisInstructionDecoder::inputCurrent() const { if (!m_dataSource) { @@ -673,42 +673,42 @@ inline uint8_t VXInstructionDecoder::inputCurrent() const return m_dataSource->inputCurrent(); } -inline VXBaseDataSource* VXInstructionDecoder::getDataSource() const +inline ZyDisBaseDataSource* ZyDisInstructionDecoder::getDataSource() const { return m_dataSource; } -inline void VXInstructionDecoder::setDataSource(VXBaseDataSource *input) +inline void ZyDisInstructionDecoder::setDataSource(ZyDisBaseDataSource *input) { m_dataSource = input; } -inline VXDisassemblerMode VXInstructionDecoder::getDisassemblerMode() const +inline ZyDisDisassemblerMode ZyDisInstructionDecoder::getDisassemblerMode() const { return m_disassemblerMode; } -inline void VXInstructionDecoder::setDisassemblerMode(VXDisassemblerMode disassemblerMode) +inline void ZyDisInstructionDecoder::setDisassemblerMode(ZyDisDisassemblerMode disassemblerMode) { m_disassemblerMode = disassemblerMode; } -inline VXInstructionSetVendor VXInstructionDecoder::getPreferredVendor() const +inline ZyDisInstructionSetVendor ZyDisInstructionDecoder::getPreferredVendor() const { return m_preferredVendor; } -inline void VXInstructionDecoder::setPreferredVendor(VXInstructionSetVendor preferredVendor) +inline void ZyDisInstructionDecoder::setPreferredVendor(ZyDisInstructionSetVendor preferredVendor) { m_preferredVendor = preferredVendor; } -inline uint64_t VXInstructionDecoder::getInstructionPointer() const +inline uint64_t ZyDisInstructionDecoder::getInstructionPointer() const { return m_instructionPointer; } -inline void VXInstructionDecoder::setInstructionPointer(uint64_t instructionPointer) +inline void ZyDisInstructionDecoder::setInstructionPointer(uint64_t instructionPointer) { m_instructionPointer = instructionPointer; } diff --git a/Bindings/Cpp/VXInstructionFormatter.cpp b/Bindings/Cpp/ZyDisInstructionFormatter.cpp similarity index 76% rename from Bindings/Cpp/VXInstructionFormatter.cpp rename to Bindings/Cpp/ZyDisInstructionFormatter.cpp index a5e0d7f..792c5d3 100644 --- a/Bindings/Cpp/VXInstructionFormatter.cpp +++ b/Bindings/Cpp/ZyDisInstructionFormatter.cpp @@ -29,8 +29,8 @@ * SOFTWARE. **************************************************************************************************/ -#include "VXInstructionFormatter.hpp" -#include "VXDisassemblerUtils.hpp" +#include "ZyDisInstructionFormatter.hpp" +#include "ZyDisDisassemblerUtils.hpp" #include #include #include @@ -42,12 +42,12 @@ namespace Verteron /////////////////////////////////////////////////////////////////////////////////////////////////// -VXBaseSymbolResolver::~VXBaseSymbolResolver() +ZyDisBaseSymbolResolver::~ZyDisBaseSymbolResolver() { } -const char* VXBaseSymbolResolver::resolveSymbol(const VXInstructionInfo &info, uint64_t address, +const char* ZyDisBaseSymbolResolver::resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, uint64_t &offset) { return nullptr; @@ -55,7 +55,7 @@ const char* VXBaseSymbolResolver::resolveSymbol(const VXInstructionInfo &info, u /////////////////////////////////////////////////////////////////////////////////////////////////// -const char* VXBaseInstructionFormatter::m_registerStrings[] = +const char* ZyDisBaseInstructionFormatter::m_registerStrings[] = { /* 8 bit general purpose registers */ "al", "cl", "dl", "bl", @@ -111,12 +111,12 @@ const char* VXBaseInstructionFormatter::m_registerStrings[] = "rip" }; -void VXBaseInstructionFormatter::internalFormatInstruction(const VXInstructionInfo &info) +void ZyDisBaseInstructionFormatter::internalFormatInstruction(const ZyDisInstructionInfo &info) { // Nothing to do here } -VXBaseInstructionFormatter::VXBaseInstructionFormatter() +ZyDisBaseInstructionFormatter::ZyDisBaseInstructionFormatter() : m_symbolResolver(nullptr) , m_outputStringLen(0) , m_outputUppercase(false) @@ -124,7 +124,7 @@ VXBaseInstructionFormatter::VXBaseInstructionFormatter() } -VXBaseInstructionFormatter::VXBaseInstructionFormatter(VXBaseSymbolResolver *symbolResolver) +ZyDisBaseInstructionFormatter::ZyDisBaseInstructionFormatter(ZyDisBaseSymbolResolver *symbolResolver) : m_symbolResolver(symbolResolver) , m_outputStringLen(0) , m_outputUppercase(false) @@ -132,7 +132,7 @@ VXBaseInstructionFormatter::VXBaseInstructionFormatter(VXBaseSymbolResolver *sym } -const char* VXBaseInstructionFormatter::formatInstruction(const VXInstructionInfo &info) +const char* ZyDisBaseInstructionFormatter::formatInstruction(const ZyDisInstructionInfo &info) { // Clears the internal string buffer outputClear(); @@ -147,22 +147,22 @@ const char* VXBaseInstructionFormatter::formatInstruction(const VXInstructionInf return outputString(); } -VXBaseInstructionFormatter::~VXBaseInstructionFormatter() +ZyDisBaseInstructionFormatter::~ZyDisBaseInstructionFormatter() { } -void VXBaseInstructionFormatter::outputClear() +void ZyDisBaseInstructionFormatter::outputClear() { m_outputStringLen = 0; } -char const* VXBaseInstructionFormatter::outputString() +char const* ZyDisBaseInstructionFormatter::outputString() { return &m_outputBuffer[0]; } - void VXBaseInstructionFormatter::outputAppend(char const *text) + void ZyDisBaseInstructionFormatter::outputAppend(char const *text) { // Get the string length including the null-terminator char size_t strLen = strlen(text) + 1; @@ -191,7 +191,7 @@ char const* VXBaseInstructionFormatter::outputString() } } - void VXBaseInstructionFormatter::outputAppendFormatted(char const *format, ...) + void ZyDisBaseInstructionFormatter::outputAppendFormatted(char const *format, ...) { va_list arguments; va_start(arguments, format); @@ -233,7 +233,7 @@ char const* VXBaseInstructionFormatter::outputString() va_end(arguments); } -void VXBaseInstructionFormatter::outputAppendAddress(const VXInstructionInfo &info, +void ZyDisBaseInstructionFormatter::outputAppendAddress(const ZyDisInstructionInfo &info, uint64_t address, bool resolveSymbols) { uint64_t offset = 0; @@ -269,10 +269,10 @@ void VXBaseInstructionFormatter::outputAppendAddress(const VXInstructionInfo &in } } -void VXBaseInstructionFormatter::outputAppendImmediate(const VXInstructionInfo &info, - const VXOperandInfo &operand, bool resolveSymbols) +void ZyDisBaseInstructionFormatter::outputAppendImmediate(const ZyDisInstructionInfo &info, + const ZyDisOperandInfo &operand, bool resolveSymbols) { - assert(operand.type == VXOperandType::IMMEDIATE); + assert(operand.type == ZyDisOperandType::IMMEDIATE); uint64_t value = 0; if (operand.signed_lval && (operand.size != info.operand_mode)) { @@ -329,11 +329,11 @@ void VXBaseInstructionFormatter::outputAppendImmediate(const VXInstructionInfo & } } -void VXBaseInstructionFormatter::outputAppendDisplacement(const VXInstructionInfo &info, - const VXOperandInfo &operand) +void ZyDisBaseInstructionFormatter::outputAppendDisplacement(const ZyDisInstructionInfo &info, + const ZyDisOperandInfo &operand) { assert(operand.offset > 0); - if ((operand.base == VXRegister::NONE) && (operand.index == VXRegister::NONE)) + if ((operand.base == ZyDisRegister::NONE) && (operand.index == ZyDisRegister::NONE)) { // Assume the displacement value is unsigned assert(operand.scale == 0); @@ -378,16 +378,16 @@ void VXBaseInstructionFormatter::outputAppendDisplacement(const VXInstructionInf outputAppendFormatted("-%.2lX", -value); } else { - outputAppendFormatted("%s%.2lX", (operand.base != VXRegister::NONE || - operand.index != VXRegister::NONE) ? "+" : "", value); + outputAppendFormatted("%s%.2lX", (operand.base != ZyDisRegister::NONE || + operand.index != ZyDisRegister::NONE) ? "+" : "", value); } } } /////////////////////////////////////////////////////////////////////////////////////////////////// -void VXIntelInstructionFormatter::outputAppendOperandCast(const VXInstructionInfo &info, - const VXOperandInfo &operand) +void ZyDisIntelInstructionFormatter::outputAppendOperandCast(const ZyDisInstructionInfo &info, + const ZyDisOperandInfo &operand) { switch(operand.size) { @@ -417,33 +417,33 @@ void VXIntelInstructionFormatter::outputAppendOperandCast(const VXInstructionInf } } -void VXIntelInstructionFormatter::formatOperand(const VXInstructionInfo &info, - const VXOperandInfo &operand) +void ZyDisIntelInstructionFormatter::formatOperand(const ZyDisInstructionInfo &info, + const ZyDisOperandInfo &operand) { switch (operand.type) { - case VXOperandType::REGISTER: + case ZyDisOperandType::REGISTER: outputAppend(registerToString(operand.base)); break; - case VXOperandType::MEMORY: + case ZyDisOperandType::MEMORY: if (info.flags & IF_PREFIX_SEGMENT) { outputAppendFormatted("%s:", registerToString(info.segment)); } outputAppend("["); - if (operand.base == VXRegister::RIP) + if (operand.base == ZyDisRegister::RIP) { // TODO: Add option outputAppendAddress(info, VDECalcAbsoluteTarget(info, operand), true); } else { - if (operand.base != VXRegister::NONE) + if (operand.base != ZyDisRegister::NONE) { outputAppend(registerToString(operand.base)); } - if (operand.index != VXRegister::NONE) + if (operand.index != ZyDisRegister::NONE) { - outputAppendFormatted("%s%s", operand.base != VXRegister::NONE ? "+" : "", + outputAppendFormatted("%s%s", operand.base != ZyDisRegister::NONE ? "+" : "", registerToString(operand.index)); if (operand.scale) { @@ -457,7 +457,7 @@ void VXIntelInstructionFormatter::formatOperand(const VXInstructionInfo &info, } outputAppend("]"); break; - case VXOperandType::POINTER: + case ZyDisOperandType::POINTER: // TODO: resolve symbols switch (operand.size) { @@ -472,12 +472,12 @@ void VXIntelInstructionFormatter::formatOperand(const VXInstructionInfo &info, assert(0); } break; - case VXOperandType::IMMEDIATE: + case ZyDisOperandType::IMMEDIATE: { outputAppendImmediate(info, operand, true); } break; - case VXOperandType::REL_IMMEDIATE: + case ZyDisOperandType::REL_IMMEDIATE: { if (operand.size == 8) { @@ -486,7 +486,7 @@ void VXIntelInstructionFormatter::formatOperand(const VXInstructionInfo &info, outputAppendAddress(info, VDECalcAbsoluteTarget(info, operand), true); } break; - case VXOperandType::CONSTANT: + case ZyDisOperandType::CONSTANT: outputAppendFormatted("%.2X", operand.lval.udword); break; default: @@ -495,7 +495,7 @@ void VXIntelInstructionFormatter::formatOperand(const VXInstructionInfo &info, } } -void VXIntelInstructionFormatter::internalFormatInstruction(const VXInstructionInfo &info) +void ZyDisIntelInstructionFormatter::internalFormatInstruction(const ZyDisInstructionInfo &info) { // Append string prefixes if (info.flags & IF_PREFIX_LOCK) @@ -512,30 +512,30 @@ void VXIntelInstructionFormatter::internalFormatInstruction(const VXInstructionI // Append the instruction mnemonic outputAppend(Internal::VDEGetInstructionMnemonicString(info.mnemonic)); // Append the first operand - if (info.operand[0].type != VXOperandType::NONE) + if (info.operand[0].type != ZyDisOperandType::NONE) { outputAppend(" "); bool cast = false; - if (info.operand[0].type == VXOperandType::MEMORY) + if (info.operand[0].type == ZyDisOperandType::MEMORY) { - if (info.operand[1].type == VXOperandType::IMMEDIATE || - info.operand[1].type == VXOperandType::CONSTANT || - info.operand[1].type == VXOperandType::NONE || + if (info.operand[1].type == ZyDisOperandType::IMMEDIATE || + info.operand[1].type == ZyDisOperandType::CONSTANT || + info.operand[1].type == ZyDisOperandType::NONE || (info.operand[0].size != info.operand[1].size)) { cast = true; - } else if (info.operand[1].type == VXOperandType::REGISTER && - info.operand[1].base == VXRegister::CL) + } else if (info.operand[1].type == ZyDisOperandType::REGISTER && + info.operand[1].base == ZyDisRegister::CL) { switch (info.mnemonic) { - case VXInstructionMnemonic::RCL: - case VXInstructionMnemonic::ROL: - case VXInstructionMnemonic::ROR: - case VXInstructionMnemonic::RCR: - case VXInstructionMnemonic::SHL: - case VXInstructionMnemonic::SHR: - case VXInstructionMnemonic::SAR: + case ZyDisInstructionMnemonic::RCL: + case ZyDisInstructionMnemonic::ROL: + case ZyDisInstructionMnemonic::ROR: + case ZyDisInstructionMnemonic::RCR: + case ZyDisInstructionMnemonic::SHL: + case ZyDisInstructionMnemonic::SHR: + case ZyDisInstructionMnemonic::SAR: cast = true; break; default: @@ -550,19 +550,19 @@ void VXIntelInstructionFormatter::internalFormatInstruction(const VXInstructionI formatOperand(info, info.operand[0]); } // Append the second operand - if (info.operand[1].type != VXOperandType::NONE) + if (info.operand[1].type != ZyDisOperandType::NONE) { outputAppend(", "); bool cast = false; - if (info.operand[1].type == VXOperandType::MEMORY && + if (info.operand[1].type == ZyDisOperandType::MEMORY && info.operand[0].size != info.operand[1].size && - ((info.operand[0].type != VXOperandType::REGISTER) || - ((info.operand[0].base != VXRegister::ES) && - (info.operand[0].base != VXRegister::CS) && - (info.operand[0].base != VXRegister::SS) && - (info.operand[0].base != VXRegister::DS) && - (info.operand[0].base != VXRegister::FS) && - (info.operand[0].base != VXRegister::GS)))) + ((info.operand[0].type != ZyDisOperandType::REGISTER) || + ((info.operand[0].base != ZyDisRegister::ES) && + (info.operand[0].base != ZyDisRegister::CS) && + (info.operand[0].base != ZyDisRegister::SS) && + (info.operand[0].base != ZyDisRegister::DS) && + (info.operand[0].base != ZyDisRegister::FS) && + (info.operand[0].base != ZyDisRegister::GS)))) { cast = true; } @@ -573,11 +573,11 @@ void VXIntelInstructionFormatter::internalFormatInstruction(const VXInstructionI formatOperand(info, info.operand[1]); } // Append the third operand - if (info.operand[2].type != VXOperandType::NONE) + if (info.operand[2].type != ZyDisOperandType::NONE) { outputAppend(", "); bool cast = false; - if (info.operand[2].type == VXOperandType::MEMORY && + if (info.operand[2].type == ZyDisOperandType::MEMORY && (info.operand[2].size != info.operand[1].size)) { cast = true; @@ -589,38 +589,38 @@ void VXIntelInstructionFormatter::internalFormatInstruction(const VXInstructionI formatOperand(info, info.operand[2]); } // Append the fourth operand - if (info.operand[3].type != VXOperandType::NONE) + if (info.operand[3].type != ZyDisOperandType::NONE) { outputAppend(", "); formatOperand(info, info.operand[3]); } } -VXIntelInstructionFormatter::VXIntelInstructionFormatter() - : VXBaseInstructionFormatter() +ZyDisIntelInstructionFormatter::ZyDisIntelInstructionFormatter() + : ZyDisBaseInstructionFormatter() { } -VXIntelInstructionFormatter::VXIntelInstructionFormatter(VXBaseSymbolResolver* symbolResolver) - : VXBaseInstructionFormatter(symbolResolver) +ZyDisIntelInstructionFormatter::ZyDisIntelInstructionFormatter(ZyDisBaseSymbolResolver* symbolResolver) + : ZyDisBaseInstructionFormatter(symbolResolver) { } -VXIntelInstructionFormatter::~VXIntelInstructionFormatter() +ZyDisIntelInstructionFormatter::~ZyDisIntelInstructionFormatter() { } /////////////////////////////////////////////////////////////////////////////////////////////////// -VXExactSymbolResolver::~VXExactSymbolResolver() +ZyDisExactSymbolResolver::~ZyDisExactSymbolResolver() { } -const char* VXExactSymbolResolver::resolveSymbol(const VXInstructionInfo &info, uint64_t address, +const char* ZyDisExactSymbolResolver::resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, uint64_t &offset) { std::unordered_map::const_iterator iterator = m_symbolMap.find(address); @@ -632,23 +632,23 @@ const char* VXExactSymbolResolver::resolveSymbol(const VXInstructionInfo &info, return nullptr; } -bool VXExactSymbolResolver::containsSymbol(uint64_t address) const +bool ZyDisExactSymbolResolver::containsSymbol(uint64_t address) const { std::unordered_map::const_iterator iterator = m_symbolMap.find(address); return (iterator != m_symbolMap.end()); } -void VXExactSymbolResolver::setSymbol(uint64_t address, const char* name) +void ZyDisExactSymbolResolver::setSymbol(uint64_t address, const char* name) { m_symbolMap[address].assign(name); } -void VXExactSymbolResolver::removeSymbol(uint64_t address) +void ZyDisExactSymbolResolver::removeSymbol(uint64_t address) { m_symbolMap.erase(address); } -void VXExactSymbolResolver::clear() +void ZyDisExactSymbolResolver::clear() { m_symbolMap.clear(); } diff --git a/Bindings/Cpp/VXInstructionFormatter.hpp b/Bindings/Cpp/ZyDisInstructionFormatter.hpp similarity index 79% rename from Bindings/Cpp/VXInstructionFormatter.hpp rename to Bindings/Cpp/ZyDisInstructionFormatter.hpp index b63b263..68d02bf 100644 --- a/Bindings/Cpp/VXInstructionFormatter.hpp +++ b/Bindings/Cpp/ZyDisInstructionFormatter.hpp @@ -34,7 +34,7 @@ #include #include #include -#include "VXDisassemblerTypes.hpp" +#include "ZyDisDisassemblerTypes.hpp" namespace Verteron { @@ -44,13 +44,13 @@ namespace Verteron /** * @brief Base class for all symbol resolver implementations. */ -class VXBaseSymbolResolver +class ZyDisBaseSymbolResolver { public: /** * @brief Destructor. */ - virtual ~VXBaseSymbolResolver(); + virtual ~ZyDisBaseSymbolResolver(); public: /** * @brief Resolves a symbol. @@ -60,7 +60,7 @@ public: * relative to the base address of the symbol. * @return The name of the symbol, if the symbol was found, @c NULL if not. */ - virtual const char* resolveSymbol(const VXInstructionInfo &info, uint64_t address, + virtual const char* resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, uint64_t &offset); }; @@ -69,11 +69,11 @@ public: /** * @brief Base class for all instruction formatter implementations. */ -class VXBaseInstructionFormatter +class ZyDisBaseInstructionFormatter { private: static const char *m_registerStrings[]; - VXBaseSymbolResolver *m_symbolResolver; + ZyDisBaseSymbolResolver *m_symbolResolver; std::vector m_outputBuffer; size_t m_outputStringLen; bool m_outputUppercase; @@ -109,7 +109,7 @@ protected: * @param resolveSymbols If this parameter is true, the method will try to display a * smybol name instead of the numeric value. */ - void outputAppendAddress(const VXInstructionInfo &info, uint64_t address, + void outputAppendAddress(const ZyDisInstructionInfo &info, uint64_t address, bool resolveSymbols = true); /** * @brief Appends a formatted immediate value to the output string buffer. @@ -118,21 +118,21 @@ protected: * @param resolveSymbols If this parameter is true, the method will try to display a * smybol name instead of the numeric value. */ - void outputAppendImmediate(const VXInstructionInfo &info, const VXOperandInfo &operand, + void outputAppendImmediate(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand, bool resolveSymbols = false); /** * @brief Appends a formatted memory displacement value to the output string buffer. * @param info The instruction info. * @param operand The memory operand. */ - void outputAppendDisplacement(const VXInstructionInfo &info, const VXOperandInfo &operand); + void outputAppendDisplacement(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand); protected: /** * @brief Returns the string representation of a given register. * @param reg The register. * @return The string representation of the given register. */ - const char* registerToString(VXRegister reg) const; + const char* registerToString(ZyDisRegister reg) const; /** * @brief Resolves a symbol. * @param info The instruction info. @@ -141,7 +141,7 @@ protected: * relative to the base address of the symbol. * @return The name of the symbol, if the symbol was found, @c NULL if not. */ - const char* resolveSymbol(const VXInstructionInfo &info, uint64_t address, + const char* resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, uint64_t &offset) const; protected: /** @@ -150,58 +150,58 @@ protected: * string buffer. * @param info The instruction info. */ - virtual void internalFormatInstruction(const VXInstructionInfo &info); + virtual void internalFormatInstruction(const ZyDisInstructionInfo &info); /** * @brief Default constructor. */ - VXBaseInstructionFormatter(); + ZyDisBaseInstructionFormatter(); /** * @brief Constructor. * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol * resolver should be used. */ - explicit VXBaseInstructionFormatter(VXBaseSymbolResolver *symbolResolver); + explicit ZyDisBaseInstructionFormatter(ZyDisBaseSymbolResolver *symbolResolver); public: /** * @brief Destructor. */ - virtual ~VXBaseInstructionFormatter(); + virtual ~ZyDisBaseInstructionFormatter(); public: /** * @brief Formats a decoded instruction. * @param info The instruction info. * @return Pointer to the formatted instruction string. */ - const char* formatInstruction(const VXInstructionInfo &info); + const char* formatInstruction(const ZyDisInstructionInfo &info); public: /** * @brief Returns a pointer to the current symbol resolver. * @return Pointer to the current symbol resolver or @c NULL, if no symbol resolver is used. */ - VXBaseSymbolResolver* getSymbolResolver() const; + ZyDisBaseSymbolResolver* getSymbolResolver() const; /** * @brief Sets a new symbol resolver. * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol * resolver should be used. */ - void setSymbolResolver(VXBaseSymbolResolver *symbolResolver); + void setSymbolResolver(ZyDisBaseSymbolResolver *symbolResolver); }; -inline void VXBaseInstructionFormatter::outputSetUppercase(bool uppercase) +inline void ZyDisBaseInstructionFormatter::outputSetUppercase(bool uppercase) { m_outputUppercase = uppercase; } -inline char const* VXBaseInstructionFormatter::registerToString(VXRegister reg) const +inline char const* ZyDisBaseInstructionFormatter::registerToString(ZyDisRegister reg) const { - if (reg == VXRegister::NONE) + if (reg == ZyDisRegister::NONE) { return "error"; } return m_registerStrings[static_cast(reg) - 1]; } -inline char const* VXBaseInstructionFormatter::resolveSymbol(const VXInstructionInfo &info, +inline char const* ZyDisBaseInstructionFormatter::resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, uint64_t &offset) const { if (m_symbolResolver) @@ -211,12 +211,12 @@ inline char const* VXBaseInstructionFormatter::resolveSymbol(const VXInstruction return nullptr; } -inline VXBaseSymbolResolver* VXBaseInstructionFormatter::getSymbolResolver() const +inline ZyDisBaseSymbolResolver* ZyDisBaseInstructionFormatter::getSymbolResolver() const { return m_symbolResolver; } -inline void VXBaseInstructionFormatter::setSymbolResolver(VXBaseSymbolResolver *symbolResolver) +inline void ZyDisBaseInstructionFormatter::setSymbolResolver(ZyDisBaseSymbolResolver *symbolResolver) { m_symbolResolver = symbolResolver; } @@ -226,7 +226,7 @@ inline void VXBaseInstructionFormatter::setSymbolResolver(VXBaseSymbolResolver * /** * @brief Intel syntax instruction formatter. */ -class VXIntelInstructionFormatter : public VXBaseInstructionFormatter +class ZyDisIntelInstructionFormatter : public ZyDisBaseInstructionFormatter { private: /** @@ -234,35 +234,35 @@ private: * @param info The instruction info. * @param operand The operand. */ - void outputAppendOperandCast(const VXInstructionInfo &info, const VXOperandInfo &operand); + void outputAppendOperandCast(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand); /** * @brief Formats the specified operand and appends the resulting string to the output * buffer. * @param info The instruction info. * @param operand The operand. */ - void formatOperand(const VXInstructionInfo &info, const VXOperandInfo &operand); + void formatOperand(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand); protected: /** * @brief Fills the internal string buffer with an intel style formatted instruction string. * @param info The instruction info. */ - void internalFormatInstruction(const VXInstructionInfo &info) override; + void internalFormatInstruction(const ZyDisInstructionInfo &info) override; public: /** * @brief Default constructor. */ - VXIntelInstructionFormatter(); + ZyDisIntelInstructionFormatter(); /** * @brief Constructor. * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol * resolver should be used. */ - explicit VXIntelInstructionFormatter(VXBaseSymbolResolver *symbolResolver); + explicit ZyDisIntelInstructionFormatter(ZyDisBaseSymbolResolver *symbolResolver); /** * @brief Destructor. */ - ~VXIntelInstructionFormatter() override; + ~ZyDisIntelInstructionFormatter() override; }; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -270,7 +270,7 @@ public: /** * @brief Simple symbol resolver that only matches exact addresses. */ -class VXExactSymbolResolver : public VXBaseSymbolResolver +class ZyDisExactSymbolResolver : public ZyDisBaseSymbolResolver { private: std::unordered_map m_symbolMap; @@ -278,7 +278,7 @@ public: /** * @brief Destructor. */ - ~VXExactSymbolResolver() override; + ~ZyDisExactSymbolResolver() override; public: /** * @brief Resolves a symbol. @@ -288,7 +288,7 @@ public: * relative to the base address of the symbol. * @return The name of the symbol, if the symbol was found, @c NULL if not. */ - const char* resolveSymbol(const VXInstructionInfo &info, uint64_t address, + const char* resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, uint64_t &offset) override; public: /** diff --git a/Bindings/Cpp/ZyDisOpcodeTable.cpp b/Bindings/Cpp/ZyDisOpcodeTable.cpp new file mode 100644 index 0000000..38709b3 --- /dev/null +++ b/Bindings/Cpp/ZyDisOpcodeTable.cpp @@ -0,0 +1,9655 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : + + Last change : 14. October 2014 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ +#include "ZyDisOpcodeTable.hpp" + +namespace Verteron +{ + +namespace Internal +{ + +#define ZYDIS_INVALID 0 +#define NODE(type, n) (static_cast(type) << 12 | (n)) + +const ZyDisOpcodeTreeNode optreeTable[][256] = +{ + { + /* 00 */ 0x0015, + /* 01 */ 0x0014, + /* 02 */ 0x0016, + /* 03 */ 0x0018, + /* 04 */ 0x0017, + /* 05 */ 0x0010, + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0000), + /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0001), + /* 08 */ 0x0394, + /* 09 */ 0x0393, + /* 0A */ 0x0396, + /* 0B */ 0x0395, + /* 0C */ 0x0390, + /* 0D */ 0x038F, + /* 0E */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0002), + /* 0F */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0001), + /* 10 */ 0x000B, + /* 11 */ 0x000A, + /* 12 */ 0x000C, + /* 13 */ 0x000E, + /* 14 */ 0x000D, + /* 15 */ 0x0006, + /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0007), + /* 17 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0008), + /* 18 */ 0x04FE, + /* 19 */ 0x04F7, + /* 1A */ 0x04F8, + /* 1B */ 0x04FB, + /* 1C */ 0x04FA, + /* 1D */ 0x04F9, + /* 1E */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0009), + /* 1F */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000A), + /* 20 */ 0x0026, + /* 21 */ 0x0027, + /* 22 */ 0x0025, + /* 23 */ 0x002C, + /* 24 */ 0x002D, + /* 25 */ 0x002E, + /* 26 */ ZYDIS_INVALID, + /* 27 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000B), + /* 28 */ 0x0542, + /* 29 */ 0x0549, + /* 2A */ 0x0548, + /* 2B */ 0x054B, + /* 2C */ 0x054A, + /* 2D */ 0x0547, + /* 2E */ ZYDIS_INVALID, + /* 2F */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000C), + /* 30 */ 0x06B8, + /* 31 */ 0x06B9, + /* 32 */ 0x06B6, + /* 33 */ 0x06B7, + /* 34 */ 0x06BA, + /* 35 */ 0x06BB, + /* 36 */ ZYDIS_INVALID, + /* 37 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000D), + /* 38 */ 0x006C, + /* 39 */ 0x006D, + /* 3A */ 0x006B, + /* 3B */ 0x006A, + /* 3C */ 0x0070, + /* 3D */ 0x006F, + /* 3E */ ZYDIS_INVALID, + /* 3F */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000E), + /* 40 */ 0x02AB, + /* 41 */ 0x02AC, + /* 42 */ 0x02B2, + /* 43 */ 0x02B1, + /* 44 */ 0x02B3, + /* 45 */ 0x02B4, + /* 46 */ 0x02AE, + /* 47 */ 0x02AD, + /* 48 */ 0x00A7, + /* 49 */ 0x00A6, + /* 4A */ 0x00A8, + /* 4B */ 0x00AA, + /* 4C */ 0x00A9, + /* 4D */ 0x00A2, + /* 4E */ 0x00A1, + /* 4F */ 0x00A3, + /* 50 */ 0x04B4, + /* 51 */ 0x04B9, + /* 52 */ 0x04B3, + /* 53 */ 0x04AE, + /* 54 */ 0x04AF, + /* 55 */ 0x04B0, + /* 56 */ 0x04B1, + /* 57 */ 0x04B2, + /* 58 */ 0x0449, + /* 59 */ 0x0447, + /* 5A */ 0x0448, + /* 5B */ 0x0442, + /* 5C */ 0x043E, + /* 5D */ 0x043D, + /* 5E */ 0x043F, + /* 5F */ 0x0441, + /* 60 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0007), + /* 61 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0008), + /* 62 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0013), + /* 63 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0014), + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ 0x04B7, + /* 69 */ 0x02A4, + /* 6A */ 0x04AB, + /* 6B */ 0x02A6, + /* 6C */ 0x02B5, + /* 6D */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0009), + /* 6E */ 0x039F, + /* 6F */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000A), + /* 70 */ 0x02E8, + /* 71 */ 0x02E2, + /* 72 */ 0x02CA, + /* 73 */ 0x02DE, + /* 74 */ 0x02CE, + /* 75 */ 0x02E1, + /* 76 */ 0x02CB, + /* 77 */ 0x02C7, + /* 78 */ 0x02ED, + /* 79 */ 0x02E6, + /* 7A */ 0x02EB, + /* 7B */ 0x02E5, + /* 7C */ 0x02D5, + /* 7D */ 0x02D3, + /* 7E */ 0x02D8, + /* 7F */ 0x02D1, + /* 80 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0013), + /* 81 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0014), + /* 82 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0015), + /* 83 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0016), + /* 84 */ 0x055C, + /* 85 */ 0x055D, + /* 86 */ 0x06A8, + /* 87 */ 0x06A7, + /* 88 */ 0x0334, + /* 89 */ 0x0336, + /* 8A */ 0x0335, + /* 8B */ 0x0331, + /* 8C */ 0x031D, + /* 8D */ 0x02F4, + /* 8E */ 0x031C, + /* 8F */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0017), + /* 90 */ 0x06A9, + /* 91 */ 0x06AB, + /* 92 */ 0x06AA, + /* 93 */ 0x06A3, + /* 94 */ 0x06A2, + /* 95 */ 0x06A4, + /* 96 */ 0x06A6, + /* 97 */ 0x06A5, + /* 98 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000B), + /* 99 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000C), + /* 9A */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001D), + /* 9B */ 0x069D, + /* 9C */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000D), + /* 9D */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000E), + /* 9E */ 0x04EF, + /* 9F */ 0x02EF, + /* A0 */ 0x031B, + /* A1 */ 0x0320, + /* A2 */ 0x031F, + /* A3 */ 0x031E, + /* A4 */ 0x0367, + /* A5 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000F), + /* A6 */ 0x0076, + /* A7 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0010), + /* A8 */ 0x055E, + /* A9 */ 0x055B, + /* AA */ 0x053D, + /* AB */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0011), + /* AC */ 0x0300, + /* AD */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0012), + /* AE */ 0x0501, + /* AF */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0013), + /* B0 */ 0x0317, + /* B1 */ 0x031A, + /* B2 */ 0x0318, + /* B3 */ 0x0319, + /* B4 */ 0x0321, + /* B5 */ 0x032C, + /* B6 */ 0x032B, + /* B7 */ 0x032A, + /* B8 */ 0x032D, + /* B9 */ 0x0330, + /* BA */ 0x032F, + /* BB */ 0x032E, + /* BC */ 0x0329, + /* BD */ 0x0324, + /* BE */ 0x0323, + /* BF */ 0x0322, + /* C0 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0018), + /* C1 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0019), + /* C2 */ 0x04D9, + /* C3 */ 0x04D8, + /* C4 */ NODE(ZyDisOpcodeTreeNodeType::VEX, 0x0000), + /* C5 */ NODE(ZyDisOpcodeTreeNodeType::VEX, 0x0001), + /* C6 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001E), + /* C7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001F), + /* C8 */ 0x00B4, + /* C9 */ 0x02F5, + /* CA */ 0x04DA, + /* CB */ 0x04DB, + /* CC */ 0x02BB, + /* CD */ 0x02B9, + /* CE */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0027), + /* CF */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0017), + /* D0 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0020), + /* D1 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0021), + /* D2 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0022), + /* D3 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0023), + /* D4 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0028), + /* D5 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0029), + /* D6 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x002A), + /* D7 */ 0x06B2, + /* D8 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0015), + /* D9 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0016), + /* DA */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0017), + /* DB */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0018), + /* DC */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0019), + /* DD */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x001A), + /* DE */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x001B), + /* DF */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x001C), + /* E0 */ 0x0306, + /* E1 */ 0x0305, + /* E2 */ 0x0304, + /* E3 */ NODE(ZyDisOpcodeTreeNodeType::ADDRESS_SIZE, 0x0000), + /* E4 */ 0x02A9, + /* E5 */ 0x02AA, + /* E6 */ 0x039D, + /* E7 */ 0x039E, + /* E8 */ 0x004E, + /* E9 */ 0x02DB, + /* EA */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x002B), + /* EB */ 0x02DD, + /* EC */ 0x02A7, + /* ED */ 0x02A8, + /* EE */ 0x039B, + /* EF */ 0x039C, + /* F0 */ 0x02FF, + /* F1 */ 0x02BA, + /* F2 */ 0x04D7, + /* F3 */ 0x04D6, + /* F4 */ 0x029D, + /* F5 */ 0x0059, + /* F6 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002C), + /* F7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002D), + /* F8 */ 0x0053, + /* F9 */ 0x0538, + /* FA */ 0x0057, + /* FB */ 0x053B, + /* FC */ 0x0054, + /* FD */ 0x0539, + /* FE */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002E), + /* FF */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002F), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0000), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0000), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0003), + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0004), + /* 04 */ ZYDIS_INVALID, + /* 05 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0005), + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0006), + /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0007), + /* 08 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0008), + /* 09 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0009), + /* 0A */ ZYDIS_INVALID, + /* 0B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000A), + /* 0C */ ZYDIS_INVALID, + /* 0D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000B), + /* 0E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000C), + /* 0F */ NODE(ZyDisOpcodeTreeNodeType::AMD3DNOW, 0x0000), + /* 10 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000D), + /* 11 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000E), + /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0001), + /* 13 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0011), + /* 14 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0012), + /* 15 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0013), + /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0002), + /* 17 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0016), + /* 18 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0017), + /* 19 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0018), + /* 1A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0019), + /* 1B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001A), + /* 1C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001B), + /* 1D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001C), + /* 1E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001D), + /* 1F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001E), + /* 20 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001F), + /* 21 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0020), + /* 22 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0021), + /* 23 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0022), + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0023), + /* 29 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0024), + /* 2A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0025), + /* 2B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0026), + /* 2C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0027), + /* 2D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0028), + /* 2E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0029), + /* 2F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002A), + /* 30 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002B), + /* 31 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002C), + /* 32 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002D), + /* 33 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002E), + /* 34 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002F), + /* 35 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0030), + /* 36 */ ZYDIS_INVALID, + /* 37 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0031), + /* 38 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0002), + /* 39 */ ZYDIS_INVALID, + /* 3A */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0003), + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0081), + /* 41 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0082), + /* 42 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0083), + /* 43 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0084), + /* 44 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0085), + /* 45 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0086), + /* 46 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0087), + /* 47 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0088), + /* 48 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0089), + /* 49 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008A), + /* 4A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008B), + /* 4B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008C), + /* 4C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008D), + /* 4D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008E), + /* 4E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008F), + /* 4F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0090), + /* 50 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0091), + /* 51 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0092), + /* 52 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0093), + /* 53 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0094), + /* 54 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0095), + /* 55 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0096), + /* 56 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0097), + /* 57 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0098), + /* 58 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0099), + /* 59 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009A), + /* 5A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009B), + /* 5B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009C), + /* 5C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009D), + /* 5D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009E), + /* 5E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009F), + /* 5F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A0), + /* 60 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A1), + /* 61 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A2), + /* 62 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A3), + /* 63 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A4), + /* 64 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A5), + /* 65 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A6), + /* 66 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A7), + /* 67 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A8), + /* 68 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A9), + /* 69 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AA), + /* 6A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AB), + /* 6B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AC), + /* 6C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AD), + /* 6D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AE), + /* 6E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AF), + /* 6F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B0), + /* 70 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B1), + /* 71 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B2), + /* 72 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B3), + /* 73 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B4), + /* 74 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B5), + /* 75 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B6), + /* 76 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B7), + /* 77 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B8), + /* 78 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B9), + /* 79 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BA), + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BB), + /* 7D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BC), + /* 7E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BD), + /* 7F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BE), + /* 80 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BF), + /* 81 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C0), + /* 82 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C1), + /* 83 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C2), + /* 84 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C3), + /* 85 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C4), + /* 86 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C5), + /* 87 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C6), + /* 88 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C7), + /* 89 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C8), + /* 8A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C9), + /* 8B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CA), + /* 8C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CB), + /* 8D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CC), + /* 8E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CD), + /* 8F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CE), + /* 90 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CF), + /* 91 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D0), + /* 92 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D1), + /* 93 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D2), + /* 94 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D3), + /* 95 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D4), + /* 96 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D5), + /* 97 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D6), + /* 98 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D7), + /* 99 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D8), + /* 9A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D9), + /* 9B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DA), + /* 9C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DB), + /* 9D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DC), + /* 9E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DD), + /* 9F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DE), + /* A0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DF), + /* A1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E0), + /* A2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E1), + /* A3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E2), + /* A4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E3), + /* A5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E4), + /* A6 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0003), + /* A7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0004), + /* A8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E7), + /* A9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E8), + /* AA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E9), + /* AB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EA), + /* AC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EB), + /* AD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EC), + /* AE */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0005), + /* AF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EF), + /* B0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F0), + /* B1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F1), + /* B2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F2), + /* B3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F3), + /* B4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F4), + /* B5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F5), + /* B6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F6), + /* B7 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F7), + /* B8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F8), + /* B9 */ ZYDIS_INVALID, + /* BA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F9), + /* BB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FA), + /* BC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FB), + /* BD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FC), + /* BE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FD), + /* BF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FE), + /* C0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FF), + /* C1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0100), + /* C2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0101), + /* C3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0102), + /* C4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0103), + /* C5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0104), + /* C6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0105), + /* C7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0006), + /* C8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0108), + /* C9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0109), + /* CA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010A), + /* CB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010B), + /* CC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010C), + /* CD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010D), + /* CE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010E), + /* CF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010F), + /* D0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0110), + /* D1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0111), + /* D2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0112), + /* D3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0113), + /* D4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0114), + /* D5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0115), + /* D6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0116), + /* D7 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0117), + /* D8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0118), + /* D9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0119), + /* DA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011A), + /* DB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011B), + /* DC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011C), + /* DD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011D), + /* DE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011E), + /* DF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011F), + /* E0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0120), + /* E1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0121), + /* E2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0122), + /* E3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0123), + /* E4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0124), + /* E5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0125), + /* E6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0126), + /* E7 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0127), + /* E8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0128), + /* E9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0129), + /* EA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012A), + /* EB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012B), + /* EC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012C), + /* ED */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012D), + /* EE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012E), + /* EF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012F), + /* F0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0130), + /* F1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0131), + /* F2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0132), + /* F3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0133), + /* F4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0134), + /* F5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0135), + /* F6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0136), + /* F7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0007), + /* F8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0138), + /* F9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0139), + /* FA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013A), + /* FB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013B), + /* FC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013C), + /* FD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013D), + /* FE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013E), + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0032), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0033), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0034), + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0035), + /* 04 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0036), + /* 05 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0037), + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0038), + /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0039), + /* 08 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003A), + /* 09 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003B), + /* 0A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003C), + /* 0B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003D), + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003E), + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003F), + /* 15 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0040), + /* 16 */ ZYDIS_INVALID, + /* 17 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0041), + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0042), + /* 1D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0043), + /* 1E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0044), + /* 1F */ ZYDIS_INVALID, + /* 20 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0045), + /* 21 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0046), + /* 22 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0047), + /* 23 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0048), + /* 24 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0049), + /* 25 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004A), + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004B), + /* 29 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004C), + /* 2A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004D), + /* 2B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004E), + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004F), + /* 31 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0050), + /* 32 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0051), + /* 33 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0052), + /* 34 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0053), + /* 35 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0054), + /* 36 */ ZYDIS_INVALID, + /* 37 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0055), + /* 38 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0056), + /* 39 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0057), + /* 3A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0058), + /* 3B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0059), + /* 3C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005A), + /* 3D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005B), + /* 3E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005C), + /* 3F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005D), + /* 40 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005E), + /* 41 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005F), + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0060), + /* 81 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0061), + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0062), + /* DC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0063), + /* DD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0064), + /* DE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0065), + /* DF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0066), + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0067), + /* F1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0068), + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0069), + /* 09 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006A), + /* 0A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006B), + /* 0B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006C), + /* 0C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006D), + /* 0D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006E), + /* 0E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006F), + /* 0F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0070), + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0071), + /* 15 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0072), + /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0073), + /* 17 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0074), + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0075), + /* 21 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0076), + /* 22 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0077), + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0078), + /* 41 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0079), + /* 42 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007A), + /* 43 */ ZYDIS_INVALID, + /* 44 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007B), + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007C), + /* 61 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007D), + /* 62 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007E), + /* 63 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007F), + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0080), + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ 0x05E6, + /* 11 */ 0x05E5, + /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0008), + /* 13 */ 0x05CC, + /* 14 */ 0x0698, + /* 15 */ 0x0696, + /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0009), + /* 17 */ 0x05C7, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x05B8, + /* 29 */ 0x05B7, + /* 2A */ ZYDIS_INVALID, + /* 2B */ 0x05D2, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ 0x0694, + /* 2F */ 0x0581, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ 0x05CE, + /* 51 */ 0x0689, + /* 52 */ 0x0684, + /* 53 */ 0x067E, + /* 54 */ 0x0575, + /* 55 */ 0x0573, + /* 56 */ 0x05F6, + /* 57 */ 0x069A, + /* 58 */ 0x0567, + /* 59 */ 0x05EF, + /* 5A */ 0x0587, + /* 5B */ 0x0583, + /* 5C */ 0x068E, + /* 5D */ 0x05AF, + /* 5E */ 0x0593, + /* 5F */ 0x05A9, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0000), + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000A), + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ 0x057D, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ 0x0687, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ 0x05E4, + /* 11 */ 0x05E3, + /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000B), + /* 13 */ 0x05CA, + /* 14 */ 0x0697, + /* 15 */ 0x0695, + /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000C), + /* 17 */ 0x05C5, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x05B5, + /* 29 */ 0x05B6, + /* 2A */ ZYDIS_INVALID, + /* 2B */ 0x05D1, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ 0x0693, + /* 2F */ 0x0580, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ 0x05CD, + /* 51 */ 0x0688, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ 0x0574, + /* 55 */ 0x0572, + /* 56 */ 0x05F5, + /* 57 */ 0x0699, + /* 58 */ 0x0566, + /* 59 */ 0x05EE, + /* 5A */ 0x0585, + /* 5B */ 0x0586, + /* 5C */ 0x068D, + /* 5D */ 0x05AE, + /* 5E */ 0x0592, + /* 5F */ 0x05A8, + /* 60 */ 0x0679, + /* 61 */ 0x067C, + /* 62 */ 0x067A, + /* 63 */ 0x05FB, + /* 64 */ 0x0614, + /* 65 */ 0x0617, + /* 66 */ 0x0615, + /* 67 */ 0x05FD, + /* 68 */ 0x0675, + /* 69 */ 0x0678, + /* 6A */ 0x0676, + /* 6B */ 0x05FA, + /* 6C */ 0x067B, + /* 6D */ 0x0677, + /* 6E */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0014), + /* 6F */ 0x05BF, + /* 70 */ 0x0654, + /* 71 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001B), + /* 72 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001C), + /* 73 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001D), + /* 74 */ 0x060E, + /* 75 */ 0x0611, + /* 76 */ 0x060F, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ 0x059C, + /* 7D */ 0x059E, + /* 7E */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0015), + /* 7F */ 0x05C0, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ 0x057C, + /* C3 */ ZYDIS_INVALID, + /* C4 */ 0x0630, + /* C5 */ 0x0623, + /* C6 */ 0x0686, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ 0x056A, + /* D1 */ 0x066B, + /* D2 */ 0x0665, + /* D3 */ 0x0669, + /* D4 */ 0x0600, + /* D5 */ 0x0650, + /* D6 */ 0x05D4, + /* D7 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0004), + /* D8 */ 0x0671, + /* D9 */ 0x0672, + /* DA */ 0x063C, + /* DB */ 0x0607, + /* DC */ 0x0603, + /* DD */ 0x0604, + /* DE */ 0x0636, + /* DF */ 0x0608, + /* E0 */ 0x0609, + /* E1 */ 0x0663, + /* E2 */ 0x0662, + /* E3 */ 0x060A, + /* E4 */ 0x064D, + /* E5 */ 0x064E, + /* E6 */ 0x058E, + /* E7 */ 0x05CF, + /* E8 */ 0x066F, + /* E9 */ 0x0670, + /* EA */ 0x063B, + /* EB */ 0x0651, + /* EC */ 0x0601, + /* ED */ 0x0602, + /* EE */ 0x0635, + /* EF */ 0x067D, + /* F0 */ ZYDIS_INVALID, + /* F1 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0005), + /* F2 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0006), + /* F3 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0007), + /* F4 */ ZYDIS_INVALID, + /* F5 */ 0x0632, + /* F6 */ 0x0652, + /* F7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000D), + /* F8 */ 0x066C, + /* F9 */ 0x0673, + /* FA */ 0x066D, + /* FB */ 0x066E, + /* FC */ 0x05FE, + /* FD */ 0x0605, + /* FE */ 0x05FF, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0653, + /* 01 */ 0x0627, + /* 02 */ 0x0625, + /* 03 */ 0x0626, + /* 04 */ 0x0631, + /* 05 */ 0x062B, + /* 06 */ 0x0629, + /* 07 */ 0x062A, + /* 08 */ 0x0657, + /* 09 */ 0x0659, + /* 0A */ 0x0658, + /* 0B */ 0x064C, + /* 0C */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0000), + /* 0D */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0001), + /* 0E */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0002), + /* 0F */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0003), + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ 0x0674, + /* 18 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0004), + /* 19 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0005), + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ 0x05F7, + /* 1D */ 0x05F9, + /* 1E */ 0x05F8, + /* 1F */ ZYDIS_INVALID, + /* 20 */ 0x0642, + /* 21 */ 0x0640, + /* 22 */ 0x0641, + /* 23 */ 0x0643, + /* 24 */ 0x0644, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x064B, + /* 29 */ 0x0610, + /* 2A */ 0x05D0, + /* 2B */ 0x05FC, + /* 2C */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0006), + /* 2D */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0007), + /* 2E */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0008), + /* 2F */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0009), + /* 30 */ 0x0647, + /* 31 */ 0x0645, + /* 32 */ 0x0646, + /* 33 */ 0x0649, + /* 34 */ 0x064A, + /* 35 */ 0x0648, + /* 36 */ ZYDIS_INVALID, + /* 37 */ 0x0616, + /* 38 */ 0x0639, + /* 39 */ 0x063A, + /* 3A */ 0x063E, + /* 3B */ 0x063D, + /* 3C */ 0x0633, + /* 3D */ 0x0634, + /* 3E */ 0x0638, + /* 3F */ 0x0637, + /* 40 */ 0x064F, + /* 41 */ 0x0628, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ 0x0570, + /* DC */ 0x056E, + /* DD */ 0x056F, + /* DE */ 0x056C, + /* DF */ 0x056D, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000A), + /* 05 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000B), + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000C), + /* 07 */ ZYDIS_INVALID, + /* 08 */ 0x0681, + /* 09 */ 0x0680, + /* 0A */ 0x0683, + /* 0B */ 0x0682, + /* 0C */ 0x0577, + /* 0D */ 0x0576, + /* 0E */ 0x060C, + /* 0F */ 0x0606, + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000D), + /* 15 */ 0x0624, + /* 16 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0016), + /* 17 */ 0x059B, + /* 18 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0011), + /* 19 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0012), + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0013), + /* 21 */ 0x05A1, + /* 22 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0025), + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ 0x0597, + /* 41 */ 0x0596, + /* 42 */ 0x05E7, + /* 43 */ ZYDIS_INVALID, + /* 44 */ 0x060D, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0016), + /* 4B */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0017), + /* 4C */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0018), + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ 0x0613, + /* 61 */ 0x0612, + /* 62 */ 0x0619, + /* 63 */ 0x0618, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ 0x0571, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000E), + /* 11 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000F), + /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0010), + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0011), + /* 17 */ ZYDIS_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ 0x058B, + /* 2B */ ZYDIS_INVALID, + /* 2C */ 0x0591, + /* 2D */ 0x058D, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ 0x068B, + /* 52 */ 0x0685, + /* 53 */ 0x067F, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ 0x0569, + /* 59 */ 0x05F1, + /* 5A */ 0x058C, + /* 5B */ 0x058F, + /* 5C */ 0x0690, + /* 5D */ 0x05B1, + /* 5E */ 0x0595, + /* 5F */ 0x05AB, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ 0x05C2, + /* 70 */ 0x0655, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ 0x05D3, + /* 7F */ 0x05C1, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ 0x057F, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ 0x0582, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0012), + /* 11 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0013), + /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0014), + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ 0x058A, + /* 2B */ ZYDIS_INVALID, + /* 2C */ 0x0590, + /* 2D */ 0x0588, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ 0x068A, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ 0x0568, + /* 59 */ 0x05F0, + /* 5A */ 0x0589, + /* 5B */ ZYDIS_INVALID, + /* 5C */ 0x068F, + /* 5D */ 0x05B0, + /* 5E */ 0x0594, + /* 5F */ 0x05AA, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ 0x0656, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ 0x059D, + /* 7D */ 0x059F, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ 0x057E, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ 0x056B, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ 0x0584, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ 0x05A2, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, +}; + +const ZyDisOpcodeTreeNode optreeModrmMod[][2] = +{ + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0001), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0002), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000F), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0010), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0014), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0015), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E5), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E6), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00ED), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EE), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0106), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0107), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0137), + }, + { + /* 00 */ 0x05CB, + /* 01 */ 0x05C3, + }, + { + /* 00 */ 0x05C6, + /* 01 */ 0x05C8, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001A), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05C9, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05C4, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05A3, + }, + { + /* 00 */ 0x05E2, + /* 01 */ 0x05DF, + }, + { + /* 00 */ 0x05E0, + /* 01 */ 0x05E1, + }, + { + /* 00 */ 0x05DE, + /* 01 */ 0x05DD, + }, + { + /* 00 */ 0x05DB, + /* 01 */ 0x05DC, + }, + { + /* 00 */ 0x05DA, + /* 01 */ 0x05D9, + }, + { + /* 00 */ 0x05D8, + /* 01 */ 0x05D7, + }, + { + /* 00 */ 0x05BE, + /* 01 */ 0x05BD, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0024), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0000), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0025), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0001), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0026), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0002), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0027), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0003), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0028), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0004), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0029), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0005), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002A), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0006), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002B), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0007), + }, +}; + +const ZyDisOpcodeTreeNode optreeModrmReg[][8] = +{ + { + /* 00 */ 0x0531, + /* 01 */ 0x0541, + /* 02 */ 0x02FC, + /* 03 */ 0x0309, + /* 04 */ 0x0598, + /* 05 */ 0x0599, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0516, + /* 01 */ 0x052F, + /* 02 */ 0x02F9, + /* 03 */ 0x02FB, + /* 04 */ 0x0533, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x02FE, + /* 07 */ 0x02C0, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0000), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0001), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0002), + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0003), + /* 04 */ 0x0532, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x02FD, + /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0004), + }, + { + /* 00 */ 0x0455, + /* 01 */ 0x0456, + /* 02 */ 0x0457, + /* 03 */ 0x0458, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0486, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0479, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x0470, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0485, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0478, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x0473, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x047E, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0475, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x0468, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x047C, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0476, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x046A, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0482, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x046D, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0481, + /* 03 */ 0x0480, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x046C, + /* 07 */ 0x046B, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0005), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0006), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0007), + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0008), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0009), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x000A), + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x000B), + /* 04 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x000C), + /* 05 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x000D), + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0296, + /* 01 */ 0x0295, + /* 02 */ 0x02F2, + /* 03 */ 0x053C, + /* 04 */ 0x06C0, + /* 05 */ 0x06BF, + /* 06 */ ZYDIS_INVALID, + /* 07 */ 0x0055, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ 0x02F7, + /* 06 */ 0x0310, + /* 07 */ 0x0515, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0043, + /* 05 */ 0x0049, + /* 06 */ 0x0047, + /* 07 */ 0x0045, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0006), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0015), + /* 07 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0016), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0017), + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0018), + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x04D3, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x000F, + /* 01 */ 0x0392, + /* 02 */ 0x0005, + /* 03 */ 0x04FF, + /* 04 */ 0x0028, + /* 05 */ 0x0544, + /* 06 */ 0x06BC, + /* 07 */ 0x006E, + }, + { + /* 00 */ 0x0013, + /* 01 */ 0x0391, + /* 02 */ 0x0009, + /* 03 */ 0x0500, + /* 04 */ 0x0029, + /* 05 */ 0x0543, + /* 06 */ 0x06B5, + /* 07 */ 0x0072, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0015), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0016), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0017), + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0018), + /* 04 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0019), + /* 05 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001A), + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001B), + /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001C), + }, + { + /* 00 */ 0x0012, + /* 01 */ 0x0397, + /* 02 */ 0x0008, + /* 03 */ 0x04FD, + /* 04 */ 0x002B, + /* 05 */ 0x0545, + /* 06 */ 0x06B4, + /* 07 */ 0x0071, + }, + { + /* 00 */ 0x0440, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04DE, + /* 01 */ 0x04E6, + /* 02 */ 0x04C6, + /* 03 */ 0x04D0, + /* 04 */ 0x0517, + /* 05 */ 0x0526, + /* 06 */ 0x051D, + /* 07 */ 0x04F3, + }, + { + /* 00 */ 0x04DF, + /* 01 */ 0x04E7, + /* 02 */ 0x04C7, + /* 03 */ 0x04CE, + /* 04 */ 0x051C, + /* 05 */ 0x0528, + /* 06 */ 0x051E, + /* 07 */ 0x04F6, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x068C, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x066A, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0664, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0001), + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0666, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0661, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0002), + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0668, + /* 03 */ 0x0667, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0003), + /* 07 */ 0x065C, + }, + { + /* 00 */ 0x0333, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0332, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04DD, + /* 01 */ 0x04E5, + /* 02 */ 0x04C8, + /* 03 */ 0x04CD, + /* 04 */ 0x0522, + /* 05 */ 0x0527, + /* 06 */ 0x051F, + /* 07 */ 0x04F1, + }, + { + /* 00 */ 0x04DC, + /* 01 */ 0x04E2, + /* 02 */ 0x04C5, + /* 03 */ 0x04CF, + /* 04 */ 0x0520, + /* 05 */ 0x052A, + /* 06 */ 0x0519, + /* 07 */ 0x04F4, + }, + { + /* 00 */ 0x04E1, + /* 01 */ 0x04E3, + /* 02 */ 0x04C3, + /* 03 */ 0x04CC, + /* 04 */ 0x0521, + /* 05 */ 0x0529, + /* 06 */ 0x051A, + /* 07 */ 0x04F2, + }, + { + /* 00 */ 0x04E0, + /* 01 */ 0x04E4, + /* 02 */ 0x04C4, + /* 03 */ 0x04CB, + /* 04 */ 0x0518, + /* 05 */ 0x0525, + /* 06 */ 0x051B, + /* 07 */ 0x04F5, + }, + { + /* 00 */ 0x00BB, + /* 01 */ 0x01CF, + /* 02 */ 0x0119, + /* 03 */ 0x013D, + /* 04 */ 0x022C, + /* 05 */ 0x0245, + /* 06 */ 0x0166, + /* 07 */ 0x0171, + }, + { + /* 00 */ 0x01BC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x01FF, + /* 03 */ 0x020B, + /* 04 */ 0x01C3, + /* 05 */ 0x01C2, + /* 06 */ 0x01EB, + /* 07 */ 0x01EA, + }, + { + /* 00 */ 0x019A, + /* 01 */ 0x01A8, + /* 02 */ 0x019C, + /* 03 */ 0x019F, + /* 04 */ 0x01B3, + /* 05 */ 0x01B5, + /* 06 */ 0x01A1, + /* 07 */ 0x01A3, + }, + { + /* 00 */ 0x01A4, + /* 01 */ 0x01B1, + /* 02 */ 0x01AB, + /* 03 */ 0x01AD, + /* 04 */ ZYDIS_INVALID, + /* 05 */ 0x01BA, + /* 06 */ ZYDIS_INVALID, + /* 07 */ 0x020A, + }, + { + /* 00 */ 0x00BA, + /* 01 */ 0x01D2, + /* 02 */ 0x0118, + /* 03 */ 0x013E, + /* 04 */ 0x022B, + /* 05 */ 0x0243, + /* 06 */ 0x0158, + /* 07 */ 0x017A, + }, + { + /* 00 */ 0x01BB, + /* 01 */ 0x01AF, + /* 02 */ 0x01FE, + /* 03 */ 0x0209, + /* 04 */ 0x01F3, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x01E8, + /* 07 */ 0x01ED, + }, + { + /* 00 */ 0x019B, + /* 01 */ 0x01A7, + /* 02 */ 0x019D, + /* 03 */ 0x019E, + /* 04 */ 0x01B2, + /* 05 */ 0x01B4, + /* 06 */ 0x01A0, + /* 07 */ 0x01A2, + }, + { + /* 00 */ 0x01A6, + /* 01 */ 0x01B0, + /* 02 */ 0x01AA, + /* 03 */ 0x01AE, + /* 04 */ 0x00D2, + /* 05 */ 0x01A5, + /* 06 */ 0x00D3, + /* 07 */ 0x01AC, + }, + { + /* 00 */ 0x0557, + /* 01 */ 0x0558, + /* 02 */ 0x038E, + /* 03 */ 0x0385, + /* 04 */ 0x037E, + /* 05 */ 0x02A5, + /* 06 */ 0x00AC, + /* 07 */ 0x02A0, + }, + { + /* 00 */ 0x0559, + /* 01 */ 0x055A, + /* 02 */ 0x038D, + /* 03 */ 0x0384, + /* 04 */ 0x037D, + /* 05 */ 0x02A3, + /* 06 */ 0x00AB, + /* 07 */ 0x02A1, + }, + { + /* 00 */ 0x02AF, + /* 01 */ 0x00A4, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02B0, + /* 01 */ 0x00A5, + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x002C), + /* 03 */ 0x004C, + /* 04 */ 0x02D9, + /* 05 */ 0x02DA, + /* 06 */ 0x04B8, + /* 07 */ ZYDIS_INVALID, + }, +}; + +const ZyDisOpcodeTreeNode optreeModrmRm[][8] = +{ + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0000), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0001), + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0002), + /* 04 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0003), + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0315, + /* 01 */ 0x0383, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06B1, + /* 01 */ 0x06C1, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0004), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0005), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0006), + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0007), + /* 04 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0008), + /* 05 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0009), + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000A), + /* 07 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000B), + }, + { + /* 00 */ 0x0550, + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000C), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0316, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06C2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06C3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06C4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06AF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06AC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06AE, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06AD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06B0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, +}; + +const ZyDisOpcodeTreeNode optreeMandatory[][4] = +{ + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0000), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0001), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0002), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02F0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0307, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0551, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0058, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0556, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02BD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x069E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0561, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0454, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0189, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0379, + /* 01 */ 0x0368, + /* 02 */ 0x0371, + /* 03 */ 0x0377, + }, + { + /* 00 */ 0x0378, + /* 01 */ 0x036A, + /* 02 */ 0x0370, + /* 03 */ 0x0376, + }, + { + /* 00 */ 0x0355, + /* 01 */ 0x0345, + /* 02 */ 0x036D, + /* 03 */ 0x0353, + }, + { + /* 00 */ 0x034C, + /* 01 */ 0x0346, + /* 02 */ 0x036E, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0354, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0352, + }, + { + /* 00 */ 0x0565, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0564, + }, + { + /* 00 */ 0x0563, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0562, + }, + { + /* 00 */ 0x0350, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x036B, + /* 03 */ 0x034E, + }, + { + /* 00 */ 0x0351, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x036C, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x034F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x034D, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0003), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x038A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x038B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x038C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0389, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0386, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0387, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0388, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0325, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0328, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0327, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0326, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x033A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0338, + }, + { + /* 00 */ 0x0339, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0337, + }, + { + /* 00 */ 0x008D, + /* 01 */ 0x0093, + /* 02 */ 0x0094, + /* 03 */ 0x008C, + }, + { + /* 00 */ 0x035C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x035B, + }, + { + /* 00 */ 0x009A, + /* 01 */ 0x009B, + /* 02 */ 0x009C, + /* 03 */ 0x0098, + }, + { + /* 00 */ 0x0090, + /* 01 */ 0x0091, + /* 02 */ 0x0096, + /* 03 */ 0x008A, + }, + { + /* 00 */ 0x0560, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x055F, + }, + { + /* 00 */ 0x0082, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0081, + }, + { + /* 00 */ 0x069F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04D4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04D1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04D2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0003), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0004), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x029A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x045B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x045C, + }, + { + /* 00 */ 0x03FD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03FE, + }, + { + /* 00 */ 0x03FA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03F9, + }, + { + /* 00 */ 0x03FB, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03FC, + }, + { + /* 00 */ 0x040E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x040F, + }, + { + /* 00 */ 0x0405, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0404, + }, + { + /* 00 */ 0x0400, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0401, + }, + { + /* 00 */ 0x0402, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0403, + }, + { + /* 00 */ 0x0461, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0462, + }, + { + /* 00 */ 0x0466, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0465, + }, + { + /* 00 */ 0x0464, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0463, + }, + { + /* 00 */ 0x0431, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0432, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CA, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0037, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0036, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x049A, + }, + { + /* 00 */ 0x03A3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03A2, + }, + { + /* 00 */ 0x03A6, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03A7, + }, + { + /* 00 */ 0x03A4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03A5, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0426, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0424, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0425, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0428, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0429, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0427, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0430, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D1, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0359, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03AC, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042C, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042B, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042E, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042F, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042D, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DA, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x041A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x041B, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0421, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0420, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0412, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0413, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0419, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0418, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0438, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03FF, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0005), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0006), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0023, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0021, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0022, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x001F, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0020, + }, + { + /* 00 */ 0x033B, + /* 01 */ 0x0086, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x033C, + /* 01 */ 0x0085, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04E9, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04E8, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04EB, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04EA, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0035, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0034, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CB, + }, + { + /* 00 */ 0x03BF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C0, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DF, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03E3, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0000), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x00B5, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0408, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x02B7, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0001), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x00B2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x00B1, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x037C, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CC, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D5, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D4, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DE, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DD, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0024, + }, + { + /* 00 */ 0x0067, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0064, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0063, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0069, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0066, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0068, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0065, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0061, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0060, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0062, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0357, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0356, + }, + { + /* 00 */ 0x0535, + /* 01 */ 0x0536, + /* 02 */ 0x0537, + /* 03 */ 0x0534, + }, + { + /* 00 */ 0x04ED, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x04EE, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04C9, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x04CA, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0032, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0031, + }, + { + /* 00 */ 0x0030, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x002F, + }, + { + /* 00 */ 0x039A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0399, + }, + { + /* 00 */ 0x06BE, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x06BD, + }, + { + /* 00 */ 0x001A, + /* 01 */ 0x001B, + /* 02 */ 0x001C, + /* 03 */ 0x0019, + }, + { + /* 00 */ 0x0380, + /* 01 */ 0x0381, + /* 02 */ 0x0382, + /* 03 */ 0x037F, + }, + { + /* 00 */ 0x008F, + /* 01 */ 0x0092, + /* 02 */ 0x0095, + /* 03 */ 0x008B, + }, + { + /* 00 */ 0x0088, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0099, + /* 03 */ 0x008E, + }, + { + /* 00 */ 0x054D, + /* 01 */ 0x054E, + /* 02 */ 0x054F, + /* 03 */ 0x054C, + }, + { + /* 00 */ 0x0312, + /* 01 */ 0x0313, + /* 02 */ 0x0314, + /* 03 */ 0x0311, + }, + { + /* 00 */ 0x00AE, + /* 01 */ 0x00AF, + /* 02 */ 0x00B0, + /* 03 */ 0x00AD, + }, + { + /* 00 */ 0x030D, + /* 01 */ 0x030E, + /* 02 */ 0x030F, + /* 03 */ 0x030C, + }, + { + /* 00 */ 0x04A2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A3, + }, + { + /* 00 */ 0x04A7, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A8, + }, + { + /* 00 */ 0x04A5, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A4, + }, + { + /* 00 */ 0x03AA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03AB, + }, + { + /* 00 */ 0x03D7, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D6, + }, + { + /* 00 */ 0x03DC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DB, + }, + { + /* 00 */ 0x03D8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D9, + }, + { + /* 00 */ 0x03AD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03AE, + }, + { + /* 00 */ 0x049B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x049C, + }, + { + /* 00 */ 0x04A1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A0, + }, + { + /* 00 */ 0x049E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x049D, + }, + { + /* 00 */ 0x03A8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03A9, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A6, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x049F, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0002), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0003), + }, + { + /* 00 */ 0x0363, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x034A, + /* 03 */ 0x0348, + }, + { + /* 00 */ 0x0460, + /* 01 */ 0x045F, + /* 02 */ 0x045E, + /* 03 */ 0x045D, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0004), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0005), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0006), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0007), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0008), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0009), + }, + { + /* 00 */ 0x03CD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CE, + }, + { + /* 00 */ 0x03D2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D3, + }, + { + /* 00 */ 0x03D0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CF, + }, + { + /* 00 */ 0x00B3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0013), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0014), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x029C, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x029B, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x029F, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x029E, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0004), + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x035F, + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0005), + }, + { + /* 00 */ 0x0362, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x034B, + /* 03 */ 0x0349, + }, + { + /* 00 */ 0x02E9, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02E3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02C9, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02DF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02CF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02E0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02CC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02C8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02EE, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02E7, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02EA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02E4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02D6, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02D4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02D7, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02D2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0512, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0507, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0506, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0509, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0508, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0505, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0514, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0511, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0513, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0510, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04B5, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x044A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0083, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0044, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0524, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0523, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000A), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000B), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04B6, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0444, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04EC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x004A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x052C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x052B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000C), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000D), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02A2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x007C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x007D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0308, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0048, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02F8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02FA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x037B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x037A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x044D, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000E), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0046, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0039, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0373, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0374, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06A1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06A0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0075, + /* 01 */ 0x0077, + /* 02 */ 0x007A, + /* 03 */ 0x0074, + }, + { + /* 00 */ 0x035A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x040D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x040C, + }, + { + /* 00 */ 0x03E4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03E5, + }, + { + /* 00 */ 0x052E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x052D, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000F), + /* 01 */ ZYDIS_INVALID, + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0010), + /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0011), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0012), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0040, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0042, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0041, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x001E, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x001D, + }, + { + /* 00 */ 0x0487, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0488, + }, + { + /* 00 */ 0x047D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x047F, + }, + { + /* 00 */ 0x0483, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0484, + }, + { + /* 00 */ 0x03B3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B4, + }, + { + /* 00 */ 0x0439, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x043A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0347, + /* 02 */ 0x0366, + /* 03 */ 0x0361, + }, + { + /* 00 */ 0x0422, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0423, + }, + { + /* 00 */ 0x0494, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0493, + }, + { + /* 00 */ 0x0496, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0495, + }, + { + /* 00 */ 0x041E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x041F, + }, + { + /* 00 */ 0x03C1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C2, + }, + { + /* 00 */ 0x03BA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B9, + }, + { + /* 00 */ 0x03BB, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03BC, + }, + { + /* 00 */ 0x0417, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0416, + }, + { + /* 00 */ 0x03C3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C4, + }, + { + /* 00 */ 0x03C5, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C6, + }, + { + /* 00 */ 0x047A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x047B, + }, + { + /* 00 */ 0x0477, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0474, + }, + { + /* 00 */ 0x03C8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C9, + }, + { + /* 00 */ 0x0434, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0435, + }, + { + /* 00 */ 0x0436, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0437, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0089, + /* 02 */ 0x0087, + /* 03 */ 0x0097, + }, + { + /* 00 */ 0x035D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0358, + }, + { + /* 00 */ 0x048F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0490, + }, + { + /* 00 */ 0x0492, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0491, + }, + { + /* 00 */ 0x041C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x041D, + }, + { + /* 00 */ 0x0453, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0452, + }, + { + /* 00 */ 0x03B6, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B5, + }, + { + /* 00 */ 0x03B8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B7, + }, + { + /* 00 */ 0x0414, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0415, + }, + { + /* 00 */ 0x04C1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04C2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02F1, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0472, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0471, + }, + { + /* 00 */ 0x0469, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0467, + }, + { + /* 00 */ 0x046E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x046F, + }, + { + /* 00 */ 0x043B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x043C, + }, + { + /* 00 */ 0x0411, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0410, + }, + { + /* 00 */ 0x045A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0459, + }, + { + /* 00 */ 0x030B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x030A, + }, + { + /* 00 */ 0x0489, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x048A, + }, + { + /* 00 */ 0x0498, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0497, + }, + { + /* 00 */ 0x048B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x048C, + }, + { + /* 00 */ 0x048D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x048E, + }, + { + /* 00 */ 0x03AF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B0, + }, + { + /* 00 */ 0x03BE, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03BD, + }, + { + /* 00 */ 0x03B1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B2, + }, +}; + +const ZyDisOpcodeTreeNode optreeX87[][64] = +{ + { + /* 00 */ 0x00BC, + /* 01 */ 0x00BF, + /* 02 */ 0x00C2, + /* 03 */ 0x00C1, + /* 04 */ 0x00C0, + /* 05 */ 0x00C5, + /* 06 */ 0x00C3, + /* 07 */ 0x00C4, + /* 08 */ 0x01CE, + /* 09 */ 0x01CD, + /* 0A */ 0x01D9, + /* 0B */ 0x01DA, + /* 0C */ 0x01DB, + /* 0D */ 0x01D6, + /* 0E */ 0x01D7, + /* 0F */ 0x01D8, + /* 10 */ 0x011A, + /* 11 */ 0x011C, + /* 12 */ 0x011B, + /* 13 */ 0x0117, + /* 14 */ 0x0116, + /* 15 */ 0x011D, + /* 16 */ 0x011F, + /* 17 */ 0x011E, + /* 18 */ 0x013A, + /* 19 */ 0x0141, + /* 1A */ 0x013C, + /* 1B */ 0x0138, + /* 1C */ 0x013B, + /* 1D */ 0x0140, + /* 1E */ 0x013F, + /* 1F */ 0x0139, + /* 20 */ 0x022E, + /* 21 */ 0x0226, + /* 22 */ 0x0229, + /* 23 */ 0x0232, + /* 24 */ 0x0231, + /* 25 */ 0x022D, + /* 26 */ 0x022A, + /* 27 */ 0x0227, + /* 28 */ 0x0246, + /* 29 */ 0x024B, + /* 2A */ 0x024C, + /* 2B */ 0x024A, + /* 2C */ 0x0248, + /* 2D */ 0x0249, + /* 2E */ 0x0250, + /* 2F */ 0x0251, + /* 30 */ 0x0161, + /* 31 */ 0x0162, + /* 32 */ 0x0155, + /* 33 */ 0x015A, + /* 34 */ 0x0159, + /* 35 */ 0x0156, + /* 36 */ 0x0157, + /* 37 */ 0x0163, + /* 38 */ 0x0172, + /* 39 */ 0x016F, + /* 3A */ 0x0170, + /* 3B */ 0x0173, + /* 3C */ 0x0176, + /* 3D */ 0x0177, + /* 3E */ 0x0174, + /* 3F */ 0x0175, + }, + { + /* 00 */ 0x01BD, + /* 01 */ 0x01C0, + /* 02 */ 0x01BF, + /* 03 */ 0x01BE, + /* 04 */ 0x01B7, + /* 05 */ 0x01B6, + /* 06 */ 0x01B9, + /* 07 */ 0x01B8, + /* 08 */ 0x0281, + /* 09 */ 0x0282, + /* 0A */ 0x0283, + /* 0B */ 0x0280, + /* 0C */ 0x027D, + /* 0D */ 0x027E, + /* 0E */ 0x027F, + /* 0F */ 0x0284, + /* 10 */ 0x01E7, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_INVALID, + /* 18 */ 0x0213, + /* 19 */ 0x0212, + /* 1A */ 0x0215, + /* 1B */ 0x0214, + /* 1C */ 0x020F, + /* 1D */ 0x020E, + /* 1E */ 0x0211, + /* 1F */ 0x0210, + /* 20 */ 0x00D4, + /* 21 */ 0x00B7, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ 0x025A, + /* 25 */ 0x027C, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x01C1, + /* 29 */ 0x01C5, + /* 2A */ 0x01C4, + /* 2B */ 0x01C8, + /* 2C */ 0x01C6, + /* 2D */ 0x01C7, + /* 2E */ 0x01C9, + /* 2F */ ZYDIS_INVALID, + /* 30 */ 0x00B6, + /* 31 */ 0x0298, + /* 32 */ 0x01F1, + /* 33 */ 0x01EE, + /* 34 */ 0x0297, + /* 35 */ 0x01F0, + /* 36 */ 0x0154, + /* 37 */ 0x01A9, + /* 38 */ 0x01EF, + /* 39 */ 0x0299, + /* 3A */ 0x01F8, + /* 3B */ 0x01F7, + /* 3C */ 0x01F2, + /* 3D */ 0x01F5, + /* 3E */ 0x01F6, + /* 3F */ 0x0153, + }, + { + /* 00 */ 0x00D9, + /* 01 */ 0x00DA, + /* 02 */ 0x00DB, + /* 03 */ 0x00D6, + /* 04 */ 0x00D7, + /* 05 */ 0x00D8, + /* 06 */ 0x00DD, + /* 07 */ 0x00DC, + /* 08 */ 0x00E6, + /* 09 */ 0x00E7, + /* 0A */ 0x00E8, + /* 0B */ 0x00EC, + /* 0C */ 0x00ED, + /* 0D */ 0x00EB, + /* 0E */ 0x00E9, + /* 0F */ 0x00EA, + /* 10 */ 0x00E4, + /* 11 */ 0x00E5, + /* 12 */ 0x00E2, + /* 13 */ 0x00E3, + /* 14 */ 0x00DF, + /* 15 */ 0x00DE, + /* 16 */ 0x00E0, + /* 17 */ 0x00E1, + /* 18 */ 0x0113, + /* 19 */ 0x0114, + /* 1A */ 0x0115, + /* 1B */ 0x010F, + /* 1C */ 0x010E, + /* 1D */ 0x0110, + /* 1E */ 0x0111, + /* 1F */ 0x0112, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ 0x027B, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x00F0, + /* 01 */ 0x00F1, + /* 02 */ 0x00EE, + /* 03 */ 0x00EF, + /* 04 */ 0x00F4, + /* 05 */ 0x00F5, + /* 06 */ 0x00F2, + /* 07 */ 0x00F3, + /* 08 */ 0x0103, + /* 09 */ 0x0102, + /* 0A */ 0x0105, + /* 0B */ 0x0104, + /* 0C */ 0x00FF, + /* 0D */ 0x00FE, + /* 0E */ 0x0101, + /* 0F */ 0x0100, + /* 10 */ 0x00F8, + /* 11 */ 0x00F9, + /* 12 */ 0x00F6, + /* 13 */ 0x00F7, + /* 14 */ 0x00FC, + /* 15 */ 0x00FD, + /* 16 */ 0x00FA, + /* 17 */ 0x00FB, + /* 18 */ 0x010B, + /* 19 */ 0x010A, + /* 1A */ 0x010D, + /* 1B */ 0x010C, + /* 1C */ 0x0107, + /* 1D */ 0x0106, + /* 1E */ 0x0109, + /* 1F */ 0x0108, + /* 20 */ 0x01E5, + /* 21 */ 0x01E4, + /* 22 */ 0x00D5, + /* 23 */ 0x01E6, + /* 24 */ 0x01E9, + /* 25 */ 0x01F4, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x0269, + /* 29 */ 0x026A, + /* 2A */ 0x0265, + /* 2B */ 0x0264, + /* 2C */ 0x0263, + /* 2D */ 0x0268, + /* 2E */ 0x0267, + /* 2F */ 0x0266, + /* 30 */ 0x0129, + /* 31 */ 0x0128, + /* 32 */ 0x012B, + /* 33 */ 0x012A, + /* 34 */ 0x012F, + /* 35 */ 0x012E, + /* 36 */ 0x012D, + /* 37 */ 0x012C, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x00B9, + /* 01 */ 0x00B8, + /* 02 */ 0x00C6, + /* 03 */ 0x00C9, + /* 04 */ 0x00C8, + /* 05 */ 0x00C7, + /* 06 */ 0x00BE, + /* 07 */ 0x00BD, + /* 08 */ 0x01D1, + /* 09 */ 0x01D0, + /* 0A */ 0x01D5, + /* 0B */ 0x01D4, + /* 0C */ 0x01D3, + /* 0D */ 0x01CC, + /* 0E */ 0x01CB, + /* 0F */ 0x01CA, + /* 10 */ 0x0125, + /* 11 */ 0x0124, + /* 12 */ 0x0127, + /* 13 */ 0x0126, + /* 14 */ 0x0121, + /* 15 */ 0x0120, + /* 16 */ 0x0123, + /* 17 */ 0x0122, + /* 18 */ 0x0148, + /* 19 */ 0x0142, + /* 1A */ 0x0145, + /* 1B */ 0x0144, + /* 1C */ 0x0143, + /* 1D */ 0x0147, + /* 1E */ 0x0146, + /* 1F */ 0x0149, + /* 20 */ 0x024F, + /* 21 */ 0x0247, + /* 22 */ 0x0241, + /* 23 */ 0x0242, + /* 24 */ 0x0240, + /* 25 */ 0x024E, + /* 26 */ 0x024D, + /* 27 */ 0x0244, + /* 28 */ 0x0228, + /* 29 */ 0x0235, + /* 2A */ 0x0234, + /* 2B */ 0x0237, + /* 2C */ 0x0236, + /* 2D */ 0x0233, + /* 2E */ 0x0230, + /* 2F */ 0x022F, + /* 30 */ 0x017B, + /* 31 */ 0x0178, + /* 32 */ 0x0179, + /* 33 */ 0x017C, + /* 34 */ 0x017F, + /* 35 */ 0x0180, + /* 36 */ 0x017D, + /* 37 */ 0x017E, + /* 38 */ 0x015E, + /* 39 */ 0x015F, + /* 3A */ 0x0160, + /* 3B */ 0x015B, + /* 3C */ 0x015C, + /* 3D */ 0x015D, + /* 3E */ 0x0164, + /* 3F */ 0x0165, + }, + { + /* 00 */ 0x018F, + /* 01 */ 0x018E, + /* 02 */ 0x0191, + /* 03 */ 0x0190, + /* 04 */ 0x018B, + /* 05 */ 0x018A, + /* 06 */ 0x018D, + /* 07 */ 0x018C, + /* 08 */ 0x028A, + /* 09 */ 0x0289, + /* 0A */ 0x028C, + /* 0B */ 0x028B, + /* 0C */ 0x0286, + /* 0D */ 0x0285, + /* 0E */ 0x0288, + /* 0F */ 0x0287, + /* 10 */ 0x0200, + /* 11 */ 0x0202, + /* 12 */ 0x0201, + /* 13 */ 0x01FA, + /* 14 */ 0x01F9, + /* 15 */ 0x01FB, + /* 16 */ 0x01FD, + /* 17 */ 0x01FC, + /* 18 */ 0x020D, + /* 19 */ 0x020C, + /* 1A */ 0x0208, + /* 1B */ 0x0204, + /* 1C */ 0x0203, + /* 1D */ 0x0205, + /* 1E */ 0x0207, + /* 1F */ 0x0206, + /* 20 */ 0x025D, + /* 21 */ 0x025C, + /* 22 */ 0x025B, + /* 23 */ 0x025E, + /* 24 */ 0x0261, + /* 25 */ 0x0262, + /* 26 */ 0x025F, + /* 27 */ 0x0260, + /* 28 */ 0x0278, + /* 29 */ 0x0277, + /* 2A */ 0x027A, + /* 2B */ 0x0279, + /* 2C */ 0x0274, + /* 2D */ 0x0273, + /* 2E */ 0x0276, + /* 2F */ 0x0275, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x00CC, + /* 01 */ 0x00CD, + /* 02 */ 0x00CA, + /* 03 */ 0x00CB, + /* 04 */ 0x00D0, + /* 05 */ 0x00D1, + /* 06 */ 0x00CE, + /* 07 */ 0x00CF, + /* 08 */ 0x01E1, + /* 09 */ 0x01E0, + /* 0A */ 0x01E3, + /* 0B */ 0x01E2, + /* 0C */ 0x01DD, + /* 0D */ 0x01DC, + /* 0E */ 0x01DF, + /* 0F */ 0x01DE, + /* 10 */ 0x014F, + /* 11 */ 0x014E, + /* 12 */ 0x0151, + /* 13 */ 0x0150, + /* 14 */ 0x014B, + /* 15 */ 0x014A, + /* 16 */ 0x014D, + /* 17 */ 0x014C, + /* 18 */ ZYDIS_INVALID, + /* 19 */ 0x0152, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ 0x0258, + /* 21 */ 0x0259, + /* 22 */ 0x0256, + /* 23 */ 0x0257, + /* 24 */ 0x0253, + /* 25 */ 0x0252, + /* 26 */ 0x0255, + /* 27 */ 0x0254, + /* 28 */ 0x023B, + /* 29 */ 0x023D, + /* 2A */ 0x023C, + /* 2B */ 0x0239, + /* 2C */ 0x0238, + /* 2D */ 0x023A, + /* 2E */ 0x023E, + /* 2F */ 0x023F, + /* 30 */ 0x0186, + /* 31 */ 0x0185, + /* 32 */ 0x0188, + /* 33 */ 0x0187, + /* 34 */ 0x0182, + /* 35 */ 0x0181, + /* 36 */ 0x0184, + /* 37 */ 0x0183, + /* 38 */ 0x016C, + /* 39 */ 0x016B, + /* 3A */ 0x016E, + /* 3B */ 0x016D, + /* 3C */ 0x0168, + /* 3D */ 0x0167, + /* 3E */ 0x016A, + /* 3F */ 0x0169, + }, + { + /* 00 */ 0x0199, + /* 01 */ 0x0196, + /* 02 */ 0x0197, + /* 03 */ 0x0198, + /* 04 */ 0x0193, + /* 05 */ 0x0192, + /* 06 */ 0x0195, + /* 07 */ 0x0194, + /* 08 */ 0x028F, + /* 09 */ 0x0290, + /* 0A */ 0x028D, + /* 0B */ 0x028E, + /* 0C */ 0x0293, + /* 0D */ 0x0294, + /* 0E */ 0x0291, + /* 0F */ 0x0292, + /* 10 */ 0x021B, + /* 11 */ 0x021A, + /* 12 */ 0x021D, + /* 13 */ 0x021C, + /* 14 */ 0x0217, + /* 15 */ 0x0216, + /* 16 */ 0x0219, + /* 17 */ 0x0218, + /* 18 */ 0x0220, + /* 19 */ 0x0221, + /* 1A */ 0x021E, + /* 1B */ 0x021F, + /* 1C */ 0x0224, + /* 1D */ 0x0225, + /* 1E */ 0x0222, + /* 1F */ 0x0223, + /* 20 */ 0x01EC, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x0271, + /* 29 */ 0x0272, + /* 2A */ 0x026D, + /* 2B */ 0x026C, + /* 2C */ 0x026B, + /* 2D */ 0x0270, + /* 2E */ 0x026F, + /* 2F */ 0x026E, + /* 30 */ 0x0136, + /* 31 */ 0x0137, + /* 32 */ 0x0133, + /* 33 */ 0x0134, + /* 34 */ 0x0135, + /* 35 */ 0x0130, + /* 36 */ 0x0131, + /* 37 */ 0x0132, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + }, +}; + +const ZyDisOpcodeTreeNode optreeAddressSize[][3] = +{ + { + /* 00 */ 0x02CD, + /* 01 */ 0x02D0, + /* 02 */ 0x02EC, + }, +}; + +const ZyDisOpcodeTreeNode optreeOperandSize[][3] = +{ + { + /* 00 */ 0x03E0, + /* 01 */ 0x03E1, + /* 02 */ 0x03E2, + }, + { + /* 00 */ 0x0409, + /* 01 */ 0x040A, + /* 02 */ 0x040B, + }, + { + /* 00 */ 0x033D, + /* 01 */ 0x0343, + /* 02 */ 0x035E, + }, + { + /* 00 */ 0x0341, + /* 01 */ 0x0342, + /* 02 */ 0x0364, + }, + { + /* 00 */ 0x0344, + /* 01 */ 0x033E, + /* 02 */ 0x0365, + }, + { + /* 00 */ 0x0340, + /* 01 */ 0x033F, + /* 02 */ 0x0360, + }, + { + /* 00 */ 0x007F, + /* 01 */ 0x0080, + /* 02 */ 0x007E, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000F), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0010), + /* 02 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0011), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0012), + /* 02 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02B8, + /* 01 */ 0x02B6, + /* 02 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x03A1, + /* 01 */ 0x03A0, + /* 02 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0050, + /* 01 */ 0x009E, + /* 02 */ 0x0052, + }, + { + /* 00 */ 0x009D, + /* 01 */ 0x0051, + /* 02 */ 0x0084, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001E), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001F), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0020), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0021), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0022), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0023), + }, + { + /* 00 */ 0x0372, + /* 01 */ 0x0369, + /* 02 */ 0x036F, + }, + { + /* 00 */ 0x007B, + /* 01 */ 0x0078, + /* 02 */ 0x0079, + }, + { + /* 00 */ 0x0540, + /* 01 */ 0x053E, + /* 02 */ 0x053F, + }, + { + /* 00 */ 0x0303, + /* 01 */ 0x0301, + /* 02 */ 0x0302, + }, + { + /* 00 */ 0x0504, + /* 01 */ 0x0502, + /* 02 */ 0x0503, + }, + { + /* 00 */ 0x05BB, + /* 01 */ 0x05BA, + /* 02 */ 0x05D5, + }, + { + /* 00 */ 0x05B9, + /* 01 */ 0x05BC, + /* 02 */ 0x05D6, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000E), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000F), + /* 02 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0010), + }, + { + /* 00 */ 0x02C6, + /* 01 */ 0x02C4, + /* 02 */ 0x02C5, + }, +}; + +const ZyDisOpcodeTreeNode optreeMode[][2] = +{ + { + /* 00 */ 0x04AA, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0445, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04AD, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0553, + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000D), + }, + { + /* 00 */ 0x0555, + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000E), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000F), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0010), + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0011), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0012), + }, + { + /* 00 */ 0x04AC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0446, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04A9, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0443, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x009F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x00A0, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0001, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0004, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04BA, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04BB, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x044B, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x044C, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0038, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0033, + /* 01 */ 0x0375, + }, + { + /* 00 */ 0x0011, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0398, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0007, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04FC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x002A, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0546, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06B3, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0073, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x004F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04C0, + /* 01 */ 0x04BF, + }, + { + /* 00 */ 0x04BC, + /* 01 */ 0x04BE, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x04BD, + }, + { + /* 00 */ 0x0451, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x044E, + /* 01 */ 0x0450, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x044F, + }, + { + /* 00 */ 0x02F6, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0014), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0015), + }, + { + /* 00 */ 0x02F3, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02BC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0003, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0002, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04F0, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02DC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x004D, + /* 01 */ 0x004B, + }, +}; + +const ZyDisOpcodeTreeNode optreeVendor[][2] = +{ + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05AC, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05B2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05EB, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05F3, + }, + { + /* 00 */ 0x05EC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05B4, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05B3, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05ED, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x053A, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0056, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0530, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02C1, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04D5, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0552, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0554, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02BE, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02BF, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02C3, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02C2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05EA, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05F2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05E8, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05E9, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05F4, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05AD, + }, +}; + +const ZyDisOpcodeTreeNode optree3dnow[][256] = +{ + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ 0x0407, + /* 0D */ 0x0406, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ 0x03E7, + /* 1D */ 0x03E6, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ 0x03F0, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ 0x03F1, + /* 8F */ ZYDIS_INVALID, + /* 90 */ 0x03EB, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ 0x03EE, + /* 95 */ ZYDIS_INVALID, + /* 96 */ 0x03F2, + /* 97 */ 0x03F6, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ 0x03F7, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ 0x03E9, + /* 9F */ ZYDIS_INVALID, + /* A0 */ 0x03EC, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ 0x03ED, + /* A5 */ ZYDIS_INVALID, + /* A6 */ 0x03F3, + /* A7 */ 0x03F5, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ 0x03F8, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ 0x03E8, + /* AF */ ZYDIS_INVALID, + /* B0 */ 0x03EA, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ 0x03EF, + /* B5 */ ZYDIS_INVALID, + /* B6 */ 0x03F4, + /* B7 */ 0x0433, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ 0x0499, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ 0x03C7, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, +}; + +const ZyDisOpcodeTreeNode optreeVex[][16] = +{ + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0024), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0004), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0005), + /* 06 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0006), + /* 07 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0007), + /* 08 */ ZYDIS_INVALID, + /* 09 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0008), + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0009), + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0026), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0004), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0005), + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0008), + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0009), + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + }, +}; + +const ZyDisOpcodeTreeNode optreeVexW[][2] = +{ + { + /* 00 */ 0x061D, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x061C, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0692, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0691, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x057B, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0008), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05A6, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05A5, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05A7, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05A4, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x061E, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x061B, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0009), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x061F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0620, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0621, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0622, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000A), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000B), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000C), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000D), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000E), + /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000F), + }, + { + /* 00 */ 0x0579, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0578, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x060B, + /* 01 */ ZYDIS_INVALID, + }, +}; + +const ZyDisOpcodeTreeNode optreeVexL[][2] = +{ + { + /* 00 */ 0x069C, + /* 01 */ 0x069B, + }, + { + /* 00 */ 0x0660, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065A, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065E, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x063F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065B, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065D, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x057A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x061A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05A0, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x059A, + }, + { + /* 00 */ 0x062C, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x062E, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x062D, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x062F, + /* 01 */ ZYDIS_INVALID, + }, +}; + +#undef ZYDIS_INVALID +#undef NODE + +#define OPI_NONE { ZyDisDefinedOperandType::NONE, ZyDisDefinedOperandSize::NA } +#define OPI_AL { ZyDisDefinedOperandType::AL, ZyDisDefinedOperandSize::B } +#define OPI_AX { ZyDisDefinedOperandType::AX, ZyDisDefinedOperandSize::W } +#define OPI_Av { ZyDisDefinedOperandType::A, ZyDisDefinedOperandSize::V } +#define OPI_C { ZyDisDefinedOperandType::C, ZyDisDefinedOperandSize::NA } +#define OPI_CL { ZyDisDefinedOperandType::CL, ZyDisDefinedOperandSize::B } +#define OPI_CS { ZyDisDefinedOperandType::CS, ZyDisDefinedOperandSize::NA } +#define OPI_CX { ZyDisDefinedOperandType::CX, ZyDisDefinedOperandSize::W } +#define OPI_D { ZyDisDefinedOperandType::D, ZyDisDefinedOperandSize::NA } +#define OPI_DL { ZyDisDefinedOperandType::DL, ZyDisDefinedOperandSize::B } +#define OPI_DS { ZyDisDefinedOperandType::DS, ZyDisDefinedOperandSize::NA } +#define OPI_DX { ZyDisDefinedOperandType::DX, ZyDisDefinedOperandSize::W } +#define OPI_E { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::NA } +#define OPI_ES { ZyDisDefinedOperandType::ES, ZyDisDefinedOperandSize::NA } +#define OPI_Eb { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::B } +#define OPI_Ed { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::D } +#define OPI_Eq { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::Q } +#define OPI_Ev { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::V } +#define OPI_Ew { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::W } +#define OPI_Ey { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::Y } +#define OPI_Ez { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::Z } +#define OPI_FS { ZyDisDefinedOperandType::FS, ZyDisDefinedOperandSize::NA } +#define OPI_Fv { ZyDisDefinedOperandType::F, ZyDisDefinedOperandSize::V } +#define OPI_G { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::NA } +#define OPI_GS { ZyDisDefinedOperandType::GS, ZyDisDefinedOperandSize::NA } +#define OPI_Gb { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::B } +#define OPI_Gd { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::D } +#define OPI_Gq { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::Q } +#define OPI_Gv { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::V } +#define OPI_Gw { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::W } +#define OPI_Gy { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::Y } +#define OPI_Gz { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::Z } +#define OPI_H { ZyDisDefinedOperandType::H, ZyDisDefinedOperandSize::X } +#define OPI_Hqq { ZyDisDefinedOperandType::H, ZyDisDefinedOperandSize::QQ } +#define OPI_Hx { ZyDisDefinedOperandType::H, ZyDisDefinedOperandSize::X } +#define OPI_I1 { ZyDisDefinedOperandType::I1, ZyDisDefinedOperandSize::NA } +#define OPI_Ib { ZyDisDefinedOperandType::I, ZyDisDefinedOperandSize::B } +#define OPI_Iv { ZyDisDefinedOperandType::I, ZyDisDefinedOperandSize::V } +#define OPI_Iw { ZyDisDefinedOperandType::I, ZyDisDefinedOperandSize::W } +#define OPI_Iz { ZyDisDefinedOperandType::I, ZyDisDefinedOperandSize::Z } +#define OPI_Jb { ZyDisDefinedOperandType::J, ZyDisDefinedOperandSize::B } +#define OPI_Jv { ZyDisDefinedOperandType::J, ZyDisDefinedOperandSize::V } +#define OPI_Jz { ZyDisDefinedOperandType::J, ZyDisDefinedOperandSize::Z } +#define OPI_L { ZyDisDefinedOperandType::L, ZyDisDefinedOperandSize::O } +#define OPI_Lx { ZyDisDefinedOperandType::L, ZyDisDefinedOperandSize::X } +#define OPI_M { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::NA } +#define OPI_Mb { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::B } +#define OPI_MbRd { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::BD } +#define OPI_MbRv { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::BV } +#define OPI_Md { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::D } +#define OPI_MdRy { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::DY } +#define OPI_MdU { ZyDisDefinedOperandType::MU, ZyDisDefinedOperandSize::DO } +#define OPI_Mdq { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::DQ } +#define OPI_Mo { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::O } +#define OPI_Mq { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::Q } +#define OPI_MqU { ZyDisDefinedOperandType::MU, ZyDisDefinedOperandSize::QO } +#define OPI_Ms { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::W } +#define OPI_Mt { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::T } +#define OPI_Mv { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::V } +#define OPI_Mw { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::W } +#define OPI_MwRd { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::WD } +#define OPI_MwRv { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::WV } +#define OPI_MwRy { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::WY } +#define OPI_MwU { ZyDisDefinedOperandType::MU, ZyDisDefinedOperandSize::WO } +#define OPI_N { ZyDisDefinedOperandType::N, ZyDisDefinedOperandSize::Q } +#define OPI_Ob { ZyDisDefinedOperandType::O, ZyDisDefinedOperandSize::B } +#define OPI_Ov { ZyDisDefinedOperandType::O, ZyDisDefinedOperandSize::V } +#define OPI_Ow { ZyDisDefinedOperandType::O, ZyDisDefinedOperandSize::W } +#define OPI_P { ZyDisDefinedOperandType::P, ZyDisDefinedOperandSize::Q } +#define OPI_Q { ZyDisDefinedOperandType::Q, ZyDisDefinedOperandSize::Q } +#define OPI_R { ZyDisDefinedOperandType::R, ZyDisDefinedOperandSize::RDQ } +#define OPI_R0b { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::B } +#define OPI_R0v { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::V } +#define OPI_R0w { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::W } +#define OPI_R0y { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::Y } +#define OPI_R0z { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::Z } +#define OPI_R1b { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::B } +#define OPI_R1v { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::V } +#define OPI_R1w { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::W } +#define OPI_R1y { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::Y } +#define OPI_R1z { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::Z } +#define OPI_R2b { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::B } +#define OPI_R2v { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::V } +#define OPI_R2w { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::W } +#define OPI_R2y { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::Y } +#define OPI_R2z { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::Z } +#define OPI_R3b { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::B } +#define OPI_R3v { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::V } +#define OPI_R3w { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::W } +#define OPI_R3y { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::Y } +#define OPI_R3z { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::Z } +#define OPI_R4b { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::B } +#define OPI_R4v { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::V } +#define OPI_R4w { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::W } +#define OPI_R4y { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::Y } +#define OPI_R4z { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::Z } +#define OPI_R5b { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::B } +#define OPI_R5v { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::V } +#define OPI_R5w { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::W } +#define OPI_R5y { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::Y } +#define OPI_R5z { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::Z } +#define OPI_R6b { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::B } +#define OPI_R6v { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::V } +#define OPI_R6w { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::W } +#define OPI_R6y { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::Y } +#define OPI_R6z { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::Z } +#define OPI_R7b { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::B } +#define OPI_R7v { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::V } +#define OPI_R7w { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::W } +#define OPI_R7y { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::Y } +#define OPI_R7z { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::Z } +#define OPI_S { ZyDisDefinedOperandType::S, ZyDisDefinedOperandSize::W } +#define OPI_SS { ZyDisDefinedOperandType::SS, ZyDisDefinedOperandSize::NA } +#define OPI_ST0 { ZyDisDefinedOperandType::ST0, ZyDisDefinedOperandSize::NA } +#define OPI_ST1 { ZyDisDefinedOperandType::ST1, ZyDisDefinedOperandSize::NA } +#define OPI_ST2 { ZyDisDefinedOperandType::ST2, ZyDisDefinedOperandSize::NA } +#define OPI_ST3 { ZyDisDefinedOperandType::ST3, ZyDisDefinedOperandSize::NA } +#define OPI_ST4 { ZyDisDefinedOperandType::ST4, ZyDisDefinedOperandSize::NA } +#define OPI_ST5 { ZyDisDefinedOperandType::ST5, ZyDisDefinedOperandSize::NA } +#define OPI_ST6 { ZyDisDefinedOperandType::ST6, ZyDisDefinedOperandSize::NA } +#define OPI_ST7 { ZyDisDefinedOperandType::ST7, ZyDisDefinedOperandSize::NA } +#define OPI_U { ZyDisDefinedOperandType::U, ZyDisDefinedOperandSize::O } +#define OPI_Ux { ZyDisDefinedOperandType::U, ZyDisDefinedOperandSize::X } +#define OPI_V { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::DQ } +#define OPI_Vdq { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::DQ } +#define OPI_Vqq { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::QQ } +#define OPI_Vsd { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::Q } +#define OPI_Vx { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::X } +#define OPI_W { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::DQ } +#define OPI_Wdq { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::DQ } +#define OPI_Wqq { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::QQ } +#define OPI_Wsd { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::Q } +#define OPI_Wx { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::X } +#define OPI_eAX { ZyDisDefinedOperandType::EAX, ZyDisDefinedOperandSize::Z } +#define OPI_eCX { ZyDisDefinedOperandType::ECX, ZyDisDefinedOperandSize::Z } +#define OPI_eDX { ZyDisDefinedOperandType::EDX, ZyDisDefinedOperandSize::Z } +#define OPI_rAX { ZyDisDefinedOperandType::RAX, ZyDisDefinedOperandSize::V } +#define OPI_rCX { ZyDisDefinedOperandType::RCX, ZyDisDefinedOperandSize::V } +#define OPI_rDX { ZyDisDefinedOperandType::RDX, ZyDisDefinedOperandSize::V } +#define OPI_sIb { ZyDisDefinedOperandType::sI, ZyDisDefinedOperandSize::B } +#define OPI_sIz { ZyDisDefinedOperandType::sI, ZyDisDefinedOperandSize::Z } + +const ZyDisInstructionDefinition instrDefinitions[] = +{ + /* 000 */ { ZyDisInstructionMnemonic::INVALID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 001 */ { ZyDisInstructionMnemonic::AAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 002 */ { ZyDisInstructionMnemonic::AAD, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 003 */ { ZyDisInstructionMnemonic::AAM, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 004 */ { ZyDisInstructionMnemonic::AAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 005 */ { ZyDisInstructionMnemonic::ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 006 */ { ZyDisInstructionMnemonic::ADC, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 007 */ { ZyDisInstructionMnemonic::ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 008 */ { ZyDisInstructionMnemonic::ADC, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 009 */ { ZyDisInstructionMnemonic::ADC, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00A */ { ZyDisInstructionMnemonic::ADC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00B */ { ZyDisInstructionMnemonic::ADC, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00C */ { ZyDisInstructionMnemonic::ADC, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00D */ { ZyDisInstructionMnemonic::ADC, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 00E */ { ZyDisInstructionMnemonic::ADC, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00F */ { ZyDisInstructionMnemonic::ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 010 */ { ZyDisInstructionMnemonic::ADD, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 011 */ { ZyDisInstructionMnemonic::ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 012 */ { ZyDisInstructionMnemonic::ADD, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 013 */ { ZyDisInstructionMnemonic::ADD, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 014 */ { ZyDisInstructionMnemonic::ADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 015 */ { ZyDisInstructionMnemonic::ADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 016 */ { ZyDisInstructionMnemonic::ADD, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 017 */ { ZyDisInstructionMnemonic::ADD, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 018 */ { ZyDisInstructionMnemonic::ADD, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 019 */ { ZyDisInstructionMnemonic::ADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01A */ { ZyDisInstructionMnemonic::ADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01B */ { ZyDisInstructionMnemonic::ADDSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01C */ { ZyDisInstructionMnemonic::ADDSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01D */ { ZyDisInstructionMnemonic::ADDSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01E */ { ZyDisInstructionMnemonic::ADDSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01F */ { ZyDisInstructionMnemonic::AESDEC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 020 */ { ZyDisInstructionMnemonic::AESDECLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 021 */ { ZyDisInstructionMnemonic::AESENC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 022 */ { ZyDisInstructionMnemonic::AESENCLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 023 */ { ZyDisInstructionMnemonic::AESIMC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 024 */ { ZyDisInstructionMnemonic::AESKEYGENASSIST, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 025 */ { ZyDisInstructionMnemonic::AND, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 026 */ { ZyDisInstructionMnemonic::AND, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 027 */ { ZyDisInstructionMnemonic::AND, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 028 */ { ZyDisInstructionMnemonic::AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 029 */ { ZyDisInstructionMnemonic::AND, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 02A */ { ZyDisInstructionMnemonic::AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 02B */ { ZyDisInstructionMnemonic::AND, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 02C */ { ZyDisInstructionMnemonic::AND, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 02D */ { ZyDisInstructionMnemonic::AND, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 02E */ { ZyDisInstructionMnemonic::AND, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 02F */ { ZyDisInstructionMnemonic::ANDNPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 030 */ { ZyDisInstructionMnemonic::ANDNPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 031 */ { ZyDisInstructionMnemonic::ANDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 032 */ { ZyDisInstructionMnemonic::ANDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 033 */ { ZyDisInstructionMnemonic::ARPL, { OPI_Ew, OPI_Gw, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 034 */ { ZyDisInstructionMnemonic::BLENDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 035 */ { ZyDisInstructionMnemonic::BLENDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 036 */ { ZyDisInstructionMnemonic::BLENDVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 037 */ { ZyDisInstructionMnemonic::BLENDVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 038 */ { ZyDisInstructionMnemonic::BOUND, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 039 */ { ZyDisInstructionMnemonic::BSF, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 03A */ { ZyDisInstructionMnemonic::BSR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 03B */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R5y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03C */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R3y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03D */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R1y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03E */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R4y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03F */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R0y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 040 */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R2y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 041 */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R7y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 042 */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R6y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 043 */ { ZyDisInstructionMnemonic::BT, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 044 */ { ZyDisInstructionMnemonic::BT, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 045 */ { ZyDisInstructionMnemonic::BTC, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 046 */ { ZyDisInstructionMnemonic::BTC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 047 */ { ZyDisInstructionMnemonic::BTR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 048 */ { ZyDisInstructionMnemonic::BTR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 049 */ { ZyDisInstructionMnemonic::BTS, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 04A */ { ZyDisInstructionMnemonic::BTS, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 04B */ { ZyDisInstructionMnemonic::CALL, { OPI_Eq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 04C */ { ZyDisInstructionMnemonic::CALL, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 04D */ { ZyDisInstructionMnemonic::CALL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 04E */ { ZyDisInstructionMnemonic::CALL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 04F */ { ZyDisInstructionMnemonic::CALL, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 050 */ { ZyDisInstructionMnemonic::CBW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 051 */ { ZyDisInstructionMnemonic::CDQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 052 */ { ZyDisInstructionMnemonic::CDQE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 053 */ { ZyDisInstructionMnemonic::CLC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 054 */ { ZyDisInstructionMnemonic::CLD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 055 */ { ZyDisInstructionMnemonic::CLFLUSH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 056 */ { ZyDisInstructionMnemonic::CLGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 057 */ { ZyDisInstructionMnemonic::CLI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 058 */ { ZyDisInstructionMnemonic::CLTS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 059 */ { ZyDisInstructionMnemonic::CMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 05A */ { ZyDisInstructionMnemonic::CMOVA, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05B */ { ZyDisInstructionMnemonic::CMOVAE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05C */ { ZyDisInstructionMnemonic::CMOVB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05D */ { ZyDisInstructionMnemonic::CMOVBE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05E */ { ZyDisInstructionMnemonic::CMOVE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05F */ { ZyDisInstructionMnemonic::CMOVG, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 060 */ { ZyDisInstructionMnemonic::CMOVGE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 061 */ { ZyDisInstructionMnemonic::CMOVL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 062 */ { ZyDisInstructionMnemonic::CMOVLE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 063 */ { ZyDisInstructionMnemonic::CMOVNE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 064 */ { ZyDisInstructionMnemonic::CMOVNO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 065 */ { ZyDisInstructionMnemonic::CMOVNP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 066 */ { ZyDisInstructionMnemonic::CMOVNS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 067 */ { ZyDisInstructionMnemonic::CMOVO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 068 */ { ZyDisInstructionMnemonic::CMOVP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 069 */ { ZyDisInstructionMnemonic::CMOVS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 06A */ { ZyDisInstructionMnemonic::CMP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06B */ { ZyDisInstructionMnemonic::CMP, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06C */ { ZyDisInstructionMnemonic::CMP, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06D */ { ZyDisInstructionMnemonic::CMP, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06E */ { ZyDisInstructionMnemonic::CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06F */ { ZyDisInstructionMnemonic::CMP, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 070 */ { ZyDisInstructionMnemonic::CMP, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, + /* 071 */ { ZyDisInstructionMnemonic::CMP, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 072 */ { ZyDisInstructionMnemonic::CMP, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 073 */ { ZyDisInstructionMnemonic::CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 }, + /* 074 */ { ZyDisInstructionMnemonic::CMPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 075 */ { ZyDisInstructionMnemonic::CMPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 076 */ { ZyDisInstructionMnemonic::CMPSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 077 */ { ZyDisInstructionMnemonic::CMPSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 078 */ { ZyDisInstructionMnemonic::CMPSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 079 */ { ZyDisInstructionMnemonic::CMPSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 07A */ { ZyDisInstructionMnemonic::CMPSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07B */ { ZyDisInstructionMnemonic::CMPSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 07C */ { ZyDisInstructionMnemonic::CMPXCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07D */ { ZyDisInstructionMnemonic::CMPXCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07E */ { ZyDisInstructionMnemonic::CMPXCHG16B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07F */ { ZyDisInstructionMnemonic::CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 080 */ { ZyDisInstructionMnemonic::CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 081 */ { ZyDisInstructionMnemonic::COMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 082 */ { ZyDisInstructionMnemonic::COMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 083 */ { ZyDisInstructionMnemonic::CPUID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 084 */ { ZyDisInstructionMnemonic::CQO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 085 */ { ZyDisInstructionMnemonic::CRC32, { OPI_Gy, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 086 */ { ZyDisInstructionMnemonic::CRC32, { OPI_Gy, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 087 */ { ZyDisInstructionMnemonic::CVTDQ2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 088 */ { ZyDisInstructionMnemonic::CVTDQ2PS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 089 */ { ZyDisInstructionMnemonic::CVTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08A */ { ZyDisInstructionMnemonic::CVTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08B */ { ZyDisInstructionMnemonic::CVTPD2PS, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08C */ { ZyDisInstructionMnemonic::CVTPI2PD, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08D */ { ZyDisInstructionMnemonic::CVTPI2PS, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08E */ { ZyDisInstructionMnemonic::CVTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08F */ { ZyDisInstructionMnemonic::CVTPS2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 090 */ { ZyDisInstructionMnemonic::CVTPS2PI, { OPI_P, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 091 */ { ZyDisInstructionMnemonic::CVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 092 */ { ZyDisInstructionMnemonic::CVTSD2SS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 093 */ { ZyDisInstructionMnemonic::CVTSI2SD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 094 */ { ZyDisInstructionMnemonic::CVTSI2SS, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 095 */ { ZyDisInstructionMnemonic::CVTSS2SD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 096 */ { ZyDisInstructionMnemonic::CVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 097 */ { ZyDisInstructionMnemonic::CVTTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 098 */ { ZyDisInstructionMnemonic::CVTTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 099 */ { ZyDisInstructionMnemonic::CVTTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09A */ { ZyDisInstructionMnemonic::CVTTPS2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09B */ { ZyDisInstructionMnemonic::CVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09C */ { ZyDisInstructionMnemonic::CVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09D */ { ZyDisInstructionMnemonic::CWD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 09E */ { ZyDisInstructionMnemonic::CWDE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 09F */ { ZyDisInstructionMnemonic::DAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 0A0 */ { ZyDisInstructionMnemonic::DAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 0A1 */ { ZyDisInstructionMnemonic::DEC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A2 */ { ZyDisInstructionMnemonic::DEC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A3 */ { ZyDisInstructionMnemonic::DEC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A4 */ { ZyDisInstructionMnemonic::DEC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0A5 */ { ZyDisInstructionMnemonic::DEC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0A6 */ { ZyDisInstructionMnemonic::DEC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A7 */ { ZyDisInstructionMnemonic::DEC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A8 */ { ZyDisInstructionMnemonic::DEC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A9 */ { ZyDisInstructionMnemonic::DEC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0AA */ { ZyDisInstructionMnemonic::DEC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0AB */ { ZyDisInstructionMnemonic::DIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 0AC */ { ZyDisInstructionMnemonic::DIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 0AD */ { ZyDisInstructionMnemonic::DIVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0AE */ { ZyDisInstructionMnemonic::DIVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0AF */ { ZyDisInstructionMnemonic::DIVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B0 */ { ZyDisInstructionMnemonic::DIVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B1 */ { ZyDisInstructionMnemonic::DPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B2 */ { ZyDisInstructionMnemonic::DPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B3 */ { ZyDisInstructionMnemonic::EMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0B4 */ { ZyDisInstructionMnemonic::ENTER, { OPI_Iw, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, + /* 0B5 */ { ZyDisInstructionMnemonic::EXTRACTPS, { OPI_MdRy, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 0B6 */ { ZyDisInstructionMnemonic::F2XM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0B7 */ { ZyDisInstructionMnemonic::FABS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0B8 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0B9 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BA */ { ZyDisInstructionMnemonic::FADD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0BB */ { ZyDisInstructionMnemonic::FADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0BC */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BD */ { ZyDisInstructionMnemonic::FADD, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BE */ { ZyDisInstructionMnemonic::FADD, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BF */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0C0 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0C1 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0C2 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0C3 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0C4 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0C5 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0C6 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0C7 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0C8 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0C9 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CA */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CB */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CC */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CD */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CE */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CF */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0D0 */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0D1 */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0D2 */ { ZyDisInstructionMnemonic::FBLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0D3 */ { ZyDisInstructionMnemonic::FBSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0D4 */ { ZyDisInstructionMnemonic::FCHS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0D5 */ { ZyDisInstructionMnemonic::FCLEX, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0D6 */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0D7 */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0D8 */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0D9 */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0DA */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0DB */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0DC */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0DD */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0DE */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0DF */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0E0 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0E1 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0E2 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0E3 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0E4 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0E5 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0E6 */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0E7 */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0E8 */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0E9 */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0EA */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0EB */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0EC */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0ED */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0EE */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0EF */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0F0 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0F1 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0F2 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0F3 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0F4 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0F5 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0F6 */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0F7 */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0F8 */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0F9 */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0FA */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0FB */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0FC */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0FD */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0FE */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0FF */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 100 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 101 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 102 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 103 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 104 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 105 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 106 */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 107 */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 108 */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 109 */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 10A */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 10B */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 10C */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 10D */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 10E */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 10F */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 110 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 111 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 112 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 113 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 114 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 115 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 116 */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 117 */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 118 */ { ZyDisInstructionMnemonic::FCOM, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 119 */ { ZyDisInstructionMnemonic::FCOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 11A */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 11B */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 11C */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 11D */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 11E */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 11F */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 120 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 121 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 122 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 123 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 124 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 125 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 126 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 127 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 128 */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 129 */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 12A */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 12B */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 12C */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 12D */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 12E */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 12F */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 130 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 131 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 132 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 133 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 134 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 135 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 136 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 137 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 138 */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 139 */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 13A */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 13B */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 13C */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 13D */ { ZyDisInstructionMnemonic::FCOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 13E */ { ZyDisInstructionMnemonic::FCOMP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 13F */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 140 */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 141 */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 142 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 143 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 144 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 145 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 146 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 147 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 148 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 149 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14A */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14B */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14C */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14D */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14E */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14F */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 150 */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 151 */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 152 */ { ZyDisInstructionMnemonic::FCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 153 */ { ZyDisInstructionMnemonic::FCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 154 */ { ZyDisInstructionMnemonic::FDECSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 155 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 156 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 157 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 158 */ { ZyDisInstructionMnemonic::FDIV, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 159 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 15A */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 15B */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15C */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15D */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15E */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15F */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 160 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 161 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 162 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 163 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 164 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 165 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 166 */ { ZyDisInstructionMnemonic::FDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 167 */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 168 */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 169 */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16A */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16B */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16C */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16D */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16E */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16F */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 170 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 171 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 172 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 173 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 174 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 175 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 176 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 177 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 178 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 179 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17A */ { ZyDisInstructionMnemonic::FDIVR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 17B */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17C */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17D */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17E */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17F */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 180 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 181 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 182 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 183 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 184 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 185 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 186 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 187 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 188 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 189 */ { ZyDisInstructionMnemonic::FEMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18A */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18B */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18C */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18D */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18E */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18F */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 190 */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 191 */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 192 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 193 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 194 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 195 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 196 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 197 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 198 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 199 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 19A */ { ZyDisInstructionMnemonic::FIADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19B */ { ZyDisInstructionMnemonic::FIADD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19C */ { ZyDisInstructionMnemonic::FICOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19D */ { ZyDisInstructionMnemonic::FICOM, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19E */ { ZyDisInstructionMnemonic::FICOMP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19F */ { ZyDisInstructionMnemonic::FICOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A0 */ { ZyDisInstructionMnemonic::FIDIV, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A1 */ { ZyDisInstructionMnemonic::FIDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A2 */ { ZyDisInstructionMnemonic::FIDIVR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A3 */ { ZyDisInstructionMnemonic::FIDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A4 */ { ZyDisInstructionMnemonic::FILD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A5 */ { ZyDisInstructionMnemonic::FILD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A6 */ { ZyDisInstructionMnemonic::FILD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A7 */ { ZyDisInstructionMnemonic::FIMUL, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A8 */ { ZyDisInstructionMnemonic::FIMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A9 */ { ZyDisInstructionMnemonic::FINCSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1AA */ { ZyDisInstructionMnemonic::FIST, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AB */ { ZyDisInstructionMnemonic::FIST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AC */ { ZyDisInstructionMnemonic::FISTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AD */ { ZyDisInstructionMnemonic::FISTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AE */ { ZyDisInstructionMnemonic::FISTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AF */ { ZyDisInstructionMnemonic::FISTTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B0 */ { ZyDisInstructionMnemonic::FISTTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B1 */ { ZyDisInstructionMnemonic::FISTTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B2 */ { ZyDisInstructionMnemonic::FISUB, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B3 */ { ZyDisInstructionMnemonic::FISUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B4 */ { ZyDisInstructionMnemonic::FISUBR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B5 */ { ZyDisInstructionMnemonic::FISUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B6 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1B7 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1B8 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1B9 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1BA */ { ZyDisInstructionMnemonic::FLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1BB */ { ZyDisInstructionMnemonic::FLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1BC */ { ZyDisInstructionMnemonic::FLD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1BD */ { ZyDisInstructionMnemonic::FLD, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1BE */ { ZyDisInstructionMnemonic::FLD, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1BF */ { ZyDisInstructionMnemonic::FLD, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C0 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C1 */ { ZyDisInstructionMnemonic::FLD1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C2 */ { ZyDisInstructionMnemonic::FLDCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1C3 */ { ZyDisInstructionMnemonic::FLDENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1C4 */ { ZyDisInstructionMnemonic::FLDL2E, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C5 */ { ZyDisInstructionMnemonic::FLDL2T, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C6 */ { ZyDisInstructionMnemonic::FLDLG2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C7 */ { ZyDisInstructionMnemonic::FLDLN2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C8 */ { ZyDisInstructionMnemonic::FLDPI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C9 */ { ZyDisInstructionMnemonic::FLDZ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1CA */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CB */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CC */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CD */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 1CE */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CF */ { ZyDisInstructionMnemonic::FMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1D0 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D1 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D2 */ { ZyDisInstructionMnemonic::FMUL, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1D3 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D4 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D5 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D6 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 1D7 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 1D8 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 1D9 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 1DA */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 1DB */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 1DC */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1DD */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1DE */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1DF */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E0 */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E1 */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E2 */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E3 */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E4 */ { ZyDisInstructionMnemonic::FNDISI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E5 */ { ZyDisInstructionMnemonic::FNENI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E6 */ { ZyDisInstructionMnemonic::FNINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E7 */ { ZyDisInstructionMnemonic::FNOP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E8 */ { ZyDisInstructionMnemonic::FNSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1E9 */ { ZyDisInstructionMnemonic::FNSETPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1EA */ { ZyDisInstructionMnemonic::FNSTCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1EB */ { ZyDisInstructionMnemonic::FNSTENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1EC */ { ZyDisInstructionMnemonic::FNSTSW, { OPI_AX, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1ED */ { ZyDisInstructionMnemonic::FNSTSW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1EE */ { ZyDisInstructionMnemonic::FPATAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1EF */ { ZyDisInstructionMnemonic::FPREM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F0 */ { ZyDisInstructionMnemonic::FPREM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F1 */ { ZyDisInstructionMnemonic::FPTAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F2 */ { ZyDisInstructionMnemonic::FRNDINT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F3 */ { ZyDisInstructionMnemonic::FRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1F4 */ { ZyDisInstructionMnemonic::FRSTPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F5 */ { ZyDisInstructionMnemonic::FSCALE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F6 */ { ZyDisInstructionMnemonic::FSIN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F7 */ { ZyDisInstructionMnemonic::FSINCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F8 */ { ZyDisInstructionMnemonic::FSQRT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F9 */ { ZyDisInstructionMnemonic::FST, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FA */ { ZyDisInstructionMnemonic::FST, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FB */ { ZyDisInstructionMnemonic::FST, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FC */ { ZyDisInstructionMnemonic::FST, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FD */ { ZyDisInstructionMnemonic::FST, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FE */ { ZyDisInstructionMnemonic::FST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1FF */ { ZyDisInstructionMnemonic::FST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 200 */ { ZyDisInstructionMnemonic::FST, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 201 */ { ZyDisInstructionMnemonic::FST, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 202 */ { ZyDisInstructionMnemonic::FST, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 203 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 204 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 205 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 206 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 207 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 208 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 209 */ { ZyDisInstructionMnemonic::FSTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 20A */ { ZyDisInstructionMnemonic::FSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 20B */ { ZyDisInstructionMnemonic::FSTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 20C */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 20D */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 20E */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 20F */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 210 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 211 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 212 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 213 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 214 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 215 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 216 */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 217 */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 218 */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 219 */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21A */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21B */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21C */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21D */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21E */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21F */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 220 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 221 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 222 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 223 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 224 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 225 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 226 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 227 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 228 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 229 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 22A */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 22B */ { ZyDisInstructionMnemonic::FSUB, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 22C */ { ZyDisInstructionMnemonic::FSUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 22D */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 22E */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 22F */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 230 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 231 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 232 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 233 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 234 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 235 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 236 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 237 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 238 */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 239 */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23A */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23B */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23C */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23D */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23E */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23F */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 240 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 241 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 242 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 243 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 244 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 245 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 246 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 247 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 248 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 249 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 24A */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 24B */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 24C */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 24D */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 24E */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 24F */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 250 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 251 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 252 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 253 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 254 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 255 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 256 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 257 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 258 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 259 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 25A */ { ZyDisInstructionMnemonic::FTST, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25B */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25C */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25D */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25E */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25F */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 260 */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 261 */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 262 */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 263 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 264 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 265 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 266 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 267 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 268 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 269 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 26A */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 26B */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 26C */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 26D */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 26E */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 26F */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 270 */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 271 */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 272 */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 273 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 274 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 275 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 276 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 277 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 278 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 279 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27A */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27B */ { ZyDisInstructionMnemonic::FUCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27C */ { ZyDisInstructionMnemonic::FXAM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27D */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 27E */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 27F */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 280 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 281 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 282 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 283 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 284 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 285 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 286 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 287 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 288 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 289 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28A */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28B */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28C */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28D */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28E */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28F */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 290 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 291 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 292 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 293 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 294 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 295 */ { ZyDisInstructionMnemonic::FXRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 296 */ { ZyDisInstructionMnemonic::FXSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 297 */ { ZyDisInstructionMnemonic::FXTRACT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 298 */ { ZyDisInstructionMnemonic::FYL2X, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 299 */ { ZyDisInstructionMnemonic::FYL2XP1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 29A */ { ZyDisInstructionMnemonic::GETSEC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 29B */ { ZyDisInstructionMnemonic::HADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 29C */ { ZyDisInstructionMnemonic::HADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 29D */ { ZyDisInstructionMnemonic::HLT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 29E */ { ZyDisInstructionMnemonic::HSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 29F */ { ZyDisInstructionMnemonic::HSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A0 */ { ZyDisInstructionMnemonic::IDIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2A1 */ { ZyDisInstructionMnemonic::IDIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2A2 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A3 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A4 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_Iz, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A5 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A6 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_sIb, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A7 */ { ZyDisInstructionMnemonic::IN, { OPI_AL, OPI_DX, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 2A8 */ { ZyDisInstructionMnemonic::IN, { OPI_eAX, OPI_DX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2A9 */ { ZyDisInstructionMnemonic::IN, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 2AA */ { ZyDisInstructionMnemonic::IN, { OPI_eAX, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2AB */ { ZyDisInstructionMnemonic::INC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AC */ { ZyDisInstructionMnemonic::INC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AD */ { ZyDisInstructionMnemonic::INC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AE */ { ZyDisInstructionMnemonic::INC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AF */ { ZyDisInstructionMnemonic::INC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2B0 */ { ZyDisInstructionMnemonic::INC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2B1 */ { ZyDisInstructionMnemonic::INC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B2 */ { ZyDisInstructionMnemonic::INC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B3 */ { ZyDisInstructionMnemonic::INC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B4 */ { ZyDisInstructionMnemonic::INC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B5 */ { ZyDisInstructionMnemonic::INSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 2B6 */ { ZyDisInstructionMnemonic::INSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 2B7 */ { ZyDisInstructionMnemonic::INSERTPS, { OPI_V, OPI_Md, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2B8 */ { ZyDisInstructionMnemonic::INSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 2B9 */ { ZyDisInstructionMnemonic::INT, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BA */ { ZyDisInstructionMnemonic::INT1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BB */ { ZyDisInstructionMnemonic::INT3, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BC */ { ZyDisInstructionMnemonic::INTO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 2BD */ { ZyDisInstructionMnemonic::INVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BE */ { ZyDisInstructionMnemonic::INVEPT, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2BF */ { ZyDisInstructionMnemonic::INVEPT, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2C0 */ { ZyDisInstructionMnemonic::INVLPG, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2C1 */ { ZyDisInstructionMnemonic::INVLPGA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2C2 */ { ZyDisInstructionMnemonic::INVVPID, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2C3 */ { ZyDisInstructionMnemonic::INVVPID, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2C4 */ { ZyDisInstructionMnemonic::IRETD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 2C5 */ { ZyDisInstructionMnemonic::IRETQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 2C6 */ { ZyDisInstructionMnemonic::IRETW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 2C7 */ { ZyDisInstructionMnemonic::JA, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2C8 */ { ZyDisInstructionMnemonic::JA, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2C9 */ { ZyDisInstructionMnemonic::JB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2CA */ { ZyDisInstructionMnemonic::JB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2CB */ { ZyDisInstructionMnemonic::JBE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2CC */ { ZyDisInstructionMnemonic::JBE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2CD */ { ZyDisInstructionMnemonic::JCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, + /* 2CE */ { ZyDisInstructionMnemonic::JE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2CF */ { ZyDisInstructionMnemonic::JE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D0 */ { ZyDisInstructionMnemonic::JECXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, + /* 2D1 */ { ZyDisInstructionMnemonic::JG, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D2 */ { ZyDisInstructionMnemonic::JG, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D3 */ { ZyDisInstructionMnemonic::JGE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D4 */ { ZyDisInstructionMnemonic::JGE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D5 */ { ZyDisInstructionMnemonic::JL, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D6 */ { ZyDisInstructionMnemonic::JL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D7 */ { ZyDisInstructionMnemonic::JLE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D8 */ { ZyDisInstructionMnemonic::JLE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D9 */ { ZyDisInstructionMnemonic::JMP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 2DA */ { ZyDisInstructionMnemonic::JMP, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2DB */ { ZyDisInstructionMnemonic::JMP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 2DC */ { ZyDisInstructionMnemonic::JMP, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 2DD */ { ZyDisInstructionMnemonic::JMP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, + /* 2DE */ { ZyDisInstructionMnemonic::JNB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2DF */ { ZyDisInstructionMnemonic::JNB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E0 */ { ZyDisInstructionMnemonic::JNE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E1 */ { ZyDisInstructionMnemonic::JNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E2 */ { ZyDisInstructionMnemonic::JNO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E3 */ { ZyDisInstructionMnemonic::JNO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E4 */ { ZyDisInstructionMnemonic::JNP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E5 */ { ZyDisInstructionMnemonic::JNP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E6 */ { ZyDisInstructionMnemonic::JNS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E7 */ { ZyDisInstructionMnemonic::JNS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E8 */ { ZyDisInstructionMnemonic::JO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E9 */ { ZyDisInstructionMnemonic::JO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2EA */ { ZyDisInstructionMnemonic::JP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2EB */ { ZyDisInstructionMnemonic::JP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2EC */ { ZyDisInstructionMnemonic::JRCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, + /* 2ED */ { ZyDisInstructionMnemonic::JS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2EE */ { ZyDisInstructionMnemonic::JS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2EF */ { ZyDisInstructionMnemonic::LAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2F0 */ { ZyDisInstructionMnemonic::LAR, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F1 */ { ZyDisInstructionMnemonic::LDDQU, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F2 */ { ZyDisInstructionMnemonic::LDMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2F3 */ { ZyDisInstructionMnemonic::LDS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2F4 */ { ZyDisInstructionMnemonic::LEA, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F5 */ { ZyDisInstructionMnemonic::LEAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2F6 */ { ZyDisInstructionMnemonic::LES, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2F7 */ { ZyDisInstructionMnemonic::LFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2F8 */ { ZyDisInstructionMnemonic::LFS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F9 */ { ZyDisInstructionMnemonic::LGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FA */ { ZyDisInstructionMnemonic::LGS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2FB */ { ZyDisInstructionMnemonic::LIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FC */ { ZyDisInstructionMnemonic::LLDT, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FD */ { ZyDisInstructionMnemonic::LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FE */ { ZyDisInstructionMnemonic::LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FF */ { ZyDisInstructionMnemonic::LOCK, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 300 */ { ZyDisInstructionMnemonic::LODSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 301 */ { ZyDisInstructionMnemonic::LODSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 302 */ { ZyDisInstructionMnemonic::LODSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 303 */ { ZyDisInstructionMnemonic::LODSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 304 */ { ZyDisInstructionMnemonic::LOOP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 305 */ { ZyDisInstructionMnemonic::LOOPE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 306 */ { ZyDisInstructionMnemonic::LOOPNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 307 */ { ZyDisInstructionMnemonic::LSL, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 308 */ { ZyDisInstructionMnemonic::LSS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 309 */ { ZyDisInstructionMnemonic::LTR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 30A */ { ZyDisInstructionMnemonic::MASKMOVDQU, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 30B */ { ZyDisInstructionMnemonic::MASKMOVQ, { OPI_P, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 30C */ { ZyDisInstructionMnemonic::MAXPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 30D */ { ZyDisInstructionMnemonic::MAXPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 30E */ { ZyDisInstructionMnemonic::MAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 30F */ { ZyDisInstructionMnemonic::MAXSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 310 */ { ZyDisInstructionMnemonic::MFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 311 */ { ZyDisInstructionMnemonic::MINPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 312 */ { ZyDisInstructionMnemonic::MINPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 313 */ { ZyDisInstructionMnemonic::MINSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 314 */ { ZyDisInstructionMnemonic::MINSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 315 */ { ZyDisInstructionMnemonic::MONITOR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 316 */ { ZyDisInstructionMnemonic::MONTMUL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 317 */ { ZyDisInstructionMnemonic::MOV, { OPI_R0b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 318 */ { ZyDisInstructionMnemonic::MOV, { OPI_R2b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 319 */ { ZyDisInstructionMnemonic::MOV, { OPI_R3b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31A */ { ZyDisInstructionMnemonic::MOV, { OPI_R1b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31B */ { ZyDisInstructionMnemonic::MOV, { OPI_AL, OPI_Ob, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 31C */ { ZyDisInstructionMnemonic::MOV, { OPI_S, OPI_MwRv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31D */ { ZyDisInstructionMnemonic::MOV, { OPI_MwRv, OPI_S, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31E */ { ZyDisInstructionMnemonic::MOV, { OPI_Ov, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 31F */ { ZyDisInstructionMnemonic::MOV, { OPI_Ob, OPI_AL, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 320 */ { ZyDisInstructionMnemonic::MOV, { OPI_rAX, OPI_Ov, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 321 */ { ZyDisInstructionMnemonic::MOV, { OPI_R4b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 322 */ { ZyDisInstructionMnemonic::MOV, { OPI_R7v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 323 */ { ZyDisInstructionMnemonic::MOV, { OPI_R6v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 324 */ { ZyDisInstructionMnemonic::MOV, { OPI_R5v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 325 */ { ZyDisInstructionMnemonic::MOV, { OPI_R, OPI_C, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 326 */ { ZyDisInstructionMnemonic::MOV, { OPI_D, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 327 */ { ZyDisInstructionMnemonic::MOV, { OPI_C, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 328 */ { ZyDisInstructionMnemonic::MOV, { OPI_R, OPI_D, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 329 */ { ZyDisInstructionMnemonic::MOV, { OPI_R4v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32A */ { ZyDisInstructionMnemonic::MOV, { OPI_R7b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32B */ { ZyDisInstructionMnemonic::MOV, { OPI_R6b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32C */ { ZyDisInstructionMnemonic::MOV, { OPI_R5b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32D */ { ZyDisInstructionMnemonic::MOV, { OPI_R0v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32E */ { ZyDisInstructionMnemonic::MOV, { OPI_R3v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32F */ { ZyDisInstructionMnemonic::MOV, { OPI_R2v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 330 */ { ZyDisInstructionMnemonic::MOV, { OPI_R1v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 331 */ { ZyDisInstructionMnemonic::MOV, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 332 */ { ZyDisInstructionMnemonic::MOV, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 333 */ { ZyDisInstructionMnemonic::MOV, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 334 */ { ZyDisInstructionMnemonic::MOV, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 335 */ { ZyDisInstructionMnemonic::MOV, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 336 */ { ZyDisInstructionMnemonic::MOV, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 337 */ { ZyDisInstructionMnemonic::MOVAPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 338 */ { ZyDisInstructionMnemonic::MOVAPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 339 */ { ZyDisInstructionMnemonic::MOVAPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33A */ { ZyDisInstructionMnemonic::MOVAPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33B */ { ZyDisInstructionMnemonic::MOVBE, { OPI_Gv, OPI_Mv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33C */ { ZyDisInstructionMnemonic::MOVBE, { OPI_Mv, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33D */ { ZyDisInstructionMnemonic::MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33E */ { ZyDisInstructionMnemonic::MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33F */ { ZyDisInstructionMnemonic::MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 340 */ { ZyDisInstructionMnemonic::MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 341 */ { ZyDisInstructionMnemonic::MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 342 */ { ZyDisInstructionMnemonic::MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 343 */ { ZyDisInstructionMnemonic::MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 344 */ { ZyDisInstructionMnemonic::MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 345 */ { ZyDisInstructionMnemonic::MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 346 */ { ZyDisInstructionMnemonic::MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 347 */ { ZyDisInstructionMnemonic::MOVDQ2Q, { OPI_P, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 348 */ { ZyDisInstructionMnemonic::MOVDQA, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 349 */ { ZyDisInstructionMnemonic::MOVDQA, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34A */ { ZyDisInstructionMnemonic::MOVDQU, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34B */ { ZyDisInstructionMnemonic::MOVDQU, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34C */ { ZyDisInstructionMnemonic::MOVHLPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34D */ { ZyDisInstructionMnemonic::MOVHPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34E */ { ZyDisInstructionMnemonic::MOVHPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34F */ { ZyDisInstructionMnemonic::MOVHPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 350 */ { ZyDisInstructionMnemonic::MOVHPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 351 */ { ZyDisInstructionMnemonic::MOVLHPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 352 */ { ZyDisInstructionMnemonic::MOVLPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 353 */ { ZyDisInstructionMnemonic::MOVLPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 354 */ { ZyDisInstructionMnemonic::MOVLPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 355 */ { ZyDisInstructionMnemonic::MOVLPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 356 */ { ZyDisInstructionMnemonic::MOVMSKPD, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 357 */ { ZyDisInstructionMnemonic::MOVMSKPS, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 358 */ { ZyDisInstructionMnemonic::MOVNTDQ, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 359 */ { ZyDisInstructionMnemonic::MOVNTDQA, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35A */ { ZyDisInstructionMnemonic::MOVNTI, { OPI_M, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35B */ { ZyDisInstructionMnemonic::MOVNTPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35C */ { ZyDisInstructionMnemonic::MOVNTPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35D */ { ZyDisInstructionMnemonic::MOVNTQ, { OPI_M, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35E */ { ZyDisInstructionMnemonic::MOVQ, { OPI_P, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35F */ { ZyDisInstructionMnemonic::MOVQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 360 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_Eq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 361 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 362 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_Q, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 363 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 364 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_V, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 365 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_Eq, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 366 */ { ZyDisInstructionMnemonic::MOVQ2DQ, { OPI_V, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_OPERAND1_WRITE }, + /* 367 */ { ZyDisInstructionMnemonic::MOVSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_OPERAND1_WRITE }, + /* 368 */ { ZyDisInstructionMnemonic::MOVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 369 */ { ZyDisInstructionMnemonic::MOVSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 36A */ { ZyDisInstructionMnemonic::MOVSD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36B */ { ZyDisInstructionMnemonic::MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36C */ { ZyDisInstructionMnemonic::MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36D */ { ZyDisInstructionMnemonic::MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36E */ { ZyDisInstructionMnemonic::MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36F */ { ZyDisInstructionMnemonic::MOVSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 370 */ { ZyDisInstructionMnemonic::MOVSS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 371 */ { ZyDisInstructionMnemonic::MOVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 372 */ { ZyDisInstructionMnemonic::MOVSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 373 */ { ZyDisInstructionMnemonic::MOVSX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 374 */ { ZyDisInstructionMnemonic::MOVSX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 375 */ { ZyDisInstructionMnemonic::MOVSXD, { OPI_Gq, OPI_Ed, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 376 */ { ZyDisInstructionMnemonic::MOVUPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 377 */ { ZyDisInstructionMnemonic::MOVUPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 378 */ { ZyDisInstructionMnemonic::MOVUPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 379 */ { ZyDisInstructionMnemonic::MOVUPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 37A */ { ZyDisInstructionMnemonic::MOVZX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 37B */ { ZyDisInstructionMnemonic::MOVZX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 37C */ { ZyDisInstructionMnemonic::MPSADBW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 37D */ { ZyDisInstructionMnemonic::MUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 37E */ { ZyDisInstructionMnemonic::MUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 37F */ { ZyDisInstructionMnemonic::MULPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 380 */ { ZyDisInstructionMnemonic::MULPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 381 */ { ZyDisInstructionMnemonic::MULSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 382 */ { ZyDisInstructionMnemonic::MULSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 383 */ { ZyDisInstructionMnemonic::MWAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 384 */ { ZyDisInstructionMnemonic::NEG, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 385 */ { ZyDisInstructionMnemonic::NEG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 386 */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 387 */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 388 */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 389 */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38A */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38B */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38C */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38D */ { ZyDisInstructionMnemonic::NOT, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 38E */ { ZyDisInstructionMnemonic::NOT, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 38F */ { ZyDisInstructionMnemonic::OR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 390 */ { ZyDisInstructionMnemonic::OR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 391 */ { ZyDisInstructionMnemonic::OR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 392 */ { ZyDisInstructionMnemonic::OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 393 */ { ZyDisInstructionMnemonic::OR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 394 */ { ZyDisInstructionMnemonic::OR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 395 */ { ZyDisInstructionMnemonic::OR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 396 */ { ZyDisInstructionMnemonic::OR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 397 */ { ZyDisInstructionMnemonic::OR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 398 */ { ZyDisInstructionMnemonic::OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 399 */ { ZyDisInstructionMnemonic::ORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 39A */ { ZyDisInstructionMnemonic::ORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 39B */ { ZyDisInstructionMnemonic::OUT, { OPI_DX, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, + /* 39C */ { ZyDisInstructionMnemonic::OUT, { OPI_DX, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 39D */ { ZyDisInstructionMnemonic::OUT, { OPI_Ib, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, + /* 39E */ { ZyDisInstructionMnemonic::OUT, { OPI_Ib, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 39F */ { ZyDisInstructionMnemonic::OUTSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 3A0 */ { ZyDisInstructionMnemonic::OUTSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 3A1 */ { ZyDisInstructionMnemonic::OUTSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 3A2 */ { ZyDisInstructionMnemonic::PABSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A3 */ { ZyDisInstructionMnemonic::PABSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A4 */ { ZyDisInstructionMnemonic::PABSD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A5 */ { ZyDisInstructionMnemonic::PABSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A6 */ { ZyDisInstructionMnemonic::PABSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A7 */ { ZyDisInstructionMnemonic::PABSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A8 */ { ZyDisInstructionMnemonic::PACKSSDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3A9 */ { ZyDisInstructionMnemonic::PACKSSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AA */ { ZyDisInstructionMnemonic::PACKSSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AB */ { ZyDisInstructionMnemonic::PACKSSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AC */ { ZyDisInstructionMnemonic::PACKUSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AD */ { ZyDisInstructionMnemonic::PACKUSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AE */ { ZyDisInstructionMnemonic::PACKUSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AF */ { ZyDisInstructionMnemonic::PADDB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B0 */ { ZyDisInstructionMnemonic::PADDB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B1 */ { ZyDisInstructionMnemonic::PADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B2 */ { ZyDisInstructionMnemonic::PADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B3 */ { ZyDisInstructionMnemonic::PADDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B4 */ { ZyDisInstructionMnemonic::PADDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B5 */ { ZyDisInstructionMnemonic::PADDSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B6 */ { ZyDisInstructionMnemonic::PADDSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B7 */ { ZyDisInstructionMnemonic::PADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B8 */ { ZyDisInstructionMnemonic::PADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B9 */ { ZyDisInstructionMnemonic::PADDUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BA */ { ZyDisInstructionMnemonic::PADDUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BB */ { ZyDisInstructionMnemonic::PADDUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BC */ { ZyDisInstructionMnemonic::PADDUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BD */ { ZyDisInstructionMnemonic::PADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BE */ { ZyDisInstructionMnemonic::PADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BF */ { ZyDisInstructionMnemonic::PALIGNR, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C0 */ { ZyDisInstructionMnemonic::PALIGNR, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C1 */ { ZyDisInstructionMnemonic::PAND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C2 */ { ZyDisInstructionMnemonic::PAND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C3 */ { ZyDisInstructionMnemonic::PANDN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C4 */ { ZyDisInstructionMnemonic::PANDN, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C5 */ { ZyDisInstructionMnemonic::PAVGB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C6 */ { ZyDisInstructionMnemonic::PAVGB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C7 */ { ZyDisInstructionMnemonic::PAVGUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C8 */ { ZyDisInstructionMnemonic::PAVGW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C9 */ { ZyDisInstructionMnemonic::PAVGW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CA */ { ZyDisInstructionMnemonic::PBLENDVB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CB */ { ZyDisInstructionMnemonic::PBLENDW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CC */ { ZyDisInstructionMnemonic::PCLMULQDQ, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CD */ { ZyDisInstructionMnemonic::PCMPEQB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CE */ { ZyDisInstructionMnemonic::PCMPEQB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CF */ { ZyDisInstructionMnemonic::PCMPEQD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D0 */ { ZyDisInstructionMnemonic::PCMPEQD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D1 */ { ZyDisInstructionMnemonic::PCMPEQQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3D2 */ { ZyDisInstructionMnemonic::PCMPEQW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D3 */ { ZyDisInstructionMnemonic::PCMPEQW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D4 */ { ZyDisInstructionMnemonic::PCMPESTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3D5 */ { ZyDisInstructionMnemonic::PCMPESTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3D6 */ { ZyDisInstructionMnemonic::PCMPGTB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D7 */ { ZyDisInstructionMnemonic::PCMPGTB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D8 */ { ZyDisInstructionMnemonic::PCMPGTD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D9 */ { ZyDisInstructionMnemonic::PCMPGTD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3DA */ { ZyDisInstructionMnemonic::PCMPGTQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3DB */ { ZyDisInstructionMnemonic::PCMPGTW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3DC */ { ZyDisInstructionMnemonic::PCMPGTW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3DD */ { ZyDisInstructionMnemonic::PCMPISTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3DE */ { ZyDisInstructionMnemonic::PCMPISTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3DF */ { ZyDisInstructionMnemonic::PEXTRB, { OPI_MbRv, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 3E0 */ { ZyDisInstructionMnemonic::PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E1 */ { ZyDisInstructionMnemonic::PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E2 */ { ZyDisInstructionMnemonic::PEXTRQ, { OPI_Eq, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 3E3 */ { ZyDisInstructionMnemonic::PEXTRW, { OPI_MwRd, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E4 */ { ZyDisInstructionMnemonic::PEXTRW, { OPI_Gd, OPI_N, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E5 */ { ZyDisInstructionMnemonic::PEXTRW, { OPI_Gd, OPI_U, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E6 */ { ZyDisInstructionMnemonic::PF2ID, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E7 */ { ZyDisInstructionMnemonic::PF2IW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E8 */ { ZyDisInstructionMnemonic::PFACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3E9 */ { ZyDisInstructionMnemonic::PFADD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EA */ { ZyDisInstructionMnemonic::PFCMPEQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EB */ { ZyDisInstructionMnemonic::PFCMPGE, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EC */ { ZyDisInstructionMnemonic::PFCMPGT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3ED */ { ZyDisInstructionMnemonic::PFMAX, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EE */ { ZyDisInstructionMnemonic::PFMIN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EF */ { ZyDisInstructionMnemonic::PFMUL, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F0 */ { ZyDisInstructionMnemonic::PFNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F1 */ { ZyDisInstructionMnemonic::PFPNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F2 */ { ZyDisInstructionMnemonic::PFRCP, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F3 */ { ZyDisInstructionMnemonic::PFRCPIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F4 */ { ZyDisInstructionMnemonic::PFRCPIT2, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F5 */ { ZyDisInstructionMnemonic::PFRSQIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F6 */ { ZyDisInstructionMnemonic::PFRSQRT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F7 */ { ZyDisInstructionMnemonic::PFSUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F8 */ { ZyDisInstructionMnemonic::PFSUBR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F9 */ { ZyDisInstructionMnemonic::PHADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FA */ { ZyDisInstructionMnemonic::PHADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FB */ { ZyDisInstructionMnemonic::PHADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FC */ { ZyDisInstructionMnemonic::PHADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FD */ { ZyDisInstructionMnemonic::PHADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FE */ { ZyDisInstructionMnemonic::PHADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FF */ { ZyDisInstructionMnemonic::PHMINPOSUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 400 */ { ZyDisInstructionMnemonic::PHSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 401 */ { ZyDisInstructionMnemonic::PHSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 402 */ { ZyDisInstructionMnemonic::PHSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 403 */ { ZyDisInstructionMnemonic::PHSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 404 */ { ZyDisInstructionMnemonic::PHSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 405 */ { ZyDisInstructionMnemonic::PHSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 406 */ { ZyDisInstructionMnemonic::PI2FD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 407 */ { ZyDisInstructionMnemonic::PI2FW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 408 */ { ZyDisInstructionMnemonic::PINSRB, { OPI_V, OPI_MbRd, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 409 */ { ZyDisInstructionMnemonic::PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 40A */ { ZyDisInstructionMnemonic::PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 40B */ { ZyDisInstructionMnemonic::PINSRQ, { OPI_V, OPI_Eq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 40C */ { ZyDisInstructionMnemonic::PINSRW, { OPI_V, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 40D */ { ZyDisInstructionMnemonic::PINSRW, { OPI_P, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 40E */ { ZyDisInstructionMnemonic::PMADDUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 40F */ { ZyDisInstructionMnemonic::PMADDUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 410 */ { ZyDisInstructionMnemonic::PMADDWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 411 */ { ZyDisInstructionMnemonic::PMADDWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 412 */ { ZyDisInstructionMnemonic::PMAXSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 413 */ { ZyDisInstructionMnemonic::PMAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 414 */ { ZyDisInstructionMnemonic::PMAXSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 415 */ { ZyDisInstructionMnemonic::PMAXSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 416 */ { ZyDisInstructionMnemonic::PMAXUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 417 */ { ZyDisInstructionMnemonic::PMAXUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 418 */ { ZyDisInstructionMnemonic::PMAXUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 419 */ { ZyDisInstructionMnemonic::PMAXUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41A */ { ZyDisInstructionMnemonic::PMINSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41B */ { ZyDisInstructionMnemonic::PMINSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41C */ { ZyDisInstructionMnemonic::PMINSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41D */ { ZyDisInstructionMnemonic::PMINSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41E */ { ZyDisInstructionMnemonic::PMINUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41F */ { ZyDisInstructionMnemonic::PMINUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 420 */ { ZyDisInstructionMnemonic::PMINUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 421 */ { ZyDisInstructionMnemonic::PMINUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 422 */ { ZyDisInstructionMnemonic::PMOVMSKB, { OPI_Gd, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 423 */ { ZyDisInstructionMnemonic::PMOVMSKB, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 424 */ { ZyDisInstructionMnemonic::PMOVSXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 425 */ { ZyDisInstructionMnemonic::PMOVSXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 426 */ { ZyDisInstructionMnemonic::PMOVSXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 427 */ { ZyDisInstructionMnemonic::PMOVSXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 428 */ { ZyDisInstructionMnemonic::PMOVSXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 429 */ { ZyDisInstructionMnemonic::PMOVSXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42A */ { ZyDisInstructionMnemonic::PMOVZXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42B */ { ZyDisInstructionMnemonic::PMOVZXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42C */ { ZyDisInstructionMnemonic::PMOVZXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42D */ { ZyDisInstructionMnemonic::PMOVZXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42E */ { ZyDisInstructionMnemonic::PMOVZXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42F */ { ZyDisInstructionMnemonic::PMOVZXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 430 */ { ZyDisInstructionMnemonic::PMULDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 431 */ { ZyDisInstructionMnemonic::PMULHRSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 432 */ { ZyDisInstructionMnemonic::PMULHRSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 433 */ { ZyDisInstructionMnemonic::PMULHRW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 434 */ { ZyDisInstructionMnemonic::PMULHUW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 435 */ { ZyDisInstructionMnemonic::PMULHUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 436 */ { ZyDisInstructionMnemonic::PMULHW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 437 */ { ZyDisInstructionMnemonic::PMULHW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 438 */ { ZyDisInstructionMnemonic::PMULLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 439 */ { ZyDisInstructionMnemonic::PMULLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43A */ { ZyDisInstructionMnemonic::PMULLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43B */ { ZyDisInstructionMnemonic::PMULUDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43C */ { ZyDisInstructionMnemonic::PMULUDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43D */ { ZyDisInstructionMnemonic::POP, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 43E */ { ZyDisInstructionMnemonic::POP, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 43F */ { ZyDisInstructionMnemonic::POP, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 440 */ { ZyDisInstructionMnemonic::POP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 441 */ { ZyDisInstructionMnemonic::POP, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 442 */ { ZyDisInstructionMnemonic::POP, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 443 */ { ZyDisInstructionMnemonic::POP, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 444 */ { ZyDisInstructionMnemonic::POP, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 445 */ { ZyDisInstructionMnemonic::POP, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 446 */ { ZyDisInstructionMnemonic::POP, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 447 */ { ZyDisInstructionMnemonic::POP, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 448 */ { ZyDisInstructionMnemonic::POP, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 449 */ { ZyDisInstructionMnemonic::POP, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 44A */ { ZyDisInstructionMnemonic::POP, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 44B */ { ZyDisInstructionMnemonic::POPA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 44C */ { ZyDisInstructionMnemonic::POPAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 44D */ { ZyDisInstructionMnemonic::POPCNT, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 44E */ { ZyDisInstructionMnemonic::POPFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 44F */ { ZyDisInstructionMnemonic::POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 450 */ { ZyDisInstructionMnemonic::POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 451 */ { ZyDisInstructionMnemonic::POPFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 452 */ { ZyDisInstructionMnemonic::POR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 453 */ { ZyDisInstructionMnemonic::POR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 454 */ { ZyDisInstructionMnemonic::PREFETCH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 455 */ { ZyDisInstructionMnemonic::PREFETCHNTA, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 456 */ { ZyDisInstructionMnemonic::PREFETCHT0, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 457 */ { ZyDisInstructionMnemonic::PREFETCHT1, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 458 */ { ZyDisInstructionMnemonic::PREFETCHT2, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 459 */ { ZyDisInstructionMnemonic::PSADBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45A */ { ZyDisInstructionMnemonic::PSADBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45B */ { ZyDisInstructionMnemonic::PSHUFB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45C */ { ZyDisInstructionMnemonic::PSHUFB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45D */ { ZyDisInstructionMnemonic::PSHUFD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 45E */ { ZyDisInstructionMnemonic::PSHUFHW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 45F */ { ZyDisInstructionMnemonic::PSHUFLW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 460 */ { ZyDisInstructionMnemonic::PSHUFW, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 461 */ { ZyDisInstructionMnemonic::PSIGNB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 462 */ { ZyDisInstructionMnemonic::PSIGNB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 463 */ { ZyDisInstructionMnemonic::PSIGND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 464 */ { ZyDisInstructionMnemonic::PSIGND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 465 */ { ZyDisInstructionMnemonic::PSIGNW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 466 */ { ZyDisInstructionMnemonic::PSIGNW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 467 */ { ZyDisInstructionMnemonic::PSLLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 468 */ { ZyDisInstructionMnemonic::PSLLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 469 */ { ZyDisInstructionMnemonic::PSLLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46A */ { ZyDisInstructionMnemonic::PSLLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46B */ { ZyDisInstructionMnemonic::PSLLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46C */ { ZyDisInstructionMnemonic::PSLLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46D */ { ZyDisInstructionMnemonic::PSLLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 46E */ { ZyDisInstructionMnemonic::PSLLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46F */ { ZyDisInstructionMnemonic::PSLLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 470 */ { ZyDisInstructionMnemonic::PSLLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 471 */ { ZyDisInstructionMnemonic::PSLLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 472 */ { ZyDisInstructionMnemonic::PSLLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 473 */ { ZyDisInstructionMnemonic::PSLLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 474 */ { ZyDisInstructionMnemonic::PSRAD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 475 */ { ZyDisInstructionMnemonic::PSRAD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 476 */ { ZyDisInstructionMnemonic::PSRAD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 477 */ { ZyDisInstructionMnemonic::PSRAD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 478 */ { ZyDisInstructionMnemonic::PSRAW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 479 */ { ZyDisInstructionMnemonic::PSRAW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 47A */ { ZyDisInstructionMnemonic::PSRAW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47B */ { ZyDisInstructionMnemonic::PSRAW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47C */ { ZyDisInstructionMnemonic::PSRLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47D */ { ZyDisInstructionMnemonic::PSRLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47E */ { ZyDisInstructionMnemonic::PSRLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 47F */ { ZyDisInstructionMnemonic::PSRLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 480 */ { ZyDisInstructionMnemonic::PSRLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 481 */ { ZyDisInstructionMnemonic::PSRLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 482 */ { ZyDisInstructionMnemonic::PSRLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 483 */ { ZyDisInstructionMnemonic::PSRLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 484 */ { ZyDisInstructionMnemonic::PSRLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 485 */ { ZyDisInstructionMnemonic::PSRLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 486 */ { ZyDisInstructionMnemonic::PSRLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 487 */ { ZyDisInstructionMnemonic::PSRLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 488 */ { ZyDisInstructionMnemonic::PSRLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 489 */ { ZyDisInstructionMnemonic::PSUBB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48A */ { ZyDisInstructionMnemonic::PSUBB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48B */ { ZyDisInstructionMnemonic::PSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48C */ { ZyDisInstructionMnemonic::PSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48D */ { ZyDisInstructionMnemonic::PSUBQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48E */ { ZyDisInstructionMnemonic::PSUBQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48F */ { ZyDisInstructionMnemonic::PSUBSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 490 */ { ZyDisInstructionMnemonic::PSUBSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 491 */ { ZyDisInstructionMnemonic::PSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 492 */ { ZyDisInstructionMnemonic::PSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 493 */ { ZyDisInstructionMnemonic::PSUBUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 494 */ { ZyDisInstructionMnemonic::PSUBUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 495 */ { ZyDisInstructionMnemonic::PSUBUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 496 */ { ZyDisInstructionMnemonic::PSUBUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 497 */ { ZyDisInstructionMnemonic::PSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 498 */ { ZyDisInstructionMnemonic::PSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 499 */ { ZyDisInstructionMnemonic::PSWAPD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 49A */ { ZyDisInstructionMnemonic::PTEST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 49B */ { ZyDisInstructionMnemonic::PUNPCKHBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49C */ { ZyDisInstructionMnemonic::PUNPCKHBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49D */ { ZyDisInstructionMnemonic::PUNPCKHDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49E */ { ZyDisInstructionMnemonic::PUNPCKHDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49F */ { ZyDisInstructionMnemonic::PUNPCKHQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A0 */ { ZyDisInstructionMnemonic::PUNPCKHWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A1 */ { ZyDisInstructionMnemonic::PUNPCKHWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A2 */ { ZyDisInstructionMnemonic::PUNPCKLBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A3 */ { ZyDisInstructionMnemonic::PUNPCKLBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A4 */ { ZyDisInstructionMnemonic::PUNPCKLDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A5 */ { ZyDisInstructionMnemonic::PUNPCKLDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A6 */ { ZyDisInstructionMnemonic::PUNPCKLQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A7 */ { ZyDisInstructionMnemonic::PUNPCKLWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A8 */ { ZyDisInstructionMnemonic::PUNPCKLWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A9 */ { ZyDisInstructionMnemonic::PUSH, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AA */ { ZyDisInstructionMnemonic::PUSH, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AB */ { ZyDisInstructionMnemonic::PUSH, { OPI_sIb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 4AC */ { ZyDisInstructionMnemonic::PUSH, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AD */ { ZyDisInstructionMnemonic::PUSH, { OPI_CS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AE */ { ZyDisInstructionMnemonic::PUSH, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4AF */ { ZyDisInstructionMnemonic::PUSH, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B0 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B1 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B2 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B3 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B4 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B5 */ { ZyDisInstructionMnemonic::PUSH, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4B6 */ { ZyDisInstructionMnemonic::PUSH, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4B7 */ { ZyDisInstructionMnemonic::PUSH, { OPI_sIz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4B8 */ { ZyDisInstructionMnemonic::PUSH, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B9 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4BA */ { ZyDisInstructionMnemonic::PUSHA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 4BB */ { ZyDisInstructionMnemonic::PUSHAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 4BC */ { ZyDisInstructionMnemonic::PUSHFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 4BD */ { ZyDisInstructionMnemonic::PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4BE */ { ZyDisInstructionMnemonic::PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4BF */ { ZyDisInstructionMnemonic::PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4C0 */ { ZyDisInstructionMnemonic::PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 4C1 */ { ZyDisInstructionMnemonic::PXOR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C2 */ { ZyDisInstructionMnemonic::PXOR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C3 */ { ZyDisInstructionMnemonic::RCL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C4 */ { ZyDisInstructionMnemonic::RCL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C5 */ { ZyDisInstructionMnemonic::RCL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C6 */ { ZyDisInstructionMnemonic::RCL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C7 */ { ZyDisInstructionMnemonic::RCL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C8 */ { ZyDisInstructionMnemonic::RCL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C9 */ { ZyDisInstructionMnemonic::RCPPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4CA */ { ZyDisInstructionMnemonic::RCPSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4CB */ { ZyDisInstructionMnemonic::RCR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CC */ { ZyDisInstructionMnemonic::RCR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CD */ { ZyDisInstructionMnemonic::RCR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CE */ { ZyDisInstructionMnemonic::RCR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CF */ { ZyDisInstructionMnemonic::RCR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4D0 */ { ZyDisInstructionMnemonic::RCR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4D1 */ { ZyDisInstructionMnemonic::RDMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D2 */ { ZyDisInstructionMnemonic::RDPMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D3 */ { ZyDisInstructionMnemonic::RDRAND, { OPI_R, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4D4 */ { ZyDisInstructionMnemonic::RDTSC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D5 */ { ZyDisInstructionMnemonic::RDTSCP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D6 */ { ZyDisInstructionMnemonic::REP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D7 */ { ZyDisInstructionMnemonic::REPNE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D8 */ { ZyDisInstructionMnemonic::RET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D9 */ { ZyDisInstructionMnemonic::RET, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4DA */ { ZyDisInstructionMnemonic::RETF, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4DB */ { ZyDisInstructionMnemonic::RETF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4DC */ { ZyDisInstructionMnemonic::ROL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4DD */ { ZyDisInstructionMnemonic::ROL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4DE */ { ZyDisInstructionMnemonic::ROL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4DF */ { ZyDisInstructionMnemonic::ROL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E0 */ { ZyDisInstructionMnemonic::ROL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E1 */ { ZyDisInstructionMnemonic::ROL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E2 */ { ZyDisInstructionMnemonic::ROR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E3 */ { ZyDisInstructionMnemonic::ROR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E4 */ { ZyDisInstructionMnemonic::ROR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E5 */ { ZyDisInstructionMnemonic::ROR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E6 */ { ZyDisInstructionMnemonic::ROR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E7 */ { ZyDisInstructionMnemonic::ROR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E8 */ { ZyDisInstructionMnemonic::ROUNDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4E9 */ { ZyDisInstructionMnemonic::ROUNDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EA */ { ZyDisInstructionMnemonic::ROUNDSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EB */ { ZyDisInstructionMnemonic::ROUNDSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EC */ { ZyDisInstructionMnemonic::RSM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4ED */ { ZyDisInstructionMnemonic::RSQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EE */ { ZyDisInstructionMnemonic::RSQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EF */ { ZyDisInstructionMnemonic::SAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4F0 */ { ZyDisInstructionMnemonic::SALC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 4F1 */ { ZyDisInstructionMnemonic::SAR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F2 */ { ZyDisInstructionMnemonic::SAR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F3 */ { ZyDisInstructionMnemonic::SAR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F4 */ { ZyDisInstructionMnemonic::SAR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F5 */ { ZyDisInstructionMnemonic::SAR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F6 */ { ZyDisInstructionMnemonic::SAR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F7 */ { ZyDisInstructionMnemonic::SBB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4F8 */ { ZyDisInstructionMnemonic::SBB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4F9 */ { ZyDisInstructionMnemonic::SBB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 4FA */ { ZyDisInstructionMnemonic::SBB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 4FB */ { ZyDisInstructionMnemonic::SBB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4FC */ { ZyDisInstructionMnemonic::SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 4FD */ { ZyDisInstructionMnemonic::SBB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4FE */ { ZyDisInstructionMnemonic::SBB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4FF */ { ZyDisInstructionMnemonic::SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 500 */ { ZyDisInstructionMnemonic::SBB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 501 */ { ZyDisInstructionMnemonic::SCASB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 502 */ { ZyDisInstructionMnemonic::SCASD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 503 */ { ZyDisInstructionMnemonic::SCASQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 504 */ { ZyDisInstructionMnemonic::SCASW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 505 */ { ZyDisInstructionMnemonic::SETA, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 506 */ { ZyDisInstructionMnemonic::SETAE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 507 */ { ZyDisInstructionMnemonic::SETB, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 508 */ { ZyDisInstructionMnemonic::SETBE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 509 */ { ZyDisInstructionMnemonic::SETE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50A */ { ZyDisInstructionMnemonic::SETG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50B */ { ZyDisInstructionMnemonic::SETGE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50C */ { ZyDisInstructionMnemonic::SETL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50D */ { ZyDisInstructionMnemonic::SETLE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50E */ { ZyDisInstructionMnemonic::SETNE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50F */ { ZyDisInstructionMnemonic::SETNO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 510 */ { ZyDisInstructionMnemonic::SETNP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 511 */ { ZyDisInstructionMnemonic::SETNS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 512 */ { ZyDisInstructionMnemonic::SETO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 513 */ { ZyDisInstructionMnemonic::SETP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 514 */ { ZyDisInstructionMnemonic::SETS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 515 */ { ZyDisInstructionMnemonic::SFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 516 */ { ZyDisInstructionMnemonic::SGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 517 */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 518 */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 519 */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51A */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51B */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51C */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51D */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51E */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51F */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 520 */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 521 */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 522 */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 523 */ { ZyDisInstructionMnemonic::SHLD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 524 */ { ZyDisInstructionMnemonic::SHLD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 525 */ { ZyDisInstructionMnemonic::SHR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 526 */ { ZyDisInstructionMnemonic::SHR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 527 */ { ZyDisInstructionMnemonic::SHR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 528 */ { ZyDisInstructionMnemonic::SHR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 529 */ { ZyDisInstructionMnemonic::SHR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52A */ { ZyDisInstructionMnemonic::SHR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52B */ { ZyDisInstructionMnemonic::SHRD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52C */ { ZyDisInstructionMnemonic::SHRD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52D */ { ZyDisInstructionMnemonic::SHUFPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52E */ { ZyDisInstructionMnemonic::SHUFPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52F */ { ZyDisInstructionMnemonic::SIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 530 */ { ZyDisInstructionMnemonic::SKINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 531 */ { ZyDisInstructionMnemonic::SLDT, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 532 */ { ZyDisInstructionMnemonic::SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 533 */ { ZyDisInstructionMnemonic::SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 534 */ { ZyDisInstructionMnemonic::SQRTPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 535 */ { ZyDisInstructionMnemonic::SQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 536 */ { ZyDisInstructionMnemonic::SQRTSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 537 */ { ZyDisInstructionMnemonic::SQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 538 */ { ZyDisInstructionMnemonic::STC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 539 */ { ZyDisInstructionMnemonic::STD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 53A */ { ZyDisInstructionMnemonic::STGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 53B */ { ZyDisInstructionMnemonic::STI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 53C */ { ZyDisInstructionMnemonic::STMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 53D */ { ZyDisInstructionMnemonic::STOSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 53E */ { ZyDisInstructionMnemonic::STOSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 53F */ { ZyDisInstructionMnemonic::STOSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 540 */ { ZyDisInstructionMnemonic::STOSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 541 */ { ZyDisInstructionMnemonic::STR, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 542 */ { ZyDisInstructionMnemonic::SUB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 543 */ { ZyDisInstructionMnemonic::SUB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 544 */ { ZyDisInstructionMnemonic::SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 545 */ { ZyDisInstructionMnemonic::SUB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 546 */ { ZyDisInstructionMnemonic::SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 547 */ { ZyDisInstructionMnemonic::SUB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 548 */ { ZyDisInstructionMnemonic::SUB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 549 */ { ZyDisInstructionMnemonic::SUB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54A */ { ZyDisInstructionMnemonic::SUB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 54B */ { ZyDisInstructionMnemonic::SUB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54C */ { ZyDisInstructionMnemonic::SUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54D */ { ZyDisInstructionMnemonic::SUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54E */ { ZyDisInstructionMnemonic::SUBSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54F */ { ZyDisInstructionMnemonic::SUBSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 550 */ { ZyDisInstructionMnemonic::SWAPGS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 551 */ { ZyDisInstructionMnemonic::SYSCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 552 */ { ZyDisInstructionMnemonic::SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 553 */ { ZyDisInstructionMnemonic::SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 554 */ { ZyDisInstructionMnemonic::SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 555 */ { ZyDisInstructionMnemonic::SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 556 */ { ZyDisInstructionMnemonic::SYSRET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 557 */ { ZyDisInstructionMnemonic::TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 558 */ { ZyDisInstructionMnemonic::TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 559 */ { ZyDisInstructionMnemonic::TEST, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55A */ { ZyDisInstructionMnemonic::TEST, { OPI_Ev, OPI_Iz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55B */ { ZyDisInstructionMnemonic::TEST, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 55C */ { ZyDisInstructionMnemonic::TEST, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55D */ { ZyDisInstructionMnemonic::TEST, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55E */ { ZyDisInstructionMnemonic::TEST, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, + /* 55F */ { ZyDisInstructionMnemonic::UCOMISD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 560 */ { ZyDisInstructionMnemonic::UCOMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 561 */ { ZyDisInstructionMnemonic::UD2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 562 */ { ZyDisInstructionMnemonic::UNPCKHPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 563 */ { ZyDisInstructionMnemonic::UNPCKHPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 564 */ { ZyDisInstructionMnemonic::UNPCKLPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 565 */ { ZyDisInstructionMnemonic::UNPCKLPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 566 */ { ZyDisInstructionMnemonic::VADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 567 */ { ZyDisInstructionMnemonic::VADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 568 */ { ZyDisInstructionMnemonic::VADDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 569 */ { ZyDisInstructionMnemonic::VADDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56A */ { ZyDisInstructionMnemonic::VADDSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56B */ { ZyDisInstructionMnemonic::VADDSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56C */ { ZyDisInstructionMnemonic::VAESDEC, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56D */ { ZyDisInstructionMnemonic::VAESDECLAST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56E */ { ZyDisInstructionMnemonic::VAESENC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56F */ { ZyDisInstructionMnemonic::VAESENCLAST, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 570 */ { ZyDisInstructionMnemonic::VAESIMC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 571 */ { ZyDisInstructionMnemonic::VAESKEYGENASSIST, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 572 */ { ZyDisInstructionMnemonic::VANDNPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 573 */ { ZyDisInstructionMnemonic::VANDNPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 574 */ { ZyDisInstructionMnemonic::VANDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 575 */ { ZyDisInstructionMnemonic::VANDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 576 */ { ZyDisInstructionMnemonic::VBLENDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 577 */ { ZyDisInstructionMnemonic::VBLENDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 578 */ { ZyDisInstructionMnemonic::VBLENDVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 579 */ { ZyDisInstructionMnemonic::VBLENDVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 57A */ { ZyDisInstructionMnemonic::VBROADCASTSD, { OPI_Vqq, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 57B */ { ZyDisInstructionMnemonic::VBROADCASTSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 57C */ { ZyDisInstructionMnemonic::VCMPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 57D */ { ZyDisInstructionMnemonic::VCMPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 57E */ { ZyDisInstructionMnemonic::VCMPSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 57F */ { ZyDisInstructionMnemonic::VCMPSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 580 */ { ZyDisInstructionMnemonic::VCOMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 581 */ { ZyDisInstructionMnemonic::VCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 582 */ { ZyDisInstructionMnemonic::VCVTDQ2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 583 */ { ZyDisInstructionMnemonic::VCVTDQ2PS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 584 */ { ZyDisInstructionMnemonic::VCVTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 585 */ { ZyDisInstructionMnemonic::VCVTPD2PS, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 586 */ { ZyDisInstructionMnemonic::VCVTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 587 */ { ZyDisInstructionMnemonic::VCVTPS2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 588 */ { ZyDisInstructionMnemonic::VCVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 589 */ { ZyDisInstructionMnemonic::VCVTSD2SS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58A */ { ZyDisInstructionMnemonic::VCVTSI2SD, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58B */ { ZyDisInstructionMnemonic::VCVTSI2SS, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58C */ { ZyDisInstructionMnemonic::VCVTSS2SD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58D */ { ZyDisInstructionMnemonic::VCVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58E */ { ZyDisInstructionMnemonic::VCVTTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 58F */ { ZyDisInstructionMnemonic::VCVTTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 590 */ { ZyDisInstructionMnemonic::VCVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 591 */ { ZyDisInstructionMnemonic::VCVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 592 */ { ZyDisInstructionMnemonic::VDIVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 593 */ { ZyDisInstructionMnemonic::VDIVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 594 */ { ZyDisInstructionMnemonic::VDIVSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 595 */ { ZyDisInstructionMnemonic::VDIVSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 596 */ { ZyDisInstructionMnemonic::VDPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 597 */ { ZyDisInstructionMnemonic::VDPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 598 */ { ZyDisInstructionMnemonic::VERR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 599 */ { ZyDisInstructionMnemonic::VERW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 59A */ { ZyDisInstructionMnemonic::VEXTRACTF128, { OPI_Wdq, OPI_Vqq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 59B */ { ZyDisInstructionMnemonic::VEXTRACTPS, { OPI_MdRy, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 59C */ { ZyDisInstructionMnemonic::VHADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 59D */ { ZyDisInstructionMnemonic::VHADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 59E */ { ZyDisInstructionMnemonic::VHSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 59F */ { ZyDisInstructionMnemonic::VHSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5A0 */ { ZyDisInstructionMnemonic::VINSERTF128, { OPI_Vqq, OPI_Hqq, OPI_Wdq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A1 */ { ZyDisInstructionMnemonic::VINSERTPS, { OPI_Vx, OPI_Hx, OPI_Md, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5A2 */ { ZyDisInstructionMnemonic::VLDDQU, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A3 */ { ZyDisInstructionMnemonic::VMASKMOVDQU, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5A4 */ { ZyDisInstructionMnemonic::VMASKMOVPD, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A5 */ { ZyDisInstructionMnemonic::VMASKMOVPD, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A6 */ { ZyDisInstructionMnemonic::VMASKMOVPS, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A7 */ { ZyDisInstructionMnemonic::VMASKMOVPS, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A8 */ { ZyDisInstructionMnemonic::VMAXPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5A9 */ { ZyDisInstructionMnemonic::VMAXPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5AA */ { ZyDisInstructionMnemonic::VMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5AB */ { ZyDisInstructionMnemonic::VMAXSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5AC */ { ZyDisInstructionMnemonic::VMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5AD */ { ZyDisInstructionMnemonic::VMCLEAR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5AE */ { ZyDisInstructionMnemonic::VMINPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5AF */ { ZyDisInstructionMnemonic::VMINPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5B0 */ { ZyDisInstructionMnemonic::VMINSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5B1 */ { ZyDisInstructionMnemonic::VMINSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5B2 */ { ZyDisInstructionMnemonic::VMLAUNCH, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5B3 */ { ZyDisInstructionMnemonic::VMLOAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5B4 */ { ZyDisInstructionMnemonic::VMMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5B5 */ { ZyDisInstructionMnemonic::VMOVAPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B6 */ { ZyDisInstructionMnemonic::VMOVAPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B7 */ { ZyDisInstructionMnemonic::VMOVAPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B8 */ { ZyDisInstructionMnemonic::VMOVAPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B9 */ { ZyDisInstructionMnemonic::VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BA */ { ZyDisInstructionMnemonic::VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BB */ { ZyDisInstructionMnemonic::VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BC */ { ZyDisInstructionMnemonic::VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BD */ { ZyDisInstructionMnemonic::VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BE */ { ZyDisInstructionMnemonic::VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BF */ { ZyDisInstructionMnemonic::VMOVDQA, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C0 */ { ZyDisInstructionMnemonic::VMOVDQA, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C1 */ { ZyDisInstructionMnemonic::VMOVDQU, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C2 */ { ZyDisInstructionMnemonic::VMOVDQU, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C3 */ { ZyDisInstructionMnemonic::VMOVHLPS, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C4 */ { ZyDisInstructionMnemonic::VMOVHPD, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C5 */ { ZyDisInstructionMnemonic::VMOVHPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C6 */ { ZyDisInstructionMnemonic::VMOVHPS, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C7 */ { ZyDisInstructionMnemonic::VMOVHPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C8 */ { ZyDisInstructionMnemonic::VMOVLHPS, { OPI_Vx, OPI_Hx, OPI_Ux, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C9 */ { ZyDisInstructionMnemonic::VMOVLPD, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CA */ { ZyDisInstructionMnemonic::VMOVLPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CB */ { ZyDisInstructionMnemonic::VMOVLPS, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CC */ { ZyDisInstructionMnemonic::VMOVLPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CD */ { ZyDisInstructionMnemonic::VMOVMSKPD, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5CE */ { ZyDisInstructionMnemonic::VMOVMSKPS, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CF */ { ZyDisInstructionMnemonic::VMOVNTDQ, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D0 */ { ZyDisInstructionMnemonic::VMOVNTDQA, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D1 */ { ZyDisInstructionMnemonic::VMOVNTPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D2 */ { ZyDisInstructionMnemonic::VMOVNTPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D3 */ { ZyDisInstructionMnemonic::VMOVQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D4 */ { ZyDisInstructionMnemonic::VMOVQ, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D5 */ { ZyDisInstructionMnemonic::VMOVQ, { OPI_Vx, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D6 */ { ZyDisInstructionMnemonic::VMOVQ, { OPI_Eq, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D7 */ { ZyDisInstructionMnemonic::VMOVSD, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D8 */ { ZyDisInstructionMnemonic::VMOVSD, { OPI_Mq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D9 */ { ZyDisInstructionMnemonic::VMOVSD, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5DA */ { ZyDisInstructionMnemonic::VMOVSD, { OPI_V, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5DB */ { ZyDisInstructionMnemonic::VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DC */ { ZyDisInstructionMnemonic::VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DD */ { ZyDisInstructionMnemonic::VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DE */ { ZyDisInstructionMnemonic::VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DF */ { ZyDisInstructionMnemonic::VMOVSS, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E0 */ { ZyDisInstructionMnemonic::VMOVSS, { OPI_Md, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E1 */ { ZyDisInstructionMnemonic::VMOVSS, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E2 */ { ZyDisInstructionMnemonic::VMOVSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E3 */ { ZyDisInstructionMnemonic::VMOVUPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E4 */ { ZyDisInstructionMnemonic::VMOVUPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E5 */ { ZyDisInstructionMnemonic::VMOVUPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E6 */ { ZyDisInstructionMnemonic::VMOVUPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E7 */ { ZyDisInstructionMnemonic::VMPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5E8 */ { ZyDisInstructionMnemonic::VMPTRLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5E9 */ { ZyDisInstructionMnemonic::VMPTRST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5EA */ { ZyDisInstructionMnemonic::VMREAD, { OPI_Ey, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 5EB */ { ZyDisInstructionMnemonic::VMRESUME, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5EC */ { ZyDisInstructionMnemonic::VMRUN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5ED */ { ZyDisInstructionMnemonic::VMSAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5EE */ { ZyDisInstructionMnemonic::VMULPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5EF */ { ZyDisInstructionMnemonic::VMULPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5F0 */ { ZyDisInstructionMnemonic::VMULSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5F1 */ { ZyDisInstructionMnemonic::VMULSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5F2 */ { ZyDisInstructionMnemonic::VMWRITE, { OPI_Gy, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 5F3 */ { ZyDisInstructionMnemonic::VMXOFF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5F4 */ { ZyDisInstructionMnemonic::VMXON, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5F5 */ { ZyDisInstructionMnemonic::VORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5F6 */ { ZyDisInstructionMnemonic::VORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 5F7 */ { ZyDisInstructionMnemonic::VPABSB, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5F8 */ { ZyDisInstructionMnemonic::VPABSD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5F9 */ { ZyDisInstructionMnemonic::VPABSW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5FA */ { ZyDisInstructionMnemonic::VPACKSSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FB */ { ZyDisInstructionMnemonic::VPACKSSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FC */ { ZyDisInstructionMnemonic::VPACKUSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FD */ { ZyDisInstructionMnemonic::VPACKUSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FE */ { ZyDisInstructionMnemonic::VPADDB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FF */ { ZyDisInstructionMnemonic::VPADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 600 */ { ZyDisInstructionMnemonic::VPADDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 601 */ { ZyDisInstructionMnemonic::VPADDSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 602 */ { ZyDisInstructionMnemonic::VPADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 603 */ { ZyDisInstructionMnemonic::VPADDUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 604 */ { ZyDisInstructionMnemonic::VPADDUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 605 */ { ZyDisInstructionMnemonic::VPADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 606 */ { ZyDisInstructionMnemonic::VPALIGNR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 607 */ { ZyDisInstructionMnemonic::VPAND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 608 */ { ZyDisInstructionMnemonic::VPANDN, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 609 */ { ZyDisInstructionMnemonic::VPAVGB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60A */ { ZyDisInstructionMnemonic::VPAVGW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60B */ { ZyDisInstructionMnemonic::VPBLENDVB, { OPI_V, OPI_H, OPI_W, OPI_L }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 60C */ { ZyDisInstructionMnemonic::VPBLENDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60D */ { ZyDisInstructionMnemonic::VPCLMULQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60E */ { ZyDisInstructionMnemonic::VPCMPEQB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60F */ { ZyDisInstructionMnemonic::VPCMPEQD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 610 */ { ZyDisInstructionMnemonic::VPCMPEQQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 611 */ { ZyDisInstructionMnemonic::VPCMPEQW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 612 */ { ZyDisInstructionMnemonic::VPCMPESTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 613 */ { ZyDisInstructionMnemonic::VPCMPESTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 614 */ { ZyDisInstructionMnemonic::VPCMPGTB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 615 */ { ZyDisInstructionMnemonic::VPCMPGTD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 616 */ { ZyDisInstructionMnemonic::VPCMPGTQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 617 */ { ZyDisInstructionMnemonic::VPCMPGTW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 618 */ { ZyDisInstructionMnemonic::VPCMPISTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 619 */ { ZyDisInstructionMnemonic::VPCMPISTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 61A */ { ZyDisInstructionMnemonic::VPERM2F128, { OPI_Vqq, OPI_Hqq, OPI_Wqq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61B */ { ZyDisInstructionMnemonic::VPERMILPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61C */ { ZyDisInstructionMnemonic::VPERMILPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61D */ { ZyDisInstructionMnemonic::VPERMILPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61E */ { ZyDisInstructionMnemonic::VPERMILPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61F */ { ZyDisInstructionMnemonic::VPEXTRB, { OPI_MbRv, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 620 */ { ZyDisInstructionMnemonic::VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 621 */ { ZyDisInstructionMnemonic::VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 622 */ { ZyDisInstructionMnemonic::VPEXTRQ, { OPI_Eq, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 623 */ { ZyDisInstructionMnemonic::VPEXTRW, { OPI_Gd, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 624 */ { ZyDisInstructionMnemonic::VPEXTRW, { OPI_MwRd, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 625 */ { ZyDisInstructionMnemonic::VPHADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 626 */ { ZyDisInstructionMnemonic::VPHADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 627 */ { ZyDisInstructionMnemonic::VPHADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 628 */ { ZyDisInstructionMnemonic::VPHMINPOSUW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 629 */ { ZyDisInstructionMnemonic::VPHSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 62A */ { ZyDisInstructionMnemonic::VPHSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 62B */ { ZyDisInstructionMnemonic::VPHSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 62C */ { ZyDisInstructionMnemonic::VPINSRB, { OPI_V, OPI_H, OPI_MbRd, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 62D */ { ZyDisInstructionMnemonic::VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 62E */ { ZyDisInstructionMnemonic::VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 62F */ { ZyDisInstructionMnemonic::VPINSRQ, { OPI_V, OPI_H, OPI_Eq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 630 */ { ZyDisInstructionMnemonic::VPINSRW, { OPI_Vx, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 631 */ { ZyDisInstructionMnemonic::VPMADDUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 632 */ { ZyDisInstructionMnemonic::VPMADDWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 633 */ { ZyDisInstructionMnemonic::VPMAXSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 634 */ { ZyDisInstructionMnemonic::VPMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 635 */ { ZyDisInstructionMnemonic::VPMAXSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 636 */ { ZyDisInstructionMnemonic::VPMAXUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 637 */ { ZyDisInstructionMnemonic::VPMAXUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 638 */ { ZyDisInstructionMnemonic::VPMAXUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 639 */ { ZyDisInstructionMnemonic::VPMINSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63A */ { ZyDisInstructionMnemonic::VPMINSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63B */ { ZyDisInstructionMnemonic::VPMINSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63C */ { ZyDisInstructionMnemonic::VPMINUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63D */ { ZyDisInstructionMnemonic::VPMINUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63E */ { ZyDisInstructionMnemonic::VPMINUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63F */ { ZyDisInstructionMnemonic::VPMOVMSKB, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 640 */ { ZyDisInstructionMnemonic::VPMOVSXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 641 */ { ZyDisInstructionMnemonic::VPMOVSXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 642 */ { ZyDisInstructionMnemonic::VPMOVSXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 643 */ { ZyDisInstructionMnemonic::VPMOVSXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 644 */ { ZyDisInstructionMnemonic::VPMOVSXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 645 */ { ZyDisInstructionMnemonic::VPMOVZXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 646 */ { ZyDisInstructionMnemonic::VPMOVZXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 647 */ { ZyDisInstructionMnemonic::VPMOVZXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 648 */ { ZyDisInstructionMnemonic::VPMOVZXDQ, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 649 */ { ZyDisInstructionMnemonic::VPMOVZXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 64A */ { ZyDisInstructionMnemonic::VPMOVZXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 64B */ { ZyDisInstructionMnemonic::VPMULDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64C */ { ZyDisInstructionMnemonic::VPMULHRSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64D */ { ZyDisInstructionMnemonic::VPMULHUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64E */ { ZyDisInstructionMnemonic::VPMULHW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64F */ { ZyDisInstructionMnemonic::VPMULLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 650 */ { ZyDisInstructionMnemonic::VPMULLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 651 */ { ZyDisInstructionMnemonic::VPOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 652 */ { ZyDisInstructionMnemonic::VPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 653 */ { ZyDisInstructionMnemonic::VPSHUFB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 654 */ { ZyDisInstructionMnemonic::VPSHUFD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 655 */ { ZyDisInstructionMnemonic::VPSHUFHW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 656 */ { ZyDisInstructionMnemonic::VPSHUFLW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 657 */ { ZyDisInstructionMnemonic::VPSIGNB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 658 */ { ZyDisInstructionMnemonic::VPSIGND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 659 */ { ZyDisInstructionMnemonic::VPSIGNW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 65A */ { ZyDisInstructionMnemonic::VPSLLD, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65B */ { ZyDisInstructionMnemonic::VPSLLD, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65C */ { ZyDisInstructionMnemonic::VPSLLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 65D */ { ZyDisInstructionMnemonic::VPSLLQ, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65E */ { ZyDisInstructionMnemonic::VPSLLQ, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65F */ { ZyDisInstructionMnemonic::VPSLLW, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 660 */ { ZyDisInstructionMnemonic::VPSLLW, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 661 */ { ZyDisInstructionMnemonic::VPSRAD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 662 */ { ZyDisInstructionMnemonic::VPSRAD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 663 */ { ZyDisInstructionMnemonic::VPSRAW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 664 */ { ZyDisInstructionMnemonic::VPSRAW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 665 */ { ZyDisInstructionMnemonic::VPSRLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 666 */ { ZyDisInstructionMnemonic::VPSRLD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 667 */ { ZyDisInstructionMnemonic::VPSRLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 668 */ { ZyDisInstructionMnemonic::VPSRLQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 669 */ { ZyDisInstructionMnemonic::VPSRLQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66A */ { ZyDisInstructionMnemonic::VPSRLW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66B */ { ZyDisInstructionMnemonic::VPSRLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66C */ { ZyDisInstructionMnemonic::VPSUBB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66D */ { ZyDisInstructionMnemonic::VPSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66E */ { ZyDisInstructionMnemonic::VPSUBQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66F */ { ZyDisInstructionMnemonic::VPSUBSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 670 */ { ZyDisInstructionMnemonic::VPSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 671 */ { ZyDisInstructionMnemonic::VPSUBUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 672 */ { ZyDisInstructionMnemonic::VPSUBUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 673 */ { ZyDisInstructionMnemonic::VPSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 674 */ { ZyDisInstructionMnemonic::VPTEST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 675 */ { ZyDisInstructionMnemonic::VPUNPCKHBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 676 */ { ZyDisInstructionMnemonic::VPUNPCKHDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 677 */ { ZyDisInstructionMnemonic::VPUNPCKHQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 678 */ { ZyDisInstructionMnemonic::VPUNPCKHWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 679 */ { ZyDisInstructionMnemonic::VPUNPCKLBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67A */ { ZyDisInstructionMnemonic::VPUNPCKLDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67B */ { ZyDisInstructionMnemonic::VPUNPCKLQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67C */ { ZyDisInstructionMnemonic::VPUNPCKLWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67D */ { ZyDisInstructionMnemonic::VPXOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67E */ { ZyDisInstructionMnemonic::VRCPPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 67F */ { ZyDisInstructionMnemonic::VRCPSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 680 */ { ZyDisInstructionMnemonic::VROUNDPD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 681 */ { ZyDisInstructionMnemonic::VROUNDPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 682 */ { ZyDisInstructionMnemonic::VROUNDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 683 */ { ZyDisInstructionMnemonic::VROUNDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 684 */ { ZyDisInstructionMnemonic::VRSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 685 */ { ZyDisInstructionMnemonic::VRSQRTSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 686 */ { ZyDisInstructionMnemonic::VSHUFPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 687 */ { ZyDisInstructionMnemonic::VSHUFPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 688 */ { ZyDisInstructionMnemonic::VSQRTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 689 */ { ZyDisInstructionMnemonic::VSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 68A */ { ZyDisInstructionMnemonic::VSQRTSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 68B */ { ZyDisInstructionMnemonic::VSQRTSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 68C */ { ZyDisInstructionMnemonic::VSTMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 68D */ { ZyDisInstructionMnemonic::VSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 68E */ { ZyDisInstructionMnemonic::VSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 68F */ { ZyDisInstructionMnemonic::VSUBSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 690 */ { ZyDisInstructionMnemonic::VSUBSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 691 */ { ZyDisInstructionMnemonic::VTESTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 692 */ { ZyDisInstructionMnemonic::VTESTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 693 */ { ZyDisInstructionMnemonic::VUCOMISD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 694 */ { ZyDisInstructionMnemonic::VUCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 695 */ { ZyDisInstructionMnemonic::VUNPCKHPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 696 */ { ZyDisInstructionMnemonic::VUNPCKHPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 697 */ { ZyDisInstructionMnemonic::VUNPCKLPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 698 */ { ZyDisInstructionMnemonic::VUNPCKLPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 699 */ { ZyDisInstructionMnemonic::ZyDisORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 69A */ { ZyDisInstructionMnemonic::ZyDisORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 69B */ { ZyDisInstructionMnemonic::VZEROALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69C */ { ZyDisInstructionMnemonic::VZEROUPPER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69D */ { ZyDisInstructionMnemonic::WAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69E */ { ZyDisInstructionMnemonic::WBINVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69F */ { ZyDisInstructionMnemonic::WRMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6A0 */ { ZyDisInstructionMnemonic::XADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, + /* 6A1 */ { ZyDisInstructionMnemonic::XADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, + /* 6A2 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R4v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A3 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R3v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A4 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R5v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A5 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R7v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A6 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R6v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A7 */ { ZyDisInstructionMnemonic::XCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A8 */ { ZyDisInstructionMnemonic::XCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A9 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R0v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6AA */ { ZyDisInstructionMnemonic::XCHG, { OPI_R2v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6AB */ { ZyDisInstructionMnemonic::XCHG, { OPI_R1v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6AC */ { ZyDisInstructionMnemonic::XCRYPTCBC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6AD */ { ZyDisInstructionMnemonic::XCRYPTCFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6AE */ { ZyDisInstructionMnemonic::XCRYPTCTR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6AF */ { ZyDisInstructionMnemonic::XCRYPTECB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6B0 */ { ZyDisInstructionMnemonic::XCRYPTOFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6B1 */ { ZyDisInstructionMnemonic::XGETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6B2 */ { ZyDisInstructionMnemonic::XLATB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 6B3 */ { ZyDisInstructionMnemonic::XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 6B4 */ { ZyDisInstructionMnemonic::XOR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B5 */ { ZyDisInstructionMnemonic::XOR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B6 */ { ZyDisInstructionMnemonic::XOR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B7 */ { ZyDisInstructionMnemonic::XOR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B8 */ { ZyDisInstructionMnemonic::XOR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B9 */ { ZyDisInstructionMnemonic::XOR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BA */ { ZyDisInstructionMnemonic::XOR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 6BB */ { ZyDisInstructionMnemonic::XOR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 6BC */ { ZyDisInstructionMnemonic::XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BD */ { ZyDisInstructionMnemonic::XORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BE */ { ZyDisInstructionMnemonic::XORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BF */ { ZyDisInstructionMnemonic::XRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 6C0 */ { ZyDisInstructionMnemonic::XSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 6C1 */ { ZyDisInstructionMnemonic::XSETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6C2 */ { ZyDisInstructionMnemonic::XSHA1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6C3 */ { ZyDisInstructionMnemonic::XSHA256, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6C4 */ { ZyDisInstructionMnemonic::XSTORE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, +}; + +#undef OPI_NONE +#undef OPI_AL +#undef OPI_AX +#undef OPI_Av +#undef OPI_C +#undef OPI_CL +#undef OPI_CS +#undef OPI_CX +#undef OPI_D +#undef OPI_DL +#undef OPI_DS +#undef OPI_DX +#undef OPI_E +#undef OPI_ES +#undef OPI_Eb +#undef OPI_Ed +#undef OPI_Eq +#undef OPI_Ev +#undef OPI_Ew +#undef OPI_Ey +#undef OPI_Ez +#undef OPI_FS +#undef OPI_Fv +#undef OPI_G +#undef OPI_GS +#undef OPI_Gb +#undef OPI_Gd +#undef OPI_Gq +#undef OPI_Gv +#undef OPI_Gw +#undef OPI_Gy +#undef OPI_Gz +#undef OPI_H +#undef OPI_Hqq +#undef OPI_Hx +#undef OPI_I1 +#undef OPI_Ib +#undef OPI_Iv +#undef OPI_Iw +#undef OPI_Iz +#undef OPI_Jb +#undef OPI_Jv +#undef OPI_Jz +#undef OPI_L +#undef OPI_Lx +#undef OPI_M +#undef OPI_Mb +#undef OPI_MbRd +#undef OPI_MbRv +#undef OPI_Md +#undef OPI_MdRy +#undef OPI_MdU +#undef OPI_Mdq +#undef OPI_Mo +#undef OPI_Mq +#undef OPI_MqU +#undef OPI_Ms +#undef OPI_Mt +#undef OPI_Mv +#undef OPI_Mw +#undef OPI_MwRd +#undef OPI_MwRv +#undef OPI_MwRy +#undef OPI_MwU +#undef OPI_N +#undef OPI_Ob +#undef OPI_Ov +#undef OPI_Ow +#undef OPI_P +#undef OPI_Q +#undef OPI_R +#undef OPI_R0b +#undef OPI_R0v +#undef OPI_R0w +#undef OPI_R0y +#undef OPI_R0z +#undef OPI_R1b +#undef OPI_R1v +#undef OPI_R1w +#undef OPI_R1y +#undef OPI_R1z +#undef OPI_R2b +#undef OPI_R2v +#undef OPI_R2w +#undef OPI_R2y +#undef OPI_R2z +#undef OPI_R3b +#undef OPI_R3v +#undef OPI_R3w +#undef OPI_R3y +#undef OPI_R3z +#undef OPI_R4b +#undef OPI_R4v +#undef OPI_R4w +#undef OPI_R4y +#undef OPI_R4z +#undef OPI_R5b +#undef OPI_R5v +#undef OPI_R5w +#undef OPI_R5y +#undef OPI_R5z +#undef OPI_R6b +#undef OPI_R6v +#undef OPI_R6w +#undef OPI_R6y +#undef OPI_R6z +#undef OPI_R7b +#undef OPI_R7v +#undef OPI_R7w +#undef OPI_R7y +#undef OPI_R7z +#undef OPI_S +#undef OPI_SS +#undef OPI_ST0 +#undef OPI_ST1 +#undef OPI_ST2 +#undef OPI_ST3 +#undef OPI_ST4 +#undef OPI_ST5 +#undef OPI_ST6 +#undef OPI_ST7 +#undef OPI_U +#undef OPI_Ux +#undef OPI_V +#undef OPI_Vdq +#undef OPI_Vqq +#undef OPI_Vsd +#undef OPI_Vx +#undef OPI_W +#undef OPI_Wdq +#undef OPI_Wqq +#undef OPI_Wsd +#undef OPI_Wx +#undef OPI_eAX +#undef OPI_eCX +#undef OPI_eDX +#undef OPI_rAX +#undef OPI_rCX +#undef OPI_rDX +#undef OPI_sIb +#undef OPI_sIz + +const char* instrMnemonicStrings[] = +{ + /* 000 */ "invalid", + /* 001 */ "aaa", + /* 002 */ "aad", + /* 003 */ "aam", + /* 004 */ "aas", + /* 005 */ "adc", + /* 006 */ "add", + /* 007 */ "addpd", + /* 008 */ "addps", + /* 009 */ "addsd", + /* 00A */ "addss", + /* 00B */ "addsubpd", + /* 00C */ "addsubps", + /* 00D */ "aesdec", + /* 00E */ "aesdeclast", + /* 00F */ "aesenc", + /* 010 */ "aesenclast", + /* 011 */ "aesimc", + /* 012 */ "aeskeygenassist", + /* 013 */ "and", + /* 014 */ "andnpd", + /* 015 */ "andnps", + /* 016 */ "andpd", + /* 017 */ "andps", + /* 018 */ "arpl", + /* 019 */ "blendpd", + /* 01A */ "blendps", + /* 01B */ "blendvpd", + /* 01C */ "blendvps", + /* 01D */ "bound", + /* 01E */ "bsf", + /* 01F */ "bsr", + /* 020 */ "bswap", + /* 021 */ "bt", + /* 022 */ "btc", + /* 023 */ "btr", + /* 024 */ "bts", + /* 025 */ "call", + /* 026 */ "cbw", + /* 027 */ "cdq", + /* 028 */ "cdqe", + /* 029 */ "clc", + /* 02A */ "cld", + /* 02B */ "clflush", + /* 02C */ "clgi", + /* 02D */ "cli", + /* 02E */ "clts", + /* 02F */ "cmc", + /* 030 */ "cmova", + /* 031 */ "cmovae", + /* 032 */ "cmovb", + /* 033 */ "cmovbe", + /* 034 */ "cmove", + /* 035 */ "cmovg", + /* 036 */ "cmovge", + /* 037 */ "cmovl", + /* 038 */ "cmovle", + /* 039 */ "cmovne", + /* 03A */ "cmovno", + /* 03B */ "cmovnp", + /* 03C */ "cmovns", + /* 03D */ "cmovo", + /* 03E */ "cmovp", + /* 03F */ "cmovs", + /* 040 */ "cmp", + /* 041 */ "cmppd", + /* 042 */ "cmpps", + /* 043 */ "cmpsb", + /* 044 */ "cmpsd", + /* 045 */ "cmpsq", + /* 046 */ "cmpss", + /* 047 */ "cmpsw", + /* 048 */ "cmpxchg", + /* 049 */ "cmpxchg16b", + /* 04A */ "cmpxchg8b", + /* 04B */ "comisd", + /* 04C */ "comiss", + /* 04D */ "cpuid", + /* 04E */ "cqo", + /* 04F */ "crc32", + /* 050 */ "cvtdq2pd", + /* 051 */ "cvtdq2ps", + /* 052 */ "cvtpd2dq", + /* 053 */ "cvtpd2pi", + /* 054 */ "cvtpd2ps", + /* 055 */ "cvtpi2pd", + /* 056 */ "cvtpi2ps", + /* 057 */ "cvtps2dq", + /* 058 */ "cvtps2pd", + /* 059 */ "cvtps2pi", + /* 05A */ "cvtsd2si", + /* 05B */ "cvtsd2ss", + /* 05C */ "cvtsi2sd", + /* 05D */ "cvtsi2ss", + /* 05E */ "cvtss2sd", + /* 05F */ "cvtss2si", + /* 060 */ "cvttpd2dq", + /* 061 */ "cvttpd2pi", + /* 062 */ "cvttps2dq", + /* 063 */ "cvttps2pi", + /* 064 */ "cvttsd2si", + /* 065 */ "cvttss2si", + /* 066 */ "cwd", + /* 067 */ "cwde", + /* 068 */ "daa", + /* 069 */ "das", + /* 06A */ "dec", + /* 06B */ "div", + /* 06C */ "divpd", + /* 06D */ "divps", + /* 06E */ "divsd", + /* 06F */ "divss", + /* 070 */ "dppd", + /* 071 */ "dpps", + /* 072 */ "emms", + /* 073 */ "enter", + /* 074 */ "extractps", + /* 075 */ "f2xm1", + /* 076 */ "fabs", + /* 077 */ "fadd", + /* 078 */ "faddp", + /* 079 */ "fbld", + /* 07A */ "fbstp", + /* 07B */ "fchs", + /* 07C */ "fclex", + /* 07D */ "fcmovb", + /* 07E */ "fcmovbe", + /* 07F */ "fcmove", + /* 080 */ "fcmovnb", + /* 081 */ "fcmovnbe", + /* 082 */ "fcmovne", + /* 083 */ "fcmovnu", + /* 084 */ "fcmovu", + /* 085 */ "fcom", + /* 086 */ "fcom2", + /* 087 */ "fcomi", + /* 088 */ "fcomip", + /* 089 */ "fcomp", + /* 08A */ "fcomp3", + /* 08B */ "fcomp5", + /* 08C */ "fcompp", + /* 08D */ "fcos", + /* 08E */ "fdecstp", + /* 08F */ "fdiv", + /* 090 */ "fdivp", + /* 091 */ "fdivr", + /* 092 */ "fdivrp", + /* 093 */ "femms", + /* 094 */ "ffree", + /* 095 */ "ffreep", + /* 096 */ "fiadd", + /* 097 */ "ficom", + /* 098 */ "ficomp", + /* 099 */ "fidiv", + /* 09A */ "fidivr", + /* 09B */ "fild", + /* 09C */ "fimul", + /* 09D */ "fincstp", + /* 09E */ "fist", + /* 09F */ "fistp", + /* 0A0 */ "fisttp", + /* 0A1 */ "fisub", + /* 0A2 */ "fisubr", + /* 0A3 */ "fld", + /* 0A4 */ "fld1", + /* 0A5 */ "fldcw", + /* 0A6 */ "fldenv", + /* 0A7 */ "fldl2e", + /* 0A8 */ "fldl2t", + /* 0A9 */ "fldlg2", + /* 0AA */ "fldln2", + /* 0AB */ "fldpi", + /* 0AC */ "fldz", + /* 0AD */ "fmul", + /* 0AE */ "fmulp", + /* 0AF */ "fndisi", + /* 0B0 */ "fneni", + /* 0B1 */ "fninit", + /* 0B2 */ "fnop", + /* 0B3 */ "fnsave", + /* 0B4 */ "fnsetpm", + /* 0B5 */ "fnstcw", + /* 0B6 */ "fnstenv", + /* 0B7 */ "fnstsw", + /* 0B8 */ "fpatan", + /* 0B9 */ "fprem", + /* 0BA */ "fprem1", + /* 0BB */ "fptan", + /* 0BC */ "frndint", + /* 0BD */ "frstor", + /* 0BE */ "frstpm", + /* 0BF */ "fscale", + /* 0C0 */ "fsin", + /* 0C1 */ "fsincos", + /* 0C2 */ "fsqrt", + /* 0C3 */ "fst", + /* 0C4 */ "fstp", + /* 0C5 */ "fstp1", + /* 0C6 */ "fstp8", + /* 0C7 */ "fstp9", + /* 0C8 */ "fsub", + /* 0C9 */ "fsubp", + /* 0CA */ "fsubr", + /* 0CB */ "fsubrp", + /* 0CC */ "ftst", + /* 0CD */ "fucom", + /* 0CE */ "fucomi", + /* 0CF */ "fucomip", + /* 0D0 */ "fucomp", + /* 0D1 */ "fucompp", + /* 0D2 */ "fxam", + /* 0D3 */ "fxch", + /* 0D4 */ "fxch4", + /* 0D5 */ "fxch7", + /* 0D6 */ "fxrstor", + /* 0D7 */ "fxsave", + /* 0D8 */ "fxtract", + /* 0D9 */ "fyl2x", + /* 0DA */ "fyl2xp1", + /* 0DB */ "getsec", + /* 0DC */ "haddpd", + /* 0DD */ "haddps", + /* 0DE */ "hlt", + /* 0DF */ "hsubpd", + /* 0E0 */ "hsubps", + /* 0E1 */ "idiv", + /* 0E2 */ "imul", + /* 0E3 */ "in", + /* 0E4 */ "inc", + /* 0E5 */ "insb", + /* 0E6 */ "insd", + /* 0E7 */ "insertps", + /* 0E8 */ "insw", + /* 0E9 */ "int", + /* 0EA */ "int1", + /* 0EB */ "int3", + /* 0EC */ "into", + /* 0ED */ "invd", + /* 0EE */ "invept", + /* 0EF */ "invlpg", + /* 0F0 */ "invlpga", + /* 0F1 */ "invvpid", + /* 0F2 */ "iretd", + /* 0F3 */ "iretq", + /* 0F4 */ "iretw", + /* 0F5 */ "ja", + /* 0F6 */ "jb", + /* 0F7 */ "jbe", + /* 0F8 */ "jcxz", + /* 0F9 */ "je", + /* 0FA */ "jecxz", + /* 0FB */ "jg", + /* 0FC */ "jge", + /* 0FD */ "jl", + /* 0FE */ "jle", + /* 0FF */ "jmp", + /* 100 */ "jnb", + /* 101 */ "jne", + /* 102 */ "jno", + /* 103 */ "jnp", + /* 104 */ "jns", + /* 105 */ "jo", + /* 106 */ "jp", + /* 107 */ "jrcxz", + /* 108 */ "js", + /* 109 */ "lahf", + /* 10A */ "lar", + /* 10B */ "lddqu", + /* 10C */ "ldmxcsr", + /* 10D */ "lds", + /* 10E */ "lea", + /* 10F */ "leave", + /* 110 */ "les", + /* 111 */ "lfence", + /* 112 */ "lfs", + /* 113 */ "lgdt", + /* 114 */ "lgs", + /* 115 */ "lidt", + /* 116 */ "lldt", + /* 117 */ "lmsw", + /* 118 */ "lock", + /* 119 */ "lodsb", + /* 11A */ "lodsd", + /* 11B */ "lodsq", + /* 11C */ "lodsw", + /* 11D */ "loop", + /* 11E */ "loope", + /* 11F */ "loopne", + /* 120 */ "lsl", + /* 121 */ "lss", + /* 122 */ "ltr", + /* 123 */ "maskmovdqu", + /* 124 */ "maskmovq", + /* 125 */ "maxpd", + /* 126 */ "maxps", + /* 127 */ "maxsd", + /* 128 */ "maxss", + /* 129 */ "mfence", + /* 12A */ "minpd", + /* 12B */ "minps", + /* 12C */ "minsd", + /* 12D */ "minss", + /* 12E */ "monitor", + /* 12F */ "montmul", + /* 130 */ "mov", + /* 131 */ "movapd", + /* 132 */ "movaps", + /* 133 */ "movbe", + /* 134 */ "movd", + /* 135 */ "movddup", + /* 136 */ "movdq2q", + /* 137 */ "movdqa", + /* 138 */ "movdqu", + /* 139 */ "movhlps", + /* 13A */ "movhpd", + /* 13B */ "movhps", + /* 13C */ "movlhps", + /* 13D */ "movlpd", + /* 13E */ "movlps", + /* 13F */ "movmskpd", + /* 140 */ "movmskps", + /* 141 */ "movntdq", + /* 142 */ "movntdqa", + /* 143 */ "movnti", + /* 144 */ "movntpd", + /* 145 */ "movntps", + /* 146 */ "movntq", + /* 147 */ "movq", + /* 148 */ "movq2dq", + /* 149 */ "movsb", + /* 14A */ "movsd", + /* 14B */ "movshdup", + /* 14C */ "movsldup", + /* 14D */ "movsq", + /* 14E */ "movss", + /* 14F */ "movsw", + /* 150 */ "movsx", + /* 151 */ "movsxd", + /* 152 */ "movupd", + /* 153 */ "movups", + /* 154 */ "movzx", + /* 155 */ "mpsadbw", + /* 156 */ "mul", + /* 157 */ "mulpd", + /* 158 */ "mulps", + /* 159 */ "mulsd", + /* 15A */ "mulss", + /* 15B */ "mwait", + /* 15C */ "neg", + /* 15D */ "nop", + /* 15E */ "not", + /* 15F */ "or", + /* 160 */ "orpd", + /* 161 */ "orps", + /* 162 */ "out", + /* 163 */ "outsb", + /* 164 */ "outsd", + /* 165 */ "outsw", + /* 166 */ "pabsb", + /* 167 */ "pabsd", + /* 168 */ "pabsw", + /* 169 */ "packssdw", + /* 16A */ "packsswb", + /* 16B */ "packusdw", + /* 16C */ "packuswb", + /* 16D */ "paddb", + /* 16E */ "paddd", + /* 16F */ "paddq", + /* 170 */ "paddsb", + /* 171 */ "paddsw", + /* 172 */ "paddusb", + /* 173 */ "paddusw", + /* 174 */ "paddw", + /* 175 */ "palignr", + /* 176 */ "pand", + /* 177 */ "pandn", + /* 178 */ "pause", + /* 179 */ "pavgb", + /* 17A */ "pavgusb", + /* 17B */ "pavgw", + /* 17C */ "pblendvb", + /* 17D */ "pblendw", + /* 17E */ "pclmulqdq", + /* 17F */ "pcmpeqb", + /* 180 */ "pcmpeqd", + /* 181 */ "pcmpeqq", + /* 182 */ "pcmpeqw", + /* 183 */ "pcmpestri", + /* 184 */ "pcmpestrm", + /* 185 */ "pcmpgtb", + /* 186 */ "pcmpgtd", + /* 187 */ "pcmpgtq", + /* 188 */ "pcmpgtw", + /* 189 */ "pcmpistri", + /* 18A */ "pcmpistrm", + /* 18B */ "pextrb", + /* 18C */ "pextrd", + /* 18D */ "pextrq", + /* 18E */ "pextrw", + /* 18F */ "pf2id", + /* 190 */ "pf2iw", + /* 191 */ "pfacc", + /* 192 */ "pfadd", + /* 193 */ "pfcmpeq", + /* 194 */ "pfcmpge", + /* 195 */ "pfcmpgt", + /* 196 */ "pfmax", + /* 197 */ "pfmin", + /* 198 */ "pfmul", + /* 199 */ "pfnacc", + /* 19A */ "pfpnacc", + /* 19B */ "pfrcp", + /* 19C */ "pfrcpit1", + /* 19D */ "pfrcpit2", + /* 19E */ "pfrsqit1", + /* 19F */ "pfrsqrt", + /* 1A0 */ "pfsub", + /* 1A1 */ "pfsubr", + /* 1A2 */ "phaddd", + /* 1A3 */ "phaddsw", + /* 1A4 */ "phaddw", + /* 1A5 */ "phminposuw", + /* 1A6 */ "phsubd", + /* 1A7 */ "phsubsw", + /* 1A8 */ "phsubw", + /* 1A9 */ "pi2fd", + /* 1AA */ "pi2fw", + /* 1AB */ "pinsrb", + /* 1AC */ "pinsrd", + /* 1AD */ "pinsrq", + /* 1AE */ "pinsrw", + /* 1AF */ "pmaddubsw", + /* 1B0 */ "pmaddwd", + /* 1B1 */ "pmaxsb", + /* 1B2 */ "pmaxsd", + /* 1B3 */ "pmaxsw", + /* 1B4 */ "pmaxub", + /* 1B5 */ "pmaxud", + /* 1B6 */ "pmaxuw", + /* 1B7 */ "pminsb", + /* 1B8 */ "pminsd", + /* 1B9 */ "pminsw", + /* 1BA */ "pminub", + /* 1BB */ "pminud", + /* 1BC */ "pminuw", + /* 1BD */ "pmovmskb", + /* 1BE */ "pmovsxbd", + /* 1BF */ "pmovsxbq", + /* 1C0 */ "pmovsxbw", + /* 1C1 */ "pmovsxdq", + /* 1C2 */ "pmovsxwd", + /* 1C3 */ "pmovsxwq", + /* 1C4 */ "pmovzxbd", + /* 1C5 */ "pmovzxbq", + /* 1C6 */ "pmovzxbw", + /* 1C7 */ "pmovzxdq", + /* 1C8 */ "pmovzxwd", + /* 1C9 */ "pmovzxwq", + /* 1CA */ "pmuldq", + /* 1CB */ "pmulhrsw", + /* 1CC */ "pmulhrw", + /* 1CD */ "pmulhuw", + /* 1CE */ "pmulhw", + /* 1CF */ "pmulld", + /* 1D0 */ "pmullw", + /* 1D1 */ "pmuludq", + /* 1D2 */ "pop", + /* 1D3 */ "popa", + /* 1D4 */ "popad", + /* 1D5 */ "popcnt", + /* 1D6 */ "popfd", + /* 1D7 */ "popfq", + /* 1D8 */ "popfw", + /* 1D9 */ "por", + /* 1DA */ "prefetch", + /* 1DB */ "prefetchnta", + /* 1DC */ "prefetcht0", + /* 1DD */ "prefetcht1", + /* 1DE */ "prefetcht2", + /* 1DF */ "psadbw", + /* 1E0 */ "pshufb", + /* 1E1 */ "pshufd", + /* 1E2 */ "pshufhw", + /* 1E3 */ "pshuflw", + /* 1E4 */ "pshufw", + /* 1E5 */ "psignb", + /* 1E6 */ "psignd", + /* 1E7 */ "psignw", + /* 1E8 */ "pslld", + /* 1E9 */ "pslldq", + /* 1EA */ "psllq", + /* 1EB */ "psllw", + /* 1EC */ "psrad", + /* 1ED */ "psraw", + /* 1EE */ "psrld", + /* 1EF */ "psrldq", + /* 1F0 */ "psrlq", + /* 1F1 */ "psrlw", + /* 1F2 */ "psubb", + /* 1F3 */ "psubd", + /* 1F4 */ "psubq", + /* 1F5 */ "psubsb", + /* 1F6 */ "psubsw", + /* 1F7 */ "psubusb", + /* 1F8 */ "psubusw", + /* 1F9 */ "psubw", + /* 1FA */ "pswapd", + /* 1FB */ "ptest", + /* 1FC */ "punpckhbw", + /* 1FD */ "punpckhdq", + /* 1FE */ "punpckhqdq", + /* 1FF */ "punpckhwd", + /* 200 */ "punpcklbw", + /* 201 */ "punpckldq", + /* 202 */ "punpcklqdq", + /* 203 */ "punpcklwd", + /* 204 */ "push", + /* 205 */ "pusha", + /* 206 */ "pushad", + /* 207 */ "pushfd", + /* 208 */ "pushfq", + /* 209 */ "pushfw", + /* 20A */ "pxor", + /* 20B */ "rcl", + /* 20C */ "rcpps", + /* 20D */ "rcpss", + /* 20E */ "rcr", + /* 20F */ "rdmsr", + /* 210 */ "rdpmc", + /* 211 */ "rdrand", + /* 212 */ "rdtsc", + /* 213 */ "rdtscp", + /* 214 */ "rep", + /* 215 */ "repne", + /* 216 */ "ret", + /* 217 */ "retf", + /* 218 */ "rol", + /* 219 */ "ror", + /* 21A */ "roundpd", + /* 21B */ "roundps", + /* 21C */ "roundsd", + /* 21D */ "roundss", + /* 21E */ "rsm", + /* 21F */ "rsqrtps", + /* 220 */ "rsqrtss", + /* 221 */ "sahf", + /* 222 */ "salc", + /* 223 */ "sar", + /* 224 */ "sbb", + /* 225 */ "scasb", + /* 226 */ "scasd", + /* 227 */ "scasq", + /* 228 */ "scasw", + /* 229 */ "seta", + /* 22A */ "setae", + /* 22B */ "setb", + /* 22C */ "setbe", + /* 22D */ "sete", + /* 22E */ "setg", + /* 22F */ "setge", + /* 230 */ "setl", + /* 231 */ "setle", + /* 232 */ "setne", + /* 233 */ "setno", + /* 234 */ "setnp", + /* 235 */ "setns", + /* 236 */ "seto", + /* 237 */ "setp", + /* 238 */ "sets", + /* 239 */ "sfence", + /* 23A */ "sgdt", + /* 23B */ "shl", + /* 23C */ "shld", + /* 23D */ "shr", + /* 23E */ "shrd", + /* 23F */ "shufpd", + /* 240 */ "shufps", + /* 241 */ "sidt", + /* 242 */ "skinit", + /* 243 */ "sldt", + /* 244 */ "smsw", + /* 245 */ "sqrtpd", + /* 246 */ "sqrtps", + /* 247 */ "sqrtsd", + /* 248 */ "sqrtss", + /* 249 */ "stc", + /* 24A */ "std", + /* 24B */ "stgi", + /* 24C */ "sti", + /* 24D */ "stmxcsr", + /* 24E */ "stosb", + /* 24F */ "stosd", + /* 250 */ "stosq", + /* 251 */ "stosw", + /* 252 */ "str", + /* 253 */ "sub", + /* 254 */ "subpd", + /* 255 */ "subps", + /* 256 */ "subsd", + /* 257 */ "subss", + /* 258 */ "swapgs", + /* 259 */ "syscall", + /* 25A */ "sysenter", + /* 25B */ "sysexit", + /* 25C */ "sysret", + /* 25D */ "test", + /* 25E */ "ucomisd", + /* 25F */ "ucomiss", + /* 260 */ "ud2", + /* 261 */ "unpckhpd", + /* 262 */ "unpckhps", + /* 263 */ "unpcklpd", + /* 264 */ "unpcklps", + /* 265 */ "vaddpd", + /* 266 */ "vaddps", + /* 267 */ "vaddsd", + /* 268 */ "vaddss", + /* 269 */ "vaddsubpd", + /* 26A */ "vaddsubps", + /* 26B */ "vaesdec", + /* 26C */ "vaesdeclast", + /* 26D */ "vaesenc", + /* 26E */ "vaesenclast", + /* 26F */ "vaesimc", + /* 270 */ "vaeskeygenassist", + /* 271 */ "vandnpd", + /* 272 */ "vandnps", + /* 273 */ "vandpd", + /* 274 */ "vandps", + /* 275 */ "vblendpd", + /* 276 */ "vblendps", + /* 277 */ "vblendvpd", + /* 278 */ "vblendvps", + /* 279 */ "vbroadcastsd", + /* 27A */ "vbroadcastss", + /* 27B */ "vcmppd", + /* 27C */ "vcmpps", + /* 27D */ "vcmpsd", + /* 27E */ "vcmpss", + /* 27F */ "vcomisd", + /* 280 */ "vcomiss", + /* 281 */ "vcvtdq2pd", + /* 282 */ "vcvtdq2ps", + /* 283 */ "vcvtpd2dq", + /* 284 */ "vcvtpd2ps", + /* 285 */ "vcvtps2dq", + /* 286 */ "vcvtps2pd", + /* 287 */ "vcvtsd2si", + /* 288 */ "vcvtsd2ss", + /* 289 */ "vcvtsi2sd", + /* 28A */ "vcvtsi2ss", + /* 28B */ "vcvtss2sd", + /* 28C */ "vcvtss2si", + /* 28D */ "vcvttpd2dq", + /* 28E */ "vcvttps2dq", + /* 28F */ "vcvttsd2si", + /* 290 */ "vcvttss2si", + /* 291 */ "vdivpd", + /* 292 */ "vdivps", + /* 293 */ "vdivsd", + /* 294 */ "vdivss", + /* 295 */ "vdppd", + /* 296 */ "vdpps", + /* 297 */ "verr", + /* 298 */ "verw", + /* 299 */ "vextractf128", + /* 29A */ "vextractps", + /* 29B */ "vhaddpd", + /* 29C */ "vhaddps", + /* 29D */ "vhsubpd", + /* 29E */ "vhsubps", + /* 29F */ "vinsertf128", + /* 2A0 */ "vinsertps", + /* 2A1 */ "vlddqu", + /* 2A2 */ "vmaskmovdqu", + /* 2A3 */ "vmaskmovpd", + /* 2A4 */ "vmaskmovps", + /* 2A5 */ "vmaxpd", + /* 2A6 */ "vmaxps", + /* 2A7 */ "vmaxsd", + /* 2A8 */ "vmaxss", + /* 2A9 */ "vmcall", + /* 2AA */ "vmclear", + /* 2AB */ "vminpd", + /* 2AC */ "vminps", + /* 2AD */ "vminsd", + /* 2AE */ "vminss", + /* 2AF */ "vmlaunch", + /* 2B0 */ "vmload", + /* 2B1 */ "vmmcall", + /* 2B2 */ "vmovapd", + /* 2B3 */ "vmovaps", + /* 2B4 */ "vmovd", + /* 2B5 */ "vmovddup", + /* 2B6 */ "vmovdqa", + /* 2B7 */ "vmovdqu", + /* 2B8 */ "vmovhlps", + /* 2B9 */ "vmovhpd", + /* 2BA */ "vmovhps", + /* 2BB */ "vmovlhps", + /* 2BC */ "vmovlpd", + /* 2BD */ "vmovlps", + /* 2BE */ "vmovmskpd", + /* 2BF */ "vmovmskps", + /* 2C0 */ "vmovntdq", + /* 2C1 */ "vmovntdqa", + /* 2C2 */ "vmovntpd", + /* 2C3 */ "vmovntps", + /* 2C4 */ "vmovq", + /* 2C5 */ "vmovsd", + /* 2C6 */ "vmovshdup", + /* 2C7 */ "vmovsldup", + /* 2C8 */ "vmovss", + /* 2C9 */ "vmovupd", + /* 2CA */ "vmovups", + /* 2CB */ "vmpsadbw", + /* 2CC */ "vmptrld", + /* 2CD */ "vmptrst", + /* 2CE */ "vmread", + /* 2CF */ "vmresume", + /* 2D0 */ "vmrun", + /* 2D1 */ "vmsave", + /* 2D2 */ "vmulpd", + /* 2D3 */ "vmulps", + /* 2D4 */ "vmulsd", + /* 2D5 */ "vmulss", + /* 2D6 */ "vmwrite", + /* 2D7 */ "vmxoff", + /* 2D8 */ "vmxon", + /* 2D9 */ "vorpd", + /* 2DA */ "vorps", + /* 2DB */ "vpabsb", + /* 2DC */ "vpabsd", + /* 2DD */ "vpabsw", + /* 2DE */ "vpackssdw", + /* 2DF */ "vpacksswb", + /* 2E0 */ "vpackusdw", + /* 2E1 */ "vpackuswb", + /* 2E2 */ "vpaddb", + /* 2E3 */ "vpaddd", + /* 2E4 */ "vpaddq", + /* 2E5 */ "vpaddsb", + /* 2E6 */ "vpaddsw", + /* 2E7 */ "vpaddusb", + /* 2E8 */ "vpaddusw", + /* 2E9 */ "vpaddw", + /* 2EA */ "vpalignr", + /* 2EB */ "vpand", + /* 2EC */ "vpandn", + /* 2ED */ "vpavgb", + /* 2EE */ "vpavgw", + /* 2EF */ "vpblendvb", + /* 2F0 */ "vpblendw", + /* 2F1 */ "vpclmulqdq", + /* 2F2 */ "vpcmpeqb", + /* 2F3 */ "vpcmpeqd", + /* 2F4 */ "vpcmpeqq", + /* 2F5 */ "vpcmpeqw", + /* 2F6 */ "vpcmpestri", + /* 2F7 */ "vpcmpestrm", + /* 2F8 */ "vpcmpgtb", + /* 2F9 */ "vpcmpgtd", + /* 2FA */ "vpcmpgtq", + /* 2FB */ "vpcmpgtw", + /* 2FC */ "vpcmpistri", + /* 2FD */ "vpcmpistrm", + /* 2FE */ "vperm2f128", + /* 2FF */ "vpermilpd", + /* 300 */ "vpermilps", + /* 301 */ "vpextrb", + /* 302 */ "vpextrd", + /* 303 */ "vpextrq", + /* 304 */ "vpextrw", + /* 305 */ "vphaddd", + /* 306 */ "vphaddsw", + /* 307 */ "vphaddw", + /* 308 */ "vphminposuw", + /* 309 */ "vphsubd", + /* 30A */ "vphsubsw", + /* 30B */ "vphsubw", + /* 30C */ "vpinsrb", + /* 30D */ "vpinsrd", + /* 30E */ "vpinsrq", + /* 30F */ "vpinsrw", + /* 310 */ "vpmaddubsw", + /* 311 */ "vpmaddwd", + /* 312 */ "vpmaxsb", + /* 313 */ "vpmaxsd", + /* 314 */ "vpmaxsw", + /* 315 */ "vpmaxub", + /* 316 */ "vpmaxud", + /* 317 */ "vpmaxuw", + /* 318 */ "vpminsb", + /* 319 */ "vpminsd", + /* 31A */ "vpminsw", + /* 31B */ "vpminub", + /* 31C */ "vpminud", + /* 31D */ "vpminuw", + /* 31E */ "vpmovmskb", + /* 31F */ "vpmovsxbd", + /* 320 */ "vpmovsxbq", + /* 321 */ "vpmovsxbw", + /* 322 */ "vpmovsxwd", + /* 323 */ "vpmovsxwq", + /* 324 */ "vpmovzxbd", + /* 325 */ "vpmovzxbq", + /* 326 */ "vpmovzxbw", + /* 327 */ "vpmovzxdq", + /* 328 */ "vpmovzxwd", + /* 329 */ "vpmovzxwq", + /* 32A */ "vpmuldq", + /* 32B */ "vpmulhrsw", + /* 32C */ "vpmulhuw", + /* 32D */ "vpmulhw", + /* 32E */ "vpmulld", + /* 32F */ "vpmullw", + /* 330 */ "vpor", + /* 331 */ "vpsadbw", + /* 332 */ "vpshufb", + /* 333 */ "vpshufd", + /* 334 */ "vpshufhw", + /* 335 */ "vpshuflw", + /* 336 */ "vpsignb", + /* 337 */ "vpsignd", + /* 338 */ "vpsignw", + /* 339 */ "vpslld", + /* 33A */ "vpslldq", + /* 33B */ "vpsllq", + /* 33C */ "vpsllw", + /* 33D */ "vpsrad", + /* 33E */ "vpsraw", + /* 33F */ "vpsrld", + /* 340 */ "vpsrldq", + /* 341 */ "vpsrlq", + /* 342 */ "vpsrlw", + /* 343 */ "vpsubb", + /* 344 */ "vpsubd", + /* 345 */ "vpsubq", + /* 346 */ "vpsubsb", + /* 347 */ "vpsubsw", + /* 348 */ "vpsubusb", + /* 349 */ "vpsubusw", + /* 34A */ "vpsubw", + /* 34B */ "vptest", + /* 34C */ "vpunpckhbw", + /* 34D */ "vpunpckhdq", + /* 34E */ "vpunpckhqdq", + /* 34F */ "vpunpckhwd", + /* 350 */ "vpunpcklbw", + /* 351 */ "vpunpckldq", + /* 352 */ "vpunpcklqdq", + /* 353 */ "vpunpcklwd", + /* 354 */ "vpxor", + /* 355 */ "vrcpps", + /* 356 */ "vrcpss", + /* 357 */ "vroundpd", + /* 358 */ "vroundps", + /* 359 */ "vroundsd", + /* 35A */ "vroundss", + /* 35B */ "vrsqrtps", + /* 35C */ "vrsqrtss", + /* 35D */ "vshufpd", + /* 35E */ "vshufps", + /* 35F */ "vsqrtpd", + /* 360 */ "vsqrtps", + /* 361 */ "vsqrtsd", + /* 362 */ "vsqrtss", + /* 363 */ "vstmxcsr", + /* 364 */ "vsubpd", + /* 365 */ "vsubps", + /* 366 */ "vsubsd", + /* 367 */ "vsubss", + /* 368 */ "vtestpd", + /* 369 */ "vtestps", + /* 36A */ "vucomisd", + /* 36B */ "vucomiss", + /* 36C */ "vunpckhpd", + /* 36D */ "vunpckhps", + /* 36E */ "vunpcklpd", + /* 36F */ "vunpcklps", + /* 370 */ "vxorpd", + /* 371 */ "vxorps", + /* 372 */ "vzeroall", + /* 373 */ "vzeroupper", + /* 374 */ "wait", + /* 375 */ "wbinvd", + /* 376 */ "wrmsr", + /* 377 */ "xadd", + /* 378 */ "xchg", + /* 379 */ "xcryptcbc", + /* 37A */ "xcryptcfb", + /* 37B */ "xcryptctr", + /* 37C */ "xcryptecb", + /* 37D */ "xcryptofb", + /* 37E */ "xgetbv", + /* 37F */ "xlatb", + /* 380 */ "xor", + /* 381 */ "xorpd", + /* 382 */ "xorps", + /* 383 */ "xrstor", + /* 384 */ "xsave", + /* 385 */ "xsetbv", + /* 386 */ "xsha1", + /* 387 */ "xsha256", + /* 388 */ "xstore", +}; + +} + +} diff --git a/Bindings/Cpp/VXOpcodeTable.hpp b/Bindings/Cpp/ZyDisOpcodeTable.hpp similarity index 92% rename from Bindings/Cpp/VXOpcodeTable.hpp rename to Bindings/Cpp/ZyDisOpcodeTable.hpp index bf13060..c5f388f 100644 --- a/Bindings/Cpp/VXOpcodeTable.hpp +++ b/Bindings/Cpp/ZyDisOpcodeTable.hpp @@ -40,7 +40,7 @@ namespace Verteron /** * @brief Values that represent an instruction mnemonic. */ -enum class VXInstructionMnemonic : uint16_t +enum class ZyDisInstructionMnemonic : uint16_t { /* 000 */ INVALID, /* 001 */ AAA, @@ -922,8 +922,8 @@ enum class VXInstructionMnemonic : uint16_t /* 36D */ VUNPCKHPS, /* 36E */ VUNPCKLPD, /* 36F */ VUNPCKLPS, - /* 370 */ VXORPD, - /* 371 */ VXORPS, + /* 370 */ ZyDisORPD, + /* 371 */ ZyDisORPS, /* 372 */ VZEROALL, /* 373 */ VZEROUPPER, /* 374 */ WAIT, @@ -953,12 +953,12 @@ enum class VXInstructionMnemonic : uint16_t * @brief Defines an alias representing an opcode tree node. An opcode tree node is a 16 bit * unsigned integer value with its first 4 bits reserved for the node type. */ -typedef uint16_t VXOpcodeTreeNode; +typedef uint16_t ZyDisOpcodeTreeNode; /** * @brief Values that represent the type of an opcode tree node. */ -enum class VXOpcodeTreeNodeType : uint8_t +enum class ZyDisOpcodeTreeNodeType : uint8_t { /** * @brief Reference to a concrete instruction definition. @@ -1025,7 +1025,7 @@ enum class VXOpcodeTreeNodeType : uint8_t /** * @brief Values that represent the type of an operand in the instruction definition. */ -enum class VXDefinedOperandType : uint8_t +enum class ZyDisDefinedOperandType : uint8_t { /* * @brief No operand. @@ -1286,7 +1286,7 @@ enum class VXDefinedOperandType : uint8_t * @brief Values that represent the size of an operand in the instruction definition. * Do not change the order or the values of this enum! */ -enum class VXDefinedOperandSize : uint8_t +enum class ZyDisDefinedOperandSize : uint8_t { /** * @brief No operand. @@ -1386,7 +1386,7 @@ enum class VXDefinedOperandSize : uint8_t * @brief Values that represent optional flags in the instruction definition. * Do not change the order or the values of this enum! */ -enum VXInstructionDefinitionFlags : uint16_t +enum ZyDisInstructionDefinitionFlags : uint16_t { /** * @brief The instruction accepts the rex.b prefix value. @@ -1454,30 +1454,30 @@ enum VXInstructionDefinitionFlags : uint16_t /** * @brief An operand definition. */ -struct VXOperandDefinition +struct ZyDisOperandDefinition { /** * @brief The defined operand type. */ - VXDefinedOperandType type; + ZyDisDefinedOperandType type; /** * @brief The defined operand size. */ - VXDefinedOperandSize size; + ZyDisDefinedOperandSize size; }; /** * @brief An instruction definition. */ -struct VXInstructionDefinition +struct ZyDisInstructionDefinition { /** * @brief The instruction mnemonic. */ - VXInstructionMnemonic mnemonic; + ZyDisInstructionMnemonic mnemonic; /** * @brief The operand definitions for all four possible operands. */ - VXOperandDefinition operand[4]; + ZyDisOperandDefinition operand[4]; /** * @brief Additional flags for the instruction definition. */ @@ -1492,24 +1492,24 @@ namespace Internal * @brief Contains all opcode tables. * Indexed by the numeric value of the opcode. */ -extern const VXOpcodeTreeNode optreeTable[][256]; +extern const ZyDisOpcodeTreeNode optreeTable[][256]; /** * @brief Contains all modrm_mod switch tables. * Index values: * 0 = [modrm_mod == !11] * 1 = [modrm_mod == 11] */ -extern const VXOpcodeTreeNode optreeModrmMod[][2]; +extern const ZyDisOpcodeTreeNode optreeModrmMod[][2]; /** * @brief Contains all modrm_reg switch tables. * Indexed by the numeric value of the modrm_reg field. */ -extern const VXOpcodeTreeNode optreeModrmReg[][8]; +extern const ZyDisOpcodeTreeNode optreeModrmReg[][8]; /** * @brief Contains all modrm_rm switch tables. * Indexed by the numeric value of the modrm_rm field. */ -extern const VXOpcodeTreeNode optreeModrmRm[][8]; +extern const ZyDisOpcodeTreeNode optreeModrmRm[][8]; /** * @brief Contains all mandatory-prefix switch tables. * Index values: @@ -1518,13 +1518,13 @@ extern const VXOpcodeTreeNode optreeModrmRm[][8]; * 2 = F3 * 3 = 66 */ -extern const VXOpcodeTreeNode optreeMandatory[][4]; +extern const ZyDisOpcodeTreeNode optreeMandatory[][4]; /** * @brief Contains all x87 opcode tables. * Indexed by the numeric value of the 6 lowest bits of the modrm byte (modrm_mod should * always be 11). */ -extern const VXOpcodeTreeNode optreeX87[][64]; +extern const ZyDisOpcodeTreeNode optreeX87[][64]; /** * @brief Contains all address-size switch tables. * Index values: @@ -1532,7 +1532,7 @@ extern const VXOpcodeTreeNode optreeX87[][64]; * 1 = 32 * 2 = 64 */ -extern const VXOpcodeTreeNode optreeAddressSize[][3]; +extern const ZyDisOpcodeTreeNode optreeAddressSize[][3]; /** * @brief Contains all operand-size switch tables. * Index values: @@ -1540,26 +1540,26 @@ extern const VXOpcodeTreeNode optreeAddressSize[][3]; * 1 = 32 * 2 = 64 */ -extern const VXOpcodeTreeNode optreeOperandSize[][3]; +extern const ZyDisOpcodeTreeNode optreeOperandSize[][3]; /** * @brief Contains all cpu-mode switch tables. * Index values: * 0 = [!= 64] * 1 = 64 */ -extern const VXOpcodeTreeNode optreeMode[][2]; +extern const ZyDisOpcodeTreeNode optreeMode[][2]; /** * @brief Contains all vendor switch tables. * Index values: * 0 = AMD * 1 = Intel */ -extern const VXOpcodeTreeNode optreeVendor[][2]; +extern const ZyDisOpcodeTreeNode optreeVendor[][2]; /** * @brief Contains all 3dnow! switch tables. * Indexed by the numeric value of the 3dnow! opcode. */ -extern const VXOpcodeTreeNode optree3dnow[][256]; +extern const ZyDisOpcodeTreeNode optree3dnow[][256]; /** * @brief Contains all vex switch tables. * Index values: @@ -1580,21 +1580,21 @@ extern const VXOpcodeTreeNode optree3dnow[][256]; * E = F2_0F38 * F = F2_0F3A */ -extern const VXOpcodeTreeNode optreeVex[][16]; +extern const ZyDisOpcodeTreeNode optreeVex[][16]; /** * @brief Contains all vex_w switch tables. * Indexed by the numeric value of the vex_w field. */ -extern const VXOpcodeTreeNode optreeVexW[][2]; +extern const ZyDisOpcodeTreeNode optreeVexW[][2]; /** * @brief Contains all vex_l switch tables. * Indexed by the numeric value of the vex_l field. */ -extern const VXOpcodeTreeNode optreeVexL[][2]; +extern const ZyDisOpcodeTreeNode optreeVexL[][2]; /** * @brief Contains all instruction definitions. */ -extern const VXInstructionDefinition instrDefinitions[]; +extern const ZyDisInstructionDefinition instrDefinitions[]; /** * @brief Contains all instruction mnemonic strings. */ @@ -1605,9 +1605,9 @@ extern const char* instrMnemonicStrings[]; * @param node The node. * @return The type of the specified opcode tree node. */ -inline VXOpcodeTreeNodeType VDEGetOpcodeNodeType(VXOpcodeTreeNode node) +inline ZyDisOpcodeTreeNodeType VDEGetOpcodeNodeType(ZyDisOpcodeTreeNode node) { - return static_cast((node >> 12) & 0x0F); + return static_cast((node >> 12) & 0x0F); } /** @@ -1615,7 +1615,7 @@ inline VXOpcodeTreeNodeType VDEGetOpcodeNodeType(VXOpcodeTreeNode node) * @param node The node. * @return The value of the specified opcode tree node. */ -inline uint16_t VDEGetOpcodeNodeValue(VXOpcodeTreeNode node) +inline uint16_t VDEGetOpcodeNodeValue(ZyDisOpcodeTreeNode node) { return (node & 0x0FFF); } @@ -1624,7 +1624,7 @@ inline uint16_t VDEGetOpcodeNodeValue(VXOpcodeTreeNode node) * @brief Returns the root node of the opcode tree. * @return The root node of the opcode tree. */ -inline VXOpcodeTreeNode VDEGetOpcodeTreeRoot() +inline ZyDisOpcodeTreeNode VDEGetOpcodeTreeRoot() { return 0x1000; } @@ -1635,53 +1635,53 @@ inline VXOpcodeTreeNode VDEGetOpcodeTreeRoot() * @param index The index of the child node to retrieve. * @return The specified child node. */ -inline VXOpcodeTreeNode VDEGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_t index) +inline ZyDisOpcodeTreeNode VDEGetOpcodeTreeChild(ZyDisOpcodeTreeNode parent, uint16_t index) { using namespace Internal; - VXOpcodeTreeNodeType nodeType = VDEGetOpcodeNodeType(parent); + ZyDisOpcodeTreeNodeType nodeType = VDEGetOpcodeNodeType(parent); uint16_t tableIndex = VDEGetOpcodeNodeValue(parent); switch (nodeType) { - case VXOpcodeTreeNodeType::TABLE: + case ZyDisOpcodeTreeNodeType::TABLE: assert(index < 256); return optreeTable[tableIndex][index]; - case VXOpcodeTreeNodeType::MODRM_MOD: + case ZyDisOpcodeTreeNodeType::MODRM_MOD: assert(index < 2); return optreeModrmMod[tableIndex][index]; - case VXOpcodeTreeNodeType::MODRM_REG: + case ZyDisOpcodeTreeNodeType::MODRM_REG: assert(index < 8); return optreeModrmReg[tableIndex][index]; - case VXOpcodeTreeNodeType::MODRM_RM: + case ZyDisOpcodeTreeNodeType::MODRM_RM: assert(index < 8); return optreeModrmRm[tableIndex][index]; - case VXOpcodeTreeNodeType::MANDATORY: + case ZyDisOpcodeTreeNodeType::MANDATORY: assert(index < 4); return optreeMandatory[tableIndex][index]; - case VXOpcodeTreeNodeType::X87: + case ZyDisOpcodeTreeNodeType::X87: assert(index < 64); return optreeX87[tableIndex][index]; - case VXOpcodeTreeNodeType::ADDRESS_SIZE: + case ZyDisOpcodeTreeNodeType::ADDRESS_SIZE: assert(index < 3); return optreeAddressSize[tableIndex][index]; - case VXOpcodeTreeNodeType::OPERAND_SIZE: + case ZyDisOpcodeTreeNodeType::OPERAND_SIZE: assert(index < 3); return optreeOperandSize[tableIndex][index]; - case VXOpcodeTreeNodeType::MODE: + case ZyDisOpcodeTreeNodeType::MODE: assert(index < 2); return optreeMode[tableIndex][index]; - case VXOpcodeTreeNodeType::VENDOR: + case ZyDisOpcodeTreeNodeType::VENDOR: assert(index < 3); return optreeVendor[tableIndex][index]; - case VXOpcodeTreeNodeType::AMD3DNOW: + case ZyDisOpcodeTreeNodeType::AMD3DNOW: assert(index < 256); return optree3dnow[tableIndex][index]; - case VXOpcodeTreeNodeType::VEX: + case ZyDisOpcodeTreeNodeType::VEX: assert(index < 16); return optreeVex[tableIndex][index]; - case VXOpcodeTreeNodeType::VEXW: + case ZyDisOpcodeTreeNodeType::VEXW: assert(index < 2); return optreeVexW[tableIndex][index]; - case VXOpcodeTreeNodeType::VEXL: + case ZyDisOpcodeTreeNodeType::VEXL: assert(index < 2); return optreeVexL[tableIndex][index]; default: @@ -1695,9 +1695,9 @@ inline VXOpcodeTreeNode VDEGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_t * @param node The instruction definition node. * @return Pointer to the instruction definition. */ -inline const VXInstructionDefinition* VDEGetInstructionDefinition(VXOpcodeTreeNode node) +inline const ZyDisInstructionDefinition* VDEGetInstructionDefinition(ZyDisOpcodeTreeNode node) { - assert(VDEGetOpcodeNodeType(node) == VXOpcodeTreeNodeType::INSTRUCTION_DEFINITION); + assert(VDEGetOpcodeNodeType(node) == ZyDisOpcodeTreeNodeType::INSTRUCTION_DEFINITION); return &instrDefinitions[node & 0x0FFF]; } @@ -1706,7 +1706,7 @@ inline const VXInstructionDefinition* VDEGetInstructionDefinition(VXOpcodeTreeNo * @param mnemonic The mnemonic. * @return The instruction mnemonic string. */ -inline const char* VDEGetInstructionMnemonicString(VXInstructionMnemonic mnemonic) +inline const char* VDEGetInstructionMnemonicString(ZyDisInstructionMnemonic mnemonic) { return instrMnemonicStrings[static_cast(mnemonic)]; } @@ -1716,14 +1716,14 @@ inline const char* VDEGetInstructionMnemonicString(VXInstructionMnemonic mnemoni * @param operandSize The defined operand size. * @return The the numeric value for the simple operand size definition. */ -inline uint16_t VDEGetSimpleOperandSize(VXDefinedOperandSize operandSize) +inline uint16_t VDEGetSimpleOperandSize(ZyDisDefinedOperandSize operandSize) { static uint16_t operandSizes[8] = { 8, 16, 32, 64, 80, 12, 128, 256 }; uint16_t index = - static_cast(operandSize) - static_cast(VXDefinedOperandSize::B); + static_cast(operandSize) - static_cast(ZyDisDefinedOperandSize::B); assert(index < 8); return operandSizes[index]; } @@ -1733,9 +1733,9 @@ inline uint16_t VDEGetSimpleOperandSize(VXDefinedOperandSize operandSize) * @param operandSize The defined operand size. * @return The memory-size part of the operand size definition. */ -inline VXDefinedOperandSize VDEGetComplexOperandMemSize(VXDefinedOperandSize operandSize) +inline ZyDisDefinedOperandSize VDEGetComplexOperandMemSize(ZyDisDefinedOperandSize operandSize) { - return static_cast(static_cast(operandSize) & 0x0F); + return static_cast(static_cast(operandSize) & 0x0F); } /** @@ -1743,9 +1743,9 @@ inline VXDefinedOperandSize VDEGetComplexOperandMemSize(VXDefinedOperandSize ope * @param operandSize The defined operand size. * @return The register-size part of the operand size definition. */ -inline VXDefinedOperandSize VDEGetComplexOperandRegSize(VXDefinedOperandSize operandSize) +inline ZyDisDefinedOperandSize VDEGetComplexOperandRegSize(ZyDisDefinedOperandSize operandSize) { - return static_cast((static_cast(operandSize) >> 4) & 0x0F); + return static_cast((static_cast(operandSize) >> 4) & 0x0F); } } diff --git a/CMakeLists.txt b/CMakeLists.txt index 3cec443..096388b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,42 +44,42 @@ endif () # Library set(vde_headers - "VerteronDisassemblerEngine/VXDisassembler.h" - "VerteronDisassemblerEngine/VXDisassemblerTypes.h" - "VerteronDisassemblerEngine/VXDisassemblerUtils.h" - "VerteronDisassemblerEngine/VXInstructionDecoder.h" - "VerteronDisassemblerEngine/VXInstructionFormatter.h" - "VerteronDisassemblerEngine/VXOpcodeTable.h" - "VerteronDisassemblerEngine/VXOpcodeTableInternal.h" - "VerteronDisassemblerEngine/VXInternalHelpers.h" - "VerteronDisassemblerEngine/VXInternalConfig.h") + "VerteronDisassemblerEngine/ZyDisDisassembler.h" + "VerteronDisassemblerEngine/ZyDisDisassemblerTypes.h" + "VerteronDisassemblerEngine/ZyDisDisassemblerUtils.h" + "VerteronDisassemblerEngine/ZyDisInstructionDecoder.h" + "VerteronDisassemblerEngine/ZyDisInstructionFormatter.h" + "VerteronDisassemblerEngine/ZyDisOpcodeTable.h" + "VerteronDisassemblerEngine/ZyDisOpcodeTableInternal.h" + "VerteronDisassemblerEngine/ZyDisInternalHelpers.h" + "VerteronDisassemblerEngine/ZyDisInternalConfig.h") set(vde_sources - "VerteronDisassemblerEngine/VXDisassemblerUtils.c" - "VerteronDisassemblerEngine/VXInstructionFormatter.c" - "VerteronDisassemblerEngine/VXOpcodeTable.c" - "VerteronDisassemblerEngine/VXInstructionDecoder.c") + "VerteronDisassemblerEngine/ZyDisDisassemblerUtils.c" + "VerteronDisassemblerEngine/ZyDisInstructionFormatter.c" + "VerteronDisassemblerEngine/ZyDisOpcodeTable.c" + "VerteronDisassemblerEngine/ZyDisInstructionDecoder.c") add_library("VerteronDisassemblerEngine" ${vde_headers} ${vde_sources}) generate_export_header( "VerteronDisassemblerEngine" - BASE_NAME "VX" - EXPORT_FILE_NAME "VXExportConfig.h") + BASE_NAME "ZyDis" + EXPORT_FILE_NAME "ZyDisExportConfig.h") include_directories(${PROJECT_BINARY_DIR}) # C++ bindings if (BUILD_CPP_BINDINGS) set(vdecpp_headers - "Bindings/Cpp/VXDisassembler.hpp" - "Bindings/Cpp/VXDisassemblerTypes.hpp" - "Bindings/Cpp/VXDisassemblerUtils.hpp" - "Bindings/Cpp/VXInstructionDecoder.hpp" - "Bindings/Cpp/VXInstructionFormatter.hpp" - "Bindings/Cpp/VXOpcodeTable.hpp") + "Bindings/Cpp/ZyDisDisassembler.hpp" + "Bindings/Cpp/ZyDisDisassemblerTypes.hpp" + "Bindings/Cpp/ZyDisDisassemblerUtils.hpp" + "Bindings/Cpp/ZyDisInstructionDecoder.hpp" + "Bindings/Cpp/ZyDisInstructionFormatter.hpp" + "Bindings/Cpp/ZyDisOpcodeTable.hpp") set(vdecpp_sources - "Bindings/Cpp/VXDisassemblerUtils.cpp" - "Bindings/Cpp/VXInstructionFormatter.cpp" - "Bindings/Cpp/VXOpcodeTable.cpp" - "Bindings/Cpp/VXInstructionDecoder.cpp") + "Bindings/Cpp/ZyDisDisassemblerUtils.cpp" + "Bindings/Cpp/ZyDisInstructionFormatter.cpp" + "Bindings/Cpp/ZyDisOpcodeTable.cpp" + "Bindings/Cpp/ZyDisInstructionDecoder.cpp") add_library("VerteronDisassemblerEngineCpp" ${vdecpp_headers} ${vdecpp_sources}) target_link_libraries("VerteronDisassemblerEngineCpp" "VerteronDisassemblerEngine") endif () diff --git a/Examples/CppBindings/Main.cpp b/Examples/CppBindings/Main.cpp index 7cadb0c..aab004c 100644 --- a/Examples/CppBindings/Main.cpp +++ b/Examples/CppBindings/Main.cpp @@ -33,7 +33,7 @@ #include #include -#include +#include using namespace Verteron; diff --git a/Examples/CustomDataSource/Main.c b/Examples/CustomDataSource/Main.c index 4db36ce..5fb82f9 100644 --- a/Examples/CustomDataSource/Main.c +++ b/Examples/CustomDataSource/Main.c @@ -30,11 +30,11 @@ **************************************************************************************************/ -#include +#include int main(int argc, char* argv[]) { - VX_UNUSED(argc); VX_UNUSED(argv); + ZYDIS_UNUSED(argc); ZYDIS_UNUSED(argv); // TODO: return 0; diff --git a/Examples/PerformanceTest/Main.c b/Examples/PerformanceTest/Main.c index 4db36ce..5fb82f9 100644 --- a/Examples/PerformanceTest/Main.c +++ b/Examples/PerformanceTest/Main.c @@ -30,11 +30,11 @@ **************************************************************************************************/ -#include +#include int main(int argc, char* argv[]) { - VX_UNUSED(argc); VX_UNUSED(argv); + ZYDIS_UNUSED(argc); ZYDIS_UNUSED(argv); // TODO: return 0; diff --git a/Examples/SimpleDemo/Main.c b/Examples/SimpleDemo/Main.c index a159526..6196634 100644 --- a/Examples/SimpleDemo/Main.c +++ b/Examples/SimpleDemo/Main.c @@ -30,7 +30,7 @@ **************************************************************************************************/ -#include +#include #include #include @@ -64,24 +64,24 @@ int main() 0x5F, 0x41, 0x5E, 0x41, 0x5D, 0x41, 0x5C, 0x5F, 0xC3 }; - VXInstructionInfo info; - VXInstructionDecoderContext* decoder = NULL; - VXBaseInstructionFormatterContext* formatter = NULL; - VXBaseDataSourceContext* input32 = NULL; - VXBaseDataSourceContext* input64 = NULL; + ZyDisInstructionInfo info; + ZyDisInstructionDecoderContext* decoder = NULL; + ZyDisBaseInstructionFormatterContext* formatter = NULL; + ZyDisBaseDataSourceContext* input32 = NULL; + ZyDisBaseDataSourceContext* input64 = NULL; - decoder = VXInstructionDecoder_Create(); - formatter = VXIntelInstructionFormatter_Create(); + decoder = ZyDisInstructionDecoder_Create(); + formatter = ZyDisIntelInstructionFormatter_Create(); - input32 = VXMemoryDataSource_Create(&data32[0], sizeof(data32)); - input64 = VXMemoryDataSource_Create(&data64[0], sizeof(data64)); + input32 = ZyDisMemoryDataSource_Create(&data32[0], sizeof(data32)); + input64 = ZyDisMemoryDataSource_Create(&data64[0], sizeof(data64)); - VXInstructionDecoder_SetDisassemblerMode(decoder, DM_M32BIT); - VXInstructionDecoder_SetDataSource(decoder, input32); - VXInstructionDecoder_SetInstructionPointer(decoder, 0x77091852); + ZyDisInstructionDecoder_SetDisassemblerMode(decoder, DM_M32BIT); + ZyDisInstructionDecoder_SetDataSource(decoder, input32); + ZyDisInstructionDecoder_SetInstructionPointer(decoder, 0x77091852); puts("32 bit test ...\n\n"); - while (VXInstructionDecoder_DecodeInstruction(decoder, &info)) + while (ZyDisInstructionDecoder_DecodeInstruction(decoder, &info)) { printf("%08X ", (uint32_t)(info.instrAddress & 0xFFFFFFFF)); if (info.flags & IF_ERROR_MASK) @@ -90,17 +90,17 @@ int main() } else { - printf("%s\n", VXBaseInstructionFormatter_FormatInstruction(formatter, &info)); + printf("%s\n", ZyDisBaseInstructionFormatter_FormatInstruction(formatter, &info)); } } puts("\n"); - VXInstructionDecoder_SetDisassemblerMode(decoder, DM_M64BIT); - VXInstructionDecoder_SetDataSource(decoder, input64); - VXInstructionDecoder_SetInstructionPointer(decoder, 0x00007FFA39A81930ull); + ZyDisInstructionDecoder_SetDisassemblerMode(decoder, DM_M64BIT); + ZyDisInstructionDecoder_SetDataSource(decoder, input64); + ZyDisInstructionDecoder_SetInstructionPointer(decoder, 0x00007FFA39A81930ull); puts("64 bit test ...\n\n"); - while (VXInstructionDecoder_DecodeInstruction(decoder, &info)) + while (ZyDisInstructionDecoder_DecodeInstruction(decoder, &info)) { printf("%016llX ", info.instrAddress); if (info.flags & IF_ERROR_MASK) @@ -109,14 +109,14 @@ int main() } else { - printf("%s\n", VXBaseInstructionFormatter_FormatInstruction(formatter, &info)); + printf("%s\n", ZyDisBaseInstructionFormatter_FormatInstruction(formatter, &info)); } } - VXBaseDataSource_Release(input32); - VXBaseDataSource_Release(input64); - VXBaseInstructionFormatter_Release(formatter); - VXInstructionDecoder_Release(decoder); + ZyDisBaseDataSource_Release(input32); + ZyDisBaseDataSource_Release(input64); + ZyDisBaseInstructionFormatter_Release(formatter); + ZyDisInstructionDecoder_Release(decoder); getchar(); return 0; diff --git a/Examples/SymbolResolver/Main.c b/Examples/SymbolResolver/Main.c index ec98236..763e5ad 100644 --- a/Examples/SymbolResolver/Main.c +++ b/Examples/SymbolResolver/Main.c @@ -30,12 +30,12 @@ **************************************************************************************************/ -#include +#include #include int main(int argc, char* argv[]) { - VX_UNUSED(argc); VX_UNUSED(argv); + ZYDIS_UNUSED(argc); ZYDIS_UNUSED(argv); // TODO: port to C /* @@ -57,14 +57,14 @@ int main(int argc, char* argv[]) return 1; } // Initialize disassembler - VXInstructionInfo info; - VXInstructionDecoder decoder; - VXExactSymbolResolver resolver; - VXIntelInstructionFormatter formatter; + ZyDisInstructionInfo info; + ZyDisInstructionDecoder decoder; + ZyDisExactSymbolResolver resolver; + ZyDisIntelInstructionFormatter formatter; #ifdef _M_X64 - decoder.setDisassemblerMode(VXDisassemblerMode::M64BIT); + decoder.setDisassemblerMode(ZyDisDisassemblerMode::M64BIT); #else - decoder.setDisassemblerMode(VXDisassemblerMode::M32BIT); + decoder.setDisassemblerMode(ZyDisDisassemblerMode::M32BIT); #endif formatter.setSymbolResolver(&resolver); // Initialize output stream @@ -81,7 +81,7 @@ int main(int argc, char* argv[]) { if (sectionHeader->Characteristics & IMAGE_SCN_CNT_CODE) { - VXMemoryDataSource input(reinterpret_cast( + ZyDisMemoryDataSource input(reinterpret_cast( baseAddress + sectionHeader->VirtualAddress), sectionHeader->SizeOfRawData); decoder.setDataSource(&input); decoder.setInstructionPointer(baseAddress + sectionHeader->VirtualAddress); @@ -94,31 +94,31 @@ int main(int argc, char* argv[]) } switch (info.mnemonic) { - case VXInstructionMnemonic::CALL: + case ZyDisInstructionMnemonic::CALL: resolver.setSymbol(VDECalcAbsoluteTarget(info, info.operand[0]), std::string("sub_" + std::to_string(subCount)).c_str()); subCount++; break; - case VXInstructionMnemonic::JMP: - case VXInstructionMnemonic::JO: - case VXInstructionMnemonic::JNO: - case VXInstructionMnemonic::JB: - case VXInstructionMnemonic::JNB: - case VXInstructionMnemonic::JE: - case VXInstructionMnemonic::JNE: - case VXInstructionMnemonic::JBE: - case VXInstructionMnemonic::JA: - case VXInstructionMnemonic::JS: - case VXInstructionMnemonic::JNS: - case VXInstructionMnemonic::JP: - case VXInstructionMnemonic::JNP: - case VXInstructionMnemonic::JL: - case VXInstructionMnemonic::JGE: - case VXInstructionMnemonic::JLE: - case VXInstructionMnemonic::JG: - case VXInstructionMnemonic::JCXZ: - case VXInstructionMnemonic::JECXZ: - case VXInstructionMnemonic::JRCXZ: + case ZyDisInstructionMnemonic::JMP: + case ZyDisInstructionMnemonic::JO: + case ZyDisInstructionMnemonic::JNO: + case ZyDisInstructionMnemonic::JB: + case ZyDisInstructionMnemonic::JNB: + case ZyDisInstructionMnemonic::JE: + case ZyDisInstructionMnemonic::JNE: + case ZyDisInstructionMnemonic::JBE: + case ZyDisInstructionMnemonic::JA: + case ZyDisInstructionMnemonic::JS: + case ZyDisInstructionMnemonic::JNS: + case ZyDisInstructionMnemonic::JP: + case ZyDisInstructionMnemonic::JNP: + case ZyDisInstructionMnemonic::JL: + case ZyDisInstructionMnemonic::JGE: + case ZyDisInstructionMnemonic::JLE: + case ZyDisInstructionMnemonic::JG: + case ZyDisInstructionMnemonic::JCXZ: + case ZyDisInstructionMnemonic::JECXZ: + case ZyDisInstructionMnemonic::JRCXZ: resolver.setSymbol(VDECalcAbsoluteTarget(info, info.operand[0]), std::string("loc_" + std::to_string(locCount)).c_str()); locCount++; @@ -162,7 +162,7 @@ int main(int argc, char* argv[]) { if (sectionHeader->Characteristics & IMAGE_SCN_CNT_CODE) { - VXMemoryDataSource input(reinterpret_cast( + ZyDisMemoryDataSource input(reinterpret_cast( baseAddress + sectionHeader->VirtualAddress), sectionHeader->SizeOfRawData); decoder.setDataSource(&input); decoder.setInstructionPointer(baseAddress + sectionHeader->VirtualAddress); diff --git a/VerteronDisassemblerEngine/VXInternalHelpers.h b/VerteronDisassemblerEngine/VXInternalHelpers.h deleted file mode 100644 index 1389f85..0000000 --- a/VerteronDisassemblerEngine/VXInternalHelpers.h +++ /dev/null @@ -1,197 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : athre0z - Modifications : - - Last change : 19. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#ifndef _VDE_VXINTERNALHELPERS_H_ -#define _VDE_VXINTERNALHELPERS_H_ - -#include "VXInstructionDecoder.h" -#include "VXInstructionFormatter.h" -#include "VXInternalConfig.h" - -#include - -/* Types IDs =================================================================================== */ - -typedef enum _VXTypeId -{ - TYPE_BASEDATASOURCE, - TYPE_MEMORYDATASOURCE, - TYPE_CUSTOMDATASOURCE, - TYPE_INSTRUCTIONDECODER, - TYPE_BASESYMBOLRESOLVER, - TYPE_CUSTOMSYMBOLRESOLVER, - TYPE_BASEINSTRUCTIONFORMATTER, - TYPE_INTELINSTRUCTIONFORMATTER, - TYPE_CUSTOMINSTRUCTIONFORMATTER, -} VXTypeId; - -/* Context conversion helpers ================================================================== */ - -VX_INLINE struct _VXBaseDataSource* VXBaseDataSource_thiz( - VXBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_BASEDATASOURCE - || ctx->d.type == TYPE_MEMORYDATASOURCE - || ctx->d.type == TYPE_CUSTOMDATASOURCE); - return (struct _VXBaseDataSource*)ctx->d.ptr; -} - -VX_INLINE const struct _VXBaseDataSource* VXBaseDataSource_cthiz( - const VXBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_BASEDATASOURCE - || ctx->d.type == TYPE_MEMORYDATASOURCE - || ctx->d.type == TYPE_CUSTOMDATASOURCE); - return (const struct _VXBaseDataSource*)ctx->d.ptr; -} - -VX_INLINE struct _VXMemoryDataSource* VXMemoryDataSource_thiz( - VXBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_MEMORYDATASOURCE); - return (struct _VXMemoryDataSource*)ctx->d.ptr; -} - -VX_INLINE const struct _VXMemoryDataSource* VXMemoryDataSource_cthiz( - const VXBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_MEMORYDATASOURCE); - return (const struct _VXMemoryDataSource*)ctx->d.ptr; -} - -VX_INLINE struct _VXCustomDataSource* VXCustomDataSource_thiz( - VXBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMDATASOURCE); - return (struct _VXCustomDataSource*)ctx->d.ptr; -} - -VX_INLINE const struct _VXCustomDataSource* VXCustomDataSource_cthiz( - const VXBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMDATASOURCE); - return (const struct _VXCustomDataSource*)ctx->d.ptr; -} - -VX_INLINE struct _VXInstructionDecoder* VXInstructionDecoder_thiz( - VXInstructionDecoderContext *ctx) -{ - assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); - return (struct _VXInstructionDecoder*)ctx->d.ptr; -} - -VX_INLINE const struct _VXInstructionDecoder* VXInstructionDecoder_cthiz( - const VXInstructionDecoderContext *ctx) -{ - assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); - return (const struct _VXInstructionDecoder*)ctx->d.ptr; -} - -VX_INLINE struct _VXBaseSymbolResolver* VXBaseSymbolResolver_thiz( - VXBaseSymbolResolverContext *ctx) -{ - assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER - || ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); - return (struct _VXBaseSymbolResolver*)ctx->d.ptr; -} - -VX_INLINE const struct _VXBaseSymbolResolver* VXBaseSymbolResolver_cthiz( - const VXBaseSymbolResolverContext *ctx) -{ - assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER - || ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); - return (const struct _VXBaseSymbolResolver*)ctx->d.ptr; -} - -VX_INLINE struct _VXCustomSymbolResolver* VXCustomSymbolResolver_thiz( - VXBaseSymbolResolverContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); - return (struct _VXCustomSymbolResolver*)ctx->d.ptr; -} - -VX_INLINE const struct _VXCustomSymbolResolver* VXCustomSymbolResolver_cthiz( - const VXBaseSymbolResolverContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); - return (const struct _VXCustomSymbolResolver*)ctx->d.ptr; -} - -VX_INLINE struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_thiz( - VXBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); - return (struct _VXBaseInstructionFormatter*)ctx->d.ptr; -} - -VX_INLINE const struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_cthiz( - const VXBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); - return (const struct _VXBaseInstructionFormatter*)ctx->d.ptr; -} - -VX_INLINE struct _VXIntelInstructionFormatter* VXIntelInstructionFormatter_thiz( - VXBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); - return (struct _VXIntelInstructionFormatter*)ctx->d.ptr; -} - -VX_INLINE const struct _VXIntelInstructionFormatter* VXIntelInstructionFormatter_cthiz( - const VXBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); - return (const struct _VXIntelInstructionFormatter*)ctx->d.ptr; -} - -VX_INLINE struct _VXCustomInstructionFormatter* VXCustomInstructionFormatter_thiz( - VXBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); - return (struct _VXCustomInstructionFormatter*)ctx->d.ptr; -} - -VX_INLINE const struct _VXCustomInstructionFormatter* VXCustomInstructionFormatter_cthiz( - const VXBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); - return (struct _VXCustomInstructionFormatter*)ctx->d.ptr; -} - -/* ============================================================================================= */ - -#endif /* _VDE_VXINTERNALHELPERS_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXDisassembler.h b/VerteronDisassemblerEngine/ZyDisDisassembler.h similarity index 85% rename from VerteronDisassemblerEngine/VXDisassembler.h rename to VerteronDisassemblerEngine/ZyDisDisassembler.h index 1baf7c3..3e4bb81 100644 --- a/VerteronDisassemblerEngine/VXDisassembler.h +++ b/VerteronDisassemblerEngine/ZyDisDisassembler.h @@ -30,12 +30,12 @@ **************************************************************************************************/ -#ifndef _VDE_VXDISASSEMBLERC_H_ -#define _VDE_VXDISASSEMBLERC_H_ +#ifndef _VDE_ZyDisDISASSEMBLERC_H_ +#define _VDE_ZyDisDISASSEMBLERC_H_ -#include "VXDisassemblerTypes.h" -#include "VXInstructionDecoder.h" -#include "VXInstructionFormatter.h" -#include "VXDisassemblerUtils.h" +#include "ZyDisDisassemblerTypes.h" +#include "ZyDisInstructionDecoder.h" +#include "ZyDisInstructionFormatter.h" +#include "ZyDisDisassemblerUtils.h" -#endif /* _VDE_VXDISASSEMBLERC_H_ */ \ No newline at end of file +#endif /* _VDE_ZyDisDISASSEMBLERC_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXDisassemblerTypes.h b/VerteronDisassemblerEngine/ZyDisDisassemblerTypes.h similarity index 95% rename from VerteronDisassemblerEngine/VXDisassemblerTypes.h rename to VerteronDisassemblerEngine/ZyDisDisassemblerTypes.h index ab16c5b..b80bd9a 100644 --- a/VerteronDisassemblerEngine/VXDisassemblerTypes.h +++ b/VerteronDisassemblerEngine/ZyDisDisassemblerTypes.h @@ -30,12 +30,12 @@ **************************************************************************************************/ -#ifndef _VDE_VXDISASSEMBLERTYPESC_H_ -#define _VDE_VXDISASSEMBLERTYPESC_H_ +#ifndef _VDE_ZyDisDISASSEMBLERTYPESC_H_ +#define _VDE_ZyDisDISASSEMBLERTYPESC_H_ #include #include -#include "VXOpcodeTable.h" +#include "ZyDisOpcodeTable.h" #ifdef __cplusplus extern "C" @@ -45,7 +45,7 @@ extern "C" /** * @brief Values that represent additional flags of a decoded instruction. */ -typedef enum _VXInstructionFlags /* : uint32_t */ +typedef enum _ZyDisInstructionFlags /* : uint32_t */ { IF_NONE = 0x00000000, /** @@ -130,12 +130,12 @@ typedef enum _VXInstructionFlags /* : uint32_t */ IF_ERROR_OPERAND = 0x01000000, IF_FORCE_DWORD = 0x7FFFFFFF -} VXInstructionFlags; +} ZyDisInstructionFlags; /** * @brief Values that represent a cpu register. */ -typedef enum _VXRegister /* : uint16_t */ +typedef enum _ZyDisRegister /* : uint16_t */ { REG_NONE, /* 8 bit general purpose registers */ @@ -192,12 +192,12 @@ typedef enum _VXRegister /* : uint16_t */ REG_RIP, REG_FORCE_WORD = 0x7FFF -} VXRegister; +} ZyDisRegister; /** * @brief Values that represent the type of a decoded operand. */ -typedef enum _VXOperandType /*: uint8_t*/ +typedef enum _ZyDisOperandType /*: uint8_t*/ { /** * @brief The operand is not used. @@ -227,12 +227,12 @@ typedef enum _VXOperandType /*: uint8_t*/ * @brief The operand is a constant value. */ OPTYPE_CONSTANT -} VXOperandType; +} ZyDisOperandType; /** * @brief Values that represent the operand access mode. */ -typedef enum _VXOperandAccessMode /* : uint8_t */ +typedef enum _ZyDisOperandAccessMode /* : uint8_t */ { OPACCESSMODE_NA, /** @@ -247,16 +247,16 @@ typedef enum _VXOperandAccessMode /* : uint8_t */ * @brief The operand is accessed in read-write mode. */ OPACCESSMODE_READWRITE -} VXOperandAccessMode; +} ZyDisOperandAccessMode; /** * @brief This struct holds information about a decoded operand. */ -typedef struct _VXOperandInfo +typedef struct _ZyDisOperandInfo { /** * @brief The type of the operand. - * @see VXOperandType + * @see ZyDisOperandType */ uint8_t type; /** @@ -265,17 +265,17 @@ typedef struct _VXOperandInfo uint16_t size; /** * @brief The operand access mode. - * @see VXOperandAccessMode + * @see ZyDisOperandAccessMode */ uint8_t access_mode; /** * @brief The base register. - * @see VXRegister + * @see ZyDisRegister */ uint16_t base; /** * @brief The index register. - * @see VXRegister + * @see ZyDisRegister */ uint16_t index; /** @@ -308,12 +308,12 @@ typedef struct _VXOperandInfo uint32_t off; } ptr; } lval; -} VXOperandInfo; +} ZyDisOperandInfo; /** * @brief This struct holds information about a decoded instruction. */ -typedef struct _VXInstructionInfo +typedef struct _ZyDisInstructionInfo { /** * @brief The instruction flags. @@ -321,7 +321,7 @@ typedef struct _VXInstructionInfo uint32_t flags; /** * @brief The instruction mnemonic. - * @see VXInstructionMnemonic + * @see ZyDisInstructionMnemonic */ uint16_t mnemonic; /** @@ -351,11 +351,11 @@ typedef struct _VXInstructionInfo /** * @brief The decoded operands. */ - VXOperandInfo operand[4]; + ZyDisOperandInfo operand[4]; /** * @brief The segment register. This value will default to @c NONE, if no segment register * prefix is present. - * @see VXRegister + * @see ZyDisRegister */ uint16_t segment; /** @@ -527,7 +527,7 @@ typedef struct _VXInstructionInfo /** * @brief The instruction definition. */ - const VXInstructionDefinition *instrDefinition; + const ZyDisInstructionDefinition *instrDefinition; /** * @brief The instruction address points to the current instruction (relative to the * initial instruction pointer). @@ -539,10 +539,10 @@ typedef struct _VXInstructionInfo * This field is used to properly format relative instructions. */ uint64_t instrPointer; -} VXInstructionInfo; +} ZyDisInstructionInfo; #ifdef __cplusplus } #endif -#endif /* _VDE_VXDISASSEMBLERTYPESC_H_ */ \ No newline at end of file +#endif /* _VDE_ZyDisDISASSEMBLERTYPESC_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXDisassemblerUtils.c b/VerteronDisassemblerEngine/ZyDisDisassemblerUtils.c similarity index 94% rename from VerteronDisassemblerEngine/VXDisassemblerUtils.c rename to VerteronDisassemblerEngine/ZyDisDisassemblerUtils.c index 5c392a7..5b9534f 100644 --- a/VerteronDisassemblerEngine/VXDisassemblerUtils.c +++ b/VerteronDisassemblerEngine/ZyDisDisassemblerUtils.c @@ -30,11 +30,11 @@ **************************************************************************************************/ -#include "VXDisassemblerUtils.h" +#include "ZyDisDisassemblerUtils.h" #include -uint64_t VXCalcAbsoluteTarget(const VXInstructionInfo *info, const VXOperandInfo *operand) +uint64_t ZyDisCalcAbsoluteTarget(const ZyDisInstructionInfo *info, const ZyDisOperandInfo *operand) { assert((operand->type == OPTYPE_REL_IMMEDIATE) || ((operand->type == OPTYPE_MEMORY) && (operand->base == REG_RIP))); diff --git a/VerteronDisassemblerEngine/VXDisassemblerUtils.h b/VerteronDisassemblerEngine/ZyDisDisassemblerUtils.h similarity index 82% rename from VerteronDisassemblerEngine/VXDisassemblerUtils.h rename to VerteronDisassemblerEngine/ZyDisDisassemblerUtils.h index d259d36..1bbc807 100644 --- a/VerteronDisassemblerEngine/VXDisassemblerUtils.h +++ b/VerteronDisassemblerEngine/ZyDisDisassemblerUtils.h @@ -30,11 +30,11 @@ **************************************************************************************************/ -#ifndef _VDE_VXDISASSEMBLERUTILSC_H_ -#define _VDE_VXDISASSEMBLERUTILSC_H_ +#ifndef _VDE_ZyDisDISASSEMBLERUTILSC_H_ +#define _VDE_ZyDisDISASSEMBLERUTILSC_H_ -#include "VXDisassemblerTypes.h" -#include "VXInternalConfig.h" +#include "ZyDisDisassemblerTypes.h" +#include "ZyDisInternalConfig.h" #include @@ -44,11 +44,11 @@ extern "C" { #endif -typedef struct _VXContextDescriptor +typedef struct _ZyDisContextDescriptor { uint8_t type; void *ptr; -} VXContextDescriptor; +} ZyDisContextDescriptor; /** * @brief Calculates the absolute target address of a relative instruction operand. @@ -56,12 +56,12 @@ typedef struct _VXContextDescriptor * @param operand The operand. * @return The absolute target address. */ -VX_EXPORT uint64_t VXCalcAbsoluteTarget( - const VXInstructionInfo *info, - const VXOperandInfo *operand); +ZYDIS_EXPORT uint64_t ZyDisCalcAbsoluteTarget( + const ZyDisInstructionInfo *info, + const ZyDisOperandInfo *operand); #ifdef __cplusplus } #endif -#endif /* _VDE_VXDISASSEMBLERUTILSC_H_ */ \ No newline at end of file +#endif /* _VDE_ZyDisDISASSEMBLERUTILSC_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.c b/VerteronDisassemblerEngine/ZyDisInstructionDecoder.c similarity index 62% rename from VerteronDisassemblerEngine/VXInstructionDecoder.c rename to VerteronDisassemblerEngine/ZyDisInstructionDecoder.c index 1296aee..0e24db0 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.c +++ b/VerteronDisassemblerEngine/ZyDisInstructionDecoder.c @@ -30,9 +30,9 @@ **************************************************************************************************/ -#include "VXInstructionDecoder.h" -#include "VXInternalHelpers.h" -#include "VXOpcodeTableInternal.h" +#include "ZyDisInstructionDecoder.h" +#include "ZyDisInternalHelpers.h" +#include "ZyDisOpcodeTableInternal.h" #include #include @@ -40,40 +40,40 @@ /* Internal interface ========================================================================== */ -/* VXBaseDataSource ---------------------------------------------------------------------------- */ +/* ZyDisBaseDataSource ---------------------------------------------------------------------------- */ -typedef struct _VXBaseDataSource +typedef struct _ZyDisBaseDataSource { uint8_t currentInput; - VXBaseDataSource_DestructionCallback destruct; // may be NULL - VXBaseDataSource_InputCallback internalInputPeek; - VXBaseDataSource_InputCallback internalInputNext; - VXBaseDataSource_IsEndOfInputCallback isEndOfInput; - VXBaseDataSource_GetPositionCallback getPosition; - VXBaseDataSource_SetPositionCallback setPosition; -} VXBaseDataSource; + ZyDisBaseDataSource_DestructionCallback destruct; // may be NULL + ZyDisBaseDataSource_InputCallback internalInputPeek; + ZyDisBaseDataSource_InputCallback internalInputNext; + ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInput; + ZyDisBaseDataSource_GetPositionCallback getPosition; + ZyDisBaseDataSource_SetPositionCallback setPosition; +} ZyDisBaseDataSource; /** * @brief Constructor. * @param ctx The context. */ -static void VXBaseDataSource_Construct(VXBaseDataSourceContext *ctx); +static void ZyDisBaseDataSource_Construct(ZyDisBaseDataSourceContext *ctx); /** * @brief Destructor. * @param ctx The context. */ -static void VXBaseDataSource_Destruct(VXBaseDataSourceContext *ctx); +static void ZyDisBaseDataSource_Destruct(ZyDisBaseDataSourceContext *ctx); -/* VXMemoryDataSource -------------------------------------------------------------------------- */ +/* ZyDisMemoryDataSource -------------------------------------------------------------------------- */ -typedef struct _VXMemoryDataSource +typedef struct _ZyDisMemoryDataSource { - VXBaseDataSource super; + ZyDisBaseDataSource super; const void *inputBuffer; uint64_t inputBufferLen; uint64_t inputBufferPos; -} VXMemoryDataSource; +} ZyDisMemoryDataSource; /** * @brief Constructor. @@ -81,14 +81,14 @@ typedef struct _VXMemoryDataSource * @param buffer The buffer. * @param bufferLen Length of the buffer. */ -static void VXMemoryDataSource_Construct(VXBaseDataSourceContext *ctx, const void* buffer, +static void ZyDisMemoryDataSource_Construct(ZyDisBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen); /** * @brief Destructor. * @param ctx The context. */ -static void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx); +static void ZyDisMemoryDataSource_Destruct(ZyDisBaseDataSourceContext *ctx); /** * @brief Reads the next byte from the data source. @@ -96,7 +96,7 @@ static void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx); * @return The current input byte. * This method increases the current input position by one. */ -static uint8_t VXMemoryDataSource_InternalInputPeek(VXBaseDataSourceContext *ctx); +static uint8_t ZyDisMemoryDataSource_InternalInputPeek(ZyDisBaseDataSourceContext *ctx); /** * @brief Reads the next byte from the data source. @@ -104,30 +104,30 @@ static uint8_t VXMemoryDataSource_InternalInputPeek(VXBaseDataSourceContext *ctx * @return The current input byte. * This method does NOT increase the current input position. */ -static uint8_t VXMemoryDataSource_InternalInputNext(VXBaseDataSourceContext *ctx); +static uint8_t ZyDisMemoryDataSource_InternalInputNext(ZyDisBaseDataSourceContext *ctx); /** - * @copydoc VXBaseDataSource_IsEndOfInput + * @copydoc ZyDisBaseDataSource_IsEndOfInput */ -static bool VXMemoryDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx); +static bool ZyDisMemoryDataSource_IsEndOfInput(const ZyDisBaseDataSourceContext *ctx); /** - * @copydoc VXBaseDataSource_GetPosition + * @copydoc ZyDisBaseDataSource_GetPosition */ -static uint64_t VXMemoryDataSource_GetPosition(const VXBaseDataSourceContext *ctx); +static uint64_t ZyDisMemoryDataSource_GetPosition(const ZyDisBaseDataSourceContext *ctx); /** - * @copydoc VXBaseDataSource_SetPosition + * @copydoc ZyDisBaseDataSource_SetPosition */ -static bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position); +static bool ZyDisMemoryDataSource_SetPosition(ZyDisBaseDataSourceContext *ctx, uint64_t position); -/* VXCustomDataSource -------------------------------------------------------------------------- */ +/* ZyDisCustomDataSource -------------------------------------------------------------------------- */ -typedef struct _VXCustomDataSource +typedef struct _ZyDisCustomDataSource { - VXBaseDataSource super; - VXBaseDataSource_DestructionCallback userDestruct; // may be NULL -} VXCustomDataSource; + ZyDisBaseDataSource super; + ZyDisBaseDataSource_DestructionCallback userDestruct; // may be NULL +} ZyDisCustomDataSource; /** * @brief Constructor. @@ -139,31 +139,31 @@ typedef struct _VXCustomDataSource * @param setPositionCb The callback setting the current input position. * @param destructionCb The destruction callback. May be @c NULL. */ -static void VXCustomDataSource_Construct(VXBaseDataSourceContext *ctx, - VXBaseDataSource_InputCallback inputPeekCb, - VXBaseDataSource_InputCallback inputNextCb, - VXBaseDataSource_IsEndOfInputCallback isEndOfInputCb, - VXBaseDataSource_GetPositionCallback getPositionCb, - VXBaseDataSource_SetPositionCallback setPositionCb, - VXBaseDataSource_DestructionCallback destructionCb); +static void ZyDisCustomDataSource_Construct(ZyDisBaseDataSourceContext *ctx, + ZyDisBaseDataSource_InputCallback inputPeekCb, + ZyDisBaseDataSource_InputCallback inputNextCb, + ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInputCb, + ZyDisBaseDataSource_GetPositionCallback getPositionCb, + ZyDisBaseDataSource_SetPositionCallback setPositionCb, + ZyDisBaseDataSource_DestructionCallback destructionCb); /** * @brief Destructor. * @param The context. */ -static void VXCustomDataSource_Destruct(VXBaseDataSourceContext *ctx); +static void ZyDisCustomDataSource_Destruct(ZyDisBaseDataSourceContext *ctx); -/* VXInstructionDecoder ------------------------------------------------------------------------ */ +/* ZyDisInstructionDecoder ------------------------------------------------------------------------ */ -typedef struct _VXInstructionDecoder +typedef struct _ZyDisInstructionDecoder { - VXBaseDataSourceContext *dataSource; - VXDisassemblerMode disassemblerMode; - VXInstructionSetVendor preferredVendor; + ZyDisBaseDataSourceContext *dataSource; + ZyDisDisassemblerMode disassemblerMode; + ZyDisInstructionSetVendor preferredVendor; uint64_t instructionPointer; -} VXInstructionDecoder; +} ZyDisInstructionDecoder; -typedef enum _VXRegisterClass /* : uint8_t */ +typedef enum _ZyDisRegisterClass /* : uint8_t */ { RC_GENERAL_PURPOSE, RC_MMX, @@ -171,7 +171,7 @@ typedef enum _VXRegisterClass /* : uint8_t */ RC_DEBUG, RC_SEGMENT, RC_XMM -} VXRegisterClass; +} ZyDisRegisterClass; /** * @brief Reads the next byte from the data source. @@ -183,8 +183,8 @@ typedef enum _VXRegisterClass /* : uint8_t */ * This method does NOT increase the current input position or the @c length field of the * @c info parameter. */ -static uint8_t VXInstructionDecoder_InputPeek(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static uint8_t ZyDisInstructionDecoder_InputPeek(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Reads the next byte(s) from the data source. @@ -197,115 +197,115 @@ static uint8_t VXInstructionDecoder_InputPeek(VXInstructionDecoderContext *ctx, * parameter. This method also appends the new byte(s) to to @c data field of the @c info * parameter. */ -static uint8_t VXInstructionDecoder_InputNext8(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static uint8_t ZyDisInstructionDecoder_InputNext8(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** - * @copydoc VXInstructionDecoder_InputNext8 + * @copydoc ZyDisInstructionDecoder_InputNext8 */ -static uint16_t VXInstructionDecoder_InputNext16(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static uint16_t ZyDisInstructionDecoder_InputNext16(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** - * @copydoc VXInstructionDecoder_InputNext8 + * @copydoc ZyDisInstructionDecoder_InputNext8 */ -static uint32_t VXInstructionDecoder_InputNext32(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static uint32_t ZyDisInstructionDecoder_InputNext32(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** - * @copydoc VXInstructionDecoder_InputNext8 + * @copydoc ZyDisInstructionDecoder_InputNext8 */ -static uint64_t VXInstructionDecoder_InputNext64(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static uint64_t ZyDisInstructionDecoder_InputNext64(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Returns the current input byte. * @param ctx The context. * @return The current input byte. - * The current input byte is set everytime the @c VXInstructionDecoder_InputPeek or - * @c VXInstructionDecoder_InputNextXX function is called. + * The current input byte is set everytime the @c ZyDisInstructionDecoder_InputPeek or + * @c ZyDisInstructionDecoder_InputNextXX function is called. */ -static uint8_t VXInstructionDecoder_InputCurrent(const VXInstructionDecoderContext *ctx); +static uint8_t ZyDisInstructionDecoder_InputCurrent(const ZyDisInstructionDecoderContext *ctx); /** * @brief Decodes a register operand. * @param ctx The context. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param registerClass The register class to use. * @param registerId The register id. * @param operandSize The defined size of the operand. * @return @c true if it succeeds, @c false if it fails. */ -static bool VXInstructionDecoder_DecodeRegisterOperand(const VXInstructionDecoderContext *ctx, - VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, - uint8_t registerId, VXDefinedOperandSize operandSize); +static bool ZyDisInstructionDecoder_DecodeRegisterOperand(const ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisRegisterClass registerClass, + uint8_t registerId, ZyDisDefinedOperandSize operandSize); /** * @brief Decodes a register/memory operand. * @param ctx The context. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param registerClass The register class to use. * @param operandSize The defined size of the operand. * @return @c true if it succeeds, @c false if it fails. */ -static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, - VXDefinedOperandSize operandSize); +static bool ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisRegisterClass registerClass, + ZyDisDefinedOperandSize operandSize); /** * @brief Decodes an immediate operand. * @param ctx The context. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param operandSize The defined size of the operand. * @return @c true if it succeeds, @c false if it fails. */ -static bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandSize operandSize); +static bool ZyDisInstructionDecoder_DecodeImmediate(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisDefinedOperandSize operandSize); /** * @brief Decodes a displacement operand. * @param ctx The context. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param size The size of the displacement data. * @return @c true if it succeeds, @c false if it fails. */ -static bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info, VXOperandInfo *operand, uint8_t size); +static bool ZyDisInstructionDecoder_DecodeDisplacement(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, uint8_t size); /** * @brief Decodes the ModRM field of the instruction. * @param ctx The context. - * @param The @c VXInstructionInfo struct that receives the decoded data. + * @param The @c ZyDisInstructionInfo struct that receives the decoded data. * @return @c true if it succeeds, @c false if it fails. * This method reads an additional input byte. */ -static bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static bool ZyDisInstructionDecoder_DecodeModrm(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Decodes the SIB field of the instruction. * @param ctx The context. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return @c true if it succeeds, @c false if it fails.1 * This method reads an additional input byte. */ -static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static bool ZyDisInstructionDecoder_DecodeSIB(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Decodes VEX prefix of the instruction. * @param ctx The context. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return @c true if it succeeds, @c false if it fails. * This method takes the current input byte to determine the vex prefix type and reads one or * two additional input bytes on demand. */ -static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static bool ZyDisInstructionDecoder_DecodeVex(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Returns the effective operand size. @@ -314,90 +314,90 @@ static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, * @param operandSize The defined operand size. * @return The effective operand size. */ -static uint16_t VXInstructionDecoder_GetEffectiveOperandSize( - const VXInstructionDecoderContext *ctx, const VXInstructionInfo *info, - VXDefinedOperandSize operandSize); +static uint16_t ZyDisInstructionDecoder_GetEffectiveOperandSize( + const ZyDisInstructionDecoderContext *ctx, const ZyDisInstructionInfo *info, + ZyDisDefinedOperandSize operandSize); /** * @brief Decodes all instruction operands. * @param ctx The context. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return @c true if it succeeds, @c false if it fails. */ -static bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static bool ZyDisInstructionDecoder_DecodeOperands(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Decodes the specified instruction operand. * @param ctx The context. * @param info The instruction info. - * @param operand The @c VXOperandInfo struct that receives the decoded data. + * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. * @param operandType The defined type of the operand. * @param operandSize The defined size of the operand. * @return @c true if it succeeds, @c false if it fails. */ -static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandType operandType, - VXDefinedOperandSize operandSize); +static bool ZyDisInstructionDecoder_DecodeOperand(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisDefinedOperandType operandType, + ZyDisDefinedOperandSize operandSize); /** * @brief Resolves the effective operand and address mode of the instruction. * @param ctx The context. - * @param info The @c VXInstructionInfo struct that receives the effective operand and + * @param info The @c ZyDisInstructionInfo struct that receives the effective operand and * address mode. * @remarks This function requires a non-null value in the @c instrDefinition field of the * @c info struct. */ -static void VXInstructionDecoder_ResolveOperandAndAddressMode( - const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static void ZyDisInstructionDecoder_ResolveOperandAndAddressMode( + const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info); /** * @brief Calculates the effective REX/VEX.w, r, x, b, l values. * @param ctx The context. - * @param info The @c VXInstructionInfo struct that receives the effective operand and + * @param info The @c ZyDisInstructionInfo struct that receives the effective operand and * address mode. * @remarks This method requires a non-null value in the @c instrDefinition field of the * @c info struct. */ -static void VXInstructionDecoder_CalculateEffectiveRexVexValues( - const VXInstructionDecoderContext *ctx, VXInstructionInfo *info); +static void ZyDisInstructionDecoder_CalculateEffectiveRexVexValues( + const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info); /** * @brief Collects and decodes optional instruction prefixes. * @param ctx The context. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return @c true if it succeeds, @c false if it fails. */ -static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static bool ZyDisInstructionDecoder_DecodePrefixes(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Collects and decodes the instruction opcodes using the opcode tree. * @param ctx The context. - * @param info The @c VXInstructionInfo struct that receives the decoded data. + * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. * @return @c true if it succeeds, @c false if it fails. */ -static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +static bool ZyDisInstructionDecoder_DecodeOpcode(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /* Implementation ============================================================================== */ -/* VXBaseDataSource ---------------------------------------------------------------------------- */ +/* ZyDisBaseDataSource ---------------------------------------------------------------------------- */ -static void VXBaseDataSource_Construct(VXBaseDataSourceContext *ctx) +static void ZyDisBaseDataSource_Construct(ZyDisBaseDataSourceContext *ctx) { - VXBaseDataSource *thiz = VXBaseDataSource_thiz(ctx); + ZyDisBaseDataSource *thiz = ZyDisBaseDataSource_thiz(ctx); memset(thiz, 0, sizeof(*thiz)); } -static void VXBaseDataSource_Destruct(VXBaseDataSourceContext *ctx) +static void ZyDisBaseDataSource_Destruct(ZyDisBaseDataSourceContext *ctx) { - VX_UNUSED(ctx); + ZYDIS_UNUSED(ctx); } -void VXBaseDataSource_Release(VXBaseDataSourceContext *ctx) +void ZyDisBaseDataSource_Release(ZyDisBaseDataSourceContext *ctx) { - VXBaseDataSource *thiz = VXBaseDataSource_thiz(ctx); + ZyDisBaseDataSource *thiz = ZyDisBaseDataSource_thiz(ctx); if (thiz->destruct) { @@ -408,16 +408,16 @@ void VXBaseDataSource_Release(VXBaseDataSourceContext *ctx) free(ctx); } -uint8_t VXBaseDataSource_InputPeek(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) +uint8_t ZyDisBaseDataSource_InputPeek(ZyDisBaseDataSourceContext *ctx, ZyDisInstructionInfo *info) { - VXBaseDataSource *thiz = VXBaseDataSource_thiz(ctx); + ZyDisBaseDataSource *thiz = ZyDisBaseDataSource_thiz(ctx); if (info->length == 15) { info->flags |= IF_ERROR_LENGTH; return 0; } - if (VXBaseDataSource_IsEndOfInput(ctx)) + if (ZyDisBaseDataSource_IsEndOfInput(ctx)) { info->flags |= IF_ERROR_END_OF_INPUT; return 0; @@ -427,16 +427,16 @@ uint8_t VXBaseDataSource_InputPeek(VXBaseDataSourceContext *ctx, VXInstructionIn return thiz->currentInput; } -uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstructionInfo *info) +uint8_t ZyDisBaseDataSource_InputNext8(ZyDisBaseDataSourceContext *ctx, ZyDisInstructionInfo *info) { - VXBaseDataSource *thiz = VXBaseDataSource_thiz(ctx); + ZyDisBaseDataSource *thiz = ZyDisBaseDataSource_thiz(ctx); if (info->length == 15) { info->flags |= IF_ERROR_LENGTH; return 0; } - if (VXBaseDataSource_IsEndOfInput(ctx)) + if (ZyDisBaseDataSource_IsEndOfInput(ctx)) { info->flags |= IF_ERROR_END_OF_INPUT; return 0; @@ -447,14 +447,14 @@ uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstructionI return thiz->currentInput; } -#define VXBASEDATASOURCE_INPUTNEXT_N(n) \ - uint##n##_t VXBaseDataSource_InputNext##n( \ - VXBaseDataSourceContext *ctx, VXInstructionInfo *info) \ +#define ZyDisBASEDATASOURCE_INPUTNEXT_N(n) \ + uint##n##_t ZyDisBaseDataSource_InputNext##n( \ + ZyDisBaseDataSourceContext *ctx, ZyDisInstructionInfo *info) \ { \ uint##n##_t result = 0; \ for (unsigned i = 0; i < (sizeof(uint##n##_t) / sizeof(uint8_t)); ++i) \ { \ - uint##n##_t b = VXBaseDataSource_InputNext8(ctx, info); \ + uint##n##_t b = ZyDisBaseDataSource_InputNext8(ctx, info); \ if (!b && (info->flags & IF_ERROR_MASK)) \ { \ return 0; \ @@ -464,65 +464,65 @@ uint8_t VXBaseDataSource_InputNext8(VXBaseDataSourceContext *ctx, VXInstructionI return result; \ } -VXBASEDATASOURCE_INPUTNEXT_N(16) -VXBASEDATASOURCE_INPUTNEXT_N(32) -VXBASEDATASOURCE_INPUTNEXT_N(64) -#undef VXBASEDATASOURCE_INPUTNEXT_N +ZyDisBASEDATASOURCE_INPUTNEXT_N(16) +ZyDisBASEDATASOURCE_INPUTNEXT_N(32) +ZyDisBASEDATASOURCE_INPUTNEXT_N(64) +#undef ZyDisBASEDATASOURCE_INPUTNEXT_N -uint8_t VXBaseDataSource_InputCurrent(const VXBaseDataSourceContext *ctx) +uint8_t ZyDisBaseDataSource_InputCurrent(const ZyDisBaseDataSourceContext *ctx) { - return VXBaseDataSource_cthiz(ctx)->currentInput; + return ZyDisBaseDataSource_cthiz(ctx)->currentInput; } -bool VXBaseDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx) +bool ZyDisBaseDataSource_IsEndOfInput(const ZyDisBaseDataSourceContext *ctx) { - assert(VXBaseDataSource_cthiz(ctx)->isEndOfInput); - return VXBaseDataSource_cthiz(ctx)->isEndOfInput(ctx); + assert(ZyDisBaseDataSource_cthiz(ctx)->isEndOfInput); + return ZyDisBaseDataSource_cthiz(ctx)->isEndOfInput(ctx); } -uint64_t VXBaseDataSource_GetPosition(const VXBaseDataSourceContext *ctx) +uint64_t ZyDisBaseDataSource_GetPosition(const ZyDisBaseDataSourceContext *ctx) { - assert(VXBaseDataSource_cthiz(ctx)->getPosition); - return VXBaseDataSource_cthiz(ctx)->getPosition(ctx); + assert(ZyDisBaseDataSource_cthiz(ctx)->getPosition); + return ZyDisBaseDataSource_cthiz(ctx)->getPosition(ctx); } -bool VXBaseDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position) +bool ZyDisBaseDataSource_SetPosition(ZyDisBaseDataSourceContext *ctx, uint64_t position) { - assert(VXBaseDataSource_thiz(ctx)->setPosition); - return VXBaseDataSource_thiz(ctx)->setPosition(ctx, position); + assert(ZyDisBaseDataSource_thiz(ctx)->setPosition); + return ZyDisBaseDataSource_thiz(ctx)->setPosition(ctx, position); } -/* VXMemoryDataSource -------------------------------------------------------------------------- */ +/* ZyDisMemoryDataSource -------------------------------------------------------------------------- */ -void VXMemoryDataSource_Construct( - VXBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen) +void ZyDisMemoryDataSource_Construct( + ZyDisBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen) { - VXBaseDataSource_Construct(ctx); - VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); + ZyDisBaseDataSource_Construct(ctx); + ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_thiz(ctx); - thiz->super.destruct = &VXMemoryDataSource_Destruct; - thiz->super.internalInputPeek = &VXMemoryDataSource_InternalInputPeek; - thiz->super.internalInputNext = &VXMemoryDataSource_InternalInputNext; - thiz->super.isEndOfInput = &VXMemoryDataSource_IsEndOfInput; - thiz->super.getPosition = &VXMemoryDataSource_GetPosition; - thiz->super.setPosition = &VXMemoryDataSource_SetPosition; + thiz->super.destruct = &ZyDisMemoryDataSource_Destruct; + thiz->super.internalInputPeek = &ZyDisMemoryDataSource_InternalInputPeek; + thiz->super.internalInputNext = &ZyDisMemoryDataSource_InternalInputNext; + thiz->super.isEndOfInput = &ZyDisMemoryDataSource_IsEndOfInput; + thiz->super.getPosition = &ZyDisMemoryDataSource_GetPosition; + thiz->super.setPosition = &ZyDisMemoryDataSource_SetPosition; thiz->inputBuffer = buffer; thiz->inputBufferLen = bufferLen; thiz->inputBufferPos = 0; } -void VXMemoryDataSource_Destruct(VXBaseDataSourceContext *ctx) +void ZyDisMemoryDataSource_Destruct(ZyDisBaseDataSourceContext *ctx) { // Nothing to destruct ourselfes, just call parent destructor - VXBaseDataSource_Destruct(ctx); + ZyDisBaseDataSource_Destruct(ctx); } -VXBaseDataSourceContext* VXMemoryDataSource_Create( +ZyDisBaseDataSourceContext* ZyDisMemoryDataSource_Create( const void* buffer, size_t bufferLen) { - VXMemoryDataSource *thiz = malloc(sizeof(VXMemoryDataSource)); - VXBaseDataSourceContext *ctx = malloc(sizeof(VXBaseDataSourceContext)); + ZyDisMemoryDataSource *thiz = malloc(sizeof(ZyDisMemoryDataSource)); + ZyDisBaseDataSourceContext *ctx = malloc(sizeof(ZyDisBaseDataSourceContext)); if (!thiz || !ctx) { @@ -541,56 +541,56 @@ VXBaseDataSourceContext* VXMemoryDataSource_Create( ctx->d.type = TYPE_MEMORYDATASOURCE; ctx->d.ptr = thiz; - VXMemoryDataSource_Construct(ctx, buffer, bufferLen); + ZyDisMemoryDataSource_Construct(ctx, buffer, bufferLen); return ctx; } -static uint8_t VXMemoryDataSource_InternalInputPeek(VXBaseDataSourceContext *ctx) +static uint8_t ZyDisMemoryDataSource_InternalInputPeek(ZyDisBaseDataSourceContext *ctx) { - VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); + ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_thiz(ctx); return *((const uint8_t*)thiz->inputBuffer + thiz->inputBufferPos); } -static uint8_t VXMemoryDataSource_InternalInputNext(VXBaseDataSourceContext *ctx) +static uint8_t ZyDisMemoryDataSource_InternalInputNext(ZyDisBaseDataSourceContext *ctx) { - VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); + ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_thiz(ctx); ++thiz->inputBufferPos; return *((const uint8_t*)thiz->inputBuffer + thiz->inputBufferPos - 1); } -static bool VXMemoryDataSource_IsEndOfInput(const VXBaseDataSourceContext *ctx) +static bool ZyDisMemoryDataSource_IsEndOfInput(const ZyDisBaseDataSourceContext *ctx) { - const VXMemoryDataSource *thiz = VXMemoryDataSource_cthiz(ctx); + const ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_cthiz(ctx); return (thiz->inputBufferPos >= thiz->inputBufferLen); } -static uint64_t VXMemoryDataSource_GetPosition(const VXBaseDataSourceContext *ctx) +static uint64_t ZyDisMemoryDataSource_GetPosition(const ZyDisBaseDataSourceContext *ctx) { - return VXMemoryDataSource_cthiz(ctx)->inputBufferPos; + return ZyDisMemoryDataSource_cthiz(ctx)->inputBufferPos; } -static bool VXMemoryDataSource_SetPosition(VXBaseDataSourceContext *ctx, uint64_t position) +static bool ZyDisMemoryDataSource_SetPosition(ZyDisBaseDataSourceContext *ctx, uint64_t position) { - VXMemoryDataSource *thiz = VXMemoryDataSource_thiz(ctx); + ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_thiz(ctx); thiz->inputBufferPos = position; return thiz->super.isEndOfInput(ctx); } -/* VXCustomDataSource -------------------------------------------------------------------------- */ +/* ZyDisCustomDataSource -------------------------------------------------------------------------- */ -static void VXCustomDataSource_Construct(VXBaseDataSourceContext *ctx, - VXBaseDataSource_InputCallback inputPeekCb, - VXBaseDataSource_InputCallback inputNextCb, - VXBaseDataSource_IsEndOfInputCallback isEndOfInputCb, - VXBaseDataSource_GetPositionCallback getPositionCb, - VXBaseDataSource_SetPositionCallback setPositionCb, - VXBaseDataSource_DestructionCallback destructionCb) +static void ZyDisCustomDataSource_Construct(ZyDisBaseDataSourceContext *ctx, + ZyDisBaseDataSource_InputCallback inputPeekCb, + ZyDisBaseDataSource_InputCallback inputNextCb, + ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInputCb, + ZyDisBaseDataSource_GetPositionCallback getPositionCb, + ZyDisBaseDataSource_SetPositionCallback setPositionCb, + ZyDisBaseDataSource_DestructionCallback destructionCb) { - VXBaseDataSource_Construct(ctx); + ZyDisBaseDataSource_Construct(ctx); - VXCustomDataSource *thiz = VXCustomDataSource_thiz(ctx); - thiz->super.destruct = &VXCustomDataSource_Destruct; + ZyDisCustomDataSource *thiz = ZyDisCustomDataSource_thiz(ctx); + thiz->super.destruct = &ZyDisCustomDataSource_Destruct; thiz->super.internalInputPeek = inputPeekCb; thiz->super.internalInputNext = inputNextCb; thiz->super.isEndOfInput = isEndOfInputCb; @@ -600,28 +600,28 @@ static void VXCustomDataSource_Construct(VXBaseDataSourceContext *ctx, thiz->userDestruct = destructionCb; } -static void VXCustomDataSource_Destruct(VXBaseDataSourceContext *ctx) +static void ZyDisCustomDataSource_Destruct(ZyDisBaseDataSourceContext *ctx) { - VXCustomDataSource *thiz = VXCustomDataSource_thiz(ctx); + ZyDisCustomDataSource *thiz = ZyDisCustomDataSource_thiz(ctx); if (thiz->userDestruct) { thiz->userDestruct(ctx); } - VXBaseDataSource_Destruct(ctx); + ZyDisBaseDataSource_Destruct(ctx); } -VXBaseDataSourceContext* VXCustomDataSource_Create( - VXBaseDataSource_InputCallback inputPeekCb, - VXBaseDataSource_InputCallback inputNextCb, - VXBaseDataSource_IsEndOfInputCallback isEndOfInputCb, - VXBaseDataSource_GetPositionCallback getPositionCb, - VXBaseDataSource_SetPositionCallback setPositionCb, - VXBaseDataSource_DestructionCallback destructionCb) +ZyDisBaseDataSourceContext* ZyDisCustomDataSource_Create( + ZyDisBaseDataSource_InputCallback inputPeekCb, + ZyDisBaseDataSource_InputCallback inputNextCb, + ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInputCb, + ZyDisBaseDataSource_GetPositionCallback getPositionCb, + ZyDisBaseDataSource_SetPositionCallback setPositionCb, + ZyDisBaseDataSource_DestructionCallback destructionCb) { - VXCustomDataSource *thiz = malloc(sizeof(VXCustomDataSource)); - VXBaseDataSourceContext *ctx = malloc(sizeof(VXBaseDataSourceContext)); + ZyDisCustomDataSource *thiz = malloc(sizeof(ZyDisCustomDataSource)); + ZyDisBaseDataSourceContext *ctx = malloc(sizeof(ZyDisBaseDataSourceContext)); if (!thiz || !ctx) { @@ -640,19 +640,19 @@ VXBaseDataSourceContext* VXCustomDataSource_Create( ctx->d.type = TYPE_CUSTOMDATASOURCE; ctx->d.ptr = thiz; - VXCustomDataSource_Construct(ctx, inputPeekCb, inputNextCb, isEndOfInputCb, getPositionCb, + ZyDisCustomDataSource_Construct(ctx, inputPeekCb, inputNextCb, isEndOfInputCb, getPositionCb, setPositionCb, destructionCb); return ctx; } -/* VXInstructionDecoder ------------------------------------------------------------------------ */ +/* ZyDisInstructionDecoder ------------------------------------------------------------------------ */ -void VXInstructionDecoder_Construct(VXInstructionDecoderContext *ctx, - VXBaseDataSourceContext *input, VXDisassemblerMode disassemblerMode, - VXInstructionSetVendor preferredVendor, uint64_t instructionPointer) +void ZyDisInstructionDecoder_Construct(ZyDisInstructionDecoderContext *ctx, + ZyDisBaseDataSourceContext *input, ZyDisDisassemblerMode disassemblerMode, + ZyDisInstructionSetVendor preferredVendor, uint64_t instructionPointer) { - VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); thiz->dataSource = input; thiz->disassemblerMode = disassemblerMode; @@ -660,22 +660,22 @@ void VXInstructionDecoder_Construct(VXInstructionDecoderContext *ctx, thiz->instructionPointer = instructionPointer; } -void VXInstructionDecoder_Destruct(VXInstructionDecoderContext *ctx) +void ZyDisInstructionDecoder_Destruct(ZyDisInstructionDecoderContext *ctx) { - VX_UNUSED(ctx); + ZYDIS_UNUSED(ctx); } -VXInstructionDecoderContext* VXInstructionDecoder_Create(void) +ZyDisInstructionDecoderContext* ZyDisInstructionDecoder_Create(void) { - return VXInstructionDecoder_CreateEx(NULL, DM_M32BIT, ISV_ANY, 0); + return ZyDisInstructionDecoder_CreateEx(NULL, DM_M32BIT, ISV_ANY, 0); } -VXInstructionDecoderContext* VXInstructionDecoder_CreateEx(VXBaseDataSourceContext *input, - VXDisassemblerMode disassemblerMode, VXInstructionSetVendor preferredVendor, +ZyDisInstructionDecoderContext* ZyDisInstructionDecoder_CreateEx(ZyDisBaseDataSourceContext *input, + ZyDisDisassemblerMode disassemblerMode, ZyDisInstructionSetVendor preferredVendor, uint64_t instructionPointer) { - VXInstructionDecoder *thiz = malloc(sizeof(VXInstructionDecoder)); - VXInstructionDecoderContext *ctx = malloc(sizeof(VXInstructionDecoderContext)); + ZyDisInstructionDecoder *thiz = malloc(sizeof(ZyDisInstructionDecoder)); + ZyDisInstructionDecoderContext *ctx = malloc(sizeof(ZyDisInstructionDecoderContext)); if (!thiz || !ctx) { @@ -694,24 +694,24 @@ VXInstructionDecoderContext* VXInstructionDecoder_CreateEx(VXBaseDataSourceConte ctx->d.ptr = thiz; ctx->d.type = TYPE_INSTRUCTIONDECODER; - VXInstructionDecoder_Construct(ctx, input, disassemblerMode, + ZyDisInstructionDecoder_Construct(ctx, input, disassemblerMode, preferredVendor, instructionPointer); return ctx; } -void VXInstructionDecoder_Release(VXInstructionDecoderContext *ctx) +void ZyDisInstructionDecoder_Release(ZyDisInstructionDecoderContext *ctx) { - VXInstructionDecoder_Destruct(ctx); + ZyDisInstructionDecoder_Destruct(ctx); free(ctx->d.ptr); free(ctx); } -static uint8_t VXInstructionDecoder_InputPeek( - VXInstructionDecoderContext *ctx, VXInstructionInfo *info) +static uint8_t ZyDisInstructionDecoder_InputPeek( + ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info) { - VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); if (!thiz->dataSource) { @@ -719,14 +719,14 @@ static uint8_t VXInstructionDecoder_InputPeek( return 0; } - return VXBaseDataSource_InputPeek(thiz->dataSource, info); + return ZyDisBaseDataSource_InputPeek(thiz->dataSource, info); } -#define VXINSTRUCTIONDECODER_INPUTNEXT_N(n) \ - static uint##n##_t VXInstructionDecoder_InputNext##n( \ - VXInstructionDecoderContext *ctx, VXInstructionInfo *info) \ +#define ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(n) \ + static uint##n##_t ZyDisInstructionDecoder_InputNext##n( \ + ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info) \ { \ - VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); \ + ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); \ \ if (!thiz->dataSource) \ { \ @@ -734,82 +734,82 @@ static uint8_t VXInstructionDecoder_InputPeek( return 0; \ } \ \ - return VXBaseDataSource_InputNext##n(thiz->dataSource, info); \ + return ZyDisBaseDataSource_InputNext##n(thiz->dataSource, info); \ } -VXINSTRUCTIONDECODER_INPUTNEXT_N(8) -VXINSTRUCTIONDECODER_INPUTNEXT_N(16) -VXINSTRUCTIONDECODER_INPUTNEXT_N(32) -VXINSTRUCTIONDECODER_INPUTNEXT_N(64) -#undef VXINSTRUCTIONDECODER_INPUTNEXT_N +ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(8) +ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(16) +ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(32) +ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(64) +#undef ZyDisINSTRUCTIONDECODER_INPUTNEXT_N -static uint8_t VXInstructionDecoder_InputCurrent(const VXInstructionDecoderContext *ctx) +static uint8_t ZyDisInstructionDecoder_InputCurrent(const ZyDisInstructionDecoderContext *ctx) { - const VXInstructionDecoder *thiz = VXInstructionDecoder_cthiz(ctx); + const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_cthiz(ctx); if (!thiz->dataSource) { return 0; } - return VXBaseDataSource_InputCurrent(thiz->dataSource); + return ZyDisBaseDataSource_InputCurrent(thiz->dataSource); } -VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( - const VXInstructionDecoderContext *ctx) +ZyDisBaseDataSourceContext* ZyDisInstructionDecoder_GetDataSource( + const ZyDisInstructionDecoderContext *ctx) { - return VXInstructionDecoder_cthiz(ctx)->dataSource; + return ZyDisInstructionDecoder_cthiz(ctx)->dataSource; } -void VXInstructionDecoder_SetDataSource( - VXInstructionDecoderContext *ctx, VXBaseDataSourceContext *input) +void ZyDisInstructionDecoder_SetDataSource( + ZyDisInstructionDecoderContext *ctx, ZyDisBaseDataSourceContext *input) { - VXInstructionDecoder_thiz(ctx)->dataSource = input; + ZyDisInstructionDecoder_thiz(ctx)->dataSource = input; } -VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( - const VXInstructionDecoderContext *ctx) +ZyDisDisassemblerMode ZyDisInstructionDecoder_GetDisassemblerMode( + const ZyDisInstructionDecoderContext *ctx) { - return VXInstructionDecoder_cthiz(ctx)->disassemblerMode; + return ZyDisInstructionDecoder_cthiz(ctx)->disassemblerMode; } -void VXInstructionDecoder_SetDisassemblerMode(VXInstructionDecoderContext *ctx, - VXDisassemblerMode disassemblerMode) +void ZyDisInstructionDecoder_SetDisassemblerMode(ZyDisInstructionDecoderContext *ctx, + ZyDisDisassemblerMode disassemblerMode) { - VXInstructionDecoder_thiz(ctx)->disassemblerMode = disassemblerMode; + ZyDisInstructionDecoder_thiz(ctx)->disassemblerMode = disassemblerMode; } -VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( - const VXInstructionDecoderContext *ctx) +ZyDisInstructionSetVendor ZyDisInstructionDecoder_GetPreferredVendor( + const ZyDisInstructionDecoderContext *ctx) { - return VXInstructionDecoder_cthiz(ctx)->preferredVendor; + return ZyDisInstructionDecoder_cthiz(ctx)->preferredVendor; } -void VXInstructionDecoder_SetPreferredVendor(VXInstructionDecoderContext *ctx, - VXInstructionSetVendor preferredVendor) +void ZyDisInstructionDecoder_SetPreferredVendor(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionSetVendor preferredVendor) { - VXInstructionDecoder_thiz(ctx)->preferredVendor = preferredVendor; + ZyDisInstructionDecoder_thiz(ctx)->preferredVendor = preferredVendor; } -uint64_t VXInstructionDecoder_GetInstructionPointer( - const VXInstructionDecoderContext *ctx) +uint64_t ZyDisInstructionDecoder_GetInstructionPointer( + const ZyDisInstructionDecoderContext *ctx) { - return VXInstructionDecoder_cthiz(ctx)->instructionPointer; + return ZyDisInstructionDecoder_cthiz(ctx)->instructionPointer; } -void VXInstructionDecoder_SetInstructionPointer(VXInstructionDecoderContext *ctx, +void ZyDisInstructionDecoder_SetInstructionPointer(ZyDisInstructionDecoderContext *ctx, uint64_t instructionPointer) { - VXInstructionDecoder_thiz(ctx)->instructionPointer = instructionPointer; + ZyDisInstructionDecoder_thiz(ctx)->instructionPointer = instructionPointer; } -static bool VXInstructionDecoder_DecodeRegisterOperand( - const VXInstructionDecoderContext *ctx, VXInstructionInfo *info, VXOperandInfo *operand, - VXRegisterClass registerClass, uint8_t registerId, VXDefinedOperandSize operandSize) +static bool ZyDisInstructionDecoder_DecodeRegisterOperand( + const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, + ZyDisRegisterClass registerClass, uint8_t registerId, ZyDisDefinedOperandSize operandSize) { - VXRegister reg = REG_NONE; - uint16_t size = VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); - const VXInstructionDecoder *thiz = VXInstructionDecoder_cthiz(ctx); + ZyDisRegister reg = REG_NONE; + uint16_t size = ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); + const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_cthiz(ctx); switch (registerClass) { @@ -882,11 +882,11 @@ static bool VXInstructionDecoder_DecodeRegisterOperand( return true; } -static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info, VXOperandInfo *operand, VXRegisterClass registerClass, - VXDefinedOperandSize operandSize) +static bool ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisRegisterClass registerClass, + ZyDisDefinedOperandSize operandSize) { - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } @@ -894,21 +894,21 @@ static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecode // Decode register operand if (info->modrm_mod == 3) { - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, registerClass, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, registerClass, info->modrm_rm_ext, operandSize); } // Decode memory operand uint8_t offset = 0; operand->type = OPTYPE_MEMORY; - operand->size = VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); + operand->size = ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); switch (info->address_mode) { case 16: { - static const VXRegister bases[] = { + static const ZyDisRegister bases[] = { REG_BX, REG_BX, REG_BP, REG_BP, REG_SI, REG_DI, REG_BP, REG_BX }; - static const VXRegister indices[] = { + static const ZyDisRegister indices[] = { REG_SI, REG_DI, REG_SI, REG_DI, REG_NONE, REG_NONE, REG_NONE, REG_NONE }; operand->base = bases[info->modrm_rm_ext & 0x07]; @@ -946,7 +946,7 @@ static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecode } if ((info->modrm_rm_ext & 0x07) == 4) { - if (!VXInstructionDecoder_DecodeSIB(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeSIB(ctx, info)) { return false; } @@ -1004,7 +1004,7 @@ static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecode } if ((info->modrm_rm_ext & 0x07) == 4) { - if (!VXInstructionDecoder_DecodeSIB(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeSIB(ctx, info)) { return false; } @@ -1046,7 +1046,7 @@ static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecode } if (offset) { - if (!VXInstructionDecoder_DecodeDisplacement(ctx, info, operand, offset)) + if (!ZyDisInstructionDecoder_DecodeDisplacement(ctx, info, operand, offset)) { return false; } @@ -1057,24 +1057,24 @@ static bool VXInstructionDecoder_DecodeRegisterMemoryOperand(VXInstructionDecode return true; } -static bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandSize operandSize) +static bool ZyDisInstructionDecoder_DecodeImmediate(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisDefinedOperandSize operandSize) { operand->type = OPTYPE_IMMEDIATE; - operand->size = VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); + operand->size = ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); switch (operand->size) { case 8: - operand->lval.ubyte = VXInstructionDecoder_InputNext8(ctx, info); + operand->lval.ubyte = ZyDisInstructionDecoder_InputNext8(ctx, info); break; case 16: - operand->lval.uword = VXInstructionDecoder_InputNext16(ctx, info); + operand->lval.uword = ZyDisInstructionDecoder_InputNext16(ctx, info); break; case 32: - operand->lval.udword = VXInstructionDecoder_InputNext32(ctx, info); + operand->lval.udword = ZyDisInstructionDecoder_InputNext32(ctx, info); break; case 64: - operand->lval.uqword = VXInstructionDecoder_InputNext64(ctx, info); + operand->lval.uqword = ZyDisInstructionDecoder_InputNext64(ctx, info); break; default: // TODO: Maybe return false instead of assert @@ -1087,26 +1087,26 @@ static bool VXInstructionDecoder_DecodeImmediate(VXInstructionDecoderContext *ct return true; } -static bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info, VXOperandInfo *operand, uint8_t size) +static bool ZyDisInstructionDecoder_DecodeDisplacement(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, uint8_t size) { switch (size) { case 8: operand->offset = 8; - operand->lval.ubyte = VXInstructionDecoder_InputNext8(ctx, info); + operand->lval.ubyte = ZyDisInstructionDecoder_InputNext8(ctx, info); break; case 16: operand->offset = 16; - operand->lval.uword = VXInstructionDecoder_InputNext16(ctx, info); + operand->lval.uword = ZyDisInstructionDecoder_InputNext16(ctx, info); break; case 32: operand->offset = 32; - operand->lval.udword = VXInstructionDecoder_InputNext32(ctx, info); + operand->lval.udword = ZyDisInstructionDecoder_InputNext32(ctx, info); break; case 64: operand->offset = 64; - operand->lval.uqword = VXInstructionDecoder_InputNext64(ctx, info); + operand->lval.uqword = ZyDisInstructionDecoder_InputNext64(ctx, info); break; default: // TODO: Maybe return false instead of assert @@ -1119,12 +1119,12 @@ static bool VXInstructionDecoder_DecodeDisplacement(VXInstructionDecoderContext return true; } -static bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info) +static bool ZyDisInstructionDecoder_DecodeModrm(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info) { if (!(info->flags & IF_MODRM)) { - info->modrm = VXInstructionDecoder_InputNext8(ctx, info); + info->modrm = ZyDisInstructionDecoder_InputNext8(ctx, info); if (!info->modrm && (info->flags & IF_ERROR_MASK)) { return false; @@ -1144,15 +1144,15 @@ static bool VXInstructionDecoder_DecodeModrm(VXInstructionDecoderContext *ctx, return true; } -static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info) +static bool ZyDisInstructionDecoder_DecodeSIB(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info) { assert(info->flags & IF_MODRM); assert((info->modrm_rm & 0x7) == 4); if (!(info->flags & IF_SIB)) { - info->sib = VXInstructionDecoder_InputNext8(ctx, info); + info->sib = ZyDisInstructionDecoder_InputNext8(ctx, info); if (!info->sib && (info->flags & IF_ERROR_MASK)) { return false; @@ -1170,22 +1170,22 @@ static bool VXInstructionDecoder_DecodeSIB(VXInstructionDecoderContext *ctx, return true; } -static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info) +static bool ZyDisInstructionDecoder_DecodeVex(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info) { if (!(info->flags & IF_PREFIX_VEX)) { - info->vex_op = VXInstructionDecoder_InputCurrent(ctx); + info->vex_op = ZyDisInstructionDecoder_InputCurrent(ctx); switch (info->vex_op) { case 0xC4: - info->vex_b1 = VXInstructionDecoder_InputNext8(ctx, info); + info->vex_b1 = ZyDisInstructionDecoder_InputNext8(ctx, info); if (!info->vex_b1 || (info->flags & IF_ERROR_MASK)) { return false; } - info->vex_b2 = VXInstructionDecoder_InputNext8(ctx, info); + info->vex_b2 = ZyDisInstructionDecoder_InputNext8(ctx, info); if (!info->vex_b2 || (info->flags & IF_ERROR_MASK)) { return false; @@ -1201,7 +1201,7 @@ static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, info->vex_pp = (info->vex_b2 >> 0) & 0x03; break; case 0xC5: - info->vex_b1 = VXInstructionDecoder_InputNext8(ctx, info); + info->vex_b1 = ZyDisInstructionDecoder_InputNext8(ctx, info); if (!info->vex_b1 || (info->flags & IF_ERROR_MASK)) { return false; @@ -1231,11 +1231,11 @@ static bool VXInstructionDecoder_DecodeVex(VXInstructionDecoderContext *ctx, return true; } -static uint16_t VXInstructionDecoder_GetEffectiveOperandSize( - const VXInstructionDecoderContext *ctx, const VXInstructionInfo *info, - VXDefinedOperandSize operandSize) +static uint16_t ZyDisInstructionDecoder_GetEffectiveOperandSize( + const ZyDisInstructionDecoderContext *ctx, const ZyDisInstructionInfo *info, + ZyDisDefinedOperandSize operandSize) { - const VXInstructionDecoder *thiz = VXInstructionDecoder_cthiz(ctx); + const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_cthiz(ctx); switch (operandSize) { @@ -1250,21 +1250,21 @@ static uint16_t VXInstructionDecoder_GetEffectiveOperandSize( case DOS_X: assert(info->vex_op != 0); return (info->eff_vex_l) ? - VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, DOS_QQ) : - VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, DOS_DQ); + ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, DOS_QQ) : + ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, DOS_DQ); case DOS_RDQ: return (thiz->disassemblerMode == DM_M64BIT) ? 64 : 32; default: - return VXGetSimpleOperandSize(operandSize); + return ZyDisGetSimpleOperandSize(operandSize); } } -static bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info) +static bool ZyDisInstructionDecoder_DecodeOperands(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info) { assert(info->instrDefinition); // Always try to decode the first operand - if (!VXInstructionDecoder_DecodeOperand(ctx, info, &info->operand[0], + if (!ZyDisInstructionDecoder_DecodeOperand(ctx, info, &info->operand[0], info->instrDefinition->operand[0].type, info->instrDefinition->operand[0].size)) { return false; @@ -1275,7 +1275,7 @@ static bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx { if (info->operand[i - 1].type != OPTYPE_NONE) { - if (!VXInstructionDecoder_DecodeOperand(ctx, info, &info->operand[i], + if (!ZyDisInstructionDecoder_DecodeOperand(ctx, info, &info->operand[i], info->instrDefinition->operand[i].type, info->instrDefinition->operand[i].size)) { return false; @@ -1317,11 +1317,11 @@ static bool VXInstructionDecoder_DecodeOperands(VXInstructionDecoderContext *ctx return true; } -static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info, VXOperandInfo *operand, VXDefinedOperandType operandType, - VXDefinedOperandSize operandSize) +static bool ZyDisInstructionDecoder_DecodeOperand(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisDefinedOperandType operandType, + ZyDisDefinedOperandSize operandSize) { - const VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); operand->type = OPTYPE_NONE; switch (operandType) @@ -1333,14 +1333,14 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, if (info->operand_mode == 16) { operand->size = 32; - operand->lval.ptr.off = VXInstructionDecoder_InputNext16(ctx, info); - operand->lval.ptr.seg = VXInstructionDecoder_InputNext16(ctx, info); + operand->lval.ptr.off = ZyDisInstructionDecoder_InputNext16(ctx, info); + operand->lval.ptr.seg = ZyDisInstructionDecoder_InputNext16(ctx, info); } else { operand->size = 48; - operand->lval.ptr.off = VXInstructionDecoder_InputNext32(ctx, info); - operand->lval.ptr.seg = VXInstructionDecoder_InputNext16(ctx, info); + operand->lval.ptr.off = ZyDisInstructionDecoder_InputNext32(ctx, info); + operand->lval.ptr.seg = ZyDisInstructionDecoder_InputNext16(ctx, info); } if ((!operand->lval.ptr.off || !operand->lval.ptr.seg) && (info->flags & IF_ERROR_MASK)) @@ -1350,18 +1350,18 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, break; case DOT_C: - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_CONTROL, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_CONTROL, info->modrm_reg_ext, operandSize); case DOT_D: - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_DEBUG, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_DEBUG, info->modrm_reg_ext, operandSize); case DOT_F: // TODO: FAR flag @@ -1373,29 +1373,29 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, return false; } case DOT_E: - return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, + return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_GENERAL_PURPOSE, operandSize); case DOT_G: - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, info->modrm_reg_ext, operandSize); case DOT_H: assert(info->vex_op != 0); - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, (0xF & ~info->vex_vvvv), operandSize); case DOT_sI: operand->signed_lval = true; case DOT_I: - return VXInstructionDecoder_DecodeImmediate(ctx, info, operand, operandSize); + return ZyDisInstructionDecoder_DecodeImmediate(ctx, info, operand, operandSize); case DOT_I1: operand->type = OPTYPE_CONSTANT; operand->lval.udword = 1; break; case DOT_J: - if (!VXInstructionDecoder_DecodeImmediate(ctx, info, operand, operandSize)) + if (!ZyDisInstructionDecoder_DecodeImmediate(ctx, info, operand, operandSize)) { return false; } @@ -1406,23 +1406,23 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, case DOT_L: { assert(info->vex_op != 0); - uint8_t imm = VXInstructionDecoder_InputNext8(ctx, info); + uint8_t imm = ZyDisInstructionDecoder_InputNext8(ctx, info); if (!imm && (info->flags & IF_ERROR_MASK)) { return false; } uint8_t mask = (thiz->disassemblerMode == DM_M64BIT) ? 0xF : 0x7; - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, mask & (imm >> 4), operandSize); } case DOT_MR: - return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, + return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_GENERAL_PURPOSE, info->modrm_mod == 3 ? - VXGetComplexOperandRegSize(operandSize) : VXGetComplexOperandMemSize(operandSize)); + ZyDisGetComplexOperandRegSize(operandSize) : ZyDisGetComplexOperandMemSize(operandSize)); case DOT_MU: - return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_XMM, + return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_XMM, info->modrm_mod == 3 ? - VXGetComplexOperandRegSize(operandSize) : VXGetComplexOperandMemSize(operandSize)); + ZyDisGetComplexOperandRegSize(operandSize) : ZyDisGetComplexOperandMemSize(operandSize)); case DOT_N: // ModR/M byte may refer only to memory if (info->modrm_mod != 3) @@ -1431,21 +1431,21 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, return false; } case DOT_Q: - return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_MMX, + return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_MMX, operandSize); case DOT_O: operand->type = OPTYPE_MEMORY; operand->base = REG_NONE; operand->index = REG_NONE; operand->scale = 0; - operand->size = VXInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); - return VXInstructionDecoder_DecodeDisplacement(ctx, info, operand, info->address_mode); + operand->size = ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); + return ZyDisInstructionDecoder_DecodeDisplacement(ctx, info, operand, info->address_mode); case DOT_P: - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_MMX, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_MMX, info->modrm_reg_ext, operandSize); case DOT_R: // ModR/M byte may refer only to memory @@ -1454,14 +1454,14 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, info->flags |= IF_ERROR_OPERAND; return false; } - return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, + return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_GENERAL_PURPOSE, operandSize); case DOT_S: - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_SEGMENT, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_SEGMENT, info->modrm_reg_ext, operandSize); case DOT_U: // ModR/M byte may refer only to memory @@ -1471,14 +1471,14 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, return false; } case DOT_W: - return VXInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_XMM, + return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_XMM, operandSize); case DOT_V: - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, info->modrm_reg_ext, operandSize); case DOT_R0: case DOT_R1: @@ -1488,25 +1488,25 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, case DOT_R5: case DOT_R6: case DOT_R7: - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, (uint8_t)((info->eff_rexvex_b << 3) | operandType - DOT_R0), operandSize); case DOT_AL: case DOT_AX: case DOT_EAX: case DOT_RAX: - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, 0, operandSize); case DOT_CL: case DOT_CX: case DOT_ECX: case DOT_RCX: - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, 1, operandSize); case DOT_DL: case DOT_DX: case DOT_EDX: case DOT_RDX: - return VXInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, + return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, 2, operandSize); case DOT_ES: case DOT_CS: @@ -1544,10 +1544,10 @@ static bool VXInstructionDecoder_DecodeOperand(VXInstructionDecoderContext *ctx, return true; } -static void VXInstructionDecoder_ResolveOperandAndAddressMode( - const VXInstructionDecoderContext *ctx, VXInstructionInfo *info) +static void ZyDisInstructionDecoder_ResolveOperandAndAddressMode( + const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info) { - const VXInstructionDecoder *thiz = VXInstructionDecoder_cthiz(ctx); + const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_cthiz(ctx); assert(info->instrDefinition); switch (thiz->disassemblerMode) @@ -1581,10 +1581,10 @@ static void VXInstructionDecoder_ResolveOperandAndAddressMode( } } -static void VXInstructionDecoder_CalculateEffectiveRexVexValues( - const VXInstructionDecoderContext *ctx, VXInstructionInfo *info) +static void ZyDisInstructionDecoder_CalculateEffectiveRexVexValues( + const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info) { - VX_UNUSED(ctx); + ZYDIS_UNUSED(ctx); assert(info->instrDefinition); uint8_t rex = info->rex; @@ -1610,15 +1610,15 @@ static void VXInstructionDecoder_CalculateEffectiveRexVexValues( info->eff_vex_l = info->vex_l && (info->instrDefinition->flags & IDF_ACCEPTS_VEXL); } -static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info) +static bool ZyDisInstructionDecoder_DecodePrefixes(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info) { - VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); bool done = false; do { - switch (VXInstructionDecoder_InputPeek(ctx, info)) + switch (ZyDisInstructionDecoder_InputPeek(ctx, info)) { case 0xF0: info->flags |= IF_PREFIX_LOCK; @@ -1665,10 +1665,10 @@ static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx break; default: if ((thiz->disassemblerMode == DM_M64BIT) && - (VXInstructionDecoder_InputCurrent(ctx) & 0xF0) == 0x40) + (ZyDisInstructionDecoder_InputCurrent(ctx) & 0xF0) == 0x40) { info->flags |= IF_PREFIX_REX; - info->rex = VXInstructionDecoder_InputCurrent(ctx); + info->rex = ZyDisInstructionDecoder_InputCurrent(ctx); } else { @@ -1679,7 +1679,7 @@ static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx // Increase the input offset, if a prefix was found if (!done) { - if (!VXInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) + if (!ZyDisInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) { return false; } @@ -1697,42 +1697,42 @@ static bool VXInstructionDecoder_DecodePrefixes(VXInstructionDecoderContext *ctx return true; } -static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info) +static bool ZyDisInstructionDecoder_DecodeOpcode(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info) { - VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); // Read first opcode byte - if (!VXInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) + if (!ZyDisInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) { return false; } // Update instruction info - info->opcode[0] = VXInstructionDecoder_InputCurrent(ctx); + info->opcode[0] = ZyDisInstructionDecoder_InputCurrent(ctx); info->opcode_length = 1; // Iterate through opcode tree - VXOpcodeTreeNode node = VXGetOpcodeTreeChild(VXGetOpcodeTreeRoot(), - VXInstructionDecoder_InputCurrent(ctx)); - VXOpcodeTreeNodeType nodeType; + ZyDisOpcodeTreeNode node = ZyDisGetOpcodeTreeChild(ZyDisGetOpcodeTreeRoot(), + ZyDisInstructionDecoder_InputCurrent(ctx)); + ZyDisOpcodeTreeNodeType nodeType; do { uint16_t index = 0; - nodeType = VXGetOpcodeNodeType(node); + nodeType = ZyDisGetOpcodeNodeType(node); switch (nodeType) { case OTNT_INSTRUCTION_DEFINITION: { // Check for invalid instruction - if (VXGetOpcodeNodeValue(node) == 0) + if (ZyDisGetOpcodeNodeValue(node) == 0) { info->flags |= IF_ERROR_INVALID; return false; } // Get instruction definition - const VXInstructionDefinition *instrDefinition = VXGetInstructionDefinition(node); + const ZyDisInstructionDefinition *instrDefinition = ZyDisGetInstructionDefinition(node); // Check for invalid 64 bit instruction if ((thiz->disassemblerMode == DM_M64BIT) && (instrDefinition->flags & IDF_INVALID_64)) @@ -1744,11 +1744,11 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, info->instrDefinition = instrDefinition; info->mnemonic = instrDefinition->mnemonic; // Update effective REX/VEX values - VXInstructionDecoder_CalculateEffectiveRexVexValues(ctx, info); + ZyDisInstructionDecoder_CalculateEffectiveRexVexValues(ctx, info); // Resolve operand and address mode - VXInstructionDecoder_ResolveOperandAndAddressMode(ctx, info); + ZyDisInstructionDecoder_ResolveOperandAndAddressMode(ctx, info); // Decode operands - if (!VXInstructionDecoder_DecodeOperands(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeOperands(ctx, info)) { return false; } @@ -1756,20 +1756,20 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, return true; case OTNT_TABLE: // Read next opcode byte - if (!VXInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) + if (!ZyDisInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) { return false; } // Update instruction info assert((info->opcode_length > 0) && (info->opcode_length < 3)); - info->opcode[info->opcode_length] = VXInstructionDecoder_InputCurrent(ctx); + info->opcode[info->opcode_length] = ZyDisInstructionDecoder_InputCurrent(ctx); info->opcode_length++; // Set child node index for next iteration - index = VXInstructionDecoder_InputCurrent(ctx); + index = ZyDisInstructionDecoder_InputCurrent(ctx); break; case OTNT_MODRM_MOD: // Decode modrm byte - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } @@ -1777,7 +1777,7 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, break; case OTNT_MODRM_REG: // Decode modrm byte - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } @@ -1785,7 +1785,7 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, break; case OTNT_MODRM_RM: // Decode modrm byte - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } @@ -1806,12 +1806,12 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, index = 3; // 66 } - if (VXGetOpcodeTreeChild(node, index) == 0) + if (ZyDisGetOpcodeTreeChild(node, index) == 0) { index = 0; } - if (index && (VXGetOpcodeTreeChild(node, index) != 0)) + if (index && (ZyDisGetOpcodeTreeChild(node, index) != 0)) { // Remove REP and REPNE prefix info->flags &= ~IF_PREFIX_REP; @@ -1826,7 +1826,7 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, break; case OTNT_X87: // Decode modrm byte - if (!VXInstructionDecoder_DecodeModrm(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) { return false; } @@ -1871,7 +1871,7 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, switch (thiz->preferredVendor) { case ISV_ANY: - index = (VXGetOpcodeTreeChild(node, 0) != 0) ? 0 : 1; + index = (ZyDisGetOpcodeTreeChild(node, 0) != 0) ? 0 : 1; break; case ISV_INTEL: index = 1; @@ -1887,30 +1887,30 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, { // As all 3dnow instructions got the same operands and flag definitions, we just // decode a random instruction and determine the specific opcode later-> - assert(VXGetOpcodeTreeChild(node, 0x0C) != 0); - const VXInstructionDefinition *instrDefinition = - VXGetInstructionDefinition(VXGetOpcodeTreeChild(node, 0x0C)); + assert(ZyDisGetOpcodeTreeChild(node, 0x0C) != 0); + const ZyDisInstructionDefinition *instrDefinition = + ZyDisGetInstructionDefinition(ZyDisGetOpcodeTreeChild(node, 0x0C)); // Update instruction info info->instrDefinition = instrDefinition; info->mnemonic = instrDefinition->mnemonic; // Update effective REX/VEX values - VXInstructionDecoder_CalculateEffectiveRexVexValues(ctx, info); + ZyDisInstructionDecoder_CalculateEffectiveRexVexValues(ctx, info); // Resolve operand and address mode - VXInstructionDecoder_ResolveOperandAndAddressMode(ctx, info); + ZyDisInstructionDecoder_ResolveOperandAndAddressMode(ctx, info); // Decode operands - if (!VXInstructionDecoder_DecodeOperands(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeOperands(ctx, info)) { return false; } // Read the actual 3dnow opcode - info->opcode[2] = VXInstructionDecoder_InputNext8(ctx, info); + info->opcode[2] = ZyDisInstructionDecoder_InputNext8(ctx, info); if (!info->opcode[2] && (info->flags & IF_ERROR_MASK)) { return false; } // Update instruction info instrDefinition = - VXGetInstructionDefinition(VXGetOpcodeTreeChild(node, info->opcode[2])); + ZyDisGetInstructionDefinition(ZyDisGetOpcodeTreeChild(node, info->opcode[2])); if (!instrDefinition || (instrDefinition->mnemonic == MNEM_INVALID)) { @@ -1954,10 +1954,10 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, } case OTNT_VEX: if ((thiz->disassemblerMode == DM_M64BIT) - || (((VXInstructionDecoder_InputCurrent(ctx) >> 6) & 0x03) == 0x03)) + || (((ZyDisInstructionDecoder_InputCurrent(ctx) >> 6) & 0x03) == 0x03)) { // Decode vex prefix - if (!VXInstructionDecoder_DecodeVex(ctx, info)) + if (!ZyDisInstructionDecoder_DecodeVex(ctx, info)) { return false; } @@ -2000,16 +2000,16 @@ static bool VXInstructionDecoder_DecodeOpcode(VXInstructionDecoderContext *ctx, default: assert(0); } - node = VXGetOpcodeTreeChild(node, index); + node = ZyDisGetOpcodeTreeChild(node, index); } while (nodeType != OTNT_INSTRUCTION_DEFINITION); return false; } -bool VXInstructionDecoder_DecodeInstruction(VXInstructionDecoderContext *ctx, - VXInstructionInfo *info) +bool ZyDisInstructionDecoder_DecodeInstruction(ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info) { - VXInstructionDecoder *thiz = VXInstructionDecoder_thiz(ctx); + ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); // Clear instruction info memset(info, 0, sizeof(*info)); @@ -2034,8 +2034,8 @@ bool VXInstructionDecoder_DecodeInstruction(VXInstructionDecoderContext *ctx, info->instrAddress = thiz->instructionPointer; // Decode - if (!VXInstructionDecoder_DecodePrefixes(ctx, info) - || !VXInstructionDecoder_DecodeOpcode(ctx, info)) + if (!ZyDisInstructionDecoder_DecodePrefixes(ctx, info) + || !ZyDisInstructionDecoder_DecodeOpcode(ctx, info)) { goto DecodeError; } @@ -2097,14 +2097,14 @@ DecodeError: info->length = length; info->data[0] = firstByte; info->instrAddress = instrAddress; - info->instrDefinition = VXGetInstructionDefinition(0); + info->instrDefinition = ZyDisGetInstructionDefinition(0); // Decrement the input position, if more than one byte was read from the input data // source while decoding the invalid instruction if (info->length != 1) { - VXBaseDataSource_SetPosition(thiz->dataSource, - VXBaseDataSource_GetPosition(thiz->dataSource) - info->length + 1); + ZyDisBaseDataSource_SetPosition(thiz->dataSource, + ZyDisBaseDataSource_GetPosition(thiz->dataSource) - info->length + 1); info->length = 1; } diff --git a/VerteronDisassemblerEngine/VXInstructionDecoder.h b/VerteronDisassemblerEngine/ZyDisInstructionDecoder.h similarity index 59% rename from VerteronDisassemblerEngine/VXInstructionDecoder.h rename to VerteronDisassemblerEngine/ZyDisInstructionDecoder.h index 34a04d0..d75748c 100644 --- a/VerteronDisassemblerEngine/VXInstructionDecoder.h +++ b/VerteronDisassemblerEngine/ZyDisInstructionDecoder.h @@ -30,11 +30,11 @@ **************************************************************************************************/ -#ifndef _VDE_VXINSTRUCTIONDECODERC_H_ -#define _VDE_VXINSTRUCTIONDECODERC_H_ +#ifndef _VDE_ZyDisINSTRUCTIONDECODERC_H_ +#define _VDE_ZyDisINSTRUCTIONDECODERC_H_ -#include "VXDisassemblerTypes.h" -#include "VXDisassemblerUtils.h" +#include "ZyDisDisassemblerTypes.h" +#include "ZyDisDisassemblerUtils.h" #include #include @@ -44,24 +44,24 @@ extern "C" { #endif -/* VXBaseDataSource ============================================================================ */ +/* ZyDisBaseDataSource ============================================================================ */ -typedef struct _VXBaseDataSourceContext { VXContextDescriptor d; } VXBaseDataSourceContext; +typedef struct _ZyDisBaseDataSourceContext { ZyDisContextDescriptor d; } ZyDisBaseDataSourceContext; -typedef void(*VXBaseDataSource_DestructionCallback)(VXBaseDataSourceContext *ctx); -typedef uint8_t(*VXBaseDataSource_InputCallback)(VXBaseDataSourceContext *ctx); -typedef bool(*VXBaseDataSource_IsEndOfInputCallback)(const VXBaseDataSourceContext *ctx); -typedef uint64_t(*VXBaseDataSource_GetPositionCallback)(const VXBaseDataSourceContext *ctx); -typedef bool(*VXBaseDataSource_SetPositionCallback)( - VXBaseDataSourceContext *ctx, uint64_t position); +typedef void(*ZyDisBaseDataSource_DestructionCallback)(ZyDisBaseDataSourceContext *ctx); +typedef uint8_t(*ZyDisBaseDataSource_InputCallback)(ZyDisBaseDataSourceContext *ctx); +typedef bool(*ZyDisBaseDataSource_IsEndOfInputCallback)(const ZyDisBaseDataSourceContext *ctx); +typedef uint64_t(*ZyDisBaseDataSource_GetPositionCallback)(const ZyDisBaseDataSourceContext *ctx); +typedef bool(*ZyDisBaseDataSource_SetPositionCallback)( + ZyDisBaseDataSourceContext *ctx, uint64_t position); /** * @brief Releases a data source. * @param ctx The context to release. * The context may no longer be used after it was released. */ -VX_EXPORT void VXBaseDataSource_Release( - VXBaseDataSourceContext *ctx); +ZYDIS_EXPORT void ZyDisBaseDataSource_Release( + ZyDisBaseDataSourceContext *ctx); /** * @brief Reads the next byte from the data source without altering the current input position @@ -72,9 +72,9 @@ VX_EXPORT void VXBaseDataSource_Release( * field of the @c info parameter for error flags. Possible error values are * @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ -VX_EXPORT uint8_t VXBaseDataSource_InputPeek( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); +ZYDIS_EXPORT uint8_t ZyDisBaseDataSource_InputPeek( + ZyDisBaseDataSourceContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Reads the next byte from the data source. @@ -87,30 +87,30 @@ VX_EXPORT uint8_t VXBaseDataSource_InputPeek( * parameter. This function also appends the new byte to to @c data field of the @c info * parameter. */ -VX_EXPORT uint8_t VXBaseDataSource_InputNext8( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); +ZYDIS_EXPORT uint8_t ZyDisBaseDataSource_InputNext8( + ZyDisBaseDataSourceContext *ctx, + ZyDisInstructionInfo *info); /** - * @copydoc VXBaseDataSource_InputNext8 + * @copydoc ZyDisBaseDataSource_InputNext8 */ -VX_EXPORT uint16_t VXBaseDataSource_InputNext16( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); +ZYDIS_EXPORT uint16_t ZyDisBaseDataSource_InputNext16( + ZyDisBaseDataSourceContext *ctx, + ZyDisInstructionInfo *info); /** - * @copydoc VXBaseDataSource_InputNext8 + * @copydoc ZyDisBaseDataSource_InputNext8 */ -VX_EXPORT uint32_t VXBaseDataSource_InputNext32( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); +ZYDIS_EXPORT uint32_t ZyDisBaseDataSource_InputNext32( + ZyDisBaseDataSourceContext *ctx, + ZyDisInstructionInfo *info); /** - * @copydoc VXBaseDataSource_InputNext8 + * @copydoc ZyDisBaseDataSource_InputNext8 */ -VX_EXPORT uint64_t VXBaseDataSource_InputNext64( - VXBaseDataSourceContext *ctx, - VXInstructionInfo *info); +ZYDIS_EXPORT uint64_t ZyDisBaseDataSource_InputNext64( + ZyDisBaseDataSourceContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Returns the current input byte. @@ -119,24 +119,24 @@ VX_EXPORT uint64_t VXBaseDataSource_InputNext64( * The current input byte is set everytime the @c inputPeek or @c inputNext method is called. */ // TODO: check long descr -VX_EXPORT uint8_t VXBaseDataSource_InputCurrent( - const VXBaseDataSourceContext *ctx); +ZYDIS_EXPORT uint8_t ZyDisBaseDataSource_InputCurrent( + const ZyDisBaseDataSourceContext *ctx); /** * @brief Queries if the end of the data source is reached. * @param ctx The data soruce context. * @return @c true if end of input, @c false if not. */ -VX_EXPORT bool VXBaseDataSource_IsEndOfInput( - const VXBaseDataSourceContext *ctx); +ZYDIS_EXPORT bool ZyDisBaseDataSource_IsEndOfInput( + const ZyDisBaseDataSourceContext *ctx); /** * @brief Returns the current input position. * @param ctx The data soruce context. * @return The current input position. */ -VX_EXPORT uint64_t VXBaseDataSource_GetPosition( - const VXBaseDataSourceContext *ctx); +ZYDIS_EXPORT uint64_t ZyDisBaseDataSource_GetPosition( + const ZyDisBaseDataSourceContext *ctx); /** * @brief Sets a new input position. @@ -144,24 +144,24 @@ VX_EXPORT uint64_t VXBaseDataSource_GetPosition( * @param position The new input position. * @return @c false if the new position exceeds the maximum input length. */ -VX_EXPORT bool VXBaseDataSource_SetPosition( - VXBaseDataSourceContext *ctx, +ZYDIS_EXPORT bool ZyDisBaseDataSource_SetPosition( + ZyDisBaseDataSourceContext *ctx, uint64_t position); -/* VXMemoryDataSource ========================================================================== */ +/* ZyDisMemoryDataSource ========================================================================== */ /** * @brief Creates a memory data source. * @param buffer The input buffer. * @param bufferLen THe length of the input buffer. * @return @c NULL if it fails, else a data source context. - * @see VXBaseDataSource_Release + * @see ZyDisBaseDataSource_Release */ -VX_EXPORT VXBaseDataSourceContext* VXMemoryDataSource_Create( +ZYDIS_EXPORT ZyDisBaseDataSourceContext* ZyDisMemoryDataSource_Create( const void* buffer, size_t bufferLen); -/* VXCustomDataSource ========================================================================== */ +/* ZyDisCustomDataSource ========================================================================== */ /** * @brief Creates a custom daat source. @@ -173,52 +173,52 @@ VX_EXPORT VXBaseDataSourceContext* VXMemoryDataSource_Create( * @param setPositionCb The callback setting the current input position. * @param destructionCb The destruction callback. May be @c NULL. * @return @c NULL if it fails, else a data source context. - * @see VXBaseDataSource_Release + * @see ZyDisBaseDataSource_Release */ -VX_EXPORT VXBaseDataSourceContext* VXCustomDataSource_Create( - VXBaseDataSource_InputCallback inputPeekCb, - VXBaseDataSource_InputCallback inputNextCb, - VXBaseDataSource_IsEndOfInputCallback isEndOfInputCb, - VXBaseDataSource_GetPositionCallback getPositionCb, - VXBaseDataSource_SetPositionCallback setPositionCb, - VXBaseDataSource_DestructionCallback destructionCb); +ZYDIS_EXPORT ZyDisBaseDataSourceContext* ZyDisCustomDataSource_Create( + ZyDisBaseDataSource_InputCallback inputPeekCb, + ZyDisBaseDataSource_InputCallback inputNextCb, + ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInputCb, + ZyDisBaseDataSource_GetPositionCallback getPositionCb, + ZyDisBaseDataSource_SetPositionCallback setPositionCb, + ZyDisBaseDataSource_DestructionCallback destructionCb); /* Enums ======================================================================================= */ /** * @brief Values that represent a disassembler mode. */ -typedef enum _VXDisassemblerMode /* : uint8_t */ +typedef enum _ZyDisDisassemblerMode /* : uint8_t */ { DM_M16BIT, DM_M32BIT, DM_M64BIT -} VXDisassemblerMode; +} ZyDisDisassemblerMode; /** * @brief Values that represent an instruction-set vendor. */ -typedef enum _VXInstructionSetVendor /* : uint8_t */ +typedef enum _ZyDisInstructionSetVendor /* : uint8_t */ { ISV_ANY, ISV_INTEL, ISV_AMD -} VXInstructionSetVendor; +} ZyDisInstructionSetVendor; -/* VXInstructionDecoder ======================================================================== */ +/* ZyDisInstructionDecoder ======================================================================== */ -typedef struct _VXInstructionDecoderContext +typedef struct _ZyDisInstructionDecoderContext { - VXContextDescriptor d; -} VXInstructionDecoderContext; + ZyDisContextDescriptor d; +} ZyDisInstructionDecoderContext; /** * @brief Creates an instruction decoder. * @return @c NULL if it fails, else an instruction decoder context. - * @see VXInstructionDecoder_Release + * @see ZyDisInstructionDecoder_Release */ // TODO: verify return value -VX_EXPORT VXInstructionDecoderContext* VXInstructionDecoder_Create(void); +ZYDIS_EXPORT ZyDisInstructionDecoderContext* ZyDisInstructionDecoder_Create(void); /** * @brief Creates an instruction decoder. @@ -227,100 +227,100 @@ VX_EXPORT VXInstructionDecoderContext* VXInstructionDecoder_Create(void); * @param preferredVendor The preferred instruction-set vendor. * @param instructionPointer The initial instruction pointer. * @return @c NULL if it fails, else an instruction decoder context. - * @see VXInstructionDecoder_Release + * @see ZyDisInstructionDecoder_Release */ -VX_EXPORT VXInstructionDecoderContext* VXInstructionDecoder_CreateEx( - VXBaseDataSourceContext *input, - VXDisassemblerMode disassemblerMode, - VXInstructionSetVendor preferredVendor, +ZYDIS_EXPORT ZyDisInstructionDecoderContext* ZyDisInstructionDecoder_CreateEx( + ZyDisBaseDataSourceContext *input, + ZyDisDisassemblerMode disassemblerMode, + ZyDisInstructionSetVendor preferredVendor, uint64_t instructionPointer); /** * @brief Releases an instruction decoder. * @param ctx The context of the instruction decoder to release. */ -VX_EXPORT void VXInstructionDecoder_Release( - VXInstructionDecoderContext *ctx); +ZYDIS_EXPORT void ZyDisInstructionDecoder_Release( + ZyDisInstructionDecoderContext *ctx); /** * @brief Decodes the next instruction from the input data source. * @param ctx The instruction decoder context. - * @param info The @c VXInstructionInfo struct that receives the information about the decoded + * @param info The @c ZyDisInstructionInfo struct that receives the information about the decoded * instruction. * @return This function returns @c false if the current position exceeds the maximum input * length. In all other cases (valid and invalid instructions) the return value is * @c true. */ -VX_EXPORT bool VXInstructionDecoder_DecodeInstruction( - VXInstructionDecoderContext *ctx, - VXInstructionInfo *info); +ZYDIS_EXPORT bool ZyDisInstructionDecoder_DecodeInstruction( + ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionInfo *info); /** * @brief Returns a pointer to the current data source. * @param ctx The instruction decoder context. * @return The context of the data source. */ -VX_EXPORT VXBaseDataSourceContext* VXInstructionDecoder_GetDataSource( - const VXInstructionDecoderContext *ctx); +ZYDIS_EXPORT ZyDisBaseDataSourceContext* ZyDisInstructionDecoder_GetDataSource( + const ZyDisInstructionDecoderContext *ctx); /** * @brief Sets a new data source. * @param ctx The instruction decoder context. * @param input The context of the new input data source. */ -VX_EXPORT void VXInstructionDecoder_SetDataSource( - VXInstructionDecoderContext *ctx, - VXBaseDataSourceContext *input); +ZYDIS_EXPORT void ZyDisInstructionDecoder_SetDataSource( + ZyDisInstructionDecoderContext *ctx, + ZyDisBaseDataSourceContext *input); /** * @brief Returns the current disassembler mode. * @param ctx The instruction decoder context. * @return The current disassembler mode. */ -VX_EXPORT VXDisassemblerMode VXInstructionDecoder_GetDisassemblerMode( - const VXInstructionDecoderContext *ctx); +ZYDIS_EXPORT ZyDisDisassemblerMode ZyDisInstructionDecoder_GetDisassemblerMode( + const ZyDisInstructionDecoderContext *ctx); /** * @brief Sets the current disassembler mode. * @param ctx The instruction decoder context. * @param disassemblerMode The new disassembler mode. */ -VX_EXPORT void VXInstructionDecoder_SetDisassemblerMode( - VXInstructionDecoderContext *ctx, - VXDisassemblerMode disassemblerMode); +ZYDIS_EXPORT void ZyDisInstructionDecoder_SetDisassemblerMode( + ZyDisInstructionDecoderContext *ctx, + ZyDisDisassemblerMode disassemblerMode); /** * @brief Returns the preferred instruction-set vendor. * @param ctx The instruction decoder context. * @return The preferred instruction-set vendor. */ -VX_EXPORT VXInstructionSetVendor VXInstructionDecoder_GetPreferredVendor( - const VXInstructionDecoderContext *ctx); +ZYDIS_EXPORT ZyDisInstructionSetVendor ZyDisInstructionDecoder_GetPreferredVendor( + const ZyDisInstructionDecoderContext *ctx); /** * @brief Sets the preferred instruction-set vendor. * @param ctx The instruction decoder context. * @param preferredVendor The new preferred instruction-set vendor. */ -VX_EXPORT void VXInstructionDecoder_SetPreferredVendor( - VXInstructionDecoderContext *ctx, - VXInstructionSetVendor preferredVendor); +ZYDIS_EXPORT void ZyDisInstructionDecoder_SetPreferredVendor( + ZyDisInstructionDecoderContext *ctx, + ZyDisInstructionSetVendor preferredVendor); /** * @brief Returns the current instruction pointer. * @param ctx The instruction decoder context. * @return The current instruction pointer. */ -VX_EXPORT uint64_t VXInstructionDecoder_GetInstructionPointer( - const VXInstructionDecoderContext *ctx); +ZYDIS_EXPORT uint64_t ZyDisInstructionDecoder_GetInstructionPointer( + const ZyDisInstructionDecoderContext *ctx); /** * @brief Sets a new instruction pointer. * @param ctx The instruction decoder context. * @param instructionPointer The new instruction pointer. */ -VX_EXPORT void VXInstructionDecoder_SetInstructionPointer( - VXInstructionDecoderContext *ctx, +ZYDIS_EXPORT void ZyDisInstructionDecoder_SetInstructionPointer( + ZyDisInstructionDecoderContext *ctx, uint64_t instructionPointer); /* ============================================================================================= */ @@ -329,4 +329,4 @@ VX_EXPORT void VXInstructionDecoder_SetInstructionPointer( } #endif -#endif /* _VDE_VXINSTRUCTIONDECODERC_H_ */ +#endif /* _VDE_ZyDisINSTRUCTIONDECODERC_H_ */ diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.c b/VerteronDisassemblerEngine/ZyDisInstructionFormatter.c similarity index 52% rename from VerteronDisassemblerEngine/VXInstructionFormatter.c rename to VerteronDisassemblerEngine/ZyDisInstructionFormatter.c index 13f7643..a95c2c7 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.c +++ b/VerteronDisassemblerEngine/ZyDisInstructionFormatter.c @@ -30,10 +30,10 @@ **************************************************************************************************/ -#include "VXInstructionFormatter.h" -#include "VXDisassemblerUtils.h" -#include "VXInternalHelpers.h" -#include "VXOpcodeTableInternal.h" +#include "ZyDisInstructionFormatter.h" +#include "ZyDisDisassemblerUtils.h" +#include "ZyDisInternalHelpers.h" +#include "ZyDisOpcodeTableInternal.h" #include #include @@ -43,66 +43,66 @@ /* Interface =================================================================================== */ -/* VXBaseSymbolResolver ------------------------------------------------------------------------ */ +/* ZyDisBaseSymbolResolver ------------------------------------------------------------------------ */ -typedef void (*VXBaseSymbolResolver_DestructionCallback)( - VXBaseSymbolResolverContext *ctx); -typedef const char* (*VXBaseSymbolResolver_ResolveSymbolCallback)( - VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, +typedef void (*ZyDisBaseSymbolResolver_DestructionCallback)( + ZyDisBaseSymbolResolverContext *ctx); +typedef const char* (*ZyDisBaseSymbolResolver_ResolveSymbolCallback)( + ZyDisBaseSymbolResolverContext *ctx, + const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset); -typedef struct _VXBaseSymbolResolver +typedef struct _ZyDisBaseSymbolResolver { - VXBaseSymbolResolver_DestructionCallback destruct; // may be NULL - VXBaseSymbolResolver_ResolveSymbolCallback resolveCallback; -} VXBaseSymbolResolver; + ZyDisBaseSymbolResolver_DestructionCallback destruct; // may be NULL + ZyDisBaseSymbolResolver_ResolveSymbolCallback resolveCallback; +} ZyDisBaseSymbolResolver; /** * @brief Constructor. * @param ctx The context. */ -static void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx); +static void ZyDisBaseSymbolResolver_Construct(ZyDisBaseSymbolResolverContext *ctx); /** * @brief Destructor. * @param ctx The context. */ -static void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); +static void ZyDisBaseSymbolResolver_Destruct(ZyDisBaseSymbolResolverContext *ctx); -/* VXBaseInstructionFormatter ------------------------------------------------------------------ */ +/* ZyDisBaseInstructionFormatter ------------------------------------------------------------------ */ -typedef void(*VXBaseInstructionFormatter_DestructionCallback)( - VXBaseInstructionFormatterContext *ctx); +typedef void(*ZyDisBaseInstructionFormatter_DestructionCallback)( + ZyDisBaseInstructionFormatterContext *ctx); -typedef struct _VXBaseInstructionFormatter +typedef struct _ZyDisBaseInstructionFormatter { - VXBaseInstructionFormatter_DestructionCallback destruct; // may be NULL - VXBaseInstructionFormatter_InternalFormatInstructionCallback internalFormat; - VXBaseSymbolResolverContext *symbolResolver; + ZyDisBaseInstructionFormatter_DestructionCallback destruct; // may be NULL + ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback internalFormat; + ZyDisBaseSymbolResolverContext *symbolResolver; char *outputBuffer; size_t outputBufferCapacity; size_t outputStringLen; bool outputUppercase; -} VXBaseInstructionFormatter; +} ZyDisBaseInstructionFormatter; /** * @brief Constructor. * @param ctx The context. * @param symbolResolver The symbol resolver to use when formatting addresses. */ -static void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, - VXBaseSymbolResolverContext *symbolResolver); +static void ZyDisBaseInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, + ZyDisBaseSymbolResolverContext *symbolResolver); /** * @brief Destructor. * @param ctx The context. */ -static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); +static void ZyDisBaseInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx); -/*static void VXBaseInstructionFormatter_OutputSetUppercase( - VXBaseInstructionFormatterContext *ctx, bool uppercase);*/ +/*static void ZyDisBaseInstructionFormatter_OutputSetUppercase( + ZyDisBaseInstructionFormatterContext *ctx, bool uppercase);*/ /** * @brief Returns the string representation of a given register. @@ -110,8 +110,8 @@ static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContex * @param reg The register. * @return The string representation of the given register. */ -static char const* VXBaseInstructionFormatter_RegisterToString( - const VXBaseInstructionFormatterContext *ctx, VXRegister reg); +static char const* ZyDisBaseInstructionFormatter_RegisterToString( + const ZyDisBaseInstructionFormatterContext *ctx, ZyDisRegister reg); /** * @brief Resolves a symbol. @@ -122,29 +122,29 @@ static char const* VXBaseInstructionFormatter_RegisterToString( * to the base address of the symbol. * @return The name of the symbol, if the symbol was found, @c NULL if not. */ -static char const* VXBaseInstructionFormatter_ResolveSymbol( - const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, +static char const* ZyDisBaseInstructionFormatter_ResolveSymbol( + const ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset); /** * @brief Clears the output string buffer. * @param ctx The context. */ -static void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx); +static void ZyDisBaseInstructionFormatter_OutputClear(ZyDisBaseInstructionFormatterContext *ctx); /** * @brief Returns the content of the output string buffer. * @param ctx The context. * @return Pointer to the content of the ouput string buffer. */ -static char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx); +static char const* ZyDisBaseInstructionFormatter_OutputString(ZyDisBaseInstructionFormatterContext *ctx); /** * @brief Appends text to the ouput string buffer. * @param ctx The context. * @param text The text. */ -static void VXBaseInstructionFormatter_OutputAppend(VXBaseInstructionFormatterContext *ctx, +static void ZyDisBaseInstructionFormatter_OutputAppend(ZyDisBaseInstructionFormatterContext *ctx, char const *text); /** @@ -152,8 +152,8 @@ static void VXBaseInstructionFormatter_OutputAppend(VXBaseInstructionFormatterCo * @param ctx The context. * @param format The format string. */ -static void VXBaseInstructionFormatter_OutputAppendFormatted( - VXBaseInstructionFormatterContext *ctx, char const *format, ...); +static void ZyDisBaseInstructionFormatter_OutputAppendFormatted( + ZyDisBaseInstructionFormatterContext *ctx, char const *format, ...); /** * @brief Appends a formatted address to the output string buffer. @@ -163,8 +163,8 @@ static void VXBaseInstructionFormatter_OutputAppendFormatted( * @param resolveSymbols If this parameter is true, the function will try to display a * smybol name instead of the numeric value. */ -static void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info, uint64_t address, bool resolveSymbols); +static void ZyDisBaseInstructionFormatter_OutputAppendAddress(ZyDisBaseInstructionFormatterContext *ctx, + const ZyDisInstructionInfo *info, uint64_t address, bool resolveSymbols); /** * @brief Appends a formatted immediate value to the output string buffer. @@ -174,26 +174,26 @@ static void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionForm * @param resolveSymbols If this parameter is true, the function will try to display a * smybol name instead of the numeric value. */ -static void VXBaseInstructionFormatter_OutputAppendImmediate( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, - const VXOperandInfo *operand, bool resolveSymbols); +static void ZyDisBaseInstructionFormatter_OutputAppendImmediate( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, + const ZyDisOperandInfo *operand, bool resolveSymbols); /** * @brief Appends a formatted memory displacement value to the output string buffer. * @param ctx The context. * @param operand The memory operand. */ -static void VXBaseInstructionFormatter_OutputAppendDisplacement( - VXBaseInstructionFormatterContext *ctx, const VXOperandInfo *operand); +static void ZyDisBaseInstructionFormatter_OutputAppendDisplacement( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisOperandInfo *operand); -/* VXCustomSymbolResolver ---------------------------------------------------------------------- */ +/* ZyDisCustomSymbolResolver ---------------------------------------------------------------------- */ -typedef struct _VXCustomSymbolResolver +typedef struct _ZyDisCustomSymbolResolver { - VXBaseSymbolResolver super; - VXCustomSymbolResolver_ResolveSymbolCallback resolve; + ZyDisBaseSymbolResolver super; + ZyDisCustomSymbolResolver_ResolveSymbolCallback resolve; void *userData; -} VXCustomSymbolResolver; +} ZyDisCustomSymbolResolver; /** * @brief Constructor. @@ -201,27 +201,27 @@ typedef struct _VXCustomSymbolResolver * @param resolverCb The resolver callback. * @param userData User defined data passed to the resolver callback. */ -static void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, - VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); +static void ZyDisCustomSymbolResolver_Construct(ZyDisBaseSymbolResolverContext *ctx, + ZyDisCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); /** * @brief Destructor. * @param ctx The context. */ -static void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx); +static void ZyDisCustomSymbolResolver_Destruct(ZyDisBaseSymbolResolverContext *ctx); /** - * @copydoc VXBaseSymbolResolver_Resolve + * @copydoc ZyDisBaseSymbolResolver_Resolve */ -static const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, uint64_t address, uint64_t *offset); +static const char* ZyDisCustomSymbolResolver_Resolve(ZyDisBaseSymbolResolverContext *ctx, + const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset); -/* VXIntelInstructionFormatter ----------------------------------------------------------------- */ +/* ZyDisIntelInstructionFormatter ----------------------------------------------------------------- */ -typedef struct _VXIntelInstructionFormatter +typedef struct _ZyDisIntelInstructionFormatter { - VXBaseInstructionFormatter super; -} VXIntelInstructionFormatter; + ZyDisBaseInstructionFormatter super; +} ZyDisIntelInstructionFormatter; /** * @brief Constructor. @@ -229,22 +229,22 @@ typedef struct _VXIntelInstructionFormatter * @param symbolResolver The symbol resolver used to resolve addresses. * @param userData User defined data passed to the resolver callback. */ -static void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, - VXBaseSymbolResolverContext *symbolResolver); +static void ZyDisIntelInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, + ZyDisBaseSymbolResolverContext *symbolResolver); /** * @brief Destructor. * @param ctx The context. */ -static void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); +static void ZyDisIntelInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx); /** * @brief Appends an operand cast to the output string buffer. * @param ctx The context. * @param operand The operand. */ -static void VXIntelInstructionFormatter_OutputAppendOperandCast( - VXBaseInstructionFormatterContext *ctx, const VXOperandInfo *operand); +static void ZyDisIntelInstructionFormatter_OutputAppendOperandCast( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisOperandInfo *operand); /** * @brief Formats the specified operand and appends it to the output buffer. @@ -252,53 +252,53 @@ static void VXIntelInstructionFormatter_OutputAppendOperandCast( * @param info The instruction info. * @param operand The operand. */ -static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info, const VXOperandInfo *operand); +static void ZyDisIntelInstructionFormatter_FormatOperand(ZyDisBaseInstructionFormatterContext *ctx, + const ZyDisInstructionInfo *info, const ZyDisOperandInfo *operand); /** - * @coypdoc VXBaseInstructionFormatter_InternalFormatInstruction + * @coypdoc ZyDisBaseInstructionFormatter_InternalFormatInstruction */ -static void VXIntelInstructionFormatter_InternalFormatInstruction( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); +static void ZyDisIntelInstructionFormatter_InternalFormatInstruction( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info); -/* VXCustomInstructionFormatter ---------------------------------------------------------------- */ +/* ZyDisCustomInstructionFormatter ---------------------------------------------------------------- */ -typedef struct _VXCustomInstructionFormatter +typedef struct _ZyDisCustomInstructionFormatter { - VXBaseInstructionFormatter super; -} VXCustomInstructionFormatter; + ZyDisBaseInstructionFormatter super; +} ZyDisCustomInstructionFormatter; /** * @brief Contructor. * @param ctx The context. * @param formatInsnCb The callback formatting the instruction. */ -static void VXCustomInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, - VXBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb); +static void ZyDisCustomInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, + ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb); /** * @brief Destructor. * @param ctx The context. */ -static void VXCustomInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx); +static void ZyDisCustomInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx); /* Implementation ============================================================================== */ -/* VXBaseSymbolResolver ------------------------------------------------------------------------ */ +/* ZyDisBaseSymbolResolver ------------------------------------------------------------------------ */ -void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx) +void ZyDisBaseSymbolResolver_Construct(ZyDisBaseSymbolResolverContext *ctx) { - memset(VXBaseSymbolResolver_thiz(ctx), 0, sizeof(VXBaseSymbolResolver)); + memset(ZyDisBaseSymbolResolver_thiz(ctx), 0, sizeof(ZyDisBaseSymbolResolver)); } -void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx) +void ZyDisBaseSymbolResolver_Destruct(ZyDisBaseSymbolResolverContext *ctx) { - VX_UNUSED(ctx); + ZYDIS_UNUSED(ctx); } -void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx) +void ZyDisBaseSymbolResolver_Release(ZyDisBaseSymbolResolverContext *ctx) { - VXBaseSymbolResolver *thiz = VXBaseSymbolResolver_thiz(ctx); + ZyDisBaseSymbolResolver *thiz = ZyDisBaseSymbolResolver_thiz(ctx); if (thiz->destruct) { @@ -309,38 +309,38 @@ void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx) free(ctx); } -const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, uint64_t address, uint64_t *offset) +const char* ZyDisBaseSymbolResolver_ResolveSymbol(ZyDisBaseSymbolResolverContext *ctx, + const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset) { - assert(VXBaseSymbolResolver_thiz(ctx)->resolveCallback); - return VXBaseSymbolResolver_thiz(ctx)->resolveCallback(ctx, info, address, offset); + assert(ZyDisBaseSymbolResolver_thiz(ctx)->resolveCallback); + return ZyDisBaseSymbolResolver_thiz(ctx)->resolveCallback(ctx, info, address, offset); } -/* VXCustomSymbolResolver ---------------------------------------------------------------------- */ +/* ZyDisCustomSymbolResolver ---------------------------------------------------------------------- */ -static void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, - VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData) +static void ZyDisCustomSymbolResolver_Construct(ZyDisBaseSymbolResolverContext *ctx, + ZyDisCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData) { - VXBaseSymbolResolver_Construct(ctx); - VXCustomSymbolResolver *thiz = VXCustomSymbolResolver_thiz(ctx); + ZyDisBaseSymbolResolver_Construct(ctx); + ZyDisCustomSymbolResolver *thiz = ZyDisCustomSymbolResolver_thiz(ctx); - thiz->super.destruct = &VXCustomSymbolResolver_Destruct; - thiz->super.resolveCallback = &VXCustomSymbolResolver_Resolve; + thiz->super.destruct = &ZyDisCustomSymbolResolver_Destruct; + thiz->super.resolveCallback = &ZyDisCustomSymbolResolver_Resolve; thiz->resolve = resolverCb; thiz->userData = userData; } -static void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx) +static void ZyDisCustomSymbolResolver_Destruct(ZyDisBaseSymbolResolverContext *ctx) { - VXBaseSymbolResolver_Destruct(ctx); + ZyDisBaseSymbolResolver_Destruct(ctx); } -VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( - VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData) +ZyDisBaseSymbolResolverContext* ZyDisCustomSymbolResolver_Create( + ZyDisCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData) { - VXCustomSymbolResolver *thiz = malloc(sizeof(VXCustomSymbolResolver)); - VXBaseSymbolResolverContext *ctx = malloc(sizeof(VXBaseSymbolResolverContext)); + ZyDisCustomSymbolResolver *thiz = malloc(sizeof(ZyDisCustomSymbolResolver)); + ZyDisBaseSymbolResolverContext *ctx = malloc(sizeof(ZyDisBaseSymbolResolverContext)); if (!thiz || !ctx) { @@ -359,21 +359,21 @@ VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( ctx->d.type = TYPE_CUSTOMSYMBOLRESOLVER; ctx->d.ptr = thiz; - VXCustomSymbolResolver_Construct(ctx, resolverCb, userData); + ZyDisCustomSymbolResolver_Construct(ctx, resolverCb, userData); return ctx; } -static const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, uint64_t address, uint64_t *offset) +static const char* ZyDisCustomSymbolResolver_Resolve(ZyDisBaseSymbolResolverContext *ctx, + const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset) { - VXCustomSymbolResolver *thiz = VXCustomSymbolResolver_thiz(ctx); + ZyDisCustomSymbolResolver *thiz = ZyDisCustomSymbolResolver_thiz(ctx); return thiz->resolve(info, address, offset, thiz->userData); } -/* VXBaseInstructionFormatter ------------------------------------------------------------------ */ +/* ZyDisBaseInstructionFormatter ------------------------------------------------------------------ */ -static const char* VXBaseInstructionFormatter_registerStrings[] = +static const char* ZyDisBaseInstructionFormatter_registerStrings[] = { /* 8 bit general purpose registers */ "al", "cl", "dl", "bl", @@ -429,12 +429,12 @@ static const char* VXBaseInstructionFormatter_registerStrings[] = "rip" }; -static void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, - VXBaseSymbolResolverContext *symbolResolver) +static void ZyDisBaseInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, + ZyDisBaseSymbolResolverContext *symbolResolver) { - VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); - thiz->destruct = &VXBaseInstructionFormatter_Destruct; + thiz->destruct = &ZyDisBaseInstructionFormatter_Destruct; thiz->internalFormat = NULL; thiz->symbolResolver = symbolResolver; thiz->outputStringLen = 0; @@ -443,9 +443,9 @@ static void VXBaseInstructionFormatter_Construct(VXBaseInstructionFormatterConte thiz->outputBuffer = malloc(thiz->outputBufferCapacity); } -static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) +static void ZyDisBaseInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx) { - VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); if (thiz->outputBuffer) { @@ -454,9 +454,9 @@ static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContex } } -void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx) +void ZyDisBaseInstructionFormatter_Release(ZyDisBaseInstructionFormatterContext *ctx) { - VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); if (thiz->destruct) { @@ -468,59 +468,59 @@ void VXBaseInstructionFormatter_Release(VXBaseInstructionFormatterContext *ctx) } /* -static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx, +static void ZyDisBaseInstructionFormatter_OutputSetUppercase(ZyDisBaseInstructionFormatterContext *ctx, bool uppercase) { - VXBaseInstructionFormatter_thiz(ctx)->outputUppercase = uppercase; + ZyDisBaseInstructionFormatter_thiz(ctx)->outputUppercase = uppercase; } */ -static char const* VXBaseInstructionFormatter_RegisterToString( - const VXBaseInstructionFormatterContext *ctx, VXRegister reg) +static char const* ZyDisBaseInstructionFormatter_RegisterToString( + const ZyDisBaseInstructionFormatterContext *ctx, ZyDisRegister reg) { - VX_UNUSED(ctx); + ZYDIS_UNUSED(ctx); if (reg == REG_NONE) { return "error"; } - return VXBaseInstructionFormatter_registerStrings[reg - 1]; + return ZyDisBaseInstructionFormatter_registerStrings[reg - 1]; } -static char const* VXBaseInstructionFormatter_ResolveSymbol( - const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, +static char const* ZyDisBaseInstructionFormatter_ResolveSymbol( + const ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset) { - const VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_cthiz(ctx); + const ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_cthiz(ctx); if (thiz->symbolResolver) { - return VXBaseSymbolResolver_ResolveSymbol( + return ZyDisBaseSymbolResolver_ResolveSymbol( thiz->symbolResolver, info, address, offset); } return NULL; } -VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( - const VXBaseInstructionFormatterContext *ctx) +ZyDisBaseSymbolResolverContext* ZyDisBaseInstructionFormatter_GetSymbolResolver( + const ZyDisBaseInstructionFormatterContext *ctx) { - return VXBaseInstructionFormatter_cthiz(ctx)->symbolResolver; + return ZyDisBaseInstructionFormatter_cthiz(ctx)->symbolResolver; } -void VXBaseInstructionFormatter_SetSymbolResolver( - VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver) +void ZyDisBaseInstructionFormatter_SetSymbolResolver( + ZyDisBaseInstructionFormatterContext *ctx, ZyDisBaseSymbolResolverContext *symbolResolver) { - VXBaseInstructionFormatter_thiz(ctx)->symbolResolver = symbolResolver; + ZyDisBaseInstructionFormatter_thiz(ctx)->symbolResolver = symbolResolver; } -const char* VXBaseInstructionFormatter_FormatInstruction( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info) +const char* ZyDisBaseInstructionFormatter_FormatInstruction( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info) { - VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); // Clears the internal string buffer - VXBaseInstructionFormatter_OutputClear(ctx); + ZyDisBaseInstructionFormatter_OutputClear(ctx); // Calls the virtual format method that actually formats the instruction thiz->internalFormat(ctx, info); @@ -528,27 +528,27 @@ const char* VXBaseInstructionFormatter_FormatInstruction( if (thiz->outputBufferCapacity == 0) { // The basic instruction formatter only returns the instruction menmonic. - return VXGetInstructionMnemonicString(info->mnemonic); + return ZyDisGetInstructionMnemonicString(info->mnemonic); } // Return the formatted instruction string - return VXBaseInstructionFormatter_OutputString(ctx); + return ZyDisBaseInstructionFormatter_OutputString(ctx); } -static void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx) +static void ZyDisBaseInstructionFormatter_OutputClear(ZyDisBaseInstructionFormatterContext *ctx) { - VXBaseInstructionFormatter_thiz(ctx)->outputStringLen = 0; + ZyDisBaseInstructionFormatter_thiz(ctx)->outputStringLen = 0; } -static char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx) +static char const* ZyDisBaseInstructionFormatter_OutputString(ZyDisBaseInstructionFormatterContext *ctx) { - return &VXBaseInstructionFormatter_thiz(ctx)->outputBuffer[0]; + return &ZyDisBaseInstructionFormatter_thiz(ctx)->outputBuffer[0]; } -static void VXBaseInstructionFormatter_OutputAppend( - VXBaseInstructionFormatterContext *ctx, char const *text) +static void ZyDisBaseInstructionFormatter_OutputAppend( + ZyDisBaseInstructionFormatterContext *ctx, char const *text) { - VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); // Get the string length including the null-terminator char size_t strLen = strlen(text) + 1; @@ -584,10 +584,10 @@ static void VXBaseInstructionFormatter_OutputAppend( } } -static void VXBaseInstructionFormatter_OutputAppendFormatted( - VXBaseInstructionFormatterContext *ctx, char const *format, ...) +static void ZyDisBaseInstructionFormatter_OutputAppendFormatted( + ZyDisBaseInstructionFormatterContext *ctx, char const *format, ...) { - VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx); + ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); va_list arguments; va_start(arguments, format); @@ -615,7 +615,7 @@ static void VXBaseInstructionFormatter_OutputAppendFormatted( { thiz->outputBufferCapacity = bufLen + 512; thiz->outputBuffer = realloc(thiz->outputBuffer, thiz->outputBufferCapacity); - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, format, arguments); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, format, arguments); return; } // Write the formatted text to the output buffer @@ -638,8 +638,8 @@ static void VXBaseInstructionFormatter_OutputAppendFormatted( va_end(arguments); } -static void VXBaseInstructionFormatter_OutputAppendAddress( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, uint64_t address, +static void ZyDisBaseInstructionFormatter_OutputAppendAddress( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, uint64_t address, bool resolveSymbols) { uint64_t offset = 0; @@ -647,33 +647,33 @@ static void VXBaseInstructionFormatter_OutputAppendAddress( if (resolveSymbols) { - name = VXBaseInstructionFormatter_ResolveSymbol(ctx, info, address, &offset); + name = ZyDisBaseInstructionFormatter_ResolveSymbol(ctx, info, address, &offset); } if (name) { if (offset) { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s+%.2llX", name, offset); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s+%.2llX", name, offset); } else { - VXBaseInstructionFormatter_OutputAppend(ctx, name); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, name); } } else { if (info->flags & IF_DISASSEMBLER_MODE_16) { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.4X", address); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.4X", address); } else if (info->flags & IF_DISASSEMBLER_MODE_32) { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.8lX", address); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.8lX", address); } else if (info->flags & IF_DISASSEMBLER_MODE_64) { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.16llX", address); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.16llX", address); } else { @@ -682,9 +682,9 @@ static void VXBaseInstructionFormatter_OutputAppendAddress( } } -static void VXBaseInstructionFormatter_OutputAppendImmediate( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, - const VXOperandInfo *operand, bool resolveSymbols) +static void ZyDisBaseInstructionFormatter_OutputAppendImmediate( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, + const ZyDisOperandInfo *operand, bool resolveSymbols) { assert(operand->type == OPTYPE_IMMEDIATE); uint64_t value = 0; @@ -730,28 +730,28 @@ static void VXBaseInstructionFormatter_OutputAppendImmediate( const char* name = NULL; if (resolveSymbols) { - name = VXBaseInstructionFormatter_ResolveSymbol(ctx, info, value, &offset); + name = ZyDisBaseInstructionFormatter_ResolveSymbol(ctx, info, value, &offset); } if (name) { if (offset) { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s+%.2llX", name, offset); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s+%.2llX", name, offset); } else { - VXBaseInstructionFormatter_OutputAppend(ctx, name); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, name); } } else { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value); } } -static void VXBaseInstructionFormatter_OutputAppendDisplacement( - VXBaseInstructionFormatterContext *ctx, const VXOperandInfo *operand) +static void ZyDisBaseInstructionFormatter_OutputAppendDisplacement( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisOperandInfo *operand) { assert(operand->offset > 0); if ((operand->base == REG_NONE) && (operand->index == REG_NONE)) @@ -774,7 +774,7 @@ static void VXBaseInstructionFormatter_OutputAppendDisplacement( default: assert(0); } - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value); } else { @@ -797,42 +797,42 @@ static void VXBaseInstructionFormatter_OutputAppendDisplacement( } if (value < 0) { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "-%.2lX", -value); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "-%.2lX", -value); } else { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s%.2lX", + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s%.2lX", (operand->base != REG_NONE || operand->index != REG_NONE) ? "+" : "", value); } } } -/* VXIntelInstructionFormatter ----------------------------------------------------------------- */ +/* ZyDisIntelInstructionFormatter ----------------------------------------------------------------- */ -static void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, - VXBaseSymbolResolverContext* symbolResolver) +static void ZyDisIntelInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, + ZyDisBaseSymbolResolverContext* symbolResolver) { - VXBaseInstructionFormatter_Construct(ctx, symbolResolver); - VXIntelInstructionFormatter *thiz = VXIntelInstructionFormatter_thiz(ctx); + ZyDisBaseInstructionFormatter_Construct(ctx, symbolResolver); + ZyDisIntelInstructionFormatter *thiz = ZyDisIntelInstructionFormatter_thiz(ctx); - thiz->super.destruct = &VXIntelInstructionFormatter_Destruct; - thiz->super.internalFormat = &VXIntelInstructionFormatter_InternalFormatInstruction; + thiz->super.destruct = &ZyDisIntelInstructionFormatter_Destruct; + thiz->super.internalFormat = &ZyDisIntelInstructionFormatter_InternalFormatInstruction; } -static void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) +static void ZyDisIntelInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx) { - VXBaseInstructionFormatter_Destruct(ctx); + ZyDisBaseInstructionFormatter_Destruct(ctx); } -VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void) +ZyDisBaseInstructionFormatterContext* ZyDisIntelInstructionFormatter_Create(void) { - return VXIntelInstructionFormatter_CreateEx(NULL); + return ZyDisIntelInstructionFormatter_CreateEx(NULL); } -VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( - VXBaseSymbolResolverContext *resolver) +ZyDisBaseInstructionFormatterContext* ZyDisIntelInstructionFormatter_CreateEx( + ZyDisBaseSymbolResolverContext *resolver) { - VXIntelInstructionFormatter *thiz = malloc(sizeof(VXIntelInstructionFormatter)); - VXBaseInstructionFormatterContext *ctx = malloc(sizeof(VXBaseInstructionFormatterContext)); + ZyDisIntelInstructionFormatter *thiz = malloc(sizeof(ZyDisIntelInstructionFormatter)); + ZyDisBaseInstructionFormatterContext *ctx = malloc(sizeof(ZyDisBaseInstructionFormatterContext)); if (!thiz || !ctx) { @@ -851,100 +851,100 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( ctx->d.type = TYPE_INTELINSTRUCTIONFORMATTER; ctx->d.ptr = thiz; - VXIntelInstructionFormatter_Construct(ctx, resolver); + ZyDisIntelInstructionFormatter_Construct(ctx, resolver); return ctx; } -static void VXIntelInstructionFormatter_OutputAppendOperandCast( - VXBaseInstructionFormatterContext *ctx, const VXOperandInfo *operand) +static void ZyDisIntelInstructionFormatter_OutputAppendOperandCast( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisOperandInfo *operand) { switch(operand->size) { case 8: - VXBaseInstructionFormatter_OutputAppend(ctx, "byte ptr " ); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "byte ptr " ); break; case 16: - VXBaseInstructionFormatter_OutputAppend(ctx, "word ptr " ); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "word ptr " ); break; case 32: - VXBaseInstructionFormatter_OutputAppend(ctx, "dword ptr "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "dword ptr "); break; case 64: - VXBaseInstructionFormatter_OutputAppend(ctx, "qword ptr "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "qword ptr "); break; case 80: - VXBaseInstructionFormatter_OutputAppend(ctx, "tword ptr "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "tword ptr "); break; case 128: - VXBaseInstructionFormatter_OutputAppend(ctx, "oword ptr "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "oword ptr "); break; case 256: - VXBaseInstructionFormatter_OutputAppend(ctx, "yword ptr "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "yword ptr "); break; default: break; } } -static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info, const VXOperandInfo *operand) +static void ZyDisIntelInstructionFormatter_FormatOperand(ZyDisBaseInstructionFormatterContext *ctx, + const ZyDisInstructionInfo *info, const ZyDisOperandInfo *operand) { switch (operand->type) { case OPTYPE_REGISTER: - VXBaseInstructionFormatter_OutputAppend(ctx, - VXBaseInstructionFormatter_RegisterToString(ctx, operand->base)); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, + ZyDisBaseInstructionFormatter_RegisterToString(ctx, operand->base)); break; case OPTYPE_MEMORY: if (info->flags & IF_PREFIX_SEGMENT) { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, - "%s:", VXBaseInstructionFormatter_RegisterToString(ctx, info->segment)); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, + "%s:", ZyDisBaseInstructionFormatter_RegisterToString(ctx, info->segment)); } - VXBaseInstructionFormatter_OutputAppend(ctx, "["); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "["); if (operand->base == REG_RIP) { // TODO: Add option - VXBaseInstructionFormatter_OutputAppendAddress( - ctx, info, VXCalcAbsoluteTarget(info, operand), true); + ZyDisBaseInstructionFormatter_OutputAppendAddress( + ctx, info, ZyDisCalcAbsoluteTarget(info, operand), true); } else { if (operand->base != REG_NONE) { - VXBaseInstructionFormatter_OutputAppend(ctx, - VXBaseInstructionFormatter_RegisterToString(ctx, operand->base)); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, + ZyDisBaseInstructionFormatter_RegisterToString(ctx, operand->base)); } if (operand->index != REG_NONE) { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s%s", + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s%s", operand->base != REG_NONE ? "+" : "", - VXBaseInstructionFormatter_RegisterToString(ctx, operand->index)); + ZyDisBaseInstructionFormatter_RegisterToString(ctx, operand->index)); if (operand->scale) { - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "*%d", operand->scale); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "*%d", operand->scale); } } if (operand->offset) { - VXBaseInstructionFormatter_OutputAppendDisplacement(ctx, operand); + ZyDisBaseInstructionFormatter_OutputAppendDisplacement(ctx, operand); } } - VXBaseInstructionFormatter_OutputAppend(ctx, "]"); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "]"); break; case OPTYPE_POINTER: // TODO: resolve symbols switch (operand->size) { case 32: - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "word %.4X:%.4X", + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "word %.4X:%.4X", operand->lval.ptr.seg, operand->lval.ptr.off & 0xFFFF); break; case 48: - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "dword %.4X:%.8lX", + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "dword %.4X:%.8lX", operand->lval.ptr.seg, operand->lval.ptr.off); break; default: @@ -953,21 +953,21 @@ static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatter break; case OPTYPE_IMMEDIATE: { - VXBaseInstructionFormatter_OutputAppendImmediate(ctx, info, operand, true); + ZyDisBaseInstructionFormatter_OutputAppendImmediate(ctx, info, operand, true); } break; case OPTYPE_REL_IMMEDIATE: { if (operand->size == 8) { - VXBaseInstructionFormatter_OutputAppend(ctx, "short "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "short "); } - VXBaseInstructionFormatter_OutputAppendAddress(ctx, info, - VXCalcAbsoluteTarget(info, operand), true); + ZyDisBaseInstructionFormatter_OutputAppendAddress(ctx, info, + ZyDisCalcAbsoluteTarget(info, operand), true); } break; case OPTYPE_CONSTANT: - VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2X", operand->lval.udword); + ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2X", operand->lval.udword); break; default: assert(0); @@ -975,31 +975,31 @@ static void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatter } } -static void VXIntelInstructionFormatter_InternalFormatInstruction( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info) +static void ZyDisIntelInstructionFormatter_InternalFormatInstruction( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info) { // Append string prefixes if (info->flags & IF_PREFIX_LOCK) { - VXBaseInstructionFormatter_OutputAppend(ctx, "lock "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "lock "); } if (info->flags & IF_PREFIX_REP) { - VXBaseInstructionFormatter_OutputAppend(ctx, "rep "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "rep "); } else if (info->flags & IF_PREFIX_REPNE) { - VXBaseInstructionFormatter_OutputAppend(ctx, "repne "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, "repne "); } // Append the instruction mnemonic - VXBaseInstructionFormatter_OutputAppend(ctx, VXGetInstructionMnemonicString(info->mnemonic)); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, ZyDisGetInstructionMnemonicString(info->mnemonic)); // Append the first operand if (info->operand[0].type != OPTYPE_NONE) { - VXBaseInstructionFormatter_OutputAppend(ctx, " "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, " "); bool cast = false; if (info->operand[0].type == OPTYPE_MEMORY) { @@ -1031,15 +1031,15 @@ static void VXIntelInstructionFormatter_InternalFormatInstruction( if (cast) { - VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[0]); + ZyDisIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[0]); } - VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[0]); + ZyDisIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[0]); } // Append the second operand if (info->operand[1].type != OPTYPE_NONE) { - VXBaseInstructionFormatter_OutputAppend(ctx, ", "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, ", "); bool cast = false; if (info->operand[1].type == OPTYPE_MEMORY && info->operand[0].size != info->operand[1].size && @@ -1056,15 +1056,15 @@ static void VXIntelInstructionFormatter_InternalFormatInstruction( if (cast) { - VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[1]); + ZyDisIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[1]); } - VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[1]); + ZyDisIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[1]); } // Append the third operand if (info->operand[2].type != OPTYPE_NONE) { - VXBaseInstructionFormatter_OutputAppend(ctx, ", "); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, ", "); bool cast = false; if (info->operand[2].type == OPTYPE_MEMORY && (info->operand[2].size != info->operand[1].size)) @@ -1074,41 +1074,41 @@ static void VXIntelInstructionFormatter_InternalFormatInstruction( if (cast) { - VXIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[2]); + ZyDisIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[2]); } - VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[2]); + ZyDisIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[2]); } // Append the fourth operand if (info->operand[3].type != OPTYPE_NONE) { - VXBaseInstructionFormatter_OutputAppend(ctx, ", "); - VXIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[3]); + ZyDisBaseInstructionFormatter_OutputAppend(ctx, ", "); + ZyDisIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[3]); } } -/* VXCustomInstructionFormatter ---------------------------------------------------------------- */ +/* ZyDisCustomInstructionFormatter ---------------------------------------------------------------- */ -static void VXCustomInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx, - VXBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb) +static void ZyDisCustomInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, + ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb) { - VXBaseInstructionFormatter_Construct(ctx, NULL); + ZyDisBaseInstructionFormatter_Construct(ctx, NULL); - VXCustomInstructionFormatter *thiz = VXCustomInstructionFormatter_thiz(ctx); + ZyDisCustomInstructionFormatter *thiz = ZyDisCustomInstructionFormatter_thiz(ctx); thiz->super.internalFormat = formatInsnCb; } -static void VXCustomInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx) +static void ZyDisCustomInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx) { - VXBaseInstructionFormatter_Destruct(ctx); + ZyDisBaseInstructionFormatter_Destruct(ctx); } -VX_EXPORT VXBaseInstructionFormatterContext* VXCustomInstructionFormatter_Create( - VXBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb) +ZYDIS_EXPORT ZyDisBaseInstructionFormatterContext* ZyDisCustomInstructionFormatter_Create( + ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb) { - VXCustomInstructionFormatter *thiz = malloc(sizeof(VXCustomInstructionFormatter)); - VXBaseInstructionFormatterContext *ctx = malloc(sizeof(VXBaseInstructionFormatterContext)); + ZyDisCustomInstructionFormatter *thiz = malloc(sizeof(ZyDisCustomInstructionFormatter)); + ZyDisBaseInstructionFormatterContext *ctx = malloc(sizeof(ZyDisBaseInstructionFormatterContext)); if (!thiz || !ctx) { @@ -1127,7 +1127,7 @@ VX_EXPORT VXBaseInstructionFormatterContext* VXCustomInstructionFormatter_Create ctx->d.type = TYPE_CUSTOMINSTRUCTIONFORMATTER; ctx->d.ptr = thiz; - VXCustomInstructionFormatter_Construct(ctx, formatInsnCb); + ZyDisCustomInstructionFormatter_Construct(ctx, formatInsnCb); return ctx; } diff --git a/VerteronDisassemblerEngine/VXInstructionFormatter.h b/VerteronDisassemblerEngine/ZyDisInstructionFormatter.h similarity index 61% rename from VerteronDisassemblerEngine/VXInstructionFormatter.h rename to VerteronDisassemblerEngine/ZyDisInstructionFormatter.h index 42b2c03..5d70cae 100644 --- a/VerteronDisassemblerEngine/VXInstructionFormatter.h +++ b/VerteronDisassemblerEngine/ZyDisInstructionFormatter.h @@ -30,31 +30,31 @@ **************************************************************************************************/ -#ifndef _VDE_VXINSTRUCTIONFORMATTERC_H_ -#define _VDE_VXINSTRUCTIONFORMATTERC_H_ +#ifndef _VDE_ZyDisINSTRUCTIONFORMATTERC_H_ +#define _VDE_ZyDisINSTRUCTIONFORMATTERC_H_ -#include "VXDisassemblerTypes.h" -#include "VXDisassemblerUtils.h" +#include "ZyDisDisassemblerTypes.h" +#include "ZyDisDisassemblerUtils.h" #ifdef __cplusplus extern "C" { #endif -/* VXBaseSymbolResolver ======================================================================== */ +/* ZyDisBaseSymbolResolver ======================================================================== */ -typedef struct _VXBaseSymbolResolverContext +typedef struct _ZyDisBaseSymbolResolverContext { - VXContextDescriptor d; -} VXBaseSymbolResolverContext; + ZyDisContextDescriptor d; +} ZyDisBaseSymbolResolverContext; /** * @brief Releases a symbol resolver. * @param ctx The context of the symbol resolver to free. * The context may no longer used after it was released. */ -VX_EXPORT void VXBaseSymbolResolver_Release( - VXBaseSymbolResolverContext *ctx); +ZYDIS_EXPORT void ZyDisBaseSymbolResolver_Release( + ZyDisBaseSymbolResolverContext *ctx); /** * @brief Resolves a symbol. @@ -65,16 +65,16 @@ VX_EXPORT void VXBaseSymbolResolver_Release( * the base address of the symbol. * @return The name of the symbol if the symbol was found, else @c NULL. */ -VX_EXPORT const char* VXBaseSymbolResolver_ResolveSymbol( - VXBaseSymbolResolverContext *ctx, - const VXInstructionInfo *info, +ZYDIS_EXPORT const char* ZyDisBaseSymbolResolver_ResolveSymbol( + ZyDisBaseSymbolResolverContext *ctx, + const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset); -/* VXCustomSymbolResolver ====================================================================== */ +/* ZyDisCustomSymbolResolver ====================================================================== */ -typedef const char* (*VXCustomSymbolResolver_ResolveSymbolCallback)( - const VXInstructionInfo *info, +typedef const char* (*ZyDisCustomSymbolResolver_ResolveSymbolCallback)( + const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset, void *userData); @@ -86,19 +86,19 @@ typedef const char* (*VXCustomSymbolResolver_ResolveSymbolCallback)( * May also be @c NULL. * @return @c NULL if it fails, else a symbol resolver context. */ -VX_EXPORT VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create( - VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, +ZYDIS_EXPORT ZyDisBaseSymbolResolverContext* ZyDisCustomSymbolResolver_Create( + ZyDisCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); -/* VXBaseInstructionFormatter ================================================================== */ +/* ZyDisBaseInstructionFormatter ================================================================== */ -typedef struct _VXBaseInstructionFormatterContext +typedef struct _ZyDisBaseInstructionFormatterContext { - VXContextDescriptor d; -} VXBaseInstructionFormatterContext; + ZyDisContextDescriptor d; +} ZyDisBaseInstructionFormatterContext; -typedef void(*VXBaseInstructionFormatter_InternalFormatInstructionCallback)( - VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info); +typedef void(*ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback)( + ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info); /** * @brief Formats a decoded instruction. @@ -107,17 +107,17 @@ typedef void(*VXBaseInstructionFormatter_InternalFormatInstructionCallback)( * @return Pointer to the formatted instruction string. This pointer remains valid until * this function is called again or the context is released. */ -VX_EXPORT const char* VXBaseInstructionFormatter_FormatInstruction( - VXBaseInstructionFormatterContext *ctx, - const VXInstructionInfo *info); +ZYDIS_EXPORT const char* ZyDisBaseInstructionFormatter_FormatInstruction( + ZyDisBaseInstructionFormatterContext *ctx, + const ZyDisInstructionInfo *info); /** * @brief Returns a pointer to the current symbol resolver. * @param ctx The instruction formatter context. * @return Pointer to the current symbol resolver or @c NULL if no symbol resolver is used. */ -VX_EXPORT VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResolver( - const VXBaseInstructionFormatterContext *ctx); +ZYDIS_EXPORT ZyDisBaseSymbolResolverContext* ZyDisBaseInstructionFormatter_GetSymbolResolver( + const ZyDisBaseInstructionFormatterContext *ctx); /** * @brief Sets a new symbol resolver. @@ -125,45 +125,45 @@ VX_EXPORT VXBaseSymbolResolverContext* VXBaseInstructionFormatter_GetSymbolResol * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol * resolver should be used. */ -VX_EXPORT void VXBaseInstructionFormatter_SetSymbolResolver( - VXBaseInstructionFormatterContext *ctx, - VXBaseSymbolResolverContext *resolver); +ZYDIS_EXPORT void ZyDisBaseInstructionFormatter_SetSymbolResolver( + ZyDisBaseInstructionFormatterContext *ctx, + ZyDisBaseSymbolResolverContext *resolver); /** * @brief Releases an instruction formatter. * @param ctx The context of the instruction formatter to release. * The context may no longer used after it has been released. */ -VX_EXPORT void VXBaseInstructionFormatter_Release( - VXBaseInstructionFormatterContext *ctx); +ZYDIS_EXPORT void ZyDisBaseInstructionFormatter_Release( + ZyDisBaseInstructionFormatterContext *ctx); -/* VXIntelInstructionFormatter ================================================================= */ +/* ZyDisIntelInstructionFormatter ================================================================= */ /** * @brief Creates an Intel-syntax instruction formatter. * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see VXBaseInstructionFormatter_Release + * @see ZyDisBaseInstructionFormatter_Release */ -VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_Create(void); +ZYDIS_EXPORT ZyDisBaseInstructionFormatterContext* ZyDisIntelInstructionFormatter_Create(void); /** * @brief Creates an Intel-syntax instruction formatter. * @param resolver The symbol resolver consulted to resolve symbols on formatting. * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see VXBaseInstructionFormatter_Release + * @see ZyDisBaseInstructionFormatter_Release */ -VX_EXPORT VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx( - VXBaseSymbolResolverContext *resolver); +ZYDIS_EXPORT ZyDisBaseInstructionFormatterContext* ZyDisIntelInstructionFormatter_CreateEx( + ZyDisBaseSymbolResolverContext *resolver); -/* VXCustomInstructionFormatter ================================================================ */ +/* ZyDisCustomInstructionFormatter ================================================================ */ /** * @brief Creats a custom instruction formatter. * @param formatInsnCb The callback formatting the instruction. * @return @c NULL if it fails, else a custom instruction formatter context. */ -VX_EXPORT VXBaseInstructionFormatterContext* VXCustomInstructionFormatter_Create( - VXBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb); +ZYDIS_EXPORT ZyDisBaseInstructionFormatterContext* ZyDisCustomInstructionFormatter_Create( + ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb); /* ============================================================================================= */ @@ -171,4 +171,4 @@ VX_EXPORT VXBaseInstructionFormatterContext* VXCustomInstructionFormatter_Create } #endif -#endif /* _VDE_VXINSTRUCTIONFORMATTERC_H_ */ \ No newline at end of file +#endif /* _VDE_ZyDisINSTRUCTIONFORMATTERC_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXInternalConfig.h b/VerteronDisassemblerEngine/ZyDisInternalConfig.h similarity index 86% rename from VerteronDisassemblerEngine/VXInternalConfig.h rename to VerteronDisassemblerEngine/ZyDisInternalConfig.h index 2e88351..f44a19f 100644 --- a/VerteronDisassemblerEngine/VXInternalConfig.h +++ b/VerteronDisassemblerEngine/ZyDisInternalConfig.h @@ -34,17 +34,17 @@ * Include CMake generated header defining macros im-/exporting functions statically or * dynamically depending what the user requested from CMake. */ -#include "VXExportConfig.h" +#include "ZyDisExportConfig.h" -#ifndef _VDE_VXINTERNALCONFIG_H_ -#define _VDE_VXINTERNALCONFIG_H_ +#ifndef _VDE_ZyDisINTERNALCONFIG_H_ +#define _VDE_ZyDisINTERNALCONFIG_H_ #ifdef _MSC_VER -# define VX_INLINE __inline +# define ZYDIS_INLINE __inline #else -# define VX_INLINE static inline +# define ZYDIS_INLINE static inline #endif -#define VX_UNUSED(x) ((void)x) +#define ZYDIS_UNUSED(x) ((void)x) -#endif /* _VDE_VXINTERNALCONFIG_H_ */ +#endif /* _VDE_ZyDisINTERNALCONFIG_H_ */ diff --git a/VerteronDisassemblerEngine/ZyDisInternalHelpers.h b/VerteronDisassemblerEngine/ZyDisInternalHelpers.h new file mode 100644 index 0000000..7094c92 --- /dev/null +++ b/VerteronDisassemblerEngine/ZyDisInternalHelpers.h @@ -0,0 +1,197 @@ +/************************************************************************************************** + + Verteron Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : athre0z + Modifications : + + Last change : 19. March 2015 + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +**************************************************************************************************/ + +#ifndef _VDE_ZyDisINTERNALHELPERS_H_ +#define _VDE_ZyDisINTERNALHELPERS_H_ + +#include "ZyDisInstructionDecoder.h" +#include "ZyDisInstructionFormatter.h" +#include "ZyDisInternalConfig.h" + +#include + +/* Types IDs =================================================================================== */ + +typedef enum _ZyDisTypeId +{ + TYPE_BASEDATASOURCE, + TYPE_MEMORYDATASOURCE, + TYPE_CUSTOMDATASOURCE, + TYPE_INSTRUCTIONDECODER, + TYPE_BASESYMBOLRESOLVER, + TYPE_CUSTOMSYMBOLRESOLVER, + TYPE_BASEINSTRUCTIONFORMATTER, + TYPE_INTELINSTRUCTIONFORMATTER, + TYPE_CUSTOMINSTRUCTIONFORMATTER, +} ZyDisTypeId; + +/* Context conversion helpers ================================================================== */ + +ZYDIS_INLINE struct _ZyDisBaseDataSource* ZyDisBaseDataSource_thiz( + ZyDisBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_BASEDATASOURCE + || ctx->d.type == TYPE_MEMORYDATASOURCE + || ctx->d.type == TYPE_CUSTOMDATASOURCE); + return (struct _ZyDisBaseDataSource*)ctx->d.ptr; +} + +ZYDIS_INLINE const struct _ZyDisBaseDataSource* ZyDisBaseDataSource_cthiz( + const ZyDisBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_BASEDATASOURCE + || ctx->d.type == TYPE_MEMORYDATASOURCE + || ctx->d.type == TYPE_CUSTOMDATASOURCE); + return (const struct _ZyDisBaseDataSource*)ctx->d.ptr; +} + +ZYDIS_INLINE struct _ZyDisMemoryDataSource* ZyDisMemoryDataSource_thiz( + ZyDisBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_MEMORYDATASOURCE); + return (struct _ZyDisMemoryDataSource*)ctx->d.ptr; +} + +ZYDIS_INLINE const struct _ZyDisMemoryDataSource* ZyDisMemoryDataSource_cthiz( + const ZyDisBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_MEMORYDATASOURCE); + return (const struct _ZyDisMemoryDataSource*)ctx->d.ptr; +} + +ZYDIS_INLINE struct _ZyDisCustomDataSource* ZyDisCustomDataSource_thiz( + ZyDisBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMDATASOURCE); + return (struct _ZyDisCustomDataSource*)ctx->d.ptr; +} + +ZYDIS_INLINE const struct _ZyDisCustomDataSource* ZyDisCustomDataSource_cthiz( + const ZyDisBaseDataSourceContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMDATASOURCE); + return (const struct _ZyDisCustomDataSource*)ctx->d.ptr; +} + +ZYDIS_INLINE struct _ZyDisInstructionDecoder* ZyDisInstructionDecoder_thiz( + ZyDisInstructionDecoderContext *ctx) +{ + assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); + return (struct _ZyDisInstructionDecoder*)ctx->d.ptr; +} + +ZYDIS_INLINE const struct _ZyDisInstructionDecoder* ZyDisInstructionDecoder_cthiz( + const ZyDisInstructionDecoderContext *ctx) +{ + assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); + return (const struct _ZyDisInstructionDecoder*)ctx->d.ptr; +} + +ZYDIS_INLINE struct _ZyDisBaseSymbolResolver* ZyDisBaseSymbolResolver_thiz( + ZyDisBaseSymbolResolverContext *ctx) +{ + assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER + || ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); + return (struct _ZyDisBaseSymbolResolver*)ctx->d.ptr; +} + +ZYDIS_INLINE const struct _ZyDisBaseSymbolResolver* ZyDisBaseSymbolResolver_cthiz( + const ZyDisBaseSymbolResolverContext *ctx) +{ + assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER + || ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); + return (const struct _ZyDisBaseSymbolResolver*)ctx->d.ptr; +} + +ZYDIS_INLINE struct _ZyDisCustomSymbolResolver* ZyDisCustomSymbolResolver_thiz( + ZyDisBaseSymbolResolverContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); + return (struct _ZyDisCustomSymbolResolver*)ctx->d.ptr; +} + +ZYDIS_INLINE const struct _ZyDisCustomSymbolResolver* ZyDisCustomSymbolResolver_cthiz( + const ZyDisBaseSymbolResolverContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); + return (const struct _ZyDisCustomSymbolResolver*)ctx->d.ptr; +} + +ZYDIS_INLINE struct _ZyDisBaseInstructionFormatter* ZyDisBaseInstructionFormatter_thiz( + ZyDisBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER + || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER + || ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); + return (struct _ZyDisBaseInstructionFormatter*)ctx->d.ptr; +} + +ZYDIS_INLINE const struct _ZyDisBaseInstructionFormatter* ZyDisBaseInstructionFormatter_cthiz( + const ZyDisBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER + || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER + || ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); + return (const struct _ZyDisBaseInstructionFormatter*)ctx->d.ptr; +} + +ZYDIS_INLINE struct _ZyDisIntelInstructionFormatter* ZyDisIntelInstructionFormatter_thiz( + ZyDisBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); + return (struct _ZyDisIntelInstructionFormatter*)ctx->d.ptr; +} + +ZYDIS_INLINE const struct _ZyDisIntelInstructionFormatter* ZyDisIntelInstructionFormatter_cthiz( + const ZyDisBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); + return (const struct _ZyDisIntelInstructionFormatter*)ctx->d.ptr; +} + +ZYDIS_INLINE struct _ZyDisCustomInstructionFormatter* ZyDisCustomInstructionFormatter_thiz( + ZyDisBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); + return (struct _ZyDisCustomInstructionFormatter*)ctx->d.ptr; +} + +ZYDIS_INLINE const struct _ZyDisCustomInstructionFormatter* ZyDisCustomInstructionFormatter_cthiz( + const ZyDisBaseInstructionFormatterContext *ctx) +{ + assert(ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); + return (struct _ZyDisCustomInstructionFormatter*)ctx->d.ptr; +} + +/* ============================================================================================= */ + +#endif /* _VDE_ZyDisINTERNALHELPERS_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXOpcodeTable.c b/VerteronDisassemblerEngine/ZyDisOpcodeTable.c similarity index 73% rename from VerteronDisassemblerEngine/VXOpcodeTable.c rename to VerteronDisassemblerEngine/ZyDisOpcodeTable.c index 5a38d5e..762ccf7 100644 --- a/VerteronDisassemblerEngine/VXOpcodeTable.c +++ b/VerteronDisassemblerEngine/ZyDisOpcodeTable.c @@ -30,12 +30,12 @@ **************************************************************************************************/ -#include "VXOpcodeTable.h" +#include "ZyDisOpcodeTable.h" -#define VX_INVALID 0 -#define VX_NODE(type, n) ((VXOpcodeTreeNode)type << 12 | (n)) +#define ZYDIS_INVALID 0 +#define ZYDIS_NODE(type, n) ((ZyDisOpcodeTreeNode)type << 12 | (n)) -const VXOpcodeTreeNode vxOptreeTable[][256] = +const ZyDisOpcodeTreeNode vxOptreeTable[][256] = { { /* 00 */ 0x0015, @@ -44,64 +44,64 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 03 */ 0x0018, /* 04 */ 0x0017, /* 05 */ 0x0010, - /* 06 */ VX_NODE(OTNT_MODE, 0x0000), - /* 07 */ VX_NODE(OTNT_MODE, 0x0001), + /* 06 */ ZYDIS_NODE(OTNT_MODE, 0x0000), + /* 07 */ ZYDIS_NODE(OTNT_MODE, 0x0001), /* 08 */ 0x0394, /* 09 */ 0x0393, /* 0A */ 0x0396, /* 0B */ 0x0395, /* 0C */ 0x0390, /* 0D */ 0x038F, - /* 0E */ VX_NODE(OTNT_MODE, 0x0002), - /* 0F */ VX_NODE(OTNT_TABLE, 0x0001), + /* 0E */ ZYDIS_NODE(OTNT_MODE, 0x0002), + /* 0F */ ZYDIS_NODE(OTNT_TABLE, 0x0001), /* 10 */ 0x000B, /* 11 */ 0x000A, /* 12 */ 0x000C, /* 13 */ 0x000E, /* 14 */ 0x000D, /* 15 */ 0x0006, - /* 16 */ VX_NODE(OTNT_MODE, 0x0007), - /* 17 */ VX_NODE(OTNT_MODE, 0x0008), + /* 16 */ ZYDIS_NODE(OTNT_MODE, 0x0007), + /* 17 */ ZYDIS_NODE(OTNT_MODE, 0x0008), /* 18 */ 0x04FE, /* 19 */ 0x04F7, /* 1A */ 0x04F8, /* 1B */ 0x04FB, /* 1C */ 0x04FA, /* 1D */ 0x04F9, - /* 1E */ VX_NODE(OTNT_MODE, 0x0009), - /* 1F */ VX_NODE(OTNT_MODE, 0x000A), + /* 1E */ ZYDIS_NODE(OTNT_MODE, 0x0009), + /* 1F */ ZYDIS_NODE(OTNT_MODE, 0x000A), /* 20 */ 0x0026, /* 21 */ 0x0027, /* 22 */ 0x0025, /* 23 */ 0x002C, /* 24 */ 0x002D, /* 25 */ 0x002E, - /* 26 */ VX_INVALID, - /* 27 */ VX_NODE(OTNT_MODE, 0x000B), + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_NODE(OTNT_MODE, 0x000B), /* 28 */ 0x0542, /* 29 */ 0x0549, /* 2A */ 0x0548, /* 2B */ 0x054B, /* 2C */ 0x054A, /* 2D */ 0x0547, - /* 2E */ VX_INVALID, - /* 2F */ VX_NODE(OTNT_MODE, 0x000C), + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_NODE(OTNT_MODE, 0x000C), /* 30 */ 0x06B8, /* 31 */ 0x06B9, /* 32 */ 0x06B6, /* 33 */ 0x06B7, /* 34 */ 0x06BA, /* 35 */ 0x06BB, - /* 36 */ VX_INVALID, - /* 37 */ VX_NODE(OTNT_MODE, 0x000D), + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_NODE(OTNT_MODE, 0x000D), /* 38 */ 0x006C, /* 39 */ 0x006D, /* 3A */ 0x006B, /* 3B */ 0x006A, /* 3C */ 0x0070, /* 3D */ 0x006F, - /* 3E */ VX_INVALID, - /* 3F */ VX_NODE(OTNT_MODE, 0x000E), + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_NODE(OTNT_MODE, 0x000E), /* 40 */ 0x02AB, /* 41 */ 0x02AC, /* 42 */ 0x02B2, @@ -134,22 +134,22 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 5D */ 0x043D, /* 5E */ 0x043F, /* 5F */ 0x0441, - /* 60 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0007), - /* 61 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0008), - /* 62 */ VX_NODE(OTNT_MODE, 0x0013), - /* 63 */ VX_NODE(OTNT_MODE, 0x0014), - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, + /* 60 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0007), + /* 61 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0008), + /* 62 */ ZYDIS_NODE(OTNT_MODE, 0x0013), + /* 63 */ ZYDIS_NODE(OTNT_MODE, 0x0014), + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, /* 68 */ 0x04B7, /* 69 */ 0x02A4, /* 6A */ 0x04AB, /* 6B */ 0x02A6, /* 6C */ 0x02B5, - /* 6D */ VX_NODE(OTNT_OPERAND_SIZE, 0x0009), + /* 6D */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0009), /* 6E */ 0x039F, - /* 6F */ VX_NODE(OTNT_OPERAND_SIZE, 0x000A), + /* 6F */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000A), /* 70 */ 0x02E8, /* 71 */ 0x02E2, /* 72 */ 0x02CA, @@ -166,10 +166,10 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 7D */ 0x02D3, /* 7E */ 0x02D8, /* 7F */ 0x02D1, - /* 80 */ VX_NODE(OTNT_MODRM_REG, 0x0013), - /* 81 */ VX_NODE(OTNT_MODRM_REG, 0x0014), - /* 82 */ VX_NODE(OTNT_MODRM_REG, 0x0015), - /* 83 */ VX_NODE(OTNT_MODRM_REG, 0x0016), + /* 80 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0013), + /* 81 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0014), + /* 82 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0015), + /* 83 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0016), /* 84 */ 0x055C, /* 85 */ 0x055D, /* 86 */ 0x06A8, @@ -181,7 +181,7 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 8C */ 0x031D, /* 8D */ 0x02F4, /* 8E */ 0x031C, - /* 8F */ VX_NODE(OTNT_MODRM_REG, 0x0017), + /* 8F */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0017), /* 90 */ 0x06A9, /* 91 */ 0x06AB, /* 92 */ 0x06AA, @@ -190,12 +190,12 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 95 */ 0x06A4, /* 96 */ 0x06A6, /* 97 */ 0x06A5, - /* 98 */ VX_NODE(OTNT_OPERAND_SIZE, 0x000B), - /* 99 */ VX_NODE(OTNT_OPERAND_SIZE, 0x000C), - /* 9A */ VX_NODE(OTNT_MODE, 0x001D), + /* 98 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000B), + /* 99 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000C), + /* 9A */ ZYDIS_NODE(OTNT_MODE, 0x001D), /* 9B */ 0x069D, - /* 9C */ VX_NODE(OTNT_OPERAND_SIZE, 0x000D), - /* 9D */ VX_NODE(OTNT_OPERAND_SIZE, 0x000E), + /* 9C */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000D), + /* 9D */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000E), /* 9E */ 0x04EF, /* 9F */ 0x02EF, /* A0 */ 0x031B, @@ -203,17 +203,17 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* A2 */ 0x031F, /* A3 */ 0x031E, /* A4 */ 0x0367, - /* A5 */ VX_NODE(OTNT_OPERAND_SIZE, 0x000F), + /* A5 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000F), /* A6 */ 0x0076, - /* A7 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0010), + /* A7 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0010), /* A8 */ 0x055E, /* A9 */ 0x055B, /* AA */ 0x053D, - /* AB */ VX_NODE(OTNT_OPERAND_SIZE, 0x0011), + /* AB */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0011), /* AC */ 0x0300, - /* AD */ VX_NODE(OTNT_OPERAND_SIZE, 0x0012), + /* AD */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0012), /* AE */ 0x0501, - /* AF */ VX_NODE(OTNT_OPERAND_SIZE, 0x0013), + /* AF */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0013), /* B0 */ 0x0317, /* B1 */ 0x031A, /* B2 */ 0x0318, @@ -230,49 +230,49 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* BD */ 0x0324, /* BE */ 0x0323, /* BF */ 0x0322, - /* C0 */ VX_NODE(OTNT_MODRM_REG, 0x0018), - /* C1 */ VX_NODE(OTNT_MODRM_REG, 0x0019), + /* C0 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0018), + /* C1 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0019), /* C2 */ 0x04D9, /* C3 */ 0x04D8, - /* C4 */ VX_NODE(OTNT_VEX, 0x0000), - /* C5 */ VX_NODE(OTNT_VEX, 0x0001), - /* C6 */ VX_NODE(OTNT_MODRM_REG, 0x001E), - /* C7 */ VX_NODE(OTNT_MODRM_REG, 0x001F), + /* C4 */ ZYDIS_NODE(OTNT_VEX, 0x0000), + /* C5 */ ZYDIS_NODE(OTNT_VEX, 0x0001), + /* C6 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001E), + /* C7 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001F), /* C8 */ 0x00B4, /* C9 */ 0x02F5, /* CA */ 0x04DA, /* CB */ 0x04DB, /* CC */ 0x02BB, /* CD */ 0x02B9, - /* CE */ VX_NODE(OTNT_MODE, 0x0027), - /* CF */ VX_NODE(OTNT_OPERAND_SIZE, 0x0017), - /* D0 */ VX_NODE(OTNT_MODRM_REG, 0x0020), - /* D1 */ VX_NODE(OTNT_MODRM_REG, 0x0021), - /* D2 */ VX_NODE(OTNT_MODRM_REG, 0x0022), - /* D3 */ VX_NODE(OTNT_MODRM_REG, 0x0023), - /* D4 */ VX_NODE(OTNT_MODE, 0x0028), - /* D5 */ VX_NODE(OTNT_MODE, 0x0029), - /* D6 */ VX_NODE(OTNT_MODE, 0x002A), + /* CE */ ZYDIS_NODE(OTNT_MODE, 0x0027), + /* CF */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0017), + /* D0 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0020), + /* D1 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0021), + /* D2 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0022), + /* D3 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0023), + /* D4 */ ZYDIS_NODE(OTNT_MODE, 0x0028), + /* D5 */ ZYDIS_NODE(OTNT_MODE, 0x0029), + /* D6 */ ZYDIS_NODE(OTNT_MODE, 0x002A), /* D7 */ 0x06B2, - /* D8 */ VX_NODE(OTNT_MODRM_MOD, 0x0015), - /* D9 */ VX_NODE(OTNT_MODRM_MOD, 0x0016), - /* DA */ VX_NODE(OTNT_MODRM_MOD, 0x0017), - /* DB */ VX_NODE(OTNT_MODRM_MOD, 0x0018), - /* DC */ VX_NODE(OTNT_MODRM_MOD, 0x0019), - /* DD */ VX_NODE(OTNT_MODRM_MOD, 0x001A), - /* DE */ VX_NODE(OTNT_MODRM_MOD, 0x001B), - /* DF */ VX_NODE(OTNT_MODRM_MOD, 0x001C), + /* D8 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0015), + /* D9 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0016), + /* DA */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0017), + /* DB */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0018), + /* DC */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0019), + /* DD */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x001A), + /* DE */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x001B), + /* DF */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x001C), /* E0 */ 0x0306, /* E1 */ 0x0305, /* E2 */ 0x0304, - /* E3 */ VX_NODE(OTNT_ADDRESS_SIZE, 0x0000), + /* E3 */ ZYDIS_NODE(OTNT_ADDRESS_SIZE, 0x0000), /* E4 */ 0x02A9, /* E5 */ 0x02AA, /* E6 */ 0x039D, /* E7 */ 0x039E, /* E8 */ 0x004E, /* E9 */ 0x02DB, - /* EA */ VX_NODE(OTNT_MODE, 0x002B), + /* EA */ ZYDIS_NODE(OTNT_MODE, 0x002B), /* EB */ 0x02DD, /* EC */ 0x02A7, /* ED */ 0x02A8, @@ -284,872 +284,872 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* F3 */ 0x04D6, /* F4 */ 0x029D, /* F5 */ 0x0059, - /* F6 */ VX_NODE(OTNT_MODRM_REG, 0x002C), - /* F7 */ VX_NODE(OTNT_MODRM_REG, 0x002D), + /* F6 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002C), + /* F7 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002D), /* F8 */ 0x0053, /* F9 */ 0x0538, /* FA */ 0x0057, /* FB */ 0x053B, /* FC */ 0x0054, /* FD */ 0x0539, - /* FE */ VX_NODE(OTNT_MODRM_REG, 0x002E), - /* FF */ VX_NODE(OTNT_MODRM_REG, 0x002F), + /* FE */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002E), + /* FF */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002F), }, { - /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0000), - /* 01 */ VX_NODE(OTNT_MODRM_MOD, 0x0000), - /* 02 */ VX_NODE(OTNT_MANDATORY, 0x0003), - /* 03 */ VX_NODE(OTNT_MANDATORY, 0x0004), - /* 04 */ VX_INVALID, - /* 05 */ VX_NODE(OTNT_MANDATORY, 0x0005), - /* 06 */ VX_NODE(OTNT_MANDATORY, 0x0006), - /* 07 */ VX_NODE(OTNT_MANDATORY, 0x0007), - /* 08 */ VX_NODE(OTNT_MANDATORY, 0x0008), - /* 09 */ VX_NODE(OTNT_MANDATORY, 0x0009), - /* 0A */ VX_INVALID, - /* 0B */ VX_NODE(OTNT_MANDATORY, 0x000A), - /* 0C */ VX_INVALID, - /* 0D */ VX_NODE(OTNT_MANDATORY, 0x000B), - /* 0E */ VX_NODE(OTNT_MANDATORY, 0x000C), - /* 0F */ VX_NODE(OTNT_AMD3DNOW, 0x0000), - /* 10 */ VX_NODE(OTNT_MANDATORY, 0x000D), - /* 11 */ VX_NODE(OTNT_MANDATORY, 0x000E), - /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x0001), - /* 13 */ VX_NODE(OTNT_MANDATORY, 0x0011), - /* 14 */ VX_NODE(OTNT_MANDATORY, 0x0012), - /* 15 */ VX_NODE(OTNT_MANDATORY, 0x0013), - /* 16 */ VX_NODE(OTNT_MODRM_MOD, 0x0002), - /* 17 */ VX_NODE(OTNT_MANDATORY, 0x0016), - /* 18 */ VX_NODE(OTNT_MANDATORY, 0x0017), - /* 19 */ VX_NODE(OTNT_MANDATORY, 0x0018), - /* 1A */ VX_NODE(OTNT_MANDATORY, 0x0019), - /* 1B */ VX_NODE(OTNT_MANDATORY, 0x001A), - /* 1C */ VX_NODE(OTNT_MANDATORY, 0x001B), - /* 1D */ VX_NODE(OTNT_MANDATORY, 0x001C), - /* 1E */ VX_NODE(OTNT_MANDATORY, 0x001D), - /* 1F */ VX_NODE(OTNT_MANDATORY, 0x001E), - /* 20 */ VX_NODE(OTNT_MANDATORY, 0x001F), - /* 21 */ VX_NODE(OTNT_MANDATORY, 0x0020), - /* 22 */ VX_NODE(OTNT_MANDATORY, 0x0021), - /* 23 */ VX_NODE(OTNT_MANDATORY, 0x0022), - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_NODE(OTNT_MANDATORY, 0x0023), - /* 29 */ VX_NODE(OTNT_MANDATORY, 0x0024), - /* 2A */ VX_NODE(OTNT_MANDATORY, 0x0025), - /* 2B */ VX_NODE(OTNT_MANDATORY, 0x0026), - /* 2C */ VX_NODE(OTNT_MANDATORY, 0x0027), - /* 2D */ VX_NODE(OTNT_MANDATORY, 0x0028), - /* 2E */ VX_NODE(OTNT_MANDATORY, 0x0029), - /* 2F */ VX_NODE(OTNT_MANDATORY, 0x002A), - /* 30 */ VX_NODE(OTNT_MANDATORY, 0x002B), - /* 31 */ VX_NODE(OTNT_MANDATORY, 0x002C), - /* 32 */ VX_NODE(OTNT_MANDATORY, 0x002D), - /* 33 */ VX_NODE(OTNT_MANDATORY, 0x002E), - /* 34 */ VX_NODE(OTNT_MANDATORY, 0x002F), - /* 35 */ VX_NODE(OTNT_MANDATORY, 0x0030), - /* 36 */ VX_INVALID, - /* 37 */ VX_NODE(OTNT_MANDATORY, 0x0031), - /* 38 */ VX_NODE(OTNT_TABLE, 0x0002), - /* 39 */ VX_INVALID, - /* 3A */ VX_NODE(OTNT_TABLE, 0x0003), - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_NODE(OTNT_MANDATORY, 0x0081), - /* 41 */ VX_NODE(OTNT_MANDATORY, 0x0082), - /* 42 */ VX_NODE(OTNT_MANDATORY, 0x0083), - /* 43 */ VX_NODE(OTNT_MANDATORY, 0x0084), - /* 44 */ VX_NODE(OTNT_MANDATORY, 0x0085), - /* 45 */ VX_NODE(OTNT_MANDATORY, 0x0086), - /* 46 */ VX_NODE(OTNT_MANDATORY, 0x0087), - /* 47 */ VX_NODE(OTNT_MANDATORY, 0x0088), - /* 48 */ VX_NODE(OTNT_MANDATORY, 0x0089), - /* 49 */ VX_NODE(OTNT_MANDATORY, 0x008A), - /* 4A */ VX_NODE(OTNT_MANDATORY, 0x008B), - /* 4B */ VX_NODE(OTNT_MANDATORY, 0x008C), - /* 4C */ VX_NODE(OTNT_MANDATORY, 0x008D), - /* 4D */ VX_NODE(OTNT_MANDATORY, 0x008E), - /* 4E */ VX_NODE(OTNT_MANDATORY, 0x008F), - /* 4F */ VX_NODE(OTNT_MANDATORY, 0x0090), - /* 50 */ VX_NODE(OTNT_MANDATORY, 0x0091), - /* 51 */ VX_NODE(OTNT_MANDATORY, 0x0092), - /* 52 */ VX_NODE(OTNT_MANDATORY, 0x0093), - /* 53 */ VX_NODE(OTNT_MANDATORY, 0x0094), - /* 54 */ VX_NODE(OTNT_MANDATORY, 0x0095), - /* 55 */ VX_NODE(OTNT_MANDATORY, 0x0096), - /* 56 */ VX_NODE(OTNT_MANDATORY, 0x0097), - /* 57 */ VX_NODE(OTNT_MANDATORY, 0x0098), - /* 58 */ VX_NODE(OTNT_MANDATORY, 0x0099), - /* 59 */ VX_NODE(OTNT_MANDATORY, 0x009A), - /* 5A */ VX_NODE(OTNT_MANDATORY, 0x009B), - /* 5B */ VX_NODE(OTNT_MANDATORY, 0x009C), - /* 5C */ VX_NODE(OTNT_MANDATORY, 0x009D), - /* 5D */ VX_NODE(OTNT_MANDATORY, 0x009E), - /* 5E */ VX_NODE(OTNT_MANDATORY, 0x009F), - /* 5F */ VX_NODE(OTNT_MANDATORY, 0x00A0), - /* 60 */ VX_NODE(OTNT_MANDATORY, 0x00A1), - /* 61 */ VX_NODE(OTNT_MANDATORY, 0x00A2), - /* 62 */ VX_NODE(OTNT_MANDATORY, 0x00A3), - /* 63 */ VX_NODE(OTNT_MANDATORY, 0x00A4), - /* 64 */ VX_NODE(OTNT_MANDATORY, 0x00A5), - /* 65 */ VX_NODE(OTNT_MANDATORY, 0x00A6), - /* 66 */ VX_NODE(OTNT_MANDATORY, 0x00A7), - /* 67 */ VX_NODE(OTNT_MANDATORY, 0x00A8), - /* 68 */ VX_NODE(OTNT_MANDATORY, 0x00A9), - /* 69 */ VX_NODE(OTNT_MANDATORY, 0x00AA), - /* 6A */ VX_NODE(OTNT_MANDATORY, 0x00AB), - /* 6B */ VX_NODE(OTNT_MANDATORY, 0x00AC), - /* 6C */ VX_NODE(OTNT_MANDATORY, 0x00AD), - /* 6D */ VX_NODE(OTNT_MANDATORY, 0x00AE), - /* 6E */ VX_NODE(OTNT_MANDATORY, 0x00AF), - /* 6F */ VX_NODE(OTNT_MANDATORY, 0x00B0), - /* 70 */ VX_NODE(OTNT_MANDATORY, 0x00B1), - /* 71 */ VX_NODE(OTNT_MANDATORY, 0x00B2), - /* 72 */ VX_NODE(OTNT_MANDATORY, 0x00B3), - /* 73 */ VX_NODE(OTNT_MANDATORY, 0x00B4), - /* 74 */ VX_NODE(OTNT_MANDATORY, 0x00B5), - /* 75 */ VX_NODE(OTNT_MANDATORY, 0x00B6), - /* 76 */ VX_NODE(OTNT_MANDATORY, 0x00B7), - /* 77 */ VX_NODE(OTNT_MANDATORY, 0x00B8), - /* 78 */ VX_NODE(OTNT_MANDATORY, 0x00B9), - /* 79 */ VX_NODE(OTNT_MANDATORY, 0x00BA), - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_NODE(OTNT_MANDATORY, 0x00BB), - /* 7D */ VX_NODE(OTNT_MANDATORY, 0x00BC), - /* 7E */ VX_NODE(OTNT_MANDATORY, 0x00BD), - /* 7F */ VX_NODE(OTNT_MANDATORY, 0x00BE), - /* 80 */ VX_NODE(OTNT_MANDATORY, 0x00BF), - /* 81 */ VX_NODE(OTNT_MANDATORY, 0x00C0), - /* 82 */ VX_NODE(OTNT_MANDATORY, 0x00C1), - /* 83 */ VX_NODE(OTNT_MANDATORY, 0x00C2), - /* 84 */ VX_NODE(OTNT_MANDATORY, 0x00C3), - /* 85 */ VX_NODE(OTNT_MANDATORY, 0x00C4), - /* 86 */ VX_NODE(OTNT_MANDATORY, 0x00C5), - /* 87 */ VX_NODE(OTNT_MANDATORY, 0x00C6), - /* 88 */ VX_NODE(OTNT_MANDATORY, 0x00C7), - /* 89 */ VX_NODE(OTNT_MANDATORY, 0x00C8), - /* 8A */ VX_NODE(OTNT_MANDATORY, 0x00C9), - /* 8B */ VX_NODE(OTNT_MANDATORY, 0x00CA), - /* 8C */ VX_NODE(OTNT_MANDATORY, 0x00CB), - /* 8D */ VX_NODE(OTNT_MANDATORY, 0x00CC), - /* 8E */ VX_NODE(OTNT_MANDATORY, 0x00CD), - /* 8F */ VX_NODE(OTNT_MANDATORY, 0x00CE), - /* 90 */ VX_NODE(OTNT_MANDATORY, 0x00CF), - /* 91 */ VX_NODE(OTNT_MANDATORY, 0x00D0), - /* 92 */ VX_NODE(OTNT_MANDATORY, 0x00D1), - /* 93 */ VX_NODE(OTNT_MANDATORY, 0x00D2), - /* 94 */ VX_NODE(OTNT_MANDATORY, 0x00D3), - /* 95 */ VX_NODE(OTNT_MANDATORY, 0x00D4), - /* 96 */ VX_NODE(OTNT_MANDATORY, 0x00D5), - /* 97 */ VX_NODE(OTNT_MANDATORY, 0x00D6), - /* 98 */ VX_NODE(OTNT_MANDATORY, 0x00D7), - /* 99 */ VX_NODE(OTNT_MANDATORY, 0x00D8), - /* 9A */ VX_NODE(OTNT_MANDATORY, 0x00D9), - /* 9B */ VX_NODE(OTNT_MANDATORY, 0x00DA), - /* 9C */ VX_NODE(OTNT_MANDATORY, 0x00DB), - /* 9D */ VX_NODE(OTNT_MANDATORY, 0x00DC), - /* 9E */ VX_NODE(OTNT_MANDATORY, 0x00DD), - /* 9F */ VX_NODE(OTNT_MANDATORY, 0x00DE), - /* A0 */ VX_NODE(OTNT_MANDATORY, 0x00DF), - /* A1 */ VX_NODE(OTNT_MANDATORY, 0x00E0), - /* A2 */ VX_NODE(OTNT_MANDATORY, 0x00E1), - /* A3 */ VX_NODE(OTNT_MANDATORY, 0x00E2), - /* A4 */ VX_NODE(OTNT_MANDATORY, 0x00E3), - /* A5 */ VX_NODE(OTNT_MANDATORY, 0x00E4), - /* A6 */ VX_NODE(OTNT_MODRM_MOD, 0x0003), - /* A7 */ VX_NODE(OTNT_MODRM_MOD, 0x0004), - /* A8 */ VX_NODE(OTNT_MANDATORY, 0x00E7), - /* A9 */ VX_NODE(OTNT_MANDATORY, 0x00E8), - /* AA */ VX_NODE(OTNT_MANDATORY, 0x00E9), - /* AB */ VX_NODE(OTNT_MANDATORY, 0x00EA), - /* AC */ VX_NODE(OTNT_MANDATORY, 0x00EB), - /* AD */ VX_NODE(OTNT_MANDATORY, 0x00EC), - /* AE */ VX_NODE(OTNT_MODRM_MOD, 0x0005), - /* AF */ VX_NODE(OTNT_MANDATORY, 0x00EF), - /* B0 */ VX_NODE(OTNT_MANDATORY, 0x00F0), - /* B1 */ VX_NODE(OTNT_MANDATORY, 0x00F1), - /* B2 */ VX_NODE(OTNT_MANDATORY, 0x00F2), - /* B3 */ VX_NODE(OTNT_MANDATORY, 0x00F3), - /* B4 */ VX_NODE(OTNT_MANDATORY, 0x00F4), - /* B5 */ VX_NODE(OTNT_MANDATORY, 0x00F5), - /* B6 */ VX_NODE(OTNT_MANDATORY, 0x00F6), - /* B7 */ VX_NODE(OTNT_MANDATORY, 0x00F7), - /* B8 */ VX_NODE(OTNT_MANDATORY, 0x00F8), - /* B9 */ VX_INVALID, - /* BA */ VX_NODE(OTNT_MANDATORY, 0x00F9), - /* BB */ VX_NODE(OTNT_MANDATORY, 0x00FA), - /* BC */ VX_NODE(OTNT_MANDATORY, 0x00FB), - /* BD */ VX_NODE(OTNT_MANDATORY, 0x00FC), - /* BE */ VX_NODE(OTNT_MANDATORY, 0x00FD), - /* BF */ VX_NODE(OTNT_MANDATORY, 0x00FE), - /* C0 */ VX_NODE(OTNT_MANDATORY, 0x00FF), - /* C1 */ VX_NODE(OTNT_MANDATORY, 0x0100), - /* C2 */ VX_NODE(OTNT_MANDATORY, 0x0101), - /* C3 */ VX_NODE(OTNT_MANDATORY, 0x0102), - /* C4 */ VX_NODE(OTNT_MANDATORY, 0x0103), - /* C5 */ VX_NODE(OTNT_MANDATORY, 0x0104), - /* C6 */ VX_NODE(OTNT_MANDATORY, 0x0105), - /* C7 */ VX_NODE(OTNT_MODRM_MOD, 0x0006), - /* C8 */ VX_NODE(OTNT_MANDATORY, 0x0108), - /* C9 */ VX_NODE(OTNT_MANDATORY, 0x0109), - /* CA */ VX_NODE(OTNT_MANDATORY, 0x010A), - /* CB */ VX_NODE(OTNT_MANDATORY, 0x010B), - /* CC */ VX_NODE(OTNT_MANDATORY, 0x010C), - /* CD */ VX_NODE(OTNT_MANDATORY, 0x010D), - /* CE */ VX_NODE(OTNT_MANDATORY, 0x010E), - /* CF */ VX_NODE(OTNT_MANDATORY, 0x010F), - /* D0 */ VX_NODE(OTNT_MANDATORY, 0x0110), - /* D1 */ VX_NODE(OTNT_MANDATORY, 0x0111), - /* D2 */ VX_NODE(OTNT_MANDATORY, 0x0112), - /* D3 */ VX_NODE(OTNT_MANDATORY, 0x0113), - /* D4 */ VX_NODE(OTNT_MANDATORY, 0x0114), - /* D5 */ VX_NODE(OTNT_MANDATORY, 0x0115), - /* D6 */ VX_NODE(OTNT_MANDATORY, 0x0116), - /* D7 */ VX_NODE(OTNT_MANDATORY, 0x0117), - /* D8 */ VX_NODE(OTNT_MANDATORY, 0x0118), - /* D9 */ VX_NODE(OTNT_MANDATORY, 0x0119), - /* DA */ VX_NODE(OTNT_MANDATORY, 0x011A), - /* DB */ VX_NODE(OTNT_MANDATORY, 0x011B), - /* DC */ VX_NODE(OTNT_MANDATORY, 0x011C), - /* DD */ VX_NODE(OTNT_MANDATORY, 0x011D), - /* DE */ VX_NODE(OTNT_MANDATORY, 0x011E), - /* DF */ VX_NODE(OTNT_MANDATORY, 0x011F), - /* E0 */ VX_NODE(OTNT_MANDATORY, 0x0120), - /* E1 */ VX_NODE(OTNT_MANDATORY, 0x0121), - /* E2 */ VX_NODE(OTNT_MANDATORY, 0x0122), - /* E3 */ VX_NODE(OTNT_MANDATORY, 0x0123), - /* E4 */ VX_NODE(OTNT_MANDATORY, 0x0124), - /* E5 */ VX_NODE(OTNT_MANDATORY, 0x0125), - /* E6 */ VX_NODE(OTNT_MANDATORY, 0x0126), - /* E7 */ VX_NODE(OTNT_MANDATORY, 0x0127), - /* E8 */ VX_NODE(OTNT_MANDATORY, 0x0128), - /* E9 */ VX_NODE(OTNT_MANDATORY, 0x0129), - /* EA */ VX_NODE(OTNT_MANDATORY, 0x012A), - /* EB */ VX_NODE(OTNT_MANDATORY, 0x012B), - /* EC */ VX_NODE(OTNT_MANDATORY, 0x012C), - /* ED */ VX_NODE(OTNT_MANDATORY, 0x012D), - /* EE */ VX_NODE(OTNT_MANDATORY, 0x012E), - /* EF */ VX_NODE(OTNT_MANDATORY, 0x012F), - /* F0 */ VX_NODE(OTNT_MANDATORY, 0x0130), - /* F1 */ VX_NODE(OTNT_MANDATORY, 0x0131), - /* F2 */ VX_NODE(OTNT_MANDATORY, 0x0132), - /* F3 */ VX_NODE(OTNT_MANDATORY, 0x0133), - /* F4 */ VX_NODE(OTNT_MANDATORY, 0x0134), - /* F5 */ VX_NODE(OTNT_MANDATORY, 0x0135), - /* F6 */ VX_NODE(OTNT_MANDATORY, 0x0136), - /* F7 */ VX_NODE(OTNT_MODRM_MOD, 0x0007), - /* F8 */ VX_NODE(OTNT_MANDATORY, 0x0138), - /* F9 */ VX_NODE(OTNT_MANDATORY, 0x0139), - /* FA */ VX_NODE(OTNT_MANDATORY, 0x013A), - /* FB */ VX_NODE(OTNT_MANDATORY, 0x013B), - /* FC */ VX_NODE(OTNT_MANDATORY, 0x013C), - /* FD */ VX_NODE(OTNT_MANDATORY, 0x013D), - /* FE */ VX_NODE(OTNT_MANDATORY, 0x013E), - /* FF */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0000), + /* 01 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0000), + /* 02 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0003), + /* 03 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0004), + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0005), + /* 06 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0006), + /* 07 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0007), + /* 08 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0008), + /* 09 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0009), + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_NODE(OTNT_MANDATORY, 0x000A), + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_NODE(OTNT_MANDATORY, 0x000B), + /* 0E */ ZYDIS_NODE(OTNT_MANDATORY, 0x000C), + /* 0F */ ZYDIS_NODE(OTNT_AMD3DNOW, 0x0000), + /* 10 */ ZYDIS_NODE(OTNT_MANDATORY, 0x000D), + /* 11 */ ZYDIS_NODE(OTNT_MANDATORY, 0x000E), + /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0001), + /* 13 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0011), + /* 14 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0012), + /* 15 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0013), + /* 16 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0002), + /* 17 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0016), + /* 18 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0017), + /* 19 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0018), + /* 1A */ ZYDIS_NODE(OTNT_MANDATORY, 0x0019), + /* 1B */ ZYDIS_NODE(OTNT_MANDATORY, 0x001A), + /* 1C */ ZYDIS_NODE(OTNT_MANDATORY, 0x001B), + /* 1D */ ZYDIS_NODE(OTNT_MANDATORY, 0x001C), + /* 1E */ ZYDIS_NODE(OTNT_MANDATORY, 0x001D), + /* 1F */ ZYDIS_NODE(OTNT_MANDATORY, 0x001E), + /* 20 */ ZYDIS_NODE(OTNT_MANDATORY, 0x001F), + /* 21 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0020), + /* 22 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0021), + /* 23 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0022), + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0023), + /* 29 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0024), + /* 2A */ ZYDIS_NODE(OTNT_MANDATORY, 0x0025), + /* 2B */ ZYDIS_NODE(OTNT_MANDATORY, 0x0026), + /* 2C */ ZYDIS_NODE(OTNT_MANDATORY, 0x0027), + /* 2D */ ZYDIS_NODE(OTNT_MANDATORY, 0x0028), + /* 2E */ ZYDIS_NODE(OTNT_MANDATORY, 0x0029), + /* 2F */ ZYDIS_NODE(OTNT_MANDATORY, 0x002A), + /* 30 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002B), + /* 31 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002C), + /* 32 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002D), + /* 33 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002E), + /* 34 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002F), + /* 35 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0030), + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0031), + /* 38 */ ZYDIS_NODE(OTNT_TABLE, 0x0002), + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_NODE(OTNT_TABLE, 0x0003), + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0081), + /* 41 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0082), + /* 42 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0083), + /* 43 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0084), + /* 44 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0085), + /* 45 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0086), + /* 46 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0087), + /* 47 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0088), + /* 48 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0089), + /* 49 */ ZYDIS_NODE(OTNT_MANDATORY, 0x008A), + /* 4A */ ZYDIS_NODE(OTNT_MANDATORY, 0x008B), + /* 4B */ ZYDIS_NODE(OTNT_MANDATORY, 0x008C), + /* 4C */ ZYDIS_NODE(OTNT_MANDATORY, 0x008D), + /* 4D */ ZYDIS_NODE(OTNT_MANDATORY, 0x008E), + /* 4E */ ZYDIS_NODE(OTNT_MANDATORY, 0x008F), + /* 4F */ ZYDIS_NODE(OTNT_MANDATORY, 0x0090), + /* 50 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0091), + /* 51 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0092), + /* 52 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0093), + /* 53 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0094), + /* 54 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0095), + /* 55 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0096), + /* 56 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0097), + /* 57 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0098), + /* 58 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0099), + /* 59 */ ZYDIS_NODE(OTNT_MANDATORY, 0x009A), + /* 5A */ ZYDIS_NODE(OTNT_MANDATORY, 0x009B), + /* 5B */ ZYDIS_NODE(OTNT_MANDATORY, 0x009C), + /* 5C */ ZYDIS_NODE(OTNT_MANDATORY, 0x009D), + /* 5D */ ZYDIS_NODE(OTNT_MANDATORY, 0x009E), + /* 5E */ ZYDIS_NODE(OTNT_MANDATORY, 0x009F), + /* 5F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A0), + /* 60 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A1), + /* 61 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A2), + /* 62 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A3), + /* 63 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A4), + /* 64 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A5), + /* 65 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A6), + /* 66 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A7), + /* 67 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A8), + /* 68 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A9), + /* 69 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AA), + /* 6A */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AB), + /* 6B */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AC), + /* 6C */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AD), + /* 6D */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AE), + /* 6E */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AF), + /* 6F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B0), + /* 70 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B1), + /* 71 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B2), + /* 72 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B3), + /* 73 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B4), + /* 74 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B5), + /* 75 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B6), + /* 76 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B7), + /* 77 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B8), + /* 78 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B9), + /* 79 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BA), + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BB), + /* 7D */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BC), + /* 7E */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BD), + /* 7F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BE), + /* 80 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BF), + /* 81 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C0), + /* 82 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C1), + /* 83 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C2), + /* 84 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C3), + /* 85 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C4), + /* 86 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C5), + /* 87 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C6), + /* 88 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C7), + /* 89 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C8), + /* 8A */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C9), + /* 8B */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CA), + /* 8C */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CB), + /* 8D */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CC), + /* 8E */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CD), + /* 8F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CE), + /* 90 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CF), + /* 91 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D0), + /* 92 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D1), + /* 93 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D2), + /* 94 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D3), + /* 95 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D4), + /* 96 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D5), + /* 97 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D6), + /* 98 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D7), + /* 99 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D8), + /* 9A */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D9), + /* 9B */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DA), + /* 9C */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DB), + /* 9D */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DC), + /* 9E */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DD), + /* 9F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DE), + /* A0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DF), + /* A1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E0), + /* A2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E1), + /* A3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E2), + /* A4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E3), + /* A5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E4), + /* A6 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0003), + /* A7 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0004), + /* A8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E7), + /* A9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E8), + /* AA */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E9), + /* AB */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EA), + /* AC */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EB), + /* AD */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EC), + /* AE */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0005), + /* AF */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EF), + /* B0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F0), + /* B1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F1), + /* B2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F2), + /* B3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F3), + /* B4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F4), + /* B5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F5), + /* B6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F6), + /* B7 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F7), + /* B8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F8), + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F9), + /* BB */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FA), + /* BC */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FB), + /* BD */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FC), + /* BE */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FD), + /* BF */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FE), + /* C0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FF), + /* C1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0100), + /* C2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0101), + /* C3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0102), + /* C4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0103), + /* C5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0104), + /* C6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0105), + /* C7 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0006), + /* C8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0108), + /* C9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0109), + /* CA */ ZYDIS_NODE(OTNT_MANDATORY, 0x010A), + /* CB */ ZYDIS_NODE(OTNT_MANDATORY, 0x010B), + /* CC */ ZYDIS_NODE(OTNT_MANDATORY, 0x010C), + /* CD */ ZYDIS_NODE(OTNT_MANDATORY, 0x010D), + /* CE */ ZYDIS_NODE(OTNT_MANDATORY, 0x010E), + /* CF */ ZYDIS_NODE(OTNT_MANDATORY, 0x010F), + /* D0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0110), + /* D1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0111), + /* D2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0112), + /* D3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0113), + /* D4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0114), + /* D5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0115), + /* D6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0116), + /* D7 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0117), + /* D8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0118), + /* D9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0119), + /* DA */ ZYDIS_NODE(OTNT_MANDATORY, 0x011A), + /* DB */ ZYDIS_NODE(OTNT_MANDATORY, 0x011B), + /* DC */ ZYDIS_NODE(OTNT_MANDATORY, 0x011C), + /* DD */ ZYDIS_NODE(OTNT_MANDATORY, 0x011D), + /* DE */ ZYDIS_NODE(OTNT_MANDATORY, 0x011E), + /* DF */ ZYDIS_NODE(OTNT_MANDATORY, 0x011F), + /* E0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0120), + /* E1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0121), + /* E2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0122), + /* E3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0123), + /* E4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0124), + /* E5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0125), + /* E6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0126), + /* E7 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0127), + /* E8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0128), + /* E9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0129), + /* EA */ ZYDIS_NODE(OTNT_MANDATORY, 0x012A), + /* EB */ ZYDIS_NODE(OTNT_MANDATORY, 0x012B), + /* EC */ ZYDIS_NODE(OTNT_MANDATORY, 0x012C), + /* ED */ ZYDIS_NODE(OTNT_MANDATORY, 0x012D), + /* EE */ ZYDIS_NODE(OTNT_MANDATORY, 0x012E), + /* EF */ ZYDIS_NODE(OTNT_MANDATORY, 0x012F), + /* F0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0130), + /* F1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0131), + /* F2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0132), + /* F3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0133), + /* F4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0134), + /* F5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0135), + /* F6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0136), + /* F7 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0007), + /* F8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0138), + /* F9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0139), + /* FA */ ZYDIS_NODE(OTNT_MANDATORY, 0x013A), + /* FB */ ZYDIS_NODE(OTNT_MANDATORY, 0x013B), + /* FC */ ZYDIS_NODE(OTNT_MANDATORY, 0x013C), + /* FD */ ZYDIS_NODE(OTNT_MANDATORY, 0x013D), + /* FE */ ZYDIS_NODE(OTNT_MANDATORY, 0x013E), + /* FF */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0032), - /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0033), - /* 02 */ VX_NODE(OTNT_MANDATORY, 0x0034), - /* 03 */ VX_NODE(OTNT_MANDATORY, 0x0035), - /* 04 */ VX_NODE(OTNT_MANDATORY, 0x0036), - /* 05 */ VX_NODE(OTNT_MANDATORY, 0x0037), - /* 06 */ VX_NODE(OTNT_MANDATORY, 0x0038), - /* 07 */ VX_NODE(OTNT_MANDATORY, 0x0039), - /* 08 */ VX_NODE(OTNT_MANDATORY, 0x003A), - /* 09 */ VX_NODE(OTNT_MANDATORY, 0x003B), - /* 0A */ VX_NODE(OTNT_MANDATORY, 0x003C), - /* 0B */ VX_NODE(OTNT_MANDATORY, 0x003D), - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ VX_NODE(OTNT_MANDATORY, 0x003E), - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ VX_NODE(OTNT_MANDATORY, 0x003F), - /* 15 */ VX_NODE(OTNT_MANDATORY, 0x0040), - /* 16 */ VX_INVALID, - /* 17 */ VX_NODE(OTNT_MANDATORY, 0x0041), - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_NODE(OTNT_MANDATORY, 0x0042), - /* 1D */ VX_NODE(OTNT_MANDATORY, 0x0043), - /* 1E */ VX_NODE(OTNT_MANDATORY, 0x0044), - /* 1F */ VX_INVALID, - /* 20 */ VX_NODE(OTNT_MANDATORY, 0x0045), - /* 21 */ VX_NODE(OTNT_MANDATORY, 0x0046), - /* 22 */ VX_NODE(OTNT_MANDATORY, 0x0047), - /* 23 */ VX_NODE(OTNT_MANDATORY, 0x0048), - /* 24 */ VX_NODE(OTNT_MANDATORY, 0x0049), - /* 25 */ VX_NODE(OTNT_MANDATORY, 0x004A), - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_NODE(OTNT_MANDATORY, 0x004B), - /* 29 */ VX_NODE(OTNT_MANDATORY, 0x004C), - /* 2A */ VX_NODE(OTNT_MANDATORY, 0x004D), - /* 2B */ VX_NODE(OTNT_MANDATORY, 0x004E), - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_NODE(OTNT_MANDATORY, 0x004F), - /* 31 */ VX_NODE(OTNT_MANDATORY, 0x0050), - /* 32 */ VX_NODE(OTNT_MANDATORY, 0x0051), - /* 33 */ VX_NODE(OTNT_MANDATORY, 0x0052), - /* 34 */ VX_NODE(OTNT_MANDATORY, 0x0053), - /* 35 */ VX_NODE(OTNT_MANDATORY, 0x0054), - /* 36 */ VX_INVALID, - /* 37 */ VX_NODE(OTNT_MANDATORY, 0x0055), - /* 38 */ VX_NODE(OTNT_MANDATORY, 0x0056), - /* 39 */ VX_NODE(OTNT_MANDATORY, 0x0057), - /* 3A */ VX_NODE(OTNT_MANDATORY, 0x0058), - /* 3B */ VX_NODE(OTNT_MANDATORY, 0x0059), - /* 3C */ VX_NODE(OTNT_MANDATORY, 0x005A), - /* 3D */ VX_NODE(OTNT_MANDATORY, 0x005B), - /* 3E */ VX_NODE(OTNT_MANDATORY, 0x005C), - /* 3F */ VX_NODE(OTNT_MANDATORY, 0x005D), - /* 40 */ VX_NODE(OTNT_MANDATORY, 0x005E), - /* 41 */ VX_NODE(OTNT_MANDATORY, 0x005F), - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_NODE(OTNT_MANDATORY, 0x0060), - /* 81 */ VX_NODE(OTNT_MANDATORY, 0x0061), - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_NODE(OTNT_MANDATORY, 0x0062), - /* DC */ VX_NODE(OTNT_MANDATORY, 0x0063), - /* DD */ VX_NODE(OTNT_MANDATORY, 0x0064), - /* DE */ VX_NODE(OTNT_MANDATORY, 0x0065), - /* DF */ VX_NODE(OTNT_MANDATORY, 0x0066), - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_NODE(OTNT_MANDATORY, 0x0067), - /* F1 */ VX_NODE(OTNT_MANDATORY, 0x0068), - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0032), + /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0033), + /* 02 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0034), + /* 03 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0035), + /* 04 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0036), + /* 05 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0037), + /* 06 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0038), + /* 07 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0039), + /* 08 */ ZYDIS_NODE(OTNT_MANDATORY, 0x003A), + /* 09 */ ZYDIS_NODE(OTNT_MANDATORY, 0x003B), + /* 0A */ ZYDIS_NODE(OTNT_MANDATORY, 0x003C), + /* 0B */ ZYDIS_NODE(OTNT_MANDATORY, 0x003D), + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ ZYDIS_NODE(OTNT_MANDATORY, 0x003E), + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_NODE(OTNT_MANDATORY, 0x003F), + /* 15 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0040), + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0041), + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_NODE(OTNT_MANDATORY, 0x0042), + /* 1D */ ZYDIS_NODE(OTNT_MANDATORY, 0x0043), + /* 1E */ ZYDIS_NODE(OTNT_MANDATORY, 0x0044), + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0045), + /* 21 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0046), + /* 22 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0047), + /* 23 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0048), + /* 24 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0049), + /* 25 */ ZYDIS_NODE(OTNT_MANDATORY, 0x004A), + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_NODE(OTNT_MANDATORY, 0x004B), + /* 29 */ ZYDIS_NODE(OTNT_MANDATORY, 0x004C), + /* 2A */ ZYDIS_NODE(OTNT_MANDATORY, 0x004D), + /* 2B */ ZYDIS_NODE(OTNT_MANDATORY, 0x004E), + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_NODE(OTNT_MANDATORY, 0x004F), + /* 31 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0050), + /* 32 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0051), + /* 33 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0052), + /* 34 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0053), + /* 35 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0054), + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0055), + /* 38 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0056), + /* 39 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0057), + /* 3A */ ZYDIS_NODE(OTNT_MANDATORY, 0x0058), + /* 3B */ ZYDIS_NODE(OTNT_MANDATORY, 0x0059), + /* 3C */ ZYDIS_NODE(OTNT_MANDATORY, 0x005A), + /* 3D */ ZYDIS_NODE(OTNT_MANDATORY, 0x005B), + /* 3E */ ZYDIS_NODE(OTNT_MANDATORY, 0x005C), + /* 3F */ ZYDIS_NODE(OTNT_MANDATORY, 0x005D), + /* 40 */ ZYDIS_NODE(OTNT_MANDATORY, 0x005E), + /* 41 */ ZYDIS_NODE(OTNT_MANDATORY, 0x005F), + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0060), + /* 81 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0061), + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_NODE(OTNT_MANDATORY, 0x0062), + /* DC */ ZYDIS_NODE(OTNT_MANDATORY, 0x0063), + /* DD */ ZYDIS_NODE(OTNT_MANDATORY, 0x0064), + /* DE */ ZYDIS_NODE(OTNT_MANDATORY, 0x0065), + /* DF */ ZYDIS_NODE(OTNT_MANDATORY, 0x0066), + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0067), + /* F1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0068), + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_NODE(OTNT_MANDATORY, 0x0069), - /* 09 */ VX_NODE(OTNT_MANDATORY, 0x006A), - /* 0A */ VX_NODE(OTNT_MANDATORY, 0x006B), - /* 0B */ VX_NODE(OTNT_MANDATORY, 0x006C), - /* 0C */ VX_NODE(OTNT_MANDATORY, 0x006D), - /* 0D */ VX_NODE(OTNT_MANDATORY, 0x006E), - /* 0E */ VX_NODE(OTNT_MANDATORY, 0x006F), - /* 0F */ VX_NODE(OTNT_MANDATORY, 0x0070), - /* 10 */ VX_INVALID, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ VX_NODE(OTNT_MANDATORY, 0x0071), - /* 15 */ VX_NODE(OTNT_MANDATORY, 0x0072), - /* 16 */ VX_NODE(OTNT_MANDATORY, 0x0073), - /* 17 */ VX_NODE(OTNT_MANDATORY, 0x0074), - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_NODE(OTNT_MANDATORY, 0x0075), - /* 21 */ VX_NODE(OTNT_MANDATORY, 0x0076), - /* 22 */ VX_NODE(OTNT_MANDATORY, 0x0077), - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, - /* 2A */ VX_INVALID, - /* 2B */ VX_INVALID, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_NODE(OTNT_MANDATORY, 0x0078), - /* 41 */ VX_NODE(OTNT_MANDATORY, 0x0079), - /* 42 */ VX_NODE(OTNT_MANDATORY, 0x007A), - /* 43 */ VX_INVALID, - /* 44 */ VX_NODE(OTNT_MANDATORY, 0x007B), - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, - /* 60 */ VX_NODE(OTNT_MANDATORY, 0x007C), - /* 61 */ VX_NODE(OTNT_MANDATORY, 0x007D), - /* 62 */ VX_NODE(OTNT_MANDATORY, 0x007E), - /* 63 */ VX_NODE(OTNT_MANDATORY, 0x007F), - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ VX_NODE(OTNT_MANDATORY, 0x0080), - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0069), + /* 09 */ ZYDIS_NODE(OTNT_MANDATORY, 0x006A), + /* 0A */ ZYDIS_NODE(OTNT_MANDATORY, 0x006B), + /* 0B */ ZYDIS_NODE(OTNT_MANDATORY, 0x006C), + /* 0C */ ZYDIS_NODE(OTNT_MANDATORY, 0x006D), + /* 0D */ ZYDIS_NODE(OTNT_MANDATORY, 0x006E), + /* 0E */ ZYDIS_NODE(OTNT_MANDATORY, 0x006F), + /* 0F */ ZYDIS_NODE(OTNT_MANDATORY, 0x0070), + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0071), + /* 15 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0072), + /* 16 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0073), + /* 17 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0074), + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0075), + /* 21 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0076), + /* 22 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0077), + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0078), + /* 41 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0079), + /* 42 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007A), + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007B), + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007C), + /* 61 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007D), + /* 62 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007E), + /* 63 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007F), + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_NODE(OTNT_MANDATORY, 0x0080), + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, /* 10 */ 0x05E6, /* 11 */ 0x05E5, - /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x0008), + /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0008), /* 13 */ 0x05CC, /* 14 */ 0x0698, /* 15 */ 0x0696, - /* 16 */ VX_NODE(OTNT_MODRM_MOD, 0x0009), + /* 16 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0009), /* 17 */ 0x05C7, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, /* 28 */ 0x05B8, /* 29 */ 0x05B7, - /* 2A */ VX_INVALID, + /* 2A */ ZYDIS_INVALID, /* 2B */ 0x05D2, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, /* 2E */ 0x0694, /* 2F */ 0x0581, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, /* 50 */ 0x05CE, /* 51 */ 0x0689, /* 52 */ 0x0684, @@ -1166,252 +1166,252 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 5D */ 0x05AF, /* 5E */ 0x0593, /* 5F */ 0x05A9, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_NODE(OTNT_VEXL, 0x0000), - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_NODE(OTNT_MODRM_MOD, 0x000A), - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_NODE(OTNT_VEXL, 0x0000), + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000A), + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, /* C2 */ 0x057D, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, /* C6 */ 0x0687, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ VX_INVALID, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, /* 10 */ 0x05E4, /* 11 */ 0x05E3, - /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x000B), + /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000B), /* 13 */ 0x05CA, /* 14 */ 0x0697, /* 15 */ 0x0695, - /* 16 */ VX_NODE(OTNT_MODRM_MOD, 0x000C), + /* 16 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000C), /* 17 */ 0x05C5, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, /* 28 */ 0x05B5, /* 29 */ 0x05B6, - /* 2A */ VX_INVALID, + /* 2A */ ZYDIS_INVALID, /* 2B */ 0x05D1, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, /* 2E */ 0x0693, /* 2F */ 0x0580, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, /* 50 */ 0x05CD, /* 51 */ 0x0688, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, /* 54 */ 0x0574, /* 55 */ 0x0572, /* 56 */ 0x05F5, @@ -1438,104 +1438,104 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 6B */ 0x05FA, /* 6C */ 0x067B, /* 6D */ 0x0677, - /* 6E */ VX_NODE(OTNT_OPERAND_SIZE, 0x0014), + /* 6E */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0014), /* 6F */ 0x05BF, /* 70 */ 0x0654, - /* 71 */ VX_NODE(OTNT_MODRM_REG, 0x001B), - /* 72 */ VX_NODE(OTNT_MODRM_REG, 0x001C), - /* 73 */ VX_NODE(OTNT_MODRM_REG, 0x001D), + /* 71 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001B), + /* 72 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001C), + /* 73 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001D), /* 74 */ 0x060E, /* 75 */ 0x0611, /* 76 */ 0x060F, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, /* 7C */ 0x059C, /* 7D */ 0x059E, - /* 7E */ VX_NODE(OTNT_OPERAND_SIZE, 0x0015), + /* 7E */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0015), /* 7F */ 0x05C0, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, /* C2 */ 0x057C, - /* C3 */ VX_INVALID, + /* C3 */ ZYDIS_INVALID, /* C4 */ 0x0630, /* C5 */ 0x0623, /* C6 */ 0x0686, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, /* D0 */ 0x056A, /* D1 */ 0x066B, /* D2 */ 0x0665, @@ -1543,7 +1543,7 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* D4 */ 0x0600, /* D5 */ 0x0650, /* D6 */ 0x05D4, - /* D7 */ VX_NODE(OTNT_VEXL, 0x0004), + /* D7 */ ZYDIS_NODE(OTNT_VEXL, 0x0004), /* D8 */ 0x0671, /* D9 */ 0x0672, /* DA */ 0x063C, @@ -1568,14 +1568,14 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* ED */ 0x0602, /* EE */ 0x0635, /* EF */ 0x067D, - /* F0 */ VX_INVALID, - /* F1 */ VX_NODE(OTNT_VEXL, 0x0005), - /* F2 */ VX_NODE(OTNT_VEXL, 0x0006), - /* F3 */ VX_NODE(OTNT_VEXL, 0x0007), - /* F4 */ VX_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_NODE(OTNT_VEXL, 0x0005), + /* F2 */ ZYDIS_NODE(OTNT_VEXL, 0x0006), + /* F3 */ ZYDIS_NODE(OTNT_VEXL, 0x0007), + /* F4 */ ZYDIS_INVALID, /* F5 */ 0x0632, /* F6 */ 0x0652, - /* F7 */ VX_NODE(OTNT_MODRM_MOD, 0x000D), + /* F7 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000D), /* F8 */ 0x066C, /* F9 */ 0x0673, /* FA */ 0x066D, @@ -1583,7 +1583,7 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* FC */ 0x05FE, /* FD */ 0x0605, /* FE */ 0x05FF, - /* FF */ VX_INVALID, + /* FF */ ZYDIS_INVALID, }, { /* 00 */ 0x0653, @@ -1598,49 +1598,49 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 09 */ 0x0659, /* 0A */ 0x0658, /* 0B */ 0x064C, - /* 0C */ VX_NODE(OTNT_VEXW, 0x0000), - /* 0D */ VX_NODE(OTNT_VEXW, 0x0001), - /* 0E */ VX_NODE(OTNT_VEXW, 0x0002), - /* 0F */ VX_NODE(OTNT_VEXW, 0x0003), - /* 10 */ VX_INVALID, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ VX_INVALID, + /* 0C */ ZYDIS_NODE(OTNT_VEXW, 0x0000), + /* 0D */ ZYDIS_NODE(OTNT_VEXW, 0x0001), + /* 0E */ ZYDIS_NODE(OTNT_VEXW, 0x0002), + /* 0F */ ZYDIS_NODE(OTNT_VEXW, 0x0003), + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, /* 17 */ 0x0674, - /* 18 */ VX_NODE(OTNT_VEXW, 0x0004), - /* 19 */ VX_NODE(OTNT_VEXW, 0x0005), - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, + /* 18 */ ZYDIS_NODE(OTNT_VEXW, 0x0004), + /* 19 */ ZYDIS_NODE(OTNT_VEXW, 0x0005), + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, /* 1C */ 0x05F7, /* 1D */ 0x05F9, /* 1E */ 0x05F8, - /* 1F */ VX_INVALID, + /* 1F */ ZYDIS_INVALID, /* 20 */ 0x0642, /* 21 */ 0x0640, /* 22 */ 0x0641, /* 23 */ 0x0643, /* 24 */ 0x0644, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, /* 28 */ 0x064B, /* 29 */ 0x0610, /* 2A */ 0x05D0, /* 2B */ 0x05FC, - /* 2C */ VX_NODE(OTNT_VEXW, 0x0006), - /* 2D */ VX_NODE(OTNT_VEXW, 0x0007), - /* 2E */ VX_NODE(OTNT_VEXW, 0x0008), - /* 2F */ VX_NODE(OTNT_VEXW, 0x0009), + /* 2C */ ZYDIS_NODE(OTNT_VEXW, 0x0006), + /* 2D */ ZYDIS_NODE(OTNT_VEXW, 0x0007), + /* 2E */ ZYDIS_NODE(OTNT_VEXW, 0x0008), + /* 2F */ ZYDIS_NODE(OTNT_VEXW, 0x0009), /* 30 */ 0x0647, /* 31 */ 0x0645, /* 32 */ 0x0646, /* 33 */ 0x0649, /* 34 */ 0x064A, /* 35 */ 0x0648, - /* 36 */ VX_INVALID, + /* 36 */ ZYDIS_INVALID, /* 37 */ 0x0616, /* 38 */ 0x0639, /* 39 */ 0x063A, @@ -1652,206 +1652,206 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 3F */ 0x0637, /* 40 */ 0x064F, /* 41 */ 0x0628, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, /* DB */ 0x0570, /* DC */ 0x056E, /* DD */ 0x056F, /* DE */ 0x056C, /* DF */ 0x056D, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_NODE(OTNT_VEXW, 0x000A), - /* 05 */ VX_NODE(OTNT_VEXW, 0x000B), - /* 06 */ VX_NODE(OTNT_VEXW, 0x000C), - /* 07 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_NODE(OTNT_VEXW, 0x000A), + /* 05 */ ZYDIS_NODE(OTNT_VEXW, 0x000B), + /* 06 */ ZYDIS_NODE(OTNT_VEXW, 0x000C), + /* 07 */ ZYDIS_INVALID, /* 08 */ 0x0681, /* 09 */ 0x0680, /* 0A */ 0x0683, @@ -1860,336 +1860,336 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 0D */ 0x0576, /* 0E */ 0x060C, /* 0F */ 0x0606, - /* 10 */ VX_INVALID, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ VX_NODE(OTNT_VEXW, 0x000D), + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_NODE(OTNT_VEXW, 0x000D), /* 15 */ 0x0624, - /* 16 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0016), + /* 16 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0016), /* 17 */ 0x059B, - /* 18 */ VX_NODE(OTNT_VEXW, 0x0011), - /* 19 */ VX_NODE(OTNT_VEXW, 0x0012), - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_NODE(OTNT_VEXW, 0x0013), + /* 18 */ ZYDIS_NODE(OTNT_VEXW, 0x0011), + /* 19 */ ZYDIS_NODE(OTNT_VEXW, 0x0012), + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_NODE(OTNT_VEXW, 0x0013), /* 21 */ 0x05A1, - /* 22 */ VX_NODE(OTNT_MODE, 0x0025), - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, - /* 2A */ VX_INVALID, - /* 2B */ VX_INVALID, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, + /* 22 */ ZYDIS_NODE(OTNT_MODE, 0x0025), + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, /* 40 */ 0x0597, /* 41 */ 0x0596, /* 42 */ 0x05E7, - /* 43 */ VX_INVALID, + /* 43 */ ZYDIS_INVALID, /* 44 */ 0x060D, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_NODE(OTNT_VEXW, 0x0016), - /* 4B */ VX_NODE(OTNT_VEXW, 0x0017), - /* 4C */ VX_NODE(OTNT_VEXW, 0x0018), - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_NODE(OTNT_VEXW, 0x0016), + /* 4B */ ZYDIS_NODE(OTNT_VEXW, 0x0017), + /* 4C */ ZYDIS_NODE(OTNT_VEXW, 0x0018), + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, /* 60 */ 0x0613, /* 61 */ 0x0612, /* 62 */ 0x0619, /* 63 */ 0x0618, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, /* DF */ 0x0571, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ VX_NODE(OTNT_MODRM_MOD, 0x000E), - /* 11 */ VX_NODE(OTNT_MODRM_MOD, 0x000F), - /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x0010), - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ VX_NODE(OTNT_MODRM_MOD, 0x0011), - /* 17 */ VX_INVALID, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000E), + /* 11 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000F), + /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0010), + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0011), + /* 17 */ ZYDIS_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, /* 2A */ 0x058B, - /* 2B */ VX_INVALID, + /* 2B */ ZYDIS_INVALID, /* 2C */ 0x0591, /* 2D */ 0x058D, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, /* 51 */ 0x068B, /* 52 */ 0x0685, /* 53 */ 0x067F, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, /* 58 */ 0x0569, /* 59 */ 0x05F1, /* 5A */ 0x058C, @@ -2198,460 +2198,460 @@ const VXOpcodeTreeNode vxOptreeTable[][256] = /* 5D */ 0x05B1, /* 5E */ 0x0595, /* 5F */ 0x05AB, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, /* 6F */ 0x05C2, /* 70 */ 0x0655, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, /* 7E */ 0x05D3, /* 7F */ 0x05C1, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, /* C2 */ 0x057F, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ VX_INVALID, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, /* E6 */ 0x0582, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_INVALID, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ VX_NODE(OTNT_MODRM_MOD, 0x0012), - /* 11 */ VX_NODE(OTNT_MODRM_MOD, 0x0013), - /* 12 */ VX_NODE(OTNT_MODRM_MOD, 0x0014), - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ VX_INVALID, - /* 17 */ VX_INVALID, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0012), + /* 11 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0013), + /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0014), + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, /* 2A */ 0x058A, - /* 2B */ VX_INVALID, + /* 2B */ ZYDIS_INVALID, /* 2C */ 0x0590, /* 2D */ 0x0588, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, /* 51 */ 0x068A, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, /* 58 */ 0x0568, /* 59 */ 0x05F0, /* 5A */ 0x0589, - /* 5B */ VX_INVALID, + /* 5B */ ZYDIS_INVALID, /* 5C */ 0x068F, /* 5D */ 0x05B0, /* 5E */ 0x0594, /* 5F */ 0x05AA, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, /* 70 */ 0x0656, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, /* 7C */ 0x059D, /* 7D */ 0x059F, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, - /* 8A */ VX_INVALID, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, - /* 8E */ VX_INVALID, - /* 8F */ VX_INVALID, - /* 90 */ VX_INVALID, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, - /* 94 */ VX_INVALID, - /* 95 */ VX_INVALID, - /* 96 */ VX_INVALID, - /* 97 */ VX_INVALID, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, - /* 9A */ VX_INVALID, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, - /* 9E */ VX_INVALID, - /* 9F */ VX_INVALID, - /* A0 */ VX_INVALID, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, - /* A4 */ VX_INVALID, - /* A5 */ VX_INVALID, - /* A6 */ VX_INVALID, - /* A7 */ VX_INVALID, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, - /* AA */ VX_INVALID, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, - /* AE */ VX_INVALID, - /* AF */ VX_INVALID, - /* B0 */ VX_INVALID, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, - /* B4 */ VX_INVALID, - /* B5 */ VX_INVALID, - /* B6 */ VX_INVALID, - /* B7 */ VX_INVALID, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, - /* BB */ VX_INVALID, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, - /* BF */ VX_INVALID, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, /* C2 */ 0x057E, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, /* D0 */ 0x056B, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ VX_INVALID, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, /* E6 */ 0x0584, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, /* F0 */ 0x05A2, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, }, }; -const VXOpcodeTreeNode vxOptreeModrmMod[][2] = +const ZyDisOpcodeTreeNode vxOptreeModrmMod[][2] = { { - /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0001), - /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0002), + /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0001), + /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0002), }, { - /* 00 */ VX_NODE(OTNT_MANDATORY, 0x000F), - /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0010), + /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x000F), + /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0010), }, { - /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0014), - /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0015), + /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0014), + /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0015), }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_NODE(OTNT_MANDATORY, 0x00E5), + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E5), }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_NODE(OTNT_MANDATORY, 0x00E6), + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E6), }, { - /* 00 */ VX_NODE(OTNT_MANDATORY, 0x00ED), - /* 01 */ VX_NODE(OTNT_MANDATORY, 0x00EE), + /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00ED), + /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EE), }, { - /* 00 */ VX_NODE(OTNT_MANDATORY, 0x0106), - /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0107), + /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0106), + /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0107), }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_NODE(OTNT_MANDATORY, 0x0137), + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0137), }, { /* 00 */ 0x05CB, @@ -2662,19 +2662,19 @@ const VXOpcodeTreeNode vxOptreeModrmMod[][2] = /* 01 */ 0x05C8, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x001A), - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001A), + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x05C9, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x05C4, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05A3, }, { @@ -2706,40 +2706,40 @@ const VXOpcodeTreeNode vxOptreeModrmMod[][2] = /* 01 */ 0x05BD, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0024), - /* 01 */ VX_NODE(OTNT_X87, 0x0000), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0024), + /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0000), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0025), - /* 01 */ VX_NODE(OTNT_X87, 0x0001), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0025), + /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0001), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0026), - /* 01 */ VX_NODE(OTNT_X87, 0x0002), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0026), + /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0002), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0027), - /* 01 */ VX_NODE(OTNT_X87, 0x0003), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0027), + /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0003), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0028), - /* 01 */ VX_NODE(OTNT_X87, 0x0004), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0028), + /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0004), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0029), - /* 01 */ VX_NODE(OTNT_X87, 0x0005), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0029), + /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0005), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x002A), - /* 01 */ VX_NODE(OTNT_X87, 0x0006), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002A), + /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0006), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x002B), - /* 01 */ VX_NODE(OTNT_X87, 0x0007), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002B), + /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0007), }, }; -const VXOpcodeTreeNode vxOptreeModrmReg[][8] = +const ZyDisOpcodeTreeNode vxOptreeModrmReg[][8] = { { /* 00 */ 0x0531, @@ -2748,8 +2748,8 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = /* 03 */ 0x0309, /* 04 */ 0x0598, /* 05 */ 0x0599, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x0516, @@ -2757,109 +2757,109 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = /* 02 */ 0x02F9, /* 03 */ 0x02FB, /* 04 */ 0x0533, - /* 05 */ VX_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x02FE, /* 07 */ 0x02C0, }, { - /* 00 */ VX_NODE(OTNT_MODRM_RM, 0x0000), - /* 01 */ VX_NODE(OTNT_MODRM_RM, 0x0001), - /* 02 */ VX_NODE(OTNT_MODRM_RM, 0x0002), - /* 03 */ VX_NODE(OTNT_MODRM_RM, 0x0003), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0000), + /* 01 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0001), + /* 02 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0002), + /* 03 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0003), /* 04 */ 0x0532, - /* 05 */ VX_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x02FD, - /* 07 */ VX_NODE(OTNT_MODRM_RM, 0x0004), + /* 07 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0004), }, { /* 00 */ 0x0455, /* 01 */ 0x0456, /* 02 */ 0x0457, /* 03 */ 0x0458, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x0486, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, /* 04 */ 0x0479, - /* 05 */ VX_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x0470, - /* 07 */ VX_INVALID, + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x0485, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, /* 04 */ 0x0478, - /* 05 */ VX_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x0473, - /* 07 */ VX_INVALID, + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x047E, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, /* 04 */ 0x0475, - /* 05 */ VX_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x0468, - /* 07 */ VX_INVALID, + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x047C, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, /* 04 */ 0x0476, - /* 05 */ VX_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x046A, - /* 07 */ VX_INVALID, + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x0482, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x046D, - /* 07 */ VX_INVALID, + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x0481, /* 03 */ 0x0480, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x046C, /* 07 */ 0x046B, }, { - /* 00 */ VX_NODE(OTNT_MODRM_RM, 0x0005), - /* 01 */ VX_NODE(OTNT_MODRM_RM, 0x0006), - /* 02 */ VX_NODE(OTNT_MODRM_RM, 0x0007), - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0005), + /* 01 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0006), + /* 02 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0007), + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODRM_RM, 0x0008), - /* 01 */ VX_NODE(OTNT_MODRM_RM, 0x0009), - /* 02 */ VX_NODE(OTNT_MODRM_RM, 0x000A), - /* 03 */ VX_NODE(OTNT_MODRM_RM, 0x000B), - /* 04 */ VX_NODE(OTNT_MODRM_RM, 0x000C), - /* 05 */ VX_NODE(OTNT_MODRM_RM, 0x000D), - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0008), + /* 01 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0009), + /* 02 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x000A), + /* 03 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x000B), + /* 04 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x000C), + /* 05 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x000D), + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x0296, @@ -2868,68 +2868,68 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = /* 03 */ 0x053C, /* 04 */ 0x06C0, /* 05 */ 0x06BF, - /* 06 */ VX_INVALID, + /* 06 */ ZYDIS_INVALID, /* 07 */ 0x0055, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, /* 05 */ 0x02F7, /* 06 */ 0x0310, /* 07 */ 0x0515, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, /* 04 */ 0x0043, /* 05 */ 0x0049, /* 06 */ 0x0047, /* 07 */ 0x0045, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0006), - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_NODE(OTNT_VENDOR, 0x0015), - /* 07 */ VX_NODE(OTNT_VENDOR, 0x0016), + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0006), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_NODE(OTNT_VENDOR, 0x0015), + /* 07 */ ZYDIS_NODE(OTNT_VENDOR, 0x0016), }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_NODE(OTNT_VENDOR, 0x0017), - /* 07 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_NODE(OTNT_VENDOR, 0x0017), + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_NODE(OTNT_VENDOR, 0x0018), - /* 07 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_NODE(OTNT_VENDOR, 0x0018), + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x04D3, - /* 07 */ VX_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x000F, @@ -2952,14 +2952,14 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = /* 07 */ 0x0072, }, { - /* 00 */ VX_NODE(OTNT_MODE, 0x0015), - /* 01 */ VX_NODE(OTNT_MODE, 0x0016), - /* 02 */ VX_NODE(OTNT_MODE, 0x0017), - /* 03 */ VX_NODE(OTNT_MODE, 0x0018), - /* 04 */ VX_NODE(OTNT_MODE, 0x0019), - /* 05 */ VX_NODE(OTNT_MODE, 0x001A), - /* 06 */ VX_NODE(OTNT_MODE, 0x001B), - /* 07 */ VX_NODE(OTNT_MODE, 0x001C), + /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0015), + /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x0016), + /* 02 */ ZYDIS_NODE(OTNT_MODE, 0x0017), + /* 03 */ ZYDIS_NODE(OTNT_MODE, 0x0018), + /* 04 */ ZYDIS_NODE(OTNT_MODE, 0x0019), + /* 05 */ ZYDIS_NODE(OTNT_MODE, 0x001A), + /* 06 */ ZYDIS_NODE(OTNT_MODE, 0x001B), + /* 07 */ ZYDIS_NODE(OTNT_MODE, 0x001C), }, { /* 00 */ 0x0012, @@ -2973,13 +2973,13 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = }, { /* 00 */ 0x0440, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x04DE, @@ -3002,64 +3002,64 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = /* 07 */ 0x04F6, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x068C, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x066A, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, /* 04 */ 0x0664, - /* 05 */ VX_INVALID, - /* 06 */ VX_NODE(OTNT_VEXL, 0x0001), - /* 07 */ VX_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_NODE(OTNT_VEXL, 0x0001), + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x0666, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, /* 04 */ 0x0661, - /* 05 */ VX_INVALID, - /* 06 */ VX_NODE(OTNT_VEXL, 0x0002), - /* 07 */ VX_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_NODE(OTNT_VEXL, 0x0002), + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x0668, /* 03 */ 0x0667, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_NODE(OTNT_VEXL, 0x0003), + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_NODE(OTNT_VEXL, 0x0003), /* 07 */ 0x065C, }, { /* 00 */ 0x0333, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x0332, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x04DD, @@ -3113,7 +3113,7 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = }, { /* 00 */ 0x01BC, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x01FF, /* 03 */ 0x020B, /* 04 */ 0x01C3, @@ -3136,9 +3136,9 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = /* 01 */ 0x01B1, /* 02 */ 0x01AB, /* 03 */ 0x01AD, - /* 04 */ VX_INVALID, + /* 04 */ ZYDIS_INVALID, /* 05 */ 0x01BA, - /* 06 */ VX_INVALID, + /* 06 */ ZYDIS_INVALID, /* 07 */ 0x020A, }, { @@ -3157,7 +3157,7 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = /* 02 */ 0x01FE, /* 03 */ 0x0209, /* 04 */ 0x01F3, - /* 05 */ VX_INVALID, + /* 05 */ ZYDIS_INVALID, /* 06 */ 0x01E8, /* 07 */ 0x01ED, }, @@ -3204,248 +3204,248 @@ const VXOpcodeTreeNode vxOptreeModrmReg[][8] = { /* 00 */ 0x02AF, /* 01 */ 0x00A4, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x02B0, /* 01 */ 0x00A5, - /* 02 */ VX_NODE(OTNT_MODE, 0x002C), + /* 02 */ ZYDIS_NODE(OTNT_MODE, 0x002C), /* 03 */ 0x004C, /* 04 */ 0x02D9, /* 05 */ 0x02DA, /* 06 */ 0x04B8, - /* 07 */ VX_INVALID, + /* 07 */ ZYDIS_INVALID, }, }; -const VXOpcodeTreeNode vxOptreeModrmRm[][8] = +const ZyDisOpcodeTreeNode vxOptreeModrmRm[][8] = { { - /* 00 */ VX_INVALID, - /* 01 */ VX_NODE(OTNT_VENDOR, 0x0000), - /* 02 */ VX_NODE(OTNT_VENDOR, 0x0001), - /* 03 */ VX_NODE(OTNT_VENDOR, 0x0002), - /* 04 */ VX_NODE(OTNT_VENDOR, 0x0003), - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x0000), + /* 02 */ ZYDIS_NODE(OTNT_VENDOR, 0x0001), + /* 03 */ ZYDIS_NODE(OTNT_VENDOR, 0x0002), + /* 04 */ ZYDIS_NODE(OTNT_VENDOR, 0x0003), + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x0315, /* 01 */ 0x0383, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x06B1, /* 01 */ 0x06C1, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VENDOR, 0x0004), - /* 01 */ VX_NODE(OTNT_VENDOR, 0x0005), - /* 02 */ VX_NODE(OTNT_VENDOR, 0x0006), - /* 03 */ VX_NODE(OTNT_VENDOR, 0x0007), - /* 04 */ VX_NODE(OTNT_VENDOR, 0x0008), - /* 05 */ VX_NODE(OTNT_VENDOR, 0x0009), - /* 06 */ VX_NODE(OTNT_VENDOR, 0x000A), - /* 07 */ VX_NODE(OTNT_VENDOR, 0x000B), + /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x0004), + /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x0005), + /* 02 */ ZYDIS_NODE(OTNT_VENDOR, 0x0006), + /* 03 */ ZYDIS_NODE(OTNT_VENDOR, 0x0007), + /* 04 */ ZYDIS_NODE(OTNT_VENDOR, 0x0008), + /* 05 */ ZYDIS_NODE(OTNT_VENDOR, 0x0009), + /* 06 */ ZYDIS_NODE(OTNT_VENDOR, 0x000A), + /* 07 */ ZYDIS_NODE(OTNT_VENDOR, 0x000B), }, { /* 00 */ 0x0550, - /* 01 */ VX_NODE(OTNT_VENDOR, 0x000C), - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x000C), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x0316, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x06C2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x06C3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x06C4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x06AF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x06AC, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x06AE, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x06AD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, { /* 00 */ 0x06B0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, }, }; -const VXOpcodeTreeNode vxOptreeMandatory[][4] = +const ZyDisOpcodeTreeNode vxOptreeMandatory[][4] = { { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0000), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0000), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0001), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0001), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0002), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0002), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02F0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0307, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0551, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0058, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0556, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02BD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x069E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0561, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0454, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0189, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0379, @@ -3469,126 +3469,126 @@ const VXOpcodeTreeNode vxOptreeMandatory[][4] = /* 00 */ 0x034C, /* 01 */ 0x0346, /* 02 */ 0x036E, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0354, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0352, }, { /* 00 */ 0x0565, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0564, }, { /* 00 */ 0x0563, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0562, }, { /* 00 */ 0x0350, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x036B, /* 03 */ 0x034E, }, { /* 00 */ 0x0351, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x036C, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x034F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x034D, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0003), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0003), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x038A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x038B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x038C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0389, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0386, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0387, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0388, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0325, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0328, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0327, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0326, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x033A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0338, }, { /* 00 */ 0x0339, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0337, }, { @@ -3599,8 +3599,8 @@ const VXOpcodeTreeNode vxOptreeMandatory[][4] = }, { /* 00 */ 0x035C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x035B, }, { @@ -3617,632 +3617,632 @@ const VXOpcodeTreeNode vxOptreeMandatory[][4] = }, { /* 00 */ 0x0560, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x055F, }, { /* 00 */ 0x0082, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0081, }, { /* 00 */ 0x069F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x04D4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x04D1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x04D2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODE, 0x0003), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0003), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODE, 0x0004), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0004), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x029A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x045B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x045C, }, { /* 00 */ 0x03FD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03FE, }, { /* 00 */ 0x03FA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03F9, }, { /* 00 */ 0x03FB, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03FC, }, { /* 00 */ 0x040E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x040F, }, { /* 00 */ 0x0405, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0404, }, { /* 00 */ 0x0400, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0401, }, { /* 00 */ 0x0402, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0403, }, { /* 00 */ 0x0461, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0462, }, { /* 00 */ 0x0466, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0465, }, { /* 00 */ 0x0464, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0463, }, { /* 00 */ 0x0431, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0432, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03CA, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0037, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0036, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x049A, }, { /* 00 */ 0x03A3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03A2, }, { /* 00 */ 0x03A6, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03A7, }, { /* 00 */ 0x03A4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03A5, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0426, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0424, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0425, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0428, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0429, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0427, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0430, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03D1, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0359, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03AC, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x042C, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x042A, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x042B, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x042E, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x042F, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x042D, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03DA, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x041A, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x041B, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0421, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0420, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0412, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0413, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0419, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0418, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0438, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03FF, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_NODE(OTNT_MODE, 0x0005), + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_NODE(OTNT_MODE, 0x0005), }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_NODE(OTNT_MODE, 0x0006), + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_NODE(OTNT_MODE, 0x0006), }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0023, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0021, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0022, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x001F, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0020, }, { /* 00 */ 0x033B, /* 01 */ 0x0086, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x033C, /* 01 */ 0x0085, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04E9, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04E8, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04EB, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04EA, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0035, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0034, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03CB, }, { /* 00 */ 0x03BF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03C0, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03DF, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03E3, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0000), + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0000), }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x00B5, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0408, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x02B7, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0001), + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0001), }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x00B2, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x00B1, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x037C, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03CC, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03D5, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03D4, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03DE, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03DD, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0024, }, { /* 00 */ 0x0067, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0064, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x005C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x005B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x005E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0063, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x005D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x005A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0069, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0066, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0068, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0065, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0061, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0060, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0062, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x005F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0357, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0356, }, { @@ -4253,38 +4253,38 @@ const VXOpcodeTreeNode vxOptreeMandatory[][4] = }, { /* 00 */ 0x04ED, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x04EE, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x04C9, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x04CA, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0032, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0031, }, { /* 00 */ 0x0030, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x002F, }, { /* 00 */ 0x039A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0399, }, { /* 00 */ 0x06BE, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x06BD, }, { @@ -4307,7 +4307,7 @@ const VXOpcodeTreeNode vxOptreeMandatory[][4] = }, { /* 00 */ 0x0088, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x0099, /* 03 */ 0x008E, }, @@ -4337,97 +4337,97 @@ const VXOpcodeTreeNode vxOptreeMandatory[][4] = }, { /* 00 */ 0x04A2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04A3, }, { /* 00 */ 0x04A7, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04A8, }, { /* 00 */ 0x04A5, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04A4, }, { /* 00 */ 0x03AA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03AB, }, { /* 00 */ 0x03D7, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03D6, }, { /* 00 */ 0x03DC, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03DB, }, { /* 00 */ 0x03D8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03D9, }, { /* 00 */ 0x03AD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03AE, }, { /* 00 */ 0x049B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x049C, }, { /* 00 */ 0x04A1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04A0, }, { /* 00 */ 0x049E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x049D, }, { /* 00 */ 0x03A8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03A9, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04A6, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x049F, }, { - /* 00 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0002), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0003), + /* 00 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0002), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0003), }, { /* 00 */ 0x0363, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x034A, /* 03 */ 0x0348, }, @@ -4438,478 +4438,478 @@ const VXOpcodeTreeNode vxOptreeMandatory[][4] = /* 03 */ 0x045D, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0004), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_NODE(OTNT_MODRM_REG, 0x0005), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0004), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0005), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0006), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_NODE(OTNT_MODRM_REG, 0x0007), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0006), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0007), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0008), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_NODE(OTNT_MODRM_REG, 0x0009), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0008), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0009), }, { /* 00 */ 0x03CD, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03CE, }, { /* 00 */ 0x03D2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03D3, }, { /* 00 */ 0x03D0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03CF, }, { /* 00 */ 0x00B3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VENDOR, 0x0013), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x0013), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VENDOR, 0x0014), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x0014), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x029C, - /* 02 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x029B, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x029F, - /* 02 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x029E, }, { - /* 00 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0004), - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0004), + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x035F, - /* 03 */ VX_NODE(OTNT_OPERAND_SIZE, 0x0005), + /* 03 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0005), }, { /* 00 */ 0x0362, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x034B, /* 03 */ 0x0349, }, { /* 00 */ 0x02E9, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02E3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02C9, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02DF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02CF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02E0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02CC, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02C8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02EE, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02E7, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02EA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02E4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02D6, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02D4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02D7, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02D2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0512, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x050F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0507, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0506, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0509, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x050E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0508, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0505, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0514, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0511, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0513, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0510, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x050C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x050B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x050D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x050A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x04B5, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x044A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0083, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0044, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0524, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0523, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000A), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000A), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000B), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000B), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x04B6, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0444, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x04EC, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x004A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x052C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x052B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000C), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000C), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000D), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000D), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02A2, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x007C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x007D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0308, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0048, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02F8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x02FA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x037B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x037A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, /* 02 */ 0x044D, - /* 03 */ VX_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000E), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000E), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0046, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0039, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x003A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0373, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0374, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x06A1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x06A0, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0075, @@ -4919,373 +4919,373 @@ const VXOpcodeTreeNode vxOptreeMandatory[][4] = }, { /* 00 */ 0x035A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x040D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x040C, }, { /* 00 */ 0x03E4, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03E5, }, { /* 00 */ 0x052E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x052D, }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x000F), - /* 01 */ VX_INVALID, - /* 02 */ VX_NODE(OTNT_MODRM_REG, 0x0010), - /* 03 */ VX_NODE(OTNT_MODRM_REG, 0x0011), + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000F), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0010), + /* 03 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0011), }, { - /* 00 */ VX_NODE(OTNT_MODRM_REG, 0x0012), - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0012), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x003F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x003D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0040, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x003C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x003E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x003B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0042, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0041, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x001E, - /* 02 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x001D, }, { /* 00 */ 0x0487, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0488, }, { /* 00 */ 0x047D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x047F, }, { /* 00 */ 0x0483, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0484, }, { /* 00 */ 0x03B3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03B4, }, { /* 00 */ 0x0439, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x043A, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x0347, /* 02 */ 0x0366, /* 03 */ 0x0361, }, { /* 00 */ 0x0422, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0423, }, { /* 00 */ 0x0494, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0493, }, { /* 00 */ 0x0496, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0495, }, { /* 00 */ 0x041E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x041F, }, { /* 00 */ 0x03C1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03C2, }, { /* 00 */ 0x03BA, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03B9, }, { /* 00 */ 0x03BB, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03BC, }, { /* 00 */ 0x0417, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0416, }, { /* 00 */ 0x03C3, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03C4, }, { /* 00 */ 0x03C5, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03C6, }, { /* 00 */ 0x047A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x047B, }, { /* 00 */ 0x0477, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0474, }, { /* 00 */ 0x03C8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03C9, }, { /* 00 */ 0x0434, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0435, }, { /* 00 */ 0x0436, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0437, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x0089, /* 02 */ 0x0087, /* 03 */ 0x0097, }, { /* 00 */ 0x035D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0358, }, { /* 00 */ 0x048F, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0490, }, { /* 00 */ 0x0492, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0491, }, { /* 00 */ 0x041C, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x041D, }, { /* 00 */ 0x0453, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0452, }, { /* 00 */ 0x03B6, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03B5, }, { /* 00 */ 0x03B8, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03B7, }, { /* 00 */ 0x0414, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0415, }, { /* 00 */ 0x04C1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x04C2, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x02F1, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, }, { /* 00 */ 0x0472, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0471, }, { /* 00 */ 0x0469, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0467, }, { /* 00 */ 0x046E, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x046F, }, { /* 00 */ 0x043B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x043C, }, { /* 00 */ 0x0411, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0410, }, { /* 00 */ 0x045A, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0459, }, { /* 00 */ 0x030B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x030A, }, { /* 00 */ 0x0489, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x048A, }, { /* 00 */ 0x0498, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x0497, }, { /* 00 */ 0x048B, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x048C, }, { /* 00 */ 0x048D, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x048E, }, { /* 00 */ 0x03AF, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03B0, }, { /* 00 */ 0x03BE, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03BD, }, { /* 00 */ 0x03B1, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, /* 03 */ 0x03B2, }, }; -const VXOpcodeTreeNode vxOptreeX87[][64] = +const ZyDisOpcodeTreeNode vxOptreeX87[][64] = { { /* 00 */ 0x00BC, @@ -5371,13 +5371,13 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 0E */ 0x027F, /* 0F */ 0x0284, /* 10 */ 0x01E7, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ VX_INVALID, - /* 17 */ VX_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_INVALID, /* 18 */ 0x0213, /* 19 */ 0x0212, /* 1A */ 0x0215, @@ -5388,12 +5388,12 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 1F */ 0x0210, /* 20 */ 0x00D4, /* 21 */ 0x00B7, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, /* 24 */ 0x025A, /* 25 */ 0x027C, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, /* 28 */ 0x01C1, /* 29 */ 0x01C5, /* 2A */ 0x01C4, @@ -5401,7 +5401,7 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 2C */ 0x01C6, /* 2D */ 0x01C7, /* 2E */ 0x01C9, - /* 2F */ VX_INVALID, + /* 2F */ ZYDIS_INVALID, /* 30 */ 0x00B6, /* 31 */ 0x0298, /* 32 */ 0x01F1, @@ -5452,38 +5452,38 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 1D */ 0x0110, /* 1E */ 0x0111, /* 1F */ 0x0112, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, /* 29 */ 0x027B, - /* 2A */ VX_INVALID, - /* 2B */ VX_INVALID, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, }, { /* 00 */ 0x00F0, @@ -5524,8 +5524,8 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 23 */ 0x01E6, /* 24 */ 0x01E9, /* 25 */ 0x01F4, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, /* 28 */ 0x0269, /* 29 */ 0x026A, /* 2A */ 0x0265, @@ -5542,14 +5542,14 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 35 */ 0x012E, /* 36 */ 0x012D, /* 37 */ 0x012C, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, }, { /* 00 */ 0x00B9, @@ -5666,22 +5666,22 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 2D */ 0x0273, /* 2E */ 0x0276, /* 2F */ 0x0275, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, }, { /* 00 */ 0x00CC, @@ -5708,14 +5708,14 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 15 */ 0x014A, /* 16 */ 0x014D, /* 17 */ 0x014C, - /* 18 */ VX_INVALID, + /* 18 */ ZYDIS_INVALID, /* 19 */ 0x0152, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, - /* 1C */ VX_INVALID, - /* 1D */ VX_INVALID, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, /* 20 */ 0x0258, /* 21 */ 0x0259, /* 22 */ 0x0256, @@ -5783,13 +5783,13 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 1E */ 0x0222, /* 1F */ 0x0223, /* 20 */ 0x01EC, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, /* 28 */ 0x0271, /* 29 */ 0x0272, /* 2A */ 0x026D, @@ -5806,18 +5806,18 @@ const VXOpcodeTreeNode vxOptreeX87[][64] = /* 35 */ 0x0130, /* 36 */ 0x0131, /* 37 */ 0x0132, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, }, }; -const VXOpcodeTreeNode vxOptreeAddressSize[][3] = +const ZyDisOpcodeTreeNode vxOptreeAddressSize[][3] = { { /* 00 */ 0x02CD, @@ -5826,7 +5826,7 @@ const VXOpcodeTreeNode vxOptreeAddressSize[][3] = }, }; -const VXOpcodeTreeNode vxOptreeOperandSize[][3] = +const ZyDisOpcodeTreeNode vxOptreeOperandSize[][3] = { { /* 00 */ 0x03E0, @@ -5864,24 +5864,24 @@ const VXOpcodeTreeNode vxOptreeOperandSize[][3] = /* 02 */ 0x007E, }, { - /* 00 */ VX_NODE(OTNT_MODE, 0x000F), - /* 01 */ VX_NODE(OTNT_MODE, 0x0010), - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x000F), + /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x0010), + /* 02 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODE, 0x0011), - /* 01 */ VX_NODE(OTNT_MODE, 0x0012), - /* 02 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0011), + /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x0012), + /* 02 */ ZYDIS_INVALID, }, { /* 00 */ 0x02B8, /* 01 */ 0x02B6, - /* 02 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, }, { /* 00 */ 0x03A1, /* 01 */ 0x03A0, - /* 02 */ VX_INVALID, + /* 02 */ ZYDIS_INVALID, }, { /* 00 */ 0x0050, @@ -5894,14 +5894,14 @@ const VXOpcodeTreeNode vxOptreeOperandSize[][3] = /* 02 */ 0x0084, }, { - /* 00 */ VX_NODE(OTNT_MODE, 0x001E), - /* 01 */ VX_NODE(OTNT_MODE, 0x001F), - /* 02 */ VX_NODE(OTNT_MODE, 0x0020), + /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x001E), + /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x001F), + /* 02 */ ZYDIS_NODE(OTNT_MODE, 0x0020), }, { - /* 00 */ VX_NODE(OTNT_MODE, 0x0021), - /* 01 */ VX_NODE(OTNT_MODE, 0x0022), - /* 02 */ VX_NODE(OTNT_MODE, 0x0023), + /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0021), + /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x0022), + /* 02 */ ZYDIS_NODE(OTNT_MODE, 0x0023), }, { /* 00 */ 0x0372, @@ -5939,9 +5939,9 @@ const VXOpcodeTreeNode vxOptreeOperandSize[][3] = /* 02 */ 0x05D6, }, { - /* 00 */ VX_NODE(OTNT_VEXW, 0x000E), - /* 01 */ VX_NODE(OTNT_VEXW, 0x000F), - /* 02 */ VX_NODE(OTNT_VEXW, 0x0010), + /* 00 */ ZYDIS_NODE(OTNT_VEXW, 0x000E), + /* 01 */ ZYDIS_NODE(OTNT_VEXW, 0x000F), + /* 02 */ ZYDIS_NODE(OTNT_VEXW, 0x0010), }, { /* 00 */ 0x02C6, @@ -5950,87 +5950,87 @@ const VXOpcodeTreeNode vxOptreeOperandSize[][3] = }, }; -const VXOpcodeTreeNode vxOptreeMode[][2] = +const ZyDisOpcodeTreeNode vxOptreeMode[][2] = { { /* 00 */ 0x04AA, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0445, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x04AD, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0553, - /* 01 */ VX_NODE(OTNT_VENDOR, 0x000D), + /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x000D), }, { /* 00 */ 0x0555, - /* 01 */ VX_NODE(OTNT_VENDOR, 0x000E), + /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x000E), }, { - /* 00 */ VX_NODE(OTNT_VENDOR, 0x000F), - /* 01 */ VX_NODE(OTNT_VENDOR, 0x0010), + /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x000F), + /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x0010), }, { - /* 00 */ VX_NODE(OTNT_VENDOR, 0x0011), - /* 01 */ VX_NODE(OTNT_VENDOR, 0x0012), + /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x0011), + /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x0012), }, { /* 00 */ 0x04AC, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0446, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x04A9, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0443, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x009F, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x00A0, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0001, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0004, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x04BA, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x04BB, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x044B, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x044C, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0038, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0033, @@ -6038,39 +6038,39 @@ const VXOpcodeTreeNode vxOptreeMode[][2] = }, { /* 00 */ 0x0011, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0398, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0007, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x04FC, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x002A, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0546, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x06B3, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0073, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x004F, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x04C0, @@ -6081,52 +6081,52 @@ const VXOpcodeTreeNode vxOptreeMode[][2] = /* 01 */ 0x04BE, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x04BD, }, { /* 00 */ 0x0451, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x044E, /* 01 */ 0x0450, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x044F, }, { /* 00 */ 0x02F6, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VEXW, 0x0014), - /* 01 */ VX_NODE(OTNT_VEXW, 0x0015), + /* 00 */ ZYDIS_NODE(OTNT_VEXW, 0x0014), + /* 01 */ ZYDIS_NODE(OTNT_VEXW, 0x0015), }, { /* 00 */ 0x02F3, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x02BC, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0003, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0002, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x04F0, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x02DC, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x004D, @@ -6134,517 +6134,517 @@ const VXOpcodeTreeNode vxOptreeMode[][2] = }, }; -const VXOpcodeTreeNode vxOptreeVendor[][2] = +const ZyDisOpcodeTreeNode vxOptreeVendor[][2] = { { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05AC, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05B2, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05EB, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05F3, }, { /* 00 */ 0x05EC, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x05B4, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x05B3, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x05ED, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x053A, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0056, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0530, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x02C1, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x04D5, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x0552, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x0554, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x02BE, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x02BF, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x02C3, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x02C2, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05EA, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05F2, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05E8, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05E9, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05F4, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05AD, }, }; -const VXOpcodeTreeNode vxOptree3dnow[][256] = +const ZyDisOpcodeTreeNode vxOptree3dnow[][256] = { { - /* 00 */ VX_INVALID, - /* 01 */ VX_INVALID, - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_INVALID, - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_INVALID, - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, /* 0C */ 0x0407, /* 0D */ 0x0406, - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, - /* 10 */ VX_INVALID, - /* 11 */ VX_INVALID, - /* 12 */ VX_INVALID, - /* 13 */ VX_INVALID, - /* 14 */ VX_INVALID, - /* 15 */ VX_INVALID, - /* 16 */ VX_INVALID, - /* 17 */ VX_INVALID, - /* 18 */ VX_INVALID, - /* 19 */ VX_INVALID, - /* 1A */ VX_INVALID, - /* 1B */ VX_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, /* 1C */ 0x03E7, /* 1D */ 0x03E6, - /* 1E */ VX_INVALID, - /* 1F */ VX_INVALID, - /* 20 */ VX_INVALID, - /* 21 */ VX_INVALID, - /* 22 */ VX_INVALID, - /* 23 */ VX_INVALID, - /* 24 */ VX_INVALID, - /* 25 */ VX_INVALID, - /* 26 */ VX_INVALID, - /* 27 */ VX_INVALID, - /* 28 */ VX_INVALID, - /* 29 */ VX_INVALID, - /* 2A */ VX_INVALID, - /* 2B */ VX_INVALID, - /* 2C */ VX_INVALID, - /* 2D */ VX_INVALID, - /* 2E */ VX_INVALID, - /* 2F */ VX_INVALID, - /* 30 */ VX_INVALID, - /* 31 */ VX_INVALID, - /* 32 */ VX_INVALID, - /* 33 */ VX_INVALID, - /* 34 */ VX_INVALID, - /* 35 */ VX_INVALID, - /* 36 */ VX_INVALID, - /* 37 */ VX_INVALID, - /* 38 */ VX_INVALID, - /* 39 */ VX_INVALID, - /* 3A */ VX_INVALID, - /* 3B */ VX_INVALID, - /* 3C */ VX_INVALID, - /* 3D */ VX_INVALID, - /* 3E */ VX_INVALID, - /* 3F */ VX_INVALID, - /* 40 */ VX_INVALID, - /* 41 */ VX_INVALID, - /* 42 */ VX_INVALID, - /* 43 */ VX_INVALID, - /* 44 */ VX_INVALID, - /* 45 */ VX_INVALID, - /* 46 */ VX_INVALID, - /* 47 */ VX_INVALID, - /* 48 */ VX_INVALID, - /* 49 */ VX_INVALID, - /* 4A */ VX_INVALID, - /* 4B */ VX_INVALID, - /* 4C */ VX_INVALID, - /* 4D */ VX_INVALID, - /* 4E */ VX_INVALID, - /* 4F */ VX_INVALID, - /* 50 */ VX_INVALID, - /* 51 */ VX_INVALID, - /* 52 */ VX_INVALID, - /* 53 */ VX_INVALID, - /* 54 */ VX_INVALID, - /* 55 */ VX_INVALID, - /* 56 */ VX_INVALID, - /* 57 */ VX_INVALID, - /* 58 */ VX_INVALID, - /* 59 */ VX_INVALID, - /* 5A */ VX_INVALID, - /* 5B */ VX_INVALID, - /* 5C */ VX_INVALID, - /* 5D */ VX_INVALID, - /* 5E */ VX_INVALID, - /* 5F */ VX_INVALID, - /* 60 */ VX_INVALID, - /* 61 */ VX_INVALID, - /* 62 */ VX_INVALID, - /* 63 */ VX_INVALID, - /* 64 */ VX_INVALID, - /* 65 */ VX_INVALID, - /* 66 */ VX_INVALID, - /* 67 */ VX_INVALID, - /* 68 */ VX_INVALID, - /* 69 */ VX_INVALID, - /* 6A */ VX_INVALID, - /* 6B */ VX_INVALID, - /* 6C */ VX_INVALID, - /* 6D */ VX_INVALID, - /* 6E */ VX_INVALID, - /* 6F */ VX_INVALID, - /* 70 */ VX_INVALID, - /* 71 */ VX_INVALID, - /* 72 */ VX_INVALID, - /* 73 */ VX_INVALID, - /* 74 */ VX_INVALID, - /* 75 */ VX_INVALID, - /* 76 */ VX_INVALID, - /* 77 */ VX_INVALID, - /* 78 */ VX_INVALID, - /* 79 */ VX_INVALID, - /* 7A */ VX_INVALID, - /* 7B */ VX_INVALID, - /* 7C */ VX_INVALID, - /* 7D */ VX_INVALID, - /* 7E */ VX_INVALID, - /* 7F */ VX_INVALID, - /* 80 */ VX_INVALID, - /* 81 */ VX_INVALID, - /* 82 */ VX_INVALID, - /* 83 */ VX_INVALID, - /* 84 */ VX_INVALID, - /* 85 */ VX_INVALID, - /* 86 */ VX_INVALID, - /* 87 */ VX_INVALID, - /* 88 */ VX_INVALID, - /* 89 */ VX_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, /* 8A */ 0x03F0, - /* 8B */ VX_INVALID, - /* 8C */ VX_INVALID, - /* 8D */ VX_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, /* 8E */ 0x03F1, - /* 8F */ VX_INVALID, + /* 8F */ ZYDIS_INVALID, /* 90 */ 0x03EB, - /* 91 */ VX_INVALID, - /* 92 */ VX_INVALID, - /* 93 */ VX_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, /* 94 */ 0x03EE, - /* 95 */ VX_INVALID, + /* 95 */ ZYDIS_INVALID, /* 96 */ 0x03F2, /* 97 */ 0x03F6, - /* 98 */ VX_INVALID, - /* 99 */ VX_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, /* 9A */ 0x03F7, - /* 9B */ VX_INVALID, - /* 9C */ VX_INVALID, - /* 9D */ VX_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, /* 9E */ 0x03E9, - /* 9F */ VX_INVALID, + /* 9F */ ZYDIS_INVALID, /* A0 */ 0x03EC, - /* A1 */ VX_INVALID, - /* A2 */ VX_INVALID, - /* A3 */ VX_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, /* A4 */ 0x03ED, - /* A5 */ VX_INVALID, + /* A5 */ ZYDIS_INVALID, /* A6 */ 0x03F3, /* A7 */ 0x03F5, - /* A8 */ VX_INVALID, - /* A9 */ VX_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, /* AA */ 0x03F8, - /* AB */ VX_INVALID, - /* AC */ VX_INVALID, - /* AD */ VX_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, /* AE */ 0x03E8, - /* AF */ VX_INVALID, + /* AF */ ZYDIS_INVALID, /* B0 */ 0x03EA, - /* B1 */ VX_INVALID, - /* B2 */ VX_INVALID, - /* B3 */ VX_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, /* B4 */ 0x03EF, - /* B5 */ VX_INVALID, + /* B5 */ ZYDIS_INVALID, /* B6 */ 0x03F4, /* B7 */ 0x0433, - /* B8 */ VX_INVALID, - /* B9 */ VX_INVALID, - /* BA */ VX_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, /* BB */ 0x0499, - /* BC */ VX_INVALID, - /* BD */ VX_INVALID, - /* BE */ VX_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, /* BF */ 0x03C7, - /* C0 */ VX_INVALID, - /* C1 */ VX_INVALID, - /* C2 */ VX_INVALID, - /* C3 */ VX_INVALID, - /* C4 */ VX_INVALID, - /* C5 */ VX_INVALID, - /* C6 */ VX_INVALID, - /* C7 */ VX_INVALID, - /* C8 */ VX_INVALID, - /* C9 */ VX_INVALID, - /* CA */ VX_INVALID, - /* CB */ VX_INVALID, - /* CC */ VX_INVALID, - /* CD */ VX_INVALID, - /* CE */ VX_INVALID, - /* CF */ VX_INVALID, - /* D0 */ VX_INVALID, - /* D1 */ VX_INVALID, - /* D2 */ VX_INVALID, - /* D3 */ VX_INVALID, - /* D4 */ VX_INVALID, - /* D5 */ VX_INVALID, - /* D6 */ VX_INVALID, - /* D7 */ VX_INVALID, - /* D8 */ VX_INVALID, - /* D9 */ VX_INVALID, - /* DA */ VX_INVALID, - /* DB */ VX_INVALID, - /* DC */ VX_INVALID, - /* DD */ VX_INVALID, - /* DE */ VX_INVALID, - /* DF */ VX_INVALID, - /* E0 */ VX_INVALID, - /* E1 */ VX_INVALID, - /* E2 */ VX_INVALID, - /* E3 */ VX_INVALID, - /* E4 */ VX_INVALID, - /* E5 */ VX_INVALID, - /* E6 */ VX_INVALID, - /* E7 */ VX_INVALID, - /* E8 */ VX_INVALID, - /* E9 */ VX_INVALID, - /* EA */ VX_INVALID, - /* EB */ VX_INVALID, - /* EC */ VX_INVALID, - /* ED */ VX_INVALID, - /* EE */ VX_INVALID, - /* EF */ VX_INVALID, - /* F0 */ VX_INVALID, - /* F1 */ VX_INVALID, - /* F2 */ VX_INVALID, - /* F3 */ VX_INVALID, - /* F4 */ VX_INVALID, - /* F5 */ VX_INVALID, - /* F6 */ VX_INVALID, - /* F7 */ VX_INVALID, - /* F8 */ VX_INVALID, - /* F9 */ VX_INVALID, - /* FA */ VX_INVALID, - /* FB */ VX_INVALID, - /* FC */ VX_INVALID, - /* FD */ VX_INVALID, - /* FE */ VX_INVALID, - /* FF */ VX_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, }, }; -const VXOpcodeTreeNode vxOptreeVex[][16] = +const ZyDisOpcodeTreeNode vxOptreeVex[][16] = { { - /* 00 */ VX_NODE(OTNT_MODE, 0x0024), - /* 01 */ VX_NODE(OTNT_TABLE, 0x0004), - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_NODE(OTNT_TABLE, 0x0005), - /* 06 */ VX_NODE(OTNT_TABLE, 0x0006), - /* 07 */ VX_NODE(OTNT_TABLE, 0x0007), - /* 08 */ VX_INVALID, - /* 09 */ VX_NODE(OTNT_TABLE, 0x0008), - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_NODE(OTNT_TABLE, 0x0009), - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0024), + /* 01 */ ZYDIS_NODE(OTNT_TABLE, 0x0004), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_NODE(OTNT_TABLE, 0x0005), + /* 06 */ ZYDIS_NODE(OTNT_TABLE, 0x0006), + /* 07 */ ZYDIS_NODE(OTNT_TABLE, 0x0007), + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_NODE(OTNT_TABLE, 0x0008), + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_NODE(OTNT_TABLE, 0x0009), + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_MODE, 0x0026), - /* 01 */ VX_NODE(OTNT_TABLE, 0x0004), - /* 02 */ VX_INVALID, - /* 03 */ VX_INVALID, - /* 04 */ VX_INVALID, - /* 05 */ VX_NODE(OTNT_TABLE, 0x0005), - /* 06 */ VX_INVALID, - /* 07 */ VX_INVALID, - /* 08 */ VX_INVALID, - /* 09 */ VX_NODE(OTNT_TABLE, 0x0008), - /* 0A */ VX_INVALID, - /* 0B */ VX_INVALID, - /* 0C */ VX_INVALID, - /* 0D */ VX_NODE(OTNT_TABLE, 0x0009), - /* 0E */ VX_INVALID, - /* 0F */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0026), + /* 01 */ ZYDIS_NODE(OTNT_TABLE, 0x0004), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_NODE(OTNT_TABLE, 0x0005), + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_NODE(OTNT_TABLE, 0x0008), + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_NODE(OTNT_TABLE, 0x0009), + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, }, }; -const VXOpcodeTreeNode vxOptreeVexW[][2] = +const ZyDisOpcodeTreeNode vxOptreeVexW[][2] = { { /* 00 */ 0x061D, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x061C, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0692, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0691, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x057B, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VEXL, 0x0008), - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x0008), + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x05A6, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x05A5, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x05A7, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x05A4, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x061E, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x061B, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VEXL, 0x0009), - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x0009), + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x061F, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0620, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0621, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x0622, }, { - /* 00 */ VX_NODE(OTNT_VEXL, 0x000A), - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000A), + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VEXL, 0x000B), - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000B), + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VEXL, 0x000C), - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000C), + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VEXL, 0x000D), - /* 01 */ VX_INVALID, + /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000D), + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_NODE(OTNT_VEXL, 0x000E), - /* 01 */ VX_NODE(OTNT_VEXL, 0x000F), + /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000E), + /* 01 */ ZYDIS_NODE(OTNT_VEXL, 0x000F), }, { /* 00 */ 0x0579, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x0578, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x060B, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, }; -const VXOpcodeTreeNode vxOptreeVexL[][2] = +const ZyDisOpcodeTreeNode vxOptreeVexL[][2] = { { /* 00 */ 0x069C, @@ -6652,68 +6652,68 @@ const VXOpcodeTreeNode vxOptreeVexL[][2] = }, { /* 00 */ 0x0660, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x065A, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x065E, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x063F, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x065F, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x065B, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x065D, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x057A, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x061A, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x05A0, }, { - /* 00 */ VX_INVALID, + /* 00 */ ZYDIS_INVALID, /* 01 */ 0x059A, }, { /* 00 */ 0x062C, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x062E, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x062D, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, { /* 00 */ 0x062F, - /* 01 */ VX_INVALID, + /* 01 */ ZYDIS_INVALID, }, }; -#undef VX_INVALID -#undef VX_NODE +#undef ZYDIS_INVALID +#undef ZYDIS_NODE #define OPI_NONE { DOT_NONE, DOS_NA } #define OPI_AL { DOT_AL, DOS_B } @@ -6857,7 +6857,7 @@ const VXOpcodeTreeNode vxOptreeVexL[][2] = #define OPI_sIb { DOT_sI, DOS_B } #define OPI_sIz { DOT_sI, DOS_Z } -const VXInstructionDefinition vxInstrDefinitions[] = +const ZyDisInstructionDefinition vxInstrDefinitions[] = { /* 000 */ { MNEM_INVALID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, /* 001 */ { MNEM_AAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, @@ -8548,8 +8548,8 @@ const VXInstructionDefinition vxInstrDefinitions[] = /* 696 */ { MNEM_VUNPCKHPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, /* 697 */ { MNEM_VUNPCKLPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, /* 698 */ { MNEM_VUNPCKLPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 699 */ { MNEM_VXORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 69A */ { MNEM_VXORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 699 */ { MNEM_ZyDisORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 69A */ { MNEM_ZyDisORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, /* 69B */ { MNEM_VZEROALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, /* 69C */ { MNEM_VZEROUPPER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, /* 69D */ { MNEM_WAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, @@ -9645,5 +9645,5 @@ const char* vxInstrMnemonicStrings[] = /* 388 */ "xstore", }; -#undef VX_NODE -#undef VX_INVALID \ No newline at end of file +#undef ZYDIS_NODE +#undef ZYDIS_INVALID \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXOpcodeTable.h b/VerteronDisassemblerEngine/ZyDisOpcodeTable.h similarity index 97% rename from VerteronDisassemblerEngine/VXOpcodeTable.h rename to VerteronDisassemblerEngine/ZyDisOpcodeTable.h index f36cc41..472ee34 100644 --- a/VerteronDisassemblerEngine/VXOpcodeTable.h +++ b/VerteronDisassemblerEngine/ZyDisOpcodeTable.h @@ -30,8 +30,8 @@ **************************************************************************************************/ -#ifndef _VDE_VXOPCODETABLEC_H_ -#define _VDE_VXOPCODETABLEC_H_ +#ifndef _VDE_ZyDisOPCODETABLEC_H_ +#define _VDE_ZyDisOPCODETABLEC_H_ #include #include @@ -44,7 +44,7 @@ extern "C" /** * @brief Values that represent an instruction mnemonic. */ -typedef enum _VXInstructionMnemonic /* : uint16_t */ +typedef enum _ZyDisInstructionMnemonic /* : uint16_t */ { /* 000 */ MNEM_INVALID, /* 001 */ MNEM_AAA, @@ -926,8 +926,8 @@ typedef enum _VXInstructionMnemonic /* : uint16_t */ /* 36D */ MNEM_VUNPCKHPS, /* 36E */ MNEM_VUNPCKLPD, /* 36F */ MNEM_VUNPCKLPS, - /* 370 */ MNEM_VXORPD, - /* 371 */ MNEM_VXORPS, + /* 370 */ MNEM_ZyDisORPD, + /* 371 */ MNEM_ZyDisORPS, /* 372 */ MNEM_VZEROALL, /* 373 */ MNEM_VZEROUPPER, /* 374 */ MNEM_WAIT, @@ -953,18 +953,18 @@ typedef enum _VXInstructionMnemonic /* : uint16_t */ /* 388 */ MNEM_XSTORE, MNEM_FORCE_WORD = 0x7FFF -} VXInstructionMnemonic; +} ZyDisInstructionMnemonic; /** * @brief Defines an alias representing an opcode tree node. An opcode tree node is a 16 bit * unsigned integer value with its first 4 bits reserved for the node type. */ -typedef uint16_t VXOpcodeTreeNode; +typedef uint16_t ZyDisOpcodeTreeNode; /** * @brief Values that represent the type of an opcode tree node. */ -typedef enum _VXOpcodeTreeNodeType /* : uint8_t */ +typedef enum _ZyDisOpcodeTreeNodeType /* : uint8_t */ { /** * @brief Reference to a concrete instruction definition. @@ -1026,12 +1026,12 @@ typedef enum _VXOpcodeTreeNodeType /* : uint8_t */ * @brief Reference to a vex_l switch table. */ OTNT_VEXL = 14 -} VXOpcodeTreeNodeType; +} ZyDisOpcodeTreeNodeType; /** * @brief Values that represent the type of an operand in the instruction definition. */ -typedef enum _VXDefinedOperandType /* : uint8_t */ +typedef enum _ZyDisDefinedOperandType /* : uint8_t */ { /* * @brief No operand. @@ -1286,13 +1286,13 @@ typedef enum _VXDefinedOperandType /* : uint8_t */ * @brief Floating point register 7. */ DOT_ST7 -} VXDefinedOperandType; +} ZyDisDefinedOperandType; /** * @brief Values that represent the size of an operand in the instruction definition. * Do not change the order or the values of this enum! */ -typedef enum _VXDefinedOperandSize /* : uint8_t */ +typedef enum _ZyDisDefinedOperandSize /* : uint8_t */ { /** * @brief No operand. @@ -1386,13 +1386,13 @@ typedef enum _VXDefinedOperandSize /* : uint8_t */ * @brief Q sized register or O sized memory operand. */ DOS_QO = (DOS_Q << 4) | DOS_O, -} VXDefinedOperandSize; +} ZyDisDefinedOperandSize; /** * @brief Values that represent optional flags in the instruction definition. * Do not change the order or the values of this enum! */ -typedef enum _VXInstructionDefinitionFlags /* : uint16_t */ +typedef enum _ZyDisInstructionDefinitionFlags /* : uint16_t */ { /** * @brief The instruction accepts the rex.b prefix value. @@ -1456,49 +1456,49 @@ typedef enum _VXInstructionDefinitionFlags /* : uint16_t */ IDF_OPERAND2_READWRITE = 0x4000, IDF_FORCE_WORD = 0x7FFF -} VXInstructionDefinitionFlags; +} ZyDisInstructionDefinitionFlags; #pragma pack (push, 1) /** * @brief An operand definition. */ -typedef struct _VXOperandDefinition +typedef struct _ZyDisOperandDefinition { /** * @brief The defined operand type. - * @see VXDefinedOperandType + * @see ZyDisDefinedOperandType */ uint8_t type; /** * @brief The defined operand size. - * @see VXDefinedOperandType + * @see ZyDisDefinedOperandType */ uint8_t size; -} VXOperandDefinition; +} ZyDisOperandDefinition; /** * @brief An instruction definition. */ -typedef struct _VXInstructionDefinition +typedef struct _ZyDisInstructionDefinition { /** * @brief The instruction mnemonic. - * @see VXInstructionMnemonic + * @see ZyDisInstructionMnemonic */ uint16_t mnemonic; /** * @brief The operand definitions for all four possible operands. */ - VXOperandDefinition operand[4]; + ZyDisOperandDefinition operand[4]; /** * @brief Additional flags for the instruction definition. */ uint16_t flags; -} VXInstructionDefinition; +} ZyDisInstructionDefinition; #pragma pack (pop) #ifdef __cplusplus } #endif -#endif // _VDE_VXOPCODETABLEC_H_ \ No newline at end of file +#endif // _VDE_ZyDisOPCODETABLEC_H_ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/VXOpcodeTableInternal.h b/VerteronDisassemblerEngine/ZyDisOpcodeTableInternal.h similarity index 77% rename from VerteronDisassemblerEngine/VXOpcodeTableInternal.h rename to VerteronDisassemblerEngine/ZyDisOpcodeTableInternal.h index 347f079..5b55354 100644 --- a/VerteronDisassemblerEngine/VXOpcodeTableInternal.h +++ b/VerteronDisassemblerEngine/ZyDisOpcodeTableInternal.h @@ -30,17 +30,17 @@ **************************************************************************************************/ -#ifndef _VDE_VXOPCODETABLEINTERNAL_H_ -#define _VDE_VXOPCODETABLEINTERNAL_H_ +#ifndef _VDE_ZyDisOPCODETABLEINTERNAL_H_ +#define _VDE_ZyDisOPCODETABLEINTERNAL_H_ #include -#include "VXOpcodeTable.h" +#include "ZyDisOpcodeTable.h" /** * @brief Contains all opcode tables. * Indexed by the numeric value of the opcode. */ -extern const VXOpcodeTreeNode vxOptreeTable[][256]; +extern const ZyDisOpcodeTreeNode vxOptreeTable[][256]; /** * @brief Contains all modrm_mod switch tables. @@ -48,19 +48,19 @@ extern const VXOpcodeTreeNode vxOptreeTable[][256]; * 0 = [modrm_mod == !11] * 1 = [modrm_mod == 11] */ -extern const VXOpcodeTreeNode vxOptreeModrmMod[][2]; +extern const ZyDisOpcodeTreeNode vxOptreeModrmMod[][2]; /** * @brief Contains all modrm_reg switch tables. * Indexed by the numeric value of the modrm_reg field. */ -extern const VXOpcodeTreeNode vxOptreeModrmReg[][8]; +extern const ZyDisOpcodeTreeNode vxOptreeModrmReg[][8]; /** * @brief Contains all modrm_rm switch tables. * Indexed by the numeric value of the modrm_rm field. */ -extern const VXOpcodeTreeNode vxOptreeModrmRm[][8]; +extern const ZyDisOpcodeTreeNode vxOptreeModrmRm[][8]; /** * @brief Contains all mandatory-prefix switch tables. @@ -70,14 +70,14 @@ extern const VXOpcodeTreeNode vxOptreeModrmRm[][8]; * 2 = F3 * 3 = 66 */ -extern const VXOpcodeTreeNode vxOptreeMandatory[][4]; +extern const ZyDisOpcodeTreeNode vxOptreeMandatory[][4]; /** * @brief Contains all x87 opcode tables. * Indexed by the numeric value of the 6 lowest bits of the modrm byte (modrm_mod should * always be 11). */ -extern const VXOpcodeTreeNode vxOptreeX87[][64]; +extern const ZyDisOpcodeTreeNode vxOptreeX87[][64]; /** * @brief Contains all address-size switch tables. @@ -86,7 +86,7 @@ extern const VXOpcodeTreeNode vxOptreeX87[][64]; * 1 = 32 * 2 = 64 */ -extern const VXOpcodeTreeNode vxOptreeAddressSize[][3]; +extern const ZyDisOpcodeTreeNode vxOptreeAddressSize[][3]; /** * @brief Contains all operand-size switch tables. @@ -95,7 +95,7 @@ extern const VXOpcodeTreeNode vxOptreeAddressSize[][3]; * 1 = 32 * 2 = 64 */ -extern const VXOpcodeTreeNode vxOptreeOperandSize[][3]; +extern const ZyDisOpcodeTreeNode vxOptreeOperandSize[][3]; /** * @brief Contains all cpu-mode switch tables. @@ -103,7 +103,7 @@ extern const VXOpcodeTreeNode vxOptreeOperandSize[][3]; * 0 = [!= 64] * 1 = 64 */ -extern const VXOpcodeTreeNode vxOptreeMode[][2]; +extern const ZyDisOpcodeTreeNode vxOptreeMode[][2]; /** * @brief Contains all vendor switch tables. @@ -111,13 +111,13 @@ extern const VXOpcodeTreeNode vxOptreeMode[][2]; * 0 = AMD * 1 = Intel */ -extern const VXOpcodeTreeNode vxOptreeVendor[][2]; +extern const ZyDisOpcodeTreeNode vxOptreeVendor[][2]; /** * @brief Contains all 3DNow! switch tables. * Indexed by the numeric value of the 3DNow! opcode. */ -extern const VXOpcodeTreeNode vxOptree3dnow[][256]; +extern const ZyDisOpcodeTreeNode vxOptree3dnow[][256]; /** * @brief Contains all vex switch tables. @@ -139,24 +139,24 @@ extern const VXOpcodeTreeNode vxOptree3dnow[][256]; * E = F2_0F38 * F = F2_0F3A */ -extern const VXOpcodeTreeNode vxOptreeVex[][16]; +extern const ZyDisOpcodeTreeNode vxOptreeVex[][16]; /** * @brief Contains all vex_w switch tables. * Indexed by the numeric value of the vex_w field. */ -extern const VXOpcodeTreeNode vxOptreeVexW[][2]; +extern const ZyDisOpcodeTreeNode vxOptreeVexW[][2]; /** * @brief Contains all vex_l switch tables. * Indexed by the numeric value of the vex_l field. */ -extern const VXOpcodeTreeNode vxOptreeVexL[][2]; +extern const ZyDisOpcodeTreeNode vxOptreeVexL[][2]; /** * @brief Contains all instruction definitions. */ -extern const VXInstructionDefinition vxInstrDefinitions[]; +extern const ZyDisInstructionDefinition vxInstrDefinitions[]; /** * @brief Contains all instruction mnemonic strings. @@ -168,9 +168,9 @@ extern const char* vxInstrMnemonicStrings[]; * @param node The node. * @return The type of the specified opcode tree node. */ -VX_INLINE VXOpcodeTreeNodeType VXGetOpcodeNodeType(VXOpcodeTreeNode node) +ZYDIS_INLINE ZyDisOpcodeTreeNodeType ZyDisGetOpcodeNodeType(ZyDisOpcodeTreeNode node) { - return (VXOpcodeTreeNodeType)((node >> 12) & 0x0F); + return (ZyDisOpcodeTreeNodeType)((node >> 12) & 0x0F); } /** @@ -178,7 +178,7 @@ VX_INLINE VXOpcodeTreeNodeType VXGetOpcodeNodeType(VXOpcodeTreeNode node) * @param node The node. * @return The value of the specified opcode tree node. */ -VX_INLINE uint16_t VXGetOpcodeNodeValue(VXOpcodeTreeNode node) +ZYDIS_INLINE uint16_t ZyDisGetOpcodeNodeValue(ZyDisOpcodeTreeNode node) { return (node & 0x0FFF); } @@ -187,7 +187,7 @@ VX_INLINE uint16_t VXGetOpcodeNodeValue(VXOpcodeTreeNode node) * @brief Returns the root node of the opcode tree. * @return The root node of the opcode tree. */ -VX_INLINE VXOpcodeTreeNode VXGetOpcodeTreeRoot() +ZYDIS_INLINE ZyDisOpcodeTreeNode ZyDisGetOpcodeTreeRoot() { return 0x1000; } @@ -198,10 +198,10 @@ VX_INLINE VXOpcodeTreeNode VXGetOpcodeTreeRoot() * @param index The index of the child node to retrieve. * @return The specified child node. */ -VX_INLINE VXOpcodeTreeNode VXGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_t index) +ZYDIS_INLINE ZyDisOpcodeTreeNode ZyDisGetOpcodeTreeChild(ZyDisOpcodeTreeNode parent, uint16_t index) { - VXOpcodeTreeNodeType nodeType = VXGetOpcodeNodeType(parent); - uint16_t tableIndex = VXGetOpcodeNodeValue(parent); + ZyDisOpcodeTreeNodeType nodeType = ZyDisGetOpcodeNodeType(parent); + uint16_t tableIndex = ZyDisGetOpcodeNodeValue(parent); switch (nodeType) { case OTNT_TABLE: @@ -257,9 +257,9 @@ VX_INLINE VXOpcodeTreeNode VXGetOpcodeTreeChild(VXOpcodeTreeNode parent, uint16_ * @param node The instruction definition node. * @return Pointer to the instruction definition. */ -VX_INLINE const VXInstructionDefinition* VXGetInstructionDefinition(VXOpcodeTreeNode node) +ZYDIS_INLINE const ZyDisInstructionDefinition* ZyDisGetInstructionDefinition(ZyDisOpcodeTreeNode node) { - assert(VXGetOpcodeNodeType(node) == OTNT_INSTRUCTION_DEFINITION); + assert(ZyDisGetOpcodeNodeType(node) == OTNT_INSTRUCTION_DEFINITION); return &vxInstrDefinitions[node & 0x0FFF]; } @@ -268,7 +268,7 @@ VX_INLINE const VXInstructionDefinition* VXGetInstructionDefinition(VXOpcodeTree * @param mnemonic The mnemonic. * @return The instruction mnemonic string. */ -VX_INLINE const char* VXGetInstructionMnemonicString(VXInstructionMnemonic mnemonic) +ZYDIS_INLINE const char* ZyDisGetInstructionMnemonicString(ZyDisInstructionMnemonic mnemonic) { return vxInstrMnemonicStrings[(uint16_t)mnemonic]; } @@ -278,7 +278,7 @@ VX_INLINE const char* VXGetInstructionMnemonicString(VXInstructionMnemonic mnemo * @param operandSize The defined operand size. * @return The the numeric value for the simple operand size definition. */ -VX_INLINE uint16_t VXGetSimpleOperandSize(VXDefinedOperandSize operandSize) +ZYDIS_INLINE uint16_t ZyDisGetSimpleOperandSize(ZyDisDefinedOperandSize operandSize) { static const uint16_t operandSizes[8] = { @@ -295,9 +295,9 @@ VX_INLINE uint16_t VXGetSimpleOperandSize(VXDefinedOperandSize operandSize) * @param operandSize The defined operand size. * @return The memory-size part of the operand size definition. */ -VX_INLINE VXDefinedOperandSize VXGetComplexOperandMemSize(VXDefinedOperandSize operandSize) +ZYDIS_INLINE ZyDisDefinedOperandSize ZyDisGetComplexOperandMemSize(ZyDisDefinedOperandSize operandSize) { - return (VXDefinedOperandSize)(operandSize & 0x0F); + return (ZyDisDefinedOperandSize)(operandSize & 0x0F); } /** @@ -305,9 +305,9 @@ VX_INLINE VXDefinedOperandSize VXGetComplexOperandMemSize(VXDefinedOperandSize o * @param operandSize The defined operand size. * @return The register-size part of the operand size definition. */ -VX_INLINE VXDefinedOperandSize VXGetComplexOperandRegSize(VXDefinedOperandSize operandSize) +ZYDIS_INLINE ZyDisDefinedOperandSize ZyDisGetComplexOperandRegSize(ZyDisDefinedOperandSize operandSize) { - return (VXDefinedOperandSize)((operandSize >> 4) & 0x0F); + return (ZyDisDefinedOperandSize)((operandSize >> 4) & 0x0F); } -#endif // _VDE_VXOPCODETABLEINTERNAL_H_ \ No newline at end of file +#endif // _VDE_ZyDisOPCODETABLEINTERNAL_H_ \ No newline at end of file From 4676a8b2d7d8b97799cc3de9b846d34ff43d6853 Mon Sep 17 00:00:00 2001 From: flobernd Date: Sat, 16 May 2015 05:05:17 +0200 Subject: [PATCH 27/33] Project name changed and C-Bindings reverted * Changed project name to Zydis * Removed Zydis (former VX) prefix from classes and enums * Renamed Verteron namespace to Zydis * Reverted C-Bindings back to the old solution * C-Bindings are now based on the C++ source again (and not the other way around) --- .../Main.c => Bindings/C/Zydis.h | 29 +- Bindings/C/ZydisInstructionDecoder.cpp | 259 + .../C/ZydisInstructionDecoder.h | 179 +- Bindings/C/ZydisInstructionFormatter.cpp | 251 + Bindings/C/ZydisInstructionFormatter.h | 104 + .../Main.c => Bindings/C/ZydisOpcodeTable.cpp | 25 +- Bindings/C/ZydisOpcodeTable.h | 961 ++ Bindings/C/ZydisSymbolResolver.cpp | 144 + Bindings/C/ZydisSymbolResolver.h | 126 + .../C/ZydisTypes.h | 212 +- Bindings/C/ZydisUtils.cpp | 46 + .../C/ZydisUtils.h | 35 +- Bindings/Cpp/ZyDisOpcodeTable.cpp | 9655 ----------------- CMakeLists.txt | 2 +- Examples/C/SimpleDemo/SimpleDemo.c | 86 + Examples/CppBindings/Main.cpp | 115 - Examples/SimpleDemo/Main.c | 123 - Examples/SymbolResolver/Main.c | 195 - README.md | 22 +- .../ZyDisDisassembler.h | 41 - .../ZyDisDisassemblerUtils.c | 74 - .../ZyDisInstructionDecoder.c | 2122 ---- .../ZyDisInstructionFormatter.c | 1136 -- .../ZyDisInstructionFormatter.h | 174 - .../ZyDisInternalConfig.h | 50 - .../ZyDisInternalHelpers.h | 197 - VerteronDisassemblerEngine/ZyDisOpcodeTable.c | 9649 ---------------- VerteronDisassemblerEngine/ZyDisOpcodeTable.h | 1504 --- .../ZyDisOpcodeTableInternal.h | 313 - .../ZyDisDisassembler.hpp => Zydis/Zydis.hpp | 27 +- .../ZydisInstructionDecoder.cpp | 751 +- .../ZydisInstructionDecoder.hpp | 248 +- .../ZydisInstructionFormatter.cpp | 260 +- .../ZydisInstructionFormatter.hpp | 181 +- Zydis/ZydisOpcodeTable.cpp | 9654 ++++++++++++++++ .../ZydisOpcodeTable.hpp | 144 +- Zydis/ZydisSymbolResolver.cpp | 91 + Zydis/ZydisSymbolResolver.hpp | 119 + .../ZydisTypes.hpp | 62 +- .../ZydisUtils.cpp | 41 +- .../ZydisUtils.hpp | 26 +- 41 files changed, 12863 insertions(+), 26570 deletions(-) rename Examples/PerformanceTest/Main.c => Bindings/C/Zydis.h (76%) create mode 100644 Bindings/C/ZydisInstructionDecoder.cpp rename VerteronDisassemblerEngine/ZyDisInstructionDecoder.h => Bindings/C/ZydisInstructionDecoder.h (52%) create mode 100644 Bindings/C/ZydisInstructionFormatter.cpp create mode 100644 Bindings/C/ZydisInstructionFormatter.h rename Examples/CustomDataSource/Main.c => Bindings/C/ZydisOpcodeTable.cpp (80%) create mode 100644 Bindings/C/ZydisOpcodeTable.h create mode 100644 Bindings/C/ZydisSymbolResolver.cpp create mode 100644 Bindings/C/ZydisSymbolResolver.h rename VerteronDisassemblerEngine/ZyDisDisassemblerTypes.h => Bindings/C/ZydisTypes.h (70%) create mode 100644 Bindings/C/ZydisUtils.cpp rename VerteronDisassemblerEngine/ZyDisDisassemblerUtils.h => Bindings/C/ZydisUtils.h (72%) delete mode 100644 Bindings/Cpp/ZyDisOpcodeTable.cpp create mode 100644 Examples/C/SimpleDemo/SimpleDemo.c delete mode 100644 Examples/CppBindings/Main.cpp delete mode 100644 Examples/SimpleDemo/Main.c delete mode 100644 Examples/SymbolResolver/Main.c delete mode 100644 VerteronDisassemblerEngine/ZyDisDisassembler.h delete mode 100644 VerteronDisassemblerEngine/ZyDisDisassemblerUtils.c delete mode 100644 VerteronDisassemblerEngine/ZyDisInstructionDecoder.c delete mode 100644 VerteronDisassemblerEngine/ZyDisInstructionFormatter.c delete mode 100644 VerteronDisassemblerEngine/ZyDisInstructionFormatter.h delete mode 100644 VerteronDisassemblerEngine/ZyDisInternalConfig.h delete mode 100644 VerteronDisassemblerEngine/ZyDisInternalHelpers.h delete mode 100644 VerteronDisassemblerEngine/ZyDisOpcodeTable.c delete mode 100644 VerteronDisassemblerEngine/ZyDisOpcodeTable.h delete mode 100644 VerteronDisassemblerEngine/ZyDisOpcodeTableInternal.h rename Bindings/Cpp/ZyDisDisassembler.hpp => Zydis/Zydis.hpp (77%) rename Bindings/Cpp/ZyDisInstructionDecoder.cpp => Zydis/ZydisInstructionDecoder.cpp (55%) rename Bindings/Cpp/ZyDisInstructionDecoder.hpp => Zydis/ZydisInstructionDecoder.hpp (70%) rename Bindings/Cpp/ZyDisInstructionFormatter.cpp => Zydis/ZydisInstructionFormatter.cpp (63%) rename Bindings/Cpp/ZyDisInstructionFormatter.hpp => Zydis/ZydisInstructionFormatter.hpp (52%) create mode 100644 Zydis/ZydisOpcodeTable.cpp rename Bindings/Cpp/ZyDisOpcodeTable.hpp => Zydis/ZydisOpcodeTable.hpp (92%) create mode 100644 Zydis/ZydisSymbolResolver.cpp create mode 100644 Zydis/ZydisSymbolResolver.hpp rename Bindings/Cpp/ZyDisDisassemblerTypes.hpp => Zydis/ZydisTypes.hpp (92%) rename Bindings/Cpp/ZyDisDisassemblerUtils.cpp => Zydis/ZydisUtils.cpp (66%) rename Bindings/Cpp/ZyDisDisassemblerUtils.hpp => Zydis/ZydisUtils.hpp (81%) diff --git a/Examples/PerformanceTest/Main.c b/Bindings/C/Zydis.h similarity index 76% rename from Examples/PerformanceTest/Main.c rename to Bindings/C/Zydis.h index 5fb82f9..49e8574 100644 --- a/Examples/PerformanceTest/Main.c +++ b/Bindings/C/Zydis.h @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : athre0z - - Last change : 19. March 2015 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,14 +26,15 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ +***************************************************************************************************/ -#include +#ifndef _ZYDIS_DISASSEMBLER_H_ +#define _ZYDIS_DISASSEMBLER_H_ -int main(int argc, char* argv[]) -{ - ZYDIS_UNUSED(argc); ZYDIS_UNUSED(argv); +#include "ZydisTypes.h" +#include "ZydisInstructionDecoder.h" +#include "ZydisInstructionFormatter.h" +#include "ZydisSymbolResolver.h" +#include "ZydisUtils.h" - // TODO: - return 0; -} +#endif /* _ZYDIS_DISASSEMBLER_H_ */ \ No newline at end of file diff --git a/Bindings/C/ZydisInstructionDecoder.cpp b/Bindings/C/ZydisInstructionDecoder.cpp new file mode 100644 index 0000000..89b622c --- /dev/null +++ b/Bindings/C/ZydisInstructionDecoder.cpp @@ -0,0 +1,259 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include "ZydisInstructionDecoder.h" +#include "ZydisInstructionDecoder.hpp" +#include "ZydisTypes.hpp" + +/* Helpers ===================================================================================== */ + +namespace +{ + +inline Zydis::BaseInput* ZydisBaseInput_CppPtr( + ZydisBaseInputContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Zydis::BaseInput* ZydisBaseInput_CppPtr( + const ZydisBaseInputContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline ZydisBaseInputContext* ZydisBaseInput_CPtr( + Zydis::BaseInput *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const ZydisBaseInputContext* ZydisBaseInput_CPtr( + const Zydis::BaseInput *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( + ZydisInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline const Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( + const ZydisInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline ZydisInstructionDecoderContext* ZydisInstructionDecoder_CPtr( + Zydis::InstructionDecoder *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const ZydisInstructionDecoderContext* ZydisInstructionDecoder_CPtr( + const Zydis::InstructionDecoder *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Zydis::InstructionDecoder* ZydisInstructionDecoder_CppPtr( + ZydisInstructionDecoderContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Zydis::InstructionDecoder* ZydisInstructionDecoder_CppPtr( + const ZydisInstructionDecoderContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline Zydis::DisassemblerMode ZydisDisassemblerMode_CppRepr( + ZydisDisassemblerMode val) +{ + return static_cast(val); +} + +inline ZydisDisassemblerMode ZydisDisassemblerMode_CRepr( + Zydis::DisassemblerMode val) +{ + return static_cast(val); +} + +inline Zydis::InstructionSetVendor ZydisInstructionSetVendor_CppRepr( + ZydisInstructionSetVendor val) +{ + return static_cast(val); +} + +inline ZydisInstructionSetVendor ZydisInstructionSetVendor_CRepr( + Zydis::InstructionSetVendor val) +{ + return static_cast(val); +} + +} + +/* BaseInput ============================================================================ */ + +void ZydisBaseInput_Release(ZydisBaseInputContext *ctx) +{ + delete ZydisBaseInput_CppPtr(ctx); +} + +uint8_t ZydisBaseInput_InputPeek(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info) +{ + return ZydisBaseInput_CppPtr(ctx)->inputPeek(*ZydisInstructionInfo_CppPtr(info)); +} + +uint8_t ZydisBaseInput_InputNext(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info) +{ + return ZydisBaseInput_CppPtr(ctx)->inputNext(*ZydisInstructionInfo_CppPtr(info)); +} + +uint8_t ZydisBaseInput_InputCurrent(const ZydisBaseInputContext *ctx) +{ + return ZydisBaseInput_CppPtr(ctx)->inputCurrent(); +} + +bool ZydisBaseInput_IsEndOfInput(const ZydisBaseInputContext *ctx) +{ + return ZydisBaseInput_CppPtr(ctx)->isEndOfInput(); +} + +uint64_t ZydisBaseInput_GetPosition(const ZydisBaseInputContext *ctx) +{ + return ZydisBaseInput_CppPtr(ctx)->getPosition(); +} + +bool ZydisBaseInput_SetPosition(ZydisBaseInputContext *ctx, uint64_t position) +{ + return ZydisBaseInput_CppPtr(ctx)->setPosition(position); +} + +/* MemoryInput ========================================================================== */ + +ZydisBaseInputContext* ZydisMemoryInput_Create(const void* buffer, size_t bufferLen) +{ + return reinterpret_cast( + new Zydis::MemoryInput(buffer, bufferLen)); +} + +/* InstructionDecoder ======================================================================== */ + +ZydisInstructionDecoderContext* ZydisInstructionDecoder_Create() +{ + return reinterpret_cast(new Zydis::InstructionDecoder); +} + +ZydisInstructionDecoderContext* ZydisInstructionDecoder_CreateEx( + ZydisBaseInputContext *input, + ZydisDisassemblerMode disassemblerMode, + ZydisInstructionSetVendor preferredVendor, + uint64_t instructionPointer) +{ + return ZydisInstructionDecoder_CPtr(new Zydis::InstructionDecoder( + ZydisBaseInput_CppPtr(input), + ZydisDisassemblerMode_CppRepr(disassemblerMode), + ZydisInstructionSetVendor_CppRepr(preferredVendor), + instructionPointer)); +} + +void ZydisInstructionDecoder_Release(ZydisInstructionDecoderContext *ctx) +{ + delete ZydisInstructionDecoder_CppPtr(ctx); +} + +bool ZydisInstructionDecoder_DecodeInstruction( + ZydisInstructionDecoderContext *ctx, ZydisInstructionInfo *info) +{ + return ZydisInstructionDecoder_CppPtr(ctx)->decodeInstruction( + *ZydisInstructionInfo_CppPtr(info)); +} + +ZydisBaseInputContext* ZydisInstructionDecoder_GetDataSource( + const ZydisInstructionDecoderContext *ctx) +{ + return ZydisBaseInput_CPtr(ZydisInstructionDecoder_CppPtr(ctx)->getDataSource()); +} + +void ZydisInstructionDecoder_SetDataSource( + ZydisInstructionDecoderContext *ctx, ZydisBaseInputContext *input) +{ + ZydisInstructionDecoder_CppPtr(ctx)->setDataSource(ZydisBaseInput_CppPtr(input)); +} + +ZydisDisassemblerMode ZydisInstructionDecoder_GetDisassemblerMode( + ZydisInstructionDecoderContext *ctx) +{ + return ZydisDisassemblerMode_CRepr(ZydisInstructionDecoder_CppPtr(ctx)->getDisassemblerMode()); +} + +void ZydisInstructionDecoder_SetDisassemblerMode( + ZydisInstructionDecoderContext *ctx, + ZydisDisassemblerMode disassemblerMode) +{ + ZydisInstructionDecoder_CppPtr(ctx)->setDisassemblerMode( + ZydisDisassemblerMode_CppRepr(disassemblerMode)); +} + +ZydisInstructionSetVendor ZydisInstructionDecoder_GetPreferredVendor( + const ZydisInstructionDecoderContext *ctx) +{ + return ZydisInstructionSetVendor_CRepr( + ZydisInstructionDecoder_CppPtr(ctx)->getPreferredVendor()); +} + +void ZydisInstructionDecoder_SetPreferredVendor( + ZydisInstructionDecoderContext *ctx, + ZydisInstructionSetVendor preferredVendor) +{ + return ZydisInstructionDecoder_CppPtr(ctx)->setPreferredVendor( + ZydisInstructionSetVendor_CppRepr(preferredVendor)); +} + +uint64_t ZydisInstructionDecoder_GetInstructionPointer( + ZydisInstructionDecoderContext *ctx) +{ + return ZydisInstructionDecoder_CppPtr(ctx)->getInstructionPointer(); +} + +void ZydisInstructionDecoder_SetInstructionPointer( + ZydisInstructionDecoderContext *ctx, + uint64_t instructionPointer) +{ + ZydisInstructionDecoder_CppPtr(ctx)->setInstructionPointer(instructionPointer); +} + +/* ============================================================================================= */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisInstructionDecoder.h b/Bindings/C/ZydisInstructionDecoder.h similarity index 52% rename from VerteronDisassemblerEngine/ZyDisInstructionDecoder.h rename to Bindings/C/ZydisInstructionDecoder.h index d75748c..f6a3bce 100644 --- a/VerteronDisassemblerEngine/ZyDisInstructionDecoder.h +++ b/Bindings/C/ZydisInstructionDecoder.h @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : athre0z - - Last change : 14. March 2015 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,14 +26,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ +***************************************************************************************************/ -#ifndef _VDE_ZyDisINSTRUCTIONDECODERC_H_ -#define _VDE_ZyDisINSTRUCTIONDECODERC_H_ - -#include "ZyDisDisassemblerTypes.h" -#include "ZyDisDisassemblerUtils.h" +#ifndef _ZYDIS_INSTRUCTIONDECODER_H_ +#define _ZYDIS_INSTRUCTIONDECODER_H_ +#include "ZydisTypes.h" #include #include @@ -44,24 +40,16 @@ extern "C" { #endif -/* ZyDisBaseDataSource ============================================================================ */ +/* BaseInput ============================================================================ */ -typedef struct _ZyDisBaseDataSourceContext { ZyDisContextDescriptor d; } ZyDisBaseDataSourceContext; - -typedef void(*ZyDisBaseDataSource_DestructionCallback)(ZyDisBaseDataSourceContext *ctx); -typedef uint8_t(*ZyDisBaseDataSource_InputCallback)(ZyDisBaseDataSourceContext *ctx); -typedef bool(*ZyDisBaseDataSource_IsEndOfInputCallback)(const ZyDisBaseDataSourceContext *ctx); -typedef uint64_t(*ZyDisBaseDataSource_GetPositionCallback)(const ZyDisBaseDataSourceContext *ctx); -typedef bool(*ZyDisBaseDataSource_SetPositionCallback)( - ZyDisBaseDataSourceContext *ctx, uint64_t position); +typedef struct _ZydisBaseInputContext { int a; } ZydisBaseInputContext; /** * @brief Releases a data source. * @param ctx The context to release. * The context may no longer be used after it was released. */ -ZYDIS_EXPORT void ZyDisBaseDataSource_Release( - ZyDisBaseDataSourceContext *ctx); +void ZydisBaseInput_Release(ZydisBaseInputContext *ctx); /** * @brief Reads the next byte from the data source without altering the current input position @@ -72,9 +60,7 @@ ZYDIS_EXPORT void ZyDisBaseDataSource_Release( * field of the @c info parameter for error flags. Possible error values are * @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ -ZYDIS_EXPORT uint8_t ZyDisBaseDataSource_InputPeek( - ZyDisBaseDataSourceContext *ctx, - ZyDisInstructionInfo *info); +uint8_t ZydisBaseInput_InputPeek(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info); /** * @brief Reads the next byte from the data source. @@ -87,30 +73,7 @@ ZYDIS_EXPORT uint8_t ZyDisBaseDataSource_InputPeek( * parameter. This function also appends the new byte to to @c data field of the @c info * parameter. */ -ZYDIS_EXPORT uint8_t ZyDisBaseDataSource_InputNext8( - ZyDisBaseDataSourceContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @copydoc ZyDisBaseDataSource_InputNext8 - */ -ZYDIS_EXPORT uint16_t ZyDisBaseDataSource_InputNext16( - ZyDisBaseDataSourceContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @copydoc ZyDisBaseDataSource_InputNext8 - */ -ZYDIS_EXPORT uint32_t ZyDisBaseDataSource_InputNext32( - ZyDisBaseDataSourceContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @copydoc ZyDisBaseDataSource_InputNext8 - */ -ZYDIS_EXPORT uint64_t ZyDisBaseDataSource_InputNext64( - ZyDisBaseDataSourceContext *ctx, - ZyDisInstructionInfo *info); +uint8_t ZydisBaseInput_InputNext(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info); /** * @brief Returns the current input byte. @@ -119,24 +82,21 @@ ZYDIS_EXPORT uint64_t ZyDisBaseDataSource_InputNext64( * The current input byte is set everytime the @c inputPeek or @c inputNext method is called. */ // TODO: check long descr -ZYDIS_EXPORT uint8_t ZyDisBaseDataSource_InputCurrent( - const ZyDisBaseDataSourceContext *ctx); +uint8_t ZydisBaseInput_InputCurrent(const ZydisBaseInputContext *ctx); /** * @brief Queries if the end of the data source is reached. * @param ctx The data soruce context. * @return @c true if end of input, @c false if not. */ -ZYDIS_EXPORT bool ZyDisBaseDataSource_IsEndOfInput( - const ZyDisBaseDataSourceContext *ctx); +bool ZydisBaseInput_IsEndOfInput(const ZydisBaseInputContext *ctx); /** * @brief Returns the current input position. * @param ctx The data soruce context. * @return The current input position. */ -ZYDIS_EXPORT uint64_t ZyDisBaseDataSource_GetPosition( - const ZyDisBaseDataSourceContext *ctx); +uint64_t ZydisBaseInput_GetPosition(const ZydisBaseInputContext *ctx); /** * @brief Sets a new input position. @@ -144,81 +104,53 @@ ZYDIS_EXPORT uint64_t ZyDisBaseDataSource_GetPosition( * @param position The new input position. * @return @c false if the new position exceeds the maximum input length. */ -ZYDIS_EXPORT bool ZyDisBaseDataSource_SetPosition( - ZyDisBaseDataSourceContext *ctx, - uint64_t position); +bool ZydisBaseInput_SetPosition(ZydisBaseInputContext *ctx, uint64_t position); -/* ZyDisMemoryDataSource ========================================================================== */ +/* MemoryInput ========================================================================== */ /** * @brief Creates a memory data source. * @param buffer The input buffer. * @param bufferLen THe length of the input buffer. * @return @c NULL if it fails, else a data source context. - * @see ZyDisBaseDataSource_Release + * @see BaseInput_Release */ -ZYDIS_EXPORT ZyDisBaseDataSourceContext* ZyDisMemoryDataSource_Create( - const void* buffer, - size_t bufferLen); - -/* ZyDisCustomDataSource ========================================================================== */ - -/** - * @brief Creates a custom daat source. - * @param ctx The context. - * @param inputPeekCb The callback peeking the next input byte. - * @param inputNextCb The callback consuming the next input byte. - * @param isEndOfInputCb The callback determining if the end of input was reached. - * @param getPositionCb The callback obtaining the current input position. - * @param setPositionCb The callback setting the current input position. - * @param destructionCb The destruction callback. May be @c NULL. - * @return @c NULL if it fails, else a data source context. - * @see ZyDisBaseDataSource_Release - */ -ZYDIS_EXPORT ZyDisBaseDataSourceContext* ZyDisCustomDataSource_Create( - ZyDisBaseDataSource_InputCallback inputPeekCb, - ZyDisBaseDataSource_InputCallback inputNextCb, - ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInputCb, - ZyDisBaseDataSource_GetPositionCallback getPositionCb, - ZyDisBaseDataSource_SetPositionCallback setPositionCb, - ZyDisBaseDataSource_DestructionCallback destructionCb); +// TODO: verify return value +ZydisBaseInputContext* ZydisMemoryInput_Create(const void* buffer, size_t bufferLen); /* Enums ======================================================================================= */ /** * @brief Values that represent a disassembler mode. */ -typedef enum _ZyDisDisassemblerMode /* : uint8_t */ +typedef enum _ZydisDisassemblerMode /* : uint8_t */ { DM_M16BIT, DM_M32BIT, DM_M64BIT -} ZyDisDisassemblerMode; +} ZydisDisassemblerMode; /** * @brief Values that represent an instruction-set vendor. */ -typedef enum _ZyDisInstructionSetVendor /* : uint8_t */ +typedef enum _ZydisInstructionSetVendor /* : uint8_t */ { ISV_ANY, ISV_INTEL, ISV_AMD -} ZyDisInstructionSetVendor; +} ZydisInstructionSetVendor; -/* ZyDisInstructionDecoder ======================================================================== */ +/* InstructionDecoder ======================================================================== */ -typedef struct _ZyDisInstructionDecoderContext -{ - ZyDisContextDescriptor d; -} ZyDisInstructionDecoderContext; +typedef struct _ZydisInstructionDecoderContext { int a; } ZydisInstructionDecoderContext; /** * @brief Creates an instruction decoder. * @return @c NULL if it fails, else an instruction decoder context. - * @see ZyDisInstructionDecoder_Release + * @see InstructionDecoder_Release */ // TODO: verify return value -ZYDIS_EXPORT ZyDisInstructionDecoderContext* ZyDisInstructionDecoder_Create(void); +ZydisInstructionDecoderContext* ZydisInstructionDecoder_Create(void); /** * @brief Creates an instruction decoder. @@ -227,100 +159,89 @@ ZYDIS_EXPORT ZyDisInstructionDecoderContext* ZyDisInstructionDecoder_Create(void * @param preferredVendor The preferred instruction-set vendor. * @param instructionPointer The initial instruction pointer. * @return @c NULL if it fails, else an instruction decoder context. - * @see ZyDisInstructionDecoder_Release + * @see InstructionDecoder_Release */ -ZYDIS_EXPORT ZyDisInstructionDecoderContext* ZyDisInstructionDecoder_CreateEx( - ZyDisBaseDataSourceContext *input, - ZyDisDisassemblerMode disassemblerMode, - ZyDisInstructionSetVendor preferredVendor, +ZydisInstructionDecoderContext* ZydisInstructionDecoder_CreateEx(ZydisBaseInputContext *input, + ZydisDisassemblerMode disassemblerMode, ZydisInstructionSetVendor preferredVendor, uint64_t instructionPointer); /** * @brief Releases an instruction decoder. * @param ctx The context of the instruction decoder to release. */ -ZYDIS_EXPORT void ZyDisInstructionDecoder_Release( - ZyDisInstructionDecoderContext *ctx); +void ZydisInstructionDecoder_Release(ZydisInstructionDecoderContext *ctx); /** * @brief Decodes the next instruction from the input data source. * @param ctx The instruction decoder context. - * @param info The @c ZyDisInstructionInfo struct that receives the information about the decoded + * @param info The @c ZydisInstructionInfo struct that receives the information about the decoded * instruction. * @return This function returns @c false if the current position exceeds the maximum input * length. In all other cases (valid and invalid instructions) the return value is * @c true. */ -ZYDIS_EXPORT bool ZyDisInstructionDecoder_DecodeInstruction( - ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); +bool ZydisInstructionDecoder_DecodeInstruction(ZydisInstructionDecoderContext *ctx, + ZydisInstructionInfo *info); /** * @brief Returns a pointer to the current data source. * @param ctx The instruction decoder context. * @return The context of the data source. */ -ZYDIS_EXPORT ZyDisBaseDataSourceContext* ZyDisInstructionDecoder_GetDataSource( - const ZyDisInstructionDecoderContext *ctx); +ZydisBaseInputContext* ZydisInstructionDecoder_GetDataSource(const ZydisInstructionDecoderContext *ctx); /** * @brief Sets a new data source. * @param ctx The instruction decoder context. * @param input The context of the new input data source. */ -ZYDIS_EXPORT void ZyDisInstructionDecoder_SetDataSource( - ZyDisInstructionDecoderContext *ctx, - ZyDisBaseDataSourceContext *input); +void ZydisInstructionDecoder_SetDataSource(ZydisInstructionDecoderContext *ctx, + ZydisBaseInputContext *input); /** * @brief Returns the current disassembler mode. * @param ctx The instruction decoder context. * @return The current disassembler mode. */ -ZYDIS_EXPORT ZyDisDisassemblerMode ZyDisInstructionDecoder_GetDisassemblerMode( - const ZyDisInstructionDecoderContext *ctx); +ZydisDisassemblerMode ZydisInstructionDecoder_GetDisassemblerMode(ZydisInstructionDecoderContext *ctx); /** * @brief Sets the current disassembler mode. * @param ctx The instruction decoder context. * @param disassemblerMode The new disassembler mode. */ -ZYDIS_EXPORT void ZyDisInstructionDecoder_SetDisassemblerMode( - ZyDisInstructionDecoderContext *ctx, - ZyDisDisassemblerMode disassemblerMode); +void ZydisInstructionDecoder_SetDisassemblerMode(ZydisInstructionDecoderContext *ctx, + ZydisDisassemblerMode disassemblerMode); /** * @brief Returns the preferred instruction-set vendor. * @param ctx The instruction decoder context. * @return The preferred instruction-set vendor. */ -ZYDIS_EXPORT ZyDisInstructionSetVendor ZyDisInstructionDecoder_GetPreferredVendor( - const ZyDisInstructionDecoderContext *ctx); +ZydisInstructionSetVendor ZydisInstructionDecoder_GetPreferredVendor( + const ZydisInstructionDecoderContext *ctx); /** * @brief Sets the preferred instruction-set vendor. * @param ctx The instruction decoder context. * @param preferredVendor The new preferred instruction-set vendor. */ -ZYDIS_EXPORT void ZyDisInstructionDecoder_SetPreferredVendor( - ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionSetVendor preferredVendor); +void ZydisInstructionDecoder_SetPreferredVendor(ZydisInstructionDecoderContext *ctx, + ZydisInstructionSetVendor preferredVendor); /** * @brief Returns the current instruction pointer. * @param ctx The instruction decoder context. * @return The current instruction pointer. */ -ZYDIS_EXPORT uint64_t ZyDisInstructionDecoder_GetInstructionPointer( - const ZyDisInstructionDecoderContext *ctx); +uint64_t ZydisInstructionDecoder_GetInstructionPointer(ZydisInstructionDecoderContext *ctx); /** * @brief Sets a new instruction pointer. * @param ctx The instruction decoder context. * @param instructionPointer The new instruction pointer. */ -ZYDIS_EXPORT void ZyDisInstructionDecoder_SetInstructionPointer( - ZyDisInstructionDecoderContext *ctx, +void ZydisInstructionDecoder_SetInstructionPointer(ZydisInstructionDecoderContext *ctx, uint64_t instructionPointer); /* ============================================================================================= */ @@ -329,4 +250,4 @@ ZYDIS_EXPORT void ZyDisInstructionDecoder_SetInstructionPointer( } #endif -#endif /* _VDE_ZyDisINSTRUCTIONDECODERC_H_ */ +#endif /* _ZYDIS_INSTRUCTIONDECODER_H_ */ diff --git a/Bindings/C/ZydisInstructionFormatter.cpp b/Bindings/C/ZydisInstructionFormatter.cpp new file mode 100644 index 0000000..d6d8c7c --- /dev/null +++ b/Bindings/C/ZydisInstructionFormatter.cpp @@ -0,0 +1,251 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include "ZydisInstructionFormatter.h" +#include "ZydisInstructionFormatter.hpp" + +/* Helpers ===================================================================================== */ + +namespace +{ + +inline Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( + ZydisBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( + const ZydisBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( + Zydis::BaseSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( + const Zydis::BaseSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Zydis::ExactSymbolResolver* ZydisExactSymbolResolver_CppPtr( + ZydisBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Zydis::ExactSymbolResolver* ZydisExactSymbolResolver_CppPtr( + const ZydisBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_CPtr( + Zydis::ExactSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_CPtr( + const Zydis::ExactSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( + ZydisInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline const Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( + const ZydisInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline ZydisInstructionInfo* ZydisInstructionInfo_CPtr( + Zydis::InstructionInfo *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const ZydisInstructionInfo* ZydisInstructionInfo_CPtr( + const Zydis::InstructionInfo *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Zydis::BaseInstructionFormatter* ZydisBaseInstructionFormatter_CppPtr( + ZydisBaseInstructionFormatterContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Zydis::BaseInstructionFormatter* ZydisBaseInstructionFormatter_CppPtr( + const ZydisBaseInstructionFormatterContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline Zydis::BaseInstructionFormatter* ZydisIntelInstructionFormatter_CppPtr( + ZydisBaseInstructionFormatterContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Zydis::BaseInstructionFormatter* ZydisIntelInstructionFormatter_CppPtr( + const ZydisBaseInstructionFormatterContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CPtr( + Zydis::BaseInstructionFormatter *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CPtr( + const Zydis::BaseInstructionFormatter *ctx) +{ + return reinterpret_cast(ctx); +} + +} + +/* BaseSymbolResolver ======================================================================== */ + +void ZydisBaseSymbolResolver_Release( + ZydisBaseSymbolResolverContext *ctx) +{ + delete ZydisBaseSymbolResolver_CppPtr(ctx); +} + +const char* ZydisBaseSymbolResolver_ResolveSymbol( + ZydisBaseSymbolResolverContext *ctx, + const ZydisInstructionInfo *info, + uint64_t address, + uint64_t *offset) +{ + return ZydisBaseSymbolResolver_CppPtr(ctx)->resolveSymbol( + *ZydisInstructionInfo_CppPtr(info), + address, + *offset); +} + +/* ExactSymbolResolver ======================================================================= */ + +ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_Create(void) +{ + return ZydisExactSymbolResolver_CPtr(new Zydis::ExactSymbolResolver); +} + +bool EZydisxactSymbolResolver_ContainsSymbol( + ZydisBaseSymbolResolverContext *ctx, + uint64_t address) +{ + return ZydisExactSymbolResolver_CppPtr(ctx)->containsSymbol(address); +} + +void ZydisExactSymbolResolverContext_SetSymbol( + ZydisBaseSymbolResolverContext *ctx, + uint64_t address, + const char* name) +{ + ZydisExactSymbolResolver_CppPtr(ctx)->setSymbol(address, name); +} + +void ZydisExactSymbolResolverContext_RemoveSymbol( + ZydisBaseSymbolResolverContext *ctx, + uint64_t address) +{ + ZydisExactSymbolResolver_CppPtr(ctx)->removeSymbol(address); +} + +void ZydisExactSymbolResolverContext_Clear( + ZydisBaseSymbolResolverContext *ctx) +{ + ZydisExactSymbolResolver_CppPtr(ctx)->clear(); +} + +/* BaseInstructionFormatter ================================================================== */ + +const char* ZydisBaseInstructionFormatter_FormatInstruction( + ZydisBaseInstructionFormatterContext *ctx, + const ZydisInstructionInfo *info) +{ + return ZydisBaseInstructionFormatter_CppPtr(ctx)->formatInstruction( + *ZydisInstructionInfo_CppPtr(info)); +} + +ZydisBaseSymbolResolverContext* ZydisBaseInstructionFormatter_GetSymbolResolver( + const ZydisBaseInstructionFormatterContext *ctx) +{ + return ZydisBaseSymbolResolver_CPtr( + ZydisBaseInstructionFormatter_CppPtr(ctx)->getSymbolResolver()); +} + +void ZydisBaseInstructionFormatter_SetSymbolResolver( + ZydisBaseInstructionFormatterContext *ctx, + ZydisBaseSymbolResolverContext *resolver) +{ + ZydisBaseInstructionFormatter_CppPtr(ctx)->setSymbolResolver( + ZydisBaseSymbolResolver_CppPtr(resolver)); +} + +void ZydisBaseInstructionFormatter_Release( + ZydisBaseInstructionFormatterContext *ctx) +{ + delete ZydisBaseInstructionFormatter_CppPtr(ctx); +} + +/* IntelInstructionFormatter ================================================================ */ + +ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_Create(void) +{ + return ZydisIntelInstructionFormatter_CPtr(new Zydis::IntelInstructionFormatter); +} + +ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CreateEx( + ZydisBaseSymbolResolverContext *resolver) +{ + return ZydisIntelInstructionFormatter_CPtr(new Zydis::IntelInstructionFormatter( + ZydisBaseSymbolResolver_CppPtr(resolver))); +} + +/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/ZydisInstructionFormatter.h b/Bindings/C/ZydisInstructionFormatter.h new file mode 100644 index 0000000..cc51b38 --- /dev/null +++ b/Bindings/C/ZydisInstructionFormatter.h @@ -0,0 +1,104 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#ifndef _ZYDIS_INSTRUCTIONFORMATTER_H_ +#define _ZYDIS_INSTRUCTIONFORMATTER_H_ + +#include "ZydisTypes.h" +#include "ZydisSymbolResolver.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* BaseInstructionFormatter ================================================================== */ + +typedef struct _ZydisBaseInstructionFormatterContext {int a;} ZydisBaseInstructionFormatterContext; + +/** + * @brief Formats a decoded instruction. + * @param ctx The instruction formatter context. + * @param info The instruction info. + * @return Pointer to the formatted instruction string. This pointer remains valid until + * this function is called again or the context is released. + */ +const char* ZydisBaseInstructionFormatter_FormatInstruction( + ZydisBaseInstructionFormatterContext *ctx, const ZydisInstructionInfo *info); + +/** + * @brief Returns a pointer to the current symbol resolver. + * @param ctx The instruction formatter context. + * @return Pointer to the current symbol resolver or @c NULL if no symbol resolver is used. + */ +ZydisBaseSymbolResolverContext* ZydisBaseInstructionFormatter_GetSymbolResolver( + const ZydisBaseInstructionFormatterContext *ctx); + +/** + * @brief Sets a new symbol resolver. + * @param ctx The instruction formatter context. + * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol + * resolver should be used. + */ +void ZydisBaseInstructionFormatter_SetSymbolResolver(ZydisBaseInstructionFormatterContext *ctx, + ZydisBaseSymbolResolverContext *resolver); + +/** + * @brief Releases an instruction formatter. + * @param ctx The context of the instruction formatter to release. + * The context may no longer used after it has been released. + */ +void ZydisBaseInstructionFormatter_Release(ZydisBaseInstructionFormatterContext *ctx); + +/* IntelInstructionFormatter ================================================================ */ + +/** + * @brief Creates an Intel-syntax instruction formatter. + * @return @c NULL if it fails, else an Intel instruction formatter context. + * @see BaseInstructionFormatter_Release + */ +ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_Create(void); + +/** + * @brief Creates an Intel-syntax instruction formatter. + * @param resolver The symbol resolver consulted to resolve symbols on formatting. + * @return @c NULL if it fails, else an Intel instruction formatter context. + * @see BaseInstructionFormatter_Release + */ +ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CreateEx( + ZydisBaseSymbolResolverContext *resolver); + +/* ============================================================================================= */ + +#ifdef __cplusplus +} +#endif + +#endif /* _ZYDIS_INSTRUCTIONFORMATTER_H_ */ \ No newline at end of file diff --git a/Examples/CustomDataSource/Main.c b/Bindings/C/ZydisOpcodeTable.cpp similarity index 80% rename from Examples/CustomDataSource/Main.c rename to Bindings/C/ZydisOpcodeTable.cpp index 5fb82f9..6724ea4 100644 --- a/Examples/CustomDataSource/Main.c +++ b/Bindings/C/ZydisOpcodeTable.cpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : athre0z - - Last change : 19. March 2015 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,14 +26,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ +***************************************************************************************************/ -#include - -int main(int argc, char* argv[]) -{ - ZYDIS_UNUSED(argc); ZYDIS_UNUSED(argv); - - // TODO: - return 0; -} +#include "ZydisOpcodeTable.h" +#include "ZydisOpcodeTable.hpp" diff --git a/Bindings/C/ZydisOpcodeTable.h b/Bindings/C/ZydisOpcodeTable.h new file mode 100644 index 0000000..3f9ab5f --- /dev/null +++ b/Bindings/C/ZydisOpcodeTable.h @@ -0,0 +1,961 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#ifndef _ZYDIS_OPCODETABLE_H_ +#define _ZYDIS_OPCODETABLE_H_ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** + * @brief Values that represent an instruction mnemonic. + */ +typedef enum _ZydisInstructionMnemonic /* : uint16_t */ +{ + /* 000 */ ZYDIS_MNEM_INVALID, + /* 001 */ ZYDIS_MNEM_AAA, + /* 002 */ ZYDIS_MNEM_AAD, + /* 003 */ ZYDIS_MNEM_AAM, + /* 004 */ ZYDIS_MNEM_AAS, + /* 005 */ ZYDIS_MNEM_ADC, + /* 006 */ ZYDIS_MNEM_ADD, + /* 007 */ ZYDIS_MNEM_ADDPD, + /* 008 */ ZYDIS_MNEM_ADDPS, + /* 009 */ ZYDIS_MNEM_ADDSD, + /* 00A */ ZYDIS_MNEM_ADDSS, + /* 00B */ ZYDIS_MNEM_ADDSUBPD, + /* 00C */ ZYDIS_MNEM_ADDSUBPS, + /* 00D */ ZYDIS_MNEM_AESDEC, + /* 00E */ ZYDIS_MNEM_AESDECLAST, + /* 00F */ ZYDIS_MNEM_AESENC, + /* 010 */ ZYDIS_MNEM_AESENCLAST, + /* 011 */ ZYDIS_MNEM_AESIMC, + /* 012 */ ZYDIS_MNEM_AESKEYGENASSIST, + /* 013 */ ZYDIS_MNEM_AND, + /* 014 */ ZYDIS_MNEM_ANDNPD, + /* 015 */ ZYDIS_MNEM_ANDNPS, + /* 016 */ ZYDIS_MNEM_ANDPD, + /* 017 */ ZYDIS_MNEM_ANDPS, + /* 018 */ ZYDIS_MNEM_ARPL, + /* 019 */ ZYDIS_MNEM_BLENDPD, + /* 01A */ ZYDIS_MNEM_BLENDPS, + /* 01B */ ZYDIS_MNEM_BLENDVPD, + /* 01C */ ZYDIS_MNEM_BLENDVPS, + /* 01D */ ZYDIS_MNEM_BOUND, + /* 01E */ ZYDIS_MNEM_BSF, + /* 01F */ ZYDIS_MNEM_BSR, + /* 020 */ ZYDIS_MNEM_BSWAP, + /* 021 */ ZYDIS_MNEM_BT, + /* 022 */ ZYDIS_MNEM_BTC, + /* 023 */ ZYDIS_MNEM_BTR, + /* 024 */ ZYDIS_MNEM_BTS, + /* 025 */ ZYDIS_MNEM_CALL, + /* 026 */ ZYDIS_MNEM_CBW, + /* 027 */ ZYDIS_MNEM_CDQ, + /* 028 */ ZYDIS_MNEM_CDQE, + /* 029 */ ZYDIS_MNEM_CLC, + /* 02A */ ZYDIS_MNEM_CLD, + /* 02B */ ZYDIS_MNEM_CLFLUSH, + /* 02C */ ZYDIS_MNEM_CLGI, + /* 02D */ ZYDIS_MNEM_CLI, + /* 02E */ ZYDIS_MNEM_CLTS, + /* 02F */ ZYDIS_MNEM_CMC, + /* 030 */ ZYDIS_MNEM_CMOVA, + /* 031 */ ZYDIS_MNEM_CMOVAE, + /* 032 */ ZYDIS_MNEM_CMOVB, + /* 033 */ ZYDIS_MNEM_CMOVBE, + /* 034 */ ZYDIS_MNEM_CMOVE, + /* 035 */ ZYDIS_MNEM_CMOVG, + /* 036 */ ZYDIS_MNEM_CMOVGE, + /* 037 */ ZYDIS_MNEM_CMOVL, + /* 038 */ ZYDIS_MNEM_CMOVLE, + /* 039 */ ZYDIS_MNEM_CMOVNE, + /* 03A */ ZYDIS_MNEM_CMOVNO, + /* 03B */ ZYDIS_MNEM_CMOVNP, + /* 03C */ ZYDIS_MNEM_CMOVNS, + /* 03D */ ZYDIS_MNEM_CMOVO, + /* 03E */ ZYDIS_MNEM_CMOVP, + /* 03F */ ZYDIS_MNEM_CMOVS, + /* 040 */ ZYDIS_MNEM_CMP, + /* 041 */ ZYDIS_MNEM_CMPPD, + /* 042 */ ZYDIS_MNEM_CMPPS, + /* 043 */ ZYDIS_MNEM_CMPSB, + /* 044 */ ZYDIS_MNEM_CMPSD, + /* 045 */ ZYDIS_MNEM_CMPSQ, + /* 046 */ ZYDIS_MNEM_CMPSS, + /* 047 */ ZYDIS_MNEM_CMPSW, + /* 048 */ ZYDIS_MNEM_CMPXCHG, + /* 049 */ ZYDIS_MNEM_CMPXCHG16B, + /* 04A */ ZYDIS_MNEM_CMPXCHG8B, + /* 04B */ ZYDIS_MNEM_COMISD, + /* 04C */ ZYDIS_MNEM_COMISS, + /* 04D */ ZYDIS_MNEM_CPUID, + /* 04E */ ZYDIS_MNEM_CQO, + /* 04F */ ZYDIS_MNEM_CRC32, + /* 050 */ ZYDIS_MNEM_CVTDQ2PD, + /* 051 */ ZYDIS_MNEM_CVTDQ2PS, + /* 052 */ ZYDIS_MNEM_CVTPD2DQ, + /* 053 */ ZYDIS_MNEM_CVTPD2PI, + /* 054 */ ZYDIS_MNEM_CVTPD2PS, + /* 055 */ ZYDIS_MNEM_CVTPI2PD, + /* 056 */ ZYDIS_MNEM_CVTPI2PS, + /* 057 */ ZYDIS_MNEM_CVTPS2DQ, + /* 058 */ ZYDIS_MNEM_CVTPS2PD, + /* 059 */ ZYDIS_MNEM_CVTPS2PI, + /* 05A */ ZYDIS_MNEM_CVTSD2SI, + /* 05B */ ZYDIS_MNEM_CVTSD2SS, + /* 05C */ ZYDIS_MNEM_CVTSI2SD, + /* 05D */ ZYDIS_MNEM_CVTSI2SS, + /* 05E */ ZYDIS_MNEM_CVTSS2SD, + /* 05F */ ZYDIS_MNEM_CVTSS2SI, + /* 060 */ ZYDIS_MNEM_CVTTPD2DQ, + /* 061 */ ZYDIS_MNEM_CVTTPD2PI, + /* 062 */ ZYDIS_MNEM_CVTTPS2DQ, + /* 063 */ ZYDIS_MNEM_CVTTPS2PI, + /* 064 */ ZYDIS_MNEM_CVTTSD2SI, + /* 065 */ ZYDIS_MNEM_CVTTSS2SI, + /* 066 */ ZYDIS_MNEM_CWD, + /* 067 */ ZYDIS_MNEM_CWDE, + /* 068 */ ZYDIS_MNEM_DAA, + /* 069 */ ZYDIS_MNEM_DAS, + /* 06A */ ZYDIS_MNEM_DEC, + /* 06B */ ZYDIS_MNEM_DIV, + /* 06C */ ZYDIS_MNEM_DIVPD, + /* 06D */ ZYDIS_MNEM_DIVPS, + /* 06E */ ZYDIS_MNEM_DIVSD, + /* 06F */ ZYDIS_MNEM_DIVSS, + /* 070 */ ZYDIS_MNEM_DPPD, + /* 071 */ ZYDIS_MNEM_DPPS, + /* 072 */ ZYDIS_MNEM_EMMS, + /* 073 */ ZYDIS_MNEM_ENTER, + /* 074 */ ZYDIS_MNEM_EXTRACTPS, + /* 075 */ ZYDIS_MNEM_F2XM1, + /* 076 */ ZYDIS_MNEM_FABS, + /* 077 */ ZYDIS_MNEM_FADD, + /* 078 */ ZYDIS_MNEM_FADDP, + /* 079 */ ZYDIS_MNEM_FBLD, + /* 07A */ ZYDIS_MNEM_FBSTP, + /* 07B */ ZYDIS_MNEM_FCHS, + /* 07C */ ZYDIS_MNEM_FCLEX, + /* 07D */ ZYDIS_MNEM_FCMOVB, + /* 07E */ ZYDIS_MNEM_FCMOVBE, + /* 07F */ ZYDIS_MNEM_FCMOVE, + /* 080 */ ZYDIS_MNEM_FCMOVNB, + /* 081 */ ZYDIS_MNEM_FCMOVNBE, + /* 082 */ ZYDIS_MNEM_FCMOVNE, + /* 083 */ ZYDIS_MNEM_FCMOVNU, + /* 084 */ ZYDIS_MNEM_FCMOVU, + /* 085 */ ZYDIS_MNEM_FCOM, + /* 086 */ ZYDIS_MNEM_FCOM2, + /* 087 */ ZYDIS_MNEM_FCOMI, + /* 088 */ ZYDIS_MNEM_FCOMIP, + /* 089 */ ZYDIS_MNEM_FCOMP, + /* 08A */ ZYDIS_MNEM_FCOMP3, + /* 08B */ ZYDIS_MNEM_FCOMP5, + /* 08C */ ZYDIS_MNEM_FCOMPP, + /* 08D */ ZYDIS_MNEM_FCOS, + /* 08E */ ZYDIS_MNEM_FDECSTP, + /* 08F */ ZYDIS_MNEM_FDIV, + /* 090 */ ZYDIS_MNEM_FDIVP, + /* 091 */ ZYDIS_MNEM_FDIVR, + /* 092 */ ZYDIS_MNEM_FDIVRP, + /* 093 */ ZYDIS_MNEM_FEMMS, + /* 094 */ ZYDIS_MNEM_FFREE, + /* 095 */ ZYDIS_MNEM_FFREEP, + /* 096 */ ZYDIS_MNEM_FIADD, + /* 097 */ ZYDIS_MNEM_FICOM, + /* 098 */ ZYDIS_MNEM_FICOMP, + /* 099 */ ZYDIS_MNEM_FIDIV, + /* 09A */ ZYDIS_MNEM_FIDIVR, + /* 09B */ ZYDIS_MNEM_FILD, + /* 09C */ ZYDIS_MNEM_FIMUL, + /* 09D */ ZYDIS_MNEM_FINCSTP, + /* 09E */ ZYDIS_MNEM_FIST, + /* 09F */ ZYDIS_MNEM_FISTP, + /* 0A0 */ ZYDIS_MNEM_FISTTP, + /* 0A1 */ ZYDIS_MNEM_FISUB, + /* 0A2 */ ZYDIS_MNEM_FISUBR, + /* 0A3 */ ZYDIS_MNEM_FLD, + /* 0A4 */ ZYDIS_MNEM_FLD1, + /* 0A5 */ ZYDIS_MNEM_FLDCW, + /* 0A6 */ ZYDIS_MNEM_FLDENV, + /* 0A7 */ ZYDIS_MNEM_FLDL2E, + /* 0A8 */ ZYDIS_MNEM_FLDL2T, + /* 0A9 */ ZYDIS_MNEM_FLDLG2, + /* 0AA */ ZYDIS_MNEM_FLDLN2, + /* 0AB */ ZYDIS_MNEM_FLDPI, + /* 0AC */ ZYDIS_MNEM_FLDZ, + /* 0AD */ ZYDIS_MNEM_FMUL, + /* 0AE */ ZYDIS_MNEM_FMULP, + /* 0AF */ ZYDIS_MNEM_FNDISI, + /* 0B0 */ ZYDIS_MNEM_FNENI, + /* 0B1 */ ZYDIS_MNEM_FNINIT, + /* 0B2 */ ZYDIS_MNEM_FNOP, + /* 0B3 */ ZYDIS_MNEM_FNSAVE, + /* 0B4 */ ZYDIS_MNEM_FNSETPM, + /* 0B5 */ ZYDIS_MNEM_FNSTCW, + /* 0B6 */ ZYDIS_MNEM_FNSTENV, + /* 0B7 */ ZYDIS_MNEM_FNSTSW, + /* 0B8 */ ZYDIS_MNEM_FPATAN, + /* 0B9 */ ZYDIS_MNEM_FPREM, + /* 0BA */ ZYDIS_MNEM_FPREM1, + /* 0BB */ ZYDIS_MNEM_FPTAN, + /* 0BC */ ZYDIS_MNEM_FRNDINT, + /* 0BD */ ZYDIS_MNEM_FRSTOR, + /* 0BE */ ZYDIS_MNEM_FRSTPM, + /* 0BF */ ZYDIS_MNEM_FSCALE, + /* 0C0 */ ZYDIS_MNEM_FSIN, + /* 0C1 */ ZYDIS_MNEM_FSINCOS, + /* 0C2 */ ZYDIS_MNEM_FSQRT, + /* 0C3 */ ZYDIS_MNEM_FST, + /* 0C4 */ ZYDIS_MNEM_FSTP, + /* 0C5 */ ZYDIS_MNEM_FSTP1, + /* 0C6 */ ZYDIS_MNEM_FSTP8, + /* 0C7 */ ZYDIS_MNEM_FSTP9, + /* 0C8 */ ZYDIS_MNEM_FSUB, + /* 0C9 */ ZYDIS_MNEM_FSUBP, + /* 0CA */ ZYDIS_MNEM_FSUBR, + /* 0CB */ ZYDIS_MNEM_FSUBRP, + /* 0CC */ ZYDIS_MNEM_FTST, + /* 0CD */ ZYDIS_MNEM_FUCOM, + /* 0CE */ ZYDIS_MNEM_FUCOMI, + /* 0CF */ ZYDIS_MNEM_FUCOMIP, + /* 0D0 */ ZYDIS_MNEM_FUCOMP, + /* 0D1 */ ZYDIS_MNEM_FUCOMPP, + /* 0D2 */ ZYDIS_MNEM_FXAM, + /* 0D3 */ ZYDIS_MNEM_FXCH, + /* 0D4 */ ZYDIS_MNEM_FXCH4, + /* 0D5 */ ZYDIS_MNEM_FXCH7, + /* 0D6 */ ZYDIS_MNEM_FXRSTOR, + /* 0D7 */ ZYDIS_MNEM_FXSAVE, + /* 0D8 */ ZYDIS_MNEM_FXTRACT, + /* 0D9 */ ZYDIS_MNEM_FYL2X, + /* 0DA */ ZYDIS_MNEM_FYL2XP1, + /* 0DB */ ZYDIS_MNEM_GETSEC, + /* 0DC */ ZYDIS_MNEM_HADDPD, + /* 0DD */ ZYDIS_MNEM_HADDPS, + /* 0DE */ ZYDIS_MNEM_HLT, + /* 0DF */ ZYDIS_MNEM_HSUBPD, + /* 0E0 */ ZYDIS_MNEM_HSUBPS, + /* 0E1 */ ZYDIS_MNEM_IDIV, + /* 0E2 */ ZYDIS_MNEM_IMUL, + /* 0E3 */ ZYDIS_MNEM_IN, + /* 0E4 */ ZYDIS_MNEM_INC, + /* 0E5 */ ZYDIS_MNEM_INSB, + /* 0E6 */ ZYDIS_MNEM_INSD, + /* 0E7 */ ZYDIS_MNEM_INSERTPS, + /* 0E8 */ ZYDIS_MNEM_INSW, + /* 0E9 */ ZYDIS_MNEM_INT, + /* 0EA */ ZYDIS_MNEM_INT1, + /* 0EB */ ZYDIS_MNEM_INT3, + /* 0EC */ ZYDIS_MNEM_INTO, + /* 0ED */ ZYDIS_MNEM_INVD, + /* 0EE */ ZYDIS_MNEM_INVEPT, + /* 0EF */ ZYDIS_MNEM_INVLPG, + /* 0F0 */ ZYDIS_MNEM_INVLPGA, + /* 0F1 */ ZYDIS_MNEM_INVVPID, + /* 0F2 */ ZYDIS_MNEM_IRETD, + /* 0F3 */ ZYDIS_MNEM_IRETQ, + /* 0F4 */ ZYDIS_MNEM_IRETW, + /* 0F5 */ ZYDIS_MNEM_JA, + /* 0F6 */ ZYDIS_MNEM_JB, + /* 0F7 */ ZYDIS_MNEM_JBE, + /* 0F8 */ ZYDIS_MNEM_JCXZ, + /* 0F9 */ ZYDIS_MNEM_JE, + /* 0FA */ ZYDIS_MNEM_JECXZ, + /* 0FB */ ZYDIS_MNEM_JG, + /* 0FC */ ZYDIS_MNEM_JGE, + /* 0FD */ ZYDIS_MNEM_JL, + /* 0FE */ ZYDIS_MNEM_JLE, + /* 0FF */ ZYDIS_MNEM_JMP, + /* 100 */ ZYDIS_MNEM_JNB, + /* 101 */ ZYDIS_MNEM_JNE, + /* 102 */ ZYDIS_MNEM_JNO, + /* 103 */ ZYDIS_MNEM_JNP, + /* 104 */ ZYDIS_MNEM_JNS, + /* 105 */ ZYDIS_MNEM_JO, + /* 106 */ ZYDIS_MNEM_JP, + /* 107 */ ZYDIS_MNEM_JRCXZ, + /* 108 */ ZYDIS_MNEM_JS, + /* 109 */ ZYDIS_MNEM_LAHF, + /* 10A */ ZYDIS_MNEM_LAR, + /* 10B */ ZYDIS_MNEM_LDDQU, + /* 10C */ ZYDIS_MNEM_LDMXCSR, + /* 10D */ ZYDIS_MNEM_LDS, + /* 10E */ ZYDIS_MNEM_LEA, + /* 10F */ ZYDIS_MNEM_LEAVE, + /* 110 */ ZYDIS_MNEM_LES, + /* 111 */ ZYDIS_MNEM_LFENCE, + /* 112 */ ZYDIS_MNEM_LFS, + /* 113 */ ZYDIS_MNEM_LGDT, + /* 114 */ ZYDIS_MNEM_LGS, + /* 115 */ ZYDIS_MNEM_LIDT, + /* 116 */ ZYDIS_MNEM_LLDT, + /* 117 */ ZYDIS_MNEM_LMSW, + /* 118 */ ZYDIS_MNEM_LOCK, + /* 119 */ ZYDIS_MNEM_LODSB, + /* 11A */ ZYDIS_MNEM_LODSD, + /* 11B */ ZYDIS_MNEM_LODSQ, + /* 11C */ ZYDIS_MNEM_LODSW, + /* 11D */ ZYDIS_MNEM_LOOP, + /* 11E */ ZYDIS_MNEM_LOOPE, + /* 11F */ ZYDIS_MNEM_LOOPNE, + /* 120 */ ZYDIS_MNEM_LSL, + /* 121 */ ZYDIS_MNEM_LSS, + /* 122 */ ZYDIS_MNEM_LTR, + /* 123 */ ZYDIS_MNEM_MASKMOVDQU, + /* 124 */ ZYDIS_MNEM_MASKMOVQ, + /* 125 */ ZYDIS_MNEM_MAXPD, + /* 126 */ ZYDIS_MNEM_MAXPS, + /* 127 */ ZYDIS_MNEM_MAXSD, + /* 128 */ ZYDIS_MNEM_MAXSS, + /* 129 */ ZYDIS_MNEM_MFENCE, + /* 12A */ ZYDIS_MNEM_MINPD, + /* 12B */ ZYDIS_MNEM_MINPS, + /* 12C */ ZYDIS_MNEM_MINSD, + /* 12D */ ZYDIS_MNEM_MINSS, + /* 12E */ ZYDIS_MNEM_MONITOR, + /* 12F */ ZYDIS_MNEM_MONTMUL, + /* 130 */ ZYDIS_MNEM_MOV, + /* 131 */ ZYDIS_MNEM_MOVAPD, + /* 132 */ ZYDIS_MNEM_MOVAPS, + /* 133 */ ZYDIS_MNEM_MOVBE, + /* 134 */ ZYDIS_MNEM_MOVD, + /* 135 */ ZYDIS_MNEM_MOVDDUP, + /* 136 */ ZYDIS_MNEM_MOVDQ2Q, + /* 137 */ ZYDIS_MNEM_MOVDQA, + /* 138 */ ZYDIS_MNEM_MOVDQU, + /* 139 */ ZYDIS_MNEM_MOVHLPS, + /* 13A */ ZYDIS_MNEM_MOVHPD, + /* 13B */ ZYDIS_MNEM_MOVHPS, + /* 13C */ ZYDIS_MNEM_MOVLHPS, + /* 13D */ ZYDIS_MNEM_MOVLPD, + /* 13E */ ZYDIS_MNEM_MOVLPS, + /* 13F */ ZYDIS_MNEM_MOVMSKPD, + /* 140 */ ZYDIS_MNEM_MOVMSKPS, + /* 141 */ ZYDIS_MNEM_MOVNTDQ, + /* 142 */ ZYDIS_MNEM_MOVNTDQA, + /* 143 */ ZYDIS_MNEM_MOVNTI, + /* 144 */ ZYDIS_MNEM_MOVNTPD, + /* 145 */ ZYDIS_MNEM_MOVNTPS, + /* 146 */ ZYDIS_MNEM_MOVNTQ, + /* 147 */ ZYDIS_MNEM_MOVQ, + /* 148 */ ZYDIS_MNEM_MOVQ2DQ, + /* 149 */ ZYDIS_MNEM_MOVSB, + /* 14A */ ZYDIS_MNEM_MOVSD, + /* 14B */ ZYDIS_MNEM_MOVSHDUP, + /* 14C */ ZYDIS_MNEM_MOVSLDUP, + /* 14D */ ZYDIS_MNEM_MOVSQ, + /* 14E */ ZYDIS_MNEM_MOVSS, + /* 14F */ ZYDIS_MNEM_MOVSW, + /* 150 */ ZYDIS_MNEM_MOVSX, + /* 151 */ ZYDIS_MNEM_MOVSXD, + /* 152 */ ZYDIS_MNEM_MOVUPD, + /* 153 */ ZYDIS_MNEM_MOVUPS, + /* 154 */ ZYDIS_MNEM_MOVZX, + /* 155 */ ZYDIS_MNEM_MPSADBW, + /* 156 */ ZYDIS_MNEM_MUL, + /* 157 */ ZYDIS_MNEM_MULPD, + /* 158 */ ZYDIS_MNEM_MULPS, + /* 159 */ ZYDIS_MNEM_MULSD, + /* 15A */ ZYDIS_MNEM_MULSS, + /* 15B */ ZYDIS_MNEM_MWAIT, + /* 15C */ ZYDIS_MNEM_NEG, + /* 15D */ ZYDIS_MNEM_NOP, + /* 15E */ ZYDIS_MNEM_NOT, + /* 15F */ ZYDIS_MNEM_OR, + /* 160 */ ZYDIS_MNEM_ORPD, + /* 161 */ ZYDIS_MNEM_ORPS, + /* 162 */ ZYDIS_MNEM_OUT, + /* 163 */ ZYDIS_MNEM_OUTSB, + /* 164 */ ZYDIS_MNEM_OUTSD, + /* 165 */ ZYDIS_MNEM_OUTSW, + /* 166 */ ZYDIS_MNEM_PABSB, + /* 167 */ ZYDIS_MNEM_PABSD, + /* 168 */ ZYDIS_MNEM_PABSW, + /* 169 */ ZYDIS_MNEM_PACKSSDW, + /* 16A */ ZYDIS_MNEM_PACKSSWB, + /* 16B */ ZYDIS_MNEM_PACKUSDW, + /* 16C */ ZYDIS_MNEM_PACKUSWB, + /* 16D */ ZYDIS_MNEM_PADDB, + /* 16E */ ZYDIS_MNEM_PADDD, + /* 16F */ ZYDIS_MNEM_PADDQ, + /* 170 */ ZYDIS_MNEM_PADDSB, + /* 171 */ ZYDIS_MNEM_PADDSW, + /* 172 */ ZYDIS_MNEM_PADDUSB, + /* 173 */ ZYDIS_MNEM_PADDUSW, + /* 174 */ ZYDIS_MNEM_PADDW, + /* 175 */ ZYDIS_MNEM_PALIGNR, + /* 176 */ ZYDIS_MNEM_PAND, + /* 177 */ ZYDIS_MNEM_PANDN, + /* 178 */ ZYDIS_MNEM_PAUSE, + /* 179 */ ZYDIS_MNEM_PAVGB, + /* 17A */ ZYDIS_MNEM_PAVGUSB, + /* 17B */ ZYDIS_MNEM_PAVGW, + /* 17C */ ZYDIS_MNEM_PBLENDVB, + /* 17D */ ZYDIS_MNEM_PBLENDW, + /* 17E */ ZYDIS_MNEM_PCLMULQDQ, + /* 17F */ ZYDIS_MNEM_PCMPEQB, + /* 180 */ ZYDIS_MNEM_PCMPEQD, + /* 181 */ ZYDIS_MNEM_PCMPEQQ, + /* 182 */ ZYDIS_MNEM_PCMPEQW, + /* 183 */ ZYDIS_MNEM_PCMPESTRI, + /* 184 */ ZYDIS_MNEM_PCMPESTRM, + /* 185 */ ZYDIS_MNEM_PCMPGTB, + /* 186 */ ZYDIS_MNEM_PCMPGTD, + /* 187 */ ZYDIS_MNEM_PCMPGTQ, + /* 188 */ ZYDIS_MNEM_PCMPGTW, + /* 189 */ ZYDIS_MNEM_PCMPISTRI, + /* 18A */ ZYDIS_MNEM_PCMPISTRM, + /* 18B */ ZYDIS_MNEM_PEXTRB, + /* 18C */ ZYDIS_MNEM_PEXTRD, + /* 18D */ ZYDIS_MNEM_PEXTRQ, + /* 18E */ ZYDIS_MNEM_PEXTRW, + /* 18F */ ZYDIS_MNEM_PF2ID, + /* 190 */ ZYDIS_MNEM_PF2IW, + /* 191 */ ZYDIS_MNEM_PFACC, + /* 192 */ ZYDIS_MNEM_PFADD, + /* 193 */ ZYDIS_MNEM_PFCMPEQ, + /* 194 */ ZYDIS_MNEM_PFCMPGE, + /* 195 */ ZYDIS_MNEM_PFCMPGT, + /* 196 */ ZYDIS_MNEM_PFMAX, + /* 197 */ ZYDIS_MNEM_PFMIN, + /* 198 */ ZYDIS_MNEM_PFMUL, + /* 199 */ ZYDIS_MNEM_PFNACC, + /* 19A */ ZYDIS_MNEM_PFPNACC, + /* 19B */ ZYDIS_MNEM_PFRCP, + /* 19C */ ZYDIS_MNEM_PFRCPIT1, + /* 19D */ ZYDIS_MNEM_PFRCPIT2, + /* 19E */ ZYDIS_MNEM_PFRSQIT1, + /* 19F */ ZYDIS_MNEM_PFRSQRT, + /* 1A0 */ ZYDIS_MNEM_PFSUB, + /* 1A1 */ ZYDIS_MNEM_PFSUBR, + /* 1A2 */ ZYDIS_MNEM_PHADDD, + /* 1A3 */ ZYDIS_MNEM_PHADDSW, + /* 1A4 */ ZYDIS_MNEM_PHADDW, + /* 1A5 */ ZYDIS_MNEM_PHMINPOSUW, + /* 1A6 */ ZYDIS_MNEM_PHSUBD, + /* 1A7 */ ZYDIS_MNEM_PHSUBSW, + /* 1A8 */ ZYDIS_MNEM_PHSUBW, + /* 1A9 */ ZYDIS_MNEM_PI2FD, + /* 1AA */ ZYDIS_MNEM_PI2FW, + /* 1AB */ ZYDIS_MNEM_PINSRB, + /* 1AC */ ZYDIS_MNEM_PINSRD, + /* 1AD */ ZYDIS_MNEM_PINSRQ, + /* 1AE */ ZYDIS_MNEM_PINSRW, + /* 1AF */ ZYDIS_MNEM_PMADDUBSW, + /* 1B0 */ ZYDIS_MNEM_PMADDWD, + /* 1B1 */ ZYDIS_MNEM_PMAXSB, + /* 1B2 */ ZYDIS_MNEM_PMAXSD, + /* 1B3 */ ZYDIS_MNEM_PMAXSW, + /* 1B4 */ ZYDIS_MNEM_PMAXUB, + /* 1B5 */ ZYDIS_MNEM_PMAXUD, + /* 1B6 */ ZYDIS_MNEM_PMAXUW, + /* 1B7 */ ZYDIS_MNEM_PMINSB, + /* 1B8 */ ZYDIS_MNEM_PMINSD, + /* 1B9 */ ZYDIS_MNEM_PMINSW, + /* 1BA */ ZYDIS_MNEM_PMINUB, + /* 1BB */ ZYDIS_MNEM_PMINUD, + /* 1BC */ ZYDIS_MNEM_PMINUW, + /* 1BD */ ZYDIS_MNEM_PMOVMSKB, + /* 1BE */ ZYDIS_MNEM_PMOVSXBD, + /* 1BF */ ZYDIS_MNEM_PMOVSXBQ, + /* 1C0 */ ZYDIS_MNEM_PMOVSXBW, + /* 1C1 */ ZYDIS_MNEM_PMOVSXDQ, + /* 1C2 */ ZYDIS_MNEM_PMOVSXWD, + /* 1C3 */ ZYDIS_MNEM_PMOVSXWQ, + /* 1C4 */ ZYDIS_MNEM_PMOVZXBD, + /* 1C5 */ ZYDIS_MNEM_PMOVZXBQ, + /* 1C6 */ ZYDIS_MNEM_PMOVZXBW, + /* 1C7 */ ZYDIS_MNEM_PMOVZXDQ, + /* 1C8 */ ZYDIS_MNEM_PMOVZXWD, + /* 1C9 */ ZYDIS_MNEM_PMOVZXWQ, + /* 1CA */ ZYDIS_MNEM_PMULDQ, + /* 1CB */ ZYDIS_MNEM_PMULHRSW, + /* 1CC */ ZYDIS_MNEM_PMULHRW, + /* 1CD */ ZYDIS_MNEM_PMULHUW, + /* 1CE */ ZYDIS_MNEM_PMULHW, + /* 1CF */ ZYDIS_MNEM_PMULLD, + /* 1D0 */ ZYDIS_MNEM_PMULLW, + /* 1D1 */ ZYDIS_MNEM_PMULUDQ, + /* 1D2 */ ZYDIS_MNEM_POP, + /* 1D3 */ ZYDIS_MNEM_POPA, + /* 1D4 */ ZYDIS_MNEM_POPAD, + /* 1D5 */ ZYDIS_MNEM_POPCNT, + /* 1D6 */ ZYDIS_MNEM_POPFD, + /* 1D7 */ ZYDIS_MNEM_POPFQ, + /* 1D8 */ ZYDIS_MNEM_POPFW, + /* 1D9 */ ZYDIS_MNEM_POR, + /* 1DA */ ZYDIS_MNEM_PREFETCH, + /* 1DB */ ZYDIS_MNEM_PREFETCHNTA, + /* 1DC */ ZYDIS_MNEM_PREFETCHT0, + /* 1DD */ ZYDIS_MNEM_PREFETCHT1, + /* 1DE */ ZYDIS_MNEM_PREFETCHT2, + /* 1DF */ ZYDIS_MNEM_PSADBW, + /* 1E0 */ ZYDIS_MNEM_PSHUFB, + /* 1E1 */ ZYDIS_MNEM_PSHUFD, + /* 1E2 */ ZYDIS_MNEM_PSHUFHW, + /* 1E3 */ ZYDIS_MNEM_PSHUFLW, + /* 1E4 */ ZYDIS_MNEM_PSHUFW, + /* 1E5 */ ZYDIS_MNEM_PSIGNB, + /* 1E6 */ ZYDIS_MNEM_PSIGND, + /* 1E7 */ ZYDIS_MNEM_PSIGNW, + /* 1E8 */ ZYDIS_MNEM_PSLLD, + /* 1E9 */ ZYDIS_MNEM_PSLLDQ, + /* 1EA */ ZYDIS_MNEM_PSLLQ, + /* 1EB */ ZYDIS_MNEM_PSLLW, + /* 1EC */ ZYDIS_MNEM_PSRAD, + /* 1ED */ ZYDIS_MNEM_PSRAW, + /* 1EE */ ZYDIS_MNEM_PSRLD, + /* 1EF */ ZYDIS_MNEM_PSRLDQ, + /* 1F0 */ ZYDIS_MNEM_PSRLQ, + /* 1F1 */ ZYDIS_MNEM_PSRLW, + /* 1F2 */ ZYDIS_MNEM_PSUBB, + /* 1F3 */ ZYDIS_MNEM_PSUBD, + /* 1F4 */ ZYDIS_MNEM_PSUBQ, + /* 1F5 */ ZYDIS_MNEM_PSUBSB, + /* 1F6 */ ZYDIS_MNEM_PSUBSW, + /* 1F7 */ ZYDIS_MNEM_PSUBUSB, + /* 1F8 */ ZYDIS_MNEM_PSUBUSW, + /* 1F9 */ ZYDIS_MNEM_PSUBW, + /* 1FA */ ZYDIS_MNEM_PSWAPD, + /* 1FB */ ZYDIS_MNEM_PTEST, + /* 1FC */ ZYDIS_MNEM_PUNPCKHBW, + /* 1FD */ ZYDIS_MNEM_PUNPCKHDQ, + /* 1FE */ ZYDIS_MNEM_PUNPCKHQDQ, + /* 1FF */ ZYDIS_MNEM_PUNPCKHWD, + /* 200 */ ZYDIS_MNEM_PUNPCKLBW, + /* 201 */ ZYDIS_MNEM_PUNPCKLDQ, + /* 202 */ ZYDIS_MNEM_PUNPCKLQDQ, + /* 203 */ ZYDIS_MNEM_PUNPCKLWD, + /* 204 */ ZYDIS_MNEM_PUSH, + /* 205 */ ZYDIS_MNEM_PUSHA, + /* 206 */ ZYDIS_MNEM_PUSHAD, + /* 207 */ ZYDIS_MNEM_PUSHFD, + /* 208 */ ZYDIS_MNEM_PUSHFQ, + /* 209 */ ZYDIS_MNEM_PUSHFW, + /* 20A */ ZYDIS_MNEM_PXOR, + /* 20B */ ZYDIS_MNEM_RCL, + /* 20C */ ZYDIS_MNEM_RCPPS, + /* 20D */ ZYDIS_MNEM_RCPSS, + /* 20E */ ZYDIS_MNEM_RCR, + /* 20F */ ZYDIS_MNEM_RDMSR, + /* 210 */ ZYDIS_MNEM_RDPMC, + /* 211 */ ZYDIS_MNEM_RDRAND, + /* 212 */ ZYDIS_MNEM_RDTSC, + /* 213 */ ZYDIS_MNEM_RDTSCP, + /* 214 */ ZYDIS_MNEM_REP, + /* 215 */ ZYDIS_MNEM_REPNE, + /* 216 */ ZYDIS_MNEM_RET, + /* 217 */ ZYDIS_MNEM_RETF, + /* 218 */ ZYDIS_MNEM_ROL, + /* 219 */ ZYDIS_MNEM_ROR, + /* 21A */ ZYDIS_MNEM_ROUNDPD, + /* 21B */ ZYDIS_MNEM_ROUNDPS, + /* 21C */ ZYDIS_MNEM_ROUNDSD, + /* 21D */ ZYDIS_MNEM_ROUNDSS, + /* 21E */ ZYDIS_MNEM_RSM, + /* 21F */ ZYDIS_MNEM_RSQRTPS, + /* 220 */ ZYDIS_MNEM_RSQRTSS, + /* 221 */ ZYDIS_MNEM_SAHF, + /* 222 */ ZYDIS_MNEM_SALC, + /* 223 */ ZYDIS_MNEM_SAR, + /* 224 */ ZYDIS_MNEM_SBB, + /* 225 */ ZYDIS_MNEM_SCASB, + /* 226 */ ZYDIS_MNEM_SCASD, + /* 227 */ ZYDIS_MNEM_SCASQ, + /* 228 */ ZYDIS_MNEM_SCASW, + /* 229 */ ZYDIS_MNEM_SETA, + /* 22A */ ZYDIS_MNEM_SETAE, + /* 22B */ ZYDIS_MNEM_SETB, + /* 22C */ ZYDIS_MNEM_SETBE, + /* 22D */ ZYDIS_MNEM_SETE, + /* 22E */ ZYDIS_MNEM_SETG, + /* 22F */ ZYDIS_MNEM_SETGE, + /* 230 */ ZYDIS_MNEM_SETL, + /* 231 */ ZYDIS_MNEM_SETLE, + /* 232 */ ZYDIS_MNEM_SETNE, + /* 233 */ ZYDIS_MNEM_SETNO, + /* 234 */ ZYDIS_MNEM_SETNP, + /* 235 */ ZYDIS_MNEM_SETNS, + /* 236 */ ZYDIS_MNEM_SETO, + /* 237 */ ZYDIS_MNEM_SETP, + /* 238 */ ZYDIS_MNEM_SETS, + /* 239 */ ZYDIS_MNEM_SFENCE, + /* 23A */ ZYDIS_MNEM_SGDT, + /* 23B */ ZYDIS_MNEM_SHL, + /* 23C */ ZYDIS_MNEM_SHLD, + /* 23D */ ZYDIS_MNEM_SHR, + /* 23E */ ZYDIS_MNEM_SHRD, + /* 23F */ ZYDIS_MNEM_SHUFPD, + /* 240 */ ZYDIS_MNEM_SHUFPS, + /* 241 */ ZYDIS_MNEM_SIDT, + /* 242 */ ZYDIS_MNEM_SKINIT, + /* 243 */ ZYDIS_MNEM_SLDT, + /* 244 */ ZYDIS_MNEM_SMSW, + /* 245 */ ZYDIS_MNEM_SQRTPD, + /* 246 */ ZYDIS_MNEM_SQRTPS, + /* 247 */ ZYDIS_MNEM_SQRTSD, + /* 248 */ ZYDIS_MNEM_SQRTSS, + /* 249 */ ZYDIS_MNEM_STC, + /* 24A */ ZYDIS_MNEM_STD, + /* 24B */ ZYDIS_MNEM_STGI, + /* 24C */ ZYDIS_MNEM_STI, + /* 24D */ ZYDIS_MNEM_STMXCSR, + /* 24E */ ZYDIS_MNEM_STOSB, + /* 24F */ ZYDIS_MNEM_STOSD, + /* 250 */ ZYDIS_MNEM_STOSQ, + /* 251 */ ZYDIS_MNEM_STOSW, + /* 252 */ ZYDIS_MNEM_STR, + /* 253 */ ZYDIS_MNEM_SUB, + /* 254 */ ZYDIS_MNEM_SUBPD, + /* 255 */ ZYDIS_MNEM_SUBPS, + /* 256 */ ZYDIS_MNEM_SUBSD, + /* 257 */ ZYDIS_MNEM_SUBSS, + /* 258 */ ZYDIS_MNEM_SWAPGS, + /* 259 */ ZYDIS_MNEM_SYSCALL, + /* 25A */ ZYDIS_MNEM_SYSENTER, + /* 25B */ ZYDIS_MNEM_SYSEXIT, + /* 25C */ ZYDIS_MNEM_SYSRET, + /* 25D */ ZYDIS_MNEM_TEST, + /* 25E */ ZYDIS_MNEM_UCOMISD, + /* 25F */ ZYDIS_MNEM_UCOMISS, + /* 260 */ ZYDIS_MNEM_UD2, + /* 261 */ ZYDIS_MNEM_UNPCKHPD, + /* 262 */ ZYDIS_MNEM_UNPCKHPS, + /* 263 */ ZYDIS_MNEM_UNPCKLPD, + /* 264 */ ZYDIS_MNEM_UNPCKLPS, + /* 265 */ ZYDIS_MNEM_VADDPD, + /* 266 */ ZYDIS_MNEM_VADDPS, + /* 267 */ ZYDIS_MNEM_VADDSD, + /* 268 */ ZYDIS_MNEM_VADDSS, + /* 269 */ ZYDIS_MNEM_VADDSUBPD, + /* 26A */ ZYDIS_MNEM_VADDSUBPS, + /* 26B */ ZYDIS_MNEM_VAESDEC, + /* 26C */ ZYDIS_MNEM_VAESDECLAST, + /* 26D */ ZYDIS_MNEM_VAESENC, + /* 26E */ ZYDIS_MNEM_VAESENCLAST, + /* 26F */ ZYDIS_MNEM_VAESIMC, + /* 270 */ ZYDIS_MNEM_VAESKEYGENASSIST, + /* 271 */ ZYDIS_MNEM_VANDNPD, + /* 272 */ ZYDIS_MNEM_VANDNPS, + /* 273 */ ZYDIS_MNEM_VANDPD, + /* 274 */ ZYDIS_MNEM_VANDPS, + /* 275 */ ZYDIS_MNEM_VBLENDPD, + /* 276 */ ZYDIS_MNEM_VBLENDPS, + /* 277 */ ZYDIS_MNEM_VBLENDVPD, + /* 278 */ ZYDIS_MNEM_VBLENDVPS, + /* 279 */ ZYDIS_MNEM_VBROADCASTSD, + /* 27A */ ZYDIS_MNEM_VBROADCASTSS, + /* 27B */ ZYDIS_MNEM_VCMPPD, + /* 27C */ ZYDIS_MNEM_VCMPPS, + /* 27D */ ZYDIS_MNEM_VCMPSD, + /* 27E */ ZYDIS_MNEM_VCMPSS, + /* 27F */ ZYDIS_MNEM_VCOMISD, + /* 280 */ ZYDIS_MNEM_VCOMISS, + /* 281 */ ZYDIS_MNEM_VCVTDQ2PD, + /* 282 */ ZYDIS_MNEM_VCVTDQ2PS, + /* 283 */ ZYDIS_MNEM_VCVTPD2DQ, + /* 284 */ ZYDIS_MNEM_VCVTPD2PS, + /* 285 */ ZYDIS_MNEM_VCVTPS2DQ, + /* 286 */ ZYDIS_MNEM_VCVTPS2PD, + /* 287 */ ZYDIS_MNEM_VCVTSD2SI, + /* 288 */ ZYDIS_MNEM_VCVTSD2SS, + /* 289 */ ZYDIS_MNEM_VCVTSI2SD, + /* 28A */ ZYDIS_MNEM_VCVTSI2SS, + /* 28B */ ZYDIS_MNEM_VCVTSS2SD, + /* 28C */ ZYDIS_MNEM_VCVTSS2SI, + /* 28D */ ZYDIS_MNEM_VCVTTPD2DQ, + /* 28E */ ZYDIS_MNEM_VCVTTPS2DQ, + /* 28F */ ZYDIS_MNEM_VCVTTSD2SI, + /* 290 */ ZYDIS_MNEM_VCVTTSS2SI, + /* 291 */ ZYDIS_MNEM_VDIVPD, + /* 292 */ ZYDIS_MNEM_VDIVPS, + /* 293 */ ZYDIS_MNEM_VDIVSD, + /* 294 */ ZYDIS_MNEM_VDIVSS, + /* 295 */ ZYDIS_MNEM_VDPPD, + /* 296 */ ZYDIS_MNEM_VDPPS, + /* 297 */ ZYDIS_MNEM_VERR, + /* 298 */ ZYDIS_MNEM_VERW, + /* 299 */ ZYDIS_MNEM_VEXTRACTF128, + /* 29A */ ZYDIS_MNEM_VEXTRACTPS, + /* 29B */ ZYDIS_MNEM_VHADDPD, + /* 29C */ ZYDIS_MNEM_VHADDPS, + /* 29D */ ZYDIS_MNEM_VHSUBPD, + /* 29E */ ZYDIS_MNEM_VHSUBPS, + /* 29F */ ZYDIS_MNEM_VINSERTF128, + /* 2A0 */ ZYDIS_MNEM_VINSERTPS, + /* 2A1 */ ZYDIS_MNEM_VLDDQU, + /* 2A2 */ ZYDIS_MNEM_VMASKMOVDQU, + /* 2A3 */ ZYDIS_MNEM_VMASKMOVPD, + /* 2A4 */ ZYDIS_MNEM_VMASKMOVPS, + /* 2A5 */ ZYDIS_MNEM_VMAXPD, + /* 2A6 */ ZYDIS_MNEM_VMAXPS, + /* 2A7 */ ZYDIS_MNEM_VMAXSD, + /* 2A8 */ ZYDIS_MNEM_VMAXSS, + /* 2A9 */ ZYDIS_MNEM_VMCALL, + /* 2AA */ ZYDIS_MNEM_VMCLEAR, + /* 2AB */ ZYDIS_MNEM_VMINPD, + /* 2AC */ ZYDIS_MNEM_VMINPS, + /* 2AD */ ZYDIS_MNEM_VMINSD, + /* 2AE */ ZYDIS_MNEM_VMINSS, + /* 2AF */ ZYDIS_MNEM_VMLAUNCH, + /* 2B0 */ ZYDIS_MNEM_VMLOAD, + /* 2B1 */ ZYDIS_MNEM_VMMCALL, + /* 2B2 */ ZYDIS_MNEM_VMOVAPD, + /* 2B3 */ ZYDIS_MNEM_VMOVAPS, + /* 2B4 */ ZYDIS_MNEM_VMOVD, + /* 2B5 */ ZYDIS_MNEM_VMOVDDUP, + /* 2B6 */ ZYDIS_MNEM_VMOVDQA, + /* 2B7 */ ZYDIS_MNEM_VMOVDQU, + /* 2B8 */ ZYDIS_MNEM_VMOVHLPS, + /* 2B9 */ ZYDIS_MNEM_VMOVHPD, + /* 2BA */ ZYDIS_MNEM_VMOVHPS, + /* 2BB */ ZYDIS_MNEM_VMOVLHPS, + /* 2BC */ ZYDIS_MNEM_VMOVLPD, + /* 2BD */ ZYDIS_MNEM_VMOVLPS, + /* 2BE */ ZYDIS_MNEM_VMOVMSKPD, + /* 2BF */ ZYDIS_MNEM_VMOVMSKPS, + /* 2C0 */ ZYDIS_MNEM_VMOVNTDQ, + /* 2C1 */ ZYDIS_MNEM_VMOVNTDQA, + /* 2C2 */ ZYDIS_MNEM_VMOVNTPD, + /* 2C3 */ ZYDIS_MNEM_VMOVNTPS, + /* 2C4 */ ZYDIS_MNEM_VMOVQ, + /* 2C5 */ ZYDIS_MNEM_VMOVSD, + /* 2C6 */ ZYDIS_MNEM_VMOVSHDUP, + /* 2C7 */ ZYDIS_MNEM_VMOVSLDUP, + /* 2C8 */ ZYDIS_MNEM_VMOVSS, + /* 2C9 */ ZYDIS_MNEM_VMOVUPD, + /* 2CA */ ZYDIS_MNEM_VMOVUPS, + /* 2CB */ ZYDIS_MNEM_VMPSADBW, + /* 2CC */ ZYDIS_MNEM_VMPTRLD, + /* 2CD */ ZYDIS_MNEM_VMPTRST, + /* 2CE */ ZYDIS_MNEM_VMREAD, + /* 2CF */ ZYDIS_MNEM_VMRESUME, + /* 2D0 */ ZYDIS_MNEM_VMRUN, + /* 2D1 */ ZYDIS_MNEM_VMSAVE, + /* 2D2 */ ZYDIS_MNEM_VMULPD, + /* 2D3 */ ZYDIS_MNEM_VMULPS, + /* 2D4 */ ZYDIS_MNEM_VMULSD, + /* 2D5 */ ZYDIS_MNEM_VMULSS, + /* 2D6 */ ZYDIS_MNEM_VMWRITE, + /* 2D7 */ ZYDIS_MNEM_VMXOFF, + /* 2D8 */ ZYDIS_MNEM_VMXON, + /* 2D9 */ ZYDIS_MNEM_VORPD, + /* 2DA */ ZYDIS_MNEM_VORPS, + /* 2DB */ ZYDIS_MNEM_VPABSB, + /* 2DC */ ZYDIS_MNEM_VPABSD, + /* 2DD */ ZYDIS_MNEM_VPABSW, + /* 2DE */ ZYDIS_MNEM_VPACKSSDW, + /* 2DF */ ZYDIS_MNEM_VPACKSSWB, + /* 2E0 */ ZYDIS_MNEM_VPACKUSDW, + /* 2E1 */ ZYDIS_MNEM_VPACKUSWB, + /* 2E2 */ ZYDIS_MNEM_VPADDB, + /* 2E3 */ ZYDIS_MNEM_VPADDD, + /* 2E4 */ ZYDIS_MNEM_VPADDQ, + /* 2E5 */ ZYDIS_MNEM_VPADDSB, + /* 2E6 */ ZYDIS_MNEM_VPADDSW, + /* 2E7 */ ZYDIS_MNEM_VPADDUSB, + /* 2E8 */ ZYDIS_MNEM_VPADDUSW, + /* 2E9 */ ZYDIS_MNEM_VPADDW, + /* 2EA */ ZYDIS_MNEM_VPALIGNR, + /* 2EB */ ZYDIS_MNEM_VPAND, + /* 2EC */ ZYDIS_MNEM_VPANDN, + /* 2ED */ ZYDIS_MNEM_VPAVGB, + /* 2EE */ ZYDIS_MNEM_VPAVGW, + /* 2EF */ ZYDIS_MNEM_VPBLENDVB, + /* 2F0 */ ZYDIS_MNEM_VPBLENDW, + /* 2F1 */ ZYDIS_MNEM_VPCLMULQDQ, + /* 2F2 */ ZYDIS_MNEM_VPCMPEQB, + /* 2F3 */ ZYDIS_MNEM_VPCMPEQD, + /* 2F4 */ ZYDIS_MNEM_VPCMPEQQ, + /* 2F5 */ ZYDIS_MNEM_VPCMPEQW, + /* 2F6 */ ZYDIS_MNEM_VPCMPESTRI, + /* 2F7 */ ZYDIS_MNEM_VPCMPESTRM, + /* 2F8 */ ZYDIS_MNEM_VPCMPGTB, + /* 2F9 */ ZYDIS_MNEM_VPCMPGTD, + /* 2FA */ ZYDIS_MNEM_VPCMPGTQ, + /* 2FB */ ZYDIS_MNEM_VPCMPGTW, + /* 2FC */ ZYDIS_MNEM_VPCMPISTRI, + /* 2FD */ ZYDIS_MNEM_VPCMPISTRM, + /* 2FE */ ZYDIS_MNEM_VPERM2F128, + /* 2FF */ ZYDIS_MNEM_VPERMILPD, + /* 300 */ ZYDIS_MNEM_VPERMILPS, + /* 301 */ ZYDIS_MNEM_VPEXTRB, + /* 302 */ ZYDIS_MNEM_VPEXTRD, + /* 303 */ ZYDIS_MNEM_VPEXTRQ, + /* 304 */ ZYDIS_MNEM_VPEXTRW, + /* 305 */ ZYDIS_MNEM_VPHADDD, + /* 306 */ ZYDIS_MNEM_VPHADDSW, + /* 307 */ ZYDIS_MNEM_VPHADDW, + /* 308 */ ZYDIS_MNEM_VPHMINPOSUW, + /* 309 */ ZYDIS_MNEM_VPHSUBD, + /* 30A */ ZYDIS_MNEM_VPHSUBSW, + /* 30B */ ZYDIS_MNEM_VPHSUBW, + /* 30C */ ZYDIS_MNEM_VPINSRB, + /* 30D */ ZYDIS_MNEM_VPINSRD, + /* 30E */ ZYDIS_MNEM_VPINSRQ, + /* 30F */ ZYDIS_MNEM_VPINSRW, + /* 310 */ ZYDIS_MNEM_VPMADDUBSW, + /* 311 */ ZYDIS_MNEM_VPMADDWD, + /* 312 */ ZYDIS_MNEM_VPMAXSB, + /* 313 */ ZYDIS_MNEM_VPMAXSD, + /* 314 */ ZYDIS_MNEM_VPMAXSW, + /* 315 */ ZYDIS_MNEM_VPMAXUB, + /* 316 */ ZYDIS_MNEM_VPMAXUD, + /* 317 */ ZYDIS_MNEM_VPMAXUW, + /* 318 */ ZYDIS_MNEM_VPMINSB, + /* 319 */ ZYDIS_MNEM_VPMINSD, + /* 31A */ ZYDIS_MNEM_VPMINSW, + /* 31B */ ZYDIS_MNEM_VPMINUB, + /* 31C */ ZYDIS_MNEM_VPMINUD, + /* 31D */ ZYDIS_MNEM_VPMINUW, + /* 31E */ ZYDIS_MNEM_VPMOVMSKB, + /* 31F */ ZYDIS_MNEM_VPMOVSXBD, + /* 320 */ ZYDIS_MNEM_VPMOVSXBQ, + /* 321 */ ZYDIS_MNEM_VPMOVSXBW, + /* 322 */ ZYDIS_MNEM_VPMOVSXWD, + /* 323 */ ZYDIS_MNEM_VPMOVSXWQ, + /* 324 */ ZYDIS_MNEM_VPMOVZXBD, + /* 325 */ ZYDIS_MNEM_VPMOVZXBQ, + /* 326 */ ZYDIS_MNEM_VPMOVZXBW, + /* 327 */ ZYDIS_MNEM_VPMOVZXDQ, + /* 328 */ ZYDIS_MNEM_VPMOVZXWD, + /* 329 */ ZYDIS_MNEM_VPMOVZXWQ, + /* 32A */ ZYDIS_MNEM_VPMULDQ, + /* 32B */ ZYDIS_MNEM_VPMULHRSW, + /* 32C */ ZYDIS_MNEM_VPMULHUW, + /* 32D */ ZYDIS_MNEM_VPMULHW, + /* 32E */ ZYDIS_MNEM_VPMULLD, + /* 32F */ ZYDIS_MNEM_VPMULLW, + /* 330 */ ZYDIS_MNEM_VPOR, + /* 331 */ ZYDIS_MNEM_VPSADBW, + /* 332 */ ZYDIS_MNEM_VPSHUFB, + /* 333 */ ZYDIS_MNEM_VPSHUFD, + /* 334 */ ZYDIS_MNEM_VPSHUFHW, + /* 335 */ ZYDIS_MNEM_VPSHUFLW, + /* 336 */ ZYDIS_MNEM_VPSIGNB, + /* 337 */ ZYDIS_MNEM_VPSIGND, + /* 338 */ ZYDIS_MNEM_VPSIGNW, + /* 339 */ ZYDIS_MNEM_VPSLLD, + /* 33A */ ZYDIS_MNEM_VPSLLDQ, + /* 33B */ ZYDIS_MNEM_VPSLLQ, + /* 33C */ ZYDIS_MNEM_VPSLLW, + /* 33D */ ZYDIS_MNEM_VPSRAD, + /* 33E */ ZYDIS_MNEM_VPSRAW, + /* 33F */ ZYDIS_MNEM_VPSRLD, + /* 340 */ ZYDIS_MNEM_VPSRLDQ, + /* 341 */ ZYDIS_MNEM_VPSRLQ, + /* 342 */ ZYDIS_MNEM_VPSRLW, + /* 343 */ ZYDIS_MNEM_VPSUBB, + /* 344 */ ZYDIS_MNEM_VPSUBD, + /* 345 */ ZYDIS_MNEM_VPSUBQ, + /* 346 */ ZYDIS_MNEM_VPSUBSB, + /* 347 */ ZYDIS_MNEM_VPSUBSW, + /* 348 */ ZYDIS_MNEM_VPSUBUSB, + /* 349 */ ZYDIS_MNEM_VPSUBUSW, + /* 34A */ ZYDIS_MNEM_VPSUBW, + /* 34B */ ZYDIS_MNEM_VPTEST, + /* 34C */ ZYDIS_MNEM_VPUNPCKHBW, + /* 34D */ ZYDIS_MNEM_VPUNPCKHDQ, + /* 34E */ ZYDIS_MNEM_VPUNPCKHQDQ, + /* 34F */ ZYDIS_MNEM_VPUNPCKHWD, + /* 350 */ ZYDIS_MNEM_VPUNPCKLBW, + /* 351 */ ZYDIS_MNEM_VPUNPCKLDQ, + /* 352 */ ZYDIS_MNEM_VPUNPCKLQDQ, + /* 353 */ ZYDIS_MNEM_VPUNPCKLWD, + /* 354 */ ZYDIS_MNEM_VPXOR, + /* 355 */ ZYDIS_MNEM_VRCPPS, + /* 356 */ ZYDIS_MNEM_VRCPSS, + /* 357 */ ZYDIS_MNEM_VROUNDPD, + /* 358 */ ZYDIS_MNEM_VROUNDPS, + /* 359 */ ZYDIS_MNEM_VROUNDSD, + /* 35A */ ZYDIS_MNEM_VROUNDSS, + /* 35B */ ZYDIS_MNEM_VRSQRTPS, + /* 35C */ ZYDIS_MNEM_VRSQRTSS, + /* 35D */ ZYDIS_MNEM_VSHUFPD, + /* 35E */ ZYDIS_MNEM_VSHUFPS, + /* 35F */ ZYDIS_MNEM_VSQRTPD, + /* 360 */ ZYDIS_MNEM_VSQRTPS, + /* 361 */ ZYDIS_MNEM_VSQRTSD, + /* 362 */ ZYDIS_MNEM_VSQRTSS, + /* 363 */ ZYDIS_MNEM_VSTMXCSR, + /* 364 */ ZYDIS_MNEM_VSUBPD, + /* 365 */ ZYDIS_MNEM_VSUBPS, + /* 366 */ ZYDIS_MNEM_VSUBSD, + /* 367 */ ZYDIS_MNEM_VSUBSS, + /* 368 */ ZYDIS_MNEM_VTESTPD, + /* 369 */ ZYDIS_MNEM_VTESTPS, + /* 36A */ ZYDIS_MNEM_VUCOMISD, + /* 36B */ ZYDIS_MNEM_VUCOMISS, + /* 36C */ ZYDIS_MNEM_VUNPCKHPD, + /* 36D */ ZYDIS_MNEM_VUNPCKHPS, + /* 36E */ ZYDIS_MNEM_VUNPCKLPD, + /* 36F */ ZYDIS_MNEM_VUNPCKLPS, + /* 370 */ ZYDIS_MNEM_VXORPD, + /* 371 */ ZYDIS_MNEM_VXORPS, + /* 372 */ ZYDIS_MNEM_VZEROALL, + /* 373 */ ZYDIS_MNEM_VZEROUPPER, + /* 374 */ ZYDIS_MNEM_WAIT, + /* 375 */ ZYDIS_MNEM_WBINVD, + /* 376 */ ZYDIS_MNEM_WRMSR, + /* 377 */ ZYDIS_MNEM_XADD, + /* 378 */ ZYDIS_MNEM_XCHG, + /* 379 */ ZYDIS_MNEM_XCRYPTCBC, + /* 37A */ ZYDIS_MNEM_XCRYPTCFB, + /* 37B */ ZYDIS_MNEM_XCRYPTCTR, + /* 37C */ ZYDIS_MNEM_XCRYPTECB, + /* 37D */ ZYDIS_MNEM_XCRYPTOFB, + /* 37E */ ZYDIS_MNEM_XGETBV, + /* 37F */ ZYDIS_MNEM_XLATB, + /* 380 */ ZYDIS_MNEM_XOR, + /* 381 */ ZYDIS_MNEM_XORPD, + /* 382 */ ZYDIS_MNEM_XORPS, + /* 383 */ ZYDIS_MNEM_XRSTOR, + /* 384 */ ZYDIS_MNEM_XSAVE, + /* 385 */ ZYDIS_MNEM_XSETBV, + /* 386 */ ZYDIS_MNEM_XSHA1, + /* 387 */ ZYDIS_MNEM_XSHA256, + /* 388 */ ZYDIS_MNEM_XSTORE, + + ZYDIS_MNEM_FORCE_WORD = 0x7FFF +} ZydisInstructionMnemonic; + +/* TODO: Port instruction definition types */ + +#ifdef __cplusplus +} +#endif + +#endif // _ZYDIS_OPCODETABLE_H_ \ No newline at end of file diff --git a/Bindings/C/ZydisSymbolResolver.cpp b/Bindings/C/ZydisSymbolResolver.cpp new file mode 100644 index 0000000..6d8277a --- /dev/null +++ b/Bindings/C/ZydisSymbolResolver.cpp @@ -0,0 +1,144 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include "ZydisSymbolResolver.h" +#include + +/* CustomSymbolResolver ========================================================================= */ + +inline Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( + ZydisBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline const Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( + const ZydisBaseSymbolResolverContext *ctx) +{ + return reinterpret_cast(ctx); +} + +inline ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( + Zydis::BaseSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( + const Zydis::BaseSymbolResolver *ptr) +{ + return reinterpret_cast(ptr); +} + +inline Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( + ZydisInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline const Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( + const ZydisInstructionInfo *ptr) +{ + static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); + return reinterpret_cast(ptr); +} + +inline ZydisInstructionInfo* ZydisInstructionInfo_CPtr( + Zydis::InstructionInfo *ptr) +{ + return reinterpret_cast(ptr); +} + +inline const ZydisInstructionInfo* ZydisInstructionInfo_CPtr( + const Zydis::InstructionInfo *ptr) +{ + return reinterpret_cast(ptr); +} + +/* Internal helper class ----------------------------------------------------------------------- */ + +namespace +{ + +class ZydisCustomSymbolResolver : public Zydis::BaseSymbolResolver +{ + ZydisResolveSymbol_t m_resolverCb; + void* m_userData; +public: + /** + * @brief Constructor. + * @param resolverCb The resolver callback. + * @param userData User provided pointer to arbitrary data passed to resolve callback. + */ + ZydisCustomSymbolResolver(ZydisResolveSymbol_t resolverCb, void *userData); + /** + * @brief Destructor. + */ + ~ZydisCustomSymbolResolver() override = default; +public: + /** + * @brief Resolves a symbol. + * @param info The instruction info. + * @param address The address. + * @param offset Reference to an unsigned 64 bit integer that receives an offset + * relative to the base address of the symbol. + * @return The name of the symbol, if the symbol was found, @c NULL if not. + */ + const char* resolveSymbol(const Zydis::InstructionInfo &info, uint64_t address, + uint64_t &offset) override; +}; + +ZydisCustomSymbolResolver::ZydisCustomSymbolResolver(ZydisResolveSymbol_t resolverCb, + void *userData) + : m_resolverCb(resolverCb) + , m_userData(userData) +{ + +} + +const char* ZydisCustomSymbolResolver::resolveSymbol( + const Zydis::InstructionInfo &info, uint64_t address, uint64_t &offset) +{ + return m_resolverCb(ZydisInstructionInfo_CPtr(&info), address, &offset, m_userData); +} + +} // anon namespace + +/* C API implementation ------------------------------------------------------------------------ */ + +ZydisBaseSymbolResolverContext* ZydisCustomSymbolResolver_Create( + ZydisResolveSymbol_t resolverCb, + void *userData) +{ + return ZydisBaseSymbolResolver_CPtr(new ZydisCustomSymbolResolver(resolverCb, userData)); +} + +/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/ZydisSymbolResolver.h b/Bindings/C/ZydisSymbolResolver.h new file mode 100644 index 0000000..371a121 --- /dev/null +++ b/Bindings/C/ZydisSymbolResolver.h @@ -0,0 +1,126 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#ifndef _ZYDIS_SYMBOLRESOLVER_H_ +#define _ZYDIS_SYMBOLRESOLVER_H_ + +#include "ZydisTypes.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* BaseSymbolResolver ======================================================================== */ + +typedef struct _ZydisBaseSymbolResolverContext { int a; } ZydisBaseSymbolResolverContext; + +/** + * @brief Releases a symbol resolver. + * @param ctx The context of the symbol resolver to free. + * The context may no longer used after it was released. + */ +void ZydisBaseSymbolResolver_Release(ZydisBaseSymbolResolverContext *ctx); + +/** + * @brief Resolves a symbol. + * @param ctx The symbol resolver context. + * @param info The instruction info. + * @param address The address. + * @param offset Pointer to an unsigned 64 bit integer that receives an offset relative to + * the base address of the symbol. + * @return The name of the symbol if the symbol was found, else @c NULL. + */ +const char* ZydisBaseSymbolResolver_ResolveSymbol(ZydisBaseSymbolResolverContext *ctx, + const ZydisInstructionInfo *info, uint64_t address, uint64_t *offset); + +/* ExactSymbolResolver ======================================================================= */ + +/** + * @brief Creates an exact symbol resolver. + * @return @c NULL if it fails, else a symbol resolver context. + * @see BaseSymbolResolver_Release + * An exact resolver is a simple symbol resolver that only matches exact addresses. + */ +// TODO: verify return value +ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_Create(void); + +/** + * @brief Query if the given address is a known symbol. + * @param ctx The exact symbol resolver context. + * @param address The address. + * @return @c true if the address is known, @c false if not. + */ +bool ZydisExactSymbolResolver_ContainsSymbol(ZydisBaseSymbolResolverContext *ctx, uint64_t address); + +/** + * @brief Adds or changes a symbol. + * @param ctx The exact symbol resolver context. + * @param address The address. + * @param name The symbol name. + */ +void ZydisExactSymbolResolverContext_SetSymbol(ZydisBaseSymbolResolverContext *ctx, + uint64_t address, const char* name); + +/** + * @brief Removes the symbol described by address. + * @param ctx The exact symbol resolver context. + * @param address The address. + * This will invalidate all char-pointers to the affected symbol name. + */ +void ZydisExactSymbolResolverContext_RemoveSymbol(ZydisBaseSymbolResolverContext *ctx, + uint64_t address); + +/** + * @brief Clears the symbol tree. + * @param ctx The exact symbol resolver context. + */ +void ExactSymbolResolverContext_Clear(ZydisBaseSymbolResolverContext *ctx); + +/* CustomSymbolResolver ====================================================================== */ + +typedef const char* (*ZydisResolveSymbol_t)(const ZydisInstructionInfo *info, uint64_t address, + uint64_t *offset, void *userData); + +/** + * @brief Creates a custom symbol resolver. + * @param resolverCb The resolver callback consulted when symbols need to be resolved. + * @param userData A pointer to arbitrary data passed to the resolver callback. + * May also be @c NULL. + * @return @c NULL if it fails, else a symbol resolver context. + */ +ZydisBaseSymbolResolverContext* CustomSymbolResolver_Create(ZydisResolveSymbol_t resolverCb, + void *userData); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZYDIS_SYMBOLRESOLVER_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisDisassemblerTypes.h b/Bindings/C/ZydisTypes.h similarity index 70% rename from VerteronDisassemblerEngine/ZyDisDisassemblerTypes.h rename to Bindings/C/ZydisTypes.h index b80bd9a..5c9527c 100644 --- a/VerteronDisassemblerEngine/ZyDisDisassemblerTypes.h +++ b/Bindings/C/ZydisTypes.h @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : athre0z - - Last change : 04. February 2015 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,14 +26,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ +***************************************************************************************************/ -#ifndef _VDE_ZyDisDISASSEMBLERTYPESC_H_ -#define _VDE_ZyDisDISASSEMBLERTYPESC_H_ +#ifndef _ZYDIS_TYPES_H_ +#define _ZYDIS_TYPES_H_ #include #include -#include "ZyDisOpcodeTable.h" +#include "ZydisOpcodeTable.h" #ifdef __cplusplus extern "C" @@ -45,218 +43,218 @@ extern "C" /** * @brief Values that represent additional flags of a decoded instruction. */ -typedef enum _ZyDisInstructionFlags /* : uint32_t */ +typedef enum _ZydisInstructionFlags /* : uint32_t */ { - IF_NONE = 0x00000000, + ZYDIS_IF_NONE = 0x00000000, /** * @brief The instruction was decoded in 16 bit disassembler mode. */ - IF_DISASSEMBLER_MODE_16 = 0x00000001, + ZYDIS_IF_DISASSEMBLER_MODE_16 = 0x00000001, /** * @brief The instruction was decoded in 32 bit disassembler mode. */ - IF_DISASSEMBLER_MODE_32 = 0x00000002, + ZYDIS_IF_DISASSEMBLER_MODE_32 = 0x00000002, /** * @brief The instruction was decoded in 64 bit disassembler mode. */ - IF_DISASSEMBLER_MODE_64 = 0x00000004, + ZYDIS_IF_DISASSEMBLER_MODE_64 = 0x00000004, /** * @brief The instruction has a segment prefix (0x26, 0x2E, 0x36, 0x3E, 0x64, 0x65). */ - IF_PREFIX_SEGMENT = 0x00000008, + ZYDIS_IF_PREFIX_SEGMENT = 0x00000008, /** * @brief The instruction has a lock prefix (0xF0). */ - IF_PREFIX_LOCK = 0x00000010, + ZYDIS_IF_PREFIX_LOCK = 0x00000010, /** * @brief The instruction has a repne prefix (0xF2). */ - IF_PREFIX_REPNE = 0x00000020, + ZYDIS_IF_PREFIX_REPNE = 0x00000020, /** * @brief The instruction has a rep prefix (0xF3). */ - IF_PREFIX_REP = 0x00000040, + ZYDIS_IF_PREFIX_REP = 0x00000040, /** * @brief The instruction has an operand size prefix (0x66). */ - IF_PREFIX_OPERAND_SIZE = 0x00000080, + ZYDIS_IF_PREFIX_OPERAND_SIZE = 0x00000080, /** * @brief The instruction has an address size prefix (0x67). */ - IF_PREFIX_ADDRESS_SIZE = 0x00000100, + ZYDIS_IF_PREFIX_ADDRESS_SIZE = 0x00000100, /** * @brief The instruction has a rex prefix (0x40 - 0x4F). */ - IF_PREFIX_REX = 0x00000200, + ZYDIS_IF_PREFIX_REX = 0x00000200, /** * @brief The instruction has a vex prefix (0xC4 or 0xC5). */ - IF_PREFIX_VEX = 0x00000400, + ZYDIS_IF_PREFIX_VEX = 0x00000400, /** * @brief The instruction has a modrm byte. */ - IF_MODRM = 0x00000800, + ZYDIS_IF_MODRM = 0x00000800, /** * @brief The instruction has a sib byte. */ - IF_SIB = 0x00001000, + ZYDIS_IF_SIB = 0x00001000, /** * @brief The instruction has an operand with a relative address. */ - IF_RELATIVE = 0x00002000, + ZYDIS_IF_RELATIVE = 0x00002000, /** * @brief An error occured while decoding the instruction. */ - IF_ERROR_MASK = 0xFFF00000, + ZYDIS_IF_ERROR_MASK = 0xFFF00000, /** * @brief End of input reached while decoding the instruction. */ - IF_ERROR_END_OF_INPUT = 0x00100000, + ZYDIS_IF_ERROR_END_OF_INPUT = 0x00100000, /** * @brief The instruction length has exceeded the maximum of 15 bytes. */ - IF_ERROR_LENGTH = 0x00200000, + ZYDIS_IF_ERROR_LENGTH = 0x00200000, /** * @brief The instruction is invalid. */ - IF_ERROR_INVALID = 0x00400000, + ZYDIS_IF_ERROR_INVALID = 0x00400000, /** * @brief The instruction is invalid in 64 bit mode. */ - IF_ERROR_INVALID_64 = 0x00800000, + ZYDIS_IF_ERROR_INVALID_64 = 0x00800000, /** * @brief An error occured while decoding the instruction operands. */ - IF_ERROR_OPERAND = 0x01000000, + ZYDIS_IF_ERROR_OPERAND = 0x01000000, - IF_FORCE_DWORD = 0x7FFFFFFF -} ZyDisInstructionFlags; + ZYDIS_IF_FORCE_DWORD = 0x7FFFFFFF +} ZydisInstructionFlags; /** * @brief Values that represent a cpu register. */ -typedef enum _ZyDisRegister /* : uint16_t */ +typedef enum _ZydisRegister /* : uint16_t */ { - REG_NONE, + ZYDIS_REG_NONE, /* 8 bit general purpose registers */ - REG_AL, REG_CL, REG_DL, REG_BL, - REG_AH, REG_CH, REG_DH, REG_BH, - REG_SPL, REG_BPL, REG_SIL, REG_DIL, - REG_R8B, REG_R9B, REG_R10B, REG_R11B, - REG_R12B, REG_R13B, REG_R14B, REG_R15B, + ZYDIS_REG_AL, ZYDIS_REG_CL, ZYDIS_REG_DL, ZYDIS_REG_BL, + ZYDIS_REG_AH, ZYDIS_REG_CH, ZYDIS_REG_DH, ZYDIS_REG_BH, + ZYDIS_REG_SPL, ZYDIS_REG_BPL, ZYDIS_REG_SIL, ZYDIS_REG_DIL, + ZYDIS_REG_R8B, ZYDIS_REG_R9B, ZYDIS_REG_R10B, ZYDIS_REG_R11B, + ZYDIS_REG_R12B, ZYDIS_REG_R13B, ZYDIS_REG_R14B, ZYDIS_REG_R15B, /* 16 bit general purpose registers */ - REG_AX, REG_CX, REG_DX, REG_BX, - REG_SP, REG_BP, REG_SI, REG_DI, - REG_R8W, REG_R9W, REG_R10W, REG_R11W, - REG_R12W, REG_R13W, REG_R14W, REG_R15W, + ZYDIS_REG_AX, ZYDIS_REG_CX, ZYDIS_REG_DX, ZYDIS_REG_BX, + ZYDIS_REG_SP, ZYDIS_REG_BP, ZYDIS_REG_SI, ZYDIS_REG_DI, + ZYDIS_REG_R8W, ZYDIS_REG_R9W, ZYDIS_REG_R10W, ZYDIS_REG_R11W, + ZYDIS_REG_R12W, ZYDIS_REG_R13W, ZYDIS_REG_R14W, ZYDIS_REG_R15W, /* 32 bit general purpose registers */ - REG_EAX, REG_ECX, REG_EDX, REG_EBX, - REG_ESP, REG_EBP, REG_ESI, REG_EDI, - REG_R8D, REG_R9D, REG_R10D, REG_R11D, - REG_R12D, REG_R13D, REG_R14D, REG_R15D, + ZYDIS_REG_EAX, ZYDIS_REG_ECX, ZYDIS_REG_EDX, ZYDIS_REG_EBX, + ZYDIS_REG_ESP, ZYDIS_REG_EBP, ZYDIS_REG_ESI, ZYDIS_REG_EDI, + ZYDIS_REG_R8D, ZYDIS_REG_R9D, ZYDIS_REG_R10D, ZYDIS_REG_R11D, + ZYDIS_REG_R12D, ZYDIS_REG_R13D, ZYDIS_REG_R14D, ZYDIS_REG_R15D, /* 64 bit general purpose registers */ - REG_RAX, REG_RCX, REG_RDX, REG_RBX, - REG_RSP, REG_RBP, REG_RSI, REG_RDI, - REG_R8, REG_R9, REG_R10, REG_R11, - REG_R12, REG_R13, REG_R14, REG_R15, + ZYDIS_REG_RAX, ZYDIS_REG_RCX, ZYDIS_REG_RDX, ZYDIS_REG_RBX, + ZYDIS_REG_RSP, ZYDIS_REG_RBP, ZYDIS_REG_RSI, ZYDIS_REG_RDI, + ZYDIS_REG_R8, ZYDIS_REG_R9, ZYDIS_REG_R10, ZYDIS_REG_R11, + ZYDIS_REG_R12, ZYDIS_REG_R13, ZYDIS_REG_R14, ZYDIS_REG_R15, /* segment registers */ - REG_ES, REG_CS, REG_SS, - REG_DS, REG_FS, REG_GS, + ZYDIS_REG_ES, ZYDIS_REG_CS, ZYDIS_REG_SS, + ZYDIS_REG_DS, ZYDIS_REG_FS, ZYDIS_REG_GS, /* control registers */ - REG_CR0, REG_CR1, REG_CR2, REG_CR3, - REG_CR4, REG_CR5, REG_CR6, REG_CR7, - REG_CR8, REG_CR9, REG_CR10, REG_CR11, - REG_CR12, REG_CR13, REG_CR14, REG_CR15, + ZYDIS_REG_CR0, ZYDIS_REG_CR1, ZYDIS_REG_CR2, ZYDIS_REG_CR3, + ZYDIS_REG_CR4, ZYDIS_REG_CR5, ZYDIS_REG_CR6, ZYDIS_REG_CR7, + ZYDIS_REG_CR8, ZYDIS_REG_CR9, ZYDIS_REG_CR10, ZYDIS_REG_CR11, + ZYDIS_REG_CR12, ZYDIS_REG_CR13, ZYDIS_REG_CR14, ZYDIS_REG_CR15, /* debug registers */ - REG_DR0, REG_DR1, REG_DR2, REG_DR3, - REG_DR4, REG_DR5, REG_DR6, REG_DR7, - REG_DR8, REG_DR9, REG_DR10, REG_DR11, - REG_DR12, REG_DR13, REG_DR14, REG_DR15, + ZYDIS_REG_DR0, ZYDIS_REG_DR1, ZYDIS_REG_DR2, ZYDIS_REG_DR3, + ZYDIS_REG_DR4, ZYDIS_REG_DR5, ZYDIS_REG_DR6, ZYDIS_REG_DR7, + ZYDIS_REG_DR8, ZYDIS_REG_DR9, ZYDIS_REG_DR10, ZYDIS_REG_DR11, + ZYDIS_REG_DR12, ZYDIS_REG_DR13, ZYDIS_REG_DR14, ZYDIS_REG_DR15, /* mmx registers */ - REG_MM0, REG_MM1, REG_MM2, REG_MM3, - REG_MM4, REG_MM5, REG_MM6, REG_MM7, + ZYDIS_REG_MM0, ZYDIS_REG_MM1, ZYDIS_REG_MM2, ZYDIS_REG_MM3, + ZYDIS_REG_MM4, ZYDIS_REG_MM5, ZYDIS_REG_MM6, ZYDIS_REG_MM7, /* x87 registers */ - REG_ST0, REG_ST1, REG_ST2, REG_ST3, - REG_ST4, REG_ST5, REG_ST6, REG_ST7, + ZYDIS_REG_ST0, ZYDIS_REG_ST1, ZYDIS_REG_ST2, ZYDIS_REG_ST3, + ZYDIS_REG_ST4, ZYDIS_REG_ST5, ZYDIS_REG_ST6, ZYDIS_REG_ST7, /* extended multimedia registers */ - REG_XMM0, REG_XMM1, REG_XMM2, REG_XMM3, - REG_XMM4, REG_XMM5, REG_XMM6, REG_XMM7, - REG_XMM8, REG_XMM9, REG_XMM10, REG_XMM11, - REG_XMM12, REG_XMM13, REG_XMM14, REG_XMM15, + ZYDIS_REG_XMM0, ZYDIS_REG_XMM1, ZYDIS_REG_XMM2, ZYDIS_REG_XMM3, + ZYDIS_REG_XMM4, ZYDIS_REG_XMM5, ZYDIS_REG_XMM6, ZYDIS_REG_XMM7, + ZYDIS_REG_XMM8, ZYDIS_REG_XMM9, ZYDIS_REG_XMM10, ZYDIS_REG_XMM11, + ZYDIS_REG_XMM12, ZYDIS_REG_XMM13, ZYDIS_REG_XMM14, ZYDIS_REG_XMM15, /* 256 bit multimedia registers */ - REG_YMM0, REG_YMM1, REG_YMM2, REG_YMM3, - REG_YMM4, REG_YMM5, REG_YMM6, REG_YMM7, - REG_YMM8, REG_YMM9, REG_YMM10, REG_YMM11, - REG_YMM12, REG_YMM13, REG_YMM14, YMM15, + ZYDIS_REG_YMM0, ZYDIS_REG_YMM1, ZYDIS_REG_YMM2, ZYDIS_REG_YMM3, + ZYDIS_REG_YMM4, ZYDIS_REG_YMM5, ZYDIS_REG_YMM6, ZYDIS_REG_YMM7, + ZYDIS_REG_YMM8, ZYDIS_REG_YMM9, ZYDIS_REG_YMM10, ZYDIS_REG_YMM11, + ZYDIS_REG_YMM12, ZYDIS_REG_YMM13, ZYDIS_REG_YMM14, YMM15, /* instruction pointer register */ - REG_RIP, + ZYDIS_REG_RIP, - REG_FORCE_WORD = 0x7FFF -} ZyDisRegister; + ZYDIS_REG_FORCE_WORD = 0x7FFF +} ZydisRegister; /** * @brief Values that represent the type of a decoded operand. */ -typedef enum _ZyDisOperandType /*: uint8_t*/ +typedef enum _ZydisOperandType /*: uint8_t*/ { /** * @brief The operand is not used. */ - OPTYPE_NONE, + ZYDIS_OPTYPE_NONE, /** * @brief The operand is a register operand. */ - OPTYPE_REGISTER, + ZYDIS_OPTYPE_REGISTER, /** * @brief The operand is a memory operand. */ - OPTYPE_MEMORY, + ZYDIS_OPTYPE_MEMORY, /** * @brief The operand is a pointer operand. */ - OPTYPE_POINTER, + ZYDIS_OPTYPE_POINTER, /** * @brief The operand is an immediate operand. */ - OPTYPE_IMMEDIATE, + ZYDIS_OPTYPE_IMMEDIATE, /** * @brief The operand is a relative immediate operand. */ - OPTYPE_REL_IMMEDIATE, + ZYDIS_OPTYPE_REL_IMMEDIATE, /** * @brief The operand is a constant value. */ - OPTYPE_CONSTANT -} ZyDisOperandType; + ZYDIS_OPTYPE_CONSTANT +} ZydisOperandType; /** * @brief Values that represent the operand access mode. */ -typedef enum _ZyDisOperandAccessMode /* : uint8_t */ +typedef enum _ZydisOperandAccessMode /* : uint8_t */ { - OPACCESSMODE_NA, + ZYDIS_OPACCESSMODE_NA, /** * @brief The operand is accessed in read-only mode. */ - OPACCESSMODE_READ, + ZYDIS_OPACCESSMODE_READ, /** * @brief The operand is accessed in write mode. */ - OPACCESSMODE_WRITE, + ZYDIS_OPACCESSMODE_WRITE, /** * @brief The operand is accessed in read-write mode. */ - OPACCESSMODE_READWRITE -} ZyDisOperandAccessMode; + ZYDIS_OPACCESSMODE_READWRITE +} ZydisOperandAccessMode; /** * @brief This struct holds information about a decoded operand. */ -typedef struct _ZyDisOperandInfo +typedef struct _ZydisOperandInfo { /** * @brief The type of the operand. - * @see ZyDisOperandType + * @see ZydisOperandType */ uint8_t type; /** @@ -265,17 +263,17 @@ typedef struct _ZyDisOperandInfo uint16_t size; /** * @brief The operand access mode. - * @see ZyDisOperandAccessMode + * @see ZydisOperandAccessMode */ uint8_t access_mode; /** * @brief The base register. - * @see ZyDisRegister + * @see ZydisRegister */ uint16_t base; /** * @brief The index register. - * @see ZyDisRegister + * @see ZydisRegister */ uint16_t index; /** @@ -308,12 +306,12 @@ typedef struct _ZyDisOperandInfo uint32_t off; } ptr; } lval; -} ZyDisOperandInfo; +} ZydisOperandInfo; /** * @brief This struct holds information about a decoded instruction. */ -typedef struct _ZyDisInstructionInfo +typedef struct _ZydisInstructionInfo { /** * @brief The instruction flags. @@ -321,7 +319,7 @@ typedef struct _ZyDisInstructionInfo uint32_t flags; /** * @brief The instruction mnemonic. - * @see ZyDisInstructionMnemonic + * @see ZydisInstructionMnemonic */ uint16_t mnemonic; /** @@ -351,11 +349,11 @@ typedef struct _ZyDisInstructionInfo /** * @brief The decoded operands. */ - ZyDisOperandInfo operand[4]; + ZydisOperandInfo operand[4]; /** * @brief The segment register. This value will default to @c NONE, if no segment register * prefix is present. - * @see ZyDisRegister + * @see ZydisRegister */ uint16_t segment; /** @@ -527,7 +525,7 @@ typedef struct _ZyDisInstructionInfo /** * @brief The instruction definition. */ - const ZyDisInstructionDefinition *instrDefinition; + const void* instrDefinition; /* TODO: Port instruction definition types */ /** * @brief The instruction address points to the current instruction (relative to the * initial instruction pointer). @@ -539,10 +537,10 @@ typedef struct _ZyDisInstructionInfo * This field is used to properly format relative instructions. */ uint64_t instrPointer; -} ZyDisInstructionInfo; +} ZydisInstructionInfo; #ifdef __cplusplus } #endif -#endif /* _VDE_ZyDisDISASSEMBLERTYPESC_H_ */ \ No newline at end of file +#endif /* _ZYDIS_TYPES_H_ */ \ No newline at end of file diff --git a/Bindings/C/ZydisUtils.cpp b/Bindings/C/ZydisUtils.cpp new file mode 100644 index 0000000..70e40f8 --- /dev/null +++ b/Bindings/C/ZydisUtils.cpp @@ -0,0 +1,46 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include "ZydisUtils.h" +#include "ZydisUtils.hpp" + +static_assert( + sizeof(ZydisInstructionInfo) == sizeof(Zydis::InstructionInfo), + "struct size mismatch"); +static_assert( + sizeof(ZydisOperandInfo) == sizeof(Zydis::OperandInfo), + "struct size mismatch"); + +uint64_t ZydisCalcAbsoluteTarget(const ZydisInstructionInfo *info, const ZydisOperandInfo *operand) +{ + return Zydis::CalcAbsoluteTarget( + *reinterpret_cast(info), + *reinterpret_cast(operand)); +} \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisDisassemblerUtils.h b/Bindings/C/ZydisUtils.h similarity index 72% rename from VerteronDisassemblerEngine/ZyDisDisassemblerUtils.h rename to Bindings/C/ZydisUtils.h index 1bbc807..8e29541 100644 --- a/VerteronDisassemblerEngine/ZyDisDisassemblerUtils.h +++ b/Bindings/C/ZydisUtils.h @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : athre0z - - Last change : 04. February 2015 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,40 +26,29 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ +***************************************************************************************************/ -#ifndef _VDE_ZyDisDISASSEMBLERUTILSC_H_ -#define _VDE_ZyDisDISASSEMBLERUTILSC_H_ - -#include "ZyDisDisassemblerTypes.h" -#include "ZyDisInternalConfig.h" +#ifndef _ZYDIS_UTILS_H_ +#define _ZYDIS_UTILS_H_ #include - +#include "ZydisTypes.h" #ifdef __cplusplus extern "C" { #endif -typedef struct _ZyDisContextDescriptor -{ - uint8_t type; - void *ptr; -} ZyDisContextDescriptor; - /** * @brief Calculates the absolute target address of a relative instruction operand. * @param info The instruction info. * @param operand The operand. * @return The absolute target address. */ -ZYDIS_EXPORT uint64_t ZyDisCalcAbsoluteTarget( - const ZyDisInstructionInfo *info, - const ZyDisOperandInfo *operand); +uint64_t ZydisCalcAbsoluteTarget(const ZydisInstructionInfo* info, const ZydisOperandInfo* operand); #ifdef __cplusplus } #endif -#endif /* _VDE_ZyDisDISASSEMBLERUTILSC_H_ */ \ No newline at end of file +#endif /* _ZYDIS_UTILS_H_ */ \ No newline at end of file diff --git a/Bindings/Cpp/ZyDisOpcodeTable.cpp b/Bindings/Cpp/ZyDisOpcodeTable.cpp deleted file mode 100644 index 38709b3..0000000 --- a/Bindings/Cpp/ZyDisOpcodeTable.cpp +++ /dev/null @@ -1,9655 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : - - Last change : 14. October 2014 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ -#include "ZyDisOpcodeTable.hpp" - -namespace Verteron -{ - -namespace Internal -{ - -#define ZYDIS_INVALID 0 -#define NODE(type, n) (static_cast(type) << 12 | (n)) - -const ZyDisOpcodeTreeNode optreeTable[][256] = -{ - { - /* 00 */ 0x0015, - /* 01 */ 0x0014, - /* 02 */ 0x0016, - /* 03 */ 0x0018, - /* 04 */ 0x0017, - /* 05 */ 0x0010, - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0000), - /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0001), - /* 08 */ 0x0394, - /* 09 */ 0x0393, - /* 0A */ 0x0396, - /* 0B */ 0x0395, - /* 0C */ 0x0390, - /* 0D */ 0x038F, - /* 0E */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0002), - /* 0F */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0001), - /* 10 */ 0x000B, - /* 11 */ 0x000A, - /* 12 */ 0x000C, - /* 13 */ 0x000E, - /* 14 */ 0x000D, - /* 15 */ 0x0006, - /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0007), - /* 17 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0008), - /* 18 */ 0x04FE, - /* 19 */ 0x04F7, - /* 1A */ 0x04F8, - /* 1B */ 0x04FB, - /* 1C */ 0x04FA, - /* 1D */ 0x04F9, - /* 1E */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0009), - /* 1F */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000A), - /* 20 */ 0x0026, - /* 21 */ 0x0027, - /* 22 */ 0x0025, - /* 23 */ 0x002C, - /* 24 */ 0x002D, - /* 25 */ 0x002E, - /* 26 */ ZYDIS_INVALID, - /* 27 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000B), - /* 28 */ 0x0542, - /* 29 */ 0x0549, - /* 2A */ 0x0548, - /* 2B */ 0x054B, - /* 2C */ 0x054A, - /* 2D */ 0x0547, - /* 2E */ ZYDIS_INVALID, - /* 2F */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000C), - /* 30 */ 0x06B8, - /* 31 */ 0x06B9, - /* 32 */ 0x06B6, - /* 33 */ 0x06B7, - /* 34 */ 0x06BA, - /* 35 */ 0x06BB, - /* 36 */ ZYDIS_INVALID, - /* 37 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000D), - /* 38 */ 0x006C, - /* 39 */ 0x006D, - /* 3A */ 0x006B, - /* 3B */ 0x006A, - /* 3C */ 0x0070, - /* 3D */ 0x006F, - /* 3E */ ZYDIS_INVALID, - /* 3F */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000E), - /* 40 */ 0x02AB, - /* 41 */ 0x02AC, - /* 42 */ 0x02B2, - /* 43 */ 0x02B1, - /* 44 */ 0x02B3, - /* 45 */ 0x02B4, - /* 46 */ 0x02AE, - /* 47 */ 0x02AD, - /* 48 */ 0x00A7, - /* 49 */ 0x00A6, - /* 4A */ 0x00A8, - /* 4B */ 0x00AA, - /* 4C */ 0x00A9, - /* 4D */ 0x00A2, - /* 4E */ 0x00A1, - /* 4F */ 0x00A3, - /* 50 */ 0x04B4, - /* 51 */ 0x04B9, - /* 52 */ 0x04B3, - /* 53 */ 0x04AE, - /* 54 */ 0x04AF, - /* 55 */ 0x04B0, - /* 56 */ 0x04B1, - /* 57 */ 0x04B2, - /* 58 */ 0x0449, - /* 59 */ 0x0447, - /* 5A */ 0x0448, - /* 5B */ 0x0442, - /* 5C */ 0x043E, - /* 5D */ 0x043D, - /* 5E */ 0x043F, - /* 5F */ 0x0441, - /* 60 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0007), - /* 61 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0008), - /* 62 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0013), - /* 63 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0014), - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ 0x04B7, - /* 69 */ 0x02A4, - /* 6A */ 0x04AB, - /* 6B */ 0x02A6, - /* 6C */ 0x02B5, - /* 6D */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0009), - /* 6E */ 0x039F, - /* 6F */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000A), - /* 70 */ 0x02E8, - /* 71 */ 0x02E2, - /* 72 */ 0x02CA, - /* 73 */ 0x02DE, - /* 74 */ 0x02CE, - /* 75 */ 0x02E1, - /* 76 */ 0x02CB, - /* 77 */ 0x02C7, - /* 78 */ 0x02ED, - /* 79 */ 0x02E6, - /* 7A */ 0x02EB, - /* 7B */ 0x02E5, - /* 7C */ 0x02D5, - /* 7D */ 0x02D3, - /* 7E */ 0x02D8, - /* 7F */ 0x02D1, - /* 80 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0013), - /* 81 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0014), - /* 82 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0015), - /* 83 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0016), - /* 84 */ 0x055C, - /* 85 */ 0x055D, - /* 86 */ 0x06A8, - /* 87 */ 0x06A7, - /* 88 */ 0x0334, - /* 89 */ 0x0336, - /* 8A */ 0x0335, - /* 8B */ 0x0331, - /* 8C */ 0x031D, - /* 8D */ 0x02F4, - /* 8E */ 0x031C, - /* 8F */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0017), - /* 90 */ 0x06A9, - /* 91 */ 0x06AB, - /* 92 */ 0x06AA, - /* 93 */ 0x06A3, - /* 94 */ 0x06A2, - /* 95 */ 0x06A4, - /* 96 */ 0x06A6, - /* 97 */ 0x06A5, - /* 98 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000B), - /* 99 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000C), - /* 9A */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001D), - /* 9B */ 0x069D, - /* 9C */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000D), - /* 9D */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000E), - /* 9E */ 0x04EF, - /* 9F */ 0x02EF, - /* A0 */ 0x031B, - /* A1 */ 0x0320, - /* A2 */ 0x031F, - /* A3 */ 0x031E, - /* A4 */ 0x0367, - /* A5 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x000F), - /* A6 */ 0x0076, - /* A7 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0010), - /* A8 */ 0x055E, - /* A9 */ 0x055B, - /* AA */ 0x053D, - /* AB */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0011), - /* AC */ 0x0300, - /* AD */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0012), - /* AE */ 0x0501, - /* AF */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0013), - /* B0 */ 0x0317, - /* B1 */ 0x031A, - /* B2 */ 0x0318, - /* B3 */ 0x0319, - /* B4 */ 0x0321, - /* B5 */ 0x032C, - /* B6 */ 0x032B, - /* B7 */ 0x032A, - /* B8 */ 0x032D, - /* B9 */ 0x0330, - /* BA */ 0x032F, - /* BB */ 0x032E, - /* BC */ 0x0329, - /* BD */ 0x0324, - /* BE */ 0x0323, - /* BF */ 0x0322, - /* C0 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0018), - /* C1 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0019), - /* C2 */ 0x04D9, - /* C3 */ 0x04D8, - /* C4 */ NODE(ZyDisOpcodeTreeNodeType::VEX, 0x0000), - /* C5 */ NODE(ZyDisOpcodeTreeNodeType::VEX, 0x0001), - /* C6 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001E), - /* C7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001F), - /* C8 */ 0x00B4, - /* C9 */ 0x02F5, - /* CA */ 0x04DA, - /* CB */ 0x04DB, - /* CC */ 0x02BB, - /* CD */ 0x02B9, - /* CE */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0027), - /* CF */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0017), - /* D0 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0020), - /* D1 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0021), - /* D2 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0022), - /* D3 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0023), - /* D4 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0028), - /* D5 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0029), - /* D6 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x002A), - /* D7 */ 0x06B2, - /* D8 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0015), - /* D9 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0016), - /* DA */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0017), - /* DB */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0018), - /* DC */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0019), - /* DD */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x001A), - /* DE */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x001B), - /* DF */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x001C), - /* E0 */ 0x0306, - /* E1 */ 0x0305, - /* E2 */ 0x0304, - /* E3 */ NODE(ZyDisOpcodeTreeNodeType::ADDRESS_SIZE, 0x0000), - /* E4 */ 0x02A9, - /* E5 */ 0x02AA, - /* E6 */ 0x039D, - /* E7 */ 0x039E, - /* E8 */ 0x004E, - /* E9 */ 0x02DB, - /* EA */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x002B), - /* EB */ 0x02DD, - /* EC */ 0x02A7, - /* ED */ 0x02A8, - /* EE */ 0x039B, - /* EF */ 0x039C, - /* F0 */ 0x02FF, - /* F1 */ 0x02BA, - /* F2 */ 0x04D7, - /* F3 */ 0x04D6, - /* F4 */ 0x029D, - /* F5 */ 0x0059, - /* F6 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002C), - /* F7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002D), - /* F8 */ 0x0053, - /* F9 */ 0x0538, - /* FA */ 0x0057, - /* FB */ 0x053B, - /* FC */ 0x0054, - /* FD */ 0x0539, - /* FE */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002E), - /* FF */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002F), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0000), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0000), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0003), - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0004), - /* 04 */ ZYDIS_INVALID, - /* 05 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0005), - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0006), - /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0007), - /* 08 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0008), - /* 09 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0009), - /* 0A */ ZYDIS_INVALID, - /* 0B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000A), - /* 0C */ ZYDIS_INVALID, - /* 0D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000B), - /* 0E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000C), - /* 0F */ NODE(ZyDisOpcodeTreeNodeType::AMD3DNOW, 0x0000), - /* 10 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000D), - /* 11 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000E), - /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0001), - /* 13 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0011), - /* 14 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0012), - /* 15 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0013), - /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0002), - /* 17 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0016), - /* 18 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0017), - /* 19 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0018), - /* 1A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0019), - /* 1B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001A), - /* 1C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001B), - /* 1D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001C), - /* 1E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001D), - /* 1F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001E), - /* 20 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x001F), - /* 21 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0020), - /* 22 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0021), - /* 23 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0022), - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0023), - /* 29 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0024), - /* 2A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0025), - /* 2B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0026), - /* 2C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0027), - /* 2D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0028), - /* 2E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0029), - /* 2F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002A), - /* 30 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002B), - /* 31 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002C), - /* 32 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002D), - /* 33 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002E), - /* 34 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x002F), - /* 35 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0030), - /* 36 */ ZYDIS_INVALID, - /* 37 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0031), - /* 38 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0002), - /* 39 */ ZYDIS_INVALID, - /* 3A */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0003), - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0081), - /* 41 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0082), - /* 42 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0083), - /* 43 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0084), - /* 44 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0085), - /* 45 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0086), - /* 46 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0087), - /* 47 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0088), - /* 48 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0089), - /* 49 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008A), - /* 4A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008B), - /* 4B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008C), - /* 4C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008D), - /* 4D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008E), - /* 4E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x008F), - /* 4F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0090), - /* 50 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0091), - /* 51 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0092), - /* 52 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0093), - /* 53 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0094), - /* 54 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0095), - /* 55 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0096), - /* 56 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0097), - /* 57 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0098), - /* 58 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0099), - /* 59 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009A), - /* 5A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009B), - /* 5B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009C), - /* 5C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009D), - /* 5D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009E), - /* 5E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x009F), - /* 5F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A0), - /* 60 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A1), - /* 61 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A2), - /* 62 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A3), - /* 63 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A4), - /* 64 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A5), - /* 65 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A6), - /* 66 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A7), - /* 67 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A8), - /* 68 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00A9), - /* 69 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AA), - /* 6A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AB), - /* 6B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AC), - /* 6C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AD), - /* 6D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AE), - /* 6E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00AF), - /* 6F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B0), - /* 70 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B1), - /* 71 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B2), - /* 72 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B3), - /* 73 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B4), - /* 74 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B5), - /* 75 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B6), - /* 76 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B7), - /* 77 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B8), - /* 78 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00B9), - /* 79 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BA), - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BB), - /* 7D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BC), - /* 7E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BD), - /* 7F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BE), - /* 80 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00BF), - /* 81 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C0), - /* 82 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C1), - /* 83 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C2), - /* 84 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C3), - /* 85 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C4), - /* 86 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C5), - /* 87 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C6), - /* 88 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C7), - /* 89 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C8), - /* 8A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00C9), - /* 8B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CA), - /* 8C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CB), - /* 8D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CC), - /* 8E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CD), - /* 8F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CE), - /* 90 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00CF), - /* 91 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D0), - /* 92 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D1), - /* 93 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D2), - /* 94 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D3), - /* 95 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D4), - /* 96 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D5), - /* 97 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D6), - /* 98 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D7), - /* 99 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D8), - /* 9A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00D9), - /* 9B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DA), - /* 9C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DB), - /* 9D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DC), - /* 9E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DD), - /* 9F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DE), - /* A0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00DF), - /* A1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E0), - /* A2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E1), - /* A3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E2), - /* A4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E3), - /* A5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E4), - /* A6 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0003), - /* A7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0004), - /* A8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E7), - /* A9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E8), - /* AA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E9), - /* AB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EA), - /* AC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EB), - /* AD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EC), - /* AE */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0005), - /* AF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EF), - /* B0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F0), - /* B1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F1), - /* B2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F2), - /* B3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F3), - /* B4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F4), - /* B5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F5), - /* B6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F6), - /* B7 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F7), - /* B8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F8), - /* B9 */ ZYDIS_INVALID, - /* BA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00F9), - /* BB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FA), - /* BC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FB), - /* BD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FC), - /* BE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FD), - /* BF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FE), - /* C0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00FF), - /* C1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0100), - /* C2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0101), - /* C3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0102), - /* C4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0103), - /* C5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0104), - /* C6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0105), - /* C7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0006), - /* C8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0108), - /* C9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0109), - /* CA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010A), - /* CB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010B), - /* CC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010C), - /* CD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010D), - /* CE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010E), - /* CF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x010F), - /* D0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0110), - /* D1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0111), - /* D2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0112), - /* D3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0113), - /* D4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0114), - /* D5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0115), - /* D6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0116), - /* D7 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0117), - /* D8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0118), - /* D9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0119), - /* DA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011A), - /* DB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011B), - /* DC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011C), - /* DD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011D), - /* DE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011E), - /* DF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x011F), - /* E0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0120), - /* E1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0121), - /* E2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0122), - /* E3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0123), - /* E4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0124), - /* E5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0125), - /* E6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0126), - /* E7 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0127), - /* E8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0128), - /* E9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0129), - /* EA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012A), - /* EB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012B), - /* EC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012C), - /* ED */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012D), - /* EE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012E), - /* EF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x012F), - /* F0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0130), - /* F1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0131), - /* F2 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0132), - /* F3 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0133), - /* F4 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0134), - /* F5 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0135), - /* F6 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0136), - /* F7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0007), - /* F8 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0138), - /* F9 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0139), - /* FA */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013A), - /* FB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013B), - /* FC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013C), - /* FD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013D), - /* FE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x013E), - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0032), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0033), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0034), - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0035), - /* 04 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0036), - /* 05 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0037), - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0038), - /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0039), - /* 08 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003A), - /* 09 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003B), - /* 0A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003C), - /* 0B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003D), - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003E), - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x003F), - /* 15 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0040), - /* 16 */ ZYDIS_INVALID, - /* 17 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0041), - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0042), - /* 1D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0043), - /* 1E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0044), - /* 1F */ ZYDIS_INVALID, - /* 20 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0045), - /* 21 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0046), - /* 22 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0047), - /* 23 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0048), - /* 24 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0049), - /* 25 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004A), - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004B), - /* 29 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004C), - /* 2A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004D), - /* 2B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004E), - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x004F), - /* 31 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0050), - /* 32 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0051), - /* 33 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0052), - /* 34 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0053), - /* 35 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0054), - /* 36 */ ZYDIS_INVALID, - /* 37 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0055), - /* 38 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0056), - /* 39 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0057), - /* 3A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0058), - /* 3B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0059), - /* 3C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005A), - /* 3D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005B), - /* 3E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005C), - /* 3F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005D), - /* 40 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005E), - /* 41 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x005F), - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0060), - /* 81 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0061), - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0062), - /* DC */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0063), - /* DD */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0064), - /* DE */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0065), - /* DF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0066), - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0067), - /* F1 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0068), - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0069), - /* 09 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006A), - /* 0A */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006B), - /* 0B */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006C), - /* 0C */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006D), - /* 0D */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006E), - /* 0E */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x006F), - /* 0F */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0070), - /* 10 */ ZYDIS_INVALID, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0071), - /* 15 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0072), - /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0073), - /* 17 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0074), - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0075), - /* 21 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0076), - /* 22 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0077), - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ ZYDIS_INVALID, - /* 2B */ ZYDIS_INVALID, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0078), - /* 41 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0079), - /* 42 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007A), - /* 43 */ ZYDIS_INVALID, - /* 44 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007B), - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007C), - /* 61 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007D), - /* 62 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007E), - /* 63 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x007F), - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0080), - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ 0x05E6, - /* 11 */ 0x05E5, - /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0008), - /* 13 */ 0x05CC, - /* 14 */ 0x0698, - /* 15 */ 0x0696, - /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0009), - /* 17 */ 0x05C7, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x05B8, - /* 29 */ 0x05B7, - /* 2A */ ZYDIS_INVALID, - /* 2B */ 0x05D2, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ 0x0694, - /* 2F */ 0x0581, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ 0x05CE, - /* 51 */ 0x0689, - /* 52 */ 0x0684, - /* 53 */ 0x067E, - /* 54 */ 0x0575, - /* 55 */ 0x0573, - /* 56 */ 0x05F6, - /* 57 */ 0x069A, - /* 58 */ 0x0567, - /* 59 */ 0x05EF, - /* 5A */ 0x0587, - /* 5B */ 0x0583, - /* 5C */ 0x068E, - /* 5D */ 0x05AF, - /* 5E */ 0x0593, - /* 5F */ 0x05A9, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0000), - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000A), - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ 0x057D, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ 0x0687, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ ZYDIS_INVALID, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ 0x05E4, - /* 11 */ 0x05E3, - /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000B), - /* 13 */ 0x05CA, - /* 14 */ 0x0697, - /* 15 */ 0x0695, - /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000C), - /* 17 */ 0x05C5, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x05B5, - /* 29 */ 0x05B6, - /* 2A */ ZYDIS_INVALID, - /* 2B */ 0x05D1, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ 0x0693, - /* 2F */ 0x0580, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ 0x05CD, - /* 51 */ 0x0688, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ 0x0574, - /* 55 */ 0x0572, - /* 56 */ 0x05F5, - /* 57 */ 0x0699, - /* 58 */ 0x0566, - /* 59 */ 0x05EE, - /* 5A */ 0x0585, - /* 5B */ 0x0586, - /* 5C */ 0x068D, - /* 5D */ 0x05AE, - /* 5E */ 0x0592, - /* 5F */ 0x05A8, - /* 60 */ 0x0679, - /* 61 */ 0x067C, - /* 62 */ 0x067A, - /* 63 */ 0x05FB, - /* 64 */ 0x0614, - /* 65 */ 0x0617, - /* 66 */ 0x0615, - /* 67 */ 0x05FD, - /* 68 */ 0x0675, - /* 69 */ 0x0678, - /* 6A */ 0x0676, - /* 6B */ 0x05FA, - /* 6C */ 0x067B, - /* 6D */ 0x0677, - /* 6E */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0014), - /* 6F */ 0x05BF, - /* 70 */ 0x0654, - /* 71 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001B), - /* 72 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001C), - /* 73 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001D), - /* 74 */ 0x060E, - /* 75 */ 0x0611, - /* 76 */ 0x060F, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ 0x059C, - /* 7D */ 0x059E, - /* 7E */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0015), - /* 7F */ 0x05C0, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ 0x057C, - /* C3 */ ZYDIS_INVALID, - /* C4 */ 0x0630, - /* C5 */ 0x0623, - /* C6 */ 0x0686, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ 0x056A, - /* D1 */ 0x066B, - /* D2 */ 0x0665, - /* D3 */ 0x0669, - /* D4 */ 0x0600, - /* D5 */ 0x0650, - /* D6 */ 0x05D4, - /* D7 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0004), - /* D8 */ 0x0671, - /* D9 */ 0x0672, - /* DA */ 0x063C, - /* DB */ 0x0607, - /* DC */ 0x0603, - /* DD */ 0x0604, - /* DE */ 0x0636, - /* DF */ 0x0608, - /* E0 */ 0x0609, - /* E1 */ 0x0663, - /* E2 */ 0x0662, - /* E3 */ 0x060A, - /* E4 */ 0x064D, - /* E5 */ 0x064E, - /* E6 */ 0x058E, - /* E7 */ 0x05CF, - /* E8 */ 0x066F, - /* E9 */ 0x0670, - /* EA */ 0x063B, - /* EB */ 0x0651, - /* EC */ 0x0601, - /* ED */ 0x0602, - /* EE */ 0x0635, - /* EF */ 0x067D, - /* F0 */ ZYDIS_INVALID, - /* F1 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0005), - /* F2 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0006), - /* F3 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0007), - /* F4 */ ZYDIS_INVALID, - /* F5 */ 0x0632, - /* F6 */ 0x0652, - /* F7 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000D), - /* F8 */ 0x066C, - /* F9 */ 0x0673, - /* FA */ 0x066D, - /* FB */ 0x066E, - /* FC */ 0x05FE, - /* FD */ 0x0605, - /* FE */ 0x05FF, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0653, - /* 01 */ 0x0627, - /* 02 */ 0x0625, - /* 03 */ 0x0626, - /* 04 */ 0x0631, - /* 05 */ 0x062B, - /* 06 */ 0x0629, - /* 07 */ 0x062A, - /* 08 */ 0x0657, - /* 09 */ 0x0659, - /* 0A */ 0x0658, - /* 0B */ 0x064C, - /* 0C */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0000), - /* 0D */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0001), - /* 0E */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0002), - /* 0F */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0003), - /* 10 */ ZYDIS_INVALID, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ ZYDIS_INVALID, - /* 17 */ 0x0674, - /* 18 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0004), - /* 19 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0005), - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ 0x05F7, - /* 1D */ 0x05F9, - /* 1E */ 0x05F8, - /* 1F */ ZYDIS_INVALID, - /* 20 */ 0x0642, - /* 21 */ 0x0640, - /* 22 */ 0x0641, - /* 23 */ 0x0643, - /* 24 */ 0x0644, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x064B, - /* 29 */ 0x0610, - /* 2A */ 0x05D0, - /* 2B */ 0x05FC, - /* 2C */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0006), - /* 2D */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0007), - /* 2E */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0008), - /* 2F */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0009), - /* 30 */ 0x0647, - /* 31 */ 0x0645, - /* 32 */ 0x0646, - /* 33 */ 0x0649, - /* 34 */ 0x064A, - /* 35 */ 0x0648, - /* 36 */ ZYDIS_INVALID, - /* 37 */ 0x0616, - /* 38 */ 0x0639, - /* 39 */ 0x063A, - /* 3A */ 0x063E, - /* 3B */ 0x063D, - /* 3C */ 0x0633, - /* 3D */ 0x0634, - /* 3E */ 0x0638, - /* 3F */ 0x0637, - /* 40 */ 0x064F, - /* 41 */ 0x0628, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ 0x0570, - /* DC */ 0x056E, - /* DD */ 0x056F, - /* DE */ 0x056C, - /* DF */ 0x056D, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000A), - /* 05 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000B), - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000C), - /* 07 */ ZYDIS_INVALID, - /* 08 */ 0x0681, - /* 09 */ 0x0680, - /* 0A */ 0x0683, - /* 0B */ 0x0682, - /* 0C */ 0x0577, - /* 0D */ 0x0576, - /* 0E */ 0x060C, - /* 0F */ 0x0606, - /* 10 */ ZYDIS_INVALID, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000D), - /* 15 */ 0x0624, - /* 16 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0016), - /* 17 */ 0x059B, - /* 18 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0011), - /* 19 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0012), - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0013), - /* 21 */ 0x05A1, - /* 22 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0025), - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ ZYDIS_INVALID, - /* 2B */ ZYDIS_INVALID, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ 0x0597, - /* 41 */ 0x0596, - /* 42 */ 0x05E7, - /* 43 */ ZYDIS_INVALID, - /* 44 */ 0x060D, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0016), - /* 4B */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0017), - /* 4C */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0018), - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ 0x0613, - /* 61 */ 0x0612, - /* 62 */ 0x0619, - /* 63 */ 0x0618, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ 0x0571, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000E), - /* 11 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x000F), - /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0010), - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0011), - /* 17 */ ZYDIS_INVALID, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ 0x058B, - /* 2B */ ZYDIS_INVALID, - /* 2C */ 0x0591, - /* 2D */ 0x058D, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ 0x068B, - /* 52 */ 0x0685, - /* 53 */ 0x067F, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ 0x0569, - /* 59 */ 0x05F1, - /* 5A */ 0x058C, - /* 5B */ 0x058F, - /* 5C */ 0x0690, - /* 5D */ 0x05B1, - /* 5E */ 0x0595, - /* 5F */ 0x05AB, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ 0x05C2, - /* 70 */ 0x0655, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ 0x05D3, - /* 7F */ 0x05C1, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ 0x057F, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ ZYDIS_INVALID, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ 0x0582, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0012), - /* 11 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0013), - /* 12 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_MOD, 0x0014), - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ ZYDIS_INVALID, - /* 17 */ ZYDIS_INVALID, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ 0x058A, - /* 2B */ ZYDIS_INVALID, - /* 2C */ 0x0590, - /* 2D */ 0x0588, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ 0x068A, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ 0x0568, - /* 59 */ 0x05F0, - /* 5A */ 0x0589, - /* 5B */ ZYDIS_INVALID, - /* 5C */ 0x068F, - /* 5D */ 0x05B0, - /* 5E */ 0x0594, - /* 5F */ 0x05AA, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ 0x0656, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ 0x059D, - /* 7D */ 0x059F, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ 0x057E, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ 0x056B, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ ZYDIS_INVALID, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ 0x0584, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ 0x05A2, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode optreeModrmMod[][2] = -{ - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0001), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0002), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x000F), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0010), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0014), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0015), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E5), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00E6), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00ED), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x00EE), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0106), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0107), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MANDATORY, 0x0137), - }, - { - /* 00 */ 0x05CB, - /* 01 */ 0x05C3, - }, - { - /* 00 */ 0x05C6, - /* 01 */ 0x05C8, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x001A), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05C9, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05C4, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05A3, - }, - { - /* 00 */ 0x05E2, - /* 01 */ 0x05DF, - }, - { - /* 00 */ 0x05E0, - /* 01 */ 0x05E1, - }, - { - /* 00 */ 0x05DE, - /* 01 */ 0x05DD, - }, - { - /* 00 */ 0x05DB, - /* 01 */ 0x05DC, - }, - { - /* 00 */ 0x05DA, - /* 01 */ 0x05D9, - }, - { - /* 00 */ 0x05D8, - /* 01 */ 0x05D7, - }, - { - /* 00 */ 0x05BE, - /* 01 */ 0x05BD, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0024), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0000), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0025), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0001), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0026), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0002), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0027), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0003), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0028), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0004), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0029), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0005), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002A), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0006), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x002B), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::X87, 0x0007), - }, -}; - -const ZyDisOpcodeTreeNode optreeModrmReg[][8] = -{ - { - /* 00 */ 0x0531, - /* 01 */ 0x0541, - /* 02 */ 0x02FC, - /* 03 */ 0x0309, - /* 04 */ 0x0598, - /* 05 */ 0x0599, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0516, - /* 01 */ 0x052F, - /* 02 */ 0x02F9, - /* 03 */ 0x02FB, - /* 04 */ 0x0533, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x02FE, - /* 07 */ 0x02C0, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0000), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0001), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0002), - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0003), - /* 04 */ 0x0532, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x02FD, - /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0004), - }, - { - /* 00 */ 0x0455, - /* 01 */ 0x0456, - /* 02 */ 0x0457, - /* 03 */ 0x0458, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0486, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0479, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x0470, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0485, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0478, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x0473, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x047E, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0475, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x0468, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x047C, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0476, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x046A, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0482, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x046D, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0481, - /* 03 */ 0x0480, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x046C, - /* 07 */ 0x046B, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0005), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0006), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0007), - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0008), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x0009), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x000A), - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x000B), - /* 04 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x000C), - /* 05 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_RM, 0x000D), - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0296, - /* 01 */ 0x0295, - /* 02 */ 0x02F2, - /* 03 */ 0x053C, - /* 04 */ 0x06C0, - /* 05 */ 0x06BF, - /* 06 */ ZYDIS_INVALID, - /* 07 */ 0x0055, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ 0x02F7, - /* 06 */ 0x0310, - /* 07 */ 0x0515, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0043, - /* 05 */ 0x0049, - /* 06 */ 0x0047, - /* 07 */ 0x0045, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0006), - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0015), - /* 07 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0016), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0017), - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0018), - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x04D3, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x000F, - /* 01 */ 0x0392, - /* 02 */ 0x0005, - /* 03 */ 0x04FF, - /* 04 */ 0x0028, - /* 05 */ 0x0544, - /* 06 */ 0x06BC, - /* 07 */ 0x006E, - }, - { - /* 00 */ 0x0013, - /* 01 */ 0x0391, - /* 02 */ 0x0009, - /* 03 */ 0x0500, - /* 04 */ 0x0029, - /* 05 */ 0x0543, - /* 06 */ 0x06B5, - /* 07 */ 0x0072, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0015), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0016), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0017), - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0018), - /* 04 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0019), - /* 05 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001A), - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001B), - /* 07 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001C), - }, - { - /* 00 */ 0x0012, - /* 01 */ 0x0397, - /* 02 */ 0x0008, - /* 03 */ 0x04FD, - /* 04 */ 0x002B, - /* 05 */ 0x0545, - /* 06 */ 0x06B4, - /* 07 */ 0x0071, - }, - { - /* 00 */ 0x0440, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04DE, - /* 01 */ 0x04E6, - /* 02 */ 0x04C6, - /* 03 */ 0x04D0, - /* 04 */ 0x0517, - /* 05 */ 0x0526, - /* 06 */ 0x051D, - /* 07 */ 0x04F3, - }, - { - /* 00 */ 0x04DF, - /* 01 */ 0x04E7, - /* 02 */ 0x04C7, - /* 03 */ 0x04CE, - /* 04 */ 0x051C, - /* 05 */ 0x0528, - /* 06 */ 0x051E, - /* 07 */ 0x04F6, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x068C, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x066A, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0664, - /* 05 */ ZYDIS_INVALID, - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0001), - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0666, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0661, - /* 05 */ ZYDIS_INVALID, - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0002), - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0668, - /* 03 */ 0x0667, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0003), - /* 07 */ 0x065C, - }, - { - /* 00 */ 0x0333, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0332, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04DD, - /* 01 */ 0x04E5, - /* 02 */ 0x04C8, - /* 03 */ 0x04CD, - /* 04 */ 0x0522, - /* 05 */ 0x0527, - /* 06 */ 0x051F, - /* 07 */ 0x04F1, - }, - { - /* 00 */ 0x04DC, - /* 01 */ 0x04E2, - /* 02 */ 0x04C5, - /* 03 */ 0x04CF, - /* 04 */ 0x0520, - /* 05 */ 0x052A, - /* 06 */ 0x0519, - /* 07 */ 0x04F4, - }, - { - /* 00 */ 0x04E1, - /* 01 */ 0x04E3, - /* 02 */ 0x04C3, - /* 03 */ 0x04CC, - /* 04 */ 0x0521, - /* 05 */ 0x0529, - /* 06 */ 0x051A, - /* 07 */ 0x04F2, - }, - { - /* 00 */ 0x04E0, - /* 01 */ 0x04E4, - /* 02 */ 0x04C4, - /* 03 */ 0x04CB, - /* 04 */ 0x0518, - /* 05 */ 0x0525, - /* 06 */ 0x051B, - /* 07 */ 0x04F5, - }, - { - /* 00 */ 0x00BB, - /* 01 */ 0x01CF, - /* 02 */ 0x0119, - /* 03 */ 0x013D, - /* 04 */ 0x022C, - /* 05 */ 0x0245, - /* 06 */ 0x0166, - /* 07 */ 0x0171, - }, - { - /* 00 */ 0x01BC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x01FF, - /* 03 */ 0x020B, - /* 04 */ 0x01C3, - /* 05 */ 0x01C2, - /* 06 */ 0x01EB, - /* 07 */ 0x01EA, - }, - { - /* 00 */ 0x019A, - /* 01 */ 0x01A8, - /* 02 */ 0x019C, - /* 03 */ 0x019F, - /* 04 */ 0x01B3, - /* 05 */ 0x01B5, - /* 06 */ 0x01A1, - /* 07 */ 0x01A3, - }, - { - /* 00 */ 0x01A4, - /* 01 */ 0x01B1, - /* 02 */ 0x01AB, - /* 03 */ 0x01AD, - /* 04 */ ZYDIS_INVALID, - /* 05 */ 0x01BA, - /* 06 */ ZYDIS_INVALID, - /* 07 */ 0x020A, - }, - { - /* 00 */ 0x00BA, - /* 01 */ 0x01D2, - /* 02 */ 0x0118, - /* 03 */ 0x013E, - /* 04 */ 0x022B, - /* 05 */ 0x0243, - /* 06 */ 0x0158, - /* 07 */ 0x017A, - }, - { - /* 00 */ 0x01BB, - /* 01 */ 0x01AF, - /* 02 */ 0x01FE, - /* 03 */ 0x0209, - /* 04 */ 0x01F3, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x01E8, - /* 07 */ 0x01ED, - }, - { - /* 00 */ 0x019B, - /* 01 */ 0x01A7, - /* 02 */ 0x019D, - /* 03 */ 0x019E, - /* 04 */ 0x01B2, - /* 05 */ 0x01B4, - /* 06 */ 0x01A0, - /* 07 */ 0x01A2, - }, - { - /* 00 */ 0x01A6, - /* 01 */ 0x01B0, - /* 02 */ 0x01AA, - /* 03 */ 0x01AE, - /* 04 */ 0x00D2, - /* 05 */ 0x01A5, - /* 06 */ 0x00D3, - /* 07 */ 0x01AC, - }, - { - /* 00 */ 0x0557, - /* 01 */ 0x0558, - /* 02 */ 0x038E, - /* 03 */ 0x0385, - /* 04 */ 0x037E, - /* 05 */ 0x02A5, - /* 06 */ 0x00AC, - /* 07 */ 0x02A0, - }, - { - /* 00 */ 0x0559, - /* 01 */ 0x055A, - /* 02 */ 0x038D, - /* 03 */ 0x0384, - /* 04 */ 0x037D, - /* 05 */ 0x02A3, - /* 06 */ 0x00AB, - /* 07 */ 0x02A1, - }, - { - /* 00 */ 0x02AF, - /* 01 */ 0x00A4, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02B0, - /* 01 */ 0x00A5, - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x002C), - /* 03 */ 0x004C, - /* 04 */ 0x02D9, - /* 05 */ 0x02DA, - /* 06 */ 0x04B8, - /* 07 */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode optreeModrmRm[][8] = -{ - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0000), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0001), - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0002), - /* 04 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0003), - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0315, - /* 01 */ 0x0383, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06B1, - /* 01 */ 0x06C1, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0004), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0005), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0006), - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0007), - /* 04 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0008), - /* 05 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0009), - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000A), - /* 07 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000B), - }, - { - /* 00 */ 0x0550, - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000C), - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0316, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06C2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06C3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06C4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06AF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06AC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06AE, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06AD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06B0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode optreeMandatory[][4] = -{ - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0000), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0001), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0002), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02F0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0307, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0551, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0058, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0556, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02BD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x069E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0561, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0454, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0189, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0379, - /* 01 */ 0x0368, - /* 02 */ 0x0371, - /* 03 */ 0x0377, - }, - { - /* 00 */ 0x0378, - /* 01 */ 0x036A, - /* 02 */ 0x0370, - /* 03 */ 0x0376, - }, - { - /* 00 */ 0x0355, - /* 01 */ 0x0345, - /* 02 */ 0x036D, - /* 03 */ 0x0353, - }, - { - /* 00 */ 0x034C, - /* 01 */ 0x0346, - /* 02 */ 0x036E, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0354, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0352, - }, - { - /* 00 */ 0x0565, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0564, - }, - { - /* 00 */ 0x0563, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0562, - }, - { - /* 00 */ 0x0350, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x036B, - /* 03 */ 0x034E, - }, - { - /* 00 */ 0x0351, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x036C, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x034F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x034D, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0003), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x038A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x038B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x038C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0389, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0386, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0387, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0388, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0325, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0328, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0327, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0326, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x033A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0338, - }, - { - /* 00 */ 0x0339, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0337, - }, - { - /* 00 */ 0x008D, - /* 01 */ 0x0093, - /* 02 */ 0x0094, - /* 03 */ 0x008C, - }, - { - /* 00 */ 0x035C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x035B, - }, - { - /* 00 */ 0x009A, - /* 01 */ 0x009B, - /* 02 */ 0x009C, - /* 03 */ 0x0098, - }, - { - /* 00 */ 0x0090, - /* 01 */ 0x0091, - /* 02 */ 0x0096, - /* 03 */ 0x008A, - }, - { - /* 00 */ 0x0560, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x055F, - }, - { - /* 00 */ 0x0082, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0081, - }, - { - /* 00 */ 0x069F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04D4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04D1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04D2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0003), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0004), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x029A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x045B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x045C, - }, - { - /* 00 */ 0x03FD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03FE, - }, - { - /* 00 */ 0x03FA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03F9, - }, - { - /* 00 */ 0x03FB, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03FC, - }, - { - /* 00 */ 0x040E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x040F, - }, - { - /* 00 */ 0x0405, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0404, - }, - { - /* 00 */ 0x0400, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0401, - }, - { - /* 00 */ 0x0402, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0403, - }, - { - /* 00 */ 0x0461, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0462, - }, - { - /* 00 */ 0x0466, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0465, - }, - { - /* 00 */ 0x0464, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0463, - }, - { - /* 00 */ 0x0431, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0432, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CA, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0037, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0036, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x049A, - }, - { - /* 00 */ 0x03A3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03A2, - }, - { - /* 00 */ 0x03A6, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03A7, - }, - { - /* 00 */ 0x03A4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03A5, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0426, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0424, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0425, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0428, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0429, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0427, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0430, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D1, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0359, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03AC, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042C, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042B, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042E, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042F, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042D, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DA, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x041A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x041B, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0421, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0420, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0412, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0413, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0419, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0418, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0438, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03FF, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0005), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0006), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0023, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0021, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0022, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x001F, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0020, - }, - { - /* 00 */ 0x033B, - /* 01 */ 0x0086, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x033C, - /* 01 */ 0x0085, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04E9, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04E8, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04EB, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04EA, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0035, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0034, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CB, - }, - { - /* 00 */ 0x03BF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C0, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DF, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03E3, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0000), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x00B5, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0408, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x02B7, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0001), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x00B2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x00B1, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x037C, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CC, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D5, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D4, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DE, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DD, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0024, - }, - { - /* 00 */ 0x0067, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0064, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0063, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0069, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0066, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0068, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0065, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0061, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0060, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0062, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0357, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0356, - }, - { - /* 00 */ 0x0535, - /* 01 */ 0x0536, - /* 02 */ 0x0537, - /* 03 */ 0x0534, - }, - { - /* 00 */ 0x04ED, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x04EE, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04C9, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x04CA, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0032, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0031, - }, - { - /* 00 */ 0x0030, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x002F, - }, - { - /* 00 */ 0x039A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0399, - }, - { - /* 00 */ 0x06BE, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x06BD, - }, - { - /* 00 */ 0x001A, - /* 01 */ 0x001B, - /* 02 */ 0x001C, - /* 03 */ 0x0019, - }, - { - /* 00 */ 0x0380, - /* 01 */ 0x0381, - /* 02 */ 0x0382, - /* 03 */ 0x037F, - }, - { - /* 00 */ 0x008F, - /* 01 */ 0x0092, - /* 02 */ 0x0095, - /* 03 */ 0x008B, - }, - { - /* 00 */ 0x0088, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0099, - /* 03 */ 0x008E, - }, - { - /* 00 */ 0x054D, - /* 01 */ 0x054E, - /* 02 */ 0x054F, - /* 03 */ 0x054C, - }, - { - /* 00 */ 0x0312, - /* 01 */ 0x0313, - /* 02 */ 0x0314, - /* 03 */ 0x0311, - }, - { - /* 00 */ 0x00AE, - /* 01 */ 0x00AF, - /* 02 */ 0x00B0, - /* 03 */ 0x00AD, - }, - { - /* 00 */ 0x030D, - /* 01 */ 0x030E, - /* 02 */ 0x030F, - /* 03 */ 0x030C, - }, - { - /* 00 */ 0x04A2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A3, - }, - { - /* 00 */ 0x04A7, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A8, - }, - { - /* 00 */ 0x04A5, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A4, - }, - { - /* 00 */ 0x03AA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03AB, - }, - { - /* 00 */ 0x03D7, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D6, - }, - { - /* 00 */ 0x03DC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DB, - }, - { - /* 00 */ 0x03D8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D9, - }, - { - /* 00 */ 0x03AD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03AE, - }, - { - /* 00 */ 0x049B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x049C, - }, - { - /* 00 */ 0x04A1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A0, - }, - { - /* 00 */ 0x049E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x049D, - }, - { - /* 00 */ 0x03A8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03A9, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A6, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x049F, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0002), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0003), - }, - { - /* 00 */ 0x0363, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x034A, - /* 03 */ 0x0348, - }, - { - /* 00 */ 0x0460, - /* 01 */ 0x045F, - /* 02 */ 0x045E, - /* 03 */ 0x045D, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0004), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0005), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0006), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0007), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0008), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0009), - }, - { - /* 00 */ 0x03CD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CE, - }, - { - /* 00 */ 0x03D2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D3, - }, - { - /* 00 */ 0x03D0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CF, - }, - { - /* 00 */ 0x00B3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0013), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0014), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x029C, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x029B, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x029F, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x029E, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0004), - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x035F, - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::OPERAND_SIZE, 0x0005), - }, - { - /* 00 */ 0x0362, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x034B, - /* 03 */ 0x0349, - }, - { - /* 00 */ 0x02E9, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02E3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02C9, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02DF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02CF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02E0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02CC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02C8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02EE, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02E7, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02EA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02E4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02D6, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02D4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02D7, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02D2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0512, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0507, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0506, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0509, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0508, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0505, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0514, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0511, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0513, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0510, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04B5, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x044A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0083, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0044, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0524, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0523, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000A), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000B), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04B6, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0444, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04EC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x004A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x052C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x052B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000C), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000D), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02A2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x007C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x007D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0308, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0048, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02F8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02FA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x037B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x037A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x044D, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000E), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0046, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0039, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0373, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0374, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06A1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06A0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0075, - /* 01 */ 0x0077, - /* 02 */ 0x007A, - /* 03 */ 0x0074, - }, - { - /* 00 */ 0x035A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x040D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x040C, - }, - { - /* 00 */ 0x03E4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03E5, - }, - { - /* 00 */ 0x052E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x052D, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x000F), - /* 01 */ ZYDIS_INVALID, - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0010), - /* 03 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0011), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODRM_REG, 0x0012), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0040, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0042, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0041, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x001E, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x001D, - }, - { - /* 00 */ 0x0487, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0488, - }, - { - /* 00 */ 0x047D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x047F, - }, - { - /* 00 */ 0x0483, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0484, - }, - { - /* 00 */ 0x03B3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B4, - }, - { - /* 00 */ 0x0439, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x043A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0347, - /* 02 */ 0x0366, - /* 03 */ 0x0361, - }, - { - /* 00 */ 0x0422, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0423, - }, - { - /* 00 */ 0x0494, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0493, - }, - { - /* 00 */ 0x0496, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0495, - }, - { - /* 00 */ 0x041E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x041F, - }, - { - /* 00 */ 0x03C1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C2, - }, - { - /* 00 */ 0x03BA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B9, - }, - { - /* 00 */ 0x03BB, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03BC, - }, - { - /* 00 */ 0x0417, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0416, - }, - { - /* 00 */ 0x03C3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C4, - }, - { - /* 00 */ 0x03C5, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C6, - }, - { - /* 00 */ 0x047A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x047B, - }, - { - /* 00 */ 0x0477, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0474, - }, - { - /* 00 */ 0x03C8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C9, - }, - { - /* 00 */ 0x0434, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0435, - }, - { - /* 00 */ 0x0436, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0437, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0089, - /* 02 */ 0x0087, - /* 03 */ 0x0097, - }, - { - /* 00 */ 0x035D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0358, - }, - { - /* 00 */ 0x048F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0490, - }, - { - /* 00 */ 0x0492, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0491, - }, - { - /* 00 */ 0x041C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x041D, - }, - { - /* 00 */ 0x0453, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0452, - }, - { - /* 00 */ 0x03B6, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B5, - }, - { - /* 00 */ 0x03B8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B7, - }, - { - /* 00 */ 0x0414, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0415, - }, - { - /* 00 */ 0x04C1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04C2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02F1, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0472, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0471, - }, - { - /* 00 */ 0x0469, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0467, - }, - { - /* 00 */ 0x046E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x046F, - }, - { - /* 00 */ 0x043B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x043C, - }, - { - /* 00 */ 0x0411, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0410, - }, - { - /* 00 */ 0x045A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0459, - }, - { - /* 00 */ 0x030B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x030A, - }, - { - /* 00 */ 0x0489, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x048A, - }, - { - /* 00 */ 0x0498, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0497, - }, - { - /* 00 */ 0x048B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x048C, - }, - { - /* 00 */ 0x048D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x048E, - }, - { - /* 00 */ 0x03AF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B0, - }, - { - /* 00 */ 0x03BE, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03BD, - }, - { - /* 00 */ 0x03B1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B2, - }, -}; - -const ZyDisOpcodeTreeNode optreeX87[][64] = -{ - { - /* 00 */ 0x00BC, - /* 01 */ 0x00BF, - /* 02 */ 0x00C2, - /* 03 */ 0x00C1, - /* 04 */ 0x00C0, - /* 05 */ 0x00C5, - /* 06 */ 0x00C3, - /* 07 */ 0x00C4, - /* 08 */ 0x01CE, - /* 09 */ 0x01CD, - /* 0A */ 0x01D9, - /* 0B */ 0x01DA, - /* 0C */ 0x01DB, - /* 0D */ 0x01D6, - /* 0E */ 0x01D7, - /* 0F */ 0x01D8, - /* 10 */ 0x011A, - /* 11 */ 0x011C, - /* 12 */ 0x011B, - /* 13 */ 0x0117, - /* 14 */ 0x0116, - /* 15 */ 0x011D, - /* 16 */ 0x011F, - /* 17 */ 0x011E, - /* 18 */ 0x013A, - /* 19 */ 0x0141, - /* 1A */ 0x013C, - /* 1B */ 0x0138, - /* 1C */ 0x013B, - /* 1D */ 0x0140, - /* 1E */ 0x013F, - /* 1F */ 0x0139, - /* 20 */ 0x022E, - /* 21 */ 0x0226, - /* 22 */ 0x0229, - /* 23 */ 0x0232, - /* 24 */ 0x0231, - /* 25 */ 0x022D, - /* 26 */ 0x022A, - /* 27 */ 0x0227, - /* 28 */ 0x0246, - /* 29 */ 0x024B, - /* 2A */ 0x024C, - /* 2B */ 0x024A, - /* 2C */ 0x0248, - /* 2D */ 0x0249, - /* 2E */ 0x0250, - /* 2F */ 0x0251, - /* 30 */ 0x0161, - /* 31 */ 0x0162, - /* 32 */ 0x0155, - /* 33 */ 0x015A, - /* 34 */ 0x0159, - /* 35 */ 0x0156, - /* 36 */ 0x0157, - /* 37 */ 0x0163, - /* 38 */ 0x0172, - /* 39 */ 0x016F, - /* 3A */ 0x0170, - /* 3B */ 0x0173, - /* 3C */ 0x0176, - /* 3D */ 0x0177, - /* 3E */ 0x0174, - /* 3F */ 0x0175, - }, - { - /* 00 */ 0x01BD, - /* 01 */ 0x01C0, - /* 02 */ 0x01BF, - /* 03 */ 0x01BE, - /* 04 */ 0x01B7, - /* 05 */ 0x01B6, - /* 06 */ 0x01B9, - /* 07 */ 0x01B8, - /* 08 */ 0x0281, - /* 09 */ 0x0282, - /* 0A */ 0x0283, - /* 0B */ 0x0280, - /* 0C */ 0x027D, - /* 0D */ 0x027E, - /* 0E */ 0x027F, - /* 0F */ 0x0284, - /* 10 */ 0x01E7, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ ZYDIS_INVALID, - /* 17 */ ZYDIS_INVALID, - /* 18 */ 0x0213, - /* 19 */ 0x0212, - /* 1A */ 0x0215, - /* 1B */ 0x0214, - /* 1C */ 0x020F, - /* 1D */ 0x020E, - /* 1E */ 0x0211, - /* 1F */ 0x0210, - /* 20 */ 0x00D4, - /* 21 */ 0x00B7, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ 0x025A, - /* 25 */ 0x027C, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x01C1, - /* 29 */ 0x01C5, - /* 2A */ 0x01C4, - /* 2B */ 0x01C8, - /* 2C */ 0x01C6, - /* 2D */ 0x01C7, - /* 2E */ 0x01C9, - /* 2F */ ZYDIS_INVALID, - /* 30 */ 0x00B6, - /* 31 */ 0x0298, - /* 32 */ 0x01F1, - /* 33 */ 0x01EE, - /* 34 */ 0x0297, - /* 35 */ 0x01F0, - /* 36 */ 0x0154, - /* 37 */ 0x01A9, - /* 38 */ 0x01EF, - /* 39 */ 0x0299, - /* 3A */ 0x01F8, - /* 3B */ 0x01F7, - /* 3C */ 0x01F2, - /* 3D */ 0x01F5, - /* 3E */ 0x01F6, - /* 3F */ 0x0153, - }, - { - /* 00 */ 0x00D9, - /* 01 */ 0x00DA, - /* 02 */ 0x00DB, - /* 03 */ 0x00D6, - /* 04 */ 0x00D7, - /* 05 */ 0x00D8, - /* 06 */ 0x00DD, - /* 07 */ 0x00DC, - /* 08 */ 0x00E6, - /* 09 */ 0x00E7, - /* 0A */ 0x00E8, - /* 0B */ 0x00EC, - /* 0C */ 0x00ED, - /* 0D */ 0x00EB, - /* 0E */ 0x00E9, - /* 0F */ 0x00EA, - /* 10 */ 0x00E4, - /* 11 */ 0x00E5, - /* 12 */ 0x00E2, - /* 13 */ 0x00E3, - /* 14 */ 0x00DF, - /* 15 */ 0x00DE, - /* 16 */ 0x00E0, - /* 17 */ 0x00E1, - /* 18 */ 0x0113, - /* 19 */ 0x0114, - /* 1A */ 0x0115, - /* 1B */ 0x010F, - /* 1C */ 0x010E, - /* 1D */ 0x0110, - /* 1E */ 0x0111, - /* 1F */ 0x0112, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ 0x027B, - /* 2A */ ZYDIS_INVALID, - /* 2B */ ZYDIS_INVALID, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x00F0, - /* 01 */ 0x00F1, - /* 02 */ 0x00EE, - /* 03 */ 0x00EF, - /* 04 */ 0x00F4, - /* 05 */ 0x00F5, - /* 06 */ 0x00F2, - /* 07 */ 0x00F3, - /* 08 */ 0x0103, - /* 09 */ 0x0102, - /* 0A */ 0x0105, - /* 0B */ 0x0104, - /* 0C */ 0x00FF, - /* 0D */ 0x00FE, - /* 0E */ 0x0101, - /* 0F */ 0x0100, - /* 10 */ 0x00F8, - /* 11 */ 0x00F9, - /* 12 */ 0x00F6, - /* 13 */ 0x00F7, - /* 14 */ 0x00FC, - /* 15 */ 0x00FD, - /* 16 */ 0x00FA, - /* 17 */ 0x00FB, - /* 18 */ 0x010B, - /* 19 */ 0x010A, - /* 1A */ 0x010D, - /* 1B */ 0x010C, - /* 1C */ 0x0107, - /* 1D */ 0x0106, - /* 1E */ 0x0109, - /* 1F */ 0x0108, - /* 20 */ 0x01E5, - /* 21 */ 0x01E4, - /* 22 */ 0x00D5, - /* 23 */ 0x01E6, - /* 24 */ 0x01E9, - /* 25 */ 0x01F4, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x0269, - /* 29 */ 0x026A, - /* 2A */ 0x0265, - /* 2B */ 0x0264, - /* 2C */ 0x0263, - /* 2D */ 0x0268, - /* 2E */ 0x0267, - /* 2F */ 0x0266, - /* 30 */ 0x0129, - /* 31 */ 0x0128, - /* 32 */ 0x012B, - /* 33 */ 0x012A, - /* 34 */ 0x012F, - /* 35 */ 0x012E, - /* 36 */ 0x012D, - /* 37 */ 0x012C, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x00B9, - /* 01 */ 0x00B8, - /* 02 */ 0x00C6, - /* 03 */ 0x00C9, - /* 04 */ 0x00C8, - /* 05 */ 0x00C7, - /* 06 */ 0x00BE, - /* 07 */ 0x00BD, - /* 08 */ 0x01D1, - /* 09 */ 0x01D0, - /* 0A */ 0x01D5, - /* 0B */ 0x01D4, - /* 0C */ 0x01D3, - /* 0D */ 0x01CC, - /* 0E */ 0x01CB, - /* 0F */ 0x01CA, - /* 10 */ 0x0125, - /* 11 */ 0x0124, - /* 12 */ 0x0127, - /* 13 */ 0x0126, - /* 14 */ 0x0121, - /* 15 */ 0x0120, - /* 16 */ 0x0123, - /* 17 */ 0x0122, - /* 18 */ 0x0148, - /* 19 */ 0x0142, - /* 1A */ 0x0145, - /* 1B */ 0x0144, - /* 1C */ 0x0143, - /* 1D */ 0x0147, - /* 1E */ 0x0146, - /* 1F */ 0x0149, - /* 20 */ 0x024F, - /* 21 */ 0x0247, - /* 22 */ 0x0241, - /* 23 */ 0x0242, - /* 24 */ 0x0240, - /* 25 */ 0x024E, - /* 26 */ 0x024D, - /* 27 */ 0x0244, - /* 28 */ 0x0228, - /* 29 */ 0x0235, - /* 2A */ 0x0234, - /* 2B */ 0x0237, - /* 2C */ 0x0236, - /* 2D */ 0x0233, - /* 2E */ 0x0230, - /* 2F */ 0x022F, - /* 30 */ 0x017B, - /* 31 */ 0x0178, - /* 32 */ 0x0179, - /* 33 */ 0x017C, - /* 34 */ 0x017F, - /* 35 */ 0x0180, - /* 36 */ 0x017D, - /* 37 */ 0x017E, - /* 38 */ 0x015E, - /* 39 */ 0x015F, - /* 3A */ 0x0160, - /* 3B */ 0x015B, - /* 3C */ 0x015C, - /* 3D */ 0x015D, - /* 3E */ 0x0164, - /* 3F */ 0x0165, - }, - { - /* 00 */ 0x018F, - /* 01 */ 0x018E, - /* 02 */ 0x0191, - /* 03 */ 0x0190, - /* 04 */ 0x018B, - /* 05 */ 0x018A, - /* 06 */ 0x018D, - /* 07 */ 0x018C, - /* 08 */ 0x028A, - /* 09 */ 0x0289, - /* 0A */ 0x028C, - /* 0B */ 0x028B, - /* 0C */ 0x0286, - /* 0D */ 0x0285, - /* 0E */ 0x0288, - /* 0F */ 0x0287, - /* 10 */ 0x0200, - /* 11 */ 0x0202, - /* 12 */ 0x0201, - /* 13 */ 0x01FA, - /* 14 */ 0x01F9, - /* 15 */ 0x01FB, - /* 16 */ 0x01FD, - /* 17 */ 0x01FC, - /* 18 */ 0x020D, - /* 19 */ 0x020C, - /* 1A */ 0x0208, - /* 1B */ 0x0204, - /* 1C */ 0x0203, - /* 1D */ 0x0205, - /* 1E */ 0x0207, - /* 1F */ 0x0206, - /* 20 */ 0x025D, - /* 21 */ 0x025C, - /* 22 */ 0x025B, - /* 23 */ 0x025E, - /* 24 */ 0x0261, - /* 25 */ 0x0262, - /* 26 */ 0x025F, - /* 27 */ 0x0260, - /* 28 */ 0x0278, - /* 29 */ 0x0277, - /* 2A */ 0x027A, - /* 2B */ 0x0279, - /* 2C */ 0x0274, - /* 2D */ 0x0273, - /* 2E */ 0x0276, - /* 2F */ 0x0275, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x00CC, - /* 01 */ 0x00CD, - /* 02 */ 0x00CA, - /* 03 */ 0x00CB, - /* 04 */ 0x00D0, - /* 05 */ 0x00D1, - /* 06 */ 0x00CE, - /* 07 */ 0x00CF, - /* 08 */ 0x01E1, - /* 09 */ 0x01E0, - /* 0A */ 0x01E3, - /* 0B */ 0x01E2, - /* 0C */ 0x01DD, - /* 0D */ 0x01DC, - /* 0E */ 0x01DF, - /* 0F */ 0x01DE, - /* 10 */ 0x014F, - /* 11 */ 0x014E, - /* 12 */ 0x0151, - /* 13 */ 0x0150, - /* 14 */ 0x014B, - /* 15 */ 0x014A, - /* 16 */ 0x014D, - /* 17 */ 0x014C, - /* 18 */ ZYDIS_INVALID, - /* 19 */ 0x0152, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ 0x0258, - /* 21 */ 0x0259, - /* 22 */ 0x0256, - /* 23 */ 0x0257, - /* 24 */ 0x0253, - /* 25 */ 0x0252, - /* 26 */ 0x0255, - /* 27 */ 0x0254, - /* 28 */ 0x023B, - /* 29 */ 0x023D, - /* 2A */ 0x023C, - /* 2B */ 0x0239, - /* 2C */ 0x0238, - /* 2D */ 0x023A, - /* 2E */ 0x023E, - /* 2F */ 0x023F, - /* 30 */ 0x0186, - /* 31 */ 0x0185, - /* 32 */ 0x0188, - /* 33 */ 0x0187, - /* 34 */ 0x0182, - /* 35 */ 0x0181, - /* 36 */ 0x0184, - /* 37 */ 0x0183, - /* 38 */ 0x016C, - /* 39 */ 0x016B, - /* 3A */ 0x016E, - /* 3B */ 0x016D, - /* 3C */ 0x0168, - /* 3D */ 0x0167, - /* 3E */ 0x016A, - /* 3F */ 0x0169, - }, - { - /* 00 */ 0x0199, - /* 01 */ 0x0196, - /* 02 */ 0x0197, - /* 03 */ 0x0198, - /* 04 */ 0x0193, - /* 05 */ 0x0192, - /* 06 */ 0x0195, - /* 07 */ 0x0194, - /* 08 */ 0x028F, - /* 09 */ 0x0290, - /* 0A */ 0x028D, - /* 0B */ 0x028E, - /* 0C */ 0x0293, - /* 0D */ 0x0294, - /* 0E */ 0x0291, - /* 0F */ 0x0292, - /* 10 */ 0x021B, - /* 11 */ 0x021A, - /* 12 */ 0x021D, - /* 13 */ 0x021C, - /* 14 */ 0x0217, - /* 15 */ 0x0216, - /* 16 */ 0x0219, - /* 17 */ 0x0218, - /* 18 */ 0x0220, - /* 19 */ 0x0221, - /* 1A */ 0x021E, - /* 1B */ 0x021F, - /* 1C */ 0x0224, - /* 1D */ 0x0225, - /* 1E */ 0x0222, - /* 1F */ 0x0223, - /* 20 */ 0x01EC, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x0271, - /* 29 */ 0x0272, - /* 2A */ 0x026D, - /* 2B */ 0x026C, - /* 2C */ 0x026B, - /* 2D */ 0x0270, - /* 2E */ 0x026F, - /* 2F */ 0x026E, - /* 30 */ 0x0136, - /* 31 */ 0x0137, - /* 32 */ 0x0133, - /* 33 */ 0x0134, - /* 34 */ 0x0135, - /* 35 */ 0x0130, - /* 36 */ 0x0131, - /* 37 */ 0x0132, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode optreeAddressSize[][3] = -{ - { - /* 00 */ 0x02CD, - /* 01 */ 0x02D0, - /* 02 */ 0x02EC, - }, -}; - -const ZyDisOpcodeTreeNode optreeOperandSize[][3] = -{ - { - /* 00 */ 0x03E0, - /* 01 */ 0x03E1, - /* 02 */ 0x03E2, - }, - { - /* 00 */ 0x0409, - /* 01 */ 0x040A, - /* 02 */ 0x040B, - }, - { - /* 00 */ 0x033D, - /* 01 */ 0x0343, - /* 02 */ 0x035E, - }, - { - /* 00 */ 0x0341, - /* 01 */ 0x0342, - /* 02 */ 0x0364, - }, - { - /* 00 */ 0x0344, - /* 01 */ 0x033E, - /* 02 */ 0x0365, - }, - { - /* 00 */ 0x0340, - /* 01 */ 0x033F, - /* 02 */ 0x0360, - }, - { - /* 00 */ 0x007F, - /* 01 */ 0x0080, - /* 02 */ 0x007E, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x000F), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0010), - /* 02 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0011), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0012), - /* 02 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02B8, - /* 01 */ 0x02B6, - /* 02 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x03A1, - /* 01 */ 0x03A0, - /* 02 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0050, - /* 01 */ 0x009E, - /* 02 */ 0x0052, - }, - { - /* 00 */ 0x009D, - /* 01 */ 0x0051, - /* 02 */ 0x0084, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001E), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x001F), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0020), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0021), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0022), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0023), - }, - { - /* 00 */ 0x0372, - /* 01 */ 0x0369, - /* 02 */ 0x036F, - }, - { - /* 00 */ 0x007B, - /* 01 */ 0x0078, - /* 02 */ 0x0079, - }, - { - /* 00 */ 0x0540, - /* 01 */ 0x053E, - /* 02 */ 0x053F, - }, - { - /* 00 */ 0x0303, - /* 01 */ 0x0301, - /* 02 */ 0x0302, - }, - { - /* 00 */ 0x0504, - /* 01 */ 0x0502, - /* 02 */ 0x0503, - }, - { - /* 00 */ 0x05BB, - /* 01 */ 0x05BA, - /* 02 */ 0x05D5, - }, - { - /* 00 */ 0x05B9, - /* 01 */ 0x05BC, - /* 02 */ 0x05D6, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000E), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x000F), - /* 02 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0010), - }, - { - /* 00 */ 0x02C6, - /* 01 */ 0x02C4, - /* 02 */ 0x02C5, - }, -}; - -const ZyDisOpcodeTreeNode optreeMode[][2] = -{ - { - /* 00 */ 0x04AA, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0445, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04AD, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0553, - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000D), - }, - { - /* 00 */ 0x0555, - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000E), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x000F), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0010), - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0011), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VENDOR, 0x0012), - }, - { - /* 00 */ 0x04AC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0446, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04A9, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0443, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x009F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x00A0, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0001, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0004, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04BA, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04BB, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x044B, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x044C, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0038, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0033, - /* 01 */ 0x0375, - }, - { - /* 00 */ 0x0011, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0398, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0007, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04FC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x002A, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0546, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06B3, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0073, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x004F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04C0, - /* 01 */ 0x04BF, - }, - { - /* 00 */ 0x04BC, - /* 01 */ 0x04BE, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x04BD, - }, - { - /* 00 */ 0x0451, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x044E, - /* 01 */ 0x0450, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x044F, - }, - { - /* 00 */ 0x02F6, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0014), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VEXW, 0x0015), - }, - { - /* 00 */ 0x02F3, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02BC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0003, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0002, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04F0, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02DC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x004D, - /* 01 */ 0x004B, - }, -}; - -const ZyDisOpcodeTreeNode optreeVendor[][2] = -{ - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05AC, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05B2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05EB, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05F3, - }, - { - /* 00 */ 0x05EC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05B4, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05B3, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05ED, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x053A, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0056, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0530, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02C1, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04D5, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0552, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0554, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02BE, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02BF, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02C3, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02C2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05EA, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05F2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05E8, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05E9, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05F4, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05AD, - }, -}; - -const ZyDisOpcodeTreeNode optree3dnow[][256] = -{ - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ 0x0407, - /* 0D */ 0x0406, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ ZYDIS_INVALID, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ ZYDIS_INVALID, - /* 17 */ ZYDIS_INVALID, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ 0x03E7, - /* 1D */ 0x03E6, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ ZYDIS_INVALID, - /* 2B */ ZYDIS_INVALID, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ 0x03F0, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ 0x03F1, - /* 8F */ ZYDIS_INVALID, - /* 90 */ 0x03EB, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ 0x03EE, - /* 95 */ ZYDIS_INVALID, - /* 96 */ 0x03F2, - /* 97 */ 0x03F6, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ 0x03F7, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ 0x03E9, - /* 9F */ ZYDIS_INVALID, - /* A0 */ 0x03EC, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ 0x03ED, - /* A5 */ ZYDIS_INVALID, - /* A6 */ 0x03F3, - /* A7 */ 0x03F5, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ 0x03F8, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ 0x03E8, - /* AF */ ZYDIS_INVALID, - /* B0 */ 0x03EA, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ 0x03EF, - /* B5 */ ZYDIS_INVALID, - /* B6 */ 0x03F4, - /* B7 */ 0x0433, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ 0x0499, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ 0x03C7, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ ZYDIS_INVALID, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode optreeVex[][16] = -{ - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0024), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0004), - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0005), - /* 06 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0006), - /* 07 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0007), - /* 08 */ ZYDIS_INVALID, - /* 09 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0008), - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0009), - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::MODE, 0x0026), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0004), - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0005), - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0008), - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ NODE(ZyDisOpcodeTreeNodeType::TABLE, 0x0009), - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode optreeVexW[][2] = -{ - { - /* 00 */ 0x061D, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x061C, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0692, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0691, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x057B, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0008), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05A6, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05A5, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05A7, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05A4, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x061E, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x061B, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x0009), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x061F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0620, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0621, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0622, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000A), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000B), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000C), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000D), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000E), - /* 01 */ NODE(ZyDisOpcodeTreeNodeType::VEXL, 0x000F), - }, - { - /* 00 */ 0x0579, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0578, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x060B, - /* 01 */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode optreeVexL[][2] = -{ - { - /* 00 */ 0x069C, - /* 01 */ 0x069B, - }, - { - /* 00 */ 0x0660, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065A, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065E, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x063F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065B, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065D, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x057A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x061A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05A0, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x059A, - }, - { - /* 00 */ 0x062C, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x062E, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x062D, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x062F, - /* 01 */ ZYDIS_INVALID, - }, -}; - -#undef ZYDIS_INVALID -#undef NODE - -#define OPI_NONE { ZyDisDefinedOperandType::NONE, ZyDisDefinedOperandSize::NA } -#define OPI_AL { ZyDisDefinedOperandType::AL, ZyDisDefinedOperandSize::B } -#define OPI_AX { ZyDisDefinedOperandType::AX, ZyDisDefinedOperandSize::W } -#define OPI_Av { ZyDisDefinedOperandType::A, ZyDisDefinedOperandSize::V } -#define OPI_C { ZyDisDefinedOperandType::C, ZyDisDefinedOperandSize::NA } -#define OPI_CL { ZyDisDefinedOperandType::CL, ZyDisDefinedOperandSize::B } -#define OPI_CS { ZyDisDefinedOperandType::CS, ZyDisDefinedOperandSize::NA } -#define OPI_CX { ZyDisDefinedOperandType::CX, ZyDisDefinedOperandSize::W } -#define OPI_D { ZyDisDefinedOperandType::D, ZyDisDefinedOperandSize::NA } -#define OPI_DL { ZyDisDefinedOperandType::DL, ZyDisDefinedOperandSize::B } -#define OPI_DS { ZyDisDefinedOperandType::DS, ZyDisDefinedOperandSize::NA } -#define OPI_DX { ZyDisDefinedOperandType::DX, ZyDisDefinedOperandSize::W } -#define OPI_E { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::NA } -#define OPI_ES { ZyDisDefinedOperandType::ES, ZyDisDefinedOperandSize::NA } -#define OPI_Eb { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::B } -#define OPI_Ed { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::D } -#define OPI_Eq { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::Q } -#define OPI_Ev { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::V } -#define OPI_Ew { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::W } -#define OPI_Ey { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::Y } -#define OPI_Ez { ZyDisDefinedOperandType::E, ZyDisDefinedOperandSize::Z } -#define OPI_FS { ZyDisDefinedOperandType::FS, ZyDisDefinedOperandSize::NA } -#define OPI_Fv { ZyDisDefinedOperandType::F, ZyDisDefinedOperandSize::V } -#define OPI_G { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::NA } -#define OPI_GS { ZyDisDefinedOperandType::GS, ZyDisDefinedOperandSize::NA } -#define OPI_Gb { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::B } -#define OPI_Gd { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::D } -#define OPI_Gq { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::Q } -#define OPI_Gv { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::V } -#define OPI_Gw { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::W } -#define OPI_Gy { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::Y } -#define OPI_Gz { ZyDisDefinedOperandType::G, ZyDisDefinedOperandSize::Z } -#define OPI_H { ZyDisDefinedOperandType::H, ZyDisDefinedOperandSize::X } -#define OPI_Hqq { ZyDisDefinedOperandType::H, ZyDisDefinedOperandSize::QQ } -#define OPI_Hx { ZyDisDefinedOperandType::H, ZyDisDefinedOperandSize::X } -#define OPI_I1 { ZyDisDefinedOperandType::I1, ZyDisDefinedOperandSize::NA } -#define OPI_Ib { ZyDisDefinedOperandType::I, ZyDisDefinedOperandSize::B } -#define OPI_Iv { ZyDisDefinedOperandType::I, ZyDisDefinedOperandSize::V } -#define OPI_Iw { ZyDisDefinedOperandType::I, ZyDisDefinedOperandSize::W } -#define OPI_Iz { ZyDisDefinedOperandType::I, ZyDisDefinedOperandSize::Z } -#define OPI_Jb { ZyDisDefinedOperandType::J, ZyDisDefinedOperandSize::B } -#define OPI_Jv { ZyDisDefinedOperandType::J, ZyDisDefinedOperandSize::V } -#define OPI_Jz { ZyDisDefinedOperandType::J, ZyDisDefinedOperandSize::Z } -#define OPI_L { ZyDisDefinedOperandType::L, ZyDisDefinedOperandSize::O } -#define OPI_Lx { ZyDisDefinedOperandType::L, ZyDisDefinedOperandSize::X } -#define OPI_M { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::NA } -#define OPI_Mb { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::B } -#define OPI_MbRd { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::BD } -#define OPI_MbRv { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::BV } -#define OPI_Md { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::D } -#define OPI_MdRy { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::DY } -#define OPI_MdU { ZyDisDefinedOperandType::MU, ZyDisDefinedOperandSize::DO } -#define OPI_Mdq { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::DQ } -#define OPI_Mo { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::O } -#define OPI_Mq { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::Q } -#define OPI_MqU { ZyDisDefinedOperandType::MU, ZyDisDefinedOperandSize::QO } -#define OPI_Ms { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::W } -#define OPI_Mt { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::T } -#define OPI_Mv { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::V } -#define OPI_Mw { ZyDisDefinedOperandType::M, ZyDisDefinedOperandSize::W } -#define OPI_MwRd { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::WD } -#define OPI_MwRv { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::WV } -#define OPI_MwRy { ZyDisDefinedOperandType::MR, ZyDisDefinedOperandSize::WY } -#define OPI_MwU { ZyDisDefinedOperandType::MU, ZyDisDefinedOperandSize::WO } -#define OPI_N { ZyDisDefinedOperandType::N, ZyDisDefinedOperandSize::Q } -#define OPI_Ob { ZyDisDefinedOperandType::O, ZyDisDefinedOperandSize::B } -#define OPI_Ov { ZyDisDefinedOperandType::O, ZyDisDefinedOperandSize::V } -#define OPI_Ow { ZyDisDefinedOperandType::O, ZyDisDefinedOperandSize::W } -#define OPI_P { ZyDisDefinedOperandType::P, ZyDisDefinedOperandSize::Q } -#define OPI_Q { ZyDisDefinedOperandType::Q, ZyDisDefinedOperandSize::Q } -#define OPI_R { ZyDisDefinedOperandType::R, ZyDisDefinedOperandSize::RDQ } -#define OPI_R0b { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::B } -#define OPI_R0v { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::V } -#define OPI_R0w { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::W } -#define OPI_R0y { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::Y } -#define OPI_R0z { ZyDisDefinedOperandType::R0, ZyDisDefinedOperandSize::Z } -#define OPI_R1b { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::B } -#define OPI_R1v { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::V } -#define OPI_R1w { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::W } -#define OPI_R1y { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::Y } -#define OPI_R1z { ZyDisDefinedOperandType::R1, ZyDisDefinedOperandSize::Z } -#define OPI_R2b { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::B } -#define OPI_R2v { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::V } -#define OPI_R2w { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::W } -#define OPI_R2y { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::Y } -#define OPI_R2z { ZyDisDefinedOperandType::R2, ZyDisDefinedOperandSize::Z } -#define OPI_R3b { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::B } -#define OPI_R3v { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::V } -#define OPI_R3w { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::W } -#define OPI_R3y { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::Y } -#define OPI_R3z { ZyDisDefinedOperandType::R3, ZyDisDefinedOperandSize::Z } -#define OPI_R4b { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::B } -#define OPI_R4v { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::V } -#define OPI_R4w { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::W } -#define OPI_R4y { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::Y } -#define OPI_R4z { ZyDisDefinedOperandType::R4, ZyDisDefinedOperandSize::Z } -#define OPI_R5b { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::B } -#define OPI_R5v { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::V } -#define OPI_R5w { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::W } -#define OPI_R5y { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::Y } -#define OPI_R5z { ZyDisDefinedOperandType::R5, ZyDisDefinedOperandSize::Z } -#define OPI_R6b { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::B } -#define OPI_R6v { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::V } -#define OPI_R6w { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::W } -#define OPI_R6y { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::Y } -#define OPI_R6z { ZyDisDefinedOperandType::R6, ZyDisDefinedOperandSize::Z } -#define OPI_R7b { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::B } -#define OPI_R7v { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::V } -#define OPI_R7w { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::W } -#define OPI_R7y { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::Y } -#define OPI_R7z { ZyDisDefinedOperandType::R7, ZyDisDefinedOperandSize::Z } -#define OPI_S { ZyDisDefinedOperandType::S, ZyDisDefinedOperandSize::W } -#define OPI_SS { ZyDisDefinedOperandType::SS, ZyDisDefinedOperandSize::NA } -#define OPI_ST0 { ZyDisDefinedOperandType::ST0, ZyDisDefinedOperandSize::NA } -#define OPI_ST1 { ZyDisDefinedOperandType::ST1, ZyDisDefinedOperandSize::NA } -#define OPI_ST2 { ZyDisDefinedOperandType::ST2, ZyDisDefinedOperandSize::NA } -#define OPI_ST3 { ZyDisDefinedOperandType::ST3, ZyDisDefinedOperandSize::NA } -#define OPI_ST4 { ZyDisDefinedOperandType::ST4, ZyDisDefinedOperandSize::NA } -#define OPI_ST5 { ZyDisDefinedOperandType::ST5, ZyDisDefinedOperandSize::NA } -#define OPI_ST6 { ZyDisDefinedOperandType::ST6, ZyDisDefinedOperandSize::NA } -#define OPI_ST7 { ZyDisDefinedOperandType::ST7, ZyDisDefinedOperandSize::NA } -#define OPI_U { ZyDisDefinedOperandType::U, ZyDisDefinedOperandSize::O } -#define OPI_Ux { ZyDisDefinedOperandType::U, ZyDisDefinedOperandSize::X } -#define OPI_V { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::DQ } -#define OPI_Vdq { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::DQ } -#define OPI_Vqq { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::QQ } -#define OPI_Vsd { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::Q } -#define OPI_Vx { ZyDisDefinedOperandType::V, ZyDisDefinedOperandSize::X } -#define OPI_W { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::DQ } -#define OPI_Wdq { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::DQ } -#define OPI_Wqq { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::QQ } -#define OPI_Wsd { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::Q } -#define OPI_Wx { ZyDisDefinedOperandType::W, ZyDisDefinedOperandSize::X } -#define OPI_eAX { ZyDisDefinedOperandType::EAX, ZyDisDefinedOperandSize::Z } -#define OPI_eCX { ZyDisDefinedOperandType::ECX, ZyDisDefinedOperandSize::Z } -#define OPI_eDX { ZyDisDefinedOperandType::EDX, ZyDisDefinedOperandSize::Z } -#define OPI_rAX { ZyDisDefinedOperandType::RAX, ZyDisDefinedOperandSize::V } -#define OPI_rCX { ZyDisDefinedOperandType::RCX, ZyDisDefinedOperandSize::V } -#define OPI_rDX { ZyDisDefinedOperandType::RDX, ZyDisDefinedOperandSize::V } -#define OPI_sIb { ZyDisDefinedOperandType::sI, ZyDisDefinedOperandSize::B } -#define OPI_sIz { ZyDisDefinedOperandType::sI, ZyDisDefinedOperandSize::Z } - -const ZyDisInstructionDefinition instrDefinitions[] = -{ - /* 000 */ { ZyDisInstructionMnemonic::INVALID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 001 */ { ZyDisInstructionMnemonic::AAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 002 */ { ZyDisInstructionMnemonic::AAD, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 003 */ { ZyDisInstructionMnemonic::AAM, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 004 */ { ZyDisInstructionMnemonic::AAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 005 */ { ZyDisInstructionMnemonic::ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 006 */ { ZyDisInstructionMnemonic::ADC, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 007 */ { ZyDisInstructionMnemonic::ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 008 */ { ZyDisInstructionMnemonic::ADC, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 009 */ { ZyDisInstructionMnemonic::ADC, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00A */ { ZyDisInstructionMnemonic::ADC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00B */ { ZyDisInstructionMnemonic::ADC, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00C */ { ZyDisInstructionMnemonic::ADC, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00D */ { ZyDisInstructionMnemonic::ADC, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 00E */ { ZyDisInstructionMnemonic::ADC, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00F */ { ZyDisInstructionMnemonic::ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 010 */ { ZyDisInstructionMnemonic::ADD, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 011 */ { ZyDisInstructionMnemonic::ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 012 */ { ZyDisInstructionMnemonic::ADD, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 013 */ { ZyDisInstructionMnemonic::ADD, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 014 */ { ZyDisInstructionMnemonic::ADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 015 */ { ZyDisInstructionMnemonic::ADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 016 */ { ZyDisInstructionMnemonic::ADD, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 017 */ { ZyDisInstructionMnemonic::ADD, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 018 */ { ZyDisInstructionMnemonic::ADD, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 019 */ { ZyDisInstructionMnemonic::ADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01A */ { ZyDisInstructionMnemonic::ADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01B */ { ZyDisInstructionMnemonic::ADDSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01C */ { ZyDisInstructionMnemonic::ADDSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01D */ { ZyDisInstructionMnemonic::ADDSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01E */ { ZyDisInstructionMnemonic::ADDSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01F */ { ZyDisInstructionMnemonic::AESDEC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 020 */ { ZyDisInstructionMnemonic::AESDECLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 021 */ { ZyDisInstructionMnemonic::AESENC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 022 */ { ZyDisInstructionMnemonic::AESENCLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 023 */ { ZyDisInstructionMnemonic::AESIMC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 024 */ { ZyDisInstructionMnemonic::AESKEYGENASSIST, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 025 */ { ZyDisInstructionMnemonic::AND, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 026 */ { ZyDisInstructionMnemonic::AND, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 027 */ { ZyDisInstructionMnemonic::AND, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 028 */ { ZyDisInstructionMnemonic::AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 029 */ { ZyDisInstructionMnemonic::AND, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 02A */ { ZyDisInstructionMnemonic::AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 02B */ { ZyDisInstructionMnemonic::AND, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 02C */ { ZyDisInstructionMnemonic::AND, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 02D */ { ZyDisInstructionMnemonic::AND, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 02E */ { ZyDisInstructionMnemonic::AND, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 02F */ { ZyDisInstructionMnemonic::ANDNPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 030 */ { ZyDisInstructionMnemonic::ANDNPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 031 */ { ZyDisInstructionMnemonic::ANDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 032 */ { ZyDisInstructionMnemonic::ANDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 033 */ { ZyDisInstructionMnemonic::ARPL, { OPI_Ew, OPI_Gw, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 034 */ { ZyDisInstructionMnemonic::BLENDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 035 */ { ZyDisInstructionMnemonic::BLENDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 036 */ { ZyDisInstructionMnemonic::BLENDVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 037 */ { ZyDisInstructionMnemonic::BLENDVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 038 */ { ZyDisInstructionMnemonic::BOUND, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 039 */ { ZyDisInstructionMnemonic::BSF, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 03A */ { ZyDisInstructionMnemonic::BSR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 03B */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R5y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03C */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R3y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03D */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R1y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03E */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R4y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03F */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R0y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 040 */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R2y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 041 */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R7y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 042 */ { ZyDisInstructionMnemonic::BSWAP, { OPI_R6y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 043 */ { ZyDisInstructionMnemonic::BT, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 044 */ { ZyDisInstructionMnemonic::BT, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 045 */ { ZyDisInstructionMnemonic::BTC, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 046 */ { ZyDisInstructionMnemonic::BTC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 047 */ { ZyDisInstructionMnemonic::BTR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 048 */ { ZyDisInstructionMnemonic::BTR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 049 */ { ZyDisInstructionMnemonic::BTS, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 04A */ { ZyDisInstructionMnemonic::BTS, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 04B */ { ZyDisInstructionMnemonic::CALL, { OPI_Eq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 04C */ { ZyDisInstructionMnemonic::CALL, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 04D */ { ZyDisInstructionMnemonic::CALL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 04E */ { ZyDisInstructionMnemonic::CALL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 04F */ { ZyDisInstructionMnemonic::CALL, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 050 */ { ZyDisInstructionMnemonic::CBW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 051 */ { ZyDisInstructionMnemonic::CDQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 052 */ { ZyDisInstructionMnemonic::CDQE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 053 */ { ZyDisInstructionMnemonic::CLC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 054 */ { ZyDisInstructionMnemonic::CLD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 055 */ { ZyDisInstructionMnemonic::CLFLUSH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 056 */ { ZyDisInstructionMnemonic::CLGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 057 */ { ZyDisInstructionMnemonic::CLI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 058 */ { ZyDisInstructionMnemonic::CLTS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 059 */ { ZyDisInstructionMnemonic::CMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 05A */ { ZyDisInstructionMnemonic::CMOVA, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05B */ { ZyDisInstructionMnemonic::CMOVAE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05C */ { ZyDisInstructionMnemonic::CMOVB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05D */ { ZyDisInstructionMnemonic::CMOVBE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05E */ { ZyDisInstructionMnemonic::CMOVE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05F */ { ZyDisInstructionMnemonic::CMOVG, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 060 */ { ZyDisInstructionMnemonic::CMOVGE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 061 */ { ZyDisInstructionMnemonic::CMOVL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 062 */ { ZyDisInstructionMnemonic::CMOVLE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 063 */ { ZyDisInstructionMnemonic::CMOVNE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 064 */ { ZyDisInstructionMnemonic::CMOVNO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 065 */ { ZyDisInstructionMnemonic::CMOVNP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 066 */ { ZyDisInstructionMnemonic::CMOVNS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 067 */ { ZyDisInstructionMnemonic::CMOVO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 068 */ { ZyDisInstructionMnemonic::CMOVP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 069 */ { ZyDisInstructionMnemonic::CMOVS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 06A */ { ZyDisInstructionMnemonic::CMP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06B */ { ZyDisInstructionMnemonic::CMP, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06C */ { ZyDisInstructionMnemonic::CMP, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06D */ { ZyDisInstructionMnemonic::CMP, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06E */ { ZyDisInstructionMnemonic::CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06F */ { ZyDisInstructionMnemonic::CMP, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 070 */ { ZyDisInstructionMnemonic::CMP, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, - /* 071 */ { ZyDisInstructionMnemonic::CMP, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 072 */ { ZyDisInstructionMnemonic::CMP, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 073 */ { ZyDisInstructionMnemonic::CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 }, - /* 074 */ { ZyDisInstructionMnemonic::CMPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 075 */ { ZyDisInstructionMnemonic::CMPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 076 */ { ZyDisInstructionMnemonic::CMPSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 077 */ { ZyDisInstructionMnemonic::CMPSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 078 */ { ZyDisInstructionMnemonic::CMPSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 079 */ { ZyDisInstructionMnemonic::CMPSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 07A */ { ZyDisInstructionMnemonic::CMPSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07B */ { ZyDisInstructionMnemonic::CMPSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 07C */ { ZyDisInstructionMnemonic::CMPXCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07D */ { ZyDisInstructionMnemonic::CMPXCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07E */ { ZyDisInstructionMnemonic::CMPXCHG16B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07F */ { ZyDisInstructionMnemonic::CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 080 */ { ZyDisInstructionMnemonic::CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 081 */ { ZyDisInstructionMnemonic::COMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 082 */ { ZyDisInstructionMnemonic::COMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 083 */ { ZyDisInstructionMnemonic::CPUID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 084 */ { ZyDisInstructionMnemonic::CQO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 085 */ { ZyDisInstructionMnemonic::CRC32, { OPI_Gy, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 086 */ { ZyDisInstructionMnemonic::CRC32, { OPI_Gy, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 087 */ { ZyDisInstructionMnemonic::CVTDQ2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 088 */ { ZyDisInstructionMnemonic::CVTDQ2PS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 089 */ { ZyDisInstructionMnemonic::CVTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08A */ { ZyDisInstructionMnemonic::CVTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08B */ { ZyDisInstructionMnemonic::CVTPD2PS, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08C */ { ZyDisInstructionMnemonic::CVTPI2PD, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08D */ { ZyDisInstructionMnemonic::CVTPI2PS, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08E */ { ZyDisInstructionMnemonic::CVTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08F */ { ZyDisInstructionMnemonic::CVTPS2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 090 */ { ZyDisInstructionMnemonic::CVTPS2PI, { OPI_P, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 091 */ { ZyDisInstructionMnemonic::CVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 092 */ { ZyDisInstructionMnemonic::CVTSD2SS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 093 */ { ZyDisInstructionMnemonic::CVTSI2SD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 094 */ { ZyDisInstructionMnemonic::CVTSI2SS, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 095 */ { ZyDisInstructionMnemonic::CVTSS2SD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 096 */ { ZyDisInstructionMnemonic::CVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 097 */ { ZyDisInstructionMnemonic::CVTTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 098 */ { ZyDisInstructionMnemonic::CVTTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 099 */ { ZyDisInstructionMnemonic::CVTTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09A */ { ZyDisInstructionMnemonic::CVTTPS2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09B */ { ZyDisInstructionMnemonic::CVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09C */ { ZyDisInstructionMnemonic::CVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09D */ { ZyDisInstructionMnemonic::CWD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 09E */ { ZyDisInstructionMnemonic::CWDE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 09F */ { ZyDisInstructionMnemonic::DAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 0A0 */ { ZyDisInstructionMnemonic::DAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 0A1 */ { ZyDisInstructionMnemonic::DEC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A2 */ { ZyDisInstructionMnemonic::DEC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A3 */ { ZyDisInstructionMnemonic::DEC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A4 */ { ZyDisInstructionMnemonic::DEC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0A5 */ { ZyDisInstructionMnemonic::DEC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0A6 */ { ZyDisInstructionMnemonic::DEC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A7 */ { ZyDisInstructionMnemonic::DEC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A8 */ { ZyDisInstructionMnemonic::DEC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A9 */ { ZyDisInstructionMnemonic::DEC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0AA */ { ZyDisInstructionMnemonic::DEC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0AB */ { ZyDisInstructionMnemonic::DIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 0AC */ { ZyDisInstructionMnemonic::DIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 0AD */ { ZyDisInstructionMnemonic::DIVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0AE */ { ZyDisInstructionMnemonic::DIVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0AF */ { ZyDisInstructionMnemonic::DIVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B0 */ { ZyDisInstructionMnemonic::DIVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B1 */ { ZyDisInstructionMnemonic::DPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B2 */ { ZyDisInstructionMnemonic::DPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B3 */ { ZyDisInstructionMnemonic::EMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0B4 */ { ZyDisInstructionMnemonic::ENTER, { OPI_Iw, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, - /* 0B5 */ { ZyDisInstructionMnemonic::EXTRACTPS, { OPI_MdRy, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 0B6 */ { ZyDisInstructionMnemonic::F2XM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0B7 */ { ZyDisInstructionMnemonic::FABS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0B8 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0B9 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BA */ { ZyDisInstructionMnemonic::FADD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0BB */ { ZyDisInstructionMnemonic::FADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0BC */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BD */ { ZyDisInstructionMnemonic::FADD, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BE */ { ZyDisInstructionMnemonic::FADD, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BF */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0C0 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0C1 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0C2 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0C3 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0C4 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0C5 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0C6 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0C7 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0C8 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0C9 */ { ZyDisInstructionMnemonic::FADD, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CA */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CB */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CC */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CD */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CE */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CF */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0D0 */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0D1 */ { ZyDisInstructionMnemonic::FADDP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0D2 */ { ZyDisInstructionMnemonic::FBLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0D3 */ { ZyDisInstructionMnemonic::FBSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0D4 */ { ZyDisInstructionMnemonic::FCHS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0D5 */ { ZyDisInstructionMnemonic::FCLEX, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0D6 */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0D7 */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0D8 */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0D9 */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0DA */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0DB */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0DC */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0DD */ { ZyDisInstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0DE */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0DF */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0E0 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0E1 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0E2 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0E3 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0E4 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0E5 */ { ZyDisInstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0E6 */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0E7 */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0E8 */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0E9 */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0EA */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0EB */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0EC */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0ED */ { ZyDisInstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0EE */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0EF */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0F0 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0F1 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0F2 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0F3 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0F4 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0F5 */ { ZyDisInstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0F6 */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0F7 */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0F8 */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0F9 */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0FA */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0FB */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0FC */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0FD */ { ZyDisInstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0FE */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0FF */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 100 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 101 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 102 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 103 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 104 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 105 */ { ZyDisInstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 106 */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 107 */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 108 */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 109 */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 10A */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 10B */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 10C */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 10D */ { ZyDisInstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 10E */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 10F */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 110 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 111 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 112 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 113 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 114 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 115 */ { ZyDisInstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 116 */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 117 */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 118 */ { ZyDisInstructionMnemonic::FCOM, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 119 */ { ZyDisInstructionMnemonic::FCOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 11A */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 11B */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 11C */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 11D */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 11E */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 11F */ { ZyDisInstructionMnemonic::FCOM, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 120 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 121 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 122 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 123 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 124 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 125 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 126 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 127 */ { ZyDisInstructionMnemonic::FCOM2, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 128 */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 129 */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 12A */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 12B */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 12C */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 12D */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 12E */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 12F */ { ZyDisInstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 130 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 131 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 132 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 133 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 134 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 135 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 136 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 137 */ { ZyDisInstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 138 */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 139 */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 13A */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 13B */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 13C */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 13D */ { ZyDisInstructionMnemonic::FCOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 13E */ { ZyDisInstructionMnemonic::FCOMP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 13F */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 140 */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 141 */ { ZyDisInstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 142 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 143 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 144 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 145 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 146 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 147 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 148 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 149 */ { ZyDisInstructionMnemonic::FCOMP3, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14A */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14B */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14C */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14D */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14E */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14F */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 150 */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 151 */ { ZyDisInstructionMnemonic::FCOMP5, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 152 */ { ZyDisInstructionMnemonic::FCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 153 */ { ZyDisInstructionMnemonic::FCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 154 */ { ZyDisInstructionMnemonic::FDECSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 155 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 156 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 157 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 158 */ { ZyDisInstructionMnemonic::FDIV, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 159 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 15A */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 15B */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15C */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15D */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15E */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15F */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 160 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 161 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 162 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 163 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 164 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 165 */ { ZyDisInstructionMnemonic::FDIV, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 166 */ { ZyDisInstructionMnemonic::FDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 167 */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 168 */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 169 */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16A */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16B */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16C */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16D */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16E */ { ZyDisInstructionMnemonic::FDIVP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16F */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 170 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 171 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 172 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 173 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 174 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 175 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 176 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 177 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 178 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 179 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17A */ { ZyDisInstructionMnemonic::FDIVR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 17B */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17C */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17D */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17E */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17F */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 180 */ { ZyDisInstructionMnemonic::FDIVR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 181 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 182 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 183 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 184 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 185 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 186 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 187 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 188 */ { ZyDisInstructionMnemonic::FDIVRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 189 */ { ZyDisInstructionMnemonic::FEMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18A */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18B */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18C */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18D */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18E */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18F */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 190 */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 191 */ { ZyDisInstructionMnemonic::FFREE, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 192 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 193 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 194 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 195 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 196 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 197 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 198 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 199 */ { ZyDisInstructionMnemonic::FFREEP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 19A */ { ZyDisInstructionMnemonic::FIADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19B */ { ZyDisInstructionMnemonic::FIADD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19C */ { ZyDisInstructionMnemonic::FICOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19D */ { ZyDisInstructionMnemonic::FICOM, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19E */ { ZyDisInstructionMnemonic::FICOMP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19F */ { ZyDisInstructionMnemonic::FICOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A0 */ { ZyDisInstructionMnemonic::FIDIV, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A1 */ { ZyDisInstructionMnemonic::FIDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A2 */ { ZyDisInstructionMnemonic::FIDIVR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A3 */ { ZyDisInstructionMnemonic::FIDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A4 */ { ZyDisInstructionMnemonic::FILD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A5 */ { ZyDisInstructionMnemonic::FILD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A6 */ { ZyDisInstructionMnemonic::FILD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A7 */ { ZyDisInstructionMnemonic::FIMUL, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A8 */ { ZyDisInstructionMnemonic::FIMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A9 */ { ZyDisInstructionMnemonic::FINCSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1AA */ { ZyDisInstructionMnemonic::FIST, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AB */ { ZyDisInstructionMnemonic::FIST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AC */ { ZyDisInstructionMnemonic::FISTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AD */ { ZyDisInstructionMnemonic::FISTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AE */ { ZyDisInstructionMnemonic::FISTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AF */ { ZyDisInstructionMnemonic::FISTTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B0 */ { ZyDisInstructionMnemonic::FISTTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B1 */ { ZyDisInstructionMnemonic::FISTTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B2 */ { ZyDisInstructionMnemonic::FISUB, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B3 */ { ZyDisInstructionMnemonic::FISUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B4 */ { ZyDisInstructionMnemonic::FISUBR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B5 */ { ZyDisInstructionMnemonic::FISUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B6 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1B7 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1B8 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1B9 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1BA */ { ZyDisInstructionMnemonic::FLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1BB */ { ZyDisInstructionMnemonic::FLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1BC */ { ZyDisInstructionMnemonic::FLD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1BD */ { ZyDisInstructionMnemonic::FLD, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1BE */ { ZyDisInstructionMnemonic::FLD, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1BF */ { ZyDisInstructionMnemonic::FLD, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C0 */ { ZyDisInstructionMnemonic::FLD, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C1 */ { ZyDisInstructionMnemonic::FLD1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C2 */ { ZyDisInstructionMnemonic::FLDCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1C3 */ { ZyDisInstructionMnemonic::FLDENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1C4 */ { ZyDisInstructionMnemonic::FLDL2E, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C5 */ { ZyDisInstructionMnemonic::FLDL2T, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C6 */ { ZyDisInstructionMnemonic::FLDLG2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C7 */ { ZyDisInstructionMnemonic::FLDLN2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C8 */ { ZyDisInstructionMnemonic::FLDPI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C9 */ { ZyDisInstructionMnemonic::FLDZ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1CA */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CB */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CC */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CD */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 1CE */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CF */ { ZyDisInstructionMnemonic::FMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1D0 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D1 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D2 */ { ZyDisInstructionMnemonic::FMUL, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1D3 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D4 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D5 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D6 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 1D7 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 1D8 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 1D9 */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 1DA */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 1DB */ { ZyDisInstructionMnemonic::FMUL, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 1DC */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1DD */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1DE */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1DF */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E0 */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E1 */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E2 */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E3 */ { ZyDisInstructionMnemonic::FMULP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E4 */ { ZyDisInstructionMnemonic::FNDISI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E5 */ { ZyDisInstructionMnemonic::FNENI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E6 */ { ZyDisInstructionMnemonic::FNINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E7 */ { ZyDisInstructionMnemonic::FNOP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E8 */ { ZyDisInstructionMnemonic::FNSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1E9 */ { ZyDisInstructionMnemonic::FNSETPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1EA */ { ZyDisInstructionMnemonic::FNSTCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1EB */ { ZyDisInstructionMnemonic::FNSTENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1EC */ { ZyDisInstructionMnemonic::FNSTSW, { OPI_AX, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1ED */ { ZyDisInstructionMnemonic::FNSTSW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1EE */ { ZyDisInstructionMnemonic::FPATAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1EF */ { ZyDisInstructionMnemonic::FPREM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F0 */ { ZyDisInstructionMnemonic::FPREM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F1 */ { ZyDisInstructionMnemonic::FPTAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F2 */ { ZyDisInstructionMnemonic::FRNDINT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F3 */ { ZyDisInstructionMnemonic::FRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1F4 */ { ZyDisInstructionMnemonic::FRSTPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F5 */ { ZyDisInstructionMnemonic::FSCALE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F6 */ { ZyDisInstructionMnemonic::FSIN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F7 */ { ZyDisInstructionMnemonic::FSINCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F8 */ { ZyDisInstructionMnemonic::FSQRT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F9 */ { ZyDisInstructionMnemonic::FST, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FA */ { ZyDisInstructionMnemonic::FST, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FB */ { ZyDisInstructionMnemonic::FST, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FC */ { ZyDisInstructionMnemonic::FST, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FD */ { ZyDisInstructionMnemonic::FST, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FE */ { ZyDisInstructionMnemonic::FST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1FF */ { ZyDisInstructionMnemonic::FST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 200 */ { ZyDisInstructionMnemonic::FST, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 201 */ { ZyDisInstructionMnemonic::FST, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 202 */ { ZyDisInstructionMnemonic::FST, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 203 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 204 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 205 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 206 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 207 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 208 */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 209 */ { ZyDisInstructionMnemonic::FSTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 20A */ { ZyDisInstructionMnemonic::FSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 20B */ { ZyDisInstructionMnemonic::FSTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 20C */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 20D */ { ZyDisInstructionMnemonic::FSTP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 20E */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 20F */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 210 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 211 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 212 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 213 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 214 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 215 */ { ZyDisInstructionMnemonic::FSTP1, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 216 */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 217 */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 218 */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 219 */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21A */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21B */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21C */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21D */ { ZyDisInstructionMnemonic::FSTP8, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21E */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21F */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 220 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 221 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 222 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 223 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 224 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 225 */ { ZyDisInstructionMnemonic::FSTP9, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 226 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 227 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 228 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 229 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 22A */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 22B */ { ZyDisInstructionMnemonic::FSUB, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 22C */ { ZyDisInstructionMnemonic::FSUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 22D */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 22E */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 22F */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 230 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 231 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 232 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 233 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 234 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 235 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 236 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 237 */ { ZyDisInstructionMnemonic::FSUB, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 238 */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 239 */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23A */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23B */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23C */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23D */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23E */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23F */ { ZyDisInstructionMnemonic::FSUBP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 240 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 241 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 242 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 243 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 244 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 245 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 246 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 247 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 248 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 249 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 24A */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 24B */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 24C */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 24D */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 24E */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 24F */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 250 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 251 */ { ZyDisInstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 252 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 253 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 254 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 255 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 256 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 257 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 258 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 259 */ { ZyDisInstructionMnemonic::FSUBRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 25A */ { ZyDisInstructionMnemonic::FTST, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25B */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25C */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25D */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25E */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25F */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 260 */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 261 */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 262 */ { ZyDisInstructionMnemonic::FUCOM, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 263 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 264 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 265 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 266 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 267 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 268 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 269 */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 26A */ { ZyDisInstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 26B */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 26C */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 26D */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 26E */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 26F */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 270 */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 271 */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 272 */ { ZyDisInstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 273 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 274 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 275 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 276 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 277 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 278 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 279 */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27A */ { ZyDisInstructionMnemonic::FUCOMP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27B */ { ZyDisInstructionMnemonic::FUCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27C */ { ZyDisInstructionMnemonic::FXAM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27D */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 27E */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 27F */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 280 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 281 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 282 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 283 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 284 */ { ZyDisInstructionMnemonic::FXCH, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 285 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 286 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 287 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 288 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 289 */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28A */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28B */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28C */ { ZyDisInstructionMnemonic::FXCH4, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28D */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28E */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28F */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 290 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 291 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 292 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 293 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 294 */ { ZyDisInstructionMnemonic::FXCH7, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 295 */ { ZyDisInstructionMnemonic::FXRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 296 */ { ZyDisInstructionMnemonic::FXSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 297 */ { ZyDisInstructionMnemonic::FXTRACT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 298 */ { ZyDisInstructionMnemonic::FYL2X, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 299 */ { ZyDisInstructionMnemonic::FYL2XP1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 29A */ { ZyDisInstructionMnemonic::GETSEC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 29B */ { ZyDisInstructionMnemonic::HADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 29C */ { ZyDisInstructionMnemonic::HADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 29D */ { ZyDisInstructionMnemonic::HLT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 29E */ { ZyDisInstructionMnemonic::HSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 29F */ { ZyDisInstructionMnemonic::HSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A0 */ { ZyDisInstructionMnemonic::IDIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2A1 */ { ZyDisInstructionMnemonic::IDIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2A2 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A3 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A4 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_Iz, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A5 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A6 */ { ZyDisInstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_sIb, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A7 */ { ZyDisInstructionMnemonic::IN, { OPI_AL, OPI_DX, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 2A8 */ { ZyDisInstructionMnemonic::IN, { OPI_eAX, OPI_DX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2A9 */ { ZyDisInstructionMnemonic::IN, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 2AA */ { ZyDisInstructionMnemonic::IN, { OPI_eAX, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2AB */ { ZyDisInstructionMnemonic::INC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AC */ { ZyDisInstructionMnemonic::INC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AD */ { ZyDisInstructionMnemonic::INC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AE */ { ZyDisInstructionMnemonic::INC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AF */ { ZyDisInstructionMnemonic::INC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2B0 */ { ZyDisInstructionMnemonic::INC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2B1 */ { ZyDisInstructionMnemonic::INC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B2 */ { ZyDisInstructionMnemonic::INC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B3 */ { ZyDisInstructionMnemonic::INC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B4 */ { ZyDisInstructionMnemonic::INC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B5 */ { ZyDisInstructionMnemonic::INSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 2B6 */ { ZyDisInstructionMnemonic::INSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 2B7 */ { ZyDisInstructionMnemonic::INSERTPS, { OPI_V, OPI_Md, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2B8 */ { ZyDisInstructionMnemonic::INSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 2B9 */ { ZyDisInstructionMnemonic::INT, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BA */ { ZyDisInstructionMnemonic::INT1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BB */ { ZyDisInstructionMnemonic::INT3, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BC */ { ZyDisInstructionMnemonic::INTO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 2BD */ { ZyDisInstructionMnemonic::INVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BE */ { ZyDisInstructionMnemonic::INVEPT, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2BF */ { ZyDisInstructionMnemonic::INVEPT, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2C0 */ { ZyDisInstructionMnemonic::INVLPG, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2C1 */ { ZyDisInstructionMnemonic::INVLPGA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2C2 */ { ZyDisInstructionMnemonic::INVVPID, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2C3 */ { ZyDisInstructionMnemonic::INVVPID, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2C4 */ { ZyDisInstructionMnemonic::IRETD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 2C5 */ { ZyDisInstructionMnemonic::IRETQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 2C6 */ { ZyDisInstructionMnemonic::IRETW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 2C7 */ { ZyDisInstructionMnemonic::JA, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2C8 */ { ZyDisInstructionMnemonic::JA, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2C9 */ { ZyDisInstructionMnemonic::JB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2CA */ { ZyDisInstructionMnemonic::JB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2CB */ { ZyDisInstructionMnemonic::JBE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2CC */ { ZyDisInstructionMnemonic::JBE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2CD */ { ZyDisInstructionMnemonic::JCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, - /* 2CE */ { ZyDisInstructionMnemonic::JE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2CF */ { ZyDisInstructionMnemonic::JE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D0 */ { ZyDisInstructionMnemonic::JECXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, - /* 2D1 */ { ZyDisInstructionMnemonic::JG, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D2 */ { ZyDisInstructionMnemonic::JG, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D3 */ { ZyDisInstructionMnemonic::JGE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D4 */ { ZyDisInstructionMnemonic::JGE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D5 */ { ZyDisInstructionMnemonic::JL, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D6 */ { ZyDisInstructionMnemonic::JL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D7 */ { ZyDisInstructionMnemonic::JLE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D8 */ { ZyDisInstructionMnemonic::JLE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D9 */ { ZyDisInstructionMnemonic::JMP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 2DA */ { ZyDisInstructionMnemonic::JMP, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2DB */ { ZyDisInstructionMnemonic::JMP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 2DC */ { ZyDisInstructionMnemonic::JMP, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 2DD */ { ZyDisInstructionMnemonic::JMP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, - /* 2DE */ { ZyDisInstructionMnemonic::JNB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2DF */ { ZyDisInstructionMnemonic::JNB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E0 */ { ZyDisInstructionMnemonic::JNE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E1 */ { ZyDisInstructionMnemonic::JNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E2 */ { ZyDisInstructionMnemonic::JNO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E3 */ { ZyDisInstructionMnemonic::JNO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E4 */ { ZyDisInstructionMnemonic::JNP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E5 */ { ZyDisInstructionMnemonic::JNP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E6 */ { ZyDisInstructionMnemonic::JNS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E7 */ { ZyDisInstructionMnemonic::JNS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E8 */ { ZyDisInstructionMnemonic::JO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E9 */ { ZyDisInstructionMnemonic::JO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2EA */ { ZyDisInstructionMnemonic::JP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2EB */ { ZyDisInstructionMnemonic::JP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2EC */ { ZyDisInstructionMnemonic::JRCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, - /* 2ED */ { ZyDisInstructionMnemonic::JS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2EE */ { ZyDisInstructionMnemonic::JS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2EF */ { ZyDisInstructionMnemonic::LAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2F0 */ { ZyDisInstructionMnemonic::LAR, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F1 */ { ZyDisInstructionMnemonic::LDDQU, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F2 */ { ZyDisInstructionMnemonic::LDMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2F3 */ { ZyDisInstructionMnemonic::LDS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2F4 */ { ZyDisInstructionMnemonic::LEA, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F5 */ { ZyDisInstructionMnemonic::LEAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2F6 */ { ZyDisInstructionMnemonic::LES, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2F7 */ { ZyDisInstructionMnemonic::LFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2F8 */ { ZyDisInstructionMnemonic::LFS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F9 */ { ZyDisInstructionMnemonic::LGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FA */ { ZyDisInstructionMnemonic::LGS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2FB */ { ZyDisInstructionMnemonic::LIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FC */ { ZyDisInstructionMnemonic::LLDT, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FD */ { ZyDisInstructionMnemonic::LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FE */ { ZyDisInstructionMnemonic::LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FF */ { ZyDisInstructionMnemonic::LOCK, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 300 */ { ZyDisInstructionMnemonic::LODSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 301 */ { ZyDisInstructionMnemonic::LODSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 302 */ { ZyDisInstructionMnemonic::LODSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 303 */ { ZyDisInstructionMnemonic::LODSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 304 */ { ZyDisInstructionMnemonic::LOOP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 305 */ { ZyDisInstructionMnemonic::LOOPE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 306 */ { ZyDisInstructionMnemonic::LOOPNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 307 */ { ZyDisInstructionMnemonic::LSL, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 308 */ { ZyDisInstructionMnemonic::LSS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 309 */ { ZyDisInstructionMnemonic::LTR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 30A */ { ZyDisInstructionMnemonic::MASKMOVDQU, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 30B */ { ZyDisInstructionMnemonic::MASKMOVQ, { OPI_P, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 30C */ { ZyDisInstructionMnemonic::MAXPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 30D */ { ZyDisInstructionMnemonic::MAXPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 30E */ { ZyDisInstructionMnemonic::MAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 30F */ { ZyDisInstructionMnemonic::MAXSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 310 */ { ZyDisInstructionMnemonic::MFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 311 */ { ZyDisInstructionMnemonic::MINPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 312 */ { ZyDisInstructionMnemonic::MINPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 313 */ { ZyDisInstructionMnemonic::MINSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 314 */ { ZyDisInstructionMnemonic::MINSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 315 */ { ZyDisInstructionMnemonic::MONITOR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 316 */ { ZyDisInstructionMnemonic::MONTMUL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 317 */ { ZyDisInstructionMnemonic::MOV, { OPI_R0b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 318 */ { ZyDisInstructionMnemonic::MOV, { OPI_R2b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 319 */ { ZyDisInstructionMnemonic::MOV, { OPI_R3b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31A */ { ZyDisInstructionMnemonic::MOV, { OPI_R1b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31B */ { ZyDisInstructionMnemonic::MOV, { OPI_AL, OPI_Ob, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 31C */ { ZyDisInstructionMnemonic::MOV, { OPI_S, OPI_MwRv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31D */ { ZyDisInstructionMnemonic::MOV, { OPI_MwRv, OPI_S, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31E */ { ZyDisInstructionMnemonic::MOV, { OPI_Ov, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 31F */ { ZyDisInstructionMnemonic::MOV, { OPI_Ob, OPI_AL, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 320 */ { ZyDisInstructionMnemonic::MOV, { OPI_rAX, OPI_Ov, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 321 */ { ZyDisInstructionMnemonic::MOV, { OPI_R4b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 322 */ { ZyDisInstructionMnemonic::MOV, { OPI_R7v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 323 */ { ZyDisInstructionMnemonic::MOV, { OPI_R6v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 324 */ { ZyDisInstructionMnemonic::MOV, { OPI_R5v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 325 */ { ZyDisInstructionMnemonic::MOV, { OPI_R, OPI_C, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 326 */ { ZyDisInstructionMnemonic::MOV, { OPI_D, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 327 */ { ZyDisInstructionMnemonic::MOV, { OPI_C, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 328 */ { ZyDisInstructionMnemonic::MOV, { OPI_R, OPI_D, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 329 */ { ZyDisInstructionMnemonic::MOV, { OPI_R4v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32A */ { ZyDisInstructionMnemonic::MOV, { OPI_R7b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32B */ { ZyDisInstructionMnemonic::MOV, { OPI_R6b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32C */ { ZyDisInstructionMnemonic::MOV, { OPI_R5b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32D */ { ZyDisInstructionMnemonic::MOV, { OPI_R0v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32E */ { ZyDisInstructionMnemonic::MOV, { OPI_R3v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32F */ { ZyDisInstructionMnemonic::MOV, { OPI_R2v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 330 */ { ZyDisInstructionMnemonic::MOV, { OPI_R1v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 331 */ { ZyDisInstructionMnemonic::MOV, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 332 */ { ZyDisInstructionMnemonic::MOV, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 333 */ { ZyDisInstructionMnemonic::MOV, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 334 */ { ZyDisInstructionMnemonic::MOV, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 335 */ { ZyDisInstructionMnemonic::MOV, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 336 */ { ZyDisInstructionMnemonic::MOV, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 337 */ { ZyDisInstructionMnemonic::MOVAPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 338 */ { ZyDisInstructionMnemonic::MOVAPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 339 */ { ZyDisInstructionMnemonic::MOVAPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33A */ { ZyDisInstructionMnemonic::MOVAPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33B */ { ZyDisInstructionMnemonic::MOVBE, { OPI_Gv, OPI_Mv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33C */ { ZyDisInstructionMnemonic::MOVBE, { OPI_Mv, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33D */ { ZyDisInstructionMnemonic::MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33E */ { ZyDisInstructionMnemonic::MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33F */ { ZyDisInstructionMnemonic::MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 340 */ { ZyDisInstructionMnemonic::MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 341 */ { ZyDisInstructionMnemonic::MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 342 */ { ZyDisInstructionMnemonic::MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 343 */ { ZyDisInstructionMnemonic::MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 344 */ { ZyDisInstructionMnemonic::MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 345 */ { ZyDisInstructionMnemonic::MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 346 */ { ZyDisInstructionMnemonic::MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 347 */ { ZyDisInstructionMnemonic::MOVDQ2Q, { OPI_P, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 348 */ { ZyDisInstructionMnemonic::MOVDQA, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 349 */ { ZyDisInstructionMnemonic::MOVDQA, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34A */ { ZyDisInstructionMnemonic::MOVDQU, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34B */ { ZyDisInstructionMnemonic::MOVDQU, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34C */ { ZyDisInstructionMnemonic::MOVHLPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34D */ { ZyDisInstructionMnemonic::MOVHPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34E */ { ZyDisInstructionMnemonic::MOVHPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34F */ { ZyDisInstructionMnemonic::MOVHPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 350 */ { ZyDisInstructionMnemonic::MOVHPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 351 */ { ZyDisInstructionMnemonic::MOVLHPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 352 */ { ZyDisInstructionMnemonic::MOVLPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 353 */ { ZyDisInstructionMnemonic::MOVLPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 354 */ { ZyDisInstructionMnemonic::MOVLPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 355 */ { ZyDisInstructionMnemonic::MOVLPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 356 */ { ZyDisInstructionMnemonic::MOVMSKPD, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 357 */ { ZyDisInstructionMnemonic::MOVMSKPS, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 358 */ { ZyDisInstructionMnemonic::MOVNTDQ, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 359 */ { ZyDisInstructionMnemonic::MOVNTDQA, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35A */ { ZyDisInstructionMnemonic::MOVNTI, { OPI_M, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35B */ { ZyDisInstructionMnemonic::MOVNTPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35C */ { ZyDisInstructionMnemonic::MOVNTPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35D */ { ZyDisInstructionMnemonic::MOVNTQ, { OPI_M, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35E */ { ZyDisInstructionMnemonic::MOVQ, { OPI_P, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35F */ { ZyDisInstructionMnemonic::MOVQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 360 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_Eq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 361 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 362 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_Q, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 363 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 364 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_V, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 365 */ { ZyDisInstructionMnemonic::MOVQ, { OPI_Eq, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 366 */ { ZyDisInstructionMnemonic::MOVQ2DQ, { OPI_V, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_OPERAND1_WRITE }, - /* 367 */ { ZyDisInstructionMnemonic::MOVSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_OPERAND1_WRITE }, - /* 368 */ { ZyDisInstructionMnemonic::MOVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 369 */ { ZyDisInstructionMnemonic::MOVSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 36A */ { ZyDisInstructionMnemonic::MOVSD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36B */ { ZyDisInstructionMnemonic::MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36C */ { ZyDisInstructionMnemonic::MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36D */ { ZyDisInstructionMnemonic::MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36E */ { ZyDisInstructionMnemonic::MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36F */ { ZyDisInstructionMnemonic::MOVSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 370 */ { ZyDisInstructionMnemonic::MOVSS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 371 */ { ZyDisInstructionMnemonic::MOVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 372 */ { ZyDisInstructionMnemonic::MOVSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 373 */ { ZyDisInstructionMnemonic::MOVSX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 374 */ { ZyDisInstructionMnemonic::MOVSX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 375 */ { ZyDisInstructionMnemonic::MOVSXD, { OPI_Gq, OPI_Ed, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 376 */ { ZyDisInstructionMnemonic::MOVUPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 377 */ { ZyDisInstructionMnemonic::MOVUPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 378 */ { ZyDisInstructionMnemonic::MOVUPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 379 */ { ZyDisInstructionMnemonic::MOVUPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 37A */ { ZyDisInstructionMnemonic::MOVZX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 37B */ { ZyDisInstructionMnemonic::MOVZX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 37C */ { ZyDisInstructionMnemonic::MPSADBW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 37D */ { ZyDisInstructionMnemonic::MUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 37E */ { ZyDisInstructionMnemonic::MUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 37F */ { ZyDisInstructionMnemonic::MULPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 380 */ { ZyDisInstructionMnemonic::MULPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 381 */ { ZyDisInstructionMnemonic::MULSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 382 */ { ZyDisInstructionMnemonic::MULSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 383 */ { ZyDisInstructionMnemonic::MWAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 384 */ { ZyDisInstructionMnemonic::NEG, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 385 */ { ZyDisInstructionMnemonic::NEG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 386 */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 387 */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 388 */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 389 */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38A */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38B */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38C */ { ZyDisInstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38D */ { ZyDisInstructionMnemonic::NOT, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 38E */ { ZyDisInstructionMnemonic::NOT, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 38F */ { ZyDisInstructionMnemonic::OR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 390 */ { ZyDisInstructionMnemonic::OR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 391 */ { ZyDisInstructionMnemonic::OR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 392 */ { ZyDisInstructionMnemonic::OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 393 */ { ZyDisInstructionMnemonic::OR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 394 */ { ZyDisInstructionMnemonic::OR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 395 */ { ZyDisInstructionMnemonic::OR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 396 */ { ZyDisInstructionMnemonic::OR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 397 */ { ZyDisInstructionMnemonic::OR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 398 */ { ZyDisInstructionMnemonic::OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 399 */ { ZyDisInstructionMnemonic::ORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 39A */ { ZyDisInstructionMnemonic::ORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 39B */ { ZyDisInstructionMnemonic::OUT, { OPI_DX, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, - /* 39C */ { ZyDisInstructionMnemonic::OUT, { OPI_DX, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 39D */ { ZyDisInstructionMnemonic::OUT, { OPI_Ib, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, - /* 39E */ { ZyDisInstructionMnemonic::OUT, { OPI_Ib, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 39F */ { ZyDisInstructionMnemonic::OUTSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 3A0 */ { ZyDisInstructionMnemonic::OUTSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 3A1 */ { ZyDisInstructionMnemonic::OUTSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 3A2 */ { ZyDisInstructionMnemonic::PABSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A3 */ { ZyDisInstructionMnemonic::PABSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A4 */ { ZyDisInstructionMnemonic::PABSD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A5 */ { ZyDisInstructionMnemonic::PABSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A6 */ { ZyDisInstructionMnemonic::PABSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A7 */ { ZyDisInstructionMnemonic::PABSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A8 */ { ZyDisInstructionMnemonic::PACKSSDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3A9 */ { ZyDisInstructionMnemonic::PACKSSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AA */ { ZyDisInstructionMnemonic::PACKSSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AB */ { ZyDisInstructionMnemonic::PACKSSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AC */ { ZyDisInstructionMnemonic::PACKUSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AD */ { ZyDisInstructionMnemonic::PACKUSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AE */ { ZyDisInstructionMnemonic::PACKUSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AF */ { ZyDisInstructionMnemonic::PADDB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B0 */ { ZyDisInstructionMnemonic::PADDB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B1 */ { ZyDisInstructionMnemonic::PADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B2 */ { ZyDisInstructionMnemonic::PADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B3 */ { ZyDisInstructionMnemonic::PADDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B4 */ { ZyDisInstructionMnemonic::PADDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B5 */ { ZyDisInstructionMnemonic::PADDSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B6 */ { ZyDisInstructionMnemonic::PADDSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B7 */ { ZyDisInstructionMnemonic::PADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B8 */ { ZyDisInstructionMnemonic::PADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B9 */ { ZyDisInstructionMnemonic::PADDUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BA */ { ZyDisInstructionMnemonic::PADDUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BB */ { ZyDisInstructionMnemonic::PADDUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BC */ { ZyDisInstructionMnemonic::PADDUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BD */ { ZyDisInstructionMnemonic::PADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BE */ { ZyDisInstructionMnemonic::PADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BF */ { ZyDisInstructionMnemonic::PALIGNR, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C0 */ { ZyDisInstructionMnemonic::PALIGNR, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C1 */ { ZyDisInstructionMnemonic::PAND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C2 */ { ZyDisInstructionMnemonic::PAND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C3 */ { ZyDisInstructionMnemonic::PANDN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C4 */ { ZyDisInstructionMnemonic::PANDN, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C5 */ { ZyDisInstructionMnemonic::PAVGB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C6 */ { ZyDisInstructionMnemonic::PAVGB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C7 */ { ZyDisInstructionMnemonic::PAVGUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C8 */ { ZyDisInstructionMnemonic::PAVGW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C9 */ { ZyDisInstructionMnemonic::PAVGW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CA */ { ZyDisInstructionMnemonic::PBLENDVB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CB */ { ZyDisInstructionMnemonic::PBLENDW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CC */ { ZyDisInstructionMnemonic::PCLMULQDQ, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CD */ { ZyDisInstructionMnemonic::PCMPEQB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CE */ { ZyDisInstructionMnemonic::PCMPEQB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CF */ { ZyDisInstructionMnemonic::PCMPEQD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D0 */ { ZyDisInstructionMnemonic::PCMPEQD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D1 */ { ZyDisInstructionMnemonic::PCMPEQQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3D2 */ { ZyDisInstructionMnemonic::PCMPEQW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D3 */ { ZyDisInstructionMnemonic::PCMPEQW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D4 */ { ZyDisInstructionMnemonic::PCMPESTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3D5 */ { ZyDisInstructionMnemonic::PCMPESTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3D6 */ { ZyDisInstructionMnemonic::PCMPGTB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D7 */ { ZyDisInstructionMnemonic::PCMPGTB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D8 */ { ZyDisInstructionMnemonic::PCMPGTD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D9 */ { ZyDisInstructionMnemonic::PCMPGTD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3DA */ { ZyDisInstructionMnemonic::PCMPGTQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3DB */ { ZyDisInstructionMnemonic::PCMPGTW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3DC */ { ZyDisInstructionMnemonic::PCMPGTW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3DD */ { ZyDisInstructionMnemonic::PCMPISTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3DE */ { ZyDisInstructionMnemonic::PCMPISTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3DF */ { ZyDisInstructionMnemonic::PEXTRB, { OPI_MbRv, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 3E0 */ { ZyDisInstructionMnemonic::PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E1 */ { ZyDisInstructionMnemonic::PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E2 */ { ZyDisInstructionMnemonic::PEXTRQ, { OPI_Eq, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 3E3 */ { ZyDisInstructionMnemonic::PEXTRW, { OPI_MwRd, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E4 */ { ZyDisInstructionMnemonic::PEXTRW, { OPI_Gd, OPI_N, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E5 */ { ZyDisInstructionMnemonic::PEXTRW, { OPI_Gd, OPI_U, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E6 */ { ZyDisInstructionMnemonic::PF2ID, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E7 */ { ZyDisInstructionMnemonic::PF2IW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E8 */ { ZyDisInstructionMnemonic::PFACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3E9 */ { ZyDisInstructionMnemonic::PFADD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EA */ { ZyDisInstructionMnemonic::PFCMPEQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EB */ { ZyDisInstructionMnemonic::PFCMPGE, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EC */ { ZyDisInstructionMnemonic::PFCMPGT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3ED */ { ZyDisInstructionMnemonic::PFMAX, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EE */ { ZyDisInstructionMnemonic::PFMIN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EF */ { ZyDisInstructionMnemonic::PFMUL, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F0 */ { ZyDisInstructionMnemonic::PFNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F1 */ { ZyDisInstructionMnemonic::PFPNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F2 */ { ZyDisInstructionMnemonic::PFRCP, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F3 */ { ZyDisInstructionMnemonic::PFRCPIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F4 */ { ZyDisInstructionMnemonic::PFRCPIT2, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F5 */ { ZyDisInstructionMnemonic::PFRSQIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F6 */ { ZyDisInstructionMnemonic::PFRSQRT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F7 */ { ZyDisInstructionMnemonic::PFSUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F8 */ { ZyDisInstructionMnemonic::PFSUBR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F9 */ { ZyDisInstructionMnemonic::PHADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FA */ { ZyDisInstructionMnemonic::PHADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FB */ { ZyDisInstructionMnemonic::PHADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FC */ { ZyDisInstructionMnemonic::PHADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FD */ { ZyDisInstructionMnemonic::PHADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FE */ { ZyDisInstructionMnemonic::PHADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FF */ { ZyDisInstructionMnemonic::PHMINPOSUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 400 */ { ZyDisInstructionMnemonic::PHSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 401 */ { ZyDisInstructionMnemonic::PHSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 402 */ { ZyDisInstructionMnemonic::PHSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 403 */ { ZyDisInstructionMnemonic::PHSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 404 */ { ZyDisInstructionMnemonic::PHSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 405 */ { ZyDisInstructionMnemonic::PHSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 406 */ { ZyDisInstructionMnemonic::PI2FD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 407 */ { ZyDisInstructionMnemonic::PI2FW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 408 */ { ZyDisInstructionMnemonic::PINSRB, { OPI_V, OPI_MbRd, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 409 */ { ZyDisInstructionMnemonic::PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 40A */ { ZyDisInstructionMnemonic::PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 40B */ { ZyDisInstructionMnemonic::PINSRQ, { OPI_V, OPI_Eq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 40C */ { ZyDisInstructionMnemonic::PINSRW, { OPI_V, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 40D */ { ZyDisInstructionMnemonic::PINSRW, { OPI_P, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 40E */ { ZyDisInstructionMnemonic::PMADDUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 40F */ { ZyDisInstructionMnemonic::PMADDUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 410 */ { ZyDisInstructionMnemonic::PMADDWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 411 */ { ZyDisInstructionMnemonic::PMADDWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 412 */ { ZyDisInstructionMnemonic::PMAXSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 413 */ { ZyDisInstructionMnemonic::PMAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 414 */ { ZyDisInstructionMnemonic::PMAXSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 415 */ { ZyDisInstructionMnemonic::PMAXSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 416 */ { ZyDisInstructionMnemonic::PMAXUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 417 */ { ZyDisInstructionMnemonic::PMAXUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 418 */ { ZyDisInstructionMnemonic::PMAXUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 419 */ { ZyDisInstructionMnemonic::PMAXUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41A */ { ZyDisInstructionMnemonic::PMINSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41B */ { ZyDisInstructionMnemonic::PMINSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41C */ { ZyDisInstructionMnemonic::PMINSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41D */ { ZyDisInstructionMnemonic::PMINSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41E */ { ZyDisInstructionMnemonic::PMINUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41F */ { ZyDisInstructionMnemonic::PMINUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 420 */ { ZyDisInstructionMnemonic::PMINUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 421 */ { ZyDisInstructionMnemonic::PMINUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 422 */ { ZyDisInstructionMnemonic::PMOVMSKB, { OPI_Gd, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 423 */ { ZyDisInstructionMnemonic::PMOVMSKB, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 424 */ { ZyDisInstructionMnemonic::PMOVSXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 425 */ { ZyDisInstructionMnemonic::PMOVSXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 426 */ { ZyDisInstructionMnemonic::PMOVSXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 427 */ { ZyDisInstructionMnemonic::PMOVSXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 428 */ { ZyDisInstructionMnemonic::PMOVSXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 429 */ { ZyDisInstructionMnemonic::PMOVSXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42A */ { ZyDisInstructionMnemonic::PMOVZXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42B */ { ZyDisInstructionMnemonic::PMOVZXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42C */ { ZyDisInstructionMnemonic::PMOVZXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42D */ { ZyDisInstructionMnemonic::PMOVZXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42E */ { ZyDisInstructionMnemonic::PMOVZXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42F */ { ZyDisInstructionMnemonic::PMOVZXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 430 */ { ZyDisInstructionMnemonic::PMULDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 431 */ { ZyDisInstructionMnemonic::PMULHRSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 432 */ { ZyDisInstructionMnemonic::PMULHRSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 433 */ { ZyDisInstructionMnemonic::PMULHRW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 434 */ { ZyDisInstructionMnemonic::PMULHUW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 435 */ { ZyDisInstructionMnemonic::PMULHUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 436 */ { ZyDisInstructionMnemonic::PMULHW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 437 */ { ZyDisInstructionMnemonic::PMULHW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 438 */ { ZyDisInstructionMnemonic::PMULLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 439 */ { ZyDisInstructionMnemonic::PMULLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43A */ { ZyDisInstructionMnemonic::PMULLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43B */ { ZyDisInstructionMnemonic::PMULUDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43C */ { ZyDisInstructionMnemonic::PMULUDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43D */ { ZyDisInstructionMnemonic::POP, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 43E */ { ZyDisInstructionMnemonic::POP, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 43F */ { ZyDisInstructionMnemonic::POP, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 440 */ { ZyDisInstructionMnemonic::POP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 441 */ { ZyDisInstructionMnemonic::POP, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 442 */ { ZyDisInstructionMnemonic::POP, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 443 */ { ZyDisInstructionMnemonic::POP, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 444 */ { ZyDisInstructionMnemonic::POP, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 445 */ { ZyDisInstructionMnemonic::POP, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 446 */ { ZyDisInstructionMnemonic::POP, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 447 */ { ZyDisInstructionMnemonic::POP, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 448 */ { ZyDisInstructionMnemonic::POP, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 449 */ { ZyDisInstructionMnemonic::POP, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 44A */ { ZyDisInstructionMnemonic::POP, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 44B */ { ZyDisInstructionMnemonic::POPA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 44C */ { ZyDisInstructionMnemonic::POPAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 44D */ { ZyDisInstructionMnemonic::POPCNT, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 44E */ { ZyDisInstructionMnemonic::POPFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 44F */ { ZyDisInstructionMnemonic::POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 450 */ { ZyDisInstructionMnemonic::POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 451 */ { ZyDisInstructionMnemonic::POPFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 452 */ { ZyDisInstructionMnemonic::POR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 453 */ { ZyDisInstructionMnemonic::POR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 454 */ { ZyDisInstructionMnemonic::PREFETCH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 455 */ { ZyDisInstructionMnemonic::PREFETCHNTA, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 456 */ { ZyDisInstructionMnemonic::PREFETCHT0, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 457 */ { ZyDisInstructionMnemonic::PREFETCHT1, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 458 */ { ZyDisInstructionMnemonic::PREFETCHT2, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 459 */ { ZyDisInstructionMnemonic::PSADBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45A */ { ZyDisInstructionMnemonic::PSADBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45B */ { ZyDisInstructionMnemonic::PSHUFB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45C */ { ZyDisInstructionMnemonic::PSHUFB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45D */ { ZyDisInstructionMnemonic::PSHUFD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 45E */ { ZyDisInstructionMnemonic::PSHUFHW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 45F */ { ZyDisInstructionMnemonic::PSHUFLW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 460 */ { ZyDisInstructionMnemonic::PSHUFW, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 461 */ { ZyDisInstructionMnemonic::PSIGNB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 462 */ { ZyDisInstructionMnemonic::PSIGNB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 463 */ { ZyDisInstructionMnemonic::PSIGND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 464 */ { ZyDisInstructionMnemonic::PSIGND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 465 */ { ZyDisInstructionMnemonic::PSIGNW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 466 */ { ZyDisInstructionMnemonic::PSIGNW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 467 */ { ZyDisInstructionMnemonic::PSLLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 468 */ { ZyDisInstructionMnemonic::PSLLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 469 */ { ZyDisInstructionMnemonic::PSLLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46A */ { ZyDisInstructionMnemonic::PSLLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46B */ { ZyDisInstructionMnemonic::PSLLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46C */ { ZyDisInstructionMnemonic::PSLLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46D */ { ZyDisInstructionMnemonic::PSLLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 46E */ { ZyDisInstructionMnemonic::PSLLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46F */ { ZyDisInstructionMnemonic::PSLLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 470 */ { ZyDisInstructionMnemonic::PSLLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 471 */ { ZyDisInstructionMnemonic::PSLLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 472 */ { ZyDisInstructionMnemonic::PSLLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 473 */ { ZyDisInstructionMnemonic::PSLLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 474 */ { ZyDisInstructionMnemonic::PSRAD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 475 */ { ZyDisInstructionMnemonic::PSRAD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 476 */ { ZyDisInstructionMnemonic::PSRAD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 477 */ { ZyDisInstructionMnemonic::PSRAD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 478 */ { ZyDisInstructionMnemonic::PSRAW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 479 */ { ZyDisInstructionMnemonic::PSRAW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 47A */ { ZyDisInstructionMnemonic::PSRAW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47B */ { ZyDisInstructionMnemonic::PSRAW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47C */ { ZyDisInstructionMnemonic::PSRLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47D */ { ZyDisInstructionMnemonic::PSRLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47E */ { ZyDisInstructionMnemonic::PSRLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 47F */ { ZyDisInstructionMnemonic::PSRLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 480 */ { ZyDisInstructionMnemonic::PSRLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 481 */ { ZyDisInstructionMnemonic::PSRLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 482 */ { ZyDisInstructionMnemonic::PSRLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 483 */ { ZyDisInstructionMnemonic::PSRLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 484 */ { ZyDisInstructionMnemonic::PSRLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 485 */ { ZyDisInstructionMnemonic::PSRLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 486 */ { ZyDisInstructionMnemonic::PSRLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 487 */ { ZyDisInstructionMnemonic::PSRLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 488 */ { ZyDisInstructionMnemonic::PSRLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 489 */ { ZyDisInstructionMnemonic::PSUBB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48A */ { ZyDisInstructionMnemonic::PSUBB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48B */ { ZyDisInstructionMnemonic::PSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48C */ { ZyDisInstructionMnemonic::PSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48D */ { ZyDisInstructionMnemonic::PSUBQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48E */ { ZyDisInstructionMnemonic::PSUBQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48F */ { ZyDisInstructionMnemonic::PSUBSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 490 */ { ZyDisInstructionMnemonic::PSUBSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 491 */ { ZyDisInstructionMnemonic::PSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 492 */ { ZyDisInstructionMnemonic::PSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 493 */ { ZyDisInstructionMnemonic::PSUBUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 494 */ { ZyDisInstructionMnemonic::PSUBUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 495 */ { ZyDisInstructionMnemonic::PSUBUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 496 */ { ZyDisInstructionMnemonic::PSUBUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 497 */ { ZyDisInstructionMnemonic::PSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 498 */ { ZyDisInstructionMnemonic::PSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 499 */ { ZyDisInstructionMnemonic::PSWAPD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 49A */ { ZyDisInstructionMnemonic::PTEST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 49B */ { ZyDisInstructionMnemonic::PUNPCKHBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49C */ { ZyDisInstructionMnemonic::PUNPCKHBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49D */ { ZyDisInstructionMnemonic::PUNPCKHDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49E */ { ZyDisInstructionMnemonic::PUNPCKHDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49F */ { ZyDisInstructionMnemonic::PUNPCKHQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A0 */ { ZyDisInstructionMnemonic::PUNPCKHWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A1 */ { ZyDisInstructionMnemonic::PUNPCKHWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A2 */ { ZyDisInstructionMnemonic::PUNPCKLBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A3 */ { ZyDisInstructionMnemonic::PUNPCKLBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A4 */ { ZyDisInstructionMnemonic::PUNPCKLDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A5 */ { ZyDisInstructionMnemonic::PUNPCKLDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A6 */ { ZyDisInstructionMnemonic::PUNPCKLQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A7 */ { ZyDisInstructionMnemonic::PUNPCKLWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A8 */ { ZyDisInstructionMnemonic::PUNPCKLWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A9 */ { ZyDisInstructionMnemonic::PUSH, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AA */ { ZyDisInstructionMnemonic::PUSH, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AB */ { ZyDisInstructionMnemonic::PUSH, { OPI_sIb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 4AC */ { ZyDisInstructionMnemonic::PUSH, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AD */ { ZyDisInstructionMnemonic::PUSH, { OPI_CS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AE */ { ZyDisInstructionMnemonic::PUSH, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4AF */ { ZyDisInstructionMnemonic::PUSH, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B0 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B1 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B2 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B3 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B4 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B5 */ { ZyDisInstructionMnemonic::PUSH, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4B6 */ { ZyDisInstructionMnemonic::PUSH, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4B7 */ { ZyDisInstructionMnemonic::PUSH, { OPI_sIz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4B8 */ { ZyDisInstructionMnemonic::PUSH, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B9 */ { ZyDisInstructionMnemonic::PUSH, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4BA */ { ZyDisInstructionMnemonic::PUSHA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 4BB */ { ZyDisInstructionMnemonic::PUSHAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 4BC */ { ZyDisInstructionMnemonic::PUSHFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 4BD */ { ZyDisInstructionMnemonic::PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4BE */ { ZyDisInstructionMnemonic::PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4BF */ { ZyDisInstructionMnemonic::PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4C0 */ { ZyDisInstructionMnemonic::PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 4C1 */ { ZyDisInstructionMnemonic::PXOR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C2 */ { ZyDisInstructionMnemonic::PXOR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C3 */ { ZyDisInstructionMnemonic::RCL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C4 */ { ZyDisInstructionMnemonic::RCL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C5 */ { ZyDisInstructionMnemonic::RCL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C6 */ { ZyDisInstructionMnemonic::RCL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C7 */ { ZyDisInstructionMnemonic::RCL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C8 */ { ZyDisInstructionMnemonic::RCL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C9 */ { ZyDisInstructionMnemonic::RCPPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4CA */ { ZyDisInstructionMnemonic::RCPSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4CB */ { ZyDisInstructionMnemonic::RCR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CC */ { ZyDisInstructionMnemonic::RCR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CD */ { ZyDisInstructionMnemonic::RCR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CE */ { ZyDisInstructionMnemonic::RCR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CF */ { ZyDisInstructionMnemonic::RCR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4D0 */ { ZyDisInstructionMnemonic::RCR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4D1 */ { ZyDisInstructionMnemonic::RDMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D2 */ { ZyDisInstructionMnemonic::RDPMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D3 */ { ZyDisInstructionMnemonic::RDRAND, { OPI_R, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4D4 */ { ZyDisInstructionMnemonic::RDTSC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D5 */ { ZyDisInstructionMnemonic::RDTSCP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D6 */ { ZyDisInstructionMnemonic::REP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D7 */ { ZyDisInstructionMnemonic::REPNE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D8 */ { ZyDisInstructionMnemonic::RET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D9 */ { ZyDisInstructionMnemonic::RET, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4DA */ { ZyDisInstructionMnemonic::RETF, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4DB */ { ZyDisInstructionMnemonic::RETF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4DC */ { ZyDisInstructionMnemonic::ROL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4DD */ { ZyDisInstructionMnemonic::ROL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4DE */ { ZyDisInstructionMnemonic::ROL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4DF */ { ZyDisInstructionMnemonic::ROL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E0 */ { ZyDisInstructionMnemonic::ROL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E1 */ { ZyDisInstructionMnemonic::ROL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E2 */ { ZyDisInstructionMnemonic::ROR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E3 */ { ZyDisInstructionMnemonic::ROR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E4 */ { ZyDisInstructionMnemonic::ROR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E5 */ { ZyDisInstructionMnemonic::ROR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E6 */ { ZyDisInstructionMnemonic::ROR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E7 */ { ZyDisInstructionMnemonic::ROR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E8 */ { ZyDisInstructionMnemonic::ROUNDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4E9 */ { ZyDisInstructionMnemonic::ROUNDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EA */ { ZyDisInstructionMnemonic::ROUNDSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EB */ { ZyDisInstructionMnemonic::ROUNDSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EC */ { ZyDisInstructionMnemonic::RSM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4ED */ { ZyDisInstructionMnemonic::RSQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EE */ { ZyDisInstructionMnemonic::RSQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EF */ { ZyDisInstructionMnemonic::SAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4F0 */ { ZyDisInstructionMnemonic::SALC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 4F1 */ { ZyDisInstructionMnemonic::SAR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F2 */ { ZyDisInstructionMnemonic::SAR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F3 */ { ZyDisInstructionMnemonic::SAR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F4 */ { ZyDisInstructionMnemonic::SAR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F5 */ { ZyDisInstructionMnemonic::SAR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F6 */ { ZyDisInstructionMnemonic::SAR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F7 */ { ZyDisInstructionMnemonic::SBB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4F8 */ { ZyDisInstructionMnemonic::SBB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4F9 */ { ZyDisInstructionMnemonic::SBB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 4FA */ { ZyDisInstructionMnemonic::SBB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 4FB */ { ZyDisInstructionMnemonic::SBB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4FC */ { ZyDisInstructionMnemonic::SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 4FD */ { ZyDisInstructionMnemonic::SBB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4FE */ { ZyDisInstructionMnemonic::SBB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4FF */ { ZyDisInstructionMnemonic::SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 500 */ { ZyDisInstructionMnemonic::SBB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 501 */ { ZyDisInstructionMnemonic::SCASB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 502 */ { ZyDisInstructionMnemonic::SCASD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 503 */ { ZyDisInstructionMnemonic::SCASQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 504 */ { ZyDisInstructionMnemonic::SCASW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 505 */ { ZyDisInstructionMnemonic::SETA, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 506 */ { ZyDisInstructionMnemonic::SETAE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 507 */ { ZyDisInstructionMnemonic::SETB, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 508 */ { ZyDisInstructionMnemonic::SETBE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 509 */ { ZyDisInstructionMnemonic::SETE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50A */ { ZyDisInstructionMnemonic::SETG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50B */ { ZyDisInstructionMnemonic::SETGE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50C */ { ZyDisInstructionMnemonic::SETL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50D */ { ZyDisInstructionMnemonic::SETLE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50E */ { ZyDisInstructionMnemonic::SETNE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50F */ { ZyDisInstructionMnemonic::SETNO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 510 */ { ZyDisInstructionMnemonic::SETNP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 511 */ { ZyDisInstructionMnemonic::SETNS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 512 */ { ZyDisInstructionMnemonic::SETO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 513 */ { ZyDisInstructionMnemonic::SETP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 514 */ { ZyDisInstructionMnemonic::SETS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 515 */ { ZyDisInstructionMnemonic::SFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 516 */ { ZyDisInstructionMnemonic::SGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 517 */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 518 */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 519 */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51A */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51B */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51C */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51D */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51E */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51F */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 520 */ { ZyDisInstructionMnemonic::SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 521 */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 522 */ { ZyDisInstructionMnemonic::SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 523 */ { ZyDisInstructionMnemonic::SHLD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 524 */ { ZyDisInstructionMnemonic::SHLD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 525 */ { ZyDisInstructionMnemonic::SHR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 526 */ { ZyDisInstructionMnemonic::SHR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 527 */ { ZyDisInstructionMnemonic::SHR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 528 */ { ZyDisInstructionMnemonic::SHR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 529 */ { ZyDisInstructionMnemonic::SHR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52A */ { ZyDisInstructionMnemonic::SHR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52B */ { ZyDisInstructionMnemonic::SHRD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52C */ { ZyDisInstructionMnemonic::SHRD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52D */ { ZyDisInstructionMnemonic::SHUFPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52E */ { ZyDisInstructionMnemonic::SHUFPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52F */ { ZyDisInstructionMnemonic::SIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 530 */ { ZyDisInstructionMnemonic::SKINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 531 */ { ZyDisInstructionMnemonic::SLDT, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 532 */ { ZyDisInstructionMnemonic::SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 533 */ { ZyDisInstructionMnemonic::SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 534 */ { ZyDisInstructionMnemonic::SQRTPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 535 */ { ZyDisInstructionMnemonic::SQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 536 */ { ZyDisInstructionMnemonic::SQRTSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 537 */ { ZyDisInstructionMnemonic::SQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 538 */ { ZyDisInstructionMnemonic::STC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 539 */ { ZyDisInstructionMnemonic::STD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 53A */ { ZyDisInstructionMnemonic::STGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 53B */ { ZyDisInstructionMnemonic::STI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 53C */ { ZyDisInstructionMnemonic::STMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 53D */ { ZyDisInstructionMnemonic::STOSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 53E */ { ZyDisInstructionMnemonic::STOSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 53F */ { ZyDisInstructionMnemonic::STOSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 540 */ { ZyDisInstructionMnemonic::STOSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 541 */ { ZyDisInstructionMnemonic::STR, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 542 */ { ZyDisInstructionMnemonic::SUB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 543 */ { ZyDisInstructionMnemonic::SUB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 544 */ { ZyDisInstructionMnemonic::SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 545 */ { ZyDisInstructionMnemonic::SUB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 546 */ { ZyDisInstructionMnemonic::SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 547 */ { ZyDisInstructionMnemonic::SUB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 548 */ { ZyDisInstructionMnemonic::SUB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 549 */ { ZyDisInstructionMnemonic::SUB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54A */ { ZyDisInstructionMnemonic::SUB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 54B */ { ZyDisInstructionMnemonic::SUB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54C */ { ZyDisInstructionMnemonic::SUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54D */ { ZyDisInstructionMnemonic::SUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54E */ { ZyDisInstructionMnemonic::SUBSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54F */ { ZyDisInstructionMnemonic::SUBSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 550 */ { ZyDisInstructionMnemonic::SWAPGS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 551 */ { ZyDisInstructionMnemonic::SYSCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 552 */ { ZyDisInstructionMnemonic::SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 553 */ { ZyDisInstructionMnemonic::SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 554 */ { ZyDisInstructionMnemonic::SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 555 */ { ZyDisInstructionMnemonic::SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 556 */ { ZyDisInstructionMnemonic::SYSRET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 557 */ { ZyDisInstructionMnemonic::TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 558 */ { ZyDisInstructionMnemonic::TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 559 */ { ZyDisInstructionMnemonic::TEST, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55A */ { ZyDisInstructionMnemonic::TEST, { OPI_Ev, OPI_Iz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55B */ { ZyDisInstructionMnemonic::TEST, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 55C */ { ZyDisInstructionMnemonic::TEST, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55D */ { ZyDisInstructionMnemonic::TEST, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55E */ { ZyDisInstructionMnemonic::TEST, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, - /* 55F */ { ZyDisInstructionMnemonic::UCOMISD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 560 */ { ZyDisInstructionMnemonic::UCOMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 561 */ { ZyDisInstructionMnemonic::UD2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 562 */ { ZyDisInstructionMnemonic::UNPCKHPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 563 */ { ZyDisInstructionMnemonic::UNPCKHPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 564 */ { ZyDisInstructionMnemonic::UNPCKLPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 565 */ { ZyDisInstructionMnemonic::UNPCKLPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 566 */ { ZyDisInstructionMnemonic::VADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 567 */ { ZyDisInstructionMnemonic::VADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 568 */ { ZyDisInstructionMnemonic::VADDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 569 */ { ZyDisInstructionMnemonic::VADDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56A */ { ZyDisInstructionMnemonic::VADDSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56B */ { ZyDisInstructionMnemonic::VADDSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56C */ { ZyDisInstructionMnemonic::VAESDEC, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56D */ { ZyDisInstructionMnemonic::VAESDECLAST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56E */ { ZyDisInstructionMnemonic::VAESENC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56F */ { ZyDisInstructionMnemonic::VAESENCLAST, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 570 */ { ZyDisInstructionMnemonic::VAESIMC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 571 */ { ZyDisInstructionMnemonic::VAESKEYGENASSIST, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 572 */ { ZyDisInstructionMnemonic::VANDNPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 573 */ { ZyDisInstructionMnemonic::VANDNPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 574 */ { ZyDisInstructionMnemonic::VANDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 575 */ { ZyDisInstructionMnemonic::VANDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 576 */ { ZyDisInstructionMnemonic::VBLENDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 577 */ { ZyDisInstructionMnemonic::VBLENDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 578 */ { ZyDisInstructionMnemonic::VBLENDVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 579 */ { ZyDisInstructionMnemonic::VBLENDVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 57A */ { ZyDisInstructionMnemonic::VBROADCASTSD, { OPI_Vqq, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 57B */ { ZyDisInstructionMnemonic::VBROADCASTSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 57C */ { ZyDisInstructionMnemonic::VCMPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 57D */ { ZyDisInstructionMnemonic::VCMPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 57E */ { ZyDisInstructionMnemonic::VCMPSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 57F */ { ZyDisInstructionMnemonic::VCMPSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 580 */ { ZyDisInstructionMnemonic::VCOMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 581 */ { ZyDisInstructionMnemonic::VCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 582 */ { ZyDisInstructionMnemonic::VCVTDQ2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 583 */ { ZyDisInstructionMnemonic::VCVTDQ2PS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 584 */ { ZyDisInstructionMnemonic::VCVTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 585 */ { ZyDisInstructionMnemonic::VCVTPD2PS, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 586 */ { ZyDisInstructionMnemonic::VCVTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 587 */ { ZyDisInstructionMnemonic::VCVTPS2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 588 */ { ZyDisInstructionMnemonic::VCVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 589 */ { ZyDisInstructionMnemonic::VCVTSD2SS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58A */ { ZyDisInstructionMnemonic::VCVTSI2SD, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58B */ { ZyDisInstructionMnemonic::VCVTSI2SS, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58C */ { ZyDisInstructionMnemonic::VCVTSS2SD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58D */ { ZyDisInstructionMnemonic::VCVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58E */ { ZyDisInstructionMnemonic::VCVTTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 58F */ { ZyDisInstructionMnemonic::VCVTTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 590 */ { ZyDisInstructionMnemonic::VCVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 591 */ { ZyDisInstructionMnemonic::VCVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 592 */ { ZyDisInstructionMnemonic::VDIVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 593 */ { ZyDisInstructionMnemonic::VDIVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 594 */ { ZyDisInstructionMnemonic::VDIVSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 595 */ { ZyDisInstructionMnemonic::VDIVSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 596 */ { ZyDisInstructionMnemonic::VDPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 597 */ { ZyDisInstructionMnemonic::VDPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 598 */ { ZyDisInstructionMnemonic::VERR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 599 */ { ZyDisInstructionMnemonic::VERW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 59A */ { ZyDisInstructionMnemonic::VEXTRACTF128, { OPI_Wdq, OPI_Vqq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 59B */ { ZyDisInstructionMnemonic::VEXTRACTPS, { OPI_MdRy, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 59C */ { ZyDisInstructionMnemonic::VHADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 59D */ { ZyDisInstructionMnemonic::VHADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 59E */ { ZyDisInstructionMnemonic::VHSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 59F */ { ZyDisInstructionMnemonic::VHSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5A0 */ { ZyDisInstructionMnemonic::VINSERTF128, { OPI_Vqq, OPI_Hqq, OPI_Wdq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A1 */ { ZyDisInstructionMnemonic::VINSERTPS, { OPI_Vx, OPI_Hx, OPI_Md, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5A2 */ { ZyDisInstructionMnemonic::VLDDQU, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A3 */ { ZyDisInstructionMnemonic::VMASKMOVDQU, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5A4 */ { ZyDisInstructionMnemonic::VMASKMOVPD, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A5 */ { ZyDisInstructionMnemonic::VMASKMOVPD, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A6 */ { ZyDisInstructionMnemonic::VMASKMOVPS, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A7 */ { ZyDisInstructionMnemonic::VMASKMOVPS, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A8 */ { ZyDisInstructionMnemonic::VMAXPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5A9 */ { ZyDisInstructionMnemonic::VMAXPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5AA */ { ZyDisInstructionMnemonic::VMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5AB */ { ZyDisInstructionMnemonic::VMAXSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5AC */ { ZyDisInstructionMnemonic::VMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5AD */ { ZyDisInstructionMnemonic::VMCLEAR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5AE */ { ZyDisInstructionMnemonic::VMINPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5AF */ { ZyDisInstructionMnemonic::VMINPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5B0 */ { ZyDisInstructionMnemonic::VMINSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5B1 */ { ZyDisInstructionMnemonic::VMINSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5B2 */ { ZyDisInstructionMnemonic::VMLAUNCH, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5B3 */ { ZyDisInstructionMnemonic::VMLOAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5B4 */ { ZyDisInstructionMnemonic::VMMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5B5 */ { ZyDisInstructionMnemonic::VMOVAPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B6 */ { ZyDisInstructionMnemonic::VMOVAPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B7 */ { ZyDisInstructionMnemonic::VMOVAPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B8 */ { ZyDisInstructionMnemonic::VMOVAPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B9 */ { ZyDisInstructionMnemonic::VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BA */ { ZyDisInstructionMnemonic::VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BB */ { ZyDisInstructionMnemonic::VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BC */ { ZyDisInstructionMnemonic::VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BD */ { ZyDisInstructionMnemonic::VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BE */ { ZyDisInstructionMnemonic::VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BF */ { ZyDisInstructionMnemonic::VMOVDQA, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C0 */ { ZyDisInstructionMnemonic::VMOVDQA, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C1 */ { ZyDisInstructionMnemonic::VMOVDQU, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C2 */ { ZyDisInstructionMnemonic::VMOVDQU, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C3 */ { ZyDisInstructionMnemonic::VMOVHLPS, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C4 */ { ZyDisInstructionMnemonic::VMOVHPD, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C5 */ { ZyDisInstructionMnemonic::VMOVHPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C6 */ { ZyDisInstructionMnemonic::VMOVHPS, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C7 */ { ZyDisInstructionMnemonic::VMOVHPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C8 */ { ZyDisInstructionMnemonic::VMOVLHPS, { OPI_Vx, OPI_Hx, OPI_Ux, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C9 */ { ZyDisInstructionMnemonic::VMOVLPD, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CA */ { ZyDisInstructionMnemonic::VMOVLPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CB */ { ZyDisInstructionMnemonic::VMOVLPS, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CC */ { ZyDisInstructionMnemonic::VMOVLPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CD */ { ZyDisInstructionMnemonic::VMOVMSKPD, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5CE */ { ZyDisInstructionMnemonic::VMOVMSKPS, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CF */ { ZyDisInstructionMnemonic::VMOVNTDQ, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D0 */ { ZyDisInstructionMnemonic::VMOVNTDQA, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D1 */ { ZyDisInstructionMnemonic::VMOVNTPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D2 */ { ZyDisInstructionMnemonic::VMOVNTPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D3 */ { ZyDisInstructionMnemonic::VMOVQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D4 */ { ZyDisInstructionMnemonic::VMOVQ, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D5 */ { ZyDisInstructionMnemonic::VMOVQ, { OPI_Vx, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D6 */ { ZyDisInstructionMnemonic::VMOVQ, { OPI_Eq, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D7 */ { ZyDisInstructionMnemonic::VMOVSD, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D8 */ { ZyDisInstructionMnemonic::VMOVSD, { OPI_Mq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D9 */ { ZyDisInstructionMnemonic::VMOVSD, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5DA */ { ZyDisInstructionMnemonic::VMOVSD, { OPI_V, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5DB */ { ZyDisInstructionMnemonic::VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DC */ { ZyDisInstructionMnemonic::VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DD */ { ZyDisInstructionMnemonic::VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DE */ { ZyDisInstructionMnemonic::VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DF */ { ZyDisInstructionMnemonic::VMOVSS, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E0 */ { ZyDisInstructionMnemonic::VMOVSS, { OPI_Md, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E1 */ { ZyDisInstructionMnemonic::VMOVSS, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E2 */ { ZyDisInstructionMnemonic::VMOVSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E3 */ { ZyDisInstructionMnemonic::VMOVUPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E4 */ { ZyDisInstructionMnemonic::VMOVUPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E5 */ { ZyDisInstructionMnemonic::VMOVUPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E6 */ { ZyDisInstructionMnemonic::VMOVUPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E7 */ { ZyDisInstructionMnemonic::VMPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5E8 */ { ZyDisInstructionMnemonic::VMPTRLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5E9 */ { ZyDisInstructionMnemonic::VMPTRST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5EA */ { ZyDisInstructionMnemonic::VMREAD, { OPI_Ey, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 5EB */ { ZyDisInstructionMnemonic::VMRESUME, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5EC */ { ZyDisInstructionMnemonic::VMRUN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5ED */ { ZyDisInstructionMnemonic::VMSAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5EE */ { ZyDisInstructionMnemonic::VMULPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5EF */ { ZyDisInstructionMnemonic::VMULPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5F0 */ { ZyDisInstructionMnemonic::VMULSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5F1 */ { ZyDisInstructionMnemonic::VMULSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5F2 */ { ZyDisInstructionMnemonic::VMWRITE, { OPI_Gy, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 5F3 */ { ZyDisInstructionMnemonic::VMXOFF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5F4 */ { ZyDisInstructionMnemonic::VMXON, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5F5 */ { ZyDisInstructionMnemonic::VORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5F6 */ { ZyDisInstructionMnemonic::VORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 5F7 */ { ZyDisInstructionMnemonic::VPABSB, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5F8 */ { ZyDisInstructionMnemonic::VPABSD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5F9 */ { ZyDisInstructionMnemonic::VPABSW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5FA */ { ZyDisInstructionMnemonic::VPACKSSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FB */ { ZyDisInstructionMnemonic::VPACKSSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FC */ { ZyDisInstructionMnemonic::VPACKUSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FD */ { ZyDisInstructionMnemonic::VPACKUSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FE */ { ZyDisInstructionMnemonic::VPADDB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FF */ { ZyDisInstructionMnemonic::VPADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 600 */ { ZyDisInstructionMnemonic::VPADDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 601 */ { ZyDisInstructionMnemonic::VPADDSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 602 */ { ZyDisInstructionMnemonic::VPADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 603 */ { ZyDisInstructionMnemonic::VPADDUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 604 */ { ZyDisInstructionMnemonic::VPADDUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 605 */ { ZyDisInstructionMnemonic::VPADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 606 */ { ZyDisInstructionMnemonic::VPALIGNR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 607 */ { ZyDisInstructionMnemonic::VPAND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 608 */ { ZyDisInstructionMnemonic::VPANDN, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 609 */ { ZyDisInstructionMnemonic::VPAVGB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60A */ { ZyDisInstructionMnemonic::VPAVGW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60B */ { ZyDisInstructionMnemonic::VPBLENDVB, { OPI_V, OPI_H, OPI_W, OPI_L }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 60C */ { ZyDisInstructionMnemonic::VPBLENDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60D */ { ZyDisInstructionMnemonic::VPCLMULQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60E */ { ZyDisInstructionMnemonic::VPCMPEQB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60F */ { ZyDisInstructionMnemonic::VPCMPEQD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 610 */ { ZyDisInstructionMnemonic::VPCMPEQQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 611 */ { ZyDisInstructionMnemonic::VPCMPEQW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 612 */ { ZyDisInstructionMnemonic::VPCMPESTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 613 */ { ZyDisInstructionMnemonic::VPCMPESTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 614 */ { ZyDisInstructionMnemonic::VPCMPGTB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 615 */ { ZyDisInstructionMnemonic::VPCMPGTD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 616 */ { ZyDisInstructionMnemonic::VPCMPGTQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 617 */ { ZyDisInstructionMnemonic::VPCMPGTW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 618 */ { ZyDisInstructionMnemonic::VPCMPISTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 619 */ { ZyDisInstructionMnemonic::VPCMPISTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 61A */ { ZyDisInstructionMnemonic::VPERM2F128, { OPI_Vqq, OPI_Hqq, OPI_Wqq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61B */ { ZyDisInstructionMnemonic::VPERMILPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61C */ { ZyDisInstructionMnemonic::VPERMILPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61D */ { ZyDisInstructionMnemonic::VPERMILPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61E */ { ZyDisInstructionMnemonic::VPERMILPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61F */ { ZyDisInstructionMnemonic::VPEXTRB, { OPI_MbRv, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 620 */ { ZyDisInstructionMnemonic::VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 621 */ { ZyDisInstructionMnemonic::VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 622 */ { ZyDisInstructionMnemonic::VPEXTRQ, { OPI_Eq, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 623 */ { ZyDisInstructionMnemonic::VPEXTRW, { OPI_Gd, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 624 */ { ZyDisInstructionMnemonic::VPEXTRW, { OPI_MwRd, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 625 */ { ZyDisInstructionMnemonic::VPHADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 626 */ { ZyDisInstructionMnemonic::VPHADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 627 */ { ZyDisInstructionMnemonic::VPHADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 628 */ { ZyDisInstructionMnemonic::VPHMINPOSUW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 629 */ { ZyDisInstructionMnemonic::VPHSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 62A */ { ZyDisInstructionMnemonic::VPHSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 62B */ { ZyDisInstructionMnemonic::VPHSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 62C */ { ZyDisInstructionMnemonic::VPINSRB, { OPI_V, OPI_H, OPI_MbRd, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 62D */ { ZyDisInstructionMnemonic::VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 62E */ { ZyDisInstructionMnemonic::VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 62F */ { ZyDisInstructionMnemonic::VPINSRQ, { OPI_V, OPI_H, OPI_Eq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 630 */ { ZyDisInstructionMnemonic::VPINSRW, { OPI_Vx, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 631 */ { ZyDisInstructionMnemonic::VPMADDUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 632 */ { ZyDisInstructionMnemonic::VPMADDWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 633 */ { ZyDisInstructionMnemonic::VPMAXSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 634 */ { ZyDisInstructionMnemonic::VPMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 635 */ { ZyDisInstructionMnemonic::VPMAXSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 636 */ { ZyDisInstructionMnemonic::VPMAXUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 637 */ { ZyDisInstructionMnemonic::VPMAXUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 638 */ { ZyDisInstructionMnemonic::VPMAXUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 639 */ { ZyDisInstructionMnemonic::VPMINSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63A */ { ZyDisInstructionMnemonic::VPMINSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63B */ { ZyDisInstructionMnemonic::VPMINSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63C */ { ZyDisInstructionMnemonic::VPMINUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63D */ { ZyDisInstructionMnemonic::VPMINUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63E */ { ZyDisInstructionMnemonic::VPMINUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63F */ { ZyDisInstructionMnemonic::VPMOVMSKB, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 640 */ { ZyDisInstructionMnemonic::VPMOVSXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 641 */ { ZyDisInstructionMnemonic::VPMOVSXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 642 */ { ZyDisInstructionMnemonic::VPMOVSXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 643 */ { ZyDisInstructionMnemonic::VPMOVSXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 644 */ { ZyDisInstructionMnemonic::VPMOVSXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 645 */ { ZyDisInstructionMnemonic::VPMOVZXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 646 */ { ZyDisInstructionMnemonic::VPMOVZXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 647 */ { ZyDisInstructionMnemonic::VPMOVZXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 648 */ { ZyDisInstructionMnemonic::VPMOVZXDQ, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 649 */ { ZyDisInstructionMnemonic::VPMOVZXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 64A */ { ZyDisInstructionMnemonic::VPMOVZXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 64B */ { ZyDisInstructionMnemonic::VPMULDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64C */ { ZyDisInstructionMnemonic::VPMULHRSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64D */ { ZyDisInstructionMnemonic::VPMULHUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64E */ { ZyDisInstructionMnemonic::VPMULHW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64F */ { ZyDisInstructionMnemonic::VPMULLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 650 */ { ZyDisInstructionMnemonic::VPMULLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 651 */ { ZyDisInstructionMnemonic::VPOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 652 */ { ZyDisInstructionMnemonic::VPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 653 */ { ZyDisInstructionMnemonic::VPSHUFB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 654 */ { ZyDisInstructionMnemonic::VPSHUFD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 655 */ { ZyDisInstructionMnemonic::VPSHUFHW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 656 */ { ZyDisInstructionMnemonic::VPSHUFLW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 657 */ { ZyDisInstructionMnemonic::VPSIGNB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 658 */ { ZyDisInstructionMnemonic::VPSIGND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 659 */ { ZyDisInstructionMnemonic::VPSIGNW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 65A */ { ZyDisInstructionMnemonic::VPSLLD, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65B */ { ZyDisInstructionMnemonic::VPSLLD, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65C */ { ZyDisInstructionMnemonic::VPSLLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 65D */ { ZyDisInstructionMnemonic::VPSLLQ, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65E */ { ZyDisInstructionMnemonic::VPSLLQ, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65F */ { ZyDisInstructionMnemonic::VPSLLW, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 660 */ { ZyDisInstructionMnemonic::VPSLLW, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 661 */ { ZyDisInstructionMnemonic::VPSRAD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 662 */ { ZyDisInstructionMnemonic::VPSRAD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 663 */ { ZyDisInstructionMnemonic::VPSRAW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 664 */ { ZyDisInstructionMnemonic::VPSRAW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 665 */ { ZyDisInstructionMnemonic::VPSRLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 666 */ { ZyDisInstructionMnemonic::VPSRLD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 667 */ { ZyDisInstructionMnemonic::VPSRLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 668 */ { ZyDisInstructionMnemonic::VPSRLQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 669 */ { ZyDisInstructionMnemonic::VPSRLQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66A */ { ZyDisInstructionMnemonic::VPSRLW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66B */ { ZyDisInstructionMnemonic::VPSRLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66C */ { ZyDisInstructionMnemonic::VPSUBB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66D */ { ZyDisInstructionMnemonic::VPSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66E */ { ZyDisInstructionMnemonic::VPSUBQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66F */ { ZyDisInstructionMnemonic::VPSUBSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 670 */ { ZyDisInstructionMnemonic::VPSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 671 */ { ZyDisInstructionMnemonic::VPSUBUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 672 */ { ZyDisInstructionMnemonic::VPSUBUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 673 */ { ZyDisInstructionMnemonic::VPSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 674 */ { ZyDisInstructionMnemonic::VPTEST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 675 */ { ZyDisInstructionMnemonic::VPUNPCKHBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 676 */ { ZyDisInstructionMnemonic::VPUNPCKHDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 677 */ { ZyDisInstructionMnemonic::VPUNPCKHQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 678 */ { ZyDisInstructionMnemonic::VPUNPCKHWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 679 */ { ZyDisInstructionMnemonic::VPUNPCKLBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67A */ { ZyDisInstructionMnemonic::VPUNPCKLDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67B */ { ZyDisInstructionMnemonic::VPUNPCKLQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67C */ { ZyDisInstructionMnemonic::VPUNPCKLWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67D */ { ZyDisInstructionMnemonic::VPXOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67E */ { ZyDisInstructionMnemonic::VRCPPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 67F */ { ZyDisInstructionMnemonic::VRCPSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 680 */ { ZyDisInstructionMnemonic::VROUNDPD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 681 */ { ZyDisInstructionMnemonic::VROUNDPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 682 */ { ZyDisInstructionMnemonic::VROUNDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 683 */ { ZyDisInstructionMnemonic::VROUNDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 684 */ { ZyDisInstructionMnemonic::VRSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 685 */ { ZyDisInstructionMnemonic::VRSQRTSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 686 */ { ZyDisInstructionMnemonic::VSHUFPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 687 */ { ZyDisInstructionMnemonic::VSHUFPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 688 */ { ZyDisInstructionMnemonic::VSQRTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 689 */ { ZyDisInstructionMnemonic::VSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 68A */ { ZyDisInstructionMnemonic::VSQRTSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 68B */ { ZyDisInstructionMnemonic::VSQRTSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 68C */ { ZyDisInstructionMnemonic::VSTMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 68D */ { ZyDisInstructionMnemonic::VSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 68E */ { ZyDisInstructionMnemonic::VSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 68F */ { ZyDisInstructionMnemonic::VSUBSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 690 */ { ZyDisInstructionMnemonic::VSUBSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 691 */ { ZyDisInstructionMnemonic::VTESTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 692 */ { ZyDisInstructionMnemonic::VTESTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 693 */ { ZyDisInstructionMnemonic::VUCOMISD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 694 */ { ZyDisInstructionMnemonic::VUCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 695 */ { ZyDisInstructionMnemonic::VUNPCKHPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 696 */ { ZyDisInstructionMnemonic::VUNPCKHPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 697 */ { ZyDisInstructionMnemonic::VUNPCKLPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 698 */ { ZyDisInstructionMnemonic::VUNPCKLPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 699 */ { ZyDisInstructionMnemonic::ZyDisORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 69A */ { ZyDisInstructionMnemonic::ZyDisORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 69B */ { ZyDisInstructionMnemonic::VZEROALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69C */ { ZyDisInstructionMnemonic::VZEROUPPER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69D */ { ZyDisInstructionMnemonic::WAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69E */ { ZyDisInstructionMnemonic::WBINVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69F */ { ZyDisInstructionMnemonic::WRMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6A0 */ { ZyDisInstructionMnemonic::XADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, - /* 6A1 */ { ZyDisInstructionMnemonic::XADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, - /* 6A2 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R4v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A3 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R3v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A4 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R5v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A5 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R7v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A6 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R6v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A7 */ { ZyDisInstructionMnemonic::XCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A8 */ { ZyDisInstructionMnemonic::XCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A9 */ { ZyDisInstructionMnemonic::XCHG, { OPI_R0v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6AA */ { ZyDisInstructionMnemonic::XCHG, { OPI_R2v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6AB */ { ZyDisInstructionMnemonic::XCHG, { OPI_R1v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6AC */ { ZyDisInstructionMnemonic::XCRYPTCBC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6AD */ { ZyDisInstructionMnemonic::XCRYPTCFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6AE */ { ZyDisInstructionMnemonic::XCRYPTCTR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6AF */ { ZyDisInstructionMnemonic::XCRYPTECB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6B0 */ { ZyDisInstructionMnemonic::XCRYPTOFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6B1 */ { ZyDisInstructionMnemonic::XGETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6B2 */ { ZyDisInstructionMnemonic::XLATB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 6B3 */ { ZyDisInstructionMnemonic::XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 6B4 */ { ZyDisInstructionMnemonic::XOR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B5 */ { ZyDisInstructionMnemonic::XOR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B6 */ { ZyDisInstructionMnemonic::XOR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B7 */ { ZyDisInstructionMnemonic::XOR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B8 */ { ZyDisInstructionMnemonic::XOR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B9 */ { ZyDisInstructionMnemonic::XOR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BA */ { ZyDisInstructionMnemonic::XOR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 6BB */ { ZyDisInstructionMnemonic::XOR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 6BC */ { ZyDisInstructionMnemonic::XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BD */ { ZyDisInstructionMnemonic::XORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BE */ { ZyDisInstructionMnemonic::XORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BF */ { ZyDisInstructionMnemonic::XRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 6C0 */ { ZyDisInstructionMnemonic::XSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 6C1 */ { ZyDisInstructionMnemonic::XSETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6C2 */ { ZyDisInstructionMnemonic::XSHA1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6C3 */ { ZyDisInstructionMnemonic::XSHA256, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6C4 */ { ZyDisInstructionMnemonic::XSTORE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, -}; - -#undef OPI_NONE -#undef OPI_AL -#undef OPI_AX -#undef OPI_Av -#undef OPI_C -#undef OPI_CL -#undef OPI_CS -#undef OPI_CX -#undef OPI_D -#undef OPI_DL -#undef OPI_DS -#undef OPI_DX -#undef OPI_E -#undef OPI_ES -#undef OPI_Eb -#undef OPI_Ed -#undef OPI_Eq -#undef OPI_Ev -#undef OPI_Ew -#undef OPI_Ey -#undef OPI_Ez -#undef OPI_FS -#undef OPI_Fv -#undef OPI_G -#undef OPI_GS -#undef OPI_Gb -#undef OPI_Gd -#undef OPI_Gq -#undef OPI_Gv -#undef OPI_Gw -#undef OPI_Gy -#undef OPI_Gz -#undef OPI_H -#undef OPI_Hqq -#undef OPI_Hx -#undef OPI_I1 -#undef OPI_Ib -#undef OPI_Iv -#undef OPI_Iw -#undef OPI_Iz -#undef OPI_Jb -#undef OPI_Jv -#undef OPI_Jz -#undef OPI_L -#undef OPI_Lx -#undef OPI_M -#undef OPI_Mb -#undef OPI_MbRd -#undef OPI_MbRv -#undef OPI_Md -#undef OPI_MdRy -#undef OPI_MdU -#undef OPI_Mdq -#undef OPI_Mo -#undef OPI_Mq -#undef OPI_MqU -#undef OPI_Ms -#undef OPI_Mt -#undef OPI_Mv -#undef OPI_Mw -#undef OPI_MwRd -#undef OPI_MwRv -#undef OPI_MwRy -#undef OPI_MwU -#undef OPI_N -#undef OPI_Ob -#undef OPI_Ov -#undef OPI_Ow -#undef OPI_P -#undef OPI_Q -#undef OPI_R -#undef OPI_R0b -#undef OPI_R0v -#undef OPI_R0w -#undef OPI_R0y -#undef OPI_R0z -#undef OPI_R1b -#undef OPI_R1v -#undef OPI_R1w -#undef OPI_R1y -#undef OPI_R1z -#undef OPI_R2b -#undef OPI_R2v -#undef OPI_R2w -#undef OPI_R2y -#undef OPI_R2z -#undef OPI_R3b -#undef OPI_R3v -#undef OPI_R3w -#undef OPI_R3y -#undef OPI_R3z -#undef OPI_R4b -#undef OPI_R4v -#undef OPI_R4w -#undef OPI_R4y -#undef OPI_R4z -#undef OPI_R5b -#undef OPI_R5v -#undef OPI_R5w -#undef OPI_R5y -#undef OPI_R5z -#undef OPI_R6b -#undef OPI_R6v -#undef OPI_R6w -#undef OPI_R6y -#undef OPI_R6z -#undef OPI_R7b -#undef OPI_R7v -#undef OPI_R7w -#undef OPI_R7y -#undef OPI_R7z -#undef OPI_S -#undef OPI_SS -#undef OPI_ST0 -#undef OPI_ST1 -#undef OPI_ST2 -#undef OPI_ST3 -#undef OPI_ST4 -#undef OPI_ST5 -#undef OPI_ST6 -#undef OPI_ST7 -#undef OPI_U -#undef OPI_Ux -#undef OPI_V -#undef OPI_Vdq -#undef OPI_Vqq -#undef OPI_Vsd -#undef OPI_Vx -#undef OPI_W -#undef OPI_Wdq -#undef OPI_Wqq -#undef OPI_Wsd -#undef OPI_Wx -#undef OPI_eAX -#undef OPI_eCX -#undef OPI_eDX -#undef OPI_rAX -#undef OPI_rCX -#undef OPI_rDX -#undef OPI_sIb -#undef OPI_sIz - -const char* instrMnemonicStrings[] = -{ - /* 000 */ "invalid", - /* 001 */ "aaa", - /* 002 */ "aad", - /* 003 */ "aam", - /* 004 */ "aas", - /* 005 */ "adc", - /* 006 */ "add", - /* 007 */ "addpd", - /* 008 */ "addps", - /* 009 */ "addsd", - /* 00A */ "addss", - /* 00B */ "addsubpd", - /* 00C */ "addsubps", - /* 00D */ "aesdec", - /* 00E */ "aesdeclast", - /* 00F */ "aesenc", - /* 010 */ "aesenclast", - /* 011 */ "aesimc", - /* 012 */ "aeskeygenassist", - /* 013 */ "and", - /* 014 */ "andnpd", - /* 015 */ "andnps", - /* 016 */ "andpd", - /* 017 */ "andps", - /* 018 */ "arpl", - /* 019 */ "blendpd", - /* 01A */ "blendps", - /* 01B */ "blendvpd", - /* 01C */ "blendvps", - /* 01D */ "bound", - /* 01E */ "bsf", - /* 01F */ "bsr", - /* 020 */ "bswap", - /* 021 */ "bt", - /* 022 */ "btc", - /* 023 */ "btr", - /* 024 */ "bts", - /* 025 */ "call", - /* 026 */ "cbw", - /* 027 */ "cdq", - /* 028 */ "cdqe", - /* 029 */ "clc", - /* 02A */ "cld", - /* 02B */ "clflush", - /* 02C */ "clgi", - /* 02D */ "cli", - /* 02E */ "clts", - /* 02F */ "cmc", - /* 030 */ "cmova", - /* 031 */ "cmovae", - /* 032 */ "cmovb", - /* 033 */ "cmovbe", - /* 034 */ "cmove", - /* 035 */ "cmovg", - /* 036 */ "cmovge", - /* 037 */ "cmovl", - /* 038 */ "cmovle", - /* 039 */ "cmovne", - /* 03A */ "cmovno", - /* 03B */ "cmovnp", - /* 03C */ "cmovns", - /* 03D */ "cmovo", - /* 03E */ "cmovp", - /* 03F */ "cmovs", - /* 040 */ "cmp", - /* 041 */ "cmppd", - /* 042 */ "cmpps", - /* 043 */ "cmpsb", - /* 044 */ "cmpsd", - /* 045 */ "cmpsq", - /* 046 */ "cmpss", - /* 047 */ "cmpsw", - /* 048 */ "cmpxchg", - /* 049 */ "cmpxchg16b", - /* 04A */ "cmpxchg8b", - /* 04B */ "comisd", - /* 04C */ "comiss", - /* 04D */ "cpuid", - /* 04E */ "cqo", - /* 04F */ "crc32", - /* 050 */ "cvtdq2pd", - /* 051 */ "cvtdq2ps", - /* 052 */ "cvtpd2dq", - /* 053 */ "cvtpd2pi", - /* 054 */ "cvtpd2ps", - /* 055 */ "cvtpi2pd", - /* 056 */ "cvtpi2ps", - /* 057 */ "cvtps2dq", - /* 058 */ "cvtps2pd", - /* 059 */ "cvtps2pi", - /* 05A */ "cvtsd2si", - /* 05B */ "cvtsd2ss", - /* 05C */ "cvtsi2sd", - /* 05D */ "cvtsi2ss", - /* 05E */ "cvtss2sd", - /* 05F */ "cvtss2si", - /* 060 */ "cvttpd2dq", - /* 061 */ "cvttpd2pi", - /* 062 */ "cvttps2dq", - /* 063 */ "cvttps2pi", - /* 064 */ "cvttsd2si", - /* 065 */ "cvttss2si", - /* 066 */ "cwd", - /* 067 */ "cwde", - /* 068 */ "daa", - /* 069 */ "das", - /* 06A */ "dec", - /* 06B */ "div", - /* 06C */ "divpd", - /* 06D */ "divps", - /* 06E */ "divsd", - /* 06F */ "divss", - /* 070 */ "dppd", - /* 071 */ "dpps", - /* 072 */ "emms", - /* 073 */ "enter", - /* 074 */ "extractps", - /* 075 */ "f2xm1", - /* 076 */ "fabs", - /* 077 */ "fadd", - /* 078 */ "faddp", - /* 079 */ "fbld", - /* 07A */ "fbstp", - /* 07B */ "fchs", - /* 07C */ "fclex", - /* 07D */ "fcmovb", - /* 07E */ "fcmovbe", - /* 07F */ "fcmove", - /* 080 */ "fcmovnb", - /* 081 */ "fcmovnbe", - /* 082 */ "fcmovne", - /* 083 */ "fcmovnu", - /* 084 */ "fcmovu", - /* 085 */ "fcom", - /* 086 */ "fcom2", - /* 087 */ "fcomi", - /* 088 */ "fcomip", - /* 089 */ "fcomp", - /* 08A */ "fcomp3", - /* 08B */ "fcomp5", - /* 08C */ "fcompp", - /* 08D */ "fcos", - /* 08E */ "fdecstp", - /* 08F */ "fdiv", - /* 090 */ "fdivp", - /* 091 */ "fdivr", - /* 092 */ "fdivrp", - /* 093 */ "femms", - /* 094 */ "ffree", - /* 095 */ "ffreep", - /* 096 */ "fiadd", - /* 097 */ "ficom", - /* 098 */ "ficomp", - /* 099 */ "fidiv", - /* 09A */ "fidivr", - /* 09B */ "fild", - /* 09C */ "fimul", - /* 09D */ "fincstp", - /* 09E */ "fist", - /* 09F */ "fistp", - /* 0A0 */ "fisttp", - /* 0A1 */ "fisub", - /* 0A2 */ "fisubr", - /* 0A3 */ "fld", - /* 0A4 */ "fld1", - /* 0A5 */ "fldcw", - /* 0A6 */ "fldenv", - /* 0A7 */ "fldl2e", - /* 0A8 */ "fldl2t", - /* 0A9 */ "fldlg2", - /* 0AA */ "fldln2", - /* 0AB */ "fldpi", - /* 0AC */ "fldz", - /* 0AD */ "fmul", - /* 0AE */ "fmulp", - /* 0AF */ "fndisi", - /* 0B0 */ "fneni", - /* 0B1 */ "fninit", - /* 0B2 */ "fnop", - /* 0B3 */ "fnsave", - /* 0B4 */ "fnsetpm", - /* 0B5 */ "fnstcw", - /* 0B6 */ "fnstenv", - /* 0B7 */ "fnstsw", - /* 0B8 */ "fpatan", - /* 0B9 */ "fprem", - /* 0BA */ "fprem1", - /* 0BB */ "fptan", - /* 0BC */ "frndint", - /* 0BD */ "frstor", - /* 0BE */ "frstpm", - /* 0BF */ "fscale", - /* 0C0 */ "fsin", - /* 0C1 */ "fsincos", - /* 0C2 */ "fsqrt", - /* 0C3 */ "fst", - /* 0C4 */ "fstp", - /* 0C5 */ "fstp1", - /* 0C6 */ "fstp8", - /* 0C7 */ "fstp9", - /* 0C8 */ "fsub", - /* 0C9 */ "fsubp", - /* 0CA */ "fsubr", - /* 0CB */ "fsubrp", - /* 0CC */ "ftst", - /* 0CD */ "fucom", - /* 0CE */ "fucomi", - /* 0CF */ "fucomip", - /* 0D0 */ "fucomp", - /* 0D1 */ "fucompp", - /* 0D2 */ "fxam", - /* 0D3 */ "fxch", - /* 0D4 */ "fxch4", - /* 0D5 */ "fxch7", - /* 0D6 */ "fxrstor", - /* 0D7 */ "fxsave", - /* 0D8 */ "fxtract", - /* 0D9 */ "fyl2x", - /* 0DA */ "fyl2xp1", - /* 0DB */ "getsec", - /* 0DC */ "haddpd", - /* 0DD */ "haddps", - /* 0DE */ "hlt", - /* 0DF */ "hsubpd", - /* 0E0 */ "hsubps", - /* 0E1 */ "idiv", - /* 0E2 */ "imul", - /* 0E3 */ "in", - /* 0E4 */ "inc", - /* 0E5 */ "insb", - /* 0E6 */ "insd", - /* 0E7 */ "insertps", - /* 0E8 */ "insw", - /* 0E9 */ "int", - /* 0EA */ "int1", - /* 0EB */ "int3", - /* 0EC */ "into", - /* 0ED */ "invd", - /* 0EE */ "invept", - /* 0EF */ "invlpg", - /* 0F0 */ "invlpga", - /* 0F1 */ "invvpid", - /* 0F2 */ "iretd", - /* 0F3 */ "iretq", - /* 0F4 */ "iretw", - /* 0F5 */ "ja", - /* 0F6 */ "jb", - /* 0F7 */ "jbe", - /* 0F8 */ "jcxz", - /* 0F9 */ "je", - /* 0FA */ "jecxz", - /* 0FB */ "jg", - /* 0FC */ "jge", - /* 0FD */ "jl", - /* 0FE */ "jle", - /* 0FF */ "jmp", - /* 100 */ "jnb", - /* 101 */ "jne", - /* 102 */ "jno", - /* 103 */ "jnp", - /* 104 */ "jns", - /* 105 */ "jo", - /* 106 */ "jp", - /* 107 */ "jrcxz", - /* 108 */ "js", - /* 109 */ "lahf", - /* 10A */ "lar", - /* 10B */ "lddqu", - /* 10C */ "ldmxcsr", - /* 10D */ "lds", - /* 10E */ "lea", - /* 10F */ "leave", - /* 110 */ "les", - /* 111 */ "lfence", - /* 112 */ "lfs", - /* 113 */ "lgdt", - /* 114 */ "lgs", - /* 115 */ "lidt", - /* 116 */ "lldt", - /* 117 */ "lmsw", - /* 118 */ "lock", - /* 119 */ "lodsb", - /* 11A */ "lodsd", - /* 11B */ "lodsq", - /* 11C */ "lodsw", - /* 11D */ "loop", - /* 11E */ "loope", - /* 11F */ "loopne", - /* 120 */ "lsl", - /* 121 */ "lss", - /* 122 */ "ltr", - /* 123 */ "maskmovdqu", - /* 124 */ "maskmovq", - /* 125 */ "maxpd", - /* 126 */ "maxps", - /* 127 */ "maxsd", - /* 128 */ "maxss", - /* 129 */ "mfence", - /* 12A */ "minpd", - /* 12B */ "minps", - /* 12C */ "minsd", - /* 12D */ "minss", - /* 12E */ "monitor", - /* 12F */ "montmul", - /* 130 */ "mov", - /* 131 */ "movapd", - /* 132 */ "movaps", - /* 133 */ "movbe", - /* 134 */ "movd", - /* 135 */ "movddup", - /* 136 */ "movdq2q", - /* 137 */ "movdqa", - /* 138 */ "movdqu", - /* 139 */ "movhlps", - /* 13A */ "movhpd", - /* 13B */ "movhps", - /* 13C */ "movlhps", - /* 13D */ "movlpd", - /* 13E */ "movlps", - /* 13F */ "movmskpd", - /* 140 */ "movmskps", - /* 141 */ "movntdq", - /* 142 */ "movntdqa", - /* 143 */ "movnti", - /* 144 */ "movntpd", - /* 145 */ "movntps", - /* 146 */ "movntq", - /* 147 */ "movq", - /* 148 */ "movq2dq", - /* 149 */ "movsb", - /* 14A */ "movsd", - /* 14B */ "movshdup", - /* 14C */ "movsldup", - /* 14D */ "movsq", - /* 14E */ "movss", - /* 14F */ "movsw", - /* 150 */ "movsx", - /* 151 */ "movsxd", - /* 152 */ "movupd", - /* 153 */ "movups", - /* 154 */ "movzx", - /* 155 */ "mpsadbw", - /* 156 */ "mul", - /* 157 */ "mulpd", - /* 158 */ "mulps", - /* 159 */ "mulsd", - /* 15A */ "mulss", - /* 15B */ "mwait", - /* 15C */ "neg", - /* 15D */ "nop", - /* 15E */ "not", - /* 15F */ "or", - /* 160 */ "orpd", - /* 161 */ "orps", - /* 162 */ "out", - /* 163 */ "outsb", - /* 164 */ "outsd", - /* 165 */ "outsw", - /* 166 */ "pabsb", - /* 167 */ "pabsd", - /* 168 */ "pabsw", - /* 169 */ "packssdw", - /* 16A */ "packsswb", - /* 16B */ "packusdw", - /* 16C */ "packuswb", - /* 16D */ "paddb", - /* 16E */ "paddd", - /* 16F */ "paddq", - /* 170 */ "paddsb", - /* 171 */ "paddsw", - /* 172 */ "paddusb", - /* 173 */ "paddusw", - /* 174 */ "paddw", - /* 175 */ "palignr", - /* 176 */ "pand", - /* 177 */ "pandn", - /* 178 */ "pause", - /* 179 */ "pavgb", - /* 17A */ "pavgusb", - /* 17B */ "pavgw", - /* 17C */ "pblendvb", - /* 17D */ "pblendw", - /* 17E */ "pclmulqdq", - /* 17F */ "pcmpeqb", - /* 180 */ "pcmpeqd", - /* 181 */ "pcmpeqq", - /* 182 */ "pcmpeqw", - /* 183 */ "pcmpestri", - /* 184 */ "pcmpestrm", - /* 185 */ "pcmpgtb", - /* 186 */ "pcmpgtd", - /* 187 */ "pcmpgtq", - /* 188 */ "pcmpgtw", - /* 189 */ "pcmpistri", - /* 18A */ "pcmpistrm", - /* 18B */ "pextrb", - /* 18C */ "pextrd", - /* 18D */ "pextrq", - /* 18E */ "pextrw", - /* 18F */ "pf2id", - /* 190 */ "pf2iw", - /* 191 */ "pfacc", - /* 192 */ "pfadd", - /* 193 */ "pfcmpeq", - /* 194 */ "pfcmpge", - /* 195 */ "pfcmpgt", - /* 196 */ "pfmax", - /* 197 */ "pfmin", - /* 198 */ "pfmul", - /* 199 */ "pfnacc", - /* 19A */ "pfpnacc", - /* 19B */ "pfrcp", - /* 19C */ "pfrcpit1", - /* 19D */ "pfrcpit2", - /* 19E */ "pfrsqit1", - /* 19F */ "pfrsqrt", - /* 1A0 */ "pfsub", - /* 1A1 */ "pfsubr", - /* 1A2 */ "phaddd", - /* 1A3 */ "phaddsw", - /* 1A4 */ "phaddw", - /* 1A5 */ "phminposuw", - /* 1A6 */ "phsubd", - /* 1A7 */ "phsubsw", - /* 1A8 */ "phsubw", - /* 1A9 */ "pi2fd", - /* 1AA */ "pi2fw", - /* 1AB */ "pinsrb", - /* 1AC */ "pinsrd", - /* 1AD */ "pinsrq", - /* 1AE */ "pinsrw", - /* 1AF */ "pmaddubsw", - /* 1B0 */ "pmaddwd", - /* 1B1 */ "pmaxsb", - /* 1B2 */ "pmaxsd", - /* 1B3 */ "pmaxsw", - /* 1B4 */ "pmaxub", - /* 1B5 */ "pmaxud", - /* 1B6 */ "pmaxuw", - /* 1B7 */ "pminsb", - /* 1B8 */ "pminsd", - /* 1B9 */ "pminsw", - /* 1BA */ "pminub", - /* 1BB */ "pminud", - /* 1BC */ "pminuw", - /* 1BD */ "pmovmskb", - /* 1BE */ "pmovsxbd", - /* 1BF */ "pmovsxbq", - /* 1C0 */ "pmovsxbw", - /* 1C1 */ "pmovsxdq", - /* 1C2 */ "pmovsxwd", - /* 1C3 */ "pmovsxwq", - /* 1C4 */ "pmovzxbd", - /* 1C5 */ "pmovzxbq", - /* 1C6 */ "pmovzxbw", - /* 1C7 */ "pmovzxdq", - /* 1C8 */ "pmovzxwd", - /* 1C9 */ "pmovzxwq", - /* 1CA */ "pmuldq", - /* 1CB */ "pmulhrsw", - /* 1CC */ "pmulhrw", - /* 1CD */ "pmulhuw", - /* 1CE */ "pmulhw", - /* 1CF */ "pmulld", - /* 1D0 */ "pmullw", - /* 1D1 */ "pmuludq", - /* 1D2 */ "pop", - /* 1D3 */ "popa", - /* 1D4 */ "popad", - /* 1D5 */ "popcnt", - /* 1D6 */ "popfd", - /* 1D7 */ "popfq", - /* 1D8 */ "popfw", - /* 1D9 */ "por", - /* 1DA */ "prefetch", - /* 1DB */ "prefetchnta", - /* 1DC */ "prefetcht0", - /* 1DD */ "prefetcht1", - /* 1DE */ "prefetcht2", - /* 1DF */ "psadbw", - /* 1E0 */ "pshufb", - /* 1E1 */ "pshufd", - /* 1E2 */ "pshufhw", - /* 1E3 */ "pshuflw", - /* 1E4 */ "pshufw", - /* 1E5 */ "psignb", - /* 1E6 */ "psignd", - /* 1E7 */ "psignw", - /* 1E8 */ "pslld", - /* 1E9 */ "pslldq", - /* 1EA */ "psllq", - /* 1EB */ "psllw", - /* 1EC */ "psrad", - /* 1ED */ "psraw", - /* 1EE */ "psrld", - /* 1EF */ "psrldq", - /* 1F0 */ "psrlq", - /* 1F1 */ "psrlw", - /* 1F2 */ "psubb", - /* 1F3 */ "psubd", - /* 1F4 */ "psubq", - /* 1F5 */ "psubsb", - /* 1F6 */ "psubsw", - /* 1F7 */ "psubusb", - /* 1F8 */ "psubusw", - /* 1F9 */ "psubw", - /* 1FA */ "pswapd", - /* 1FB */ "ptest", - /* 1FC */ "punpckhbw", - /* 1FD */ "punpckhdq", - /* 1FE */ "punpckhqdq", - /* 1FF */ "punpckhwd", - /* 200 */ "punpcklbw", - /* 201 */ "punpckldq", - /* 202 */ "punpcklqdq", - /* 203 */ "punpcklwd", - /* 204 */ "push", - /* 205 */ "pusha", - /* 206 */ "pushad", - /* 207 */ "pushfd", - /* 208 */ "pushfq", - /* 209 */ "pushfw", - /* 20A */ "pxor", - /* 20B */ "rcl", - /* 20C */ "rcpps", - /* 20D */ "rcpss", - /* 20E */ "rcr", - /* 20F */ "rdmsr", - /* 210 */ "rdpmc", - /* 211 */ "rdrand", - /* 212 */ "rdtsc", - /* 213 */ "rdtscp", - /* 214 */ "rep", - /* 215 */ "repne", - /* 216 */ "ret", - /* 217 */ "retf", - /* 218 */ "rol", - /* 219 */ "ror", - /* 21A */ "roundpd", - /* 21B */ "roundps", - /* 21C */ "roundsd", - /* 21D */ "roundss", - /* 21E */ "rsm", - /* 21F */ "rsqrtps", - /* 220 */ "rsqrtss", - /* 221 */ "sahf", - /* 222 */ "salc", - /* 223 */ "sar", - /* 224 */ "sbb", - /* 225 */ "scasb", - /* 226 */ "scasd", - /* 227 */ "scasq", - /* 228 */ "scasw", - /* 229 */ "seta", - /* 22A */ "setae", - /* 22B */ "setb", - /* 22C */ "setbe", - /* 22D */ "sete", - /* 22E */ "setg", - /* 22F */ "setge", - /* 230 */ "setl", - /* 231 */ "setle", - /* 232 */ "setne", - /* 233 */ "setno", - /* 234 */ "setnp", - /* 235 */ "setns", - /* 236 */ "seto", - /* 237 */ "setp", - /* 238 */ "sets", - /* 239 */ "sfence", - /* 23A */ "sgdt", - /* 23B */ "shl", - /* 23C */ "shld", - /* 23D */ "shr", - /* 23E */ "shrd", - /* 23F */ "shufpd", - /* 240 */ "shufps", - /* 241 */ "sidt", - /* 242 */ "skinit", - /* 243 */ "sldt", - /* 244 */ "smsw", - /* 245 */ "sqrtpd", - /* 246 */ "sqrtps", - /* 247 */ "sqrtsd", - /* 248 */ "sqrtss", - /* 249 */ "stc", - /* 24A */ "std", - /* 24B */ "stgi", - /* 24C */ "sti", - /* 24D */ "stmxcsr", - /* 24E */ "stosb", - /* 24F */ "stosd", - /* 250 */ "stosq", - /* 251 */ "stosw", - /* 252 */ "str", - /* 253 */ "sub", - /* 254 */ "subpd", - /* 255 */ "subps", - /* 256 */ "subsd", - /* 257 */ "subss", - /* 258 */ "swapgs", - /* 259 */ "syscall", - /* 25A */ "sysenter", - /* 25B */ "sysexit", - /* 25C */ "sysret", - /* 25D */ "test", - /* 25E */ "ucomisd", - /* 25F */ "ucomiss", - /* 260 */ "ud2", - /* 261 */ "unpckhpd", - /* 262 */ "unpckhps", - /* 263 */ "unpcklpd", - /* 264 */ "unpcklps", - /* 265 */ "vaddpd", - /* 266 */ "vaddps", - /* 267 */ "vaddsd", - /* 268 */ "vaddss", - /* 269 */ "vaddsubpd", - /* 26A */ "vaddsubps", - /* 26B */ "vaesdec", - /* 26C */ "vaesdeclast", - /* 26D */ "vaesenc", - /* 26E */ "vaesenclast", - /* 26F */ "vaesimc", - /* 270 */ "vaeskeygenassist", - /* 271 */ "vandnpd", - /* 272 */ "vandnps", - /* 273 */ "vandpd", - /* 274 */ "vandps", - /* 275 */ "vblendpd", - /* 276 */ "vblendps", - /* 277 */ "vblendvpd", - /* 278 */ "vblendvps", - /* 279 */ "vbroadcastsd", - /* 27A */ "vbroadcastss", - /* 27B */ "vcmppd", - /* 27C */ "vcmpps", - /* 27D */ "vcmpsd", - /* 27E */ "vcmpss", - /* 27F */ "vcomisd", - /* 280 */ "vcomiss", - /* 281 */ "vcvtdq2pd", - /* 282 */ "vcvtdq2ps", - /* 283 */ "vcvtpd2dq", - /* 284 */ "vcvtpd2ps", - /* 285 */ "vcvtps2dq", - /* 286 */ "vcvtps2pd", - /* 287 */ "vcvtsd2si", - /* 288 */ "vcvtsd2ss", - /* 289 */ "vcvtsi2sd", - /* 28A */ "vcvtsi2ss", - /* 28B */ "vcvtss2sd", - /* 28C */ "vcvtss2si", - /* 28D */ "vcvttpd2dq", - /* 28E */ "vcvttps2dq", - /* 28F */ "vcvttsd2si", - /* 290 */ "vcvttss2si", - /* 291 */ "vdivpd", - /* 292 */ "vdivps", - /* 293 */ "vdivsd", - /* 294 */ "vdivss", - /* 295 */ "vdppd", - /* 296 */ "vdpps", - /* 297 */ "verr", - /* 298 */ "verw", - /* 299 */ "vextractf128", - /* 29A */ "vextractps", - /* 29B */ "vhaddpd", - /* 29C */ "vhaddps", - /* 29D */ "vhsubpd", - /* 29E */ "vhsubps", - /* 29F */ "vinsertf128", - /* 2A0 */ "vinsertps", - /* 2A1 */ "vlddqu", - /* 2A2 */ "vmaskmovdqu", - /* 2A3 */ "vmaskmovpd", - /* 2A4 */ "vmaskmovps", - /* 2A5 */ "vmaxpd", - /* 2A6 */ "vmaxps", - /* 2A7 */ "vmaxsd", - /* 2A8 */ "vmaxss", - /* 2A9 */ "vmcall", - /* 2AA */ "vmclear", - /* 2AB */ "vminpd", - /* 2AC */ "vminps", - /* 2AD */ "vminsd", - /* 2AE */ "vminss", - /* 2AF */ "vmlaunch", - /* 2B0 */ "vmload", - /* 2B1 */ "vmmcall", - /* 2B2 */ "vmovapd", - /* 2B3 */ "vmovaps", - /* 2B4 */ "vmovd", - /* 2B5 */ "vmovddup", - /* 2B6 */ "vmovdqa", - /* 2B7 */ "vmovdqu", - /* 2B8 */ "vmovhlps", - /* 2B9 */ "vmovhpd", - /* 2BA */ "vmovhps", - /* 2BB */ "vmovlhps", - /* 2BC */ "vmovlpd", - /* 2BD */ "vmovlps", - /* 2BE */ "vmovmskpd", - /* 2BF */ "vmovmskps", - /* 2C0 */ "vmovntdq", - /* 2C1 */ "vmovntdqa", - /* 2C2 */ "vmovntpd", - /* 2C3 */ "vmovntps", - /* 2C4 */ "vmovq", - /* 2C5 */ "vmovsd", - /* 2C6 */ "vmovshdup", - /* 2C7 */ "vmovsldup", - /* 2C8 */ "vmovss", - /* 2C9 */ "vmovupd", - /* 2CA */ "vmovups", - /* 2CB */ "vmpsadbw", - /* 2CC */ "vmptrld", - /* 2CD */ "vmptrst", - /* 2CE */ "vmread", - /* 2CF */ "vmresume", - /* 2D0 */ "vmrun", - /* 2D1 */ "vmsave", - /* 2D2 */ "vmulpd", - /* 2D3 */ "vmulps", - /* 2D4 */ "vmulsd", - /* 2D5 */ "vmulss", - /* 2D6 */ "vmwrite", - /* 2D7 */ "vmxoff", - /* 2D8 */ "vmxon", - /* 2D9 */ "vorpd", - /* 2DA */ "vorps", - /* 2DB */ "vpabsb", - /* 2DC */ "vpabsd", - /* 2DD */ "vpabsw", - /* 2DE */ "vpackssdw", - /* 2DF */ "vpacksswb", - /* 2E0 */ "vpackusdw", - /* 2E1 */ "vpackuswb", - /* 2E2 */ "vpaddb", - /* 2E3 */ "vpaddd", - /* 2E4 */ "vpaddq", - /* 2E5 */ "vpaddsb", - /* 2E6 */ "vpaddsw", - /* 2E7 */ "vpaddusb", - /* 2E8 */ "vpaddusw", - /* 2E9 */ "vpaddw", - /* 2EA */ "vpalignr", - /* 2EB */ "vpand", - /* 2EC */ "vpandn", - /* 2ED */ "vpavgb", - /* 2EE */ "vpavgw", - /* 2EF */ "vpblendvb", - /* 2F0 */ "vpblendw", - /* 2F1 */ "vpclmulqdq", - /* 2F2 */ "vpcmpeqb", - /* 2F3 */ "vpcmpeqd", - /* 2F4 */ "vpcmpeqq", - /* 2F5 */ "vpcmpeqw", - /* 2F6 */ "vpcmpestri", - /* 2F7 */ "vpcmpestrm", - /* 2F8 */ "vpcmpgtb", - /* 2F9 */ "vpcmpgtd", - /* 2FA */ "vpcmpgtq", - /* 2FB */ "vpcmpgtw", - /* 2FC */ "vpcmpistri", - /* 2FD */ "vpcmpistrm", - /* 2FE */ "vperm2f128", - /* 2FF */ "vpermilpd", - /* 300 */ "vpermilps", - /* 301 */ "vpextrb", - /* 302 */ "vpextrd", - /* 303 */ "vpextrq", - /* 304 */ "vpextrw", - /* 305 */ "vphaddd", - /* 306 */ "vphaddsw", - /* 307 */ "vphaddw", - /* 308 */ "vphminposuw", - /* 309 */ "vphsubd", - /* 30A */ "vphsubsw", - /* 30B */ "vphsubw", - /* 30C */ "vpinsrb", - /* 30D */ "vpinsrd", - /* 30E */ "vpinsrq", - /* 30F */ "vpinsrw", - /* 310 */ "vpmaddubsw", - /* 311 */ "vpmaddwd", - /* 312 */ "vpmaxsb", - /* 313 */ "vpmaxsd", - /* 314 */ "vpmaxsw", - /* 315 */ "vpmaxub", - /* 316 */ "vpmaxud", - /* 317 */ "vpmaxuw", - /* 318 */ "vpminsb", - /* 319 */ "vpminsd", - /* 31A */ "vpminsw", - /* 31B */ "vpminub", - /* 31C */ "vpminud", - /* 31D */ "vpminuw", - /* 31E */ "vpmovmskb", - /* 31F */ "vpmovsxbd", - /* 320 */ "vpmovsxbq", - /* 321 */ "vpmovsxbw", - /* 322 */ "vpmovsxwd", - /* 323 */ "vpmovsxwq", - /* 324 */ "vpmovzxbd", - /* 325 */ "vpmovzxbq", - /* 326 */ "vpmovzxbw", - /* 327 */ "vpmovzxdq", - /* 328 */ "vpmovzxwd", - /* 329 */ "vpmovzxwq", - /* 32A */ "vpmuldq", - /* 32B */ "vpmulhrsw", - /* 32C */ "vpmulhuw", - /* 32D */ "vpmulhw", - /* 32E */ "vpmulld", - /* 32F */ "vpmullw", - /* 330 */ "vpor", - /* 331 */ "vpsadbw", - /* 332 */ "vpshufb", - /* 333 */ "vpshufd", - /* 334 */ "vpshufhw", - /* 335 */ "vpshuflw", - /* 336 */ "vpsignb", - /* 337 */ "vpsignd", - /* 338 */ "vpsignw", - /* 339 */ "vpslld", - /* 33A */ "vpslldq", - /* 33B */ "vpsllq", - /* 33C */ "vpsllw", - /* 33D */ "vpsrad", - /* 33E */ "vpsraw", - /* 33F */ "vpsrld", - /* 340 */ "vpsrldq", - /* 341 */ "vpsrlq", - /* 342 */ "vpsrlw", - /* 343 */ "vpsubb", - /* 344 */ "vpsubd", - /* 345 */ "vpsubq", - /* 346 */ "vpsubsb", - /* 347 */ "vpsubsw", - /* 348 */ "vpsubusb", - /* 349 */ "vpsubusw", - /* 34A */ "vpsubw", - /* 34B */ "vptest", - /* 34C */ "vpunpckhbw", - /* 34D */ "vpunpckhdq", - /* 34E */ "vpunpckhqdq", - /* 34F */ "vpunpckhwd", - /* 350 */ "vpunpcklbw", - /* 351 */ "vpunpckldq", - /* 352 */ "vpunpcklqdq", - /* 353 */ "vpunpcklwd", - /* 354 */ "vpxor", - /* 355 */ "vrcpps", - /* 356 */ "vrcpss", - /* 357 */ "vroundpd", - /* 358 */ "vroundps", - /* 359 */ "vroundsd", - /* 35A */ "vroundss", - /* 35B */ "vrsqrtps", - /* 35C */ "vrsqrtss", - /* 35D */ "vshufpd", - /* 35E */ "vshufps", - /* 35F */ "vsqrtpd", - /* 360 */ "vsqrtps", - /* 361 */ "vsqrtsd", - /* 362 */ "vsqrtss", - /* 363 */ "vstmxcsr", - /* 364 */ "vsubpd", - /* 365 */ "vsubps", - /* 366 */ "vsubsd", - /* 367 */ "vsubss", - /* 368 */ "vtestpd", - /* 369 */ "vtestps", - /* 36A */ "vucomisd", - /* 36B */ "vucomiss", - /* 36C */ "vunpckhpd", - /* 36D */ "vunpckhps", - /* 36E */ "vunpcklpd", - /* 36F */ "vunpcklps", - /* 370 */ "vxorpd", - /* 371 */ "vxorps", - /* 372 */ "vzeroall", - /* 373 */ "vzeroupper", - /* 374 */ "wait", - /* 375 */ "wbinvd", - /* 376 */ "wrmsr", - /* 377 */ "xadd", - /* 378 */ "xchg", - /* 379 */ "xcryptcbc", - /* 37A */ "xcryptcfb", - /* 37B */ "xcryptctr", - /* 37C */ "xcryptecb", - /* 37D */ "xcryptofb", - /* 37E */ "xgetbv", - /* 37F */ "xlatb", - /* 380 */ "xor", - /* 381 */ "xorpd", - /* 382 */ "xorps", - /* 383 */ "xrstor", - /* 384 */ "xsave", - /* 385 */ "xsetbv", - /* 386 */ "xsha1", - /* 387 */ "xsha256", - /* 388 */ "xstore", -}; - -} - -} diff --git a/CMakeLists.txt b/CMakeLists.txt index 096388b..d2a104b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.8.12) include(GenerateExportHeader) -project(VerteronDisassemblerEngine) +project(ZyanDisassemblerEngine) option(BUILD_SHARED_LIBS "Build shared libraries rather than static ones" FALSE) option(FORCE_SHARED_CRT diff --git a/Examples/C/SimpleDemo/SimpleDemo.c b/Examples/C/SimpleDemo/SimpleDemo.c new file mode 100644 index 0000000..94949b9 --- /dev/null +++ b/Examples/C/SimpleDemo/SimpleDemo.c @@ -0,0 +1,86 @@ +#include + +#include +#include + +int main() +{ + uint8_t data32[] = + { + 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x6A, 0xFE, 0x68, 0xD8, 0x18, 0x09, 0x77, 0x68, 0x85, 0xD2, + 0x09, 0x77, 0x64, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x50, 0x83, 0xEC, 0x14, 0x53, 0x56, 0x57, + 0xA1, 0x68, 0xEE, 0x13, 0x77, 0x31, 0x45, 0xF8, 0x33, 0xC5, 0x50, 0x8D, 0x45, 0xF0, 0x64, + 0xA3, 0x00, 0x00, 0x00, 0x00, 0x89, 0x65, 0xE8, 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x8B, 0x5D, 0x08, 0xF6, 0xC3, 0x04, 0x0F, 0x85, 0x57, 0x74, 0x00, 0x00, 0x53, 0x6A, 0x00, + 0xFF, 0x35, 0xA0, 0xE3, 0x13, 0x77, 0xFF, 0x15, 0x00, 0x10, 0x14, 0x77, 0x85, 0xC0, 0x0F, + 0x84, 0xC6, 0x48, 0x04, 0x00, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xFC, + 0xFE, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0x8B, 0x4D, 0xF0, 0x64, 0x89, 0x0D, 0x00, 0x00, 0x00, + 0x00, 0x59, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00 + }; + uint8_t data64[] = + { + 0x48, 0x89, 0x5C, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4C, 0x24, 0x08, 0x57, + 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xEC, 0x40, 0x4C, 0x8B, 0xF2, + 0x8B, 0xD9, 0x48, 0xC7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x33, 0xF6, 0x48, 0x89, + 0x74, 0x24, 0x30, 0x45, 0x33, 0xFF, 0xF7, 0xC1, 0x8D, 0xF0, 0xFF, 0xFF, 0x0F, 0x85, 0xAA, + 0x53, 0x08, 0x00, 0xF6, 0xC1, 0x40, 0x8B, 0xFE, 0x41, 0xBD, 0x08, 0x00, 0x00, 0x00, 0x41, + 0x0F, 0x45, 0xFD, 0xF6, 0xC1, 0x02, 0x48, 0x8B, 0x0D, 0x10, 0xD4, 0x0E, 0x00, 0x0F, 0x85, + 0x40, 0xE1, 0x01, 0x00, 0x8B, 0x15, 0x4C, 0xD5, 0x0E, 0x00, 0x81, 0xC2, 0x00, 0x00, 0x14, + 0x00, 0x0B, 0xD7, 0x4D, 0x8B, 0xC6, 0xFF, 0x15, 0x3B, 0x2F, 0x10, 0x00, 0x48, 0x8B, 0xD8, + 0x48, 0x85, 0xC0, 0x0F, 0x84, 0x93, 0x78, 0x0A, 0x00, 0x48, 0x8B, 0xC3, 0x48, 0x8B, 0x5C, + 0x24, 0x78, 0x48, 0x8B, 0xB4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0x40, 0x41, + 0x5F, 0x41, 0x5E, 0x41, 0x5D, 0x41, 0x5C, 0x5F, 0xC3 + }; + + ZydisInstructionInfo info; + ZydisInstructionDecoderContext* decoder = NULL; + ZydisBaseInstructionFormatterContext* formatter = NULL; + ZydisBaseInputContext* input32 = NULL; + ZydisBaseInputContext* input64 = NULL; + + decoder = ZydisInstructionDecoder_Create(); + formatter = ZydisIntelInstructionFormatter_Create(); + + input32 = ZydisMemoryInput_Create(&data32[0], sizeof(data32)); + input64 = ZydisMemoryInput_Create(&data64[0], sizeof(data64)); + + ZydisInstructionDecoder_SetDisassemblerMode(decoder, DM_M32BIT); + ZydisInstructionDecoder_SetDataSource(decoder, input32); + ZydisInstructionDecoder_SetInstructionPointer(decoder, 0x77091852); + + puts("32 bit test ...\n\n"); + while (ZydisInstructionDecoder_DecodeInstruction(decoder, &info)) + { + printf("%08X ", (uint32_t)(info.instrAddress & 0xFFFFFFFF)); + if (info.flags & ZYDIS_IF_ERROR_MASK) + { + printf("db %02X\n", info.data[0]); + } + else + { + printf("%s\n", ZydisBaseInstructionFormatter_FormatInstruction(formatter, &info)); + } + } + + puts("\n"); + + ZydisInstructionDecoder_SetDisassemblerMode(decoder, DM_M64BIT); + ZydisInstructionDecoder_SetDataSource(decoder, input64); + ZydisInstructionDecoder_SetInstructionPointer(decoder, 0x00007FFA39A81930ull); + puts("64 bit test ...\n\n"); + while (ZydisInstructionDecoder_DecodeInstruction(decoder, &info)) + { + printf("%016llX ", info.instrAddress); + if (info.flags & ZYDIS_IF_ERROR_MASK) + { + printf("db %02X", info.data[0]); + } + else + { + printf("%s\n", ZydisBaseInstructionFormatter_FormatInstruction(formatter, &info)); + } + } + + getchar(); + return 0; +} \ No newline at end of file diff --git a/Examples/CppBindings/Main.cpp b/Examples/CppBindings/Main.cpp deleted file mode 100644 index aab004c..0000000 --- a/Examples/CppBindings/Main.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : - - Last change : 29. October 2014 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ -#include -#include -#include - -#include - -using namespace Verteron; - -int main(int argc, char* argv[]) -{ - (void)argc; (void)argv; - - uint8_t data32[] = - { - 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x6A, 0xFE, 0x68, 0xD8, 0x18, 0x09, 0x77, 0x68, 0x85, 0xD2, - 0x09, 0x77, 0x64, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x50, 0x83, 0xEC, 0x14, 0x53, 0x56, 0x57, - 0xA1, 0x68, 0xEE, 0x13, 0x77, 0x31, 0x45, 0xF8, 0x33, 0xC5, 0x50, 0x8D, 0x45, 0xF0, 0x64, - 0xA3, 0x00, 0x00, 0x00, 0x00, 0x89, 0x65, 0xE8, 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x8B, 0x5D, 0x08, 0xF6, 0xC3, 0x04, 0x0F, 0x85, 0x57, 0x74, 0x00, 0x00, 0x53, 0x6A, 0x00, - 0xFF, 0x35, 0xA0, 0xE3, 0x13, 0x77, 0xFF, 0x15, 0x00, 0x10, 0x14, 0x77, 0x85, 0xC0, 0x0F, - 0x84, 0xC6, 0x48, 0x04, 0x00, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xFC, - 0xFE, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0x8B, 0x4D, 0xF0, 0x64, 0x89, 0x0D, 0x00, 0x00, 0x00, - 0x00, 0x59, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00 - }; - uint8_t data64[] = - { - 0x48, 0x89, 0x5C, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4C, 0x24, 0x08, 0x57, - 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xEC, 0x40, 0x4C, 0x8B, 0xF2, - 0x8B, 0xD9, 0x48, 0xC7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x33, 0xF6, 0x48, 0x89, - 0x74, 0x24, 0x30, 0x45, 0x33, 0xFF, 0xF7, 0xC1, 0x8D, 0xF0, 0xFF, 0xFF, 0x0F, 0x85, 0xAA, - 0x53, 0x08, 0x00, 0xF6, 0xC1, 0x40, 0x8B, 0xFE, 0x41, 0xBD, 0x08, 0x00, 0x00, 0x00, 0x41, - 0x0F, 0x45, 0xFD, 0xF6, 0xC1, 0x02, 0x48, 0x8B, 0x0D, 0x10, 0xD4, 0x0E, 0x00, 0x0F, 0x85, - 0x40, 0xE1, 0x01, 0x00, 0x8B, 0x15, 0x4C, 0xD5, 0x0E, 0x00, 0x81, 0xC2, 0x00, 0x00, 0x14, - 0x00, 0x0B, 0xD7, 0x4D, 0x8B, 0xC6, 0xFF, 0x15, 0x3B, 0x2F, 0x10, 0x00, 0x48, 0x8B, 0xD8, - 0x48, 0x85, 0xC0, 0x0F, 0x84, 0x93, 0x78, 0x0A, 0x00, 0x48, 0x8B, 0xC3, 0x48, 0x8B, 0x5C, - 0x24, 0x78, 0x48, 0x8B, 0xB4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0x40, 0x41, - 0x5F, 0x41, 0x5E, 0x41, 0x5D, 0x41, 0x5C, 0x5F, 0xC3 - }; - - VXInstructionInfo info; - VXInstructionDecoder decoder; - VXIntelInstructionFormatter formatter; - VXMemoryDataSource input32(&data32[0], sizeof(data32)); - VXMemoryDataSource input64(&data64[0], sizeof(data64)); - - decoder.setDisassemblerMode(VXDisassemblerMode::M32BIT); - decoder.setDataSource(&input32); - decoder.setInstructionPointer(0x77091852); - std::cout << "32 bit test ..." << std::endl << std::endl; - while (decoder.decodeInstruction(info)) - { - std::cout << std::hex << std::setw(8) << std::setfill('0') << std::uppercase - << info.instrAddress << " "; - if (info.flags & IF_ERROR_MASK) - { - std::cout << "db " << std::setw(2) << info.data[0]; - } else - { - std::cout << formatter.formatInstruction(info) << std::endl; - } - } - - std::cout << std::endl; - - decoder.setDisassemblerMode(VXDisassemblerMode::M64BIT); - decoder.setDataSource(&input64); - decoder.setInstructionPointer(0x00007FFA39A81930ull); - std::cout << "64 bit test ..." << std::endl << std::endl; - while (decoder.decodeInstruction(info)) - { - std::cout << std::hex << std::setw(16) << std::setfill('0') << std::uppercase - << info.instrAddress << " "; - if (info.flags & IF_ERROR_MASK) - { - std::cout << "db " << std::setw(2) << info.data[0]; - } else - { - std::cout << formatter.formatInstruction(info) << std::endl; - } - } - - std::cin.get(); - return 0; -} diff --git a/Examples/SimpleDemo/Main.c b/Examples/SimpleDemo/Main.c deleted file mode 100644 index 6196634..0000000 --- a/Examples/SimpleDemo/Main.c +++ /dev/null @@ -1,123 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 04. February 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#include - -#include -#include - -int main() -{ - uint8_t data32[] = - { - 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x6A, 0xFE, 0x68, 0xD8, 0x18, 0x09, 0x77, 0x68, 0x85, 0xD2, - 0x09, 0x77, 0x64, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x50, 0x83, 0xEC, 0x14, 0x53, 0x56, 0x57, - 0xA1, 0x68, 0xEE, 0x13, 0x77, 0x31, 0x45, 0xF8, 0x33, 0xC5, 0x50, 0x8D, 0x45, 0xF0, 0x64, - 0xA3, 0x00, 0x00, 0x00, 0x00, 0x89, 0x65, 0xE8, 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x8B, 0x5D, 0x08, 0xF6, 0xC3, 0x04, 0x0F, 0x85, 0x57, 0x74, 0x00, 0x00, 0x53, 0x6A, 0x00, - 0xFF, 0x35, 0xA0, 0xE3, 0x13, 0x77, 0xFF, 0x15, 0x00, 0x10, 0x14, 0x77, 0x85, 0xC0, 0x0F, - 0x84, 0xC6, 0x48, 0x04, 0x00, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xFC, - 0xFE, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0x8B, 0x4D, 0xF0, 0x64, 0x89, 0x0D, 0x00, 0x00, 0x00, - 0x00, 0x59, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00 - }; - uint8_t data64[] = - { - 0x48, 0x89, 0x5C, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4C, 0x24, 0x08, 0x57, - 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xEC, 0x40, 0x4C, 0x8B, 0xF2, - 0x8B, 0xD9, 0x48, 0xC7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x33, 0xF6, 0x48, 0x89, - 0x74, 0x24, 0x30, 0x45, 0x33, 0xFF, 0xF7, 0xC1, 0x8D, 0xF0, 0xFF, 0xFF, 0x0F, 0x85, 0xAA, - 0x53, 0x08, 0x00, 0xF6, 0xC1, 0x40, 0x8B, 0xFE, 0x41, 0xBD, 0x08, 0x00, 0x00, 0x00, 0x41, - 0x0F, 0x45, 0xFD, 0xF6, 0xC1, 0x02, 0x48, 0x8B, 0x0D, 0x10, 0xD4, 0x0E, 0x00, 0x0F, 0x85, - 0x40, 0xE1, 0x01, 0x00, 0x8B, 0x15, 0x4C, 0xD5, 0x0E, 0x00, 0x81, 0xC2, 0x00, 0x00, 0x14, - 0x00, 0x0B, 0xD7, 0x4D, 0x8B, 0xC6, 0xFF, 0x15, 0x3B, 0x2F, 0x10, 0x00, 0x48, 0x8B, 0xD8, - 0x48, 0x85, 0xC0, 0x0F, 0x84, 0x93, 0x78, 0x0A, 0x00, 0x48, 0x8B, 0xC3, 0x48, 0x8B, 0x5C, - 0x24, 0x78, 0x48, 0x8B, 0xB4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0x40, 0x41, - 0x5F, 0x41, 0x5E, 0x41, 0x5D, 0x41, 0x5C, 0x5F, 0xC3 - }; - - ZyDisInstructionInfo info; - ZyDisInstructionDecoderContext* decoder = NULL; - ZyDisBaseInstructionFormatterContext* formatter = NULL; - ZyDisBaseDataSourceContext* input32 = NULL; - ZyDisBaseDataSourceContext* input64 = NULL; - - decoder = ZyDisInstructionDecoder_Create(); - formatter = ZyDisIntelInstructionFormatter_Create(); - - input32 = ZyDisMemoryDataSource_Create(&data32[0], sizeof(data32)); - input64 = ZyDisMemoryDataSource_Create(&data64[0], sizeof(data64)); - - ZyDisInstructionDecoder_SetDisassemblerMode(decoder, DM_M32BIT); - ZyDisInstructionDecoder_SetDataSource(decoder, input32); - ZyDisInstructionDecoder_SetInstructionPointer(decoder, 0x77091852); - - puts("32 bit test ...\n\n"); - while (ZyDisInstructionDecoder_DecodeInstruction(decoder, &info)) - { - printf("%08X ", (uint32_t)(info.instrAddress & 0xFFFFFFFF)); - if (info.flags & IF_ERROR_MASK) - { - printf("db %02X\n", info.data[0]); - } - else - { - printf("%s\n", ZyDisBaseInstructionFormatter_FormatInstruction(formatter, &info)); - } - } - - puts("\n"); - - ZyDisInstructionDecoder_SetDisassemblerMode(decoder, DM_M64BIT); - ZyDisInstructionDecoder_SetDataSource(decoder, input64); - ZyDisInstructionDecoder_SetInstructionPointer(decoder, 0x00007FFA39A81930ull); - puts("64 bit test ...\n\n"); - while (ZyDisInstructionDecoder_DecodeInstruction(decoder, &info)) - { - printf("%016llX ", info.instrAddress); - if (info.flags & IF_ERROR_MASK) - { - printf("db %02X", info.data[0]); - } - else - { - printf("%s\n", ZyDisBaseInstructionFormatter_FormatInstruction(formatter, &info)); - } - } - - ZyDisBaseDataSource_Release(input32); - ZyDisBaseDataSource_Release(input64); - ZyDisBaseInstructionFormatter_Release(formatter); - ZyDisInstructionDecoder_Release(decoder); - - getchar(); - return 0; -} \ No newline at end of file diff --git a/Examples/SymbolResolver/Main.c b/Examples/SymbolResolver/Main.c deleted file mode 100644 index 763e5ad..0000000 --- a/Examples/SymbolResolver/Main.c +++ /dev/null @@ -1,195 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 19. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#include -#include - -int main(int argc, char* argv[]) -{ - ZYDIS_UNUSED(argc); ZYDIS_UNUSED(argv); - - // TODO: port to C - /* - - // Find module base in memory - void *moduleBase = GetModuleHandle("kernel32.dll"); - uintptr_t baseAddress = (uintptr_t)moduleBase; - - // Parse PE headers - PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)moduleBase; - if (dosHeader->e_magic != IMAGE_DOS_SIGNATURE) - { - return 1; - } - - PIMAGE_NT_HEADERS ntHeaders = (PIMAGE_NT_HEADERS)(baseAddress + dosHeader->e_lfanew); - if (ntHeaders->Signature != IMAGE_NT_SIGNATURE) - { - return 1; - } - // Initialize disassembler - ZyDisInstructionInfo info; - ZyDisInstructionDecoder decoder; - ZyDisExactSymbolResolver resolver; - ZyDisIntelInstructionFormatter formatter; -#ifdef _M_X64 - decoder.setDisassemblerMode(ZyDisDisassemblerMode::M64BIT); -#else - decoder.setDisassemblerMode(ZyDisDisassemblerMode::M32BIT); -#endif - formatter.setSymbolResolver(&resolver); - // Initialize output stream - std::ofstream out; - out.open(".\\output.txt"); - // Find all call and jump targets - uint64_t subCount = 0; - uint64_t locCount = 0; - PIMAGE_SECTION_HEADER sectionHeader = - reinterpret_cast( - reinterpret_cast(ntHeaders) + sizeof(IMAGE_NT_HEADERS) - + ntHeaders->FileHeader.SizeOfOptionalHeader - sizeof(IMAGE_OPTIONAL_HEADER)); - for (unsigned int i = 0; i < ntHeaders->FileHeader.NumberOfSections; ++i) - { - if (sectionHeader->Characteristics & IMAGE_SCN_CNT_CODE) - { - ZyDisMemoryDataSource input(reinterpret_cast( - baseAddress + sectionHeader->VirtualAddress), sectionHeader->SizeOfRawData); - decoder.setDataSource(&input); - decoder.setInstructionPointer(baseAddress + sectionHeader->VirtualAddress); - while (decoder.decodeInstruction(info)) - { - // Skip invalid and non-relative instructions - if ((info.flags & IF_ERROR_MASK) || !(info.flags & IF_RELATIVE)) - { - continue; - } - switch (info.mnemonic) - { - case ZyDisInstructionMnemonic::CALL: - resolver.setSymbol(VDECalcAbsoluteTarget(info, info.operand[0]), - std::string("sub_" + std::to_string(subCount)).c_str()); - subCount++; - break; - case ZyDisInstructionMnemonic::JMP: - case ZyDisInstructionMnemonic::JO: - case ZyDisInstructionMnemonic::JNO: - case ZyDisInstructionMnemonic::JB: - case ZyDisInstructionMnemonic::JNB: - case ZyDisInstructionMnemonic::JE: - case ZyDisInstructionMnemonic::JNE: - case ZyDisInstructionMnemonic::JBE: - case ZyDisInstructionMnemonic::JA: - case ZyDisInstructionMnemonic::JS: - case ZyDisInstructionMnemonic::JNS: - case ZyDisInstructionMnemonic::JP: - case ZyDisInstructionMnemonic::JNP: - case ZyDisInstructionMnemonic::JL: - case ZyDisInstructionMnemonic::JGE: - case ZyDisInstructionMnemonic::JLE: - case ZyDisInstructionMnemonic::JG: - case ZyDisInstructionMnemonic::JCXZ: - case ZyDisInstructionMnemonic::JECXZ: - case ZyDisInstructionMnemonic::JRCXZ: - resolver.setSymbol(VDECalcAbsoluteTarget(info, info.operand[0]), - std::string("loc_" + std::to_string(locCount)).c_str()); - locCount++; - break; - default: - break; - } - } - } - sectionHeader++; - } - // Add entry point symbol - resolver.setSymbol(baseAddress + ntHeaders->OptionalHeader.AddressOfEntryPoint, "EntryPoint"); - // Add exported symbols - if (ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress > 0) - { - PIMAGE_EXPORT_DIRECTORY exports = - reinterpret_cast(reinterpret_cast(baseAddress) + - ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); - PDWORD address = - reinterpret_cast(reinterpret_cast(baseAddress) + - exports->AddressOfFunctions); - PDWORD name = - reinterpret_cast(reinterpret_cast(baseAddress) + - exports->AddressOfNames); - PWORD ordinal = - reinterpret_cast(reinterpret_cast(baseAddress) + - exports->AddressOfNameOrdinals); - for(unsigned int i = 0; i < exports->NumberOfNames; ++i) - { - resolver.setSymbol(baseAddress + address[ordinal[i]], - reinterpret_cast(baseAddress) + name[i]); - } - } - // Disassemble - sectionHeader = - reinterpret_cast( - reinterpret_cast(ntHeaders) + sizeof(IMAGE_NT_HEADERS) - + ntHeaders->FileHeader.SizeOfOptionalHeader - sizeof(IMAGE_OPTIONAL_HEADER)); - for (unsigned int i = 0; i < ntHeaders->FileHeader.NumberOfSections; ++i) - { - if (sectionHeader->Characteristics & IMAGE_SCN_CNT_CODE) - { - ZyDisMemoryDataSource input(reinterpret_cast( - baseAddress + sectionHeader->VirtualAddress), sectionHeader->SizeOfRawData); - decoder.setDataSource(&input); - decoder.setInstructionPointer(baseAddress + sectionHeader->VirtualAddress); - while (decoder.decodeInstruction(info)) - { - uint64_t offset; - const char *symbol = resolver.resolveSymbol(info, info.instrAddress, offset); - if (symbol) - { - out << symbol << ": " << std::endl; - } - out << " " << std::hex << std::setw(16) << std::setfill('0') - << info.instrAddress << " "; - if (info.flags & IF_ERROR_MASK) - { - out << "db " << std::hex << std::setw(2) << std::setfill('0') - << static_cast(info.data[0]) << std::endl; - } else - { - out << formatter.formatInstruction(info) << std::endl; - } - } - } - sectionHeader++; - } - out.close(); - */ - - return 0; -} diff --git a/README.md b/README.md index 1d0c629..724620a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Verteron Disassembler Engine (VDE) +Zyan Disassembler Engine (Zydis) ================================== Fast and lightweight x86/x86-64 disassembler library. @@ -18,15 +18,15 @@ Fast and lightweight x86/x86-64 disassembler library. ## Quick Example ## -The following example program uses VDE to disassemble a given memory buffer and prints the output to the console. +The following example program uses Zydis to disassemble a given memory buffer and prints the output to the console. ```C++ #include #include #include -#include "VXDisassembler.h" +#include "Zydis.hpp" -using namespace Verteron; +using namespace Zydis; int _tmain(int argc, _TCHAR* argv[]) { @@ -34,13 +34,13 @@ int _tmain(int argc, _TCHAR* argv[]) { 0x90, 0xE9, 0x00, 0x00, 0x00, 0x00, 0xC3 }; - VXMemoryDataSource input(&data[0], sizeof(data)); - VXInstructionInfo info; - VXInstructionDecoder decoder; - decoder.setDisassemblerMode(VXDisassemblerMode::M32BIT); + MemoryInput input(&data[0], sizeof(data)); + InstructionInfo info; + InstructionDecoder decoder; + decoder.setDisassemblerMode(ZydisMode::M32BIT); decoder.setDataSource(&input); decoder.setInstructionPointer(0); - VXIntelInstructionFormatter formatter; + IntelInstructionFormatter formatter; while (decoder.decodeInstruction(info)) { std::cout << formatter.formatInstruction(info) << std::endl; @@ -50,8 +50,8 @@ int _tmain(int argc, _TCHAR* argv[]) ## Compilation ## -- While VDE supports other compilers in theory, compilation has not been tested with any compiler other than MSVC12 (Visual Studio 2013) +- While Zydis supports other compilers in theory, compilation has not been tested with any compiler other than MSVC12 (Visual Studio 2013) - Multi-compiler support might be added in the future ## License ## -Verteron Disassembler Engine is licensed under the MIT License. Dependencies are under their respective licenses. +Zyan Disassembler Engine is licensed under the MIT License. Dependencies are under their respective licenses. diff --git a/VerteronDisassemblerEngine/ZyDisDisassembler.h b/VerteronDisassemblerEngine/ZyDisDisassembler.h deleted file mode 100644 index 3e4bb81..0000000 --- a/VerteronDisassemblerEngine/ZyDisDisassembler.h +++ /dev/null @@ -1,41 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 04. February 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - - **************************************************************************************************/ - -#ifndef _VDE_ZyDisDISASSEMBLERC_H_ -#define _VDE_ZyDisDISASSEMBLERC_H_ - -#include "ZyDisDisassemblerTypes.h" -#include "ZyDisInstructionDecoder.h" -#include "ZyDisInstructionFormatter.h" -#include "ZyDisDisassemblerUtils.h" - -#endif /* _VDE_ZyDisDISASSEMBLERC_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisDisassemblerUtils.c b/VerteronDisassemblerEngine/ZyDisDisassemblerUtils.c deleted file mode 100644 index 5b9534f..0000000 --- a/VerteronDisassemblerEngine/ZyDisDisassemblerUtils.c +++ /dev/null @@ -1,74 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 13. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#include "ZyDisDisassemblerUtils.h" - -#include - -uint64_t ZyDisCalcAbsoluteTarget(const ZyDisInstructionInfo *info, const ZyDisOperandInfo *operand) -{ - assert((operand->type == OPTYPE_REL_IMMEDIATE) || - ((operand->type == OPTYPE_MEMORY) && (operand->base == REG_RIP))); - - uint64_t truncMask = 0xFFFFFFFFFFFFFFFFull; - if (!(info->flags & IF_DISASSEMBLER_MODE_64)) - { - truncMask >>= (64 - info->operand_mode); - } - - uint16_t size = operand->size; - if ((operand->type == OPTYPE_MEMORY) && (operand->base == REG_RIP)) - { - size = operand->offset; - } - - switch (size) - { - case 8: - return (info->instrPointer + operand->lval.sbyte) & truncMask; - case 16: - { - uint32_t delta = operand->lval.sword & truncMask; - if ((info->instrPointer + delta) > 0xFFFF) - { - return (info->instrPointer & 0xF0000) + ((info->instrPointer + delta) & 0xFFFF); - } - return info->instrPointer + delta; - } - case 32: - return (info->instrPointer + operand->lval.sdword) & truncMask; - default: - assert(0); - } - - return 0; -} \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisInstructionDecoder.c b/VerteronDisassemblerEngine/ZyDisInstructionDecoder.c deleted file mode 100644 index 0e24db0..0000000 --- a/VerteronDisassemblerEngine/ZyDisInstructionDecoder.c +++ /dev/null @@ -1,2122 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 19. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#include "ZyDisInstructionDecoder.h" -#include "ZyDisInternalHelpers.h" -#include "ZyDisOpcodeTableInternal.h" - -#include -#include -#include - -/* Internal interface ========================================================================== */ - -/* ZyDisBaseDataSource ---------------------------------------------------------------------------- */ - -typedef struct _ZyDisBaseDataSource -{ - uint8_t currentInput; - ZyDisBaseDataSource_DestructionCallback destruct; // may be NULL - ZyDisBaseDataSource_InputCallback internalInputPeek; - ZyDisBaseDataSource_InputCallback internalInputNext; - ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInput; - ZyDisBaseDataSource_GetPositionCallback getPosition; - ZyDisBaseDataSource_SetPositionCallback setPosition; -} ZyDisBaseDataSource; - -/** - * @brief Constructor. - * @param ctx The context. - */ -static void ZyDisBaseDataSource_Construct(ZyDisBaseDataSourceContext *ctx); - -/** - * @brief Destructor. - * @param ctx The context. - */ -static void ZyDisBaseDataSource_Destruct(ZyDisBaseDataSourceContext *ctx); - -/* ZyDisMemoryDataSource -------------------------------------------------------------------------- */ - -typedef struct _ZyDisMemoryDataSource -{ - ZyDisBaseDataSource super; - const void *inputBuffer; - uint64_t inputBufferLen; - uint64_t inputBufferPos; -} ZyDisMemoryDataSource; - -/** - * @brief Constructor. - * @param ctx The context. - * @param buffer The buffer. - * @param bufferLen Length of the buffer. - */ -static void ZyDisMemoryDataSource_Construct(ZyDisBaseDataSourceContext *ctx, const void* buffer, - size_t bufferLen); - -/** - * @brief Destructor. - * @param ctx The context. - */ -static void ZyDisMemoryDataSource_Destruct(ZyDisBaseDataSourceContext *ctx); - -/** - * @brief Reads the next byte from the data source. - * @param ctx The context. - * @return The current input byte. - * This method increases the current input position by one. - */ -static uint8_t ZyDisMemoryDataSource_InternalInputPeek(ZyDisBaseDataSourceContext *ctx); - -/** - * @brief Reads the next byte from the data source. - * @param ctx The context. - * @return The current input byte. - * This method does NOT increase the current input position. - */ -static uint8_t ZyDisMemoryDataSource_InternalInputNext(ZyDisBaseDataSourceContext *ctx); - -/** - * @copydoc ZyDisBaseDataSource_IsEndOfInput - */ -static bool ZyDisMemoryDataSource_IsEndOfInput(const ZyDisBaseDataSourceContext *ctx); - -/** - * @copydoc ZyDisBaseDataSource_GetPosition - */ -static uint64_t ZyDisMemoryDataSource_GetPosition(const ZyDisBaseDataSourceContext *ctx); - -/** - * @copydoc ZyDisBaseDataSource_SetPosition - */ -static bool ZyDisMemoryDataSource_SetPosition(ZyDisBaseDataSourceContext *ctx, uint64_t position); - -/* ZyDisCustomDataSource -------------------------------------------------------------------------- */ - -typedef struct _ZyDisCustomDataSource -{ - ZyDisBaseDataSource super; - ZyDisBaseDataSource_DestructionCallback userDestruct; // may be NULL -} ZyDisCustomDataSource; - -/** - * @brief Constructor. - * @param ctx The context. - * @param inputPeekCb The callback peeking the next input byte. - * @param inputNextCb The callback consuming the next input byte. - * @param isEndOfInputCb The callback determining if the end of input was reached. - * @param getPositionCb The callback obtaining the current input position. - * @param setPositionCb The callback setting the current input position. - * @param destructionCb The destruction callback. May be @c NULL. - */ -static void ZyDisCustomDataSource_Construct(ZyDisBaseDataSourceContext *ctx, - ZyDisBaseDataSource_InputCallback inputPeekCb, - ZyDisBaseDataSource_InputCallback inputNextCb, - ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInputCb, - ZyDisBaseDataSource_GetPositionCallback getPositionCb, - ZyDisBaseDataSource_SetPositionCallback setPositionCb, - ZyDisBaseDataSource_DestructionCallback destructionCb); - -/** - * @brief Destructor. - * @param The context. - */ -static void ZyDisCustomDataSource_Destruct(ZyDisBaseDataSourceContext *ctx); - -/* ZyDisInstructionDecoder ------------------------------------------------------------------------ */ - -typedef struct _ZyDisInstructionDecoder -{ - ZyDisBaseDataSourceContext *dataSource; - ZyDisDisassemblerMode disassemblerMode; - ZyDisInstructionSetVendor preferredVendor; - uint64_t instructionPointer; -} ZyDisInstructionDecoder; - -typedef enum _ZyDisRegisterClass /* : uint8_t */ -{ - RC_GENERAL_PURPOSE, - RC_MMX, - RC_CONTROL, - RC_DEBUG, - RC_SEGMENT, - RC_XMM -} ZyDisRegisterClass; - -/** - * @brief Reads the next byte from the data source. - * @param ctx The context. - * @param info The instruction info. - * @return The current input byte. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - * This method does NOT increase the current input position or the @c length field of the - * @c info parameter. - */ -static uint8_t ZyDisInstructionDecoder_InputPeek(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @brief Reads the next byte(s) from the data source. - * @param ctx The context. - * @param info The instruction info. - * @return The current input data. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - * This method increases the current input position and the @c length field of the @info - * parameter. This method also appends the new byte(s) to to @c data field of the @c info - * parameter. - */ -static uint8_t ZyDisInstructionDecoder_InputNext8(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @copydoc ZyDisInstructionDecoder_InputNext8 - */ -static uint16_t ZyDisInstructionDecoder_InputNext16(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @copydoc ZyDisInstructionDecoder_InputNext8 - */ -static uint32_t ZyDisInstructionDecoder_InputNext32(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @copydoc ZyDisInstructionDecoder_InputNext8 - */ -static uint64_t ZyDisInstructionDecoder_InputNext64(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @brief Returns the current input byte. - * @param ctx The context. - * @return The current input byte. - * The current input byte is set everytime the @c ZyDisInstructionDecoder_InputPeek or - * @c ZyDisInstructionDecoder_InputNextXX function is called. - */ -static uint8_t ZyDisInstructionDecoder_InputCurrent(const ZyDisInstructionDecoderContext *ctx); - -/** - * @brief Decodes a register operand. - * @param ctx The context. - * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. - * @param registerClass The register class to use. - * @param registerId The register id. - * @param operandSize The defined size of the operand. - * @return @c true if it succeeds, @c false if it fails. - */ -static bool ZyDisInstructionDecoder_DecodeRegisterOperand(const ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisRegisterClass registerClass, - uint8_t registerId, ZyDisDefinedOperandSize operandSize); - -/** - * @brief Decodes a register/memory operand. - * @param ctx The context. - * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. - * @param registerClass The register class to use. - * @param operandSize The defined size of the operand. - * @return @c true if it succeeds, @c false if it fails. - */ -static bool ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisRegisterClass registerClass, - ZyDisDefinedOperandSize operandSize); - -/** - * @brief Decodes an immediate operand. - * @param ctx The context. - * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. - * @param operandSize The defined size of the operand. - * @return @c true if it succeeds, @c false if it fails. - */ -static bool ZyDisInstructionDecoder_DecodeImmediate(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisDefinedOperandSize operandSize); - -/** - * @brief Decodes a displacement operand. - * @param ctx The context. - * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. - * @param size The size of the displacement data. - * @return @c true if it succeeds, @c false if it fails. - */ -static bool ZyDisInstructionDecoder_DecodeDisplacement(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, uint8_t size); - -/** - * @brief Decodes the ModRM field of the instruction. - * @param ctx The context. - * @param The @c ZyDisInstructionInfo struct that receives the decoded data. - * @return @c true if it succeeds, @c false if it fails. - * This method reads an additional input byte. - */ -static bool ZyDisInstructionDecoder_DecodeModrm(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @brief Decodes the SIB field of the instruction. - * @param ctx The context. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. - * @return @c true if it succeeds, @c false if it fails.1 - * This method reads an additional input byte. - */ -static bool ZyDisInstructionDecoder_DecodeSIB(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @brief Decodes VEX prefix of the instruction. - * @param ctx The context. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. - * @return @c true if it succeeds, @c false if it fails. - * This method takes the current input byte to determine the vex prefix type and reads one or - * two additional input bytes on demand. - */ -static bool ZyDisInstructionDecoder_DecodeVex(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @brief Returns the effective operand size. - * @param ctx The context. - * @param info The instruction info. - * @param operandSize The defined operand size. - * @return The effective operand size. - */ -static uint16_t ZyDisInstructionDecoder_GetEffectiveOperandSize( - const ZyDisInstructionDecoderContext *ctx, const ZyDisInstructionInfo *info, - ZyDisDefinedOperandSize operandSize); - -/** - * @brief Decodes all instruction operands. - * @param ctx The context. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. - * @return @c true if it succeeds, @c false if it fails. - */ -static bool ZyDisInstructionDecoder_DecodeOperands(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @brief Decodes the specified instruction operand. - * @param ctx The context. - * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. - * @param operandType The defined type of the operand. - * @param operandSize The defined size of the operand. - * @return @c true if it succeeds, @c false if it fails. - */ -static bool ZyDisInstructionDecoder_DecodeOperand(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisDefinedOperandType operandType, - ZyDisDefinedOperandSize operandSize); - -/** - * @brief Resolves the effective operand and address mode of the instruction. - * @param ctx The context. - * @param info The @c ZyDisInstructionInfo struct that receives the effective operand and - * address mode. - * @remarks This function requires a non-null value in the @c instrDefinition field of the - * @c info struct. - */ -static void ZyDisInstructionDecoder_ResolveOperandAndAddressMode( - const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info); - -/** - * @brief Calculates the effective REX/VEX.w, r, x, b, l values. - * @param ctx The context. - * @param info The @c ZyDisInstructionInfo struct that receives the effective operand and - * address mode. - * @remarks This method requires a non-null value in the @c instrDefinition field of the - * @c info struct. - */ -static void ZyDisInstructionDecoder_CalculateEffectiveRexVexValues( - const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info); - -/** - * @brief Collects and decodes optional instruction prefixes. - * @param ctx The context. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. - * @return @c true if it succeeds, @c false if it fails. - */ -static bool ZyDisInstructionDecoder_DecodePrefixes(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/** - * @brief Collects and decodes the instruction opcodes using the opcode tree. - * @param ctx The context. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. - * @return @c true if it succeeds, @c false if it fails. - */ -static bool ZyDisInstructionDecoder_DecodeOpcode(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info); - -/* Implementation ============================================================================== */ - -/* ZyDisBaseDataSource ---------------------------------------------------------------------------- */ - -static void ZyDisBaseDataSource_Construct(ZyDisBaseDataSourceContext *ctx) -{ - ZyDisBaseDataSource *thiz = ZyDisBaseDataSource_thiz(ctx); - memset(thiz, 0, sizeof(*thiz)); -} - -static void ZyDisBaseDataSource_Destruct(ZyDisBaseDataSourceContext *ctx) -{ - ZYDIS_UNUSED(ctx); -} - -void ZyDisBaseDataSource_Release(ZyDisBaseDataSourceContext *ctx) -{ - ZyDisBaseDataSource *thiz = ZyDisBaseDataSource_thiz(ctx); - - if (thiz->destruct) - { - thiz->destruct(ctx); - } - - free(thiz); - free(ctx); -} - -uint8_t ZyDisBaseDataSource_InputPeek(ZyDisBaseDataSourceContext *ctx, ZyDisInstructionInfo *info) -{ - ZyDisBaseDataSource *thiz = ZyDisBaseDataSource_thiz(ctx); - - if (info->length == 15) - { - info->flags |= IF_ERROR_LENGTH; - return 0; - } - if (ZyDisBaseDataSource_IsEndOfInput(ctx)) - { - info->flags |= IF_ERROR_END_OF_INPUT; - return 0; - } - - thiz->currentInput = thiz->internalInputPeek(ctx); - return thiz->currentInput; -} - -uint8_t ZyDisBaseDataSource_InputNext8(ZyDisBaseDataSourceContext *ctx, ZyDisInstructionInfo *info) -{ - ZyDisBaseDataSource *thiz = ZyDisBaseDataSource_thiz(ctx); - - if (info->length == 15) - { - info->flags |= IF_ERROR_LENGTH; - return 0; - } - if (ZyDisBaseDataSource_IsEndOfInput(ctx)) - { - info->flags |= IF_ERROR_END_OF_INPUT; - return 0; - } - thiz->currentInput = thiz->internalInputNext(ctx); - info->data[info->length] = thiz->currentInput; - info->length++; - return thiz->currentInput; -} - -#define ZyDisBASEDATASOURCE_INPUTNEXT_N(n) \ - uint##n##_t ZyDisBaseDataSource_InputNext##n( \ - ZyDisBaseDataSourceContext *ctx, ZyDisInstructionInfo *info) \ - { \ - uint##n##_t result = 0; \ - for (unsigned i = 0; i < (sizeof(uint##n##_t) / sizeof(uint8_t)); ++i) \ - { \ - uint##n##_t b = ZyDisBaseDataSource_InputNext8(ctx, info); \ - if (!b && (info->flags & IF_ERROR_MASK)) \ - { \ - return 0; \ - } \ - result |= (b << (i * 8)); \ - } \ - return result; \ - } - -ZyDisBASEDATASOURCE_INPUTNEXT_N(16) -ZyDisBASEDATASOURCE_INPUTNEXT_N(32) -ZyDisBASEDATASOURCE_INPUTNEXT_N(64) -#undef ZyDisBASEDATASOURCE_INPUTNEXT_N - -uint8_t ZyDisBaseDataSource_InputCurrent(const ZyDisBaseDataSourceContext *ctx) -{ - return ZyDisBaseDataSource_cthiz(ctx)->currentInput; -} - -bool ZyDisBaseDataSource_IsEndOfInput(const ZyDisBaseDataSourceContext *ctx) -{ - assert(ZyDisBaseDataSource_cthiz(ctx)->isEndOfInput); - return ZyDisBaseDataSource_cthiz(ctx)->isEndOfInput(ctx); -} - -uint64_t ZyDisBaseDataSource_GetPosition(const ZyDisBaseDataSourceContext *ctx) -{ - assert(ZyDisBaseDataSource_cthiz(ctx)->getPosition); - return ZyDisBaseDataSource_cthiz(ctx)->getPosition(ctx); -} - -bool ZyDisBaseDataSource_SetPosition(ZyDisBaseDataSourceContext *ctx, uint64_t position) -{ - assert(ZyDisBaseDataSource_thiz(ctx)->setPosition); - return ZyDisBaseDataSource_thiz(ctx)->setPosition(ctx, position); -} - -/* ZyDisMemoryDataSource -------------------------------------------------------------------------- */ - -void ZyDisMemoryDataSource_Construct( - ZyDisBaseDataSourceContext *ctx, const void* buffer, size_t bufferLen) -{ - ZyDisBaseDataSource_Construct(ctx); - ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_thiz(ctx); - - thiz->super.destruct = &ZyDisMemoryDataSource_Destruct; - thiz->super.internalInputPeek = &ZyDisMemoryDataSource_InternalInputPeek; - thiz->super.internalInputNext = &ZyDisMemoryDataSource_InternalInputNext; - thiz->super.isEndOfInput = &ZyDisMemoryDataSource_IsEndOfInput; - thiz->super.getPosition = &ZyDisMemoryDataSource_GetPosition; - thiz->super.setPosition = &ZyDisMemoryDataSource_SetPosition; - - thiz->inputBuffer = buffer; - thiz->inputBufferLen = bufferLen; - thiz->inputBufferPos = 0; -} - -void ZyDisMemoryDataSource_Destruct(ZyDisBaseDataSourceContext *ctx) -{ - // Nothing to destruct ourselfes, just call parent destructor - ZyDisBaseDataSource_Destruct(ctx); -} - -ZyDisBaseDataSourceContext* ZyDisMemoryDataSource_Create( - const void* buffer, size_t bufferLen) -{ - ZyDisMemoryDataSource *thiz = malloc(sizeof(ZyDisMemoryDataSource)); - ZyDisBaseDataSourceContext *ctx = malloc(sizeof(ZyDisBaseDataSourceContext)); - - if (!thiz || !ctx) - { - if (thiz) - { - free(thiz); - } - if (ctx) - { - free(ctx); - } - - return NULL; - } - - ctx->d.type = TYPE_MEMORYDATASOURCE; - ctx->d.ptr = thiz; - - ZyDisMemoryDataSource_Construct(ctx, buffer, bufferLen); - - return ctx; -} - -static uint8_t ZyDisMemoryDataSource_InternalInputPeek(ZyDisBaseDataSourceContext *ctx) -{ - ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_thiz(ctx); - return *((const uint8_t*)thiz->inputBuffer + thiz->inputBufferPos); -} - -static uint8_t ZyDisMemoryDataSource_InternalInputNext(ZyDisBaseDataSourceContext *ctx) -{ - ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_thiz(ctx); - ++thiz->inputBufferPos; - return *((const uint8_t*)thiz->inputBuffer + thiz->inputBufferPos - 1); -} - -static bool ZyDisMemoryDataSource_IsEndOfInput(const ZyDisBaseDataSourceContext *ctx) -{ - const ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_cthiz(ctx); - return (thiz->inputBufferPos >= thiz->inputBufferLen); -} - -static uint64_t ZyDisMemoryDataSource_GetPosition(const ZyDisBaseDataSourceContext *ctx) -{ - return ZyDisMemoryDataSource_cthiz(ctx)->inputBufferPos; -} - -static bool ZyDisMemoryDataSource_SetPosition(ZyDisBaseDataSourceContext *ctx, uint64_t position) -{ - ZyDisMemoryDataSource *thiz = ZyDisMemoryDataSource_thiz(ctx); - thiz->inputBufferPos = position; - return thiz->super.isEndOfInput(ctx); -} - -/* ZyDisCustomDataSource -------------------------------------------------------------------------- */ - -static void ZyDisCustomDataSource_Construct(ZyDisBaseDataSourceContext *ctx, - ZyDisBaseDataSource_InputCallback inputPeekCb, - ZyDisBaseDataSource_InputCallback inputNextCb, - ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInputCb, - ZyDisBaseDataSource_GetPositionCallback getPositionCb, - ZyDisBaseDataSource_SetPositionCallback setPositionCb, - ZyDisBaseDataSource_DestructionCallback destructionCb) -{ - ZyDisBaseDataSource_Construct(ctx); - - ZyDisCustomDataSource *thiz = ZyDisCustomDataSource_thiz(ctx); - thiz->super.destruct = &ZyDisCustomDataSource_Destruct; - thiz->super.internalInputPeek = inputPeekCb; - thiz->super.internalInputNext = inputNextCb; - thiz->super.isEndOfInput = isEndOfInputCb; - thiz->super.getPosition = getPositionCb; - thiz->super.setPosition = setPositionCb; - - thiz->userDestruct = destructionCb; -} - -static void ZyDisCustomDataSource_Destruct(ZyDisBaseDataSourceContext *ctx) -{ - ZyDisCustomDataSource *thiz = ZyDisCustomDataSource_thiz(ctx); - - if (thiz->userDestruct) - { - thiz->userDestruct(ctx); - } - - ZyDisBaseDataSource_Destruct(ctx); -} - -ZyDisBaseDataSourceContext* ZyDisCustomDataSource_Create( - ZyDisBaseDataSource_InputCallback inputPeekCb, - ZyDisBaseDataSource_InputCallback inputNextCb, - ZyDisBaseDataSource_IsEndOfInputCallback isEndOfInputCb, - ZyDisBaseDataSource_GetPositionCallback getPositionCb, - ZyDisBaseDataSource_SetPositionCallback setPositionCb, - ZyDisBaseDataSource_DestructionCallback destructionCb) -{ - ZyDisCustomDataSource *thiz = malloc(sizeof(ZyDisCustomDataSource)); - ZyDisBaseDataSourceContext *ctx = malloc(sizeof(ZyDisBaseDataSourceContext)); - - if (!thiz || !ctx) - { - if (thiz) - { - free(thiz); - } - if (ctx) - { - free(ctx); - } - - return NULL; - } - - ctx->d.type = TYPE_CUSTOMDATASOURCE; - ctx->d.ptr = thiz; - - ZyDisCustomDataSource_Construct(ctx, inputPeekCb, inputNextCb, isEndOfInputCb, getPositionCb, - setPositionCb, destructionCb); - - return ctx; -} - -/* ZyDisInstructionDecoder ------------------------------------------------------------------------ */ - -void ZyDisInstructionDecoder_Construct(ZyDisInstructionDecoderContext *ctx, - ZyDisBaseDataSourceContext *input, ZyDisDisassemblerMode disassemblerMode, - ZyDisInstructionSetVendor preferredVendor, uint64_t instructionPointer) -{ - ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); - - thiz->dataSource = input; - thiz->disassemblerMode = disassemblerMode; - thiz->preferredVendor = preferredVendor; - thiz->instructionPointer = instructionPointer; -} - -void ZyDisInstructionDecoder_Destruct(ZyDisInstructionDecoderContext *ctx) -{ - ZYDIS_UNUSED(ctx); -} - -ZyDisInstructionDecoderContext* ZyDisInstructionDecoder_Create(void) -{ - return ZyDisInstructionDecoder_CreateEx(NULL, DM_M32BIT, ISV_ANY, 0); -} - -ZyDisInstructionDecoderContext* ZyDisInstructionDecoder_CreateEx(ZyDisBaseDataSourceContext *input, - ZyDisDisassemblerMode disassemblerMode, ZyDisInstructionSetVendor preferredVendor, - uint64_t instructionPointer) -{ - ZyDisInstructionDecoder *thiz = malloc(sizeof(ZyDisInstructionDecoder)); - ZyDisInstructionDecoderContext *ctx = malloc(sizeof(ZyDisInstructionDecoderContext)); - - if (!thiz || !ctx) - { - if (thiz) - { - free(thiz); - } - if (ctx) - { - free(ctx); - } - - return NULL; - } - - ctx->d.ptr = thiz; - ctx->d.type = TYPE_INSTRUCTIONDECODER; - - ZyDisInstructionDecoder_Construct(ctx, input, disassemblerMode, - preferredVendor, instructionPointer); - - return ctx; -} - -void ZyDisInstructionDecoder_Release(ZyDisInstructionDecoderContext *ctx) -{ - ZyDisInstructionDecoder_Destruct(ctx); - - free(ctx->d.ptr); - free(ctx); -} - -static uint8_t ZyDisInstructionDecoder_InputPeek( - ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info) -{ - ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); - - if (!thiz->dataSource) - { - info->flags |= IF_ERROR_END_OF_INPUT; - return 0; - } - - return ZyDisBaseDataSource_InputPeek(thiz->dataSource, info); -} - -#define ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(n) \ - static uint##n##_t ZyDisInstructionDecoder_InputNext##n( \ - ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info) \ - { \ - ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); \ - \ - if (!thiz->dataSource) \ - { \ - info->flags |= IF_ERROR_END_OF_INPUT; \ - return 0; \ - } \ - \ - return ZyDisBaseDataSource_InputNext##n(thiz->dataSource, info); \ - } - -ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(8) -ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(16) -ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(32) -ZyDisINSTRUCTIONDECODER_INPUTNEXT_N(64) -#undef ZyDisINSTRUCTIONDECODER_INPUTNEXT_N - -static uint8_t ZyDisInstructionDecoder_InputCurrent(const ZyDisInstructionDecoderContext *ctx) -{ - const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_cthiz(ctx); - - if (!thiz->dataSource) - { - return 0; - } - - return ZyDisBaseDataSource_InputCurrent(thiz->dataSource); -} - -ZyDisBaseDataSourceContext* ZyDisInstructionDecoder_GetDataSource( - const ZyDisInstructionDecoderContext *ctx) -{ - return ZyDisInstructionDecoder_cthiz(ctx)->dataSource; -} - -void ZyDisInstructionDecoder_SetDataSource( - ZyDisInstructionDecoderContext *ctx, ZyDisBaseDataSourceContext *input) -{ - ZyDisInstructionDecoder_thiz(ctx)->dataSource = input; -} - -ZyDisDisassemblerMode ZyDisInstructionDecoder_GetDisassemblerMode( - const ZyDisInstructionDecoderContext *ctx) -{ - return ZyDisInstructionDecoder_cthiz(ctx)->disassemblerMode; -} - -void ZyDisInstructionDecoder_SetDisassemblerMode(ZyDisInstructionDecoderContext *ctx, - ZyDisDisassemblerMode disassemblerMode) -{ - ZyDisInstructionDecoder_thiz(ctx)->disassemblerMode = disassemblerMode; -} - -ZyDisInstructionSetVendor ZyDisInstructionDecoder_GetPreferredVendor( - const ZyDisInstructionDecoderContext *ctx) -{ - return ZyDisInstructionDecoder_cthiz(ctx)->preferredVendor; -} - -void ZyDisInstructionDecoder_SetPreferredVendor(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionSetVendor preferredVendor) -{ - ZyDisInstructionDecoder_thiz(ctx)->preferredVendor = preferredVendor; -} - -uint64_t ZyDisInstructionDecoder_GetInstructionPointer( - const ZyDisInstructionDecoderContext *ctx) -{ - return ZyDisInstructionDecoder_cthiz(ctx)->instructionPointer; -} - -void ZyDisInstructionDecoder_SetInstructionPointer(ZyDisInstructionDecoderContext *ctx, - uint64_t instructionPointer) -{ - ZyDisInstructionDecoder_thiz(ctx)->instructionPointer = instructionPointer; -} - -static bool ZyDisInstructionDecoder_DecodeRegisterOperand( - const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, - ZyDisRegisterClass registerClass, uint8_t registerId, ZyDisDefinedOperandSize operandSize) -{ - ZyDisRegister reg = REG_NONE; - uint16_t size = ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); - const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_cthiz(ctx); - - switch (registerClass) - { - case RC_GENERAL_PURPOSE: - switch (size) - { - case 64: - reg = REG_RAX + registerId; - break; - case 32: - reg = REG_EAX + registerId; - break; - case 16: - reg = REG_AX + registerId; - break; - case 8: - // TODO: Only REX? Or VEX too? - if (thiz->disassemblerMode == DM_M64BIT && (info->flags & IF_PREFIX_REX)) - { - if (registerId >= 4) - { - reg = REG_SPL + (registerId - 4); - } - else - { - reg = REG_AL + registerId; - } - } - else - { - reg = REG_AL + registerId; - } - break; - case 0: - // TODO: Error? - reg = REG_NONE; - break; - default: - assert(0); - } - break; - case RC_MMX: - reg = REG_MM0 + (registerId & 0x07); - break; - case RC_CONTROL: - reg = REG_CR0 + registerId; - break; - case RC_DEBUG: - reg = REG_DR0 + registerId; - break; - case RC_SEGMENT: - if ((registerId & 7) > 5) - { - info->flags |= IF_ERROR_OPERAND; - return false; - } - reg = REG_ES + (registerId & 0x07); - break; - case RC_XMM: - reg = registerId + ((size == 256) ? REG_YMM0 : REG_XMM0); - break; - default: - assert(0); - } - - operand->type = OPTYPE_REGISTER; - operand->base = reg; - operand->size = size; - - return true; -} - -static bool ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisRegisterClass registerClass, - ZyDisDefinedOperandSize operandSize) -{ - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - assert(info->flags & IF_MODRM); - // Decode register operand - if (info->modrm_mod == 3) - { - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, registerClass, - info->modrm_rm_ext, operandSize); - } - // Decode memory operand - uint8_t offset = 0; - operand->type = OPTYPE_MEMORY; - operand->size = ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); - switch (info->address_mode) - { - case 16: - { - static const ZyDisRegister bases[] = { - REG_BX, REG_BX, REG_BP, REG_BP, - REG_SI, REG_DI, REG_BP, REG_BX }; - static const ZyDisRegister indices[] = { - REG_SI, REG_DI, REG_SI, REG_DI, - REG_NONE, REG_NONE, REG_NONE, REG_NONE }; - operand->base = bases[info->modrm_rm_ext & 0x07]; - operand->index = indices[info->modrm_rm_ext & 0x07]; - operand->scale = 0; - if (info->modrm_mod == 0 && info->modrm_rm_ext == 6) { - offset = 16; - operand->base = REG_NONE; - } else if (info->modrm_mod == 1) { - offset = 8; - } else if (info->modrm_mod == 2) { - offset = 16; - } - } - break; - case 32: - operand->base = REG_EAX + info->modrm_rm_ext; - switch (info->modrm_mod) - { - case 0: - if (info->modrm_rm_ext == 5) - { - operand->base = REG_NONE; - offset = 32; - } - break; - case 1: - offset = 8; - break; - case 2: - offset = 32; - break; - default: - assert(0); - } - if ((info->modrm_rm_ext & 0x07) == 4) - { - if (!ZyDisInstructionDecoder_DecodeSIB(ctx, info)) - { - return false; - } - operand->base = REG_EAX + info->sib_base_ext; - operand->index = REG_EAX + info->sib_index_ext; - operand->scale = (1 << info->sib_scale) & ~1; - if (operand->index == REG_ESP) - { - operand->index = REG_NONE; - operand->scale = 0; - } - if (operand->base == REG_EBP) - { - if (info->modrm_mod == 0) - { - operand->base = REG_NONE; - } - - if (info->modrm_mod == 1) - { - offset = 8; - } - else - { - offset = 32; - } - } - } - else - { - operand->index = REG_NONE; - operand->scale = 0; - } - break; - case 64: - operand->base = REG_RAX + info->modrm_rm_ext; - switch (info->modrm_mod) - { - case 0: - if ((info->modrm_rm_ext & 0x07) == 5) - { - info->flags |= IF_RELATIVE; - operand->base = REG_RIP; - offset = 32; - } - break; - case 1: - offset = 8; - break; - case 2: - offset = 32; - break; - default: - assert(0); - } - if ((info->modrm_rm_ext & 0x07) == 4) - { - if (!ZyDisInstructionDecoder_DecodeSIB(ctx, info)) - { - return false; - } - - operand->base = REG_RAX + info->sib_base_ext; - operand->index = REG_RAX + info->sib_index_ext; - if (operand->index == REG_RSP) - { - operand->index = REG_NONE; - operand->scale = 0; - } - else - { - operand->scale = (1 << info->sib_scale) & ~1; - } - - if ((operand->base == REG_RBP) || (operand->base == REG_R13)) - { - if (info->modrm_mod == 0) - { - operand->base = REG_NONE; - } - - if (info->modrm_mod == 1) - { - offset = 8; - } - else - { - offset = 32; - } - } - } else - { - operand->index = REG_NONE; - operand->scale = 0; - } - break; - } - if (offset) - { - if (!ZyDisInstructionDecoder_DecodeDisplacement(ctx, info, operand, offset)) - { - return false; - } - } else - { - operand->offset = 0; - } - return true; -} - -static bool ZyDisInstructionDecoder_DecodeImmediate(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisDefinedOperandSize operandSize) -{ - operand->type = OPTYPE_IMMEDIATE; - operand->size = ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); - switch (operand->size) - { - case 8: - operand->lval.ubyte = ZyDisInstructionDecoder_InputNext8(ctx, info); - break; - case 16: - operand->lval.uword = ZyDisInstructionDecoder_InputNext16(ctx, info); - break; - case 32: - operand->lval.udword = ZyDisInstructionDecoder_InputNext32(ctx, info); - break; - case 64: - operand->lval.uqword = ZyDisInstructionDecoder_InputNext64(ctx, info); - break; - default: - // TODO: Maybe return false instead of assert - assert(0); - } - if (!operand->lval.uqword && (info->flags & IF_ERROR_MASK)) - { - return false; - } - return true; -} - -static bool ZyDisInstructionDecoder_DecodeDisplacement(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, uint8_t size) -{ - switch (size) - { - case 8: - operand->offset = 8; - operand->lval.ubyte = ZyDisInstructionDecoder_InputNext8(ctx, info); - break; - case 16: - operand->offset = 16; - operand->lval.uword = ZyDisInstructionDecoder_InputNext16(ctx, info); - break; - case 32: - operand->offset = 32; - operand->lval.udword = ZyDisInstructionDecoder_InputNext32(ctx, info); - break; - case 64: - operand->offset = 64; - operand->lval.uqword = ZyDisInstructionDecoder_InputNext64(ctx, info); - break; - default: - // TODO: Maybe return false instead of assert - assert(0); - } - if (!operand->lval.uqword && (info->flags & IF_ERROR_MASK)) - { - return false; - } - return true; -} - -static bool ZyDisInstructionDecoder_DecodeModrm(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info) -{ - if (!(info->flags & IF_MODRM)) - { - info->modrm = ZyDisInstructionDecoder_InputNext8(ctx, info); - if (!info->modrm && (info->flags & IF_ERROR_MASK)) - { - return false; - } - info->flags |= IF_MODRM; - info->modrm_mod = (info->modrm >> 6) & 0x03; - info->modrm_reg = (info->modrm >> 3) & 0x07; - info->modrm_rm = (info->modrm >> 0) & 0x07; - } - - // This function might get called multiple times during the opcode- and the operand decoding, - // but the effective REX/VEX fields are not initialized before the end of the opcode - // decoding process-> As the extended values are only used for the operand decoding, we - // should have no problems-> - info->modrm_reg_ext = (info->eff_rexvex_r << 3) | info->modrm_reg; - info->modrm_rm_ext = (info->eff_rexvex_b << 3) | info->modrm_rm; - return true; -} - -static bool ZyDisInstructionDecoder_DecodeSIB(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info) -{ - assert(info->flags & IF_MODRM); - assert((info->modrm_rm & 0x7) == 4); - - if (!(info->flags & IF_SIB)) - { - info->sib = ZyDisInstructionDecoder_InputNext8(ctx, info); - if (!info->sib && (info->flags & IF_ERROR_MASK)) - { - return false; - } - info->flags |= IF_SIB; - info->sib_scale = (info->sib >> 6) & 0x03; - info->sib_index = (info->sib >> 3) & 0x07; - info->sib_base = (info->sib >> 0) & 0x07; - // The @c decodeSib method is only called during the operand decoding, so updating the - // extended values at this point should be safe-> - info->sib_index_ext = (info->eff_rexvex_x << 3) | info->sib_index; - info->sib_base_ext = (info->eff_rexvex_b << 3) | info->sib_base; - } - - return true; -} - -static bool ZyDisInstructionDecoder_DecodeVex(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info) -{ - if (!(info->flags & IF_PREFIX_VEX)) - { - info->vex_op = ZyDisInstructionDecoder_InputCurrent(ctx); - switch (info->vex_op) - { - case 0xC4: - info->vex_b1 = ZyDisInstructionDecoder_InputNext8(ctx, info); - if (!info->vex_b1 || (info->flags & IF_ERROR_MASK)) - { - return false; - } - - info->vex_b2 = ZyDisInstructionDecoder_InputNext8(ctx, info); - if (!info->vex_b2 || (info->flags & IF_ERROR_MASK)) - { - return false; - } - - info->vex_r = (info->vex_b1 >> 7) & 0x01; - info->vex_x = (info->vex_b1 >> 6) & 0x01; - info->vex_b = (info->vex_b1 >> 5) & 0x01; - info->vex_m_mmmm = (info->vex_b1 >> 0) & 0x1F; - info->vex_w = (info->vex_b2 >> 7) & 0x01; - info->vex_vvvv = (info->vex_b2 >> 3) & 0x0F; - info->vex_l = (info->vex_b2 >> 2) & 0x01; - info->vex_pp = (info->vex_b2 >> 0) & 0x03; - break; - case 0xC5: - info->vex_b1 = ZyDisInstructionDecoder_InputNext8(ctx, info); - if (!info->vex_b1 || (info->flags & IF_ERROR_MASK)) - { - return false; - } - - info->vex_r = (info->vex_b1 >> 7) & 0x01; - info->vex_x = 1; - info->vex_b = 1; - info->vex_m_mmmm = 1; - info->vex_w = 0; - info->vex_vvvv = (info->vex_b1 >> 3) & 0x0F; - info->vex_l = (info->vex_b1 >> 2) & 0x01; - info->vex_pp = (info->vex_b1 >> 0) & 0x03; - break; - default: - assert(0); - } - - if (info->vex_m_mmmm > 3) - { - // TODO: Add proper error flag - info->flags |= IF_ERROR_MASK; - return false; - } - info->flags |= IF_PREFIX_VEX; - } - return true; -} - -static uint16_t ZyDisInstructionDecoder_GetEffectiveOperandSize( - const ZyDisInstructionDecoderContext *ctx, const ZyDisInstructionInfo *info, - ZyDisDefinedOperandSize operandSize) -{ - const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_cthiz(ctx); - - switch (operandSize) - { - case DOS_NA: - return 0; - case DOS_Z: - return (info->operand_mode == 16) ? 16 : 32; - case DOS_V: - return info->operand_mode; - case DOS_Y: - return (info->operand_mode == 16) ? 32 : info->operand_mode; - case DOS_X: - assert(info->vex_op != 0); - return (info->eff_vex_l) ? - ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, DOS_QQ) : - ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, DOS_DQ); - case DOS_RDQ: - return (thiz->disassemblerMode == DM_M64BIT) ? 64 : 32; - default: - return ZyDisGetSimpleOperandSize(operandSize); - } -} - -static bool ZyDisInstructionDecoder_DecodeOperands(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info) -{ - assert(info->instrDefinition); - // Always try to decode the first operand - if (!ZyDisInstructionDecoder_DecodeOperand(ctx, info, &info->operand[0], - info->instrDefinition->operand[0].type, info->instrDefinition->operand[0].size)) - { - return false; - } - - // Decode other operands on demand - for (unsigned int i = 1; i < 4; ++i) - { - if (info->operand[i - 1].type != OPTYPE_NONE) - { - if (!ZyDisInstructionDecoder_DecodeOperand(ctx, info, &info->operand[i], - info->instrDefinition->operand[i].type, info->instrDefinition->operand[i].size)) - { - return false; - } - } - } - - // Update operand access modes - for (unsigned int i = 0; i < 4; ++i) - { - if (info->operand[i].type != OPTYPE_NONE) - { - info->operand[i].access_mode = OPACCESSMODE_READ; - if (i == 0) - { - if (info->instrDefinition->flags & IDF_OPERAND1_WRITE) - { - info->operand[0].access_mode = OPACCESSMODE_WRITE; - } - else if (info->instrDefinition->flags & IDF_OPERAND1_READWRITE) - { - info->operand[0].access_mode = OPACCESSMODE_READWRITE; - } - } - else if (i == 1) - { - if (info->instrDefinition->flags & IDF_OPERAND2_WRITE) - { - info->operand[1].access_mode = OPACCESSMODE_WRITE; - } - else if (info->instrDefinition->flags & IDF_OPERAND2_READWRITE) - { - info->operand[1].access_mode = OPACCESSMODE_READWRITE; - } - } - } - } - - return true; -} - -static bool ZyDisInstructionDecoder_DecodeOperand(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info, ZyDisOperandInfo *operand, ZyDisDefinedOperandType operandType, - ZyDisDefinedOperandSize operandSize) -{ - const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); - - operand->type = OPTYPE_NONE; - switch (operandType) - { - case DOT_NONE: - break; - case DOT_A: - operand->type = OPTYPE_POINTER; - if (info->operand_mode == 16) - { - operand->size = 32; - operand->lval.ptr.off = ZyDisInstructionDecoder_InputNext16(ctx, info); - operand->lval.ptr.seg = ZyDisInstructionDecoder_InputNext16(ctx, info); - } - else - { - operand->size = 48; - operand->lval.ptr.off = ZyDisInstructionDecoder_InputNext32(ctx, info); - operand->lval.ptr.seg = ZyDisInstructionDecoder_InputNext16(ctx, info); - } - - if ((!operand->lval.ptr.off || !operand->lval.ptr.seg) && (info->flags & IF_ERROR_MASK)) - { - return false; - } - - break; - case DOT_C: - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_CONTROL, - info->modrm_reg_ext, operandSize); - case DOT_D: - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_DEBUG, - info->modrm_reg_ext, operandSize); - case DOT_F: - // TODO: FAR flag - case DOT_M: - // ModR/M byte may refer only to a register - if (info->modrm_mod == 3) - { - info->flags |= IF_ERROR_OPERAND; - return false; - } - case DOT_E: - return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, - RC_GENERAL_PURPOSE, operandSize); - case DOT_G: - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, - info->modrm_reg_ext, operandSize); - case DOT_H: - assert(info->vex_op != 0); - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, - (0xF & ~info->vex_vvvv), operandSize); - case DOT_sI: - operand->signed_lval = true; - case DOT_I: - return ZyDisInstructionDecoder_DecodeImmediate(ctx, info, operand, operandSize); - case DOT_I1: - operand->type = OPTYPE_CONSTANT; - operand->lval.udword = 1; - break; - case DOT_J: - if (!ZyDisInstructionDecoder_DecodeImmediate(ctx, info, operand, operandSize)) - { - return false; - } - operand->type = OPTYPE_REL_IMMEDIATE; - operand->signed_lval = true; - info->flags |= IF_RELATIVE; - break; - case DOT_L: - { - assert(info->vex_op != 0); - uint8_t imm = ZyDisInstructionDecoder_InputNext8(ctx, info); - if (!imm && (info->flags & IF_ERROR_MASK)) - { - return false; - } - uint8_t mask = (thiz->disassemblerMode == DM_M64BIT) ? 0xF : 0x7; - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, - mask & (imm >> 4), operandSize); - } - case DOT_MR: - return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, - RC_GENERAL_PURPOSE, info->modrm_mod == 3 ? - ZyDisGetComplexOperandRegSize(operandSize) : ZyDisGetComplexOperandMemSize(operandSize)); - case DOT_MU: - return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_XMM, - info->modrm_mod == 3 ? - ZyDisGetComplexOperandRegSize(operandSize) : ZyDisGetComplexOperandMemSize(operandSize)); - case DOT_N: - // ModR/M byte may refer only to memory - if (info->modrm_mod != 3) - { - info->flags |= IF_ERROR_OPERAND; - return false; - } - case DOT_Q: - return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_MMX, - operandSize); - case DOT_O: - operand->type = OPTYPE_MEMORY; - operand->base = REG_NONE; - operand->index = REG_NONE; - operand->scale = 0; - operand->size = ZyDisInstructionDecoder_GetEffectiveOperandSize(ctx, info, operandSize); - return ZyDisInstructionDecoder_DecodeDisplacement(ctx, info, operand, info->address_mode); - case DOT_P: - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_MMX, - info->modrm_reg_ext, operandSize); - case DOT_R: - // ModR/M byte may refer only to memory - if (info->modrm_mod != 3) - { - info->flags |= IF_ERROR_OPERAND; - return false; - } - return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, - RC_GENERAL_PURPOSE, operandSize); - case DOT_S: - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_SEGMENT, - info->modrm_reg_ext, operandSize); - case DOT_U: - // ModR/M byte may refer only to memory - if (info->modrm_mod != 3) - { - info->flags |= IF_ERROR_OPERAND; - return false; - } - case DOT_W: - return ZyDisInstructionDecoder_DecodeRegisterMemoryOperand(ctx, info, operand, RC_XMM, - operandSize); - case DOT_V: - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_XMM, - info->modrm_reg_ext, operandSize); - case DOT_R0: - case DOT_R1: - case DOT_R2: - case DOT_R3: - case DOT_R4: - case DOT_R5: - case DOT_R6: - case DOT_R7: - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, - (uint8_t)((info->eff_rexvex_b << 3) | operandType - DOT_R0), operandSize); - case DOT_AL: - case DOT_AX: - case DOT_EAX: - case DOT_RAX: - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, - 0, operandSize); - case DOT_CL: - case DOT_CX: - case DOT_ECX: - case DOT_RCX: - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, - 1, operandSize); - case DOT_DL: - case DOT_DX: - case DOT_EDX: - case DOT_RDX: - return ZyDisInstructionDecoder_DecodeRegisterOperand(ctx, info, operand, RC_GENERAL_PURPOSE, - 2, operandSize); - case DOT_ES: - case DOT_CS: - case DOT_SS: - case DOT_DS: - case DOT_FS: - case DOT_GS: - if (thiz->disassemblerMode == DM_M64BIT) - { - if ((operandType != DOT_FS) && (operandType != DOT_GS)) - { - info->flags |= IF_ERROR_OPERAND; - return false; - } - } - operand->type = OPTYPE_REGISTER; - operand->base = (uint16_t)(operandType - DOT_ES + REG_ES); - operand->size = 16; - break; - case DOT_ST0: - case DOT_ST1: - case DOT_ST2: - case DOT_ST3: - case DOT_ST4: - case DOT_ST5: - case DOT_ST6: - case DOT_ST7: - operand->type = OPTYPE_REGISTER; - operand->base = (uint16_t)(operandType - DOT_ST0 + REG_ST0); - operand->size = 80; - break; - default: - assert(0); - } - return true; -} - -static void ZyDisInstructionDecoder_ResolveOperandAndAddressMode( - const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info) -{ - const ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_cthiz(ctx); - - assert(info->instrDefinition); - switch (thiz->disassemblerMode) - { - case DM_M16BIT: - info->operand_mode = (info->flags & IF_PREFIX_OPERAND_SIZE) ? 32 : 16; - info->address_mode = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 32 : 16; - break; - case DM_M32BIT: - info->operand_mode = (info->flags & IF_PREFIX_OPERAND_SIZE) ? 16 : 32; - info->address_mode = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 16 : 32; - break; - case DM_M64BIT: - if (info->eff_rexvex_w) - { - info->operand_mode = 64; - } - else if ((info->flags & IF_PREFIX_OPERAND_SIZE)) - { - info->operand_mode = 16; - } - else - { - info->operand_mode = (info->instrDefinition->flags & IDF_DEFAULT_64) ? 64 : 32; - } - - info->address_mode = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 32 : 64; - break; - default: - assert(0); - } -} - -static void ZyDisInstructionDecoder_CalculateEffectiveRexVexValues( - const ZyDisInstructionDecoderContext *ctx, ZyDisInstructionInfo *info) -{ - ZYDIS_UNUSED(ctx); - - assert(info->instrDefinition); - uint8_t rex = info->rex; - if (info->flags & IF_PREFIX_VEX) - { - switch (info->vex_op) - { - case 0xC4: - rex = ((~(info->vex_b1 >> 5) & 0x07) | ((info->vex_b2 >> 4) & 0x08)); - break; - case 0xC5: - rex = (~(info->vex_b1 >> 5)) & 4; - break; - default: - assert(0); - } - } - rex &= (info->instrDefinition->flags & 0x000F); - info->eff_rexvex_w = (rex >> 3) & 0x01; - info->eff_rexvex_r = (rex >> 2) & 0x01; - info->eff_rexvex_x = (rex >> 1) & 0x01; - info->eff_rexvex_b = (rex >> 0) & 0x01; - info->eff_vex_l = info->vex_l && (info->instrDefinition->flags & IDF_ACCEPTS_VEXL); -} - -static bool ZyDisInstructionDecoder_DecodePrefixes(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info) -{ - ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); - - bool done = false; - do - { - switch (ZyDisInstructionDecoder_InputPeek(ctx, info)) - { - case 0xF0: - info->flags |= IF_PREFIX_LOCK; - break; - case 0xF2: - // REPNZ and REPZ are mutally exclusive. The one that comes later has precedence. - info->flags |= IF_PREFIX_REP; - info->flags &= ~IF_PREFIX_REPNE; - break; - case 0xF3: - // REPNZ and REPZ are mutally exclusive. The one that comes later has precedence. - info->flags |= IF_PREFIX_REP; - info->flags &= ~IF_PREFIX_REPNE; - break; - case 0x2E: - info->flags |= IF_PREFIX_SEGMENT; - info->segment = REG_CS; - break; - case 0x36: - info->flags |= IF_PREFIX_SEGMENT; - info->segment = REG_SS; - break; - case 0x3E: - info->flags |= IF_PREFIX_SEGMENT; - info->segment = REG_DS; - break; - case 0x26: - info->flags |= IF_PREFIX_SEGMENT; - info->segment = REG_ES; - break; - case 0x64: - info->flags |= IF_PREFIX_SEGMENT; - info->segment = REG_FS; - break; - case 0x65: - info->flags |= IF_PREFIX_SEGMENT; - info->segment = REG_GS; - break; - case 0x66: - info->flags |= IF_PREFIX_OPERAND_SIZE; - break; - case 0x67: - info->flags |= IF_PREFIX_ADDRESS_SIZE; - break; - default: - if ((thiz->disassemblerMode == DM_M64BIT) && - (ZyDisInstructionDecoder_InputCurrent(ctx) & 0xF0) == 0x40) - { - info->flags |= IF_PREFIX_REX; - info->rex = ZyDisInstructionDecoder_InputCurrent(ctx); - } - else - { - done = true; - } - break; - } - // Increase the input offset, if a prefix was found - if (!done) - { - if (!ZyDisInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) - { - return false; - } - } - } while (!done); - // TODO: Check for multiple prefixes of the same group - // Parse REX Prefix - if (info->flags & IF_PREFIX_REX) - { - info->rex_w = (info->rex >> 3) & 0x01; - info->rex_r = (info->rex >> 2) & 0x01; - info->rex_x = (info->rex >> 1) & 0x01; - info->rex_b = (info->rex >> 0) & 0x01; - } - return true; -} - -static bool ZyDisInstructionDecoder_DecodeOpcode(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info) -{ - ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); - - // Read first opcode byte - if (!ZyDisInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) - { - return false; - } - - // Update instruction info - info->opcode[0] = ZyDisInstructionDecoder_InputCurrent(ctx); - info->opcode_length = 1; - - // Iterate through opcode tree - ZyDisOpcodeTreeNode node = ZyDisGetOpcodeTreeChild(ZyDisGetOpcodeTreeRoot(), - ZyDisInstructionDecoder_InputCurrent(ctx)); - ZyDisOpcodeTreeNodeType nodeType; - - do - { - uint16_t index = 0; - nodeType = ZyDisGetOpcodeNodeType(node); - switch (nodeType) - { - case OTNT_INSTRUCTION_DEFINITION: - { - // Check for invalid instruction - if (ZyDisGetOpcodeNodeValue(node) == 0) - { - info->flags |= IF_ERROR_INVALID; - return false; - } - // Get instruction definition - const ZyDisInstructionDefinition *instrDefinition = ZyDisGetInstructionDefinition(node); - // Check for invalid 64 bit instruction - if ((thiz->disassemblerMode == DM_M64BIT) && - (instrDefinition->flags & IDF_INVALID_64)) - { - info->flags |= IF_ERROR_INVALID_64; - return false; - } - // Update instruction info - info->instrDefinition = instrDefinition; - info->mnemonic = instrDefinition->mnemonic; - // Update effective REX/VEX values - ZyDisInstructionDecoder_CalculateEffectiveRexVexValues(ctx, info); - // Resolve operand and address mode - ZyDisInstructionDecoder_ResolveOperandAndAddressMode(ctx, info); - // Decode operands - if (!ZyDisInstructionDecoder_DecodeOperands(ctx, info)) - { - return false; - } - } - return true; - case OTNT_TABLE: - // Read next opcode byte - if (!ZyDisInstructionDecoder_InputNext8(ctx, info) && (info->flags & IF_ERROR_MASK)) - { - return false; - } - // Update instruction info - assert((info->opcode_length > 0) && (info->opcode_length < 3)); - info->opcode[info->opcode_length] = ZyDisInstructionDecoder_InputCurrent(ctx); - info->opcode_length++; - // Set child node index for next iteration - index = ZyDisInstructionDecoder_InputCurrent(ctx); - break; - case OTNT_MODRM_MOD: - // Decode modrm byte - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - index = (info->modrm_mod == 0x3) ? 1 : 0; - break; - case OTNT_MODRM_REG: - // Decode modrm byte - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - index = info->modrm_reg; - break; - case OTNT_MODRM_RM: - // Decode modrm byte - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - index = info->modrm_rm; - break; - case OTNT_MANDATORY: - // Check if there are any prefixes present - if (info->flags & IF_PREFIX_REP) - { - index = 1; // F2 - } - else if (info->flags & IF_PREFIX_REPNE) - { - index = 2; // F3 - } - else if (info->flags & IF_PREFIX_OPERAND_SIZE) - { - index = 3; // 66 - } - - if (ZyDisGetOpcodeTreeChild(node, index) == 0) - { - index = 0; - } - - if (index && (ZyDisGetOpcodeTreeChild(node, index) != 0)) - { - // Remove REP and REPNE prefix - info->flags &= ~IF_PREFIX_REP; - info->flags &= ~IF_PREFIX_REPNE; - // Remove OPERAND_SIZE prefix, if it was used as mandatory prefix for the - // instruction - if (index == 3) - { - info->flags &= ~IF_PREFIX_OPERAND_SIZE; - } - } - break; - case OTNT_X87: - // Decode modrm byte - if (!ZyDisInstructionDecoder_DecodeModrm(ctx, info)) - { - return false; - } - index = info->modrm - 0xC0; - break; - case OTNT_ADDRESS_SIZE: - switch (thiz->disassemblerMode) - { - case DM_M16BIT: - index = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 1 : 0; - break; - case DM_M32BIT: - index = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 0 : 1; - break; - case DM_M64BIT: - index = (info->flags & IF_PREFIX_ADDRESS_SIZE) ? 1 : 2; - break; - default: - assert(0); - } - break; - case OTNT_OPERAND_SIZE: - switch (thiz->disassemblerMode) - { - case DM_M16BIT: - index = (info->flags & IF_PREFIX_OPERAND_SIZE) ? 1 : 0; - break; - case DM_M32BIT: - index = (info->flags & IF_PREFIX_OPERAND_SIZE) ? 0 : 1; - break; - case DM_M64BIT: - index = (info->rex_w) ? 2 : ((info->flags & IF_PREFIX_OPERAND_SIZE) ? 0 : 1); - break; - default: - assert(0); - } - break; - case OTNT_MODE: - index = (thiz->disassemblerMode != DM_M64BIT) ? 0 : 1; - break; - case OTNT_VENDOR: - switch (thiz->preferredVendor) - { - case ISV_ANY: - index = (ZyDisGetOpcodeTreeChild(node, 0) != 0) ? 0 : 1; - break; - case ISV_INTEL: - index = 1; - break; - case ISV_AMD: - index = 0; - break; - default: - assert(0); - } - break; - case OTNT_AMD3DNOW: - { - // As all 3dnow instructions got the same operands and flag definitions, we just - // decode a random instruction and determine the specific opcode later-> - assert(ZyDisGetOpcodeTreeChild(node, 0x0C) != 0); - const ZyDisInstructionDefinition *instrDefinition = - ZyDisGetInstructionDefinition(ZyDisGetOpcodeTreeChild(node, 0x0C)); - // Update instruction info - info->instrDefinition = instrDefinition; - info->mnemonic = instrDefinition->mnemonic; - // Update effective REX/VEX values - ZyDisInstructionDecoder_CalculateEffectiveRexVexValues(ctx, info); - // Resolve operand and address mode - ZyDisInstructionDecoder_ResolveOperandAndAddressMode(ctx, info); - // Decode operands - if (!ZyDisInstructionDecoder_DecodeOperands(ctx, info)) - { - return false; - } - // Read the actual 3dnow opcode - info->opcode[2] = ZyDisInstructionDecoder_InputNext8(ctx, info); - if (!info->opcode[2] && (info->flags & IF_ERROR_MASK)) - { - return false; - } - // Update instruction info - instrDefinition = - ZyDisGetInstructionDefinition(ZyDisGetOpcodeTreeChild(node, info->opcode[2])); - if (!instrDefinition || - (instrDefinition->mnemonic == MNEM_INVALID)) - { - info->flags |= IF_ERROR_INVALID; - return false; - } - info->instrDefinition = instrDefinition; - info->mnemonic = instrDefinition->mnemonic; - // Update operand access modes - for (unsigned int i = 0; i < 4; ++i) - { - if (info->operand[i].type != OPTYPE_NONE) - { - info->operand[i].access_mode = OPACCESSMODE_READ; - } - } - if (info->operand[0].type != OPTYPE_NONE) - { - if (info->instrDefinition->flags & IDF_OPERAND1_WRITE) - { - info->operand[0].access_mode = OPACCESSMODE_WRITE; - } - else if (info->instrDefinition->flags & IDF_OPERAND1_READWRITE) - { - info->operand[0].access_mode = OPACCESSMODE_READWRITE; - } - } - if (info->operand[1].type != OPTYPE_NONE) - { - if (info->instrDefinition->flags & IDF_OPERAND2_WRITE) - { - info->operand[1].access_mode = OPACCESSMODE_WRITE; - } - else if (info->instrDefinition->flags & IDF_OPERAND2_READWRITE) - { - info->operand[1].access_mode = OPACCESSMODE_READWRITE; - } - } - // Terminate loop - return true; - } - case OTNT_VEX: - if ((thiz->disassemblerMode == DM_M64BIT) - || (((ZyDisInstructionDecoder_InputCurrent(ctx) >> 6) & 0x03) == 0x03)) - { - // Decode vex prefix - if (!ZyDisInstructionDecoder_DecodeVex(ctx, info)) - { - return false; - } - - // Update instruction info (error cases are checked by the @c decodeVex method) - switch (info->vex_m_mmmm) - { - case 1: - info->opcode_length = 1; - info->opcode[0] = 0x0F; - break; - case 2: - info->opcode_length = 2; - info->opcode[0] = 0x0F; - info->opcode[1] = 0x38; - break; - case 3: - info->opcode_length = 2; - info->opcode[0] = 0x0F; - info->opcode[1] = 0x3A; - break; - } - - // Set child node index for next iteration - index = info->vex_m_mmmm + (info->vex_pp << 2); - } - else - { - index = 0; - } - break; - case OTNT_VEXW: - assert(info->flags & IF_PREFIX_VEX); - index = info->vex_w; - break; - case OTNT_VEXL: - assert(info->flags & IF_PREFIX_VEX); - index = info->vex_l; - break; - default: - assert(0); - } - node = ZyDisGetOpcodeTreeChild(node, index); - } while (nodeType != OTNT_INSTRUCTION_DEFINITION); - - return false; -} - -bool ZyDisInstructionDecoder_DecodeInstruction(ZyDisInstructionDecoderContext *ctx, - ZyDisInstructionInfo *info) -{ - ZyDisInstructionDecoder *thiz = ZyDisInstructionDecoder_thiz(ctx); - - // Clear instruction info - memset(info, 0, sizeof(*info)); - - // Set disassembler mode flags - switch (thiz->disassemblerMode) - { - case DM_M16BIT: - info->flags |= IF_DISASSEMBLER_MODE_16; - break; - case DM_M32BIT: - info->flags |= IF_DISASSEMBLER_MODE_32; - break; - case DM_M64BIT: - info->flags |= IF_DISASSEMBLER_MODE_64; - break; - default: - assert(0); - } - - // Set instruction address - info->instrAddress = thiz->instructionPointer; - - // Decode - if (!ZyDisInstructionDecoder_DecodePrefixes(ctx, info) - || !ZyDisInstructionDecoder_DecodeOpcode(ctx, info)) - { - goto DecodeError; - } - - // SWAPGS is only valid in 64 bit mode - if ((info->mnemonic == MNEM_SWAPGS) && - (thiz->disassemblerMode != DM_M64BIT)) - { - info->flags &= IF_ERROR_INVALID; - goto DecodeError; - } - - // Handle aliases - if (info->mnemonic == MNEM_XCHG) - { - if ((info->operand[0].type == OPTYPE_REGISTER && - info->operand[0].base == REG_AX && - info->operand[1].type == OPTYPE_REGISTER && - info->operand[1].base == REG_AX) || - (info->operand[0].type == OPTYPE_REGISTER && - info->operand[0].base == REG_EAX && - info->operand[1].type == OPTYPE_REGISTER && - info->operand[1].base == REG_EAX)) - { - info->mnemonic = MNEM_NOP; - info->operand[0].type = OPTYPE_NONE; - info->operand[1].type = OPTYPE_NONE; - info->operand[0].access_mode = OPACCESSMODE_NA; - info->operand[1].access_mode = OPACCESSMODE_NA; - } - } - - if ((info->mnemonic == MNEM_NOP) && (info->flags & IF_PREFIX_REP)) - { - info->mnemonic = MNEM_PAUSE; - info->flags &= ~IF_PREFIX_REP; - } - - // Increment instruction pointer - thiz->instructionPointer += info->length; - // Set instruction pointer - info->instrPointer = thiz->instructionPointer; - return true; - -DecodeError: - ++thiz->instructionPointer; - - // Backup all error flags, the instruction length and the instruction address - uint32_t flags = info->flags & (IF_ERROR_MASK | 0x00000007); - uint8_t length = info->length; - uint8_t firstByte = info->data[0]; - uint64_t instrAddress = info->instrAddress; - - // Clear instruction info - memset(info, 0, sizeof(*info)); - - // Restore saved values - info->flags = flags; - info->length = length; - info->data[0] = firstByte; - info->instrAddress = instrAddress; - info->instrDefinition = ZyDisGetInstructionDefinition(0); - - // Decrement the input position, if more than one byte was read from the input data - // source while decoding the invalid instruction - if (info->length != 1) - { - ZyDisBaseDataSource_SetPosition(thiz->dataSource, - ZyDisBaseDataSource_GetPosition(thiz->dataSource) - info->length + 1); - info->length = 1; - } - - // Return with error, if the end of the input source was reached while decoding the - // invalid instruction - if (info->flags & IF_ERROR_END_OF_INPUT) - { - info->length = 0; - return false; - } - - return true; -} - -/* ============================================================================================= */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisInstructionFormatter.c b/VerteronDisassemblerEngine/ZyDisInstructionFormatter.c deleted file mode 100644 index a95c2c7..0000000 --- a/VerteronDisassemblerEngine/ZyDisInstructionFormatter.c +++ /dev/null @@ -1,1136 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 19. March 2014 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#include "ZyDisInstructionFormatter.h" -#include "ZyDisDisassemblerUtils.h" -#include "ZyDisInternalHelpers.h" -#include "ZyDisOpcodeTableInternal.h" - -#include -#include -#include -#include -#include - -/* Interface =================================================================================== */ - -/* ZyDisBaseSymbolResolver ------------------------------------------------------------------------ */ - -typedef void (*ZyDisBaseSymbolResolver_DestructionCallback)( - ZyDisBaseSymbolResolverContext *ctx); -typedef const char* (*ZyDisBaseSymbolResolver_ResolveSymbolCallback)( - ZyDisBaseSymbolResolverContext *ctx, - const ZyDisInstructionInfo *info, - uint64_t address, - uint64_t *offset); - -typedef struct _ZyDisBaseSymbolResolver -{ - ZyDisBaseSymbolResolver_DestructionCallback destruct; // may be NULL - ZyDisBaseSymbolResolver_ResolveSymbolCallback resolveCallback; -} ZyDisBaseSymbolResolver; - -/** - * @brief Constructor. - * @param ctx The context. - */ -static void ZyDisBaseSymbolResolver_Construct(ZyDisBaseSymbolResolverContext *ctx); - -/** - * @brief Destructor. - * @param ctx The context. - */ -static void ZyDisBaseSymbolResolver_Destruct(ZyDisBaseSymbolResolverContext *ctx); - -/* ZyDisBaseInstructionFormatter ------------------------------------------------------------------ */ - -typedef void(*ZyDisBaseInstructionFormatter_DestructionCallback)( - ZyDisBaseInstructionFormatterContext *ctx); - -typedef struct _ZyDisBaseInstructionFormatter -{ - ZyDisBaseInstructionFormatter_DestructionCallback destruct; // may be NULL - ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback internalFormat; - ZyDisBaseSymbolResolverContext *symbolResolver; - char *outputBuffer; - size_t outputBufferCapacity; - size_t outputStringLen; - bool outputUppercase; -} ZyDisBaseInstructionFormatter; - -/** - * @brief Constructor. - * @param ctx The context. - * @param symbolResolver The symbol resolver to use when formatting addresses. - */ -static void ZyDisBaseInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, - ZyDisBaseSymbolResolverContext *symbolResolver); - -/** - * @brief Destructor. - * @param ctx The context. - */ -static void ZyDisBaseInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx); - -/*static void ZyDisBaseInstructionFormatter_OutputSetUppercase( - ZyDisBaseInstructionFormatterContext *ctx, bool uppercase);*/ - -/** - * @brief Returns the string representation of a given register. - * @param ctx The context. - * @param reg The register. - * @return The string representation of the given register. - */ -static char const* ZyDisBaseInstructionFormatter_RegisterToString( - const ZyDisBaseInstructionFormatterContext *ctx, ZyDisRegister reg); - -/** - * @brief Resolves a symbol. - * @param ctx The context. - * @param info The instruction info. - * @param address The address. - * @param offset Reference to an unsigned 64 bit integer that receives an offset relative - * to the base address of the symbol. - * @return The name of the symbol, if the symbol was found, @c NULL if not. - */ -static char const* ZyDisBaseInstructionFormatter_ResolveSymbol( - const ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, uint64_t address, - uint64_t *offset); - -/** - * @brief Clears the output string buffer. - * @param ctx The context. - */ -static void ZyDisBaseInstructionFormatter_OutputClear(ZyDisBaseInstructionFormatterContext *ctx); - -/** - * @brief Returns the content of the output string buffer. - * @param ctx The context. - * @return Pointer to the content of the ouput string buffer. - */ -static char const* ZyDisBaseInstructionFormatter_OutputString(ZyDisBaseInstructionFormatterContext *ctx); - -/** - * @brief Appends text to the ouput string buffer. - * @param ctx The context. - * @param text The text. - */ -static void ZyDisBaseInstructionFormatter_OutputAppend(ZyDisBaseInstructionFormatterContext *ctx, - char const *text); - -/** - * @brief Appends formatted text to the output string buffer. - * @param ctx The context. - * @param format The format string. - */ -static void ZyDisBaseInstructionFormatter_OutputAppendFormatted( - ZyDisBaseInstructionFormatterContext *ctx, char const *format, ...); - -/** - * @brief Appends a formatted address to the output string buffer. - * @param ctx The context. - * @param info The instruction info. - * @param address The address. - * @param resolveSymbols If this parameter is true, the function will try to display a - * smybol name instead of the numeric value. - */ -static void ZyDisBaseInstructionFormatter_OutputAppendAddress(ZyDisBaseInstructionFormatterContext *ctx, - const ZyDisInstructionInfo *info, uint64_t address, bool resolveSymbols); - -/** - * @brief Appends a formatted immediate value to the output string buffer. - * @param ctx The context. - * @param info The instruction info. - * @param operand The immediate operand. - * @param resolveSymbols If this parameter is true, the function will try to display a - * smybol name instead of the numeric value. - */ -static void ZyDisBaseInstructionFormatter_OutputAppendImmediate( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, - const ZyDisOperandInfo *operand, bool resolveSymbols); - -/** - * @brief Appends a formatted memory displacement value to the output string buffer. - * @param ctx The context. - * @param operand The memory operand. - */ -static void ZyDisBaseInstructionFormatter_OutputAppendDisplacement( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisOperandInfo *operand); - -/* ZyDisCustomSymbolResolver ---------------------------------------------------------------------- */ - -typedef struct _ZyDisCustomSymbolResolver -{ - ZyDisBaseSymbolResolver super; - ZyDisCustomSymbolResolver_ResolveSymbolCallback resolve; - void *userData; -} ZyDisCustomSymbolResolver; - -/** - * @brief Constructor. - * @param ctx The context. - * @param resolverCb The resolver callback. - * @param userData User defined data passed to the resolver callback. - */ -static void ZyDisCustomSymbolResolver_Construct(ZyDisBaseSymbolResolverContext *ctx, - ZyDisCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData); - -/** - * @brief Destructor. - * @param ctx The context. - */ -static void ZyDisCustomSymbolResolver_Destruct(ZyDisBaseSymbolResolverContext *ctx); - -/** - * @copydoc ZyDisBaseSymbolResolver_Resolve - */ -static const char* ZyDisCustomSymbolResolver_Resolve(ZyDisBaseSymbolResolverContext *ctx, - const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset); - -/* ZyDisIntelInstructionFormatter ----------------------------------------------------------------- */ - -typedef struct _ZyDisIntelInstructionFormatter -{ - ZyDisBaseInstructionFormatter super; -} ZyDisIntelInstructionFormatter; - -/** - * @brief Constructor. - * @param ctx The context. - * @param symbolResolver The symbol resolver used to resolve addresses. - * @param userData User defined data passed to the resolver callback. - */ -static void ZyDisIntelInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, - ZyDisBaseSymbolResolverContext *symbolResolver); - -/** - * @brief Destructor. - * @param ctx The context. - */ -static void ZyDisIntelInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx); - -/** - * @brief Appends an operand cast to the output string buffer. - * @param ctx The context. - * @param operand The operand. - */ -static void ZyDisIntelInstructionFormatter_OutputAppendOperandCast( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisOperandInfo *operand); - -/** - * @brief Formats the specified operand and appends it to the output buffer. - * @param ctx The context. - * @param info The instruction info. - * @param operand The operand. - */ -static void ZyDisIntelInstructionFormatter_FormatOperand(ZyDisBaseInstructionFormatterContext *ctx, - const ZyDisInstructionInfo *info, const ZyDisOperandInfo *operand); - -/** - * @coypdoc ZyDisBaseInstructionFormatter_InternalFormatInstruction - */ -static void ZyDisIntelInstructionFormatter_InternalFormatInstruction( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info); - -/* ZyDisCustomInstructionFormatter ---------------------------------------------------------------- */ - -typedef struct _ZyDisCustomInstructionFormatter -{ - ZyDisBaseInstructionFormatter super; -} ZyDisCustomInstructionFormatter; - -/** - * @brief Contructor. - * @param ctx The context. - * @param formatInsnCb The callback formatting the instruction. - */ -static void ZyDisCustomInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, - ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb); - -/** - * @brief Destructor. - * @param ctx The context. - */ -static void ZyDisCustomInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx); - -/* Implementation ============================================================================== */ - -/* ZyDisBaseSymbolResolver ------------------------------------------------------------------------ */ - -void ZyDisBaseSymbolResolver_Construct(ZyDisBaseSymbolResolverContext *ctx) -{ - memset(ZyDisBaseSymbolResolver_thiz(ctx), 0, sizeof(ZyDisBaseSymbolResolver)); -} - -void ZyDisBaseSymbolResolver_Destruct(ZyDisBaseSymbolResolverContext *ctx) -{ - ZYDIS_UNUSED(ctx); -} - -void ZyDisBaseSymbolResolver_Release(ZyDisBaseSymbolResolverContext *ctx) -{ - ZyDisBaseSymbolResolver *thiz = ZyDisBaseSymbolResolver_thiz(ctx); - - if (thiz->destruct) - { - thiz->destruct(ctx); - } - - free(thiz); - free(ctx); -} - -const char* ZyDisBaseSymbolResolver_ResolveSymbol(ZyDisBaseSymbolResolverContext *ctx, - const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset) -{ - assert(ZyDisBaseSymbolResolver_thiz(ctx)->resolveCallback); - return ZyDisBaseSymbolResolver_thiz(ctx)->resolveCallback(ctx, info, address, offset); -} - -/* ZyDisCustomSymbolResolver ---------------------------------------------------------------------- */ - -static void ZyDisCustomSymbolResolver_Construct(ZyDisBaseSymbolResolverContext *ctx, - ZyDisCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData) -{ - ZyDisBaseSymbolResolver_Construct(ctx); - ZyDisCustomSymbolResolver *thiz = ZyDisCustomSymbolResolver_thiz(ctx); - - thiz->super.destruct = &ZyDisCustomSymbolResolver_Destruct; - thiz->super.resolveCallback = &ZyDisCustomSymbolResolver_Resolve; - - thiz->resolve = resolverCb; - thiz->userData = userData; -} - -static void ZyDisCustomSymbolResolver_Destruct(ZyDisBaseSymbolResolverContext *ctx) -{ - ZyDisBaseSymbolResolver_Destruct(ctx); -} - -ZyDisBaseSymbolResolverContext* ZyDisCustomSymbolResolver_Create( - ZyDisCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData) -{ - ZyDisCustomSymbolResolver *thiz = malloc(sizeof(ZyDisCustomSymbolResolver)); - ZyDisBaseSymbolResolverContext *ctx = malloc(sizeof(ZyDisBaseSymbolResolverContext)); - - if (!thiz || !ctx) - { - if (thiz) - { - free(thiz); - } - if (ctx) - { - free(ctx); - } - - return NULL; - } - - ctx->d.type = TYPE_CUSTOMSYMBOLRESOLVER; - ctx->d.ptr = thiz; - - ZyDisCustomSymbolResolver_Construct(ctx, resolverCb, userData); - - return ctx; -} - -static const char* ZyDisCustomSymbolResolver_Resolve(ZyDisBaseSymbolResolverContext *ctx, - const ZyDisInstructionInfo *info, uint64_t address, uint64_t *offset) -{ - ZyDisCustomSymbolResolver *thiz = ZyDisCustomSymbolResolver_thiz(ctx); - return thiz->resolve(info, address, offset, thiz->userData); -} - -/* ZyDisBaseInstructionFormatter ------------------------------------------------------------------ */ - -static const char* ZyDisBaseInstructionFormatter_registerStrings[] = -{ - /* 8 bit general purpose registers */ - "al", "cl", "dl", "bl", - "ah", "ch", "dh", "bh", - "spl", "bpl", "sil", "dil", - "r8b", "r9b", "r10b", "r11b", - "r12b", "r13b", "r14b", "r15b", - /* 16 bit general purpose registers */ - "ax", "cx", "dx", "bx", - "sp", "bp", "si", "di", - "r8w", "r9w", "r10w", "r11w", - "r12w", "r13w", "r14w", "r15w", - /* 32 bit general purpose registers */ - "eax", "ecx", "edx", "ebx", - "esp", "ebp", "esi", "edi", - "r8d", "r9d", "r10d", "r11d", - "r12d", "r13d", "r14d", "r15d", - /* 64 bit general purpose registers */ - "rax", "rcx", "rdx", "rbx", - "rsp", "rbp", "rsi", "rdi", - "r8", "r9", "r10", "r11", - "r12", "r13", "r14", "r15", - /* segment registers */ - "es", "cs", "ss", - "ds", "fs", "gs", - /* control registers */ - "cr0", "cr1", "cr2", "cr3", - "cr4", "cr5", "cr6", "cr7", - "cr8", "cr9", "cr10", "cr11", - "cr12", "cr13", "cr14", "cr15", - /* debug registers */ - "dr0", "dr1", "dr2", "dr3", - "dr4", "dr5", "dr6", "dr7", - "dr8", "dr9", "dr10", "dr11", - "dr12", "dr13", "dr14", "dr15", - /* mmx registers */ - "mm0", "mm1", "mm2", "mm3", - "mm4", "mm5", "mm6", "mm7", - /* x87 registers */ - "st0", "st1", "st2", "st3", - "st4", "st5", "st6", "st7", - /* extended multimedia registers */ - "xmm0", "xmm1", "xmm2", "xmm3", - "xmm4", "xmm5", "xmm6", "xmm7", - "xmm8", "xmm9", "xmm10", "xmm11", - "xmm12", "xmm13", "xmm14", "xmm15", - /* 256 bit multimedia registers */ - "ymm0", "ymm1", "ymm2", "ymm3", - "ymm4", "ymm5", "ymm6", "ymm7", - "ymm8", "ymm9", "ymm10", "ymm11", - "ymm12", "ymm13", "ymm14", "ymm15", - /* instruction pointer register */ - "rip" -}; - -static void ZyDisBaseInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, - ZyDisBaseSymbolResolverContext *symbolResolver) -{ - ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); - - thiz->destruct = &ZyDisBaseInstructionFormatter_Destruct; - thiz->internalFormat = NULL; - thiz->symbolResolver = symbolResolver; - thiz->outputStringLen = 0; - thiz->outputUppercase = false; - thiz->outputBufferCapacity = 256; - thiz->outputBuffer = malloc(thiz->outputBufferCapacity); -} - -static void ZyDisBaseInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx) -{ - ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); - - if (thiz->outputBuffer) - { - free(thiz->outputBuffer); - thiz->outputBuffer = NULL; - } -} - -void ZyDisBaseInstructionFormatter_Release(ZyDisBaseInstructionFormatterContext *ctx) -{ - ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); - - if (thiz->destruct) - { - thiz->destruct(ctx); - } - - free(thiz); - free(ctx); -} - -/* -static void ZyDisBaseInstructionFormatter_OutputSetUppercase(ZyDisBaseInstructionFormatterContext *ctx, - bool uppercase) -{ - ZyDisBaseInstructionFormatter_thiz(ctx)->outputUppercase = uppercase; -} -*/ - -static char const* ZyDisBaseInstructionFormatter_RegisterToString( - const ZyDisBaseInstructionFormatterContext *ctx, ZyDisRegister reg) -{ - ZYDIS_UNUSED(ctx); - - if (reg == REG_NONE) - { - return "error"; - } - return ZyDisBaseInstructionFormatter_registerStrings[reg - 1]; -} - -static char const* ZyDisBaseInstructionFormatter_ResolveSymbol( - const ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, - uint64_t address, uint64_t *offset) -{ - const ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_cthiz(ctx); - - if (thiz->symbolResolver) - { - return ZyDisBaseSymbolResolver_ResolveSymbol( - thiz->symbolResolver, info, address, offset); - } - - return NULL; -} - -ZyDisBaseSymbolResolverContext* ZyDisBaseInstructionFormatter_GetSymbolResolver( - const ZyDisBaseInstructionFormatterContext *ctx) -{ - return ZyDisBaseInstructionFormatter_cthiz(ctx)->symbolResolver; -} - -void ZyDisBaseInstructionFormatter_SetSymbolResolver( - ZyDisBaseInstructionFormatterContext *ctx, ZyDisBaseSymbolResolverContext *symbolResolver) -{ - ZyDisBaseInstructionFormatter_thiz(ctx)->symbolResolver = symbolResolver; -} - -const char* ZyDisBaseInstructionFormatter_FormatInstruction( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info) -{ - ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); - - // Clears the internal string buffer - ZyDisBaseInstructionFormatter_OutputClear(ctx); - - // Calls the virtual format method that actually formats the instruction - thiz->internalFormat(ctx, info); - - if (thiz->outputBufferCapacity == 0) - { - // The basic instruction formatter only returns the instruction menmonic. - return ZyDisGetInstructionMnemonicString(info->mnemonic); - } - - // Return the formatted instruction string - return ZyDisBaseInstructionFormatter_OutputString(ctx); -} - -static void ZyDisBaseInstructionFormatter_OutputClear(ZyDisBaseInstructionFormatterContext *ctx) -{ - ZyDisBaseInstructionFormatter_thiz(ctx)->outputStringLen = 0; -} - -static char const* ZyDisBaseInstructionFormatter_OutputString(ZyDisBaseInstructionFormatterContext *ctx) -{ - return &ZyDisBaseInstructionFormatter_thiz(ctx)->outputBuffer[0]; -} - -static void ZyDisBaseInstructionFormatter_OutputAppend( - ZyDisBaseInstructionFormatterContext *ctx, char const *text) -{ - ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); - - // Get the string length including the null-terminator char - size_t strLen = strlen(text) + 1; - - // Get the buffer size - size_t bufLen = thiz->outputBufferCapacity; - - // Decrease the offset by one, to exclude already existing null-terminator chars in the - // output buffer - size_t offset = (thiz->outputStringLen) ? thiz->outputStringLen - 1 : 0; - - // Resize capacity of the output buffer on demand and add some extra space to improve the - // performance - if (bufLen <= (thiz->outputStringLen + strLen)) - { - thiz->outputBufferCapacity = bufLen + strLen + 512; - thiz->outputBuffer = realloc(thiz->outputBuffer, thiz->outputBufferCapacity); - } - - // Write the text to the output buffer - memcpy(&thiz->outputBuffer[offset], text, strLen); - - // Increase the string length - thiz->outputStringLen = offset + strLen; - - // Convert to uppercase - if (thiz->outputUppercase) - { - for (size_t i = offset; i < thiz->outputStringLen - 1; ++i) - { - thiz->outputBuffer[i] = (char)toupper(thiz->outputBuffer[i]); - } - } -} - -static void ZyDisBaseInstructionFormatter_OutputAppendFormatted( - ZyDisBaseInstructionFormatterContext *ctx, char const *format, ...) -{ - ZyDisBaseInstructionFormatter *thiz = ZyDisBaseInstructionFormatter_thiz(ctx); - - va_list arguments; - va_start(arguments, format); - - // Get the buffer size - size_t bufLen = thiz->outputBufferCapacity; - - // Decrease the offset by one, to exclude already existing null-terminator chars in the - // output buffer - size_t offset = (thiz->outputStringLen) ? thiz->outputStringLen - 1 : 0; - - // Resize the output buffer on demand and add some extra space to improve the performance - if ((bufLen - thiz->outputStringLen) < 256) - { - bufLen = bufLen + 512; - thiz->outputBuffer = realloc(thiz->outputBuffer, bufLen); - thiz->outputBufferCapacity = bufLen; - } - - int strLen = 0; - do - { - // If the formatted text did not fit in the output buffer, resize it, and try again - if (strLen < 0) - { - thiz->outputBufferCapacity = bufLen + 512; - thiz->outputBuffer = realloc(thiz->outputBuffer, thiz->outputBufferCapacity); - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, format, arguments); - return; - } - // Write the formatted text to the output buffer - assert((bufLen - offset) > 0); - strLen = vsnprintf(&thiz->outputBuffer[offset], bufLen - offset, format, arguments); - } while (strLen < 0); - - // Increase the string length - thiz->outputStringLen = offset + strLen + 1; - - // Convert to uppercase - if (thiz->outputUppercase) - { - for (size_t i = offset; i < thiz->outputStringLen - 1; ++i) - { - thiz->outputBuffer[i] = (char)toupper(thiz->outputBuffer[i]); - } - } - - va_end(arguments); -} - -static void ZyDisBaseInstructionFormatter_OutputAppendAddress( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, uint64_t address, - bool resolveSymbols) -{ - uint64_t offset = 0; - const char* name = NULL; - - if (resolveSymbols) - { - name = ZyDisBaseInstructionFormatter_ResolveSymbol(ctx, info, address, &offset); - } - - if (name) - { - if (offset) - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s+%.2llX", name, offset); - } - else - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, name); - } - } - else - { - if (info->flags & IF_DISASSEMBLER_MODE_16) - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.4X", address); - } - else if (info->flags & IF_DISASSEMBLER_MODE_32) - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.8lX", address); - } - else if (info->flags & IF_DISASSEMBLER_MODE_64) - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.16llX", address); - } - else - { - assert(0); - } - } -} - -static void ZyDisBaseInstructionFormatter_OutputAppendImmediate( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info, - const ZyDisOperandInfo *operand, bool resolveSymbols) -{ - assert(operand->type == OPTYPE_IMMEDIATE); - uint64_t value = 0; - if (operand->signed_lval && (operand->size != info->operand_mode)) - { - if (operand->size == 8) - { - value = (int64_t)operand->lval.sbyte; - } - else - { - assert(operand->size == 32); - value = (int64_t)operand->lval.sdword; - } - - if (info->operand_mode < 64) - { - value = value & ((1ull << info->operand_mode) - 1ull); - } - } - else - { - switch (operand->size) - { - case 8: - value = operand->lval.ubyte; - break; - case 16: - value = operand->lval.uword; - break; - case 32: - value = operand->lval.udword; - break; - case 64: - value = operand->lval.uqword; - break; - default: - assert(0); - } - } - - uint64_t offset = 0; - const char* name = NULL; - if (resolveSymbols) - { - name = ZyDisBaseInstructionFormatter_ResolveSymbol(ctx, info, value, &offset); - } - - if (name) - { - if (offset) - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s+%.2llX", name, offset); - } - else - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, name); - } - } - else - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value); - } -} - -static void ZyDisBaseInstructionFormatter_OutputAppendDisplacement( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisOperandInfo *operand) -{ - assert(operand->offset > 0); - if ((operand->base == REG_NONE) && (operand->index == REG_NONE)) - { - // Assume the displacement value is unsigned - assert(operand->scale == 0); - assert(operand->offset != 8); - uint64_t value = 0; - switch (operand->offset) - { - case 16: - value = operand->lval.uword; - break; - case 32: - value = operand->lval.udword; - break; - case 64: - value = operand->lval.uqword; - break; - default: - assert(0); - } - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value); - } - else - { - // The displacement value might be negative - assert(operand->offset != 64); - int64_t value = 0; - switch (operand->offset) - { - case 8: - value = operand->lval.sbyte; - break; - case 16: - value = operand->lval.sword; - break; - case 32: - value = operand->lval.sdword; - break; - default: - assert(0); - } - if (value < 0) - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "-%.2lX", -value); - } else - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s%.2lX", - (operand->base != REG_NONE || operand->index != REG_NONE) ? "+" : "", value); - } - } -} - -/* ZyDisIntelInstructionFormatter ----------------------------------------------------------------- */ - -static void ZyDisIntelInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, - ZyDisBaseSymbolResolverContext* symbolResolver) -{ - ZyDisBaseInstructionFormatter_Construct(ctx, symbolResolver); - ZyDisIntelInstructionFormatter *thiz = ZyDisIntelInstructionFormatter_thiz(ctx); - - thiz->super.destruct = &ZyDisIntelInstructionFormatter_Destruct; - thiz->super.internalFormat = &ZyDisIntelInstructionFormatter_InternalFormatInstruction; -} - -static void ZyDisIntelInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx) -{ - ZyDisBaseInstructionFormatter_Destruct(ctx); -} - -ZyDisBaseInstructionFormatterContext* ZyDisIntelInstructionFormatter_Create(void) -{ - return ZyDisIntelInstructionFormatter_CreateEx(NULL); -} - -ZyDisBaseInstructionFormatterContext* ZyDisIntelInstructionFormatter_CreateEx( - ZyDisBaseSymbolResolverContext *resolver) -{ - ZyDisIntelInstructionFormatter *thiz = malloc(sizeof(ZyDisIntelInstructionFormatter)); - ZyDisBaseInstructionFormatterContext *ctx = malloc(sizeof(ZyDisBaseInstructionFormatterContext)); - - if (!thiz || !ctx) - { - if (thiz) - { - free(thiz); - } - if (ctx) - { - free(ctx); - } - - return NULL; - } - - ctx->d.type = TYPE_INTELINSTRUCTIONFORMATTER; - ctx->d.ptr = thiz; - - ZyDisIntelInstructionFormatter_Construct(ctx, resolver); - - return ctx; -} - -static void ZyDisIntelInstructionFormatter_OutputAppendOperandCast( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisOperandInfo *operand) -{ - switch(operand->size) - { - case 8: - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "byte ptr " ); - break; - case 16: - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "word ptr " ); - break; - case 32: - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "dword ptr "); - break; - case 64: - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "qword ptr "); - break; - case 80: - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "tword ptr "); - break; - case 128: - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "oword ptr "); - break; - case 256: - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "yword ptr "); - break; - default: - break; - } -} - -static void ZyDisIntelInstructionFormatter_FormatOperand(ZyDisBaseInstructionFormatterContext *ctx, - const ZyDisInstructionInfo *info, const ZyDisOperandInfo *operand) -{ - switch (operand->type) - { - case OPTYPE_REGISTER: - ZyDisBaseInstructionFormatter_OutputAppend(ctx, - ZyDisBaseInstructionFormatter_RegisterToString(ctx, operand->base)); - break; - case OPTYPE_MEMORY: - if (info->flags & IF_PREFIX_SEGMENT) - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, - "%s:", ZyDisBaseInstructionFormatter_RegisterToString(ctx, info->segment)); - } - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "["); - if (operand->base == REG_RIP) - { - // TODO: Add option - ZyDisBaseInstructionFormatter_OutputAppendAddress( - ctx, info, ZyDisCalcAbsoluteTarget(info, operand), true); - } - else - { - if (operand->base != REG_NONE) - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, - ZyDisBaseInstructionFormatter_RegisterToString(ctx, operand->base)); - } - - if (operand->index != REG_NONE) - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%s%s", - operand->base != REG_NONE ? "+" : "", - ZyDisBaseInstructionFormatter_RegisterToString(ctx, operand->index)); - if (operand->scale) - { - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "*%d", operand->scale); - } - } - - if (operand->offset) - { - ZyDisBaseInstructionFormatter_OutputAppendDisplacement(ctx, operand); - } - } - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "]"); - break; - case OPTYPE_POINTER: - // TODO: resolve symbols - switch (operand->size) - { - case 32: - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "word %.4X:%.4X", - operand->lval.ptr.seg, operand->lval.ptr.off & 0xFFFF); - break; - case 48: - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "dword %.4X:%.8lX", - operand->lval.ptr.seg, operand->lval.ptr.off); - break; - default: - assert(0); - } - break; - case OPTYPE_IMMEDIATE: - { - ZyDisBaseInstructionFormatter_OutputAppendImmediate(ctx, info, operand, true); - } - break; - case OPTYPE_REL_IMMEDIATE: - { - if (operand->size == 8) - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "short "); - } - ZyDisBaseInstructionFormatter_OutputAppendAddress(ctx, info, - ZyDisCalcAbsoluteTarget(info, operand), true); - } - break; - case OPTYPE_CONSTANT: - ZyDisBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2X", operand->lval.udword); - break; - default: - assert(0); - break; - } -} - -static void ZyDisIntelInstructionFormatter_InternalFormatInstruction( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info) -{ - // Append string prefixes - if (info->flags & IF_PREFIX_LOCK) - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "lock "); - } - - if (info->flags & IF_PREFIX_REP) - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "rep "); - } - else if (info->flags & IF_PREFIX_REPNE) - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, "repne "); - } - - // Append the instruction mnemonic - ZyDisBaseInstructionFormatter_OutputAppend(ctx, ZyDisGetInstructionMnemonicString(info->mnemonic)); - - // Append the first operand - if (info->operand[0].type != OPTYPE_NONE) - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, " "); - bool cast = false; - if (info->operand[0].type == OPTYPE_MEMORY) - { - if (info->operand[1].type == OPTYPE_IMMEDIATE || - info->operand[1].type == OPTYPE_CONSTANT || - info->operand[1].type == OPTYPE_NONE || - (info->operand[0].size != info->operand[1].size)) - { - cast = true; - } - else if (info->operand[1].type == OPTYPE_REGISTER && info->operand[1].base == REG_CL) - { - switch (info->mnemonic) - { - case MNEM_RCL: - case MNEM_ROL: - case MNEM_ROR: - case MNEM_RCR: - case MNEM_SHL: - case MNEM_SHR: - case MNEM_SAR: - cast = true; - break; - default: - break; - } - } - } - - if (cast) - { - ZyDisIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[0]); - } - ZyDisIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[0]); - } - - // Append the second operand - if (info->operand[1].type != OPTYPE_NONE) - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, ", "); - bool cast = false; - if (info->operand[1].type == OPTYPE_MEMORY && - info->operand[0].size != info->operand[1].size && - ((info->operand[0].type != OPTYPE_REGISTER) || - ((info->operand[0].base != REG_ES) && - (info->operand[0].base != REG_CS) && - (info->operand[0].base != REG_SS) && - (info->operand[0].base != REG_DS) && - (info->operand[0].base != REG_FS) && - (info->operand[0].base != REG_GS)))) - { - cast = true; - } - - if (cast) - { - ZyDisIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[1]); - } - ZyDisIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[1]); - } - - // Append the third operand - if (info->operand[2].type != OPTYPE_NONE) - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, ", "); - bool cast = false; - if (info->operand[2].type == OPTYPE_MEMORY && - (info->operand[2].size != info->operand[1].size)) - { - cast = true; - } - - if (cast) - { - ZyDisIntelInstructionFormatter_OutputAppendOperandCast(ctx, &info->operand[2]); - } - - ZyDisIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[2]); - } - - // Append the fourth operand - if (info->operand[3].type != OPTYPE_NONE) - { - ZyDisBaseInstructionFormatter_OutputAppend(ctx, ", "); - ZyDisIntelInstructionFormatter_FormatOperand(ctx, info, &info->operand[3]); - } -} - -/* ZyDisCustomInstructionFormatter ---------------------------------------------------------------- */ - -static void ZyDisCustomInstructionFormatter_Construct(ZyDisBaseInstructionFormatterContext *ctx, - ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb) -{ - ZyDisBaseInstructionFormatter_Construct(ctx, NULL); - - ZyDisCustomInstructionFormatter *thiz = ZyDisCustomInstructionFormatter_thiz(ctx); - thiz->super.internalFormat = formatInsnCb; -} - -static void ZyDisCustomInstructionFormatter_Destruct(ZyDisBaseInstructionFormatterContext *ctx) -{ - ZyDisBaseInstructionFormatter_Destruct(ctx); -} - -ZYDIS_EXPORT ZyDisBaseInstructionFormatterContext* ZyDisCustomInstructionFormatter_Create( - ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb) -{ - ZyDisCustomInstructionFormatter *thiz = malloc(sizeof(ZyDisCustomInstructionFormatter)); - ZyDisBaseInstructionFormatterContext *ctx = malloc(sizeof(ZyDisBaseInstructionFormatterContext)); - - if (!thiz || !ctx) - { - if (thiz) - { - free(thiz); - } - if (ctx) - { - free(ctx); - } - - return NULL; - } - - ctx->d.type = TYPE_CUSTOMINSTRUCTIONFORMATTER; - ctx->d.ptr = thiz; - - ZyDisCustomInstructionFormatter_Construct(ctx, formatInsnCb); - return ctx; -} - -/* --------------------------------------------------------------------------------------------- */ - -/* ============================================================================================= */ diff --git a/VerteronDisassemblerEngine/ZyDisInstructionFormatter.h b/VerteronDisassemblerEngine/ZyDisInstructionFormatter.h deleted file mode 100644 index 5d70cae..0000000 --- a/VerteronDisassemblerEngine/ZyDisInstructionFormatter.h +++ /dev/null @@ -1,174 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 14. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#ifndef _VDE_ZyDisINSTRUCTIONFORMATTERC_H_ -#define _VDE_ZyDisINSTRUCTIONFORMATTERC_H_ - -#include "ZyDisDisassemblerTypes.h" -#include "ZyDisDisassemblerUtils.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* ZyDisBaseSymbolResolver ======================================================================== */ - -typedef struct _ZyDisBaseSymbolResolverContext -{ - ZyDisContextDescriptor d; -} ZyDisBaseSymbolResolverContext; - -/** - * @brief Releases a symbol resolver. - * @param ctx The context of the symbol resolver to free. - * The context may no longer used after it was released. - */ -ZYDIS_EXPORT void ZyDisBaseSymbolResolver_Release( - ZyDisBaseSymbolResolverContext *ctx); - -/** - * @brief Resolves a symbol. - * @param ctx The symbol resolver context. - * @param info The instruction info. - * @param address The address. - * @param offset Pointer to an unsigned 64 bit integer that receives an offset relative to - * the base address of the symbol. - * @return The name of the symbol if the symbol was found, else @c NULL. - */ -ZYDIS_EXPORT const char* ZyDisBaseSymbolResolver_ResolveSymbol( - ZyDisBaseSymbolResolverContext *ctx, - const ZyDisInstructionInfo *info, - uint64_t address, - uint64_t *offset); - -/* ZyDisCustomSymbolResolver ====================================================================== */ - -typedef const char* (*ZyDisCustomSymbolResolver_ResolveSymbolCallback)( - const ZyDisInstructionInfo *info, - uint64_t address, - uint64_t *offset, - void *userData); - -/** - * @brief Creates a custom symbol resolver. - * @param resolverCb The resolver callback consulted when symbols need to be resolved. - * @param userData A pointer to arbitrary data passed to the resolver callback. - * May also be @c NULL. - * @return @c NULL if it fails, else a symbol resolver context. - */ -ZYDIS_EXPORT ZyDisBaseSymbolResolverContext* ZyDisCustomSymbolResolver_Create( - ZyDisCustomSymbolResolver_ResolveSymbolCallback resolverCb, - void *userData); - -/* ZyDisBaseInstructionFormatter ================================================================== */ - -typedef struct _ZyDisBaseInstructionFormatterContext -{ - ZyDisContextDescriptor d; -} ZyDisBaseInstructionFormatterContext; - -typedef void(*ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback)( - ZyDisBaseInstructionFormatterContext *ctx, const ZyDisInstructionInfo *info); - -/** - * @brief Formats a decoded instruction. - * @param ctx The instruction formatter context. - * @param info The instruction info. - * @return Pointer to the formatted instruction string. This pointer remains valid until - * this function is called again or the context is released. - */ -ZYDIS_EXPORT const char* ZyDisBaseInstructionFormatter_FormatInstruction( - ZyDisBaseInstructionFormatterContext *ctx, - const ZyDisInstructionInfo *info); - -/** - * @brief Returns a pointer to the current symbol resolver. - * @param ctx The instruction formatter context. - * @return Pointer to the current symbol resolver or @c NULL if no symbol resolver is used. - */ -ZYDIS_EXPORT ZyDisBaseSymbolResolverContext* ZyDisBaseInstructionFormatter_GetSymbolResolver( - const ZyDisBaseInstructionFormatterContext *ctx); - -/** - * @brief Sets a new symbol resolver. - * @param ctx The instruction formatter context. - * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol - * resolver should be used. - */ -ZYDIS_EXPORT void ZyDisBaseInstructionFormatter_SetSymbolResolver( - ZyDisBaseInstructionFormatterContext *ctx, - ZyDisBaseSymbolResolverContext *resolver); - -/** - * @brief Releases an instruction formatter. - * @param ctx The context of the instruction formatter to release. - * The context may no longer used after it has been released. - */ -ZYDIS_EXPORT void ZyDisBaseInstructionFormatter_Release( - ZyDisBaseInstructionFormatterContext *ctx); - -/* ZyDisIntelInstructionFormatter ================================================================= */ - -/** - * @brief Creates an Intel-syntax instruction formatter. - * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see ZyDisBaseInstructionFormatter_Release - */ -ZYDIS_EXPORT ZyDisBaseInstructionFormatterContext* ZyDisIntelInstructionFormatter_Create(void); - -/** - * @brief Creates an Intel-syntax instruction formatter. - * @param resolver The symbol resolver consulted to resolve symbols on formatting. - * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see ZyDisBaseInstructionFormatter_Release - */ -ZYDIS_EXPORT ZyDisBaseInstructionFormatterContext* ZyDisIntelInstructionFormatter_CreateEx( - ZyDisBaseSymbolResolverContext *resolver); - -/* ZyDisCustomInstructionFormatter ================================================================ */ - -/** - * @brief Creats a custom instruction formatter. - * @param formatInsnCb The callback formatting the instruction. - * @return @c NULL if it fails, else a custom instruction formatter context. - */ -ZYDIS_EXPORT ZyDisBaseInstructionFormatterContext* ZyDisCustomInstructionFormatter_Create( - ZyDisBaseInstructionFormatter_InternalFormatInstructionCallback formatInsnCb); - -/* ============================================================================================= */ - -#ifdef __cplusplus -} -#endif - -#endif /* _VDE_ZyDisINSTRUCTIONFORMATTERC_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisInternalConfig.h b/VerteronDisassemblerEngine/ZyDisInternalConfig.h deleted file mode 100644 index f44a19f..0000000 --- a/VerteronDisassemblerEngine/ZyDisInternalConfig.h +++ /dev/null @@ -1,50 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : athre0z - Modifications : - - Last change : 16. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -/* - * Include CMake generated header defining macros im-/exporting functions statically or - * dynamically depending what the user requested from CMake. - */ -#include "ZyDisExportConfig.h" - -#ifndef _VDE_ZyDisINTERNALCONFIG_H_ -#define _VDE_ZyDisINTERNALCONFIG_H_ - -#ifdef _MSC_VER -# define ZYDIS_INLINE __inline -#else -# define ZYDIS_INLINE static inline -#endif - -#define ZYDIS_UNUSED(x) ((void)x) - -#endif /* _VDE_ZyDisINTERNALCONFIG_H_ */ diff --git a/VerteronDisassemblerEngine/ZyDisInternalHelpers.h b/VerteronDisassemblerEngine/ZyDisInternalHelpers.h deleted file mode 100644 index 7094c92..0000000 --- a/VerteronDisassemblerEngine/ZyDisInternalHelpers.h +++ /dev/null @@ -1,197 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : athre0z - Modifications : - - Last change : 19. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#ifndef _VDE_ZyDisINTERNALHELPERS_H_ -#define _VDE_ZyDisINTERNALHELPERS_H_ - -#include "ZyDisInstructionDecoder.h" -#include "ZyDisInstructionFormatter.h" -#include "ZyDisInternalConfig.h" - -#include - -/* Types IDs =================================================================================== */ - -typedef enum _ZyDisTypeId -{ - TYPE_BASEDATASOURCE, - TYPE_MEMORYDATASOURCE, - TYPE_CUSTOMDATASOURCE, - TYPE_INSTRUCTIONDECODER, - TYPE_BASESYMBOLRESOLVER, - TYPE_CUSTOMSYMBOLRESOLVER, - TYPE_BASEINSTRUCTIONFORMATTER, - TYPE_INTELINSTRUCTIONFORMATTER, - TYPE_CUSTOMINSTRUCTIONFORMATTER, -} ZyDisTypeId; - -/* Context conversion helpers ================================================================== */ - -ZYDIS_INLINE struct _ZyDisBaseDataSource* ZyDisBaseDataSource_thiz( - ZyDisBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_BASEDATASOURCE - || ctx->d.type == TYPE_MEMORYDATASOURCE - || ctx->d.type == TYPE_CUSTOMDATASOURCE); - return (struct _ZyDisBaseDataSource*)ctx->d.ptr; -} - -ZYDIS_INLINE const struct _ZyDisBaseDataSource* ZyDisBaseDataSource_cthiz( - const ZyDisBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_BASEDATASOURCE - || ctx->d.type == TYPE_MEMORYDATASOURCE - || ctx->d.type == TYPE_CUSTOMDATASOURCE); - return (const struct _ZyDisBaseDataSource*)ctx->d.ptr; -} - -ZYDIS_INLINE struct _ZyDisMemoryDataSource* ZyDisMemoryDataSource_thiz( - ZyDisBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_MEMORYDATASOURCE); - return (struct _ZyDisMemoryDataSource*)ctx->d.ptr; -} - -ZYDIS_INLINE const struct _ZyDisMemoryDataSource* ZyDisMemoryDataSource_cthiz( - const ZyDisBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_MEMORYDATASOURCE); - return (const struct _ZyDisMemoryDataSource*)ctx->d.ptr; -} - -ZYDIS_INLINE struct _ZyDisCustomDataSource* ZyDisCustomDataSource_thiz( - ZyDisBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMDATASOURCE); - return (struct _ZyDisCustomDataSource*)ctx->d.ptr; -} - -ZYDIS_INLINE const struct _ZyDisCustomDataSource* ZyDisCustomDataSource_cthiz( - const ZyDisBaseDataSourceContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMDATASOURCE); - return (const struct _ZyDisCustomDataSource*)ctx->d.ptr; -} - -ZYDIS_INLINE struct _ZyDisInstructionDecoder* ZyDisInstructionDecoder_thiz( - ZyDisInstructionDecoderContext *ctx) -{ - assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); - return (struct _ZyDisInstructionDecoder*)ctx->d.ptr; -} - -ZYDIS_INLINE const struct _ZyDisInstructionDecoder* ZyDisInstructionDecoder_cthiz( - const ZyDisInstructionDecoderContext *ctx) -{ - assert(ctx->d.type == TYPE_INSTRUCTIONDECODER); - return (const struct _ZyDisInstructionDecoder*)ctx->d.ptr; -} - -ZYDIS_INLINE struct _ZyDisBaseSymbolResolver* ZyDisBaseSymbolResolver_thiz( - ZyDisBaseSymbolResolverContext *ctx) -{ - assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER - || ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); - return (struct _ZyDisBaseSymbolResolver*)ctx->d.ptr; -} - -ZYDIS_INLINE const struct _ZyDisBaseSymbolResolver* ZyDisBaseSymbolResolver_cthiz( - const ZyDisBaseSymbolResolverContext *ctx) -{ - assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER - || ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); - return (const struct _ZyDisBaseSymbolResolver*)ctx->d.ptr; -} - -ZYDIS_INLINE struct _ZyDisCustomSymbolResolver* ZyDisCustomSymbolResolver_thiz( - ZyDisBaseSymbolResolverContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); - return (struct _ZyDisCustomSymbolResolver*)ctx->d.ptr; -} - -ZYDIS_INLINE const struct _ZyDisCustomSymbolResolver* ZyDisCustomSymbolResolver_cthiz( - const ZyDisBaseSymbolResolverContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER); - return (const struct _ZyDisCustomSymbolResolver*)ctx->d.ptr; -} - -ZYDIS_INLINE struct _ZyDisBaseInstructionFormatter* ZyDisBaseInstructionFormatter_thiz( - ZyDisBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); - return (struct _ZyDisBaseInstructionFormatter*)ctx->d.ptr; -} - -ZYDIS_INLINE const struct _ZyDisBaseInstructionFormatter* ZyDisBaseInstructionFormatter_cthiz( - const ZyDisBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_BASEINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER - || ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); - return (const struct _ZyDisBaseInstructionFormatter*)ctx->d.ptr; -} - -ZYDIS_INLINE struct _ZyDisIntelInstructionFormatter* ZyDisIntelInstructionFormatter_thiz( - ZyDisBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); - return (struct _ZyDisIntelInstructionFormatter*)ctx->d.ptr; -} - -ZYDIS_INLINE const struct _ZyDisIntelInstructionFormatter* ZyDisIntelInstructionFormatter_cthiz( - const ZyDisBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_INTELINSTRUCTIONFORMATTER); - return (const struct _ZyDisIntelInstructionFormatter*)ctx->d.ptr; -} - -ZYDIS_INLINE struct _ZyDisCustomInstructionFormatter* ZyDisCustomInstructionFormatter_thiz( - ZyDisBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); - return (struct _ZyDisCustomInstructionFormatter*)ctx->d.ptr; -} - -ZYDIS_INLINE const struct _ZyDisCustomInstructionFormatter* ZyDisCustomInstructionFormatter_cthiz( - const ZyDisBaseInstructionFormatterContext *ctx) -{ - assert(ctx->d.type == TYPE_CUSTOMINSTRUCTIONFORMATTER); - return (struct _ZyDisCustomInstructionFormatter*)ctx->d.ptr; -} - -/* ============================================================================================= */ - -#endif /* _VDE_ZyDisINTERNALHELPERS_H_ */ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisOpcodeTable.c b/VerteronDisassemblerEngine/ZyDisOpcodeTable.c deleted file mode 100644 index 762ccf7..0000000 --- a/VerteronDisassemblerEngine/ZyDisOpcodeTable.c +++ /dev/null @@ -1,9649 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 14. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#include "ZyDisOpcodeTable.h" - -#define ZYDIS_INVALID 0 -#define ZYDIS_NODE(type, n) ((ZyDisOpcodeTreeNode)type << 12 | (n)) - -const ZyDisOpcodeTreeNode vxOptreeTable[][256] = -{ - { - /* 00 */ 0x0015, - /* 01 */ 0x0014, - /* 02 */ 0x0016, - /* 03 */ 0x0018, - /* 04 */ 0x0017, - /* 05 */ 0x0010, - /* 06 */ ZYDIS_NODE(OTNT_MODE, 0x0000), - /* 07 */ ZYDIS_NODE(OTNT_MODE, 0x0001), - /* 08 */ 0x0394, - /* 09 */ 0x0393, - /* 0A */ 0x0396, - /* 0B */ 0x0395, - /* 0C */ 0x0390, - /* 0D */ 0x038F, - /* 0E */ ZYDIS_NODE(OTNT_MODE, 0x0002), - /* 0F */ ZYDIS_NODE(OTNT_TABLE, 0x0001), - /* 10 */ 0x000B, - /* 11 */ 0x000A, - /* 12 */ 0x000C, - /* 13 */ 0x000E, - /* 14 */ 0x000D, - /* 15 */ 0x0006, - /* 16 */ ZYDIS_NODE(OTNT_MODE, 0x0007), - /* 17 */ ZYDIS_NODE(OTNT_MODE, 0x0008), - /* 18 */ 0x04FE, - /* 19 */ 0x04F7, - /* 1A */ 0x04F8, - /* 1B */ 0x04FB, - /* 1C */ 0x04FA, - /* 1D */ 0x04F9, - /* 1E */ ZYDIS_NODE(OTNT_MODE, 0x0009), - /* 1F */ ZYDIS_NODE(OTNT_MODE, 0x000A), - /* 20 */ 0x0026, - /* 21 */ 0x0027, - /* 22 */ 0x0025, - /* 23 */ 0x002C, - /* 24 */ 0x002D, - /* 25 */ 0x002E, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_NODE(OTNT_MODE, 0x000B), - /* 28 */ 0x0542, - /* 29 */ 0x0549, - /* 2A */ 0x0548, - /* 2B */ 0x054B, - /* 2C */ 0x054A, - /* 2D */ 0x0547, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_NODE(OTNT_MODE, 0x000C), - /* 30 */ 0x06B8, - /* 31 */ 0x06B9, - /* 32 */ 0x06B6, - /* 33 */ 0x06B7, - /* 34 */ 0x06BA, - /* 35 */ 0x06BB, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_NODE(OTNT_MODE, 0x000D), - /* 38 */ 0x006C, - /* 39 */ 0x006D, - /* 3A */ 0x006B, - /* 3B */ 0x006A, - /* 3C */ 0x0070, - /* 3D */ 0x006F, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_NODE(OTNT_MODE, 0x000E), - /* 40 */ 0x02AB, - /* 41 */ 0x02AC, - /* 42 */ 0x02B2, - /* 43 */ 0x02B1, - /* 44 */ 0x02B3, - /* 45 */ 0x02B4, - /* 46 */ 0x02AE, - /* 47 */ 0x02AD, - /* 48 */ 0x00A7, - /* 49 */ 0x00A6, - /* 4A */ 0x00A8, - /* 4B */ 0x00AA, - /* 4C */ 0x00A9, - /* 4D */ 0x00A2, - /* 4E */ 0x00A1, - /* 4F */ 0x00A3, - /* 50 */ 0x04B4, - /* 51 */ 0x04B9, - /* 52 */ 0x04B3, - /* 53 */ 0x04AE, - /* 54 */ 0x04AF, - /* 55 */ 0x04B0, - /* 56 */ 0x04B1, - /* 57 */ 0x04B2, - /* 58 */ 0x0449, - /* 59 */ 0x0447, - /* 5A */ 0x0448, - /* 5B */ 0x0442, - /* 5C */ 0x043E, - /* 5D */ 0x043D, - /* 5E */ 0x043F, - /* 5F */ 0x0441, - /* 60 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0007), - /* 61 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0008), - /* 62 */ ZYDIS_NODE(OTNT_MODE, 0x0013), - /* 63 */ ZYDIS_NODE(OTNT_MODE, 0x0014), - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ 0x04B7, - /* 69 */ 0x02A4, - /* 6A */ 0x04AB, - /* 6B */ 0x02A6, - /* 6C */ 0x02B5, - /* 6D */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0009), - /* 6E */ 0x039F, - /* 6F */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000A), - /* 70 */ 0x02E8, - /* 71 */ 0x02E2, - /* 72 */ 0x02CA, - /* 73 */ 0x02DE, - /* 74 */ 0x02CE, - /* 75 */ 0x02E1, - /* 76 */ 0x02CB, - /* 77 */ 0x02C7, - /* 78 */ 0x02ED, - /* 79 */ 0x02E6, - /* 7A */ 0x02EB, - /* 7B */ 0x02E5, - /* 7C */ 0x02D5, - /* 7D */ 0x02D3, - /* 7E */ 0x02D8, - /* 7F */ 0x02D1, - /* 80 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0013), - /* 81 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0014), - /* 82 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0015), - /* 83 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0016), - /* 84 */ 0x055C, - /* 85 */ 0x055D, - /* 86 */ 0x06A8, - /* 87 */ 0x06A7, - /* 88 */ 0x0334, - /* 89 */ 0x0336, - /* 8A */ 0x0335, - /* 8B */ 0x0331, - /* 8C */ 0x031D, - /* 8D */ 0x02F4, - /* 8E */ 0x031C, - /* 8F */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0017), - /* 90 */ 0x06A9, - /* 91 */ 0x06AB, - /* 92 */ 0x06AA, - /* 93 */ 0x06A3, - /* 94 */ 0x06A2, - /* 95 */ 0x06A4, - /* 96 */ 0x06A6, - /* 97 */ 0x06A5, - /* 98 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000B), - /* 99 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000C), - /* 9A */ ZYDIS_NODE(OTNT_MODE, 0x001D), - /* 9B */ 0x069D, - /* 9C */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000D), - /* 9D */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000E), - /* 9E */ 0x04EF, - /* 9F */ 0x02EF, - /* A0 */ 0x031B, - /* A1 */ 0x0320, - /* A2 */ 0x031F, - /* A3 */ 0x031E, - /* A4 */ 0x0367, - /* A5 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x000F), - /* A6 */ 0x0076, - /* A7 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0010), - /* A8 */ 0x055E, - /* A9 */ 0x055B, - /* AA */ 0x053D, - /* AB */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0011), - /* AC */ 0x0300, - /* AD */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0012), - /* AE */ 0x0501, - /* AF */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0013), - /* B0 */ 0x0317, - /* B1 */ 0x031A, - /* B2 */ 0x0318, - /* B3 */ 0x0319, - /* B4 */ 0x0321, - /* B5 */ 0x032C, - /* B6 */ 0x032B, - /* B7 */ 0x032A, - /* B8 */ 0x032D, - /* B9 */ 0x0330, - /* BA */ 0x032F, - /* BB */ 0x032E, - /* BC */ 0x0329, - /* BD */ 0x0324, - /* BE */ 0x0323, - /* BF */ 0x0322, - /* C0 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0018), - /* C1 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0019), - /* C2 */ 0x04D9, - /* C3 */ 0x04D8, - /* C4 */ ZYDIS_NODE(OTNT_VEX, 0x0000), - /* C5 */ ZYDIS_NODE(OTNT_VEX, 0x0001), - /* C6 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001E), - /* C7 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001F), - /* C8 */ 0x00B4, - /* C9 */ 0x02F5, - /* CA */ 0x04DA, - /* CB */ 0x04DB, - /* CC */ 0x02BB, - /* CD */ 0x02B9, - /* CE */ ZYDIS_NODE(OTNT_MODE, 0x0027), - /* CF */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0017), - /* D0 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0020), - /* D1 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0021), - /* D2 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0022), - /* D3 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0023), - /* D4 */ ZYDIS_NODE(OTNT_MODE, 0x0028), - /* D5 */ ZYDIS_NODE(OTNT_MODE, 0x0029), - /* D6 */ ZYDIS_NODE(OTNT_MODE, 0x002A), - /* D7 */ 0x06B2, - /* D8 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0015), - /* D9 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0016), - /* DA */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0017), - /* DB */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0018), - /* DC */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0019), - /* DD */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x001A), - /* DE */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x001B), - /* DF */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x001C), - /* E0 */ 0x0306, - /* E1 */ 0x0305, - /* E2 */ 0x0304, - /* E3 */ ZYDIS_NODE(OTNT_ADDRESS_SIZE, 0x0000), - /* E4 */ 0x02A9, - /* E5 */ 0x02AA, - /* E6 */ 0x039D, - /* E7 */ 0x039E, - /* E8 */ 0x004E, - /* E9 */ 0x02DB, - /* EA */ ZYDIS_NODE(OTNT_MODE, 0x002B), - /* EB */ 0x02DD, - /* EC */ 0x02A7, - /* ED */ 0x02A8, - /* EE */ 0x039B, - /* EF */ 0x039C, - /* F0 */ 0x02FF, - /* F1 */ 0x02BA, - /* F2 */ 0x04D7, - /* F3 */ 0x04D6, - /* F4 */ 0x029D, - /* F5 */ 0x0059, - /* F6 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002C), - /* F7 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002D), - /* F8 */ 0x0053, - /* F9 */ 0x0538, - /* FA */ 0x0057, - /* FB */ 0x053B, - /* FC */ 0x0054, - /* FD */ 0x0539, - /* FE */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002E), - /* FF */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002F), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0000), - /* 01 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0000), - /* 02 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0003), - /* 03 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0004), - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0005), - /* 06 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0006), - /* 07 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0007), - /* 08 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0008), - /* 09 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0009), - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_NODE(OTNT_MANDATORY, 0x000A), - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_NODE(OTNT_MANDATORY, 0x000B), - /* 0E */ ZYDIS_NODE(OTNT_MANDATORY, 0x000C), - /* 0F */ ZYDIS_NODE(OTNT_AMD3DNOW, 0x0000), - /* 10 */ ZYDIS_NODE(OTNT_MANDATORY, 0x000D), - /* 11 */ ZYDIS_NODE(OTNT_MANDATORY, 0x000E), - /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0001), - /* 13 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0011), - /* 14 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0012), - /* 15 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0013), - /* 16 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0002), - /* 17 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0016), - /* 18 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0017), - /* 19 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0018), - /* 1A */ ZYDIS_NODE(OTNT_MANDATORY, 0x0019), - /* 1B */ ZYDIS_NODE(OTNT_MANDATORY, 0x001A), - /* 1C */ ZYDIS_NODE(OTNT_MANDATORY, 0x001B), - /* 1D */ ZYDIS_NODE(OTNT_MANDATORY, 0x001C), - /* 1E */ ZYDIS_NODE(OTNT_MANDATORY, 0x001D), - /* 1F */ ZYDIS_NODE(OTNT_MANDATORY, 0x001E), - /* 20 */ ZYDIS_NODE(OTNT_MANDATORY, 0x001F), - /* 21 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0020), - /* 22 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0021), - /* 23 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0022), - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0023), - /* 29 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0024), - /* 2A */ ZYDIS_NODE(OTNT_MANDATORY, 0x0025), - /* 2B */ ZYDIS_NODE(OTNT_MANDATORY, 0x0026), - /* 2C */ ZYDIS_NODE(OTNT_MANDATORY, 0x0027), - /* 2D */ ZYDIS_NODE(OTNT_MANDATORY, 0x0028), - /* 2E */ ZYDIS_NODE(OTNT_MANDATORY, 0x0029), - /* 2F */ ZYDIS_NODE(OTNT_MANDATORY, 0x002A), - /* 30 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002B), - /* 31 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002C), - /* 32 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002D), - /* 33 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002E), - /* 34 */ ZYDIS_NODE(OTNT_MANDATORY, 0x002F), - /* 35 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0030), - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0031), - /* 38 */ ZYDIS_NODE(OTNT_TABLE, 0x0002), - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_NODE(OTNT_TABLE, 0x0003), - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0081), - /* 41 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0082), - /* 42 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0083), - /* 43 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0084), - /* 44 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0085), - /* 45 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0086), - /* 46 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0087), - /* 47 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0088), - /* 48 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0089), - /* 49 */ ZYDIS_NODE(OTNT_MANDATORY, 0x008A), - /* 4A */ ZYDIS_NODE(OTNT_MANDATORY, 0x008B), - /* 4B */ ZYDIS_NODE(OTNT_MANDATORY, 0x008C), - /* 4C */ ZYDIS_NODE(OTNT_MANDATORY, 0x008D), - /* 4D */ ZYDIS_NODE(OTNT_MANDATORY, 0x008E), - /* 4E */ ZYDIS_NODE(OTNT_MANDATORY, 0x008F), - /* 4F */ ZYDIS_NODE(OTNT_MANDATORY, 0x0090), - /* 50 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0091), - /* 51 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0092), - /* 52 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0093), - /* 53 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0094), - /* 54 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0095), - /* 55 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0096), - /* 56 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0097), - /* 57 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0098), - /* 58 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0099), - /* 59 */ ZYDIS_NODE(OTNT_MANDATORY, 0x009A), - /* 5A */ ZYDIS_NODE(OTNT_MANDATORY, 0x009B), - /* 5B */ ZYDIS_NODE(OTNT_MANDATORY, 0x009C), - /* 5C */ ZYDIS_NODE(OTNT_MANDATORY, 0x009D), - /* 5D */ ZYDIS_NODE(OTNT_MANDATORY, 0x009E), - /* 5E */ ZYDIS_NODE(OTNT_MANDATORY, 0x009F), - /* 5F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A0), - /* 60 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A1), - /* 61 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A2), - /* 62 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A3), - /* 63 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A4), - /* 64 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A5), - /* 65 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A6), - /* 66 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A7), - /* 67 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A8), - /* 68 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00A9), - /* 69 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AA), - /* 6A */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AB), - /* 6B */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AC), - /* 6C */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AD), - /* 6D */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AE), - /* 6E */ ZYDIS_NODE(OTNT_MANDATORY, 0x00AF), - /* 6F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B0), - /* 70 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B1), - /* 71 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B2), - /* 72 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B3), - /* 73 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B4), - /* 74 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B5), - /* 75 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B6), - /* 76 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B7), - /* 77 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B8), - /* 78 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00B9), - /* 79 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BA), - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BB), - /* 7D */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BC), - /* 7E */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BD), - /* 7F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BE), - /* 80 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00BF), - /* 81 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C0), - /* 82 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C1), - /* 83 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C2), - /* 84 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C3), - /* 85 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C4), - /* 86 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C5), - /* 87 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C6), - /* 88 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C7), - /* 89 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C8), - /* 8A */ ZYDIS_NODE(OTNT_MANDATORY, 0x00C9), - /* 8B */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CA), - /* 8C */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CB), - /* 8D */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CC), - /* 8E */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CD), - /* 8F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CE), - /* 90 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00CF), - /* 91 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D0), - /* 92 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D1), - /* 93 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D2), - /* 94 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D3), - /* 95 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D4), - /* 96 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D5), - /* 97 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D6), - /* 98 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D7), - /* 99 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D8), - /* 9A */ ZYDIS_NODE(OTNT_MANDATORY, 0x00D9), - /* 9B */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DA), - /* 9C */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DB), - /* 9D */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DC), - /* 9E */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DD), - /* 9F */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DE), - /* A0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00DF), - /* A1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E0), - /* A2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E1), - /* A3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E2), - /* A4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E3), - /* A5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E4), - /* A6 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0003), - /* A7 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0004), - /* A8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E7), - /* A9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E8), - /* AA */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E9), - /* AB */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EA), - /* AC */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EB), - /* AD */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EC), - /* AE */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0005), - /* AF */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EF), - /* B0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F0), - /* B1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F1), - /* B2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F2), - /* B3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F3), - /* B4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F4), - /* B5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F5), - /* B6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F6), - /* B7 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F7), - /* B8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F8), - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_NODE(OTNT_MANDATORY, 0x00F9), - /* BB */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FA), - /* BC */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FB), - /* BD */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FC), - /* BE */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FD), - /* BF */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FE), - /* C0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00FF), - /* C1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0100), - /* C2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0101), - /* C3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0102), - /* C4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0103), - /* C5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0104), - /* C6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0105), - /* C7 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0006), - /* C8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0108), - /* C9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0109), - /* CA */ ZYDIS_NODE(OTNT_MANDATORY, 0x010A), - /* CB */ ZYDIS_NODE(OTNT_MANDATORY, 0x010B), - /* CC */ ZYDIS_NODE(OTNT_MANDATORY, 0x010C), - /* CD */ ZYDIS_NODE(OTNT_MANDATORY, 0x010D), - /* CE */ ZYDIS_NODE(OTNT_MANDATORY, 0x010E), - /* CF */ ZYDIS_NODE(OTNT_MANDATORY, 0x010F), - /* D0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0110), - /* D1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0111), - /* D2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0112), - /* D3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0113), - /* D4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0114), - /* D5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0115), - /* D6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0116), - /* D7 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0117), - /* D8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0118), - /* D9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0119), - /* DA */ ZYDIS_NODE(OTNT_MANDATORY, 0x011A), - /* DB */ ZYDIS_NODE(OTNT_MANDATORY, 0x011B), - /* DC */ ZYDIS_NODE(OTNT_MANDATORY, 0x011C), - /* DD */ ZYDIS_NODE(OTNT_MANDATORY, 0x011D), - /* DE */ ZYDIS_NODE(OTNT_MANDATORY, 0x011E), - /* DF */ ZYDIS_NODE(OTNT_MANDATORY, 0x011F), - /* E0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0120), - /* E1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0121), - /* E2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0122), - /* E3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0123), - /* E4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0124), - /* E5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0125), - /* E6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0126), - /* E7 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0127), - /* E8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0128), - /* E9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0129), - /* EA */ ZYDIS_NODE(OTNT_MANDATORY, 0x012A), - /* EB */ ZYDIS_NODE(OTNT_MANDATORY, 0x012B), - /* EC */ ZYDIS_NODE(OTNT_MANDATORY, 0x012C), - /* ED */ ZYDIS_NODE(OTNT_MANDATORY, 0x012D), - /* EE */ ZYDIS_NODE(OTNT_MANDATORY, 0x012E), - /* EF */ ZYDIS_NODE(OTNT_MANDATORY, 0x012F), - /* F0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0130), - /* F1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0131), - /* F2 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0132), - /* F3 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0133), - /* F4 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0134), - /* F5 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0135), - /* F6 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0136), - /* F7 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0007), - /* F8 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0138), - /* F9 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0139), - /* FA */ ZYDIS_NODE(OTNT_MANDATORY, 0x013A), - /* FB */ ZYDIS_NODE(OTNT_MANDATORY, 0x013B), - /* FC */ ZYDIS_NODE(OTNT_MANDATORY, 0x013C), - /* FD */ ZYDIS_NODE(OTNT_MANDATORY, 0x013D), - /* FE */ ZYDIS_NODE(OTNT_MANDATORY, 0x013E), - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0032), - /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0033), - /* 02 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0034), - /* 03 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0035), - /* 04 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0036), - /* 05 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0037), - /* 06 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0038), - /* 07 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0039), - /* 08 */ ZYDIS_NODE(OTNT_MANDATORY, 0x003A), - /* 09 */ ZYDIS_NODE(OTNT_MANDATORY, 0x003B), - /* 0A */ ZYDIS_NODE(OTNT_MANDATORY, 0x003C), - /* 0B */ ZYDIS_NODE(OTNT_MANDATORY, 0x003D), - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ ZYDIS_NODE(OTNT_MANDATORY, 0x003E), - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_NODE(OTNT_MANDATORY, 0x003F), - /* 15 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0040), - /* 16 */ ZYDIS_INVALID, - /* 17 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0041), - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_NODE(OTNT_MANDATORY, 0x0042), - /* 1D */ ZYDIS_NODE(OTNT_MANDATORY, 0x0043), - /* 1E */ ZYDIS_NODE(OTNT_MANDATORY, 0x0044), - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0045), - /* 21 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0046), - /* 22 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0047), - /* 23 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0048), - /* 24 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0049), - /* 25 */ ZYDIS_NODE(OTNT_MANDATORY, 0x004A), - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_NODE(OTNT_MANDATORY, 0x004B), - /* 29 */ ZYDIS_NODE(OTNT_MANDATORY, 0x004C), - /* 2A */ ZYDIS_NODE(OTNT_MANDATORY, 0x004D), - /* 2B */ ZYDIS_NODE(OTNT_MANDATORY, 0x004E), - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_NODE(OTNT_MANDATORY, 0x004F), - /* 31 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0050), - /* 32 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0051), - /* 33 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0052), - /* 34 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0053), - /* 35 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0054), - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0055), - /* 38 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0056), - /* 39 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0057), - /* 3A */ ZYDIS_NODE(OTNT_MANDATORY, 0x0058), - /* 3B */ ZYDIS_NODE(OTNT_MANDATORY, 0x0059), - /* 3C */ ZYDIS_NODE(OTNT_MANDATORY, 0x005A), - /* 3D */ ZYDIS_NODE(OTNT_MANDATORY, 0x005B), - /* 3E */ ZYDIS_NODE(OTNT_MANDATORY, 0x005C), - /* 3F */ ZYDIS_NODE(OTNT_MANDATORY, 0x005D), - /* 40 */ ZYDIS_NODE(OTNT_MANDATORY, 0x005E), - /* 41 */ ZYDIS_NODE(OTNT_MANDATORY, 0x005F), - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0060), - /* 81 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0061), - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_NODE(OTNT_MANDATORY, 0x0062), - /* DC */ ZYDIS_NODE(OTNT_MANDATORY, 0x0063), - /* DD */ ZYDIS_NODE(OTNT_MANDATORY, 0x0064), - /* DE */ ZYDIS_NODE(OTNT_MANDATORY, 0x0065), - /* DF */ ZYDIS_NODE(OTNT_MANDATORY, 0x0066), - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0067), - /* F1 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0068), - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0069), - /* 09 */ ZYDIS_NODE(OTNT_MANDATORY, 0x006A), - /* 0A */ ZYDIS_NODE(OTNT_MANDATORY, 0x006B), - /* 0B */ ZYDIS_NODE(OTNT_MANDATORY, 0x006C), - /* 0C */ ZYDIS_NODE(OTNT_MANDATORY, 0x006D), - /* 0D */ ZYDIS_NODE(OTNT_MANDATORY, 0x006E), - /* 0E */ ZYDIS_NODE(OTNT_MANDATORY, 0x006F), - /* 0F */ ZYDIS_NODE(OTNT_MANDATORY, 0x0070), - /* 10 */ ZYDIS_INVALID, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0071), - /* 15 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0072), - /* 16 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0073), - /* 17 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0074), - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0075), - /* 21 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0076), - /* 22 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0077), - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ ZYDIS_INVALID, - /* 2B */ ZYDIS_INVALID, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0078), - /* 41 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0079), - /* 42 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007A), - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007B), - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007C), - /* 61 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007D), - /* 62 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007E), - /* 63 */ ZYDIS_NODE(OTNT_MANDATORY, 0x007F), - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ ZYDIS_NODE(OTNT_MANDATORY, 0x0080), - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ 0x05E6, - /* 11 */ 0x05E5, - /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0008), - /* 13 */ 0x05CC, - /* 14 */ 0x0698, - /* 15 */ 0x0696, - /* 16 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0009), - /* 17 */ 0x05C7, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x05B8, - /* 29 */ 0x05B7, - /* 2A */ ZYDIS_INVALID, - /* 2B */ 0x05D2, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ 0x0694, - /* 2F */ 0x0581, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ 0x05CE, - /* 51 */ 0x0689, - /* 52 */ 0x0684, - /* 53 */ 0x067E, - /* 54 */ 0x0575, - /* 55 */ 0x0573, - /* 56 */ 0x05F6, - /* 57 */ 0x069A, - /* 58 */ 0x0567, - /* 59 */ 0x05EF, - /* 5A */ 0x0587, - /* 5B */ 0x0583, - /* 5C */ 0x068E, - /* 5D */ 0x05AF, - /* 5E */ 0x0593, - /* 5F */ 0x05A9, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_NODE(OTNT_VEXL, 0x0000), - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000A), - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ 0x057D, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ 0x0687, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ ZYDIS_INVALID, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ 0x05E4, - /* 11 */ 0x05E3, - /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000B), - /* 13 */ 0x05CA, - /* 14 */ 0x0697, - /* 15 */ 0x0695, - /* 16 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000C), - /* 17 */ 0x05C5, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x05B5, - /* 29 */ 0x05B6, - /* 2A */ ZYDIS_INVALID, - /* 2B */ 0x05D1, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ 0x0693, - /* 2F */ 0x0580, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ 0x05CD, - /* 51 */ 0x0688, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ 0x0574, - /* 55 */ 0x0572, - /* 56 */ 0x05F5, - /* 57 */ 0x0699, - /* 58 */ 0x0566, - /* 59 */ 0x05EE, - /* 5A */ 0x0585, - /* 5B */ 0x0586, - /* 5C */ 0x068D, - /* 5D */ 0x05AE, - /* 5E */ 0x0592, - /* 5F */ 0x05A8, - /* 60 */ 0x0679, - /* 61 */ 0x067C, - /* 62 */ 0x067A, - /* 63 */ 0x05FB, - /* 64 */ 0x0614, - /* 65 */ 0x0617, - /* 66 */ 0x0615, - /* 67 */ 0x05FD, - /* 68 */ 0x0675, - /* 69 */ 0x0678, - /* 6A */ 0x0676, - /* 6B */ 0x05FA, - /* 6C */ 0x067B, - /* 6D */ 0x0677, - /* 6E */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0014), - /* 6F */ 0x05BF, - /* 70 */ 0x0654, - /* 71 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001B), - /* 72 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001C), - /* 73 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001D), - /* 74 */ 0x060E, - /* 75 */ 0x0611, - /* 76 */ 0x060F, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ 0x059C, - /* 7D */ 0x059E, - /* 7E */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0015), - /* 7F */ 0x05C0, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ 0x057C, - /* C3 */ ZYDIS_INVALID, - /* C4 */ 0x0630, - /* C5 */ 0x0623, - /* C6 */ 0x0686, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ 0x056A, - /* D1 */ 0x066B, - /* D2 */ 0x0665, - /* D3 */ 0x0669, - /* D4 */ 0x0600, - /* D5 */ 0x0650, - /* D6 */ 0x05D4, - /* D7 */ ZYDIS_NODE(OTNT_VEXL, 0x0004), - /* D8 */ 0x0671, - /* D9 */ 0x0672, - /* DA */ 0x063C, - /* DB */ 0x0607, - /* DC */ 0x0603, - /* DD */ 0x0604, - /* DE */ 0x0636, - /* DF */ 0x0608, - /* E0 */ 0x0609, - /* E1 */ 0x0663, - /* E2 */ 0x0662, - /* E3 */ 0x060A, - /* E4 */ 0x064D, - /* E5 */ 0x064E, - /* E6 */ 0x058E, - /* E7 */ 0x05CF, - /* E8 */ 0x066F, - /* E9 */ 0x0670, - /* EA */ 0x063B, - /* EB */ 0x0651, - /* EC */ 0x0601, - /* ED */ 0x0602, - /* EE */ 0x0635, - /* EF */ 0x067D, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_NODE(OTNT_VEXL, 0x0005), - /* F2 */ ZYDIS_NODE(OTNT_VEXL, 0x0006), - /* F3 */ ZYDIS_NODE(OTNT_VEXL, 0x0007), - /* F4 */ ZYDIS_INVALID, - /* F5 */ 0x0632, - /* F6 */ 0x0652, - /* F7 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000D), - /* F8 */ 0x066C, - /* F9 */ 0x0673, - /* FA */ 0x066D, - /* FB */ 0x066E, - /* FC */ 0x05FE, - /* FD */ 0x0605, - /* FE */ 0x05FF, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0653, - /* 01 */ 0x0627, - /* 02 */ 0x0625, - /* 03 */ 0x0626, - /* 04 */ 0x0631, - /* 05 */ 0x062B, - /* 06 */ 0x0629, - /* 07 */ 0x062A, - /* 08 */ 0x0657, - /* 09 */ 0x0659, - /* 0A */ 0x0658, - /* 0B */ 0x064C, - /* 0C */ ZYDIS_NODE(OTNT_VEXW, 0x0000), - /* 0D */ ZYDIS_NODE(OTNT_VEXW, 0x0001), - /* 0E */ ZYDIS_NODE(OTNT_VEXW, 0x0002), - /* 0F */ ZYDIS_NODE(OTNT_VEXW, 0x0003), - /* 10 */ ZYDIS_INVALID, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ ZYDIS_INVALID, - /* 17 */ 0x0674, - /* 18 */ ZYDIS_NODE(OTNT_VEXW, 0x0004), - /* 19 */ ZYDIS_NODE(OTNT_VEXW, 0x0005), - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ 0x05F7, - /* 1D */ 0x05F9, - /* 1E */ 0x05F8, - /* 1F */ ZYDIS_INVALID, - /* 20 */ 0x0642, - /* 21 */ 0x0640, - /* 22 */ 0x0641, - /* 23 */ 0x0643, - /* 24 */ 0x0644, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x064B, - /* 29 */ 0x0610, - /* 2A */ 0x05D0, - /* 2B */ 0x05FC, - /* 2C */ ZYDIS_NODE(OTNT_VEXW, 0x0006), - /* 2D */ ZYDIS_NODE(OTNT_VEXW, 0x0007), - /* 2E */ ZYDIS_NODE(OTNT_VEXW, 0x0008), - /* 2F */ ZYDIS_NODE(OTNT_VEXW, 0x0009), - /* 30 */ 0x0647, - /* 31 */ 0x0645, - /* 32 */ 0x0646, - /* 33 */ 0x0649, - /* 34 */ 0x064A, - /* 35 */ 0x0648, - /* 36 */ ZYDIS_INVALID, - /* 37 */ 0x0616, - /* 38 */ 0x0639, - /* 39 */ 0x063A, - /* 3A */ 0x063E, - /* 3B */ 0x063D, - /* 3C */ 0x0633, - /* 3D */ 0x0634, - /* 3E */ 0x0638, - /* 3F */ 0x0637, - /* 40 */ 0x064F, - /* 41 */ 0x0628, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ 0x0570, - /* DC */ 0x056E, - /* DD */ 0x056F, - /* DE */ 0x056C, - /* DF */ 0x056D, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_NODE(OTNT_VEXW, 0x000A), - /* 05 */ ZYDIS_NODE(OTNT_VEXW, 0x000B), - /* 06 */ ZYDIS_NODE(OTNT_VEXW, 0x000C), - /* 07 */ ZYDIS_INVALID, - /* 08 */ 0x0681, - /* 09 */ 0x0680, - /* 0A */ 0x0683, - /* 0B */ 0x0682, - /* 0C */ 0x0577, - /* 0D */ 0x0576, - /* 0E */ 0x060C, - /* 0F */ 0x0606, - /* 10 */ ZYDIS_INVALID, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_NODE(OTNT_VEXW, 0x000D), - /* 15 */ 0x0624, - /* 16 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0016), - /* 17 */ 0x059B, - /* 18 */ ZYDIS_NODE(OTNT_VEXW, 0x0011), - /* 19 */ ZYDIS_NODE(OTNT_VEXW, 0x0012), - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_NODE(OTNT_VEXW, 0x0013), - /* 21 */ 0x05A1, - /* 22 */ ZYDIS_NODE(OTNT_MODE, 0x0025), - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ ZYDIS_INVALID, - /* 2B */ ZYDIS_INVALID, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ 0x0597, - /* 41 */ 0x0596, - /* 42 */ 0x05E7, - /* 43 */ ZYDIS_INVALID, - /* 44 */ 0x060D, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_NODE(OTNT_VEXW, 0x0016), - /* 4B */ ZYDIS_NODE(OTNT_VEXW, 0x0017), - /* 4C */ ZYDIS_NODE(OTNT_VEXW, 0x0018), - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ 0x0613, - /* 61 */ 0x0612, - /* 62 */ 0x0619, - /* 63 */ 0x0618, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ 0x0571, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000E), - /* 11 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x000F), - /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0010), - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0011), - /* 17 */ ZYDIS_INVALID, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ 0x058B, - /* 2B */ ZYDIS_INVALID, - /* 2C */ 0x0591, - /* 2D */ 0x058D, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ 0x068B, - /* 52 */ 0x0685, - /* 53 */ 0x067F, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ 0x0569, - /* 59 */ 0x05F1, - /* 5A */ 0x058C, - /* 5B */ 0x058F, - /* 5C */ 0x0690, - /* 5D */ 0x05B1, - /* 5E */ 0x0595, - /* 5F */ 0x05AB, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ 0x05C2, - /* 70 */ 0x0655, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ 0x05D3, - /* 7F */ 0x05C1, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ 0x057F, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ ZYDIS_INVALID, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ 0x0582, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_INVALID, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0012), - /* 11 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0013), - /* 12 */ ZYDIS_NODE(OTNT_MODRM_MOD, 0x0014), - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ ZYDIS_INVALID, - /* 17 */ ZYDIS_INVALID, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ 0x058A, - /* 2B */ ZYDIS_INVALID, - /* 2C */ 0x0590, - /* 2D */ 0x0588, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ 0x068A, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ 0x0568, - /* 59 */ 0x05F0, - /* 5A */ 0x0589, - /* 5B */ ZYDIS_INVALID, - /* 5C */ 0x068F, - /* 5D */ 0x05B0, - /* 5E */ 0x0594, - /* 5F */ 0x05AA, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ 0x0656, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ 0x059D, - /* 7D */ 0x059F, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ ZYDIS_INVALID, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ ZYDIS_INVALID, - /* 8F */ ZYDIS_INVALID, - /* 90 */ ZYDIS_INVALID, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ ZYDIS_INVALID, - /* 95 */ ZYDIS_INVALID, - /* 96 */ ZYDIS_INVALID, - /* 97 */ ZYDIS_INVALID, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ ZYDIS_INVALID, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ ZYDIS_INVALID, - /* 9F */ ZYDIS_INVALID, - /* A0 */ ZYDIS_INVALID, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ ZYDIS_INVALID, - /* A5 */ ZYDIS_INVALID, - /* A6 */ ZYDIS_INVALID, - /* A7 */ ZYDIS_INVALID, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ ZYDIS_INVALID, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ ZYDIS_INVALID, - /* AF */ ZYDIS_INVALID, - /* B0 */ ZYDIS_INVALID, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ ZYDIS_INVALID, - /* B5 */ ZYDIS_INVALID, - /* B6 */ ZYDIS_INVALID, - /* B7 */ ZYDIS_INVALID, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ ZYDIS_INVALID, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ ZYDIS_INVALID, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ 0x057E, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ 0x056B, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ ZYDIS_INVALID, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ 0x0584, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ 0x05A2, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeModrmMod[][2] = -{ - { - /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0001), - /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0002), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x000F), - /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0010), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0014), - /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0015), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E5), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00E6), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00ED), - /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x00EE), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0106), - /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0107), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_NODE(OTNT_MANDATORY, 0x0137), - }, - { - /* 00 */ 0x05CB, - /* 01 */ 0x05C3, - }, - { - /* 00 */ 0x05C6, - /* 01 */ 0x05C8, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x001A), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05C9, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05C4, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05A3, - }, - { - /* 00 */ 0x05E2, - /* 01 */ 0x05DF, - }, - { - /* 00 */ 0x05E0, - /* 01 */ 0x05E1, - }, - { - /* 00 */ 0x05DE, - /* 01 */ 0x05DD, - }, - { - /* 00 */ 0x05DB, - /* 01 */ 0x05DC, - }, - { - /* 00 */ 0x05DA, - /* 01 */ 0x05D9, - }, - { - /* 00 */ 0x05D8, - /* 01 */ 0x05D7, - }, - { - /* 00 */ 0x05BE, - /* 01 */ 0x05BD, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0024), - /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0000), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0025), - /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0001), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0026), - /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0002), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0027), - /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0003), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0028), - /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0004), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0029), - /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0005), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002A), - /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0006), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x002B), - /* 01 */ ZYDIS_NODE(OTNT_X87, 0x0007), - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeModrmReg[][8] = -{ - { - /* 00 */ 0x0531, - /* 01 */ 0x0541, - /* 02 */ 0x02FC, - /* 03 */ 0x0309, - /* 04 */ 0x0598, - /* 05 */ 0x0599, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0516, - /* 01 */ 0x052F, - /* 02 */ 0x02F9, - /* 03 */ 0x02FB, - /* 04 */ 0x0533, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x02FE, - /* 07 */ 0x02C0, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0000), - /* 01 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0001), - /* 02 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0002), - /* 03 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0003), - /* 04 */ 0x0532, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x02FD, - /* 07 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0004), - }, - { - /* 00 */ 0x0455, - /* 01 */ 0x0456, - /* 02 */ 0x0457, - /* 03 */ 0x0458, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0486, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0479, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x0470, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0485, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0478, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x0473, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x047E, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0475, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x0468, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x047C, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0476, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x046A, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0482, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x046D, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0481, - /* 03 */ 0x0480, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x046C, - /* 07 */ 0x046B, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0005), - /* 01 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0006), - /* 02 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0007), - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0008), - /* 01 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x0009), - /* 02 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x000A), - /* 03 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x000B), - /* 04 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x000C), - /* 05 */ ZYDIS_NODE(OTNT_MODRM_RM, 0x000D), - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0296, - /* 01 */ 0x0295, - /* 02 */ 0x02F2, - /* 03 */ 0x053C, - /* 04 */ 0x06C0, - /* 05 */ 0x06BF, - /* 06 */ ZYDIS_INVALID, - /* 07 */ 0x0055, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ 0x02F7, - /* 06 */ 0x0310, - /* 07 */ 0x0515, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0043, - /* 05 */ 0x0049, - /* 06 */ 0x0047, - /* 07 */ 0x0045, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0006), - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_NODE(OTNT_VENDOR, 0x0015), - /* 07 */ ZYDIS_NODE(OTNT_VENDOR, 0x0016), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_NODE(OTNT_VENDOR, 0x0017), - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_NODE(OTNT_VENDOR, 0x0018), - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x04D3, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x000F, - /* 01 */ 0x0392, - /* 02 */ 0x0005, - /* 03 */ 0x04FF, - /* 04 */ 0x0028, - /* 05 */ 0x0544, - /* 06 */ 0x06BC, - /* 07 */ 0x006E, - }, - { - /* 00 */ 0x0013, - /* 01 */ 0x0391, - /* 02 */ 0x0009, - /* 03 */ 0x0500, - /* 04 */ 0x0029, - /* 05 */ 0x0543, - /* 06 */ 0x06B5, - /* 07 */ 0x0072, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0015), - /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x0016), - /* 02 */ ZYDIS_NODE(OTNT_MODE, 0x0017), - /* 03 */ ZYDIS_NODE(OTNT_MODE, 0x0018), - /* 04 */ ZYDIS_NODE(OTNT_MODE, 0x0019), - /* 05 */ ZYDIS_NODE(OTNT_MODE, 0x001A), - /* 06 */ ZYDIS_NODE(OTNT_MODE, 0x001B), - /* 07 */ ZYDIS_NODE(OTNT_MODE, 0x001C), - }, - { - /* 00 */ 0x0012, - /* 01 */ 0x0397, - /* 02 */ 0x0008, - /* 03 */ 0x04FD, - /* 04 */ 0x002B, - /* 05 */ 0x0545, - /* 06 */ 0x06B4, - /* 07 */ 0x0071, - }, - { - /* 00 */ 0x0440, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04DE, - /* 01 */ 0x04E6, - /* 02 */ 0x04C6, - /* 03 */ 0x04D0, - /* 04 */ 0x0517, - /* 05 */ 0x0526, - /* 06 */ 0x051D, - /* 07 */ 0x04F3, - }, - { - /* 00 */ 0x04DF, - /* 01 */ 0x04E7, - /* 02 */ 0x04C7, - /* 03 */ 0x04CE, - /* 04 */ 0x051C, - /* 05 */ 0x0528, - /* 06 */ 0x051E, - /* 07 */ 0x04F6, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x068C, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x066A, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0664, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_NODE(OTNT_VEXL, 0x0001), - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0666, - /* 03 */ ZYDIS_INVALID, - /* 04 */ 0x0661, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_NODE(OTNT_VEXL, 0x0002), - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0668, - /* 03 */ 0x0667, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_NODE(OTNT_VEXL, 0x0003), - /* 07 */ 0x065C, - }, - { - /* 00 */ 0x0333, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0332, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04DD, - /* 01 */ 0x04E5, - /* 02 */ 0x04C8, - /* 03 */ 0x04CD, - /* 04 */ 0x0522, - /* 05 */ 0x0527, - /* 06 */ 0x051F, - /* 07 */ 0x04F1, - }, - { - /* 00 */ 0x04DC, - /* 01 */ 0x04E2, - /* 02 */ 0x04C5, - /* 03 */ 0x04CF, - /* 04 */ 0x0520, - /* 05 */ 0x052A, - /* 06 */ 0x0519, - /* 07 */ 0x04F4, - }, - { - /* 00 */ 0x04E1, - /* 01 */ 0x04E3, - /* 02 */ 0x04C3, - /* 03 */ 0x04CC, - /* 04 */ 0x0521, - /* 05 */ 0x0529, - /* 06 */ 0x051A, - /* 07 */ 0x04F2, - }, - { - /* 00 */ 0x04E0, - /* 01 */ 0x04E4, - /* 02 */ 0x04C4, - /* 03 */ 0x04CB, - /* 04 */ 0x0518, - /* 05 */ 0x0525, - /* 06 */ 0x051B, - /* 07 */ 0x04F5, - }, - { - /* 00 */ 0x00BB, - /* 01 */ 0x01CF, - /* 02 */ 0x0119, - /* 03 */ 0x013D, - /* 04 */ 0x022C, - /* 05 */ 0x0245, - /* 06 */ 0x0166, - /* 07 */ 0x0171, - }, - { - /* 00 */ 0x01BC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x01FF, - /* 03 */ 0x020B, - /* 04 */ 0x01C3, - /* 05 */ 0x01C2, - /* 06 */ 0x01EB, - /* 07 */ 0x01EA, - }, - { - /* 00 */ 0x019A, - /* 01 */ 0x01A8, - /* 02 */ 0x019C, - /* 03 */ 0x019F, - /* 04 */ 0x01B3, - /* 05 */ 0x01B5, - /* 06 */ 0x01A1, - /* 07 */ 0x01A3, - }, - { - /* 00 */ 0x01A4, - /* 01 */ 0x01B1, - /* 02 */ 0x01AB, - /* 03 */ 0x01AD, - /* 04 */ ZYDIS_INVALID, - /* 05 */ 0x01BA, - /* 06 */ ZYDIS_INVALID, - /* 07 */ 0x020A, - }, - { - /* 00 */ 0x00BA, - /* 01 */ 0x01D2, - /* 02 */ 0x0118, - /* 03 */ 0x013E, - /* 04 */ 0x022B, - /* 05 */ 0x0243, - /* 06 */ 0x0158, - /* 07 */ 0x017A, - }, - { - /* 00 */ 0x01BB, - /* 01 */ 0x01AF, - /* 02 */ 0x01FE, - /* 03 */ 0x0209, - /* 04 */ 0x01F3, - /* 05 */ ZYDIS_INVALID, - /* 06 */ 0x01E8, - /* 07 */ 0x01ED, - }, - { - /* 00 */ 0x019B, - /* 01 */ 0x01A7, - /* 02 */ 0x019D, - /* 03 */ 0x019E, - /* 04 */ 0x01B2, - /* 05 */ 0x01B4, - /* 06 */ 0x01A0, - /* 07 */ 0x01A2, - }, - { - /* 00 */ 0x01A6, - /* 01 */ 0x01B0, - /* 02 */ 0x01AA, - /* 03 */ 0x01AE, - /* 04 */ 0x00D2, - /* 05 */ 0x01A5, - /* 06 */ 0x00D3, - /* 07 */ 0x01AC, - }, - { - /* 00 */ 0x0557, - /* 01 */ 0x0558, - /* 02 */ 0x038E, - /* 03 */ 0x0385, - /* 04 */ 0x037E, - /* 05 */ 0x02A5, - /* 06 */ 0x00AC, - /* 07 */ 0x02A0, - }, - { - /* 00 */ 0x0559, - /* 01 */ 0x055A, - /* 02 */ 0x038D, - /* 03 */ 0x0384, - /* 04 */ 0x037D, - /* 05 */ 0x02A3, - /* 06 */ 0x00AB, - /* 07 */ 0x02A1, - }, - { - /* 00 */ 0x02AF, - /* 01 */ 0x00A4, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02B0, - /* 01 */ 0x00A5, - /* 02 */ ZYDIS_NODE(OTNT_MODE, 0x002C), - /* 03 */ 0x004C, - /* 04 */ 0x02D9, - /* 05 */ 0x02DA, - /* 06 */ 0x04B8, - /* 07 */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeModrmRm[][8] = -{ - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x0000), - /* 02 */ ZYDIS_NODE(OTNT_VENDOR, 0x0001), - /* 03 */ ZYDIS_NODE(OTNT_VENDOR, 0x0002), - /* 04 */ ZYDIS_NODE(OTNT_VENDOR, 0x0003), - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0315, - /* 01 */ 0x0383, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06B1, - /* 01 */ 0x06C1, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x0004), - /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x0005), - /* 02 */ ZYDIS_NODE(OTNT_VENDOR, 0x0006), - /* 03 */ ZYDIS_NODE(OTNT_VENDOR, 0x0007), - /* 04 */ ZYDIS_NODE(OTNT_VENDOR, 0x0008), - /* 05 */ ZYDIS_NODE(OTNT_VENDOR, 0x0009), - /* 06 */ ZYDIS_NODE(OTNT_VENDOR, 0x000A), - /* 07 */ ZYDIS_NODE(OTNT_VENDOR, 0x000B), - }, - { - /* 00 */ 0x0550, - /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x000C), - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0316, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06C2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06C3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06C4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06AF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06AC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06AE, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06AD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06B0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeMandatory[][4] = -{ - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0000), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0001), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0002), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02F0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0307, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0551, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0058, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0556, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02BD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x069E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0561, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0454, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0189, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0379, - /* 01 */ 0x0368, - /* 02 */ 0x0371, - /* 03 */ 0x0377, - }, - { - /* 00 */ 0x0378, - /* 01 */ 0x036A, - /* 02 */ 0x0370, - /* 03 */ 0x0376, - }, - { - /* 00 */ 0x0355, - /* 01 */ 0x0345, - /* 02 */ 0x036D, - /* 03 */ 0x0353, - }, - { - /* 00 */ 0x034C, - /* 01 */ 0x0346, - /* 02 */ 0x036E, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0354, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0352, - }, - { - /* 00 */ 0x0565, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0564, - }, - { - /* 00 */ 0x0563, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0562, - }, - { - /* 00 */ 0x0350, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x036B, - /* 03 */ 0x034E, - }, - { - /* 00 */ 0x0351, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x036C, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x034F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x034D, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0003), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x038A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x038B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x038C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0389, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0386, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0387, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0388, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0325, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0328, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0327, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0326, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x033A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0338, - }, - { - /* 00 */ 0x0339, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0337, - }, - { - /* 00 */ 0x008D, - /* 01 */ 0x0093, - /* 02 */ 0x0094, - /* 03 */ 0x008C, - }, - { - /* 00 */ 0x035C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x035B, - }, - { - /* 00 */ 0x009A, - /* 01 */ 0x009B, - /* 02 */ 0x009C, - /* 03 */ 0x0098, - }, - { - /* 00 */ 0x0090, - /* 01 */ 0x0091, - /* 02 */ 0x0096, - /* 03 */ 0x008A, - }, - { - /* 00 */ 0x0560, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x055F, - }, - { - /* 00 */ 0x0082, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0081, - }, - { - /* 00 */ 0x069F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04D4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04D1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04D2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0003), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0004), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x029A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x045B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x045C, - }, - { - /* 00 */ 0x03FD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03FE, - }, - { - /* 00 */ 0x03FA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03F9, - }, - { - /* 00 */ 0x03FB, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03FC, - }, - { - /* 00 */ 0x040E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x040F, - }, - { - /* 00 */ 0x0405, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0404, - }, - { - /* 00 */ 0x0400, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0401, - }, - { - /* 00 */ 0x0402, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0403, - }, - { - /* 00 */ 0x0461, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0462, - }, - { - /* 00 */ 0x0466, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0465, - }, - { - /* 00 */ 0x0464, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0463, - }, - { - /* 00 */ 0x0431, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0432, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CA, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0037, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0036, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x049A, - }, - { - /* 00 */ 0x03A3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03A2, - }, - { - /* 00 */ 0x03A6, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03A7, - }, - { - /* 00 */ 0x03A4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03A5, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0426, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0424, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0425, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0428, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0429, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0427, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0430, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D1, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0359, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03AC, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042C, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042B, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042E, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042F, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x042D, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DA, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x041A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x041B, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0421, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0420, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0412, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0413, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0419, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0418, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0438, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03FF, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_NODE(OTNT_MODE, 0x0005), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_NODE(OTNT_MODE, 0x0006), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0023, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0021, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0022, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x001F, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0020, - }, - { - /* 00 */ 0x033B, - /* 01 */ 0x0086, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x033C, - /* 01 */ 0x0085, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04E9, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04E8, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04EB, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04EA, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0035, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0034, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CB, - }, - { - /* 00 */ 0x03BF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C0, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DF, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03E3, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0000), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x00B5, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0408, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x02B7, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0001), - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x00B2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x00B1, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x037C, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CC, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D5, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D4, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DE, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DD, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0024, - }, - { - /* 00 */ 0x0067, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0064, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0063, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0069, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0066, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0068, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0065, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0061, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0060, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0062, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x005F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0357, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0356, - }, - { - /* 00 */ 0x0535, - /* 01 */ 0x0536, - /* 02 */ 0x0537, - /* 03 */ 0x0534, - }, - { - /* 00 */ 0x04ED, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x04EE, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04C9, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x04CA, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0032, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0031, - }, - { - /* 00 */ 0x0030, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x002F, - }, - { - /* 00 */ 0x039A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0399, - }, - { - /* 00 */ 0x06BE, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x06BD, - }, - { - /* 00 */ 0x001A, - /* 01 */ 0x001B, - /* 02 */ 0x001C, - /* 03 */ 0x0019, - }, - { - /* 00 */ 0x0380, - /* 01 */ 0x0381, - /* 02 */ 0x0382, - /* 03 */ 0x037F, - }, - { - /* 00 */ 0x008F, - /* 01 */ 0x0092, - /* 02 */ 0x0095, - /* 03 */ 0x008B, - }, - { - /* 00 */ 0x0088, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x0099, - /* 03 */ 0x008E, - }, - { - /* 00 */ 0x054D, - /* 01 */ 0x054E, - /* 02 */ 0x054F, - /* 03 */ 0x054C, - }, - { - /* 00 */ 0x0312, - /* 01 */ 0x0313, - /* 02 */ 0x0314, - /* 03 */ 0x0311, - }, - { - /* 00 */ 0x00AE, - /* 01 */ 0x00AF, - /* 02 */ 0x00B0, - /* 03 */ 0x00AD, - }, - { - /* 00 */ 0x030D, - /* 01 */ 0x030E, - /* 02 */ 0x030F, - /* 03 */ 0x030C, - }, - { - /* 00 */ 0x04A2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A3, - }, - { - /* 00 */ 0x04A7, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A8, - }, - { - /* 00 */ 0x04A5, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A4, - }, - { - /* 00 */ 0x03AA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03AB, - }, - { - /* 00 */ 0x03D7, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D6, - }, - { - /* 00 */ 0x03DC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03DB, - }, - { - /* 00 */ 0x03D8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D9, - }, - { - /* 00 */ 0x03AD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03AE, - }, - { - /* 00 */ 0x049B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x049C, - }, - { - /* 00 */ 0x04A1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A0, - }, - { - /* 00 */ 0x049E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x049D, - }, - { - /* 00 */ 0x03A8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03A9, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04A6, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x049F, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0002), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0003), - }, - { - /* 00 */ 0x0363, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x034A, - /* 03 */ 0x0348, - }, - { - /* 00 */ 0x0460, - /* 01 */ 0x045F, - /* 02 */ 0x045E, - /* 03 */ 0x045D, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0004), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0005), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0006), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0007), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0008), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0009), - }, - { - /* 00 */ 0x03CD, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CE, - }, - { - /* 00 */ 0x03D2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03D3, - }, - { - /* 00 */ 0x03D0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03CF, - }, - { - /* 00 */ 0x00B3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x0013), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x0014), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x029C, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x029B, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x029F, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x029E, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0004), - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x035F, - /* 03 */ ZYDIS_NODE(OTNT_OPERAND_SIZE, 0x0005), - }, - { - /* 00 */ 0x0362, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x034B, - /* 03 */ 0x0349, - }, - { - /* 00 */ 0x02E9, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02E3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02C9, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02DF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02CF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02E0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02CC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02C8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02EE, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02E7, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02EA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02E4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02D6, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02D4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02D7, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02D2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0512, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0507, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0506, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0509, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0508, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0505, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0514, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0511, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0513, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0510, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x050A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04B5, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x044A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0083, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0044, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0524, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0523, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000A), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000B), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04B6, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0444, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04EC, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x004A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x052C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x052B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000C), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000D), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02A2, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x007C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x007D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0308, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0048, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02F8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02FA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x037B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x037A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ 0x044D, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000E), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0046, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0039, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0373, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0374, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06A1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06A0, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0075, - /* 01 */ 0x0077, - /* 02 */ 0x007A, - /* 03 */ 0x0074, - }, - { - /* 00 */ 0x035A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x040D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x040C, - }, - { - /* 00 */ 0x03E4, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03E5, - }, - { - /* 00 */ 0x052E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x052D, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x000F), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0010), - /* 03 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0011), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODRM_REG, 0x0012), - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0040, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x003B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0042, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0041, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x001E, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x001D, - }, - { - /* 00 */ 0x0487, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0488, - }, - { - /* 00 */ 0x047D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x047F, - }, - { - /* 00 */ 0x0483, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0484, - }, - { - /* 00 */ 0x03B3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B4, - }, - { - /* 00 */ 0x0439, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x043A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0347, - /* 02 */ 0x0366, - /* 03 */ 0x0361, - }, - { - /* 00 */ 0x0422, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0423, - }, - { - /* 00 */ 0x0494, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0493, - }, - { - /* 00 */ 0x0496, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0495, - }, - { - /* 00 */ 0x041E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x041F, - }, - { - /* 00 */ 0x03C1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C2, - }, - { - /* 00 */ 0x03BA, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B9, - }, - { - /* 00 */ 0x03BB, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03BC, - }, - { - /* 00 */ 0x0417, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0416, - }, - { - /* 00 */ 0x03C3, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C4, - }, - { - /* 00 */ 0x03C5, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C6, - }, - { - /* 00 */ 0x047A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x047B, - }, - { - /* 00 */ 0x0477, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0474, - }, - { - /* 00 */ 0x03C8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03C9, - }, - { - /* 00 */ 0x0434, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0435, - }, - { - /* 00 */ 0x0436, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0437, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0089, - /* 02 */ 0x0087, - /* 03 */ 0x0097, - }, - { - /* 00 */ 0x035D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0358, - }, - { - /* 00 */ 0x048F, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0490, - }, - { - /* 00 */ 0x0492, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0491, - }, - { - /* 00 */ 0x041C, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x041D, - }, - { - /* 00 */ 0x0453, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0452, - }, - { - /* 00 */ 0x03B6, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B5, - }, - { - /* 00 */ 0x03B8, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B7, - }, - { - /* 00 */ 0x0414, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0415, - }, - { - /* 00 */ 0x04C1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x04C2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02F1, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0472, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0471, - }, - { - /* 00 */ 0x0469, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0467, - }, - { - /* 00 */ 0x046E, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x046F, - }, - { - /* 00 */ 0x043B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x043C, - }, - { - /* 00 */ 0x0411, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0410, - }, - { - /* 00 */ 0x045A, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0459, - }, - { - /* 00 */ 0x030B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x030A, - }, - { - /* 00 */ 0x0489, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x048A, - }, - { - /* 00 */ 0x0498, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x0497, - }, - { - /* 00 */ 0x048B, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x048C, - }, - { - /* 00 */ 0x048D, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x048E, - }, - { - /* 00 */ 0x03AF, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B0, - }, - { - /* 00 */ 0x03BE, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03BD, - }, - { - /* 00 */ 0x03B1, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ 0x03B2, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeX87[][64] = -{ - { - /* 00 */ 0x00BC, - /* 01 */ 0x00BF, - /* 02 */ 0x00C2, - /* 03 */ 0x00C1, - /* 04 */ 0x00C0, - /* 05 */ 0x00C5, - /* 06 */ 0x00C3, - /* 07 */ 0x00C4, - /* 08 */ 0x01CE, - /* 09 */ 0x01CD, - /* 0A */ 0x01D9, - /* 0B */ 0x01DA, - /* 0C */ 0x01DB, - /* 0D */ 0x01D6, - /* 0E */ 0x01D7, - /* 0F */ 0x01D8, - /* 10 */ 0x011A, - /* 11 */ 0x011C, - /* 12 */ 0x011B, - /* 13 */ 0x0117, - /* 14 */ 0x0116, - /* 15 */ 0x011D, - /* 16 */ 0x011F, - /* 17 */ 0x011E, - /* 18 */ 0x013A, - /* 19 */ 0x0141, - /* 1A */ 0x013C, - /* 1B */ 0x0138, - /* 1C */ 0x013B, - /* 1D */ 0x0140, - /* 1E */ 0x013F, - /* 1F */ 0x0139, - /* 20 */ 0x022E, - /* 21 */ 0x0226, - /* 22 */ 0x0229, - /* 23 */ 0x0232, - /* 24 */ 0x0231, - /* 25 */ 0x022D, - /* 26 */ 0x022A, - /* 27 */ 0x0227, - /* 28 */ 0x0246, - /* 29 */ 0x024B, - /* 2A */ 0x024C, - /* 2B */ 0x024A, - /* 2C */ 0x0248, - /* 2D */ 0x0249, - /* 2E */ 0x0250, - /* 2F */ 0x0251, - /* 30 */ 0x0161, - /* 31 */ 0x0162, - /* 32 */ 0x0155, - /* 33 */ 0x015A, - /* 34 */ 0x0159, - /* 35 */ 0x0156, - /* 36 */ 0x0157, - /* 37 */ 0x0163, - /* 38 */ 0x0172, - /* 39 */ 0x016F, - /* 3A */ 0x0170, - /* 3B */ 0x0173, - /* 3C */ 0x0176, - /* 3D */ 0x0177, - /* 3E */ 0x0174, - /* 3F */ 0x0175, - }, - { - /* 00 */ 0x01BD, - /* 01 */ 0x01C0, - /* 02 */ 0x01BF, - /* 03 */ 0x01BE, - /* 04 */ 0x01B7, - /* 05 */ 0x01B6, - /* 06 */ 0x01B9, - /* 07 */ 0x01B8, - /* 08 */ 0x0281, - /* 09 */ 0x0282, - /* 0A */ 0x0283, - /* 0B */ 0x0280, - /* 0C */ 0x027D, - /* 0D */ 0x027E, - /* 0E */ 0x027F, - /* 0F */ 0x0284, - /* 10 */ 0x01E7, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ ZYDIS_INVALID, - /* 17 */ ZYDIS_INVALID, - /* 18 */ 0x0213, - /* 19 */ 0x0212, - /* 1A */ 0x0215, - /* 1B */ 0x0214, - /* 1C */ 0x020F, - /* 1D */ 0x020E, - /* 1E */ 0x0211, - /* 1F */ 0x0210, - /* 20 */ 0x00D4, - /* 21 */ 0x00B7, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ 0x025A, - /* 25 */ 0x027C, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x01C1, - /* 29 */ 0x01C5, - /* 2A */ 0x01C4, - /* 2B */ 0x01C8, - /* 2C */ 0x01C6, - /* 2D */ 0x01C7, - /* 2E */ 0x01C9, - /* 2F */ ZYDIS_INVALID, - /* 30 */ 0x00B6, - /* 31 */ 0x0298, - /* 32 */ 0x01F1, - /* 33 */ 0x01EE, - /* 34 */ 0x0297, - /* 35 */ 0x01F0, - /* 36 */ 0x0154, - /* 37 */ 0x01A9, - /* 38 */ 0x01EF, - /* 39 */ 0x0299, - /* 3A */ 0x01F8, - /* 3B */ 0x01F7, - /* 3C */ 0x01F2, - /* 3D */ 0x01F5, - /* 3E */ 0x01F6, - /* 3F */ 0x0153, - }, - { - /* 00 */ 0x00D9, - /* 01 */ 0x00DA, - /* 02 */ 0x00DB, - /* 03 */ 0x00D6, - /* 04 */ 0x00D7, - /* 05 */ 0x00D8, - /* 06 */ 0x00DD, - /* 07 */ 0x00DC, - /* 08 */ 0x00E6, - /* 09 */ 0x00E7, - /* 0A */ 0x00E8, - /* 0B */ 0x00EC, - /* 0C */ 0x00ED, - /* 0D */ 0x00EB, - /* 0E */ 0x00E9, - /* 0F */ 0x00EA, - /* 10 */ 0x00E4, - /* 11 */ 0x00E5, - /* 12 */ 0x00E2, - /* 13 */ 0x00E3, - /* 14 */ 0x00DF, - /* 15 */ 0x00DE, - /* 16 */ 0x00E0, - /* 17 */ 0x00E1, - /* 18 */ 0x0113, - /* 19 */ 0x0114, - /* 1A */ 0x0115, - /* 1B */ 0x010F, - /* 1C */ 0x010E, - /* 1D */ 0x0110, - /* 1E */ 0x0111, - /* 1F */ 0x0112, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ 0x027B, - /* 2A */ ZYDIS_INVALID, - /* 2B */ ZYDIS_INVALID, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x00F0, - /* 01 */ 0x00F1, - /* 02 */ 0x00EE, - /* 03 */ 0x00EF, - /* 04 */ 0x00F4, - /* 05 */ 0x00F5, - /* 06 */ 0x00F2, - /* 07 */ 0x00F3, - /* 08 */ 0x0103, - /* 09 */ 0x0102, - /* 0A */ 0x0105, - /* 0B */ 0x0104, - /* 0C */ 0x00FF, - /* 0D */ 0x00FE, - /* 0E */ 0x0101, - /* 0F */ 0x0100, - /* 10 */ 0x00F8, - /* 11 */ 0x00F9, - /* 12 */ 0x00F6, - /* 13 */ 0x00F7, - /* 14 */ 0x00FC, - /* 15 */ 0x00FD, - /* 16 */ 0x00FA, - /* 17 */ 0x00FB, - /* 18 */ 0x010B, - /* 19 */ 0x010A, - /* 1A */ 0x010D, - /* 1B */ 0x010C, - /* 1C */ 0x0107, - /* 1D */ 0x0106, - /* 1E */ 0x0109, - /* 1F */ 0x0108, - /* 20 */ 0x01E5, - /* 21 */ 0x01E4, - /* 22 */ 0x00D5, - /* 23 */ 0x01E6, - /* 24 */ 0x01E9, - /* 25 */ 0x01F4, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x0269, - /* 29 */ 0x026A, - /* 2A */ 0x0265, - /* 2B */ 0x0264, - /* 2C */ 0x0263, - /* 2D */ 0x0268, - /* 2E */ 0x0267, - /* 2F */ 0x0266, - /* 30 */ 0x0129, - /* 31 */ 0x0128, - /* 32 */ 0x012B, - /* 33 */ 0x012A, - /* 34 */ 0x012F, - /* 35 */ 0x012E, - /* 36 */ 0x012D, - /* 37 */ 0x012C, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x00B9, - /* 01 */ 0x00B8, - /* 02 */ 0x00C6, - /* 03 */ 0x00C9, - /* 04 */ 0x00C8, - /* 05 */ 0x00C7, - /* 06 */ 0x00BE, - /* 07 */ 0x00BD, - /* 08 */ 0x01D1, - /* 09 */ 0x01D0, - /* 0A */ 0x01D5, - /* 0B */ 0x01D4, - /* 0C */ 0x01D3, - /* 0D */ 0x01CC, - /* 0E */ 0x01CB, - /* 0F */ 0x01CA, - /* 10 */ 0x0125, - /* 11 */ 0x0124, - /* 12 */ 0x0127, - /* 13 */ 0x0126, - /* 14 */ 0x0121, - /* 15 */ 0x0120, - /* 16 */ 0x0123, - /* 17 */ 0x0122, - /* 18 */ 0x0148, - /* 19 */ 0x0142, - /* 1A */ 0x0145, - /* 1B */ 0x0144, - /* 1C */ 0x0143, - /* 1D */ 0x0147, - /* 1E */ 0x0146, - /* 1F */ 0x0149, - /* 20 */ 0x024F, - /* 21 */ 0x0247, - /* 22 */ 0x0241, - /* 23 */ 0x0242, - /* 24 */ 0x0240, - /* 25 */ 0x024E, - /* 26 */ 0x024D, - /* 27 */ 0x0244, - /* 28 */ 0x0228, - /* 29 */ 0x0235, - /* 2A */ 0x0234, - /* 2B */ 0x0237, - /* 2C */ 0x0236, - /* 2D */ 0x0233, - /* 2E */ 0x0230, - /* 2F */ 0x022F, - /* 30 */ 0x017B, - /* 31 */ 0x0178, - /* 32 */ 0x0179, - /* 33 */ 0x017C, - /* 34 */ 0x017F, - /* 35 */ 0x0180, - /* 36 */ 0x017D, - /* 37 */ 0x017E, - /* 38 */ 0x015E, - /* 39 */ 0x015F, - /* 3A */ 0x0160, - /* 3B */ 0x015B, - /* 3C */ 0x015C, - /* 3D */ 0x015D, - /* 3E */ 0x0164, - /* 3F */ 0x0165, - }, - { - /* 00 */ 0x018F, - /* 01 */ 0x018E, - /* 02 */ 0x0191, - /* 03 */ 0x0190, - /* 04 */ 0x018B, - /* 05 */ 0x018A, - /* 06 */ 0x018D, - /* 07 */ 0x018C, - /* 08 */ 0x028A, - /* 09 */ 0x0289, - /* 0A */ 0x028C, - /* 0B */ 0x028B, - /* 0C */ 0x0286, - /* 0D */ 0x0285, - /* 0E */ 0x0288, - /* 0F */ 0x0287, - /* 10 */ 0x0200, - /* 11 */ 0x0202, - /* 12 */ 0x0201, - /* 13 */ 0x01FA, - /* 14 */ 0x01F9, - /* 15 */ 0x01FB, - /* 16 */ 0x01FD, - /* 17 */ 0x01FC, - /* 18 */ 0x020D, - /* 19 */ 0x020C, - /* 1A */ 0x0208, - /* 1B */ 0x0204, - /* 1C */ 0x0203, - /* 1D */ 0x0205, - /* 1E */ 0x0207, - /* 1F */ 0x0206, - /* 20 */ 0x025D, - /* 21 */ 0x025C, - /* 22 */ 0x025B, - /* 23 */ 0x025E, - /* 24 */ 0x0261, - /* 25 */ 0x0262, - /* 26 */ 0x025F, - /* 27 */ 0x0260, - /* 28 */ 0x0278, - /* 29 */ 0x0277, - /* 2A */ 0x027A, - /* 2B */ 0x0279, - /* 2C */ 0x0274, - /* 2D */ 0x0273, - /* 2E */ 0x0276, - /* 2F */ 0x0275, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x00CC, - /* 01 */ 0x00CD, - /* 02 */ 0x00CA, - /* 03 */ 0x00CB, - /* 04 */ 0x00D0, - /* 05 */ 0x00D1, - /* 06 */ 0x00CE, - /* 07 */ 0x00CF, - /* 08 */ 0x01E1, - /* 09 */ 0x01E0, - /* 0A */ 0x01E3, - /* 0B */ 0x01E2, - /* 0C */ 0x01DD, - /* 0D */ 0x01DC, - /* 0E */ 0x01DF, - /* 0F */ 0x01DE, - /* 10 */ 0x014F, - /* 11 */ 0x014E, - /* 12 */ 0x0151, - /* 13 */ 0x0150, - /* 14 */ 0x014B, - /* 15 */ 0x014A, - /* 16 */ 0x014D, - /* 17 */ 0x014C, - /* 18 */ ZYDIS_INVALID, - /* 19 */ 0x0152, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ ZYDIS_INVALID, - /* 1D */ ZYDIS_INVALID, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ 0x0258, - /* 21 */ 0x0259, - /* 22 */ 0x0256, - /* 23 */ 0x0257, - /* 24 */ 0x0253, - /* 25 */ 0x0252, - /* 26 */ 0x0255, - /* 27 */ 0x0254, - /* 28 */ 0x023B, - /* 29 */ 0x023D, - /* 2A */ 0x023C, - /* 2B */ 0x0239, - /* 2C */ 0x0238, - /* 2D */ 0x023A, - /* 2E */ 0x023E, - /* 2F */ 0x023F, - /* 30 */ 0x0186, - /* 31 */ 0x0185, - /* 32 */ 0x0188, - /* 33 */ 0x0187, - /* 34 */ 0x0182, - /* 35 */ 0x0181, - /* 36 */ 0x0184, - /* 37 */ 0x0183, - /* 38 */ 0x016C, - /* 39 */ 0x016B, - /* 3A */ 0x016E, - /* 3B */ 0x016D, - /* 3C */ 0x0168, - /* 3D */ 0x0167, - /* 3E */ 0x016A, - /* 3F */ 0x0169, - }, - { - /* 00 */ 0x0199, - /* 01 */ 0x0196, - /* 02 */ 0x0197, - /* 03 */ 0x0198, - /* 04 */ 0x0193, - /* 05 */ 0x0192, - /* 06 */ 0x0195, - /* 07 */ 0x0194, - /* 08 */ 0x028F, - /* 09 */ 0x0290, - /* 0A */ 0x028D, - /* 0B */ 0x028E, - /* 0C */ 0x0293, - /* 0D */ 0x0294, - /* 0E */ 0x0291, - /* 0F */ 0x0292, - /* 10 */ 0x021B, - /* 11 */ 0x021A, - /* 12 */ 0x021D, - /* 13 */ 0x021C, - /* 14 */ 0x0217, - /* 15 */ 0x0216, - /* 16 */ 0x0219, - /* 17 */ 0x0218, - /* 18 */ 0x0220, - /* 19 */ 0x0221, - /* 1A */ 0x021E, - /* 1B */ 0x021F, - /* 1C */ 0x0224, - /* 1D */ 0x0225, - /* 1E */ 0x0222, - /* 1F */ 0x0223, - /* 20 */ 0x01EC, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ 0x0271, - /* 29 */ 0x0272, - /* 2A */ 0x026D, - /* 2B */ 0x026C, - /* 2C */ 0x026B, - /* 2D */ 0x0270, - /* 2E */ 0x026F, - /* 2F */ 0x026E, - /* 30 */ 0x0136, - /* 31 */ 0x0137, - /* 32 */ 0x0133, - /* 33 */ 0x0134, - /* 34 */ 0x0135, - /* 35 */ 0x0130, - /* 36 */ 0x0131, - /* 37 */ 0x0132, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeAddressSize[][3] = -{ - { - /* 00 */ 0x02CD, - /* 01 */ 0x02D0, - /* 02 */ 0x02EC, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeOperandSize[][3] = -{ - { - /* 00 */ 0x03E0, - /* 01 */ 0x03E1, - /* 02 */ 0x03E2, - }, - { - /* 00 */ 0x0409, - /* 01 */ 0x040A, - /* 02 */ 0x040B, - }, - { - /* 00 */ 0x033D, - /* 01 */ 0x0343, - /* 02 */ 0x035E, - }, - { - /* 00 */ 0x0341, - /* 01 */ 0x0342, - /* 02 */ 0x0364, - }, - { - /* 00 */ 0x0344, - /* 01 */ 0x033E, - /* 02 */ 0x0365, - }, - { - /* 00 */ 0x0340, - /* 01 */ 0x033F, - /* 02 */ 0x0360, - }, - { - /* 00 */ 0x007F, - /* 01 */ 0x0080, - /* 02 */ 0x007E, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x000F), - /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x0010), - /* 02 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0011), - /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x0012), - /* 02 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02B8, - /* 01 */ 0x02B6, - /* 02 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x03A1, - /* 01 */ 0x03A0, - /* 02 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0050, - /* 01 */ 0x009E, - /* 02 */ 0x0052, - }, - { - /* 00 */ 0x009D, - /* 01 */ 0x0051, - /* 02 */ 0x0084, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x001E), - /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x001F), - /* 02 */ ZYDIS_NODE(OTNT_MODE, 0x0020), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0021), - /* 01 */ ZYDIS_NODE(OTNT_MODE, 0x0022), - /* 02 */ ZYDIS_NODE(OTNT_MODE, 0x0023), - }, - { - /* 00 */ 0x0372, - /* 01 */ 0x0369, - /* 02 */ 0x036F, - }, - { - /* 00 */ 0x007B, - /* 01 */ 0x0078, - /* 02 */ 0x0079, - }, - { - /* 00 */ 0x0540, - /* 01 */ 0x053E, - /* 02 */ 0x053F, - }, - { - /* 00 */ 0x0303, - /* 01 */ 0x0301, - /* 02 */ 0x0302, - }, - { - /* 00 */ 0x0504, - /* 01 */ 0x0502, - /* 02 */ 0x0503, - }, - { - /* 00 */ 0x05BB, - /* 01 */ 0x05BA, - /* 02 */ 0x05D5, - }, - { - /* 00 */ 0x05B9, - /* 01 */ 0x05BC, - /* 02 */ 0x05D6, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VEXW, 0x000E), - /* 01 */ ZYDIS_NODE(OTNT_VEXW, 0x000F), - /* 02 */ ZYDIS_NODE(OTNT_VEXW, 0x0010), - }, - { - /* 00 */ 0x02C6, - /* 01 */ 0x02C4, - /* 02 */ 0x02C5, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeMode[][2] = -{ - { - /* 00 */ 0x04AA, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0445, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04AD, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0553, - /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x000D), - }, - { - /* 00 */ 0x0555, - /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x000E), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x000F), - /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x0010), - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VENDOR, 0x0011), - /* 01 */ ZYDIS_NODE(OTNT_VENDOR, 0x0012), - }, - { - /* 00 */ 0x04AC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0446, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04A9, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0443, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x009F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x00A0, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0001, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0004, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04BA, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04BB, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x044B, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x044C, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0038, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0033, - /* 01 */ 0x0375, - }, - { - /* 00 */ 0x0011, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0398, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0007, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04FC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x002A, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0546, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x06B3, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0073, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x004F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04C0, - /* 01 */ 0x04BF, - }, - { - /* 00 */ 0x04BC, - /* 01 */ 0x04BE, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x04BD, - }, - { - /* 00 */ 0x0451, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x044E, - /* 01 */ 0x0450, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x044F, - }, - { - /* 00 */ 0x02F6, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VEXW, 0x0014), - /* 01 */ ZYDIS_NODE(OTNT_VEXW, 0x0015), - }, - { - /* 00 */ 0x02F3, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02BC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0003, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0002, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04F0, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02DC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x004D, - /* 01 */ 0x004B, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeVendor[][2] = -{ - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05AC, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05B2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05EB, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05F3, - }, - { - /* 00 */ 0x05EC, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05B4, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05B3, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05ED, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x053A, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0056, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0530, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x02C1, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x04D5, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0552, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0554, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02BE, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02BF, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02C3, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x02C2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05EA, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05F2, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05E8, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05E9, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05F4, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05AD, - }, -}; - -const ZyDisOpcodeTreeNode vxOptree3dnow[][256] = -{ - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ ZYDIS_INVALID, - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_INVALID, - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_INVALID, - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ 0x0407, - /* 0D */ 0x0406, - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - /* 10 */ ZYDIS_INVALID, - /* 11 */ ZYDIS_INVALID, - /* 12 */ ZYDIS_INVALID, - /* 13 */ ZYDIS_INVALID, - /* 14 */ ZYDIS_INVALID, - /* 15 */ ZYDIS_INVALID, - /* 16 */ ZYDIS_INVALID, - /* 17 */ ZYDIS_INVALID, - /* 18 */ ZYDIS_INVALID, - /* 19 */ ZYDIS_INVALID, - /* 1A */ ZYDIS_INVALID, - /* 1B */ ZYDIS_INVALID, - /* 1C */ 0x03E7, - /* 1D */ 0x03E6, - /* 1E */ ZYDIS_INVALID, - /* 1F */ ZYDIS_INVALID, - /* 20 */ ZYDIS_INVALID, - /* 21 */ ZYDIS_INVALID, - /* 22 */ ZYDIS_INVALID, - /* 23 */ ZYDIS_INVALID, - /* 24 */ ZYDIS_INVALID, - /* 25 */ ZYDIS_INVALID, - /* 26 */ ZYDIS_INVALID, - /* 27 */ ZYDIS_INVALID, - /* 28 */ ZYDIS_INVALID, - /* 29 */ ZYDIS_INVALID, - /* 2A */ ZYDIS_INVALID, - /* 2B */ ZYDIS_INVALID, - /* 2C */ ZYDIS_INVALID, - /* 2D */ ZYDIS_INVALID, - /* 2E */ ZYDIS_INVALID, - /* 2F */ ZYDIS_INVALID, - /* 30 */ ZYDIS_INVALID, - /* 31 */ ZYDIS_INVALID, - /* 32 */ ZYDIS_INVALID, - /* 33 */ ZYDIS_INVALID, - /* 34 */ ZYDIS_INVALID, - /* 35 */ ZYDIS_INVALID, - /* 36 */ ZYDIS_INVALID, - /* 37 */ ZYDIS_INVALID, - /* 38 */ ZYDIS_INVALID, - /* 39 */ ZYDIS_INVALID, - /* 3A */ ZYDIS_INVALID, - /* 3B */ ZYDIS_INVALID, - /* 3C */ ZYDIS_INVALID, - /* 3D */ ZYDIS_INVALID, - /* 3E */ ZYDIS_INVALID, - /* 3F */ ZYDIS_INVALID, - /* 40 */ ZYDIS_INVALID, - /* 41 */ ZYDIS_INVALID, - /* 42 */ ZYDIS_INVALID, - /* 43 */ ZYDIS_INVALID, - /* 44 */ ZYDIS_INVALID, - /* 45 */ ZYDIS_INVALID, - /* 46 */ ZYDIS_INVALID, - /* 47 */ ZYDIS_INVALID, - /* 48 */ ZYDIS_INVALID, - /* 49 */ ZYDIS_INVALID, - /* 4A */ ZYDIS_INVALID, - /* 4B */ ZYDIS_INVALID, - /* 4C */ ZYDIS_INVALID, - /* 4D */ ZYDIS_INVALID, - /* 4E */ ZYDIS_INVALID, - /* 4F */ ZYDIS_INVALID, - /* 50 */ ZYDIS_INVALID, - /* 51 */ ZYDIS_INVALID, - /* 52 */ ZYDIS_INVALID, - /* 53 */ ZYDIS_INVALID, - /* 54 */ ZYDIS_INVALID, - /* 55 */ ZYDIS_INVALID, - /* 56 */ ZYDIS_INVALID, - /* 57 */ ZYDIS_INVALID, - /* 58 */ ZYDIS_INVALID, - /* 59 */ ZYDIS_INVALID, - /* 5A */ ZYDIS_INVALID, - /* 5B */ ZYDIS_INVALID, - /* 5C */ ZYDIS_INVALID, - /* 5D */ ZYDIS_INVALID, - /* 5E */ ZYDIS_INVALID, - /* 5F */ ZYDIS_INVALID, - /* 60 */ ZYDIS_INVALID, - /* 61 */ ZYDIS_INVALID, - /* 62 */ ZYDIS_INVALID, - /* 63 */ ZYDIS_INVALID, - /* 64 */ ZYDIS_INVALID, - /* 65 */ ZYDIS_INVALID, - /* 66 */ ZYDIS_INVALID, - /* 67 */ ZYDIS_INVALID, - /* 68 */ ZYDIS_INVALID, - /* 69 */ ZYDIS_INVALID, - /* 6A */ ZYDIS_INVALID, - /* 6B */ ZYDIS_INVALID, - /* 6C */ ZYDIS_INVALID, - /* 6D */ ZYDIS_INVALID, - /* 6E */ ZYDIS_INVALID, - /* 6F */ ZYDIS_INVALID, - /* 70 */ ZYDIS_INVALID, - /* 71 */ ZYDIS_INVALID, - /* 72 */ ZYDIS_INVALID, - /* 73 */ ZYDIS_INVALID, - /* 74 */ ZYDIS_INVALID, - /* 75 */ ZYDIS_INVALID, - /* 76 */ ZYDIS_INVALID, - /* 77 */ ZYDIS_INVALID, - /* 78 */ ZYDIS_INVALID, - /* 79 */ ZYDIS_INVALID, - /* 7A */ ZYDIS_INVALID, - /* 7B */ ZYDIS_INVALID, - /* 7C */ ZYDIS_INVALID, - /* 7D */ ZYDIS_INVALID, - /* 7E */ ZYDIS_INVALID, - /* 7F */ ZYDIS_INVALID, - /* 80 */ ZYDIS_INVALID, - /* 81 */ ZYDIS_INVALID, - /* 82 */ ZYDIS_INVALID, - /* 83 */ ZYDIS_INVALID, - /* 84 */ ZYDIS_INVALID, - /* 85 */ ZYDIS_INVALID, - /* 86 */ ZYDIS_INVALID, - /* 87 */ ZYDIS_INVALID, - /* 88 */ ZYDIS_INVALID, - /* 89 */ ZYDIS_INVALID, - /* 8A */ 0x03F0, - /* 8B */ ZYDIS_INVALID, - /* 8C */ ZYDIS_INVALID, - /* 8D */ ZYDIS_INVALID, - /* 8E */ 0x03F1, - /* 8F */ ZYDIS_INVALID, - /* 90 */ 0x03EB, - /* 91 */ ZYDIS_INVALID, - /* 92 */ ZYDIS_INVALID, - /* 93 */ ZYDIS_INVALID, - /* 94 */ 0x03EE, - /* 95 */ ZYDIS_INVALID, - /* 96 */ 0x03F2, - /* 97 */ 0x03F6, - /* 98 */ ZYDIS_INVALID, - /* 99 */ ZYDIS_INVALID, - /* 9A */ 0x03F7, - /* 9B */ ZYDIS_INVALID, - /* 9C */ ZYDIS_INVALID, - /* 9D */ ZYDIS_INVALID, - /* 9E */ 0x03E9, - /* 9F */ ZYDIS_INVALID, - /* A0 */ 0x03EC, - /* A1 */ ZYDIS_INVALID, - /* A2 */ ZYDIS_INVALID, - /* A3 */ ZYDIS_INVALID, - /* A4 */ 0x03ED, - /* A5 */ ZYDIS_INVALID, - /* A6 */ 0x03F3, - /* A7 */ 0x03F5, - /* A8 */ ZYDIS_INVALID, - /* A9 */ ZYDIS_INVALID, - /* AA */ 0x03F8, - /* AB */ ZYDIS_INVALID, - /* AC */ ZYDIS_INVALID, - /* AD */ ZYDIS_INVALID, - /* AE */ 0x03E8, - /* AF */ ZYDIS_INVALID, - /* B0 */ 0x03EA, - /* B1 */ ZYDIS_INVALID, - /* B2 */ ZYDIS_INVALID, - /* B3 */ ZYDIS_INVALID, - /* B4 */ 0x03EF, - /* B5 */ ZYDIS_INVALID, - /* B6 */ 0x03F4, - /* B7 */ 0x0433, - /* B8 */ ZYDIS_INVALID, - /* B9 */ ZYDIS_INVALID, - /* BA */ ZYDIS_INVALID, - /* BB */ 0x0499, - /* BC */ ZYDIS_INVALID, - /* BD */ ZYDIS_INVALID, - /* BE */ ZYDIS_INVALID, - /* BF */ 0x03C7, - /* C0 */ ZYDIS_INVALID, - /* C1 */ ZYDIS_INVALID, - /* C2 */ ZYDIS_INVALID, - /* C3 */ ZYDIS_INVALID, - /* C4 */ ZYDIS_INVALID, - /* C5 */ ZYDIS_INVALID, - /* C6 */ ZYDIS_INVALID, - /* C7 */ ZYDIS_INVALID, - /* C8 */ ZYDIS_INVALID, - /* C9 */ ZYDIS_INVALID, - /* CA */ ZYDIS_INVALID, - /* CB */ ZYDIS_INVALID, - /* CC */ ZYDIS_INVALID, - /* CD */ ZYDIS_INVALID, - /* CE */ ZYDIS_INVALID, - /* CF */ ZYDIS_INVALID, - /* D0 */ ZYDIS_INVALID, - /* D1 */ ZYDIS_INVALID, - /* D2 */ ZYDIS_INVALID, - /* D3 */ ZYDIS_INVALID, - /* D4 */ ZYDIS_INVALID, - /* D5 */ ZYDIS_INVALID, - /* D6 */ ZYDIS_INVALID, - /* D7 */ ZYDIS_INVALID, - /* D8 */ ZYDIS_INVALID, - /* D9 */ ZYDIS_INVALID, - /* DA */ ZYDIS_INVALID, - /* DB */ ZYDIS_INVALID, - /* DC */ ZYDIS_INVALID, - /* DD */ ZYDIS_INVALID, - /* DE */ ZYDIS_INVALID, - /* DF */ ZYDIS_INVALID, - /* E0 */ ZYDIS_INVALID, - /* E1 */ ZYDIS_INVALID, - /* E2 */ ZYDIS_INVALID, - /* E3 */ ZYDIS_INVALID, - /* E4 */ ZYDIS_INVALID, - /* E5 */ ZYDIS_INVALID, - /* E6 */ ZYDIS_INVALID, - /* E7 */ ZYDIS_INVALID, - /* E8 */ ZYDIS_INVALID, - /* E9 */ ZYDIS_INVALID, - /* EA */ ZYDIS_INVALID, - /* EB */ ZYDIS_INVALID, - /* EC */ ZYDIS_INVALID, - /* ED */ ZYDIS_INVALID, - /* EE */ ZYDIS_INVALID, - /* EF */ ZYDIS_INVALID, - /* F0 */ ZYDIS_INVALID, - /* F1 */ ZYDIS_INVALID, - /* F2 */ ZYDIS_INVALID, - /* F3 */ ZYDIS_INVALID, - /* F4 */ ZYDIS_INVALID, - /* F5 */ ZYDIS_INVALID, - /* F6 */ ZYDIS_INVALID, - /* F7 */ ZYDIS_INVALID, - /* F8 */ ZYDIS_INVALID, - /* F9 */ ZYDIS_INVALID, - /* FA */ ZYDIS_INVALID, - /* FB */ ZYDIS_INVALID, - /* FC */ ZYDIS_INVALID, - /* FD */ ZYDIS_INVALID, - /* FE */ ZYDIS_INVALID, - /* FF */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeVex[][16] = -{ - { - /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0024), - /* 01 */ ZYDIS_NODE(OTNT_TABLE, 0x0004), - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_NODE(OTNT_TABLE, 0x0005), - /* 06 */ ZYDIS_NODE(OTNT_TABLE, 0x0006), - /* 07 */ ZYDIS_NODE(OTNT_TABLE, 0x0007), - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_NODE(OTNT_TABLE, 0x0008), - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_NODE(OTNT_TABLE, 0x0009), - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_MODE, 0x0026), - /* 01 */ ZYDIS_NODE(OTNT_TABLE, 0x0004), - /* 02 */ ZYDIS_INVALID, - /* 03 */ ZYDIS_INVALID, - /* 04 */ ZYDIS_INVALID, - /* 05 */ ZYDIS_NODE(OTNT_TABLE, 0x0005), - /* 06 */ ZYDIS_INVALID, - /* 07 */ ZYDIS_INVALID, - /* 08 */ ZYDIS_INVALID, - /* 09 */ ZYDIS_NODE(OTNT_TABLE, 0x0008), - /* 0A */ ZYDIS_INVALID, - /* 0B */ ZYDIS_INVALID, - /* 0C */ ZYDIS_INVALID, - /* 0D */ ZYDIS_NODE(OTNT_TABLE, 0x0009), - /* 0E */ ZYDIS_INVALID, - /* 0F */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeVexW[][2] = -{ - { - /* 00 */ 0x061D, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x061C, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0692, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0691, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x057B, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x0008), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05A6, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05A5, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05A7, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x05A4, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x061E, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x061B, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x0009), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x061F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0620, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0621, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x0622, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000A), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000B), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000C), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000D), - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_NODE(OTNT_VEXL, 0x000E), - /* 01 */ ZYDIS_NODE(OTNT_VEXL, 0x000F), - }, - { - /* 00 */ 0x0579, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x0578, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x060B, - /* 01 */ ZYDIS_INVALID, - }, -}; - -const ZyDisOpcodeTreeNode vxOptreeVexL[][2] = -{ - { - /* 00 */ 0x069C, - /* 01 */ 0x069B, - }, - { - /* 00 */ 0x0660, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065A, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065E, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x063F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065F, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065B, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x065D, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x057A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x061A, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x05A0, - }, - { - /* 00 */ ZYDIS_INVALID, - /* 01 */ 0x059A, - }, - { - /* 00 */ 0x062C, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x062E, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x062D, - /* 01 */ ZYDIS_INVALID, - }, - { - /* 00 */ 0x062F, - /* 01 */ ZYDIS_INVALID, - }, -}; - -#undef ZYDIS_INVALID -#undef ZYDIS_NODE - -#define OPI_NONE { DOT_NONE, DOS_NA } -#define OPI_AL { DOT_AL, DOS_B } -#define OPI_AX { DOT_AX, DOS_W } -#define OPI_Av { DOT_A, DOS_V } -#define OPI_C { DOT_C, DOS_NA } -#define OPI_CL { DOT_CL, DOS_B } -#define OPI_CS { DOT_CS, DOS_NA } -#define OPI_CX { DOT_CX, DOS_W } -#define OPI_D { DOT_D, DOS_NA } -#define OPI_DL { DOT_DL, DOS_B } -#define OPI_DS { DOT_DS, DOS_NA } -#define OPI_DX { DOT_DX, DOS_W } -#define OPI_E { DOT_E, DOS_NA } -#define OPI_ES { DOT_ES, DOS_NA } -#define OPI_Eb { DOT_E, DOS_B } -#define OPI_Ed { DOT_E, DOS_D } -#define OPI_Eq { DOT_E, DOS_Q } -#define OPI_Ev { DOT_E, DOS_V } -#define OPI_Ew { DOT_E, DOS_W } -#define OPI_Ey { DOT_E, DOS_Y } -#define OPI_Ez { DOT_E, DOS_Z } -#define OPI_FS { DOT_FS, DOS_NA } -#define OPI_Fv { DOT_F, DOS_V } -#define OPI_G { DOT_G, DOS_NA } -#define OPI_GS { DOT_GS, DOS_NA } -#define OPI_Gb { DOT_G, DOS_B } -#define OPI_Gd { DOT_G, DOS_D } -#define OPI_Gq { DOT_G, DOS_Q } -#define OPI_Gv { DOT_G, DOS_V } -#define OPI_Gw { DOT_G, DOS_W } -#define OPI_Gy { DOT_G, DOS_Y } -#define OPI_Gz { DOT_G, DOS_Z } -#define OPI_H { DOT_H, DOS_X } -#define OPI_Hqq { DOT_H, DOS_QQ } -#define OPI_Hx { DOT_H, DOS_X } -#define OPI_I1 { DOT_I1, DOS_NA } -#define OPI_Ib { DOT_I, DOS_B } -#define OPI_Iv { DOT_I, DOS_V } -#define OPI_Iw { DOT_I, DOS_W } -#define OPI_Iz { DOT_I, DOS_Z } -#define OPI_Jb { DOT_J, DOS_B } -#define OPI_Jv { DOT_J, DOS_V } -#define OPI_Jz { DOT_J, DOS_Z } -#define OPI_L { DOT_L, DOS_O } -#define OPI_Lx { DOT_L, DOS_X } -#define OPI_M { DOT_M, DOS_NA } -#define OPI_Mb { DOT_M, DOS_B } -#define OPI_MbRd { DOT_MR, DOS_BD } -#define OPI_MbRv { DOT_MR, DOS_BV } -#define OPI_Md { DOT_M, DOS_D } -#define OPI_MdRy { DOT_MR, DOS_DY } -#define OPI_MdU { DOT_MU, DOS_DO } -#define OPI_Mdq { DOT_M, DOS_DQ } -#define OPI_Mo { DOT_M, DOS_O } -#define OPI_Mq { DOT_M, DOS_Q } -#define OPI_MqU { DOT_MU, DOS_QO } -#define OPI_Ms { DOT_M, DOS_W } -#define OPI_Mt { DOT_M, DOS_T } -#define OPI_Mv { DOT_M, DOS_V } -#define OPI_Mw { DOT_M, DOS_W } -#define OPI_MwRd { DOT_MR, DOS_WD } -#define OPI_MwRv { DOT_MR, DOS_WV } -#define OPI_MwRy { DOT_MR, DOS_WY } -#define OPI_MwU { DOT_MU, DOS_WO } -#define OPI_N { DOT_N, DOS_Q } -#define OPI_Ob { DOT_O, DOS_B } -#define OPI_Ov { DOT_O, DOS_V } -#define OPI_Ow { DOT_O, DOS_W } -#define OPI_P { DOT_P, DOS_Q } -#define OPI_Q { DOT_Q, DOS_Q } -#define OPI_R { DOT_R, DOS_RDQ } -#define OPI_R0b { DOT_R0, DOS_B } -#define OPI_R0v { DOT_R0, DOS_V } -#define OPI_R0w { DOT_R0, DOS_W } -#define OPI_R0y { DOT_R0, DOS_Y } -#define OPI_R0z { DOT_R0, DOS_Z } -#define OPI_R1b { DOT_R1, DOS_B } -#define OPI_R1v { DOT_R1, DOS_V } -#define OPI_R1w { DOT_R1, DOS_W } -#define OPI_R1y { DOT_R1, DOS_Y } -#define OPI_R1z { DOT_R1, DOS_Z } -#define OPI_R2b { DOT_R2, DOS_B } -#define OPI_R2v { DOT_R2, DOS_V } -#define OPI_R2w { DOT_R2, DOS_W } -#define OPI_R2y { DOT_R2, DOS_Y } -#define OPI_R2z { DOT_R2, DOS_Z } -#define OPI_R3b { DOT_R3, DOS_B } -#define OPI_R3v { DOT_R3, DOS_V } -#define OPI_R3w { DOT_R3, DOS_W } -#define OPI_R3y { DOT_R3, DOS_Y } -#define OPI_R3z { DOT_R3, DOS_Z } -#define OPI_R4b { DOT_R4, DOS_B } -#define OPI_R4v { DOT_R4, DOS_V } -#define OPI_R4w { DOT_R4, DOS_W } -#define OPI_R4y { DOT_R4, DOS_Y } -#define OPI_R4z { DOT_R4, DOS_Z } -#define OPI_R5b { DOT_R5, DOS_B } -#define OPI_R5v { DOT_R5, DOS_V } -#define OPI_R5w { DOT_R5, DOS_W } -#define OPI_R5y { DOT_R5, DOS_Y } -#define OPI_R5z { DOT_R5, DOS_Z } -#define OPI_R6b { DOT_R6, DOS_B } -#define OPI_R6v { DOT_R6, DOS_V } -#define OPI_R6w { DOT_R6, DOS_W } -#define OPI_R6y { DOT_R6, DOS_Y } -#define OPI_R6z { DOT_R6, DOS_Z } -#define OPI_R7b { DOT_R7, DOS_B } -#define OPI_R7v { DOT_R7, DOS_V } -#define OPI_R7w { DOT_R7, DOS_W } -#define OPI_R7y { DOT_R7, DOS_Y } -#define OPI_R7z { DOT_R7, DOS_Z } -#define OPI_S { DOT_S, DOS_W } -#define OPI_SS { DOT_SS, DOS_NA } -#define OPI_ST0 { DOT_ST0, DOS_NA } -#define OPI_ST1 { DOT_ST1, DOS_NA } -#define OPI_ST2 { DOT_ST2, DOS_NA } -#define OPI_ST3 { DOT_ST3, DOS_NA } -#define OPI_ST4 { DOT_ST4, DOS_NA } -#define OPI_ST5 { DOT_ST5, DOS_NA } -#define OPI_ST6 { DOT_ST6, DOS_NA } -#define OPI_ST7 { DOT_ST7, DOS_NA } -#define OPI_U { DOT_U, DOS_O } -#define OPI_Ux { DOT_U, DOS_X } -#define OPI_V { DOT_V, DOS_DQ } -#define OPI_Vdq { DOT_V, DOS_DQ } -#define OPI_Vqq { DOT_V, DOS_QQ } -#define OPI_Vsd { DOT_V, DOS_Q } -#define OPI_Vx { DOT_V, DOS_X } -#define OPI_W { DOT_W, DOS_DQ } -#define OPI_Wdq { DOT_W, DOS_DQ } -#define OPI_Wqq { DOT_W, DOS_QQ } -#define OPI_Wsd { DOT_W, DOS_Q } -#define OPI_Wx { DOT_W, DOS_X } -#define OPI_eAX { DOT_EAX, DOS_Z } -#define OPI_eCX { DOT_ECX, DOS_Z } -#define OPI_eDX { DOT_EDX, DOS_Z } -#define OPI_rAX { DOT_RAX, DOS_V } -#define OPI_rCX { DOT_RCX, DOS_V } -#define OPI_rDX { DOT_RDX, DOS_V } -#define OPI_sIb { DOT_sI, DOS_B } -#define OPI_sIz { DOT_sI, DOS_Z } - -const ZyDisInstructionDefinition vxInstrDefinitions[] = -{ - /* 000 */ { MNEM_INVALID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 001 */ { MNEM_AAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 002 */ { MNEM_AAD, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 003 */ { MNEM_AAM, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 004 */ { MNEM_AAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 005 */ { MNEM_ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 006 */ { MNEM_ADC, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 007 */ { MNEM_ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 008 */ { MNEM_ADC, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 009 */ { MNEM_ADC, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00A */ { MNEM_ADC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00B */ { MNEM_ADC, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00C */ { MNEM_ADC, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00D */ { MNEM_ADC, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 00E */ { MNEM_ADC, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 00F */ { MNEM_ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 010 */ { MNEM_ADD, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 011 */ { MNEM_ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 012 */ { MNEM_ADD, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 013 */ { MNEM_ADD, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 014 */ { MNEM_ADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 015 */ { MNEM_ADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 016 */ { MNEM_ADD, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 017 */ { MNEM_ADD, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 018 */ { MNEM_ADD, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 019 */ { MNEM_ADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01A */ { MNEM_ADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01B */ { MNEM_ADDSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01C */ { MNEM_ADDSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01D */ { MNEM_ADDSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01E */ { MNEM_ADDSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 01F */ { MNEM_AESDEC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 020 */ { MNEM_AESDECLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 021 */ { MNEM_AESENC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 022 */ { MNEM_AESENCLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 023 */ { MNEM_AESIMC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 024 */ { MNEM_AESKEYGENASSIST, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 025 */ { MNEM_AND, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 026 */ { MNEM_AND, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 027 */ { MNEM_AND, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 028 */ { MNEM_AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 029 */ { MNEM_AND, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 02A */ { MNEM_AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 02B */ { MNEM_AND, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 02C */ { MNEM_AND, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 02D */ { MNEM_AND, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 02E */ { MNEM_AND, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 02F */ { MNEM_ANDNPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 030 */ { MNEM_ANDNPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 031 */ { MNEM_ANDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 032 */ { MNEM_ANDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 033 */ { MNEM_ARPL, { OPI_Ew, OPI_Gw, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 034 */ { MNEM_BLENDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 035 */ { MNEM_BLENDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 036 */ { MNEM_BLENDVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 037 */ { MNEM_BLENDVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 038 */ { MNEM_BOUND, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 039 */ { MNEM_BSF, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 03A */ { MNEM_BSR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 03B */ { MNEM_BSWAP, { OPI_R5y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03C */ { MNEM_BSWAP, { OPI_R3y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03D */ { MNEM_BSWAP, { OPI_R1y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03E */ { MNEM_BSWAP, { OPI_R4y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 03F */ { MNEM_BSWAP, { OPI_R0y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 040 */ { MNEM_BSWAP, { OPI_R2y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 041 */ { MNEM_BSWAP, { OPI_R7y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 042 */ { MNEM_BSWAP, { OPI_R6y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 043 */ { MNEM_BT, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 044 */ { MNEM_BT, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 045 */ { MNEM_BTC, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 046 */ { MNEM_BTC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 047 */ { MNEM_BTR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 048 */ { MNEM_BTR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 049 */ { MNEM_BTS, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 04A */ { MNEM_BTS, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 04B */ { MNEM_CALL, { OPI_Eq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 04C */ { MNEM_CALL, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 04D */ { MNEM_CALL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 04E */ { MNEM_CALL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 04F */ { MNEM_CALL, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 050 */ { MNEM_CBW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 051 */ { MNEM_CDQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 052 */ { MNEM_CDQE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 053 */ { MNEM_CLC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 054 */ { MNEM_CLD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 055 */ { MNEM_CLFLUSH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 056 */ { MNEM_CLGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 057 */ { MNEM_CLI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 058 */ { MNEM_CLTS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 059 */ { MNEM_CMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 05A */ { MNEM_CMOVA, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05B */ { MNEM_CMOVAE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05C */ { MNEM_CMOVB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05D */ { MNEM_CMOVBE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05E */ { MNEM_CMOVE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 05F */ { MNEM_CMOVG, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 060 */ { MNEM_CMOVGE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 061 */ { MNEM_CMOVL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 062 */ { MNEM_CMOVLE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 063 */ { MNEM_CMOVNE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 064 */ { MNEM_CMOVNO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 065 */ { MNEM_CMOVNP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 066 */ { MNEM_CMOVNS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 067 */ { MNEM_CMOVO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 068 */ { MNEM_CMOVP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 069 */ { MNEM_CMOVS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 06A */ { MNEM_CMP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06B */ { MNEM_CMP, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06C */ { MNEM_CMP, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06D */ { MNEM_CMP, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06E */ { MNEM_CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 06F */ { MNEM_CMP, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 070 */ { MNEM_CMP, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, - /* 071 */ { MNEM_CMP, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 072 */ { MNEM_CMP, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 073 */ { MNEM_CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 }, - /* 074 */ { MNEM_CMPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 075 */ { MNEM_CMPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 076 */ { MNEM_CMPSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 077 */ { MNEM_CMPSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 078 */ { MNEM_CMPSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 079 */ { MNEM_CMPSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 07A */ { MNEM_CMPSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07B */ { MNEM_CMPSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 07C */ { MNEM_CMPXCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07D */ { MNEM_CMPXCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07E */ { MNEM_CMPXCHG16B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 07F */ { MNEM_CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 080 */ { MNEM_CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 081 */ { MNEM_COMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 082 */ { MNEM_COMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 083 */ { MNEM_CPUID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 084 */ { MNEM_CQO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 085 */ { MNEM_CRC32, { OPI_Gy, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 086 */ { MNEM_CRC32, { OPI_Gy, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 087 */ { MNEM_CVTDQ2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 088 */ { MNEM_CVTDQ2PS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 089 */ { MNEM_CVTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08A */ { MNEM_CVTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08B */ { MNEM_CVTPD2PS, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08C */ { MNEM_CVTPI2PD, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08D */ { MNEM_CVTPI2PS, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08E */ { MNEM_CVTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 08F */ { MNEM_CVTPS2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 090 */ { MNEM_CVTPS2PI, { OPI_P, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 091 */ { MNEM_CVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 092 */ { MNEM_CVTSD2SS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 093 */ { MNEM_CVTSI2SD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 094 */ { MNEM_CVTSI2SS, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 095 */ { MNEM_CVTSS2SD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 096 */ { MNEM_CVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 097 */ { MNEM_CVTTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 098 */ { MNEM_CVTTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 099 */ { MNEM_CVTTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09A */ { MNEM_CVTTPS2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09B */ { MNEM_CVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09C */ { MNEM_CVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 09D */ { MNEM_CWD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 09E */ { MNEM_CWDE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 09F */ { MNEM_DAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 0A0 */ { MNEM_DAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 0A1 */ { MNEM_DEC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A2 */ { MNEM_DEC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A3 */ { MNEM_DEC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A4 */ { MNEM_DEC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0A5 */ { MNEM_DEC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0A6 */ { MNEM_DEC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A7 */ { MNEM_DEC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A8 */ { MNEM_DEC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0A9 */ { MNEM_DEC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0AA */ { MNEM_DEC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 0AB */ { MNEM_DIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 0AC */ { MNEM_DIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 0AD */ { MNEM_DIVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0AE */ { MNEM_DIVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0AF */ { MNEM_DIVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B0 */ { MNEM_DIVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B1 */ { MNEM_DPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B2 */ { MNEM_DPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 0B3 */ { MNEM_EMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0B4 */ { MNEM_ENTER, { OPI_Iw, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, - /* 0B5 */ { MNEM_EXTRACTPS, { OPI_MdRy, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 0B6 */ { MNEM_F2XM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0B7 */ { MNEM_FABS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0B8 */ { MNEM_FADD, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0B9 */ { MNEM_FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BA */ { MNEM_FADD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0BB */ { MNEM_FADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0BC */ { MNEM_FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BD */ { MNEM_FADD, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BE */ { MNEM_FADD, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0BF */ { MNEM_FADD, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0C0 */ { MNEM_FADD, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0C1 */ { MNEM_FADD, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0C2 */ { MNEM_FADD, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0C3 */ { MNEM_FADD, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0C4 */ { MNEM_FADD, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0C5 */ { MNEM_FADD, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0C6 */ { MNEM_FADD, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0C7 */ { MNEM_FADD, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0C8 */ { MNEM_FADD, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0C9 */ { MNEM_FADD, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CA */ { MNEM_FADDP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CB */ { MNEM_FADDP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CC */ { MNEM_FADDP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CD */ { MNEM_FADDP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CE */ { MNEM_FADDP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0CF */ { MNEM_FADDP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0D0 */ { MNEM_FADDP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0D1 */ { MNEM_FADDP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0D2 */ { MNEM_FBLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0D3 */ { MNEM_FBSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 0D4 */ { MNEM_FCHS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0D5 */ { MNEM_FCLEX, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 0D6 */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0D7 */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0D8 */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0D9 */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0DA */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0DB */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0DC */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0DD */ { MNEM_FCMOVB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0DE */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0DF */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0E0 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0E1 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0E2 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0E3 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0E4 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0E5 */ { MNEM_FCMOVBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0E6 */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0E7 */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0E8 */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0E9 */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0EA */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0EB */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0EC */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0ED */ { MNEM_FCMOVE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0EE */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0EF */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0F0 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0F1 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0F2 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0F3 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0F4 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0F5 */ { MNEM_FCMOVNB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0F6 */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 0F7 */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 0F8 */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 0F9 */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 0FA */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 0FB */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 0FC */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 0FD */ { MNEM_FCMOVNBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0FE */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 0FF */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 100 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 101 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 102 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 103 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 104 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 105 */ { MNEM_FCMOVNE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 106 */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 107 */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 108 */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 109 */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 10A */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 10B */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 10C */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 10D */ { MNEM_FCMOVNU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 10E */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 10F */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 110 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 111 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 112 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 113 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 114 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 115 */ { MNEM_FCMOVU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 116 */ { MNEM_FCOM, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 117 */ { MNEM_FCOM, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 118 */ { MNEM_FCOM, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 119 */ { MNEM_FCOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 11A */ { MNEM_FCOM, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 11B */ { MNEM_FCOM, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 11C */ { MNEM_FCOM, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 11D */ { MNEM_FCOM, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 11E */ { MNEM_FCOM, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 11F */ { MNEM_FCOM, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 120 */ { MNEM_FCOM2, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 121 */ { MNEM_FCOM2, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 122 */ { MNEM_FCOM2, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 123 */ { MNEM_FCOM2, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 124 */ { MNEM_FCOM2, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 125 */ { MNEM_FCOM2, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 126 */ { MNEM_FCOM2, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 127 */ { MNEM_FCOM2, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 128 */ { MNEM_FCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 129 */ { MNEM_FCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 12A */ { MNEM_FCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 12B */ { MNEM_FCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 12C */ { MNEM_FCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 12D */ { MNEM_FCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 12E */ { MNEM_FCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 12F */ { MNEM_FCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 130 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 131 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 132 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 133 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 134 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 135 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 136 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 137 */ { MNEM_FCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 138 */ { MNEM_FCOMP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 139 */ { MNEM_FCOMP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 13A */ { MNEM_FCOMP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 13B */ { MNEM_FCOMP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 13C */ { MNEM_FCOMP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 13D */ { MNEM_FCOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 13E */ { MNEM_FCOMP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 13F */ { MNEM_FCOMP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 140 */ { MNEM_FCOMP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 141 */ { MNEM_FCOMP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 142 */ { MNEM_FCOMP3, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 143 */ { MNEM_FCOMP3, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 144 */ { MNEM_FCOMP3, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 145 */ { MNEM_FCOMP3, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 146 */ { MNEM_FCOMP3, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 147 */ { MNEM_FCOMP3, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 148 */ { MNEM_FCOMP3, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 149 */ { MNEM_FCOMP3, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14A */ { MNEM_FCOMP5, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14B */ { MNEM_FCOMP5, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14C */ { MNEM_FCOMP5, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14D */ { MNEM_FCOMP5, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14E */ { MNEM_FCOMP5, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 14F */ { MNEM_FCOMP5, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 150 */ { MNEM_FCOMP5, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 151 */ { MNEM_FCOMP5, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 152 */ { MNEM_FCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 153 */ { MNEM_FCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 154 */ { MNEM_FDECSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 155 */ { MNEM_FDIV, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 156 */ { MNEM_FDIV, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 157 */ { MNEM_FDIV, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 158 */ { MNEM_FDIV, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 159 */ { MNEM_FDIV, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 15A */ { MNEM_FDIV, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 15B */ { MNEM_FDIV, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15C */ { MNEM_FDIV, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15D */ { MNEM_FDIV, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15E */ { MNEM_FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 15F */ { MNEM_FDIV, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 160 */ { MNEM_FDIV, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 161 */ { MNEM_FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 162 */ { MNEM_FDIV, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 163 */ { MNEM_FDIV, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 164 */ { MNEM_FDIV, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 165 */ { MNEM_FDIV, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 166 */ { MNEM_FDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 167 */ { MNEM_FDIVP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 168 */ { MNEM_FDIVP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 169 */ { MNEM_FDIVP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16A */ { MNEM_FDIVP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16B */ { MNEM_FDIVP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16C */ { MNEM_FDIVP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16D */ { MNEM_FDIVP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16E */ { MNEM_FDIVP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 16F */ { MNEM_FDIVR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 170 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 171 */ { MNEM_FDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 172 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 173 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 174 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 175 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 176 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 177 */ { MNEM_FDIVR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 178 */ { MNEM_FDIVR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 179 */ { MNEM_FDIVR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17A */ { MNEM_FDIVR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 17B */ { MNEM_FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17C */ { MNEM_FDIVR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17D */ { MNEM_FDIVR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17E */ { MNEM_FDIVR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 17F */ { MNEM_FDIVR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 180 */ { MNEM_FDIVR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 181 */ { MNEM_FDIVRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 182 */ { MNEM_FDIVRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 183 */ { MNEM_FDIVRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 184 */ { MNEM_FDIVRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 185 */ { MNEM_FDIVRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 186 */ { MNEM_FDIVRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 187 */ { MNEM_FDIVRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 188 */ { MNEM_FDIVRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 189 */ { MNEM_FEMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18A */ { MNEM_FFREE, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18B */ { MNEM_FFREE, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18C */ { MNEM_FFREE, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18D */ { MNEM_FFREE, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18E */ { MNEM_FFREE, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 18F */ { MNEM_FFREE, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 190 */ { MNEM_FFREE, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 191 */ { MNEM_FFREE, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 192 */ { MNEM_FFREEP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 193 */ { MNEM_FFREEP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 194 */ { MNEM_FFREEP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 195 */ { MNEM_FFREEP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 196 */ { MNEM_FFREEP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 197 */ { MNEM_FFREEP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 198 */ { MNEM_FFREEP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 199 */ { MNEM_FFREEP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 19A */ { MNEM_FIADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19B */ { MNEM_FIADD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19C */ { MNEM_FICOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19D */ { MNEM_FICOM, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19E */ { MNEM_FICOMP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 19F */ { MNEM_FICOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A0 */ { MNEM_FIDIV, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A1 */ { MNEM_FIDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A2 */ { MNEM_FIDIVR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A3 */ { MNEM_FIDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A4 */ { MNEM_FILD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A5 */ { MNEM_FILD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A6 */ { MNEM_FILD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A7 */ { MNEM_FIMUL, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A8 */ { MNEM_FIMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1A9 */ { MNEM_FINCSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1AA */ { MNEM_FIST, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AB */ { MNEM_FIST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AC */ { MNEM_FISTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AD */ { MNEM_FISTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AE */ { MNEM_FISTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1AF */ { MNEM_FISTTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B0 */ { MNEM_FISTTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B1 */ { MNEM_FISTTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B2 */ { MNEM_FISUB, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B3 */ { MNEM_FISUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B4 */ { MNEM_FISUBR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B5 */ { MNEM_FISUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1B6 */ { MNEM_FLD, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1B7 */ { MNEM_FLD, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1B8 */ { MNEM_FLD, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1B9 */ { MNEM_FLD, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1BA */ { MNEM_FLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1BB */ { MNEM_FLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1BC */ { MNEM_FLD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1BD */ { MNEM_FLD, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1BE */ { MNEM_FLD, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1BF */ { MNEM_FLD, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C0 */ { MNEM_FLD, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C1 */ { MNEM_FLD1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C2 */ { MNEM_FLDCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1C3 */ { MNEM_FLDENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1C4 */ { MNEM_FLDL2E, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C5 */ { MNEM_FLDL2T, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C6 */ { MNEM_FLDLG2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C7 */ { MNEM_FLDLN2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C8 */ { MNEM_FLDPI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1C9 */ { MNEM_FLDZ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1CA */ { MNEM_FMUL, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CB */ { MNEM_FMUL, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CC */ { MNEM_FMUL, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CD */ { MNEM_FMUL, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 1CE */ { MNEM_FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1CF */ { MNEM_FMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1D0 */ { MNEM_FMUL, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D1 */ { MNEM_FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D2 */ { MNEM_FMUL, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1D3 */ { MNEM_FMUL, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D4 */ { MNEM_FMUL, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D5 */ { MNEM_FMUL, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1D6 */ { MNEM_FMUL, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 1D7 */ { MNEM_FMUL, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 1D8 */ { MNEM_FMUL, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 1D9 */ { MNEM_FMUL, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 1DA */ { MNEM_FMUL, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 1DB */ { MNEM_FMUL, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 1DC */ { MNEM_FMULP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1DD */ { MNEM_FMULP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1DE */ { MNEM_FMULP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1DF */ { MNEM_FMULP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E0 */ { MNEM_FMULP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E1 */ { MNEM_FMULP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E2 */ { MNEM_FMULP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E3 */ { MNEM_FMULP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 1E4 */ { MNEM_FNDISI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E5 */ { MNEM_FNENI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E6 */ { MNEM_FNINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E7 */ { MNEM_FNOP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1E8 */ { MNEM_FNSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1E9 */ { MNEM_FNSETPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1EA */ { MNEM_FNSTCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1EB */ { MNEM_FNSTENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1EC */ { MNEM_FNSTSW, { OPI_AX, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1ED */ { MNEM_FNSTSW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1EE */ { MNEM_FPATAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1EF */ { MNEM_FPREM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F0 */ { MNEM_FPREM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F1 */ { MNEM_FPTAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F2 */ { MNEM_FRNDINT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F3 */ { MNEM_FRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1F4 */ { MNEM_FRSTPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F5 */ { MNEM_FSCALE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F6 */ { MNEM_FSIN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F7 */ { MNEM_FSINCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F8 */ { MNEM_FSQRT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1F9 */ { MNEM_FST, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FA */ { MNEM_FST, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FB */ { MNEM_FST, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FC */ { MNEM_FST, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FD */ { MNEM_FST, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 1FE */ { MNEM_FST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 1FF */ { MNEM_FST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 200 */ { MNEM_FST, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 201 */ { MNEM_FST, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 202 */ { MNEM_FST, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 203 */ { MNEM_FSTP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 204 */ { MNEM_FSTP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 205 */ { MNEM_FSTP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 206 */ { MNEM_FSTP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 207 */ { MNEM_FSTP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 208 */ { MNEM_FSTP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 209 */ { MNEM_FSTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 20A */ { MNEM_FSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 20B */ { MNEM_FSTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 20C */ { MNEM_FSTP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 20D */ { MNEM_FSTP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 20E */ { MNEM_FSTP1, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 20F */ { MNEM_FSTP1, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 210 */ { MNEM_FSTP1, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 211 */ { MNEM_FSTP1, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 212 */ { MNEM_FSTP1, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 213 */ { MNEM_FSTP1, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 214 */ { MNEM_FSTP1, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 215 */ { MNEM_FSTP1, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 216 */ { MNEM_FSTP8, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 217 */ { MNEM_FSTP8, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 218 */ { MNEM_FSTP8, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 219 */ { MNEM_FSTP8, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21A */ { MNEM_FSTP8, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21B */ { MNEM_FSTP8, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21C */ { MNEM_FSTP8, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21D */ { MNEM_FSTP8, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21E */ { MNEM_FSTP9, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 21F */ { MNEM_FSTP9, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 220 */ { MNEM_FSTP9, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 221 */ { MNEM_FSTP9, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 222 */ { MNEM_FSTP9, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 223 */ { MNEM_FSTP9, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 224 */ { MNEM_FSTP9, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 225 */ { MNEM_FSTP9, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 226 */ { MNEM_FSUB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 227 */ { MNEM_FSUB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 228 */ { MNEM_FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 229 */ { MNEM_FSUB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 22A */ { MNEM_FSUB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 22B */ { MNEM_FSUB, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 22C */ { MNEM_FSUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 22D */ { MNEM_FSUB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 22E */ { MNEM_FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 22F */ { MNEM_FSUB, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 230 */ { MNEM_FSUB, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 231 */ { MNEM_FSUB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 232 */ { MNEM_FSUB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 233 */ { MNEM_FSUB, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 234 */ { MNEM_FSUB, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 235 */ { MNEM_FSUB, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 236 */ { MNEM_FSUB, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 237 */ { MNEM_FSUB, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 238 */ { MNEM_FSUBP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 239 */ { MNEM_FSUBP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23A */ { MNEM_FSUBP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23B */ { MNEM_FSUBP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23C */ { MNEM_FSUBP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23D */ { MNEM_FSUBP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23E */ { MNEM_FSUBP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 23F */ { MNEM_FSUBP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 240 */ { MNEM_FSUBR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 241 */ { MNEM_FSUBR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 242 */ { MNEM_FSUBR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 243 */ { MNEM_FSUBR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 244 */ { MNEM_FSUBR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 245 */ { MNEM_FSUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 246 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 247 */ { MNEM_FSUBR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 248 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 249 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 24A */ { MNEM_FSUBR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 24B */ { MNEM_FSUBR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 24C */ { MNEM_FSUBR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 24D */ { MNEM_FSUBR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 24E */ { MNEM_FSUBR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 24F */ { MNEM_FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 250 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 251 */ { MNEM_FSUBR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 252 */ { MNEM_FSUBRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 253 */ { MNEM_FSUBRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 254 */ { MNEM_FSUBRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 255 */ { MNEM_FSUBRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 256 */ { MNEM_FSUBRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 257 */ { MNEM_FSUBRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 258 */ { MNEM_FSUBRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 259 */ { MNEM_FSUBRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 25A */ { MNEM_FTST, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25B */ { MNEM_FUCOM, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25C */ { MNEM_FUCOM, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25D */ { MNEM_FUCOM, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25E */ { MNEM_FUCOM, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 25F */ { MNEM_FUCOM, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 260 */ { MNEM_FUCOM, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 261 */ { MNEM_FUCOM, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 262 */ { MNEM_FUCOM, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 263 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 264 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 265 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 266 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 267 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 268 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 269 */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 26A */ { MNEM_FUCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 26B */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 26C */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 26D */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 26E */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 26F */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 270 */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 271 */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 272 */ { MNEM_FUCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 273 */ { MNEM_FUCOMP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 274 */ { MNEM_FUCOMP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 275 */ { MNEM_FUCOMP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 276 */ { MNEM_FUCOMP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 277 */ { MNEM_FUCOMP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 278 */ { MNEM_FUCOMP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 279 */ { MNEM_FUCOMP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27A */ { MNEM_FUCOMP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27B */ { MNEM_FUCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27C */ { MNEM_FXAM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 27D */ { MNEM_FXCH, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, - /* 27E */ { MNEM_FXCH, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, - /* 27F */ { MNEM_FXCH, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, - /* 280 */ { MNEM_FXCH, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, - /* 281 */ { MNEM_FXCH, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, - /* 282 */ { MNEM_FXCH, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, - /* 283 */ { MNEM_FXCH, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, - /* 284 */ { MNEM_FXCH, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, - /* 285 */ { MNEM_FXCH4, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 286 */ { MNEM_FXCH4, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 287 */ { MNEM_FXCH4, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 288 */ { MNEM_FXCH4, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 289 */ { MNEM_FXCH4, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28A */ { MNEM_FXCH4, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28B */ { MNEM_FXCH4, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28C */ { MNEM_FXCH4, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28D */ { MNEM_FXCH7, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28E */ { MNEM_FXCH7, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 28F */ { MNEM_FXCH7, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 290 */ { MNEM_FXCH7, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 291 */ { MNEM_FXCH7, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 292 */ { MNEM_FXCH7, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 293 */ { MNEM_FXCH7, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 294 */ { MNEM_FXCH7, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 295 */ { MNEM_FXRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 296 */ { MNEM_FXSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 297 */ { MNEM_FXTRACT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 298 */ { MNEM_FYL2X, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 299 */ { MNEM_FYL2XP1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 29A */ { MNEM_GETSEC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 29B */ { MNEM_HADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 29C */ { MNEM_HADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 29D */ { MNEM_HLT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 29E */ { MNEM_HSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 29F */ { MNEM_HSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A0 */ { MNEM_IDIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2A1 */ { MNEM_IDIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2A2 */ { MNEM_IMUL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A3 */ { MNEM_IMUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A4 */ { MNEM_IMUL, { OPI_Gv, OPI_Ev, OPI_Iz, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A5 */ { MNEM_IMUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A6 */ { MNEM_IMUL, { OPI_Gv, OPI_Ev, OPI_sIb, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2A7 */ { MNEM_IN, { OPI_AL, OPI_DX, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 2A8 */ { MNEM_IN, { OPI_eAX, OPI_DX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2A9 */ { MNEM_IN, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 2AA */ { MNEM_IN, { OPI_eAX, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2AB */ { MNEM_INC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AC */ { MNEM_INC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AD */ { MNEM_INC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AE */ { MNEM_INC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2AF */ { MNEM_INC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2B0 */ { MNEM_INC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 2B1 */ { MNEM_INC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B2 */ { MNEM_INC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B3 */ { MNEM_INC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B4 */ { MNEM_INC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, - /* 2B5 */ { MNEM_INSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 2B6 */ { MNEM_INSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 2B7 */ { MNEM_INSERTPS, { OPI_V, OPI_Md, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2B8 */ { MNEM_INSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 2B9 */ { MNEM_INT, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BA */ { MNEM_INT1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BB */ { MNEM_INT3, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BC */ { MNEM_INTO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 2BD */ { MNEM_INVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2BE */ { MNEM_INVEPT, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2BF */ { MNEM_INVEPT, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2C0 */ { MNEM_INVLPG, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2C1 */ { MNEM_INVLPGA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2C2 */ { MNEM_INVVPID, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2C3 */ { MNEM_INVVPID, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, - /* 2C4 */ { MNEM_IRETD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 2C5 */ { MNEM_IRETQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 2C6 */ { MNEM_IRETW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 2C7 */ { MNEM_JA, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2C8 */ { MNEM_JA, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2C9 */ { MNEM_JB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2CA */ { MNEM_JB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2CB */ { MNEM_JBE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2CC */ { MNEM_JBE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2CD */ { MNEM_JCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, - /* 2CE */ { MNEM_JE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2CF */ { MNEM_JE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D0 */ { MNEM_JECXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, - /* 2D1 */ { MNEM_JG, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D2 */ { MNEM_JG, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D3 */ { MNEM_JGE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D4 */ { MNEM_JGE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D5 */ { MNEM_JL, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D6 */ { MNEM_JL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D7 */ { MNEM_JLE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2D8 */ { MNEM_JLE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2D9 */ { MNEM_JMP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 2DA */ { MNEM_JMP, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2DB */ { MNEM_JMP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 2DC */ { MNEM_JMP, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 2DD */ { MNEM_JMP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, - /* 2DE */ { MNEM_JNB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2DF */ { MNEM_JNB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E0 */ { MNEM_JNE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E1 */ { MNEM_JNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E2 */ { MNEM_JNO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E3 */ { MNEM_JNO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E4 */ { MNEM_JNP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E5 */ { MNEM_JNP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E6 */ { MNEM_JNS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E7 */ { MNEM_JNS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2E8 */ { MNEM_JO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2E9 */ { MNEM_JO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2EA */ { MNEM_JP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2EB */ { MNEM_JP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2EC */ { MNEM_JRCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, - /* 2ED */ { MNEM_JS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2EE */ { MNEM_JS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 2EF */ { MNEM_LAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2F0 */ { MNEM_LAR, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F1 */ { MNEM_LDDQU, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F2 */ { MNEM_LDMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2F3 */ { MNEM_LDS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2F4 */ { MNEM_LEA, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F5 */ { MNEM_LEAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2F6 */ { MNEM_LES, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, - /* 2F7 */ { MNEM_LFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 2F8 */ { MNEM_LFS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2F9 */ { MNEM_LGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FA */ { MNEM_LGS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 2FB */ { MNEM_LIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FC */ { MNEM_LLDT, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FD */ { MNEM_LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FE */ { MNEM_LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 2FF */ { MNEM_LOCK, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 300 */ { MNEM_LODSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 301 */ { MNEM_LODSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 302 */ { MNEM_LODSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 303 */ { MNEM_LODSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 304 */ { MNEM_LOOP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 305 */ { MNEM_LOOPE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 306 */ { MNEM_LOOPNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 307 */ { MNEM_LSL, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 308 */ { MNEM_LSS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 309 */ { MNEM_LTR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 30A */ { MNEM_MASKMOVDQU, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 30B */ { MNEM_MASKMOVQ, { OPI_P, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 30C */ { MNEM_MAXPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 30D */ { MNEM_MAXPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 30E */ { MNEM_MAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 30F */ { MNEM_MAXSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 310 */ { MNEM_MFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 311 */ { MNEM_MINPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 312 */ { MNEM_MINPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 313 */ { MNEM_MINSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 314 */ { MNEM_MINSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 315 */ { MNEM_MONITOR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 316 */ { MNEM_MONTMUL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 317 */ { MNEM_MOV, { OPI_R0b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 318 */ { MNEM_MOV, { OPI_R2b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 319 */ { MNEM_MOV, { OPI_R3b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31A */ { MNEM_MOV, { OPI_R1b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31B */ { MNEM_MOV, { OPI_AL, OPI_Ob, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 31C */ { MNEM_MOV, { OPI_S, OPI_MwRv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31D */ { MNEM_MOV, { OPI_MwRv, OPI_S, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 31E */ { MNEM_MOV, { OPI_Ov, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 31F */ { MNEM_MOV, { OPI_Ob, OPI_AL, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 320 */ { MNEM_MOV, { OPI_rAX, OPI_Ov, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 321 */ { MNEM_MOV, { OPI_R4b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 322 */ { MNEM_MOV, { OPI_R7v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 323 */ { MNEM_MOV, { OPI_R6v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 324 */ { MNEM_MOV, { OPI_R5v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 325 */ { MNEM_MOV, { OPI_R, OPI_C, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 326 */ { MNEM_MOV, { OPI_D, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 327 */ { MNEM_MOV, { OPI_C, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 328 */ { MNEM_MOV, { OPI_R, OPI_D, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 329 */ { MNEM_MOV, { OPI_R4v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32A */ { MNEM_MOV, { OPI_R7b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32B */ { MNEM_MOV, { OPI_R6b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32C */ { MNEM_MOV, { OPI_R5b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32D */ { MNEM_MOV, { OPI_R0v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32E */ { MNEM_MOV, { OPI_R3v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 32F */ { MNEM_MOV, { OPI_R2v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 330 */ { MNEM_MOV, { OPI_R1v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 331 */ { MNEM_MOV, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 332 */ { MNEM_MOV, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 333 */ { MNEM_MOV, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 334 */ { MNEM_MOV, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 335 */ { MNEM_MOV, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 336 */ { MNEM_MOV, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 337 */ { MNEM_MOVAPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 338 */ { MNEM_MOVAPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 339 */ { MNEM_MOVAPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33A */ { MNEM_MOVAPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33B */ { MNEM_MOVBE, { OPI_Gv, OPI_Mv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33C */ { MNEM_MOVBE, { OPI_Mv, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33D */ { MNEM_MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33E */ { MNEM_MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 33F */ { MNEM_MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 340 */ { MNEM_MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 341 */ { MNEM_MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 342 */ { MNEM_MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 343 */ { MNEM_MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 344 */ { MNEM_MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 345 */ { MNEM_MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 346 */ { MNEM_MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 347 */ { MNEM_MOVDQ2Q, { OPI_P, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 348 */ { MNEM_MOVDQA, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 349 */ { MNEM_MOVDQA, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34A */ { MNEM_MOVDQU, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34B */ { MNEM_MOVDQU, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34C */ { MNEM_MOVHLPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34D */ { MNEM_MOVHPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34E */ { MNEM_MOVHPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 34F */ { MNEM_MOVHPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 350 */ { MNEM_MOVHPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 351 */ { MNEM_MOVLHPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 352 */ { MNEM_MOVLPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 353 */ { MNEM_MOVLPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 354 */ { MNEM_MOVLPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 355 */ { MNEM_MOVLPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 356 */ { MNEM_MOVMSKPD, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 357 */ { MNEM_MOVMSKPS, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 358 */ { MNEM_MOVNTDQ, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 359 */ { MNEM_MOVNTDQA, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35A */ { MNEM_MOVNTI, { OPI_M, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35B */ { MNEM_MOVNTPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35C */ { MNEM_MOVNTPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35D */ { MNEM_MOVNTQ, { OPI_M, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35E */ { MNEM_MOVQ, { OPI_P, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 35F */ { MNEM_MOVQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 360 */ { MNEM_MOVQ, { OPI_Eq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 361 */ { MNEM_MOVQ, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 362 */ { MNEM_MOVQ, { OPI_Q, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 363 */ { MNEM_MOVQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 364 */ { MNEM_MOVQ, { OPI_V, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 365 */ { MNEM_MOVQ, { OPI_Eq, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 366 */ { MNEM_MOVQ2DQ, { OPI_V, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_OPERAND1_WRITE }, - /* 367 */ { MNEM_MOVSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_OPERAND1_WRITE }, - /* 368 */ { MNEM_MOVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 369 */ { MNEM_MOVSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 36A */ { MNEM_MOVSD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36B */ { MNEM_MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36C */ { MNEM_MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36D */ { MNEM_MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36E */ { MNEM_MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 36F */ { MNEM_MOVSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 370 */ { MNEM_MOVSS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 371 */ { MNEM_MOVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 372 */ { MNEM_MOVSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 373 */ { MNEM_MOVSX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 374 */ { MNEM_MOVSX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 375 */ { MNEM_MOVSXD, { OPI_Gq, OPI_Ed, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 376 */ { MNEM_MOVUPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 377 */ { MNEM_MOVUPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 378 */ { MNEM_MOVUPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 379 */ { MNEM_MOVUPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 37A */ { MNEM_MOVZX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 37B */ { MNEM_MOVZX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 37C */ { MNEM_MPSADBW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 37D */ { MNEM_MUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 37E */ { MNEM_MUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 37F */ { MNEM_MULPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 380 */ { MNEM_MULPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 381 */ { MNEM_MULSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 382 */ { MNEM_MULSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 383 */ { MNEM_MWAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 384 */ { MNEM_NEG, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 385 */ { MNEM_NEG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 386 */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 387 */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 388 */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 389 */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38A */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38B */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38C */ { MNEM_NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 38D */ { MNEM_NOT, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 38E */ { MNEM_NOT, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 38F */ { MNEM_OR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 390 */ { MNEM_OR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 391 */ { MNEM_OR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 392 */ { MNEM_OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 393 */ { MNEM_OR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 394 */ { MNEM_OR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 395 */ { MNEM_OR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 396 */ { MNEM_OR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 397 */ { MNEM_OR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 398 */ { MNEM_OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 399 */ { MNEM_ORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 39A */ { MNEM_ORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 39B */ { MNEM_OUT, { OPI_DX, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, - /* 39C */ { MNEM_OUT, { OPI_DX, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 39D */ { MNEM_OUT, { OPI_Ib, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, - /* 39E */ { MNEM_OUT, { OPI_Ib, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 39F */ { MNEM_OUTSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 3A0 */ { MNEM_OUTSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 3A1 */ { MNEM_OUTSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 3A2 */ { MNEM_PABSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A3 */ { MNEM_PABSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A4 */ { MNEM_PABSD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A5 */ { MNEM_PABSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A6 */ { MNEM_PABSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A7 */ { MNEM_PABSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3A8 */ { MNEM_PACKSSDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3A9 */ { MNEM_PACKSSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AA */ { MNEM_PACKSSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AB */ { MNEM_PACKSSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AC */ { MNEM_PACKUSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AD */ { MNEM_PACKUSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AE */ { MNEM_PACKUSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3AF */ { MNEM_PADDB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B0 */ { MNEM_PADDB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B1 */ { MNEM_PADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B2 */ { MNEM_PADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B3 */ { MNEM_PADDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B4 */ { MNEM_PADDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B5 */ { MNEM_PADDSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B6 */ { MNEM_PADDSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B7 */ { MNEM_PADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B8 */ { MNEM_PADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3B9 */ { MNEM_PADDUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BA */ { MNEM_PADDUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BB */ { MNEM_PADDUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BC */ { MNEM_PADDUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BD */ { MNEM_PADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BE */ { MNEM_PADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3BF */ { MNEM_PALIGNR, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C0 */ { MNEM_PALIGNR, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C1 */ { MNEM_PAND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C2 */ { MNEM_PAND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C3 */ { MNEM_PANDN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C4 */ { MNEM_PANDN, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C5 */ { MNEM_PAVGB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C6 */ { MNEM_PAVGB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C7 */ { MNEM_PAVGUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C8 */ { MNEM_PAVGW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3C9 */ { MNEM_PAVGW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CA */ { MNEM_PBLENDVB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CB */ { MNEM_PBLENDW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CC */ { MNEM_PCLMULQDQ, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CD */ { MNEM_PCMPEQB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CE */ { MNEM_PCMPEQB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3CF */ { MNEM_PCMPEQD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D0 */ { MNEM_PCMPEQD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D1 */ { MNEM_PCMPEQQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3D2 */ { MNEM_PCMPEQW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D3 */ { MNEM_PCMPEQW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D4 */ { MNEM_PCMPESTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3D5 */ { MNEM_PCMPESTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3D6 */ { MNEM_PCMPGTB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D7 */ { MNEM_PCMPGTB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D8 */ { MNEM_PCMPGTD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3D9 */ { MNEM_PCMPGTD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3DA */ { MNEM_PCMPGTQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3DB */ { MNEM_PCMPGTW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3DC */ { MNEM_PCMPGTW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3DD */ { MNEM_PCMPISTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3DE */ { MNEM_PCMPISTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 3DF */ { MNEM_PEXTRB, { OPI_MbRv, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 3E0 */ { MNEM_PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E1 */ { MNEM_PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E2 */ { MNEM_PEXTRQ, { OPI_Eq, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 3E3 */ { MNEM_PEXTRW, { OPI_MwRd, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E4 */ { MNEM_PEXTRW, { OPI_Gd, OPI_N, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E5 */ { MNEM_PEXTRW, { OPI_Gd, OPI_U, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E6 */ { MNEM_PF2ID, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E7 */ { MNEM_PF2IW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3E8 */ { MNEM_PFACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3E9 */ { MNEM_PFADD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EA */ { MNEM_PFCMPEQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EB */ { MNEM_PFCMPGE, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EC */ { MNEM_PFCMPGT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3ED */ { MNEM_PFMAX, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EE */ { MNEM_PFMIN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3EF */ { MNEM_PFMUL, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F0 */ { MNEM_PFNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F1 */ { MNEM_PFPNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F2 */ { MNEM_PFRCP, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F3 */ { MNEM_PFRCPIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F4 */ { MNEM_PFRCPIT2, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F5 */ { MNEM_PFRSQIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F6 */ { MNEM_PFRSQRT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 3F7 */ { MNEM_PFSUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F8 */ { MNEM_PFSUBR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3F9 */ { MNEM_PHADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FA */ { MNEM_PHADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FB */ { MNEM_PHADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FC */ { MNEM_PHADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FD */ { MNEM_PHADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FE */ { MNEM_PHADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 3FF */ { MNEM_PHMINPOSUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 400 */ { MNEM_PHSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 401 */ { MNEM_PHSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 402 */ { MNEM_PHSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 403 */ { MNEM_PHSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 404 */ { MNEM_PHSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 405 */ { MNEM_PHSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 406 */ { MNEM_PI2FD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 407 */ { MNEM_PI2FW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 408 */ { MNEM_PINSRB, { OPI_V, OPI_MbRd, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 409 */ { MNEM_PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 40A */ { MNEM_PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 40B */ { MNEM_PINSRQ, { OPI_V, OPI_Eq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 40C */ { MNEM_PINSRW, { OPI_V, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 40D */ { MNEM_PINSRW, { OPI_P, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 40E */ { MNEM_PMADDUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 40F */ { MNEM_PMADDUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 410 */ { MNEM_PMADDWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 411 */ { MNEM_PMADDWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 412 */ { MNEM_PMAXSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 413 */ { MNEM_PMAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 414 */ { MNEM_PMAXSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 415 */ { MNEM_PMAXSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 416 */ { MNEM_PMAXUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 417 */ { MNEM_PMAXUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 418 */ { MNEM_PMAXUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 419 */ { MNEM_PMAXUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41A */ { MNEM_PMINSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41B */ { MNEM_PMINSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41C */ { MNEM_PMINSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41D */ { MNEM_PMINSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41E */ { MNEM_PMINUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 41F */ { MNEM_PMINUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 420 */ { MNEM_PMINUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 421 */ { MNEM_PMINUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 422 */ { MNEM_PMOVMSKB, { OPI_Gd, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 423 */ { MNEM_PMOVMSKB, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 424 */ { MNEM_PMOVSXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 425 */ { MNEM_PMOVSXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 426 */ { MNEM_PMOVSXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 427 */ { MNEM_PMOVSXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 428 */ { MNEM_PMOVSXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 429 */ { MNEM_PMOVSXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42A */ { MNEM_PMOVZXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42B */ { MNEM_PMOVZXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42C */ { MNEM_PMOVZXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42D */ { MNEM_PMOVZXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42E */ { MNEM_PMOVZXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 42F */ { MNEM_PMOVZXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 430 */ { MNEM_PMULDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 431 */ { MNEM_PMULHRSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 432 */ { MNEM_PMULHRSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 433 */ { MNEM_PMULHRW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 434 */ { MNEM_PMULHUW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 435 */ { MNEM_PMULHUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 436 */ { MNEM_PMULHW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 437 */ { MNEM_PMULHW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 438 */ { MNEM_PMULLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 439 */ { MNEM_PMULLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43A */ { MNEM_PMULLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43B */ { MNEM_PMULUDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43C */ { MNEM_PMULUDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 43D */ { MNEM_POP, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 43E */ { MNEM_POP, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 43F */ { MNEM_POP, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 440 */ { MNEM_POP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 441 */ { MNEM_POP, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 442 */ { MNEM_POP, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 443 */ { MNEM_POP, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 444 */ { MNEM_POP, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 445 */ { MNEM_POP, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 446 */ { MNEM_POP, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 447 */ { MNEM_POP, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 448 */ { MNEM_POP, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 449 */ { MNEM_POP, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 44A */ { MNEM_POP, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 44B */ { MNEM_POPA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 44C */ { MNEM_POPAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 44D */ { MNEM_POPCNT, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 44E */ { MNEM_POPFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 44F */ { MNEM_POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 450 */ { MNEM_POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 451 */ { MNEM_POPFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 452 */ { MNEM_POR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 453 */ { MNEM_POR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 454 */ { MNEM_PREFETCH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 455 */ { MNEM_PREFETCHNTA, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 456 */ { MNEM_PREFETCHT0, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 457 */ { MNEM_PREFETCHT1, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 458 */ { MNEM_PREFETCHT2, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 459 */ { MNEM_PSADBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45A */ { MNEM_PSADBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45B */ { MNEM_PSHUFB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45C */ { MNEM_PSHUFB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 45D */ { MNEM_PSHUFD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 45E */ { MNEM_PSHUFHW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 45F */ { MNEM_PSHUFLW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 460 */ { MNEM_PSHUFW, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 461 */ { MNEM_PSIGNB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 462 */ { MNEM_PSIGNB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 463 */ { MNEM_PSIGND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 464 */ { MNEM_PSIGND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 465 */ { MNEM_PSIGNW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 466 */ { MNEM_PSIGNW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 467 */ { MNEM_PSLLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 468 */ { MNEM_PSLLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 469 */ { MNEM_PSLLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46A */ { MNEM_PSLLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46B */ { MNEM_PSLLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46C */ { MNEM_PSLLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46D */ { MNEM_PSLLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 46E */ { MNEM_PSLLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 46F */ { MNEM_PSLLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 470 */ { MNEM_PSLLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 471 */ { MNEM_PSLLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 472 */ { MNEM_PSLLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 473 */ { MNEM_PSLLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 474 */ { MNEM_PSRAD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 475 */ { MNEM_PSRAD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 476 */ { MNEM_PSRAD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 477 */ { MNEM_PSRAD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 478 */ { MNEM_PSRAW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 479 */ { MNEM_PSRAW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 47A */ { MNEM_PSRAW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47B */ { MNEM_PSRAW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47C */ { MNEM_PSRLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47D */ { MNEM_PSRLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 47E */ { MNEM_PSRLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 47F */ { MNEM_PSRLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 480 */ { MNEM_PSRLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 481 */ { MNEM_PSRLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 482 */ { MNEM_PSRLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 483 */ { MNEM_PSRLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 484 */ { MNEM_PSRLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 485 */ { MNEM_PSRLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 486 */ { MNEM_PSRLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 487 */ { MNEM_PSRLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 488 */ { MNEM_PSRLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 489 */ { MNEM_PSUBB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48A */ { MNEM_PSUBB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48B */ { MNEM_PSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48C */ { MNEM_PSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48D */ { MNEM_PSUBQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48E */ { MNEM_PSUBQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 48F */ { MNEM_PSUBSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 490 */ { MNEM_PSUBSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 491 */ { MNEM_PSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 492 */ { MNEM_PSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 493 */ { MNEM_PSUBUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 494 */ { MNEM_PSUBUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 495 */ { MNEM_PSUBUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 496 */ { MNEM_PSUBUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 497 */ { MNEM_PSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 498 */ { MNEM_PSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 499 */ { MNEM_PSWAPD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 49A */ { MNEM_PTEST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 49B */ { MNEM_PUNPCKHBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49C */ { MNEM_PUNPCKHBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49D */ { MNEM_PUNPCKHDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49E */ { MNEM_PUNPCKHDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 49F */ { MNEM_PUNPCKHQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A0 */ { MNEM_PUNPCKHWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A1 */ { MNEM_PUNPCKHWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A2 */ { MNEM_PUNPCKLBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A3 */ { MNEM_PUNPCKLBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A4 */ { MNEM_PUNPCKLDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A5 */ { MNEM_PUNPCKLDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A6 */ { MNEM_PUNPCKLQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A7 */ { MNEM_PUNPCKLWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A8 */ { MNEM_PUNPCKLWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4A9 */ { MNEM_PUSH, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AA */ { MNEM_PUSH, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AB */ { MNEM_PUSH, { OPI_sIb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, - /* 4AC */ { MNEM_PUSH, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AD */ { MNEM_PUSH, { OPI_CS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, - /* 4AE */ { MNEM_PUSH, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4AF */ { MNEM_PUSH, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B0 */ { MNEM_PUSH, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B1 */ { MNEM_PUSH, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B2 */ { MNEM_PUSH, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B3 */ { MNEM_PUSH, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B4 */ { MNEM_PUSH, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B5 */ { MNEM_PUSH, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4B6 */ { MNEM_PUSH, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4B7 */ { MNEM_PUSH, { OPI_sIz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4B8 */ { MNEM_PUSH, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4B9 */ { MNEM_PUSH, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 4BA */ { MNEM_PUSHA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 4BB */ { MNEM_PUSHAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, - /* 4BC */ { MNEM_PUSHFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 4BD */ { MNEM_PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4BE */ { MNEM_PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4BF */ { MNEM_PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, - /* 4C0 */ { MNEM_PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, - /* 4C1 */ { MNEM_PXOR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C2 */ { MNEM_PXOR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C3 */ { MNEM_RCL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C4 */ { MNEM_RCL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C5 */ { MNEM_RCL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C6 */ { MNEM_RCL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C7 */ { MNEM_RCL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C8 */ { MNEM_RCL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4C9 */ { MNEM_RCPPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4CA */ { MNEM_RCPSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4CB */ { MNEM_RCR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CC */ { MNEM_RCR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CD */ { MNEM_RCR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CE */ { MNEM_RCR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4CF */ { MNEM_RCR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4D0 */ { MNEM_RCR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4D1 */ { MNEM_RDMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D2 */ { MNEM_RDPMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D3 */ { MNEM_RDRAND, { OPI_R, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4D4 */ { MNEM_RDTSC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D5 */ { MNEM_RDTSCP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D6 */ { MNEM_REP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D7 */ { MNEM_REPNE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D8 */ { MNEM_RET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4D9 */ { MNEM_RET, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4DA */ { MNEM_RETF, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4DB */ { MNEM_RETF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4DC */ { MNEM_ROL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4DD */ { MNEM_ROL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4DE */ { MNEM_ROL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4DF */ { MNEM_ROL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E0 */ { MNEM_ROL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E1 */ { MNEM_ROL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E2 */ { MNEM_ROR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E3 */ { MNEM_ROR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E4 */ { MNEM_ROR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E5 */ { MNEM_ROR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E6 */ { MNEM_ROR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E7 */ { MNEM_ROR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4E8 */ { MNEM_ROUNDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4E9 */ { MNEM_ROUNDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EA */ { MNEM_ROUNDSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EB */ { MNEM_ROUNDSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EC */ { MNEM_RSM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4ED */ { MNEM_RSQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EE */ { MNEM_RSQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4EF */ { MNEM_SAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 4F0 */ { MNEM_SALC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 4F1 */ { MNEM_SAR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F2 */ { MNEM_SAR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F3 */ { MNEM_SAR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F4 */ { MNEM_SAR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F5 */ { MNEM_SAR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F6 */ { MNEM_SAR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 4F7 */ { MNEM_SBB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4F8 */ { MNEM_SBB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4F9 */ { MNEM_SBB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, - /* 4FA */ { MNEM_SBB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, - /* 4FB */ { MNEM_SBB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4FC */ { MNEM_SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_WRITE }, - /* 4FD */ { MNEM_SBB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4FE */ { MNEM_SBB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 4FF */ { MNEM_SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 500 */ { MNEM_SBB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 501 */ { MNEM_SCASB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 502 */ { MNEM_SCASD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 503 */ { MNEM_SCASQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 504 */ { MNEM_SCASW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 505 */ { MNEM_SETA, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 506 */ { MNEM_SETAE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 507 */ { MNEM_SETB, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 508 */ { MNEM_SETBE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 509 */ { MNEM_SETE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50A */ { MNEM_SETG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50B */ { MNEM_SETGE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50C */ { MNEM_SETL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50D */ { MNEM_SETLE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50E */ { MNEM_SETNE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 50F */ { MNEM_SETNO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 510 */ { MNEM_SETNP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 511 */ { MNEM_SETNS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 512 */ { MNEM_SETO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 513 */ { MNEM_SETP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 514 */ { MNEM_SETS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 515 */ { MNEM_SFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 516 */ { MNEM_SGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 517 */ { MNEM_SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 518 */ { MNEM_SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 519 */ { MNEM_SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51A */ { MNEM_SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51B */ { MNEM_SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51C */ { MNEM_SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51D */ { MNEM_SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51E */ { MNEM_SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 51F */ { MNEM_SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 520 */ { MNEM_SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 521 */ { MNEM_SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 522 */ { MNEM_SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 523 */ { MNEM_SHLD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 524 */ { MNEM_SHLD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 525 */ { MNEM_SHR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 526 */ { MNEM_SHR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 527 */ { MNEM_SHR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 528 */ { MNEM_SHR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 529 */ { MNEM_SHR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52A */ { MNEM_SHR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52B */ { MNEM_SHRD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52C */ { MNEM_SHRD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52D */ { MNEM_SHUFPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52E */ { MNEM_SHUFPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 52F */ { MNEM_SIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 530 */ { MNEM_SKINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 531 */ { MNEM_SLDT, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 532 */ { MNEM_SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 533 */ { MNEM_SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 534 */ { MNEM_SQRTPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 535 */ { MNEM_SQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 536 */ { MNEM_SQRTSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 537 */ { MNEM_SQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 538 */ { MNEM_STC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 539 */ { MNEM_STD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 53A */ { MNEM_STGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 53B */ { MNEM_STI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 53C */ { MNEM_STMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 53D */ { MNEM_STOSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 53E */ { MNEM_STOSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 53F */ { MNEM_STOSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 540 */ { MNEM_STOSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 541 */ { MNEM_STR, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 542 */ { MNEM_SUB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 543 */ { MNEM_SUB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 544 */ { MNEM_SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 545 */ { MNEM_SUB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 546 */ { MNEM_SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 547 */ { MNEM_SUB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 548 */ { MNEM_SUB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 549 */ { MNEM_SUB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54A */ { MNEM_SUB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 54B */ { MNEM_SUB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54C */ { MNEM_SUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54D */ { MNEM_SUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54E */ { MNEM_SUBSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 54F */ { MNEM_SUBSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 550 */ { MNEM_SWAPGS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 551 */ { MNEM_SYSCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 552 */ { MNEM_SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 553 */ { MNEM_SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 554 */ { MNEM_SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 555 */ { MNEM_SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 556 */ { MNEM_SYSRET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 557 */ { MNEM_TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 558 */ { MNEM_TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 559 */ { MNEM_TEST, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55A */ { MNEM_TEST, { OPI_Ev, OPI_Iz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55B */ { MNEM_TEST, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, - /* 55C */ { MNEM_TEST, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55D */ { MNEM_TEST, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 55E */ { MNEM_TEST, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, - /* 55F */ { MNEM_UCOMISD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 560 */ { MNEM_UCOMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 561 */ { MNEM_UD2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 562 */ { MNEM_UNPCKHPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 563 */ { MNEM_UNPCKHPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 564 */ { MNEM_UNPCKLPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 565 */ { MNEM_UNPCKLPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 566 */ { MNEM_VADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 567 */ { MNEM_VADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 568 */ { MNEM_VADDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 569 */ { MNEM_VADDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56A */ { MNEM_VADDSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56B */ { MNEM_VADDSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56C */ { MNEM_VAESDEC, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56D */ { MNEM_VAESDECLAST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56E */ { MNEM_VAESENC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 56F */ { MNEM_VAESENCLAST, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 570 */ { MNEM_VAESIMC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 571 */ { MNEM_VAESKEYGENASSIST, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 572 */ { MNEM_VANDNPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 573 */ { MNEM_VANDNPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 574 */ { MNEM_VANDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 575 */ { MNEM_VANDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 576 */ { MNEM_VBLENDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 577 */ { MNEM_VBLENDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 578 */ { MNEM_VBLENDVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 579 */ { MNEM_VBLENDVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 57A */ { MNEM_VBROADCASTSD, { OPI_Vqq, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 57B */ { MNEM_VBROADCASTSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 57C */ { MNEM_VCMPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 57D */ { MNEM_VCMPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 57E */ { MNEM_VCMPSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 57F */ { MNEM_VCMPSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 580 */ { MNEM_VCOMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 581 */ { MNEM_VCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 582 */ { MNEM_VCVTDQ2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 583 */ { MNEM_VCVTDQ2PS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 584 */ { MNEM_VCVTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 585 */ { MNEM_VCVTPD2PS, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 586 */ { MNEM_VCVTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 587 */ { MNEM_VCVTPS2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 588 */ { MNEM_VCVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 589 */ { MNEM_VCVTSD2SS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58A */ { MNEM_VCVTSI2SD, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58B */ { MNEM_VCVTSI2SS, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58C */ { MNEM_VCVTSS2SD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58D */ { MNEM_VCVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 58E */ { MNEM_VCVTTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 58F */ { MNEM_VCVTTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 590 */ { MNEM_VCVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 591 */ { MNEM_VCVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 592 */ { MNEM_VDIVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 593 */ { MNEM_VDIVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 594 */ { MNEM_VDIVSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 595 */ { MNEM_VDIVSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 596 */ { MNEM_VDPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 597 */ { MNEM_VDPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 598 */ { MNEM_VERR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 599 */ { MNEM_VERW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 59A */ { MNEM_VEXTRACTF128, { OPI_Wdq, OPI_Vqq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 59B */ { MNEM_VEXTRACTPS, { OPI_MdRy, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 59C */ { MNEM_VHADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 59D */ { MNEM_VHADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 59E */ { MNEM_VHSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 59F */ { MNEM_VHSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5A0 */ { MNEM_VINSERTF128, { OPI_Vqq, OPI_Hqq, OPI_Wdq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A1 */ { MNEM_VINSERTPS, { OPI_Vx, OPI_Hx, OPI_Md, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5A2 */ { MNEM_VLDDQU, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A3 */ { MNEM_VMASKMOVDQU, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5A4 */ { MNEM_VMASKMOVPD, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A5 */ { MNEM_VMASKMOVPD, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A6 */ { MNEM_VMASKMOVPS, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A7 */ { MNEM_VMASKMOVPS, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5A8 */ { MNEM_VMAXPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5A9 */ { MNEM_VMAXPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5AA */ { MNEM_VMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5AB */ { MNEM_VMAXSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5AC */ { MNEM_VMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5AD */ { MNEM_VMCLEAR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5AE */ { MNEM_VMINPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5AF */ { MNEM_VMINPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5B0 */ { MNEM_VMINSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5B1 */ { MNEM_VMINSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5B2 */ { MNEM_VMLAUNCH, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5B3 */ { MNEM_VMLOAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5B4 */ { MNEM_VMMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5B5 */ { MNEM_VMOVAPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B6 */ { MNEM_VMOVAPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B7 */ { MNEM_VMOVAPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B8 */ { MNEM_VMOVAPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5B9 */ { MNEM_VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BA */ { MNEM_VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BB */ { MNEM_VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BC */ { MNEM_VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BD */ { MNEM_VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BE */ { MNEM_VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5BF */ { MNEM_VMOVDQA, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C0 */ { MNEM_VMOVDQA, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C1 */ { MNEM_VMOVDQU, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C2 */ { MNEM_VMOVDQU, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5C3 */ { MNEM_VMOVHLPS, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C4 */ { MNEM_VMOVHPD, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C5 */ { MNEM_VMOVHPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C6 */ { MNEM_VMOVHPS, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C7 */ { MNEM_VMOVHPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C8 */ { MNEM_VMOVLHPS, { OPI_Vx, OPI_Hx, OPI_Ux, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5C9 */ { MNEM_VMOVLPD, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CA */ { MNEM_VMOVLPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CB */ { MNEM_VMOVLPS, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CC */ { MNEM_VMOVLPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CD */ { MNEM_VMOVMSKPD, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5CE */ { MNEM_VMOVMSKPS, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5CF */ { MNEM_VMOVNTDQ, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D0 */ { MNEM_VMOVNTDQA, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D1 */ { MNEM_VMOVNTPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D2 */ { MNEM_VMOVNTPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5D3 */ { MNEM_VMOVQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D4 */ { MNEM_VMOVQ, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D5 */ { MNEM_VMOVQ, { OPI_Vx, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D6 */ { MNEM_VMOVQ, { OPI_Eq, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D7 */ { MNEM_VMOVSD, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D8 */ { MNEM_VMOVSD, { OPI_Mq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5D9 */ { MNEM_VMOVSD, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5DA */ { MNEM_VMOVSD, { OPI_V, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5DB */ { MNEM_VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DC */ { MNEM_VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DD */ { MNEM_VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DE */ { MNEM_VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5DF */ { MNEM_VMOVSS, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E0 */ { MNEM_VMOVSS, { OPI_Md, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E1 */ { MNEM_VMOVSS, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E2 */ { MNEM_VMOVSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 5E3 */ { MNEM_VMOVUPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E4 */ { MNEM_VMOVUPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E5 */ { MNEM_VMOVUPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E6 */ { MNEM_VMOVUPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5E7 */ { MNEM_VMPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5E8 */ { MNEM_VMPTRLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5E9 */ { MNEM_VMPTRST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5EA */ { MNEM_VMREAD, { OPI_Ey, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 5EB */ { MNEM_VMRESUME, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5EC */ { MNEM_VMRUN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5ED */ { MNEM_VMSAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5EE */ { MNEM_VMULPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5EF */ { MNEM_VMULPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5F0 */ { MNEM_VMULSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5F1 */ { MNEM_VMULSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 5F2 */ { MNEM_VMWRITE, { OPI_Gy, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, - /* 5F3 */ { MNEM_VMXOFF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 5F4 */ { MNEM_VMXON, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 5F5 */ { MNEM_VORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5F6 */ { MNEM_VORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 5F7 */ { MNEM_VPABSB, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5F8 */ { MNEM_VPABSD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5F9 */ { MNEM_VPABSW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 5FA */ { MNEM_VPACKSSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FB */ { MNEM_VPACKSSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FC */ { MNEM_VPACKUSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FD */ { MNEM_VPACKUSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FE */ { MNEM_VPADDB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 5FF */ { MNEM_VPADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 600 */ { MNEM_VPADDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 601 */ { MNEM_VPADDSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 602 */ { MNEM_VPADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 603 */ { MNEM_VPADDUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 604 */ { MNEM_VPADDUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 605 */ { MNEM_VPADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 606 */ { MNEM_VPALIGNR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 607 */ { MNEM_VPAND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 608 */ { MNEM_VPANDN, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 609 */ { MNEM_VPAVGB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60A */ { MNEM_VPAVGW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60B */ { MNEM_VPBLENDVB, { OPI_V, OPI_H, OPI_W, OPI_L }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 60C */ { MNEM_VPBLENDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60D */ { MNEM_VPCLMULQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60E */ { MNEM_VPCMPEQB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 60F */ { MNEM_VPCMPEQD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 610 */ { MNEM_VPCMPEQQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 611 */ { MNEM_VPCMPEQW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 612 */ { MNEM_VPCMPESTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 613 */ { MNEM_VPCMPESTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 614 */ { MNEM_VPCMPGTB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 615 */ { MNEM_VPCMPGTD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 616 */ { MNEM_VPCMPGTQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 617 */ { MNEM_VPCMPGTW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 618 */ { MNEM_VPCMPISTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 619 */ { MNEM_VPCMPISTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 61A */ { MNEM_VPERM2F128, { OPI_Vqq, OPI_Hqq, OPI_Wqq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61B */ { MNEM_VPERMILPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61C */ { MNEM_VPERMILPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61D */ { MNEM_VPERMILPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61E */ { MNEM_VPERMILPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 61F */ { MNEM_VPEXTRB, { OPI_MbRv, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 620 */ { MNEM_VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 621 */ { MNEM_VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 622 */ { MNEM_VPEXTRQ, { OPI_Eq, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 623 */ { MNEM_VPEXTRW, { OPI_Gd, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 624 */ { MNEM_VPEXTRW, { OPI_MwRd, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 625 */ { MNEM_VPHADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 626 */ { MNEM_VPHADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 627 */ { MNEM_VPHADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 628 */ { MNEM_VPHMINPOSUW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 629 */ { MNEM_VPHSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 62A */ { MNEM_VPHSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 62B */ { MNEM_VPHSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 62C */ { MNEM_VPINSRB, { OPI_V, OPI_H, OPI_MbRd, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 62D */ { MNEM_VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 62E */ { MNEM_VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 62F */ { MNEM_VPINSRQ, { OPI_V, OPI_H, OPI_Eq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 630 */ { MNEM_VPINSRW, { OPI_Vx, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, - /* 631 */ { MNEM_VPMADDUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 632 */ { MNEM_VPMADDWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 633 */ { MNEM_VPMAXSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 634 */ { MNEM_VPMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 635 */ { MNEM_VPMAXSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 636 */ { MNEM_VPMAXUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 637 */ { MNEM_VPMAXUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 638 */ { MNEM_VPMAXUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 639 */ { MNEM_VPMINSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63A */ { MNEM_VPMINSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63B */ { MNEM_VPMINSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63C */ { MNEM_VPMINUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63D */ { MNEM_VPMINUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63E */ { MNEM_VPMINUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 63F */ { MNEM_VPMOVMSKB, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 640 */ { MNEM_VPMOVSXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 641 */ { MNEM_VPMOVSXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 642 */ { MNEM_VPMOVSXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 643 */ { MNEM_VPMOVSXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 644 */ { MNEM_VPMOVSXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 645 */ { MNEM_VPMOVZXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 646 */ { MNEM_VPMOVZXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 647 */ { MNEM_VPMOVZXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 648 */ { MNEM_VPMOVZXDQ, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 649 */ { MNEM_VPMOVZXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 64A */ { MNEM_VPMOVZXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 64B */ { MNEM_VPMULDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64C */ { MNEM_VPMULHRSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64D */ { MNEM_VPMULHUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64E */ { MNEM_VPMULHW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 64F */ { MNEM_VPMULLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 650 */ { MNEM_VPMULLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 651 */ { MNEM_VPOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 652 */ { MNEM_VPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 653 */ { MNEM_VPSHUFB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 654 */ { MNEM_VPSHUFD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 655 */ { MNEM_VPSHUFHW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 656 */ { MNEM_VPSHUFLW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 657 */ { MNEM_VPSIGNB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 658 */ { MNEM_VPSIGND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 659 */ { MNEM_VPSIGNW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 65A */ { MNEM_VPSLLD, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65B */ { MNEM_VPSLLD, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65C */ { MNEM_VPSLLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 65D */ { MNEM_VPSLLQ, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65E */ { MNEM_VPSLLQ, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 65F */ { MNEM_VPSLLW, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 660 */ { MNEM_VPSLLW, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 661 */ { MNEM_VPSRAD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 662 */ { MNEM_VPSRAD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 663 */ { MNEM_VPSRAW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 664 */ { MNEM_VPSRAW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 665 */ { MNEM_VPSRLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 666 */ { MNEM_VPSRLD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 667 */ { MNEM_VPSRLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 668 */ { MNEM_VPSRLQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 669 */ { MNEM_VPSRLQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66A */ { MNEM_VPSRLW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66B */ { MNEM_VPSRLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66C */ { MNEM_VPSUBB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66D */ { MNEM_VPSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66E */ { MNEM_VPSUBQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 66F */ { MNEM_VPSUBSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 670 */ { MNEM_VPSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 671 */ { MNEM_VPSUBUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 672 */ { MNEM_VPSUBUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 673 */ { MNEM_VPSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 674 */ { MNEM_VPTEST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 675 */ { MNEM_VPUNPCKHBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 676 */ { MNEM_VPUNPCKHDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 677 */ { MNEM_VPUNPCKHQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 678 */ { MNEM_VPUNPCKHWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 679 */ { MNEM_VPUNPCKLBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67A */ { MNEM_VPUNPCKLDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67B */ { MNEM_VPUNPCKLQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67C */ { MNEM_VPUNPCKLWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67D */ { MNEM_VPXOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 67E */ { MNEM_VRCPPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 67F */ { MNEM_VRCPSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 680 */ { MNEM_VROUNDPD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 681 */ { MNEM_VROUNDPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 682 */ { MNEM_VROUNDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 683 */ { MNEM_VROUNDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 684 */ { MNEM_VRSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 685 */ { MNEM_VRSQRTSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 686 */ { MNEM_VSHUFPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 687 */ { MNEM_VSHUFPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 688 */ { MNEM_VSQRTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 689 */ { MNEM_VSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, - /* 68A */ { MNEM_VSQRTSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 68B */ { MNEM_VSQRTSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 68C */ { MNEM_VSTMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, - /* 68D */ { MNEM_VSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 68E */ { MNEM_VSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 68F */ { MNEM_VSUBSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 690 */ { MNEM_VSUBSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 691 */ { MNEM_VTESTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 692 */ { MNEM_VTESTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, - /* 693 */ { MNEM_VUCOMISD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 694 */ { MNEM_VUCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 695 */ { MNEM_VUNPCKHPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 696 */ { MNEM_VUNPCKHPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 697 */ { MNEM_VUNPCKLPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 698 */ { MNEM_VUNPCKLPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 699 */ { MNEM_ZyDisORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, - /* 69A */ { MNEM_ZyDisORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 69B */ { MNEM_VZEROALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69C */ { MNEM_VZEROUPPER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69D */ { MNEM_WAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69E */ { MNEM_WBINVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 69F */ { MNEM_WRMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6A0 */ { MNEM_XADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, - /* 6A1 */ { MNEM_XADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, - /* 6A2 */ { MNEM_XCHG, { OPI_R4v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A3 */ { MNEM_XCHG, { OPI_R3v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A4 */ { MNEM_XCHG, { OPI_R5v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A5 */ { MNEM_XCHG, { OPI_R7v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A6 */ { MNEM_XCHG, { OPI_R6v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A7 */ { MNEM_XCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A8 */ { MNEM_XCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6A9 */ { MNEM_XCHG, { OPI_R0v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6AA */ { MNEM_XCHG, { OPI_R2v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6AB */ { MNEM_XCHG, { OPI_R1v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, - /* 6AC */ { MNEM_XCRYPTCBC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6AD */ { MNEM_XCRYPTCFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6AE */ { MNEM_XCRYPTCTR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6AF */ { MNEM_XCRYPTECB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6B0 */ { MNEM_XCRYPTOFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6B1 */ { MNEM_XGETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6B2 */ { MNEM_XLATB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, - /* 6B3 */ { MNEM_XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, - /* 6B4 */ { MNEM_XOR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B5 */ { MNEM_XOR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B6 */ { MNEM_XOR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B7 */ { MNEM_XOR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B8 */ { MNEM_XOR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6B9 */ { MNEM_XOR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BA */ { MNEM_XOR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, - /* 6BB */ { MNEM_XOR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, - /* 6BC */ { MNEM_XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BD */ { MNEM_XORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BE */ { MNEM_XORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, - /* 6BF */ { MNEM_XRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 6C0 */ { MNEM_XSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, - /* 6C1 */ { MNEM_XSETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6C2 */ { MNEM_XSHA1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6C3 */ { MNEM_XSHA256, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, - /* 6C4 */ { MNEM_XSTORE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, -}; - -#undef OPI_NONE -#undef OPI_AL -#undef OPI_AX -#undef OPI_Av -#undef OPI_C -#undef OPI_CL -#undef OPI_CS -#undef OPI_CX -#undef OPI_D -#undef OPI_DL -#undef OPI_DS -#undef OPI_DX -#undef OPI_E -#undef OPI_ES -#undef OPI_Eb -#undef OPI_Ed -#undef OPI_Eq -#undef OPI_Ev -#undef OPI_Ew -#undef OPI_Ey -#undef OPI_Ez -#undef OPI_FS -#undef OPI_Fv -#undef OPI_G -#undef OPI_GS -#undef OPI_Gb -#undef OPI_Gd -#undef OPI_Gq -#undef OPI_Gv -#undef OPI_Gw -#undef OPI_Gy -#undef OPI_Gz -#undef OPI_H -#undef OPI_Hqq -#undef OPI_Hx -#undef OPI_I1 -#undef OPI_Ib -#undef OPI_Iv -#undef OPI_Iw -#undef OPI_Iz -#undef OPI_Jb -#undef OPI_Jv -#undef OPI_Jz -#undef OPI_L -#undef OPI_Lx -#undef OPI_M -#undef OPI_Mb -#undef OPI_MbRd -#undef OPI_MbRv -#undef OPI_Md -#undef OPI_MdRy -#undef OPI_MdU -#undef OPI_Mdq -#undef OPI_Mo -#undef OPI_Mq -#undef OPI_MqU -#undef OPI_Ms -#undef OPI_Mt -#undef OPI_Mv -#undef OPI_Mw -#undef OPI_MwRd -#undef OPI_MwRv -#undef OPI_MwRy -#undef OPI_MwU -#undef OPI_N -#undef OPI_Ob -#undef OPI_Ov -#undef OPI_Ow -#undef OPI_P -#undef OPI_Q -#undef OPI_R -#undef OPI_R0b -#undef OPI_R0v -#undef OPI_R0w -#undef OPI_R0y -#undef OPI_R0z -#undef OPI_R1b -#undef OPI_R1v -#undef OPI_R1w -#undef OPI_R1y -#undef OPI_R1z -#undef OPI_R2b -#undef OPI_R2v -#undef OPI_R2w -#undef OPI_R2y -#undef OPI_R2z -#undef OPI_R3b -#undef OPI_R3v -#undef OPI_R3w -#undef OPI_R3y -#undef OPI_R3z -#undef OPI_R4b -#undef OPI_R4v -#undef OPI_R4w -#undef OPI_R4y -#undef OPI_R4z -#undef OPI_R5b -#undef OPI_R5v -#undef OPI_R5w -#undef OPI_R5y -#undef OPI_R5z -#undef OPI_R6b -#undef OPI_R6v -#undef OPI_R6w -#undef OPI_R6y -#undef OPI_R6z -#undef OPI_R7b -#undef OPI_R7v -#undef OPI_R7w -#undef OPI_R7y -#undef OPI_R7z -#undef OPI_S -#undef OPI_SS -#undef OPI_ST0 -#undef OPI_ST1 -#undef OPI_ST2 -#undef OPI_ST3 -#undef OPI_ST4 -#undef OPI_ST5 -#undef OPI_ST6 -#undef OPI_ST7 -#undef OPI_U -#undef OPI_Ux -#undef OPI_V -#undef OPI_Vdq -#undef OPI_Vqq -#undef OPI_Vsd -#undef OPI_Vx -#undef OPI_W -#undef OPI_Wdq -#undef OPI_Wqq -#undef OPI_Wsd -#undef OPI_Wx -#undef OPI_eAX -#undef OPI_eCX -#undef OPI_eDX -#undef OPI_rAX -#undef OPI_rCX -#undef OPI_rDX -#undef OPI_sIb -#undef OPI_sIz - -const char* vxInstrMnemonicStrings[] = -{ - /* 000 */ "invalid", - /* 001 */ "aaa", - /* 002 */ "aad", - /* 003 */ "aam", - /* 004 */ "aas", - /* 005 */ "adc", - /* 006 */ "add", - /* 007 */ "addpd", - /* 008 */ "addps", - /* 009 */ "addsd", - /* 00A */ "addss", - /* 00B */ "addsubpd", - /* 00C */ "addsubps", - /* 00D */ "aesdec", - /* 00E */ "aesdeclast", - /* 00F */ "aesenc", - /* 010 */ "aesenclast", - /* 011 */ "aesimc", - /* 012 */ "aeskeygenassist", - /* 013 */ "and", - /* 014 */ "andnpd", - /* 015 */ "andnps", - /* 016 */ "andpd", - /* 017 */ "andps", - /* 018 */ "arpl", - /* 019 */ "blendpd", - /* 01A */ "blendps", - /* 01B */ "blendvpd", - /* 01C */ "blendvps", - /* 01D */ "bound", - /* 01E */ "bsf", - /* 01F */ "bsr", - /* 020 */ "bswap", - /* 021 */ "bt", - /* 022 */ "btc", - /* 023 */ "btr", - /* 024 */ "bts", - /* 025 */ "call", - /* 026 */ "cbw", - /* 027 */ "cdq", - /* 028 */ "cdqe", - /* 029 */ "clc", - /* 02A */ "cld", - /* 02B */ "clflush", - /* 02C */ "clgi", - /* 02D */ "cli", - /* 02E */ "clts", - /* 02F */ "cmc", - /* 030 */ "cmova", - /* 031 */ "cmovae", - /* 032 */ "cmovb", - /* 033 */ "cmovbe", - /* 034 */ "cmove", - /* 035 */ "cmovg", - /* 036 */ "cmovge", - /* 037 */ "cmovl", - /* 038 */ "cmovle", - /* 039 */ "cmovne", - /* 03A */ "cmovno", - /* 03B */ "cmovnp", - /* 03C */ "cmovns", - /* 03D */ "cmovo", - /* 03E */ "cmovp", - /* 03F */ "cmovs", - /* 040 */ "cmp", - /* 041 */ "cmppd", - /* 042 */ "cmpps", - /* 043 */ "cmpsb", - /* 044 */ "cmpsd", - /* 045 */ "cmpsq", - /* 046 */ "cmpss", - /* 047 */ "cmpsw", - /* 048 */ "cmpxchg", - /* 049 */ "cmpxchg16b", - /* 04A */ "cmpxchg8b", - /* 04B */ "comisd", - /* 04C */ "comiss", - /* 04D */ "cpuid", - /* 04E */ "cqo", - /* 04F */ "crc32", - /* 050 */ "cvtdq2pd", - /* 051 */ "cvtdq2ps", - /* 052 */ "cvtpd2dq", - /* 053 */ "cvtpd2pi", - /* 054 */ "cvtpd2ps", - /* 055 */ "cvtpi2pd", - /* 056 */ "cvtpi2ps", - /* 057 */ "cvtps2dq", - /* 058 */ "cvtps2pd", - /* 059 */ "cvtps2pi", - /* 05A */ "cvtsd2si", - /* 05B */ "cvtsd2ss", - /* 05C */ "cvtsi2sd", - /* 05D */ "cvtsi2ss", - /* 05E */ "cvtss2sd", - /* 05F */ "cvtss2si", - /* 060 */ "cvttpd2dq", - /* 061 */ "cvttpd2pi", - /* 062 */ "cvttps2dq", - /* 063 */ "cvttps2pi", - /* 064 */ "cvttsd2si", - /* 065 */ "cvttss2si", - /* 066 */ "cwd", - /* 067 */ "cwde", - /* 068 */ "daa", - /* 069 */ "das", - /* 06A */ "dec", - /* 06B */ "div", - /* 06C */ "divpd", - /* 06D */ "divps", - /* 06E */ "divsd", - /* 06F */ "divss", - /* 070 */ "dppd", - /* 071 */ "dpps", - /* 072 */ "emms", - /* 073 */ "enter", - /* 074 */ "extractps", - /* 075 */ "f2xm1", - /* 076 */ "fabs", - /* 077 */ "fadd", - /* 078 */ "faddp", - /* 079 */ "fbld", - /* 07A */ "fbstp", - /* 07B */ "fchs", - /* 07C */ "fclex", - /* 07D */ "fcmovb", - /* 07E */ "fcmovbe", - /* 07F */ "fcmove", - /* 080 */ "fcmovnb", - /* 081 */ "fcmovnbe", - /* 082 */ "fcmovne", - /* 083 */ "fcmovnu", - /* 084 */ "fcmovu", - /* 085 */ "fcom", - /* 086 */ "fcom2", - /* 087 */ "fcomi", - /* 088 */ "fcomip", - /* 089 */ "fcomp", - /* 08A */ "fcomp3", - /* 08B */ "fcomp5", - /* 08C */ "fcompp", - /* 08D */ "fcos", - /* 08E */ "fdecstp", - /* 08F */ "fdiv", - /* 090 */ "fdivp", - /* 091 */ "fdivr", - /* 092 */ "fdivrp", - /* 093 */ "femms", - /* 094 */ "ffree", - /* 095 */ "ffreep", - /* 096 */ "fiadd", - /* 097 */ "ficom", - /* 098 */ "ficomp", - /* 099 */ "fidiv", - /* 09A */ "fidivr", - /* 09B */ "fild", - /* 09C */ "fimul", - /* 09D */ "fincstp", - /* 09E */ "fist", - /* 09F */ "fistp", - /* 0A0 */ "fisttp", - /* 0A1 */ "fisub", - /* 0A2 */ "fisubr", - /* 0A3 */ "fld", - /* 0A4 */ "fld1", - /* 0A5 */ "fldcw", - /* 0A6 */ "fldenv", - /* 0A7 */ "fldl2e", - /* 0A8 */ "fldl2t", - /* 0A9 */ "fldlg2", - /* 0AA */ "fldln2", - /* 0AB */ "fldpi", - /* 0AC */ "fldz", - /* 0AD */ "fmul", - /* 0AE */ "fmulp", - /* 0AF */ "fndisi", - /* 0B0 */ "fneni", - /* 0B1 */ "fninit", - /* 0B2 */ "fnop", - /* 0B3 */ "fnsave", - /* 0B4 */ "fnsetpm", - /* 0B5 */ "fnstcw", - /* 0B6 */ "fnstenv", - /* 0B7 */ "fnstsw", - /* 0B8 */ "fpatan", - /* 0B9 */ "fprem", - /* 0BA */ "fprem1", - /* 0BB */ "fptan", - /* 0BC */ "frndint", - /* 0BD */ "frstor", - /* 0BE */ "frstpm", - /* 0BF */ "fscale", - /* 0C0 */ "fsin", - /* 0C1 */ "fsincos", - /* 0C2 */ "fsqrt", - /* 0C3 */ "fst", - /* 0C4 */ "fstp", - /* 0C5 */ "fstp1", - /* 0C6 */ "fstp8", - /* 0C7 */ "fstp9", - /* 0C8 */ "fsub", - /* 0C9 */ "fsubp", - /* 0CA */ "fsubr", - /* 0CB */ "fsubrp", - /* 0CC */ "ftst", - /* 0CD */ "fucom", - /* 0CE */ "fucomi", - /* 0CF */ "fucomip", - /* 0D0 */ "fucomp", - /* 0D1 */ "fucompp", - /* 0D2 */ "fxam", - /* 0D3 */ "fxch", - /* 0D4 */ "fxch4", - /* 0D5 */ "fxch7", - /* 0D6 */ "fxrstor", - /* 0D7 */ "fxsave", - /* 0D8 */ "fxtract", - /* 0D9 */ "fyl2x", - /* 0DA */ "fyl2xp1", - /* 0DB */ "getsec", - /* 0DC */ "haddpd", - /* 0DD */ "haddps", - /* 0DE */ "hlt", - /* 0DF */ "hsubpd", - /* 0E0 */ "hsubps", - /* 0E1 */ "idiv", - /* 0E2 */ "imul", - /* 0E3 */ "in", - /* 0E4 */ "inc", - /* 0E5 */ "insb", - /* 0E6 */ "insd", - /* 0E7 */ "insertps", - /* 0E8 */ "insw", - /* 0E9 */ "int", - /* 0EA */ "int1", - /* 0EB */ "int3", - /* 0EC */ "into", - /* 0ED */ "invd", - /* 0EE */ "invept", - /* 0EF */ "invlpg", - /* 0F0 */ "invlpga", - /* 0F1 */ "invvpid", - /* 0F2 */ "iretd", - /* 0F3 */ "iretq", - /* 0F4 */ "iretw", - /* 0F5 */ "ja", - /* 0F6 */ "jb", - /* 0F7 */ "jbe", - /* 0F8 */ "jcxz", - /* 0F9 */ "je", - /* 0FA */ "jecxz", - /* 0FB */ "jg", - /* 0FC */ "jge", - /* 0FD */ "jl", - /* 0FE */ "jle", - /* 0FF */ "jmp", - /* 100 */ "jnb", - /* 101 */ "jne", - /* 102 */ "jno", - /* 103 */ "jnp", - /* 104 */ "jns", - /* 105 */ "jo", - /* 106 */ "jp", - /* 107 */ "jrcxz", - /* 108 */ "js", - /* 109 */ "lahf", - /* 10A */ "lar", - /* 10B */ "lddqu", - /* 10C */ "ldmxcsr", - /* 10D */ "lds", - /* 10E */ "lea", - /* 10F */ "leave", - /* 110 */ "les", - /* 111 */ "lfence", - /* 112 */ "lfs", - /* 113 */ "lgdt", - /* 114 */ "lgs", - /* 115 */ "lidt", - /* 116 */ "lldt", - /* 117 */ "lmsw", - /* 118 */ "lock", - /* 119 */ "lodsb", - /* 11A */ "lodsd", - /* 11B */ "lodsq", - /* 11C */ "lodsw", - /* 11D */ "loop", - /* 11E */ "loope", - /* 11F */ "loopne", - /* 120 */ "lsl", - /* 121 */ "lss", - /* 122 */ "ltr", - /* 123 */ "maskmovdqu", - /* 124 */ "maskmovq", - /* 125 */ "maxpd", - /* 126 */ "maxps", - /* 127 */ "maxsd", - /* 128 */ "maxss", - /* 129 */ "mfence", - /* 12A */ "minpd", - /* 12B */ "minps", - /* 12C */ "minsd", - /* 12D */ "minss", - /* 12E */ "monitor", - /* 12F */ "montmul", - /* 130 */ "mov", - /* 131 */ "movapd", - /* 132 */ "movaps", - /* 133 */ "movbe", - /* 134 */ "movd", - /* 135 */ "movddup", - /* 136 */ "movdq2q", - /* 137 */ "movdqa", - /* 138 */ "movdqu", - /* 139 */ "movhlps", - /* 13A */ "movhpd", - /* 13B */ "movhps", - /* 13C */ "movlhps", - /* 13D */ "movlpd", - /* 13E */ "movlps", - /* 13F */ "movmskpd", - /* 140 */ "movmskps", - /* 141 */ "movntdq", - /* 142 */ "movntdqa", - /* 143 */ "movnti", - /* 144 */ "movntpd", - /* 145 */ "movntps", - /* 146 */ "movntq", - /* 147 */ "movq", - /* 148 */ "movq2dq", - /* 149 */ "movsb", - /* 14A */ "movsd", - /* 14B */ "movshdup", - /* 14C */ "movsldup", - /* 14D */ "movsq", - /* 14E */ "movss", - /* 14F */ "movsw", - /* 150 */ "movsx", - /* 151 */ "movsxd", - /* 152 */ "movupd", - /* 153 */ "movups", - /* 154 */ "movzx", - /* 155 */ "mpsadbw", - /* 156 */ "mul", - /* 157 */ "mulpd", - /* 158 */ "mulps", - /* 159 */ "mulsd", - /* 15A */ "mulss", - /* 15B */ "mwait", - /* 15C */ "neg", - /* 15D */ "nop", - /* 15E */ "not", - /* 15F */ "or", - /* 160 */ "orpd", - /* 161 */ "orps", - /* 162 */ "out", - /* 163 */ "outsb", - /* 164 */ "outsd", - /* 165 */ "outsw", - /* 166 */ "pabsb", - /* 167 */ "pabsd", - /* 168 */ "pabsw", - /* 169 */ "packssdw", - /* 16A */ "packsswb", - /* 16B */ "packusdw", - /* 16C */ "packuswb", - /* 16D */ "paddb", - /* 16E */ "paddd", - /* 16F */ "paddq", - /* 170 */ "paddsb", - /* 171 */ "paddsw", - /* 172 */ "paddusb", - /* 173 */ "paddusw", - /* 174 */ "paddw", - /* 175 */ "palignr", - /* 176 */ "pand", - /* 177 */ "pandn", - /* 178 */ "pause", - /* 179 */ "pavgb", - /* 17A */ "pavgusb", - /* 17B */ "pavgw", - /* 17C */ "pblendvb", - /* 17D */ "pblendw", - /* 17E */ "pclmulqdq", - /* 17F */ "pcmpeqb", - /* 180 */ "pcmpeqd", - /* 181 */ "pcmpeqq", - /* 182 */ "pcmpeqw", - /* 183 */ "pcmpestri", - /* 184 */ "pcmpestrm", - /* 185 */ "pcmpgtb", - /* 186 */ "pcmpgtd", - /* 187 */ "pcmpgtq", - /* 188 */ "pcmpgtw", - /* 189 */ "pcmpistri", - /* 18A */ "pcmpistrm", - /* 18B */ "pextrb", - /* 18C */ "pextrd", - /* 18D */ "pextrq", - /* 18E */ "pextrw", - /* 18F */ "pf2id", - /* 190 */ "pf2iw", - /* 191 */ "pfacc", - /* 192 */ "pfadd", - /* 193 */ "pfcmpeq", - /* 194 */ "pfcmpge", - /* 195 */ "pfcmpgt", - /* 196 */ "pfmax", - /* 197 */ "pfmin", - /* 198 */ "pfmul", - /* 199 */ "pfnacc", - /* 19A */ "pfpnacc", - /* 19B */ "pfrcp", - /* 19C */ "pfrcpit1", - /* 19D */ "pfrcpit2", - /* 19E */ "pfrsqit1", - /* 19F */ "pfrsqrt", - /* 1A0 */ "pfsub", - /* 1A1 */ "pfsubr", - /* 1A2 */ "phaddd", - /* 1A3 */ "phaddsw", - /* 1A4 */ "phaddw", - /* 1A5 */ "phminposuw", - /* 1A6 */ "phsubd", - /* 1A7 */ "phsubsw", - /* 1A8 */ "phsubw", - /* 1A9 */ "pi2fd", - /* 1AA */ "pi2fw", - /* 1AB */ "pinsrb", - /* 1AC */ "pinsrd", - /* 1AD */ "pinsrq", - /* 1AE */ "pinsrw", - /* 1AF */ "pmaddubsw", - /* 1B0 */ "pmaddwd", - /* 1B1 */ "pmaxsb", - /* 1B2 */ "pmaxsd", - /* 1B3 */ "pmaxsw", - /* 1B4 */ "pmaxub", - /* 1B5 */ "pmaxud", - /* 1B6 */ "pmaxuw", - /* 1B7 */ "pminsb", - /* 1B8 */ "pminsd", - /* 1B9 */ "pminsw", - /* 1BA */ "pminub", - /* 1BB */ "pminud", - /* 1BC */ "pminuw", - /* 1BD */ "pmovmskb", - /* 1BE */ "pmovsxbd", - /* 1BF */ "pmovsxbq", - /* 1C0 */ "pmovsxbw", - /* 1C1 */ "pmovsxdq", - /* 1C2 */ "pmovsxwd", - /* 1C3 */ "pmovsxwq", - /* 1C4 */ "pmovzxbd", - /* 1C5 */ "pmovzxbq", - /* 1C6 */ "pmovzxbw", - /* 1C7 */ "pmovzxdq", - /* 1C8 */ "pmovzxwd", - /* 1C9 */ "pmovzxwq", - /* 1CA */ "pmuldq", - /* 1CB */ "pmulhrsw", - /* 1CC */ "pmulhrw", - /* 1CD */ "pmulhuw", - /* 1CE */ "pmulhw", - /* 1CF */ "pmulld", - /* 1D0 */ "pmullw", - /* 1D1 */ "pmuludq", - /* 1D2 */ "pop", - /* 1D3 */ "popa", - /* 1D4 */ "popad", - /* 1D5 */ "popcnt", - /* 1D6 */ "popfd", - /* 1D7 */ "popfq", - /* 1D8 */ "popfw", - /* 1D9 */ "por", - /* 1DA */ "prefetch", - /* 1DB */ "prefetchnta", - /* 1DC */ "prefetcht0", - /* 1DD */ "prefetcht1", - /* 1DE */ "prefetcht2", - /* 1DF */ "psadbw", - /* 1E0 */ "pshufb", - /* 1E1 */ "pshufd", - /* 1E2 */ "pshufhw", - /* 1E3 */ "pshuflw", - /* 1E4 */ "pshufw", - /* 1E5 */ "psignb", - /* 1E6 */ "psignd", - /* 1E7 */ "psignw", - /* 1E8 */ "pslld", - /* 1E9 */ "pslldq", - /* 1EA */ "psllq", - /* 1EB */ "psllw", - /* 1EC */ "psrad", - /* 1ED */ "psraw", - /* 1EE */ "psrld", - /* 1EF */ "psrldq", - /* 1F0 */ "psrlq", - /* 1F1 */ "psrlw", - /* 1F2 */ "psubb", - /* 1F3 */ "psubd", - /* 1F4 */ "psubq", - /* 1F5 */ "psubsb", - /* 1F6 */ "psubsw", - /* 1F7 */ "psubusb", - /* 1F8 */ "psubusw", - /* 1F9 */ "psubw", - /* 1FA */ "pswapd", - /* 1FB */ "ptest", - /* 1FC */ "punpckhbw", - /* 1FD */ "punpckhdq", - /* 1FE */ "punpckhqdq", - /* 1FF */ "punpckhwd", - /* 200 */ "punpcklbw", - /* 201 */ "punpckldq", - /* 202 */ "punpcklqdq", - /* 203 */ "punpcklwd", - /* 204 */ "push", - /* 205 */ "pusha", - /* 206 */ "pushad", - /* 207 */ "pushfd", - /* 208 */ "pushfq", - /* 209 */ "pushfw", - /* 20A */ "pxor", - /* 20B */ "rcl", - /* 20C */ "rcpps", - /* 20D */ "rcpss", - /* 20E */ "rcr", - /* 20F */ "rdmsr", - /* 210 */ "rdpmc", - /* 211 */ "rdrand", - /* 212 */ "rdtsc", - /* 213 */ "rdtscp", - /* 214 */ "rep", - /* 215 */ "repne", - /* 216 */ "ret", - /* 217 */ "retf", - /* 218 */ "rol", - /* 219 */ "ror", - /* 21A */ "roundpd", - /* 21B */ "roundps", - /* 21C */ "roundsd", - /* 21D */ "roundss", - /* 21E */ "rsm", - /* 21F */ "rsqrtps", - /* 220 */ "rsqrtss", - /* 221 */ "sahf", - /* 222 */ "salc", - /* 223 */ "sar", - /* 224 */ "sbb", - /* 225 */ "scasb", - /* 226 */ "scasd", - /* 227 */ "scasq", - /* 228 */ "scasw", - /* 229 */ "seta", - /* 22A */ "setae", - /* 22B */ "setb", - /* 22C */ "setbe", - /* 22D */ "sete", - /* 22E */ "setg", - /* 22F */ "setge", - /* 230 */ "setl", - /* 231 */ "setle", - /* 232 */ "setne", - /* 233 */ "setno", - /* 234 */ "setnp", - /* 235 */ "setns", - /* 236 */ "seto", - /* 237 */ "setp", - /* 238 */ "sets", - /* 239 */ "sfence", - /* 23A */ "sgdt", - /* 23B */ "shl", - /* 23C */ "shld", - /* 23D */ "shr", - /* 23E */ "shrd", - /* 23F */ "shufpd", - /* 240 */ "shufps", - /* 241 */ "sidt", - /* 242 */ "skinit", - /* 243 */ "sldt", - /* 244 */ "smsw", - /* 245 */ "sqrtpd", - /* 246 */ "sqrtps", - /* 247 */ "sqrtsd", - /* 248 */ "sqrtss", - /* 249 */ "stc", - /* 24A */ "std", - /* 24B */ "stgi", - /* 24C */ "sti", - /* 24D */ "stmxcsr", - /* 24E */ "stosb", - /* 24F */ "stosd", - /* 250 */ "stosq", - /* 251 */ "stosw", - /* 252 */ "str", - /* 253 */ "sub", - /* 254 */ "subpd", - /* 255 */ "subps", - /* 256 */ "subsd", - /* 257 */ "subss", - /* 258 */ "swapgs", - /* 259 */ "syscall", - /* 25A */ "sysenter", - /* 25B */ "sysexit", - /* 25C */ "sysret", - /* 25D */ "test", - /* 25E */ "ucomisd", - /* 25F */ "ucomiss", - /* 260 */ "ud2", - /* 261 */ "unpckhpd", - /* 262 */ "unpckhps", - /* 263 */ "unpcklpd", - /* 264 */ "unpcklps", - /* 265 */ "vaddpd", - /* 266 */ "vaddps", - /* 267 */ "vaddsd", - /* 268 */ "vaddss", - /* 269 */ "vaddsubpd", - /* 26A */ "vaddsubps", - /* 26B */ "vaesdec", - /* 26C */ "vaesdeclast", - /* 26D */ "vaesenc", - /* 26E */ "vaesenclast", - /* 26F */ "vaesimc", - /* 270 */ "vaeskeygenassist", - /* 271 */ "vandnpd", - /* 272 */ "vandnps", - /* 273 */ "vandpd", - /* 274 */ "vandps", - /* 275 */ "vblendpd", - /* 276 */ "vblendps", - /* 277 */ "vblendvpd", - /* 278 */ "vblendvps", - /* 279 */ "vbroadcastsd", - /* 27A */ "vbroadcastss", - /* 27B */ "vcmppd", - /* 27C */ "vcmpps", - /* 27D */ "vcmpsd", - /* 27E */ "vcmpss", - /* 27F */ "vcomisd", - /* 280 */ "vcomiss", - /* 281 */ "vcvtdq2pd", - /* 282 */ "vcvtdq2ps", - /* 283 */ "vcvtpd2dq", - /* 284 */ "vcvtpd2ps", - /* 285 */ "vcvtps2dq", - /* 286 */ "vcvtps2pd", - /* 287 */ "vcvtsd2si", - /* 288 */ "vcvtsd2ss", - /* 289 */ "vcvtsi2sd", - /* 28A */ "vcvtsi2ss", - /* 28B */ "vcvtss2sd", - /* 28C */ "vcvtss2si", - /* 28D */ "vcvttpd2dq", - /* 28E */ "vcvttps2dq", - /* 28F */ "vcvttsd2si", - /* 290 */ "vcvttss2si", - /* 291 */ "vdivpd", - /* 292 */ "vdivps", - /* 293 */ "vdivsd", - /* 294 */ "vdivss", - /* 295 */ "vdppd", - /* 296 */ "vdpps", - /* 297 */ "verr", - /* 298 */ "verw", - /* 299 */ "vextractf128", - /* 29A */ "vextractps", - /* 29B */ "vhaddpd", - /* 29C */ "vhaddps", - /* 29D */ "vhsubpd", - /* 29E */ "vhsubps", - /* 29F */ "vinsertf128", - /* 2A0 */ "vinsertps", - /* 2A1 */ "vlddqu", - /* 2A2 */ "vmaskmovdqu", - /* 2A3 */ "vmaskmovpd", - /* 2A4 */ "vmaskmovps", - /* 2A5 */ "vmaxpd", - /* 2A6 */ "vmaxps", - /* 2A7 */ "vmaxsd", - /* 2A8 */ "vmaxss", - /* 2A9 */ "vmcall", - /* 2AA */ "vmclear", - /* 2AB */ "vminpd", - /* 2AC */ "vminps", - /* 2AD */ "vminsd", - /* 2AE */ "vminss", - /* 2AF */ "vmlaunch", - /* 2B0 */ "vmload", - /* 2B1 */ "vmmcall", - /* 2B2 */ "vmovapd", - /* 2B3 */ "vmovaps", - /* 2B4 */ "vmovd", - /* 2B5 */ "vmovddup", - /* 2B6 */ "vmovdqa", - /* 2B7 */ "vmovdqu", - /* 2B8 */ "vmovhlps", - /* 2B9 */ "vmovhpd", - /* 2BA */ "vmovhps", - /* 2BB */ "vmovlhps", - /* 2BC */ "vmovlpd", - /* 2BD */ "vmovlps", - /* 2BE */ "vmovmskpd", - /* 2BF */ "vmovmskps", - /* 2C0 */ "vmovntdq", - /* 2C1 */ "vmovntdqa", - /* 2C2 */ "vmovntpd", - /* 2C3 */ "vmovntps", - /* 2C4 */ "vmovq", - /* 2C5 */ "vmovsd", - /* 2C6 */ "vmovshdup", - /* 2C7 */ "vmovsldup", - /* 2C8 */ "vmovss", - /* 2C9 */ "vmovupd", - /* 2CA */ "vmovups", - /* 2CB */ "vmpsadbw", - /* 2CC */ "vmptrld", - /* 2CD */ "vmptrst", - /* 2CE */ "vmread", - /* 2CF */ "vmresume", - /* 2D0 */ "vmrun", - /* 2D1 */ "vmsave", - /* 2D2 */ "vmulpd", - /* 2D3 */ "vmulps", - /* 2D4 */ "vmulsd", - /* 2D5 */ "vmulss", - /* 2D6 */ "vmwrite", - /* 2D7 */ "vmxoff", - /* 2D8 */ "vmxon", - /* 2D9 */ "vorpd", - /* 2DA */ "vorps", - /* 2DB */ "vpabsb", - /* 2DC */ "vpabsd", - /* 2DD */ "vpabsw", - /* 2DE */ "vpackssdw", - /* 2DF */ "vpacksswb", - /* 2E0 */ "vpackusdw", - /* 2E1 */ "vpackuswb", - /* 2E2 */ "vpaddb", - /* 2E3 */ "vpaddd", - /* 2E4 */ "vpaddq", - /* 2E5 */ "vpaddsb", - /* 2E6 */ "vpaddsw", - /* 2E7 */ "vpaddusb", - /* 2E8 */ "vpaddusw", - /* 2E9 */ "vpaddw", - /* 2EA */ "vpalignr", - /* 2EB */ "vpand", - /* 2EC */ "vpandn", - /* 2ED */ "vpavgb", - /* 2EE */ "vpavgw", - /* 2EF */ "vpblendvb", - /* 2F0 */ "vpblendw", - /* 2F1 */ "vpclmulqdq", - /* 2F2 */ "vpcmpeqb", - /* 2F3 */ "vpcmpeqd", - /* 2F4 */ "vpcmpeqq", - /* 2F5 */ "vpcmpeqw", - /* 2F6 */ "vpcmpestri", - /* 2F7 */ "vpcmpestrm", - /* 2F8 */ "vpcmpgtb", - /* 2F9 */ "vpcmpgtd", - /* 2FA */ "vpcmpgtq", - /* 2FB */ "vpcmpgtw", - /* 2FC */ "vpcmpistri", - /* 2FD */ "vpcmpistrm", - /* 2FE */ "vperm2f128", - /* 2FF */ "vpermilpd", - /* 300 */ "vpermilps", - /* 301 */ "vpextrb", - /* 302 */ "vpextrd", - /* 303 */ "vpextrq", - /* 304 */ "vpextrw", - /* 305 */ "vphaddd", - /* 306 */ "vphaddsw", - /* 307 */ "vphaddw", - /* 308 */ "vphminposuw", - /* 309 */ "vphsubd", - /* 30A */ "vphsubsw", - /* 30B */ "vphsubw", - /* 30C */ "vpinsrb", - /* 30D */ "vpinsrd", - /* 30E */ "vpinsrq", - /* 30F */ "vpinsrw", - /* 310 */ "vpmaddubsw", - /* 311 */ "vpmaddwd", - /* 312 */ "vpmaxsb", - /* 313 */ "vpmaxsd", - /* 314 */ "vpmaxsw", - /* 315 */ "vpmaxub", - /* 316 */ "vpmaxud", - /* 317 */ "vpmaxuw", - /* 318 */ "vpminsb", - /* 319 */ "vpminsd", - /* 31A */ "vpminsw", - /* 31B */ "vpminub", - /* 31C */ "vpminud", - /* 31D */ "vpminuw", - /* 31E */ "vpmovmskb", - /* 31F */ "vpmovsxbd", - /* 320 */ "vpmovsxbq", - /* 321 */ "vpmovsxbw", - /* 322 */ "vpmovsxwd", - /* 323 */ "vpmovsxwq", - /* 324 */ "vpmovzxbd", - /* 325 */ "vpmovzxbq", - /* 326 */ "vpmovzxbw", - /* 327 */ "vpmovzxdq", - /* 328 */ "vpmovzxwd", - /* 329 */ "vpmovzxwq", - /* 32A */ "vpmuldq", - /* 32B */ "vpmulhrsw", - /* 32C */ "vpmulhuw", - /* 32D */ "vpmulhw", - /* 32E */ "vpmulld", - /* 32F */ "vpmullw", - /* 330 */ "vpor", - /* 331 */ "vpsadbw", - /* 332 */ "vpshufb", - /* 333 */ "vpshufd", - /* 334 */ "vpshufhw", - /* 335 */ "vpshuflw", - /* 336 */ "vpsignb", - /* 337 */ "vpsignd", - /* 338 */ "vpsignw", - /* 339 */ "vpslld", - /* 33A */ "vpslldq", - /* 33B */ "vpsllq", - /* 33C */ "vpsllw", - /* 33D */ "vpsrad", - /* 33E */ "vpsraw", - /* 33F */ "vpsrld", - /* 340 */ "vpsrldq", - /* 341 */ "vpsrlq", - /* 342 */ "vpsrlw", - /* 343 */ "vpsubb", - /* 344 */ "vpsubd", - /* 345 */ "vpsubq", - /* 346 */ "vpsubsb", - /* 347 */ "vpsubsw", - /* 348 */ "vpsubusb", - /* 349 */ "vpsubusw", - /* 34A */ "vpsubw", - /* 34B */ "vptest", - /* 34C */ "vpunpckhbw", - /* 34D */ "vpunpckhdq", - /* 34E */ "vpunpckhqdq", - /* 34F */ "vpunpckhwd", - /* 350 */ "vpunpcklbw", - /* 351 */ "vpunpckldq", - /* 352 */ "vpunpcklqdq", - /* 353 */ "vpunpcklwd", - /* 354 */ "vpxor", - /* 355 */ "vrcpps", - /* 356 */ "vrcpss", - /* 357 */ "vroundpd", - /* 358 */ "vroundps", - /* 359 */ "vroundsd", - /* 35A */ "vroundss", - /* 35B */ "vrsqrtps", - /* 35C */ "vrsqrtss", - /* 35D */ "vshufpd", - /* 35E */ "vshufps", - /* 35F */ "vsqrtpd", - /* 360 */ "vsqrtps", - /* 361 */ "vsqrtsd", - /* 362 */ "vsqrtss", - /* 363 */ "vstmxcsr", - /* 364 */ "vsubpd", - /* 365 */ "vsubps", - /* 366 */ "vsubsd", - /* 367 */ "vsubss", - /* 368 */ "vtestpd", - /* 369 */ "vtestps", - /* 36A */ "vucomisd", - /* 36B */ "vucomiss", - /* 36C */ "vunpckhpd", - /* 36D */ "vunpckhps", - /* 36E */ "vunpcklpd", - /* 36F */ "vunpcklps", - /* 370 */ "vxorpd", - /* 371 */ "vxorps", - /* 372 */ "vzeroall", - /* 373 */ "vzeroupper", - /* 374 */ "wait", - /* 375 */ "wbinvd", - /* 376 */ "wrmsr", - /* 377 */ "xadd", - /* 378 */ "xchg", - /* 379 */ "xcryptcbc", - /* 37A */ "xcryptcfb", - /* 37B */ "xcryptctr", - /* 37C */ "xcryptecb", - /* 37D */ "xcryptofb", - /* 37E */ "xgetbv", - /* 37F */ "xlatb", - /* 380 */ "xor", - /* 381 */ "xorpd", - /* 382 */ "xorps", - /* 383 */ "xrstor", - /* 384 */ "xsave", - /* 385 */ "xsetbv", - /* 386 */ "xsha1", - /* 387 */ "xsha256", - /* 388 */ "xstore", -}; - -#undef ZYDIS_NODE -#undef ZYDIS_INVALID \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisOpcodeTable.h b/VerteronDisassemblerEngine/ZyDisOpcodeTable.h deleted file mode 100644 index 472ee34..0000000 --- a/VerteronDisassemblerEngine/ZyDisOpcodeTable.h +++ /dev/null @@ -1,1504 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 04. February 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#ifndef _VDE_ZyDisOPCODETABLEC_H_ -#define _VDE_ZyDisOPCODETABLEC_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * @brief Values that represent an instruction mnemonic. - */ -typedef enum _ZyDisInstructionMnemonic /* : uint16_t */ -{ - /* 000 */ MNEM_INVALID, - /* 001 */ MNEM_AAA, - /* 002 */ MNEM_AAD, - /* 003 */ MNEM_AAM, - /* 004 */ MNEM_AAS, - /* 005 */ MNEM_ADC, - /* 006 */ MNEM_ADD, - /* 007 */ MNEM_ADDPD, - /* 008 */ MNEM_ADDPS, - /* 009 */ MNEM_ADDSD, - /* 00A */ MNEM_ADDSS, - /* 00B */ MNEM_ADDSUBPD, - /* 00C */ MNEM_ADDSUBPS, - /* 00D */ MNEM_AESDEC, - /* 00E */ MNEM_AESDECLAST, - /* 00F */ MNEM_AESENC, - /* 010 */ MNEM_AESENCLAST, - /* 011 */ MNEM_AESIMC, - /* 012 */ MNEM_AESKEYGENASSIST, - /* 013 */ MNEM_AND, - /* 014 */ MNEM_ANDNPD, - /* 015 */ MNEM_ANDNPS, - /* 016 */ MNEM_ANDPD, - /* 017 */ MNEM_ANDPS, - /* 018 */ MNEM_ARPL, - /* 019 */ MNEM_BLENDPD, - /* 01A */ MNEM_BLENDPS, - /* 01B */ MNEM_BLENDVPD, - /* 01C */ MNEM_BLENDVPS, - /* 01D */ MNEM_BOUND, - /* 01E */ MNEM_BSF, - /* 01F */ MNEM_BSR, - /* 020 */ MNEM_BSWAP, - /* 021 */ MNEM_BT, - /* 022 */ MNEM_BTC, - /* 023 */ MNEM_BTR, - /* 024 */ MNEM_BTS, - /* 025 */ MNEM_CALL, - /* 026 */ MNEM_CBW, - /* 027 */ MNEM_CDQ, - /* 028 */ MNEM_CDQE, - /* 029 */ MNEM_CLC, - /* 02A */ MNEM_CLD, - /* 02B */ MNEM_CLFLUSH, - /* 02C */ MNEM_CLGI, - /* 02D */ MNEM_CLI, - /* 02E */ MNEM_CLTS, - /* 02F */ MNEM_CMC, - /* 030 */ MNEM_CMOVA, - /* 031 */ MNEM_CMOVAE, - /* 032 */ MNEM_CMOVB, - /* 033 */ MNEM_CMOVBE, - /* 034 */ MNEM_CMOVE, - /* 035 */ MNEM_CMOVG, - /* 036 */ MNEM_CMOVGE, - /* 037 */ MNEM_CMOVL, - /* 038 */ MNEM_CMOVLE, - /* 039 */ MNEM_CMOVNE, - /* 03A */ MNEM_CMOVNO, - /* 03B */ MNEM_CMOVNP, - /* 03C */ MNEM_CMOVNS, - /* 03D */ MNEM_CMOVO, - /* 03E */ MNEM_CMOVP, - /* 03F */ MNEM_CMOVS, - /* 040 */ MNEM_CMP, - /* 041 */ MNEM_CMPPD, - /* 042 */ MNEM_CMPPS, - /* 043 */ MNEM_CMPSB, - /* 044 */ MNEM_CMPSD, - /* 045 */ MNEM_CMPSQ, - /* 046 */ MNEM_CMPSS, - /* 047 */ MNEM_CMPSW, - /* 048 */ MNEM_CMPXCHG, - /* 049 */ MNEM_CMPXCHG16B, - /* 04A */ MNEM_CMPXCHG8B, - /* 04B */ MNEM_COMISD, - /* 04C */ MNEM_COMISS, - /* 04D */ MNEM_CPUID, - /* 04E */ MNEM_CQO, - /* 04F */ MNEM_CRC32, - /* 050 */ MNEM_CVTDQ2PD, - /* 051 */ MNEM_CVTDQ2PS, - /* 052 */ MNEM_CVTPD2DQ, - /* 053 */ MNEM_CVTPD2PI, - /* 054 */ MNEM_CVTPD2PS, - /* 055 */ MNEM_CVTPI2PD, - /* 056 */ MNEM_CVTPI2PS, - /* 057 */ MNEM_CVTPS2DQ, - /* 058 */ MNEM_CVTPS2PD, - /* 059 */ MNEM_CVTPS2PI, - /* 05A */ MNEM_CVTSD2SI, - /* 05B */ MNEM_CVTSD2SS, - /* 05C */ MNEM_CVTSI2SD, - /* 05D */ MNEM_CVTSI2SS, - /* 05E */ MNEM_CVTSS2SD, - /* 05F */ MNEM_CVTSS2SI, - /* 060 */ MNEM_CVTTPD2DQ, - /* 061 */ MNEM_CVTTPD2PI, - /* 062 */ MNEM_CVTTPS2DQ, - /* 063 */ MNEM_CVTTPS2PI, - /* 064 */ MNEM_CVTTSD2SI, - /* 065 */ MNEM_CVTTSS2SI, - /* 066 */ MNEM_CWD, - /* 067 */ MNEM_CWDE, - /* 068 */ MNEM_DAA, - /* 069 */ MNEM_DAS, - /* 06A */ MNEM_DEC, - /* 06B */ MNEM_DIV, - /* 06C */ MNEM_DIVPD, - /* 06D */ MNEM_DIVPS, - /* 06E */ MNEM_DIVSD, - /* 06F */ MNEM_DIVSS, - /* 070 */ MNEM_DPPD, - /* 071 */ MNEM_DPPS, - /* 072 */ MNEM_EMMS, - /* 073 */ MNEM_ENTER, - /* 074 */ MNEM_EXTRACTPS, - /* 075 */ MNEM_F2XM1, - /* 076 */ MNEM_FABS, - /* 077 */ MNEM_FADD, - /* 078 */ MNEM_FADDP, - /* 079 */ MNEM_FBLD, - /* 07A */ MNEM_FBSTP, - /* 07B */ MNEM_FCHS, - /* 07C */ MNEM_FCLEX, - /* 07D */ MNEM_FCMOVB, - /* 07E */ MNEM_FCMOVBE, - /* 07F */ MNEM_FCMOVE, - /* 080 */ MNEM_FCMOVNB, - /* 081 */ MNEM_FCMOVNBE, - /* 082 */ MNEM_FCMOVNE, - /* 083 */ MNEM_FCMOVNU, - /* 084 */ MNEM_FCMOVU, - /* 085 */ MNEM_FCOM, - /* 086 */ MNEM_FCOM2, - /* 087 */ MNEM_FCOMI, - /* 088 */ MNEM_FCOMIP, - /* 089 */ MNEM_FCOMP, - /* 08A */ MNEM_FCOMP3, - /* 08B */ MNEM_FCOMP5, - /* 08C */ MNEM_FCOMPP, - /* 08D */ MNEM_FCOS, - /* 08E */ MNEM_FDECSTP, - /* 08F */ MNEM_FDIV, - /* 090 */ MNEM_FDIVP, - /* 091 */ MNEM_FDIVR, - /* 092 */ MNEM_FDIVRP, - /* 093 */ MNEM_FEMMS, - /* 094 */ MNEM_FFREE, - /* 095 */ MNEM_FFREEP, - /* 096 */ MNEM_FIADD, - /* 097 */ MNEM_FICOM, - /* 098 */ MNEM_FICOMP, - /* 099 */ MNEM_FIDIV, - /* 09A */ MNEM_FIDIVR, - /* 09B */ MNEM_FILD, - /* 09C */ MNEM_FIMUL, - /* 09D */ MNEM_FINCSTP, - /* 09E */ MNEM_FIST, - /* 09F */ MNEM_FISTP, - /* 0A0 */ MNEM_FISTTP, - /* 0A1 */ MNEM_FISUB, - /* 0A2 */ MNEM_FISUBR, - /* 0A3 */ MNEM_FLD, - /* 0A4 */ MNEM_FLD1, - /* 0A5 */ MNEM_FLDCW, - /* 0A6 */ MNEM_FLDENV, - /* 0A7 */ MNEM_FLDL2E, - /* 0A8 */ MNEM_FLDL2T, - /* 0A9 */ MNEM_FLDLG2, - /* 0AA */ MNEM_FLDLN2, - /* 0AB */ MNEM_FLDPI, - /* 0AC */ MNEM_FLDZ, - /* 0AD */ MNEM_FMUL, - /* 0AE */ MNEM_FMULP, - /* 0AF */ MNEM_FNDISI, - /* 0B0 */ MNEM_FNENI, - /* 0B1 */ MNEM_FNINIT, - /* 0B2 */ MNEM_FNOP, - /* 0B3 */ MNEM_FNSAVE, - /* 0B4 */ MNEM_FNSETPM, - /* 0B5 */ MNEM_FNSTCW, - /* 0B6 */ MNEM_FNSTENV, - /* 0B7 */ MNEM_FNSTSW, - /* 0B8 */ MNEM_FPATAN, - /* 0B9 */ MNEM_FPREM, - /* 0BA */ MNEM_FPREM1, - /* 0BB */ MNEM_FPTAN, - /* 0BC */ MNEM_FRNDINT, - /* 0BD */ MNEM_FRSTOR, - /* 0BE */ MNEM_FRSTPM, - /* 0BF */ MNEM_FSCALE, - /* 0C0 */ MNEM_FSIN, - /* 0C1 */ MNEM_FSINCOS, - /* 0C2 */ MNEM_FSQRT, - /* 0C3 */ MNEM_FST, - /* 0C4 */ MNEM_FSTP, - /* 0C5 */ MNEM_FSTP1, - /* 0C6 */ MNEM_FSTP8, - /* 0C7 */ MNEM_FSTP9, - /* 0C8 */ MNEM_FSUB, - /* 0C9 */ MNEM_FSUBP, - /* 0CA */ MNEM_FSUBR, - /* 0CB */ MNEM_FSUBRP, - /* 0CC */ MNEM_FTST, - /* 0CD */ MNEM_FUCOM, - /* 0CE */ MNEM_FUCOMI, - /* 0CF */ MNEM_FUCOMIP, - /* 0D0 */ MNEM_FUCOMP, - /* 0D1 */ MNEM_FUCOMPP, - /* 0D2 */ MNEM_FXAM, - /* 0D3 */ MNEM_FXCH, - /* 0D4 */ MNEM_FXCH4, - /* 0D5 */ MNEM_FXCH7, - /* 0D6 */ MNEM_FXRSTOR, - /* 0D7 */ MNEM_FXSAVE, - /* 0D8 */ MNEM_FXTRACT, - /* 0D9 */ MNEM_FYL2X, - /* 0DA */ MNEM_FYL2XP1, - /* 0DB */ MNEM_GETSEC, - /* 0DC */ MNEM_HADDPD, - /* 0DD */ MNEM_HADDPS, - /* 0DE */ MNEM_HLT, - /* 0DF */ MNEM_HSUBPD, - /* 0E0 */ MNEM_HSUBPS, - /* 0E1 */ MNEM_IDIV, - /* 0E2 */ MNEM_IMUL, - /* 0E3 */ MNEM_IN, - /* 0E4 */ MNEM_INC, - /* 0E5 */ MNEM_INSB, - /* 0E6 */ MNEM_INSD, - /* 0E7 */ MNEM_INSERTPS, - /* 0E8 */ MNEM_INSW, - /* 0E9 */ MNEM_INT, - /* 0EA */ MNEM_INT1, - /* 0EB */ MNEM_INT3, - /* 0EC */ MNEM_INTO, - /* 0ED */ MNEM_INVD, - /* 0EE */ MNEM_INVEPT, - /* 0EF */ MNEM_INVLPG, - /* 0F0 */ MNEM_INVLPGA, - /* 0F1 */ MNEM_INVVPID, - /* 0F2 */ MNEM_IRETD, - /* 0F3 */ MNEM_IRETQ, - /* 0F4 */ MNEM_IRETW, - /* 0F5 */ MNEM_JA, - /* 0F6 */ MNEM_JB, - /* 0F7 */ MNEM_JBE, - /* 0F8 */ MNEM_JCXZ, - /* 0F9 */ MNEM_JE, - /* 0FA */ MNEM_JECXZ, - /* 0FB */ MNEM_JG, - /* 0FC */ MNEM_JGE, - /* 0FD */ MNEM_JL, - /* 0FE */ MNEM_JLE, - /* 0FF */ MNEM_JMP, - /* 100 */ MNEM_JNB, - /* 101 */ MNEM_JNE, - /* 102 */ MNEM_JNO, - /* 103 */ MNEM_JNP, - /* 104 */ MNEM_JNS, - /* 105 */ MNEM_JO, - /* 106 */ MNEM_JP, - /* 107 */ MNEM_JRCXZ, - /* 108 */ MNEM_JS, - /* 109 */ MNEM_LAHF, - /* 10A */ MNEM_LAR, - /* 10B */ MNEM_LDDQU, - /* 10C */ MNEM_LDMXCSR, - /* 10D */ MNEM_LDS, - /* 10E */ MNEM_LEA, - /* 10F */ MNEM_LEAVE, - /* 110 */ MNEM_LES, - /* 111 */ MNEM_LFENCE, - /* 112 */ MNEM_LFS, - /* 113 */ MNEM_LGDT, - /* 114 */ MNEM_LGS, - /* 115 */ MNEM_LIDT, - /* 116 */ MNEM_LLDT, - /* 117 */ MNEM_LMSW, - /* 118 */ MNEM_LOCK, - /* 119 */ MNEM_LODSB, - /* 11A */ MNEM_LODSD, - /* 11B */ MNEM_LODSQ, - /* 11C */ MNEM_LODSW, - /* 11D */ MNEM_LOOP, - /* 11E */ MNEM_LOOPE, - /* 11F */ MNEM_LOOPNE, - /* 120 */ MNEM_LSL, - /* 121 */ MNEM_LSS, - /* 122 */ MNEM_LTR, - /* 123 */ MNEM_MASKMOVDQU, - /* 124 */ MNEM_MASKMOVQ, - /* 125 */ MNEM_MAXPD, - /* 126 */ MNEM_MAXPS, - /* 127 */ MNEM_MAXSD, - /* 128 */ MNEM_MAXSS, - /* 129 */ MNEM_MFENCE, - /* 12A */ MNEM_MINPD, - /* 12B */ MNEM_MINPS, - /* 12C */ MNEM_MINSD, - /* 12D */ MNEM_MINSS, - /* 12E */ MNEM_MONITOR, - /* 12F */ MNEM_MONTMUL, - /* 130 */ MNEM_MOV, - /* 131 */ MNEM_MOVAPD, - /* 132 */ MNEM_MOVAPS, - /* 133 */ MNEM_MOVBE, - /* 134 */ MNEM_MOVD, - /* 135 */ MNEM_MOVDDUP, - /* 136 */ MNEM_MOVDQ2Q, - /* 137 */ MNEM_MOVDQA, - /* 138 */ MNEM_MOVDQU, - /* 139 */ MNEM_MOVHLPS, - /* 13A */ MNEM_MOVHPD, - /* 13B */ MNEM_MOVHPS, - /* 13C */ MNEM_MOVLHPS, - /* 13D */ MNEM_MOVLPD, - /* 13E */ MNEM_MOVLPS, - /* 13F */ MNEM_MOVMSKPD, - /* 140 */ MNEM_MOVMSKPS, - /* 141 */ MNEM_MOVNTDQ, - /* 142 */ MNEM_MOVNTDQA, - /* 143 */ MNEM_MOVNTI, - /* 144 */ MNEM_MOVNTPD, - /* 145 */ MNEM_MOVNTPS, - /* 146 */ MNEM_MOVNTQ, - /* 147 */ MNEM_MOVQ, - /* 148 */ MNEM_MOVQ2DQ, - /* 149 */ MNEM_MOVSB, - /* 14A */ MNEM_MOVSD, - /* 14B */ MNEM_MOVSHDUP, - /* 14C */ MNEM_MOVSLDUP, - /* 14D */ MNEM_MOVSQ, - /* 14E */ MNEM_MOVSS, - /* 14F */ MNEM_MOVSW, - /* 150 */ MNEM_MOVSX, - /* 151 */ MNEM_MOVSXD, - /* 152 */ MNEM_MOVUPD, - /* 153 */ MNEM_MOVUPS, - /* 154 */ MNEM_MOVZX, - /* 155 */ MNEM_MPSADBW, - /* 156 */ MNEM_MUL, - /* 157 */ MNEM_MULPD, - /* 158 */ MNEM_MULPS, - /* 159 */ MNEM_MULSD, - /* 15A */ MNEM_MULSS, - /* 15B */ MNEM_MWAIT, - /* 15C */ MNEM_NEG, - /* 15D */ MNEM_NOP, - /* 15E */ MNEM_NOT, - /* 15F */ MNEM_OR, - /* 160 */ MNEM_ORPD, - /* 161 */ MNEM_ORPS, - /* 162 */ MNEM_OUT, - /* 163 */ MNEM_OUTSB, - /* 164 */ MNEM_OUTSD, - /* 165 */ MNEM_OUTSW, - /* 166 */ MNEM_PABSB, - /* 167 */ MNEM_PABSD, - /* 168 */ MNEM_PABSW, - /* 169 */ MNEM_PACKSSDW, - /* 16A */ MNEM_PACKSSWB, - /* 16B */ MNEM_PACKUSDW, - /* 16C */ MNEM_PACKUSWB, - /* 16D */ MNEM_PADDB, - /* 16E */ MNEM_PADDD, - /* 16F */ MNEM_PADDQ, - /* 170 */ MNEM_PADDSB, - /* 171 */ MNEM_PADDSW, - /* 172 */ MNEM_PADDUSB, - /* 173 */ MNEM_PADDUSW, - /* 174 */ MNEM_PADDW, - /* 175 */ MNEM_PALIGNR, - /* 176 */ MNEM_PAND, - /* 177 */ MNEM_PANDN, - /* 178 */ MNEM_PAUSE, - /* 179 */ MNEM_PAVGB, - /* 17A */ MNEM_PAVGUSB, - /* 17B */ MNEM_PAVGW, - /* 17C */ MNEM_PBLENDVB, - /* 17D */ MNEM_PBLENDW, - /* 17E */ MNEM_PCLMULQDQ, - /* 17F */ MNEM_PCMPEQB, - /* 180 */ MNEM_PCMPEQD, - /* 181 */ MNEM_PCMPEQQ, - /* 182 */ MNEM_PCMPEQW, - /* 183 */ MNEM_PCMPESTRI, - /* 184 */ MNEM_PCMPESTRM, - /* 185 */ MNEM_PCMPGTB, - /* 186 */ MNEM_PCMPGTD, - /* 187 */ MNEM_PCMPGTQ, - /* 188 */ MNEM_PCMPGTW, - /* 189 */ MNEM_PCMPISTRI, - /* 18A */ MNEM_PCMPISTRM, - /* 18B */ MNEM_PEXTRB, - /* 18C */ MNEM_PEXTRD, - /* 18D */ MNEM_PEXTRQ, - /* 18E */ MNEM_PEXTRW, - /* 18F */ MNEM_PF2ID, - /* 190 */ MNEM_PF2IW, - /* 191 */ MNEM_PFACC, - /* 192 */ MNEM_PFADD, - /* 193 */ MNEM_PFCMPEQ, - /* 194 */ MNEM_PFCMPGE, - /* 195 */ MNEM_PFCMPGT, - /* 196 */ MNEM_PFMAX, - /* 197 */ MNEM_PFMIN, - /* 198 */ MNEM_PFMUL, - /* 199 */ MNEM_PFNACC, - /* 19A */ MNEM_PFPNACC, - /* 19B */ MNEM_PFRCP, - /* 19C */ MNEM_PFRCPIT1, - /* 19D */ MNEM_PFRCPIT2, - /* 19E */ MNEM_PFRSQIT1, - /* 19F */ MNEM_PFRSQRT, - /* 1A0 */ MNEM_PFSUB, - /* 1A1 */ MNEM_PFSUBR, - /* 1A2 */ MNEM_PHADDD, - /* 1A3 */ MNEM_PHADDSW, - /* 1A4 */ MNEM_PHADDW, - /* 1A5 */ MNEM_PHMINPOSUW, - /* 1A6 */ MNEM_PHSUBD, - /* 1A7 */ MNEM_PHSUBSW, - /* 1A8 */ MNEM_PHSUBW, - /* 1A9 */ MNEM_PI2FD, - /* 1AA */ MNEM_PI2FW, - /* 1AB */ MNEM_PINSRB, - /* 1AC */ MNEM_PINSRD, - /* 1AD */ MNEM_PINSRQ, - /* 1AE */ MNEM_PINSRW, - /* 1AF */ MNEM_PMADDUBSW, - /* 1B0 */ MNEM_PMADDWD, - /* 1B1 */ MNEM_PMAXSB, - /* 1B2 */ MNEM_PMAXSD, - /* 1B3 */ MNEM_PMAXSW, - /* 1B4 */ MNEM_PMAXUB, - /* 1B5 */ MNEM_PMAXUD, - /* 1B6 */ MNEM_PMAXUW, - /* 1B7 */ MNEM_PMINSB, - /* 1B8 */ MNEM_PMINSD, - /* 1B9 */ MNEM_PMINSW, - /* 1BA */ MNEM_PMINUB, - /* 1BB */ MNEM_PMINUD, - /* 1BC */ MNEM_PMINUW, - /* 1BD */ MNEM_PMOVMSKB, - /* 1BE */ MNEM_PMOVSXBD, - /* 1BF */ MNEM_PMOVSXBQ, - /* 1C0 */ MNEM_PMOVSXBW, - /* 1C1 */ MNEM_PMOVSXDQ, - /* 1C2 */ MNEM_PMOVSXWD, - /* 1C3 */ MNEM_PMOVSXWQ, - /* 1C4 */ MNEM_PMOVZXBD, - /* 1C5 */ MNEM_PMOVZXBQ, - /* 1C6 */ MNEM_PMOVZXBW, - /* 1C7 */ MNEM_PMOVZXDQ, - /* 1C8 */ MNEM_PMOVZXWD, - /* 1C9 */ MNEM_PMOVZXWQ, - /* 1CA */ MNEM_PMULDQ, - /* 1CB */ MNEM_PMULHRSW, - /* 1CC */ MNEM_PMULHRW, - /* 1CD */ MNEM_PMULHUW, - /* 1CE */ MNEM_PMULHW, - /* 1CF */ MNEM_PMULLD, - /* 1D0 */ MNEM_PMULLW, - /* 1D1 */ MNEM_PMULUDQ, - /* 1D2 */ MNEM_POP, - /* 1D3 */ MNEM_POPA, - /* 1D4 */ MNEM_POPAD, - /* 1D5 */ MNEM_POPCNT, - /* 1D6 */ MNEM_POPFD, - /* 1D7 */ MNEM_POPFQ, - /* 1D8 */ MNEM_POPFW, - /* 1D9 */ MNEM_POR, - /* 1DA */ MNEM_PREFETCH, - /* 1DB */ MNEM_PREFETCHNTA, - /* 1DC */ MNEM_PREFETCHT0, - /* 1DD */ MNEM_PREFETCHT1, - /* 1DE */ MNEM_PREFETCHT2, - /* 1DF */ MNEM_PSADBW, - /* 1E0 */ MNEM_PSHUFB, - /* 1E1 */ MNEM_PSHUFD, - /* 1E2 */ MNEM_PSHUFHW, - /* 1E3 */ MNEM_PSHUFLW, - /* 1E4 */ MNEM_PSHUFW, - /* 1E5 */ MNEM_PSIGNB, - /* 1E6 */ MNEM_PSIGND, - /* 1E7 */ MNEM_PSIGNW, - /* 1E8 */ MNEM_PSLLD, - /* 1E9 */ MNEM_PSLLDQ, - /* 1EA */ MNEM_PSLLQ, - /* 1EB */ MNEM_PSLLW, - /* 1EC */ MNEM_PSRAD, - /* 1ED */ MNEM_PSRAW, - /* 1EE */ MNEM_PSRLD, - /* 1EF */ MNEM_PSRLDQ, - /* 1F0 */ MNEM_PSRLQ, - /* 1F1 */ MNEM_PSRLW, - /* 1F2 */ MNEM_PSUBB, - /* 1F3 */ MNEM_PSUBD, - /* 1F4 */ MNEM_PSUBQ, - /* 1F5 */ MNEM_PSUBSB, - /* 1F6 */ MNEM_PSUBSW, - /* 1F7 */ MNEM_PSUBUSB, - /* 1F8 */ MNEM_PSUBUSW, - /* 1F9 */ MNEM_PSUBW, - /* 1FA */ MNEM_PSWAPD, - /* 1FB */ MNEM_PTEST, - /* 1FC */ MNEM_PUNPCKHBW, - /* 1FD */ MNEM_PUNPCKHDQ, - /* 1FE */ MNEM_PUNPCKHQDQ, - /* 1FF */ MNEM_PUNPCKHWD, - /* 200 */ MNEM_PUNPCKLBW, - /* 201 */ MNEM_PUNPCKLDQ, - /* 202 */ MNEM_PUNPCKLQDQ, - /* 203 */ MNEM_PUNPCKLWD, - /* 204 */ MNEM_PUSH, - /* 205 */ MNEM_PUSHA, - /* 206 */ MNEM_PUSHAD, - /* 207 */ MNEM_PUSHFD, - /* 208 */ MNEM_PUSHFQ, - /* 209 */ MNEM_PUSHFW, - /* 20A */ MNEM_PXOR, - /* 20B */ MNEM_RCL, - /* 20C */ MNEM_RCPPS, - /* 20D */ MNEM_RCPSS, - /* 20E */ MNEM_RCR, - /* 20F */ MNEM_RDMSR, - /* 210 */ MNEM_RDPMC, - /* 211 */ MNEM_RDRAND, - /* 212 */ MNEM_RDTSC, - /* 213 */ MNEM_RDTSCP, - /* 214 */ MNEM_REP, - /* 215 */ MNEM_REPNE, - /* 216 */ MNEM_RET, - /* 217 */ MNEM_RETF, - /* 218 */ MNEM_ROL, - /* 219 */ MNEM_ROR, - /* 21A */ MNEM_ROUNDPD, - /* 21B */ MNEM_ROUNDPS, - /* 21C */ MNEM_ROUNDSD, - /* 21D */ MNEM_ROUNDSS, - /* 21E */ MNEM_RSM, - /* 21F */ MNEM_RSQRTPS, - /* 220 */ MNEM_RSQRTSS, - /* 221 */ MNEM_SAHF, - /* 222 */ MNEM_SALC, - /* 223 */ MNEM_SAR, - /* 224 */ MNEM_SBB, - /* 225 */ MNEM_SCASB, - /* 226 */ MNEM_SCASD, - /* 227 */ MNEM_SCASQ, - /* 228 */ MNEM_SCASW, - /* 229 */ MNEM_SETA, - /* 22A */ MNEM_SETAE, - /* 22B */ MNEM_SETB, - /* 22C */ MNEM_SETBE, - /* 22D */ MNEM_SETE, - /* 22E */ MNEM_SETG, - /* 22F */ MNEM_SETGE, - /* 230 */ MNEM_SETL, - /* 231 */ MNEM_SETLE, - /* 232 */ MNEM_SETNE, - /* 233 */ MNEM_SETNO, - /* 234 */ MNEM_SETNP, - /* 235 */ MNEM_SETNS, - /* 236 */ MNEM_SETO, - /* 237 */ MNEM_SETP, - /* 238 */ MNEM_SETS, - /* 239 */ MNEM_SFENCE, - /* 23A */ MNEM_SGDT, - /* 23B */ MNEM_SHL, - /* 23C */ MNEM_SHLD, - /* 23D */ MNEM_SHR, - /* 23E */ MNEM_SHRD, - /* 23F */ MNEM_SHUFPD, - /* 240 */ MNEM_SHUFPS, - /* 241 */ MNEM_SIDT, - /* 242 */ MNEM_SKINIT, - /* 243 */ MNEM_SLDT, - /* 244 */ MNEM_SMSW, - /* 245 */ MNEM_SQRTPD, - /* 246 */ MNEM_SQRTPS, - /* 247 */ MNEM_SQRTSD, - /* 248 */ MNEM_SQRTSS, - /* 249 */ MNEM_STC, - /* 24A */ MNEM_STD, - /* 24B */ MNEM_STGI, - /* 24C */ MNEM_STI, - /* 24D */ MNEM_STMXCSR, - /* 24E */ MNEM_STOSB, - /* 24F */ MNEM_STOSD, - /* 250 */ MNEM_STOSQ, - /* 251 */ MNEM_STOSW, - /* 252 */ MNEM_STR, - /* 253 */ MNEM_SUB, - /* 254 */ MNEM_SUBPD, - /* 255 */ MNEM_SUBPS, - /* 256 */ MNEM_SUBSD, - /* 257 */ MNEM_SUBSS, - /* 258 */ MNEM_SWAPGS, - /* 259 */ MNEM_SYSCALL, - /* 25A */ MNEM_SYSENTER, - /* 25B */ MNEM_SYSEXIT, - /* 25C */ MNEM_SYSRET, - /* 25D */ MNEM_TEST, - /* 25E */ MNEM_UCOMISD, - /* 25F */ MNEM_UCOMISS, - /* 260 */ MNEM_UD2, - /* 261 */ MNEM_UNPCKHPD, - /* 262 */ MNEM_UNPCKHPS, - /* 263 */ MNEM_UNPCKLPD, - /* 264 */ MNEM_UNPCKLPS, - /* 265 */ MNEM_VADDPD, - /* 266 */ MNEM_VADDPS, - /* 267 */ MNEM_VADDSD, - /* 268 */ MNEM_VADDSS, - /* 269 */ MNEM_VADDSUBPD, - /* 26A */ MNEM_VADDSUBPS, - /* 26B */ MNEM_VAESDEC, - /* 26C */ MNEM_VAESDECLAST, - /* 26D */ MNEM_VAESENC, - /* 26E */ MNEM_VAESENCLAST, - /* 26F */ MNEM_VAESIMC, - /* 270 */ MNEM_VAESKEYGENASSIST, - /* 271 */ MNEM_VANDNPD, - /* 272 */ MNEM_VANDNPS, - /* 273 */ MNEM_VANDPD, - /* 274 */ MNEM_VANDPS, - /* 275 */ MNEM_VBLENDPD, - /* 276 */ MNEM_VBLENDPS, - /* 277 */ MNEM_VBLENDVPD, - /* 278 */ MNEM_VBLENDVPS, - /* 279 */ MNEM_VBROADCASTSD, - /* 27A */ MNEM_VBROADCASTSS, - /* 27B */ MNEM_VCMPPD, - /* 27C */ MNEM_VCMPPS, - /* 27D */ MNEM_VCMPSD, - /* 27E */ MNEM_VCMPSS, - /* 27F */ MNEM_VCOMISD, - /* 280 */ MNEM_VCOMISS, - /* 281 */ MNEM_VCVTDQ2PD, - /* 282 */ MNEM_VCVTDQ2PS, - /* 283 */ MNEM_VCVTPD2DQ, - /* 284 */ MNEM_VCVTPD2PS, - /* 285 */ MNEM_VCVTPS2DQ, - /* 286 */ MNEM_VCVTPS2PD, - /* 287 */ MNEM_VCVTSD2SI, - /* 288 */ MNEM_VCVTSD2SS, - /* 289 */ MNEM_VCVTSI2SD, - /* 28A */ MNEM_VCVTSI2SS, - /* 28B */ MNEM_VCVTSS2SD, - /* 28C */ MNEM_VCVTSS2SI, - /* 28D */ MNEM_VCVTTPD2DQ, - /* 28E */ MNEM_VCVTTPS2DQ, - /* 28F */ MNEM_VCVTTSD2SI, - /* 290 */ MNEM_VCVTTSS2SI, - /* 291 */ MNEM_VDIVPD, - /* 292 */ MNEM_VDIVPS, - /* 293 */ MNEM_VDIVSD, - /* 294 */ MNEM_VDIVSS, - /* 295 */ MNEM_VDPPD, - /* 296 */ MNEM_VDPPS, - /* 297 */ MNEM_VERR, - /* 298 */ MNEM_VERW, - /* 299 */ MNEM_VEXTRACTF128, - /* 29A */ MNEM_VEXTRACTPS, - /* 29B */ MNEM_VHADDPD, - /* 29C */ MNEM_VHADDPS, - /* 29D */ MNEM_VHSUBPD, - /* 29E */ MNEM_VHSUBPS, - /* 29F */ MNEM_VINSERTF128, - /* 2A0 */ MNEM_VINSERTPS, - /* 2A1 */ MNEM_VLDDQU, - /* 2A2 */ MNEM_VMASKMOVDQU, - /* 2A3 */ MNEM_VMASKMOVPD, - /* 2A4 */ MNEM_VMASKMOVPS, - /* 2A5 */ MNEM_VMAXPD, - /* 2A6 */ MNEM_VMAXPS, - /* 2A7 */ MNEM_VMAXSD, - /* 2A8 */ MNEM_VMAXSS, - /* 2A9 */ MNEM_VMCALL, - /* 2AA */ MNEM_VMCLEAR, - /* 2AB */ MNEM_VMINPD, - /* 2AC */ MNEM_VMINPS, - /* 2AD */ MNEM_VMINSD, - /* 2AE */ MNEM_VMINSS, - /* 2AF */ MNEM_VMLAUNCH, - /* 2B0 */ MNEM_VMLOAD, - /* 2B1 */ MNEM_VMMCALL, - /* 2B2 */ MNEM_VMOVAPD, - /* 2B3 */ MNEM_VMOVAPS, - /* 2B4 */ MNEM_VMOVD, - /* 2B5 */ MNEM_VMOVDDUP, - /* 2B6 */ MNEM_VMOVDQA, - /* 2B7 */ MNEM_VMOVDQU, - /* 2B8 */ MNEM_VMOVHLPS, - /* 2B9 */ MNEM_VMOVHPD, - /* 2BA */ MNEM_VMOVHPS, - /* 2BB */ MNEM_VMOVLHPS, - /* 2BC */ MNEM_VMOVLPD, - /* 2BD */ MNEM_VMOVLPS, - /* 2BE */ MNEM_VMOVMSKPD, - /* 2BF */ MNEM_VMOVMSKPS, - /* 2C0 */ MNEM_VMOVNTDQ, - /* 2C1 */ MNEM_VMOVNTDQA, - /* 2C2 */ MNEM_VMOVNTPD, - /* 2C3 */ MNEM_VMOVNTPS, - /* 2C4 */ MNEM_VMOVQ, - /* 2C5 */ MNEM_VMOVSD, - /* 2C6 */ MNEM_VMOVSHDUP, - /* 2C7 */ MNEM_VMOVSLDUP, - /* 2C8 */ MNEM_VMOVSS, - /* 2C9 */ MNEM_VMOVUPD, - /* 2CA */ MNEM_VMOVUPS, - /* 2CB */ MNEM_VMPSADBW, - /* 2CC */ MNEM_VMPTRLD, - /* 2CD */ MNEM_VMPTRST, - /* 2CE */ MNEM_VMREAD, - /* 2CF */ MNEM_VMRESUME, - /* 2D0 */ MNEM_VMRUN, - /* 2D1 */ MNEM_VMSAVE, - /* 2D2 */ MNEM_VMULPD, - /* 2D3 */ MNEM_VMULPS, - /* 2D4 */ MNEM_VMULSD, - /* 2D5 */ MNEM_VMULSS, - /* 2D6 */ MNEM_VMWRITE, - /* 2D7 */ MNEM_VMXOFF, - /* 2D8 */ MNEM_VMXON, - /* 2D9 */ MNEM_VORPD, - /* 2DA */ MNEM_VORPS, - /* 2DB */ MNEM_VPABSB, - /* 2DC */ MNEM_VPABSD, - /* 2DD */ MNEM_VPABSW, - /* 2DE */ MNEM_VPACKSSDW, - /* 2DF */ MNEM_VPACKSSWB, - /* 2E0 */ MNEM_VPACKUSDW, - /* 2E1 */ MNEM_VPACKUSWB, - /* 2E2 */ MNEM_VPADDB, - /* 2E3 */ MNEM_VPADDD, - /* 2E4 */ MNEM_VPADDQ, - /* 2E5 */ MNEM_VPADDSB, - /* 2E6 */ MNEM_VPADDSW, - /* 2E7 */ MNEM_VPADDUSB, - /* 2E8 */ MNEM_VPADDUSW, - /* 2E9 */ MNEM_VPADDW, - /* 2EA */ MNEM_VPALIGNR, - /* 2EB */ MNEM_VPAND, - /* 2EC */ MNEM_VPANDN, - /* 2ED */ MNEM_VPAVGB, - /* 2EE */ MNEM_VPAVGW, - /* 2EF */ MNEM_VPBLENDVB, - /* 2F0 */ MNEM_VPBLENDW, - /* 2F1 */ MNEM_VPCLMULQDQ, - /* 2F2 */ MNEM_VPCMPEQB, - /* 2F3 */ MNEM_VPCMPEQD, - /* 2F4 */ MNEM_VPCMPEQQ, - /* 2F5 */ MNEM_VPCMPEQW, - /* 2F6 */ MNEM_VPCMPESTRI, - /* 2F7 */ MNEM_VPCMPESTRM, - /* 2F8 */ MNEM_VPCMPGTB, - /* 2F9 */ MNEM_VPCMPGTD, - /* 2FA */ MNEM_VPCMPGTQ, - /* 2FB */ MNEM_VPCMPGTW, - /* 2FC */ MNEM_VPCMPISTRI, - /* 2FD */ MNEM_VPCMPISTRM, - /* 2FE */ MNEM_VPERM2F128, - /* 2FF */ MNEM_VPERMILPD, - /* 300 */ MNEM_VPERMILPS, - /* 301 */ MNEM_VPEXTRB, - /* 302 */ MNEM_VPEXTRD, - /* 303 */ MNEM_VPEXTRQ, - /* 304 */ MNEM_VPEXTRW, - /* 305 */ MNEM_VPHADDD, - /* 306 */ MNEM_VPHADDSW, - /* 307 */ MNEM_VPHADDW, - /* 308 */ MNEM_VPHMINPOSUW, - /* 309 */ MNEM_VPHSUBD, - /* 30A */ MNEM_VPHSUBSW, - /* 30B */ MNEM_VPHSUBW, - /* 30C */ MNEM_VPINSRB, - /* 30D */ MNEM_VPINSRD, - /* 30E */ MNEM_VPINSRQ, - /* 30F */ MNEM_VPINSRW, - /* 310 */ MNEM_VPMADDUBSW, - /* 311 */ MNEM_VPMADDWD, - /* 312 */ MNEM_VPMAXSB, - /* 313 */ MNEM_VPMAXSD, - /* 314 */ MNEM_VPMAXSW, - /* 315 */ MNEM_VPMAXUB, - /* 316 */ MNEM_VPMAXUD, - /* 317 */ MNEM_VPMAXUW, - /* 318 */ MNEM_VPMINSB, - /* 319 */ MNEM_VPMINSD, - /* 31A */ MNEM_VPMINSW, - /* 31B */ MNEM_VPMINUB, - /* 31C */ MNEM_VPMINUD, - /* 31D */ MNEM_VPMINUW, - /* 31E */ MNEM_VPMOVMSKB, - /* 31F */ MNEM_VPMOVSXBD, - /* 320 */ MNEM_VPMOVSXBQ, - /* 321 */ MNEM_VPMOVSXBW, - /* 322 */ MNEM_VPMOVSXWD, - /* 323 */ MNEM_VPMOVSXWQ, - /* 324 */ MNEM_VPMOVZXBD, - /* 325 */ MNEM_VPMOVZXBQ, - /* 326 */ MNEM_VPMOVZXBW, - /* 327 */ MNEM_VPMOVZXDQ, - /* 328 */ MNEM_VPMOVZXWD, - /* 329 */ MNEM_VPMOVZXWQ, - /* 32A */ MNEM_VPMULDQ, - /* 32B */ MNEM_VPMULHRSW, - /* 32C */ MNEM_VPMULHUW, - /* 32D */ MNEM_VPMULHW, - /* 32E */ MNEM_VPMULLD, - /* 32F */ MNEM_VPMULLW, - /* 330 */ MNEM_VPOR, - /* 331 */ MNEM_VPSADBW, - /* 332 */ MNEM_VPSHUFB, - /* 333 */ MNEM_VPSHUFD, - /* 334 */ MNEM_VPSHUFHW, - /* 335 */ MNEM_VPSHUFLW, - /* 336 */ MNEM_VPSIGNB, - /* 337 */ MNEM_VPSIGND, - /* 338 */ MNEM_VPSIGNW, - /* 339 */ MNEM_VPSLLD, - /* 33A */ MNEM_VPSLLDQ, - /* 33B */ MNEM_VPSLLQ, - /* 33C */ MNEM_VPSLLW, - /* 33D */ MNEM_VPSRAD, - /* 33E */ MNEM_VPSRAW, - /* 33F */ MNEM_VPSRLD, - /* 340 */ MNEM_VPSRLDQ, - /* 341 */ MNEM_VPSRLQ, - /* 342 */ MNEM_VPSRLW, - /* 343 */ MNEM_VPSUBB, - /* 344 */ MNEM_VPSUBD, - /* 345 */ MNEM_VPSUBQ, - /* 346 */ MNEM_VPSUBSB, - /* 347 */ MNEM_VPSUBSW, - /* 348 */ MNEM_VPSUBUSB, - /* 349 */ MNEM_VPSUBUSW, - /* 34A */ MNEM_VPSUBW, - /* 34B */ MNEM_VPTEST, - /* 34C */ MNEM_VPUNPCKHBW, - /* 34D */ MNEM_VPUNPCKHDQ, - /* 34E */ MNEM_VPUNPCKHQDQ, - /* 34F */ MNEM_VPUNPCKHWD, - /* 350 */ MNEM_VPUNPCKLBW, - /* 351 */ MNEM_VPUNPCKLDQ, - /* 352 */ MNEM_VPUNPCKLQDQ, - /* 353 */ MNEM_VPUNPCKLWD, - /* 354 */ MNEM_VPXOR, - /* 355 */ MNEM_VRCPPS, - /* 356 */ MNEM_VRCPSS, - /* 357 */ MNEM_VROUNDPD, - /* 358 */ MNEM_VROUNDPS, - /* 359 */ MNEM_VROUNDSD, - /* 35A */ MNEM_VROUNDSS, - /* 35B */ MNEM_VRSQRTPS, - /* 35C */ MNEM_VRSQRTSS, - /* 35D */ MNEM_VSHUFPD, - /* 35E */ MNEM_VSHUFPS, - /* 35F */ MNEM_VSQRTPD, - /* 360 */ MNEM_VSQRTPS, - /* 361 */ MNEM_VSQRTSD, - /* 362 */ MNEM_VSQRTSS, - /* 363 */ MNEM_VSTMXCSR, - /* 364 */ MNEM_VSUBPD, - /* 365 */ MNEM_VSUBPS, - /* 366 */ MNEM_VSUBSD, - /* 367 */ MNEM_VSUBSS, - /* 368 */ MNEM_VTESTPD, - /* 369 */ MNEM_VTESTPS, - /* 36A */ MNEM_VUCOMISD, - /* 36B */ MNEM_VUCOMISS, - /* 36C */ MNEM_VUNPCKHPD, - /* 36D */ MNEM_VUNPCKHPS, - /* 36E */ MNEM_VUNPCKLPD, - /* 36F */ MNEM_VUNPCKLPS, - /* 370 */ MNEM_ZyDisORPD, - /* 371 */ MNEM_ZyDisORPS, - /* 372 */ MNEM_VZEROALL, - /* 373 */ MNEM_VZEROUPPER, - /* 374 */ MNEM_WAIT, - /* 375 */ MNEM_WBINVD, - /* 376 */ MNEM_WRMSR, - /* 377 */ MNEM_XADD, - /* 378 */ MNEM_XCHG, - /* 379 */ MNEM_XCRYPTCBC, - /* 37A */ MNEM_XCRYPTCFB, - /* 37B */ MNEM_XCRYPTCTR, - /* 37C */ MNEM_XCRYPTECB, - /* 37D */ MNEM_XCRYPTOFB, - /* 37E */ MNEM_XGETBV, - /* 37F */ MNEM_XLATB, - /* 380 */ MNEM_XOR, - /* 381 */ MNEM_XORPD, - /* 382 */ MNEM_XORPS, - /* 383 */ MNEM_XRSTOR, - /* 384 */ MNEM_XSAVE, - /* 385 */ MNEM_XSETBV, - /* 386 */ MNEM_XSHA1, - /* 387 */ MNEM_XSHA256, - /* 388 */ MNEM_XSTORE, - - MNEM_FORCE_WORD = 0x7FFF -} ZyDisInstructionMnemonic; - -/** - * @brief Defines an alias representing an opcode tree node. An opcode tree node is a 16 bit - * unsigned integer value with its first 4 bits reserved for the node type. - */ -typedef uint16_t ZyDisOpcodeTreeNode; - -/** - * @brief Values that represent the type of an opcode tree node. - */ -typedef enum _ZyDisOpcodeTreeNodeType /* : uint8_t */ -{ - /** - * @brief Reference to a concrete instruction definition. - */ - OTNT_INSTRUCTION_DEFINITION = 0, - /** - * @brief Reference to an opcode table. - */ - OTNT_TABLE = 1, - /** - * @brief Reference to a modrm_mod switch table. - */ - OTNT_MODRM_MOD = 2, - /** - * @brief Reference to a modrm_reg switch table. - */ - OTNT_MODRM_REG = 3, - /** - * @brief Reference to a modrm_rm switch table. - */ - OTNT_MODRM_RM = 4, - /** - * @brief Reference to a mandatory-prefix switch table. - */ - OTNT_MANDATORY = 5, - /** - * @brief Reference to a x87 opcode table. - */ - OTNT_X87 = 6, - /** - * @brief Reference to an address-size switch table. - */ - OTNT_ADDRESS_SIZE = 7, - /** - * @brief Reference to an operand-size switch table. - */ - OTNT_OPERAND_SIZE = 8, - /** - * @brief Reference to a cpu-mode switch table. - */ - OTNT_MODE = 9, - /** - * @brief Reference to a vendor switch table. - */ - OTNT_VENDOR = 10, - /** - * @brief Reference to a 3dnow! opcode table. - */ - OTNT_AMD3DNOW = 11, - /** - * @brief Reference to a vex-prefix switch table. - */ - OTNT_VEX = 12, - /** - * @brief Reference to a vex_w switch table. - */ - OTNT_VEXW = 13, - /** - * @brief Reference to a vex_l switch table. - */ - OTNT_VEXL = 14 -} ZyDisOpcodeTreeNodeType; - -/** - * @brief Values that represent the type of an operand in the instruction definition. - */ -typedef enum _ZyDisDefinedOperandType /* : uint8_t */ -{ - /* - * @brief No operand. - */ - DOT_NONE, - /* - * @brief Direct address. The instruction has no ModR/M byte; the address of the operand is - * encoded in the instruction; no base register, index register, or scaling factor - * can be applied. - */ - DOT_A, - /* - * @brief The reg field of the ModR/M byte selects a control register. - */ - DOT_C, - /* - * @brief The reg field of the ModR/M byte selects a debug register. - */ - DOT_D, - /* - * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either - * a general-purpose register or a memory address. If it is a memory address, the - * address is computed from a segment register and any of the following values: - * a base register, an index register, a scaling factor, or a displacement. - */ - DOT_E, - /* - * @brief rFLAGS register. - */ - DOT_F, - /* - * @brief The reg field of the ModR/M byte selects a general register. - */ - DOT_G, - /* - * @brief The r/m field of the ModR/M byte always selects a general register, regardless of - * the mod field. - */ - DOT_H, - /* - * @brief Immediate data. The operand value is encoded in subsequent bytes of the - * instruction. - */ - DOT_I, - /* - * @brief Signed immediate data. The operand value is encoded in subsequent bytes of the - * instruction. - */ - DOT_sI, - /* - * @brief Constant immediate data value of 1. - */ - DOT_I1, - /* - * @brief The instruction contains a relative offset to be added to the instruction pointer - * register. - */ - DOT_J, - /* - * @brief Source operand is encoded in immediate byte (VEX only). - */ - DOT_L, - /* - * @brief The ModR/M byte may refer only to memory: mod != 11bin. - */ - DOT_M, - /* - * @brief Combination of M and R. - */ - DOT_MR, - /* - * @brief Combination of M and U. - */ - DOT_MU, - /* - * @brief The R/M field of the ModR/M byte selects a packed quadword MMX technology register. - */ - DOT_N, - /* - * @brief The instruction has no ModR/M byte; the offset of the operand is coded as a word, - * double word or quad word (depending on address size attribute) in the instruction. - * No base register, index register, or scaling factor can be applied. - */ - DOT_O, - /* - * @brief The reg field of the ModR/M byte selects a packed quadword MMX technology register. - */ - DOT_P, - /* - * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either - * an MMX technology register or a memory address. If it is a memory address, the - * address is computed from a segment register and any of the following values: - * a base register, an index register, a scaling factor, and a displacement. - */ - DOT_Q, - /* - * @brief The mod field of the ModR/M byte may refer only to a general register. - */ - DOT_R, - /* - * @brief The reg field of the ModR/M byte selects a segment register. - */ - DOT_S, - /* - * @brief The R/M field of the ModR/M byte selects a 128-bit XMM register. - */ - DOT_U, - /* - * @brief The reg field of the ModR/M byte selects a 128-bit XMM register. - */ - DOT_V, - /* - * @brief A ModR/M byte follows the opcode and specifies the operand. The operand is either - * a 128-bit XMM register or a memory address. If it is a memory address, the address - * is computed from a segment register and any of the following values: - * a base register, an index register, a scaling factor, and a displacement. - */ - DOT_W, - /** - * @brief Register 0. - */ - DOT_R0, - /** - * @brief Register 1. - */ - DOT_R1, - /** - * @brief Register 2. - */ - DOT_R2, - /** - * @brief Register 3. - */ - DOT_R3, - /** - * @brief Register 4. - */ - DOT_R4, - /** - * @brief Register 5. - */ - DOT_R5, - /** - * @brief Register 6. - */ - DOT_R6, - /** - * @brief Register 7. - */ - DOT_R7, - /** - * @brief AL register. - */ - DOT_AL, - /** - * @brief CL register. - */ - DOT_CL, - /** - * @brief DL register. - */ - DOT_DL, - /** - * @brief AX register. - */ - DOT_AX, - /** - * @brief CX register. - */ - DOT_CX, - /** - * @brief DX register. - */ - DOT_DX, - /** - * @brief EAX register. - */ - DOT_EAX, - /** - * @brief ECX register. - */ - DOT_ECX, - /** - * @brief EDX register. - */ - DOT_EDX, - /** - * @brief RAX register. - */ - DOT_RAX, - /** - * @brief RCX register. - */ - DOT_RCX, - /** - * @brief RDX register. - */ - DOT_RDX, - /** - * @brief ES segment register. - */ - DOT_ES, - /** - * @brief CS segment register. - */ - DOT_CS, - /** - * @brief SS segment register. - */ - DOT_SS, - /** - * @brief DS segment register. - */ - DOT_DS, - /** - * @brief FS segment register. - */ - DOT_FS, - /** - * @brief GS segment register. - */ - DOT_GS, - /** - * @brief Floating point register 0. - */ - DOT_ST0, - /** - * @brief Floating point register 1. - */ - DOT_ST1, - /** - * @brief Floating point register 2. - */ - DOT_ST2, - /** - * @brief Floating point register 3. - */ - DOT_ST3, - /** - * @brief Floating point register 4. - */ - DOT_ST4, - /** - * @brief Floating point register 5. - */ - DOT_ST5, - /** - * @brief Floating point register 6. - */ - DOT_ST6, - /** - * @brief Floating point register 7. - */ - DOT_ST7 -} ZyDisDefinedOperandType; - -/** - * @brief Values that represent the size of an operand in the instruction definition. - * Do not change the order or the values of this enum! - */ -typedef enum _ZyDisDefinedOperandSize /* : uint8_t */ -{ - /** - * @brief No operand. - */ - DOS_NA = 0, - /** - * @brief Word, dword or qword. - */ - DOS_Z, - /** - * @brief Word, dword or qword. - */ - DOS_V, - /** - * @brief Dword or qword. - */ - DOS_Y, - /** - * @brief Oword or yword. - */ - DOS_X, - /** - * @brief Dword or qword, depending on the disassembler mode. - */ - DOS_RDQ, - /* - * @brief Byte, regardless of operand-size attribute. - */ - DOS_B, - /* - * @brief Word, regardless of operand-size attribute. - */ - DOS_W, - /* - * @brief Doubleword, regardless of operand-size attribute. - */ - DOS_D, - /* - * @brief Quadword, regardless of operand-size attribute. - */ - DOS_Q, - /* - * @brief 10-byte far pointer. - */ - DOS_T, - /** - * @brief TODO: - */ - DOS_O, - /* - * @brief Double-quadword, regardless of operand-size attribute. - */ - DOS_DQ, - /* - * @brief Quad-quadword, regardless of operand-size attribute. - */ - DOS_QQ, - /** - * @brief B sized register or D sized memory operand. - */ - DOS_BD = (DOS_B << 4) | DOS_D, - /** - * @brief B sized register or V sized memory operand. - */ - DOS_BV = (DOS_B << 4) | DOS_V, - /** - * @brief W sized register or D sized memory operand. - */ - DOS_WD = (DOS_W << 4) | DOS_D, - /** - * @brief W sized register or V sized memory operand. - */ - DOS_WV = (DOS_W << 4) | DOS_V, - /** - * @brief W sized register or Y sized memory operand. - */ - DOS_WY = (DOS_W << 4) | DOS_Y, - /** - * @brief D sized register or Y sized memory operand. - */ - DOS_DY = (DOS_D << 4) | DOS_Y, - /** - * @brief W sized register or O sized memory operand. - */ - DOS_WO = (DOS_W << 4) | DOS_O, - /** - * @brief D sized register or O sized memory operand. - */ - DOS_DO = (DOS_D << 4) | DOS_O, - /** - * @brief Q sized register or O sized memory operand. - */ - DOS_QO = (DOS_Q << 4) | DOS_O, -} ZyDisDefinedOperandSize; - -/** - * @brief Values that represent optional flags in the instruction definition. - * Do not change the order or the values of this enum! - */ -typedef enum _ZyDisInstructionDefinitionFlags /* : uint16_t */ -{ - /** - * @brief The instruction accepts the rex.b prefix value. - */ - IDF_ACCEPTS_REXB = 0x0001, - /** - * @brief The instruction accepts the rex.x prefix value. - */ - IDF_ACCEPTS_REXX = 0x0002, - /** - * @brief The instruction accepts the rex.r prefix value. - */ - IDF_ACCEPTS_REXR = 0x0004, - /** - * @brief The instruction accepts the rex.w prefix value. - */ - IDF_ACCEPTS_REXW = 0x0008, - /** - * @brief The instruction accepts the address size override prefix (0x67). - */ - IDF_ACCEPTS_ADDRESS_SIZE_PREFIX = 0x0010, - /** - * @brief The instruction accepts the operand size override prefix (0x66). - */ - IDF_ACCEPTS_OPERAND_SIZE_PREFIX = 0x0020, - /** - * @brief The instruction accepts the segment override prefix. - */ - IDF_ACCEPTS_SEGMENT_PREFIX = 0x0040, - /** - * @brief The instruction accepts the REP prefix. - */ - IDF_ACCEPTS_REP_PREFIX = 0x0080, - /** - * @brief The instruction accepts the vex.l prefix value. - */ - IDF_ACCEPTS_VEXL = 0x0100, - /** - * @brief The instruction is invalid in 64 bit mode. - */ - IDF_INVALID_64 = 0x0200, - /** - * @brief The instructions operand size defaults to quadword in 64 bit mode. - */ - IDF_DEFAULT_64 = 0x0400, - /** - * @brief The first operand of the instruction is accessed in write mode. - */ - IDF_OPERAND1_WRITE = 0x0800, - /** - * @brief The first operand of the instruction is accessed in read-write mode. - */ - IDF_OPERAND1_READWRITE = 0x1000, - /** - * @brief The second operand of the instruction is accessed in write mode. - */ - IDF_OPERAND2_WRITE = 0x2000, - /** - * @brief The second operand of the instruction is accessed in read-write mode. - */ - IDF_OPERAND2_READWRITE = 0x4000, - - IDF_FORCE_WORD = 0x7FFF -} ZyDisInstructionDefinitionFlags; - -#pragma pack (push, 1) -/** - * @brief An operand definition. - */ -typedef struct _ZyDisOperandDefinition -{ - /** - * @brief The defined operand type. - * @see ZyDisDefinedOperandType - */ - uint8_t type; - /** - * @brief The defined operand size. - * @see ZyDisDefinedOperandType - */ - uint8_t size; -} ZyDisOperandDefinition; - -/** - * @brief An instruction definition. - */ -typedef struct _ZyDisInstructionDefinition -{ - /** - * @brief The instruction mnemonic. - * @see ZyDisInstructionMnemonic - */ - uint16_t mnemonic; - /** - * @brief The operand definitions for all four possible operands. - */ - ZyDisOperandDefinition operand[4]; - /** - * @brief Additional flags for the instruction definition. - */ - uint16_t flags; -} ZyDisInstructionDefinition; -#pragma pack (pop) - -#ifdef __cplusplus -} -#endif - -#endif // _VDE_ZyDisOPCODETABLEC_H_ \ No newline at end of file diff --git a/VerteronDisassemblerEngine/ZyDisOpcodeTableInternal.h b/VerteronDisassemblerEngine/ZyDisOpcodeTableInternal.h deleted file mode 100644 index 5b55354..0000000 --- a/VerteronDisassemblerEngine/ZyDisOpcodeTableInternal.h +++ /dev/null @@ -1,313 +0,0 @@ -/************************************************************************************************** - - Verteron Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : athre0z - - Last change : 19. March 2015 - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -**************************************************************************************************/ - -#ifndef _VDE_ZyDisOPCODETABLEINTERNAL_H_ -#define _VDE_ZyDisOPCODETABLEINTERNAL_H_ - -#include -#include "ZyDisOpcodeTable.h" - -/** - * @brief Contains all opcode tables. - * Indexed by the numeric value of the opcode. - */ -extern const ZyDisOpcodeTreeNode vxOptreeTable[][256]; - -/** - * @brief Contains all modrm_mod switch tables. - * Index values: - * 0 = [modrm_mod == !11] - * 1 = [modrm_mod == 11] - */ -extern const ZyDisOpcodeTreeNode vxOptreeModrmMod[][2]; - -/** - * @brief Contains all modrm_reg switch tables. - * Indexed by the numeric value of the modrm_reg field. - */ -extern const ZyDisOpcodeTreeNode vxOptreeModrmReg[][8]; - -/** - * @brief Contains all modrm_rm switch tables. - * Indexed by the numeric value of the modrm_rm field. - */ -extern const ZyDisOpcodeTreeNode vxOptreeModrmRm[][8]; - -/** - * @brief Contains all mandatory-prefix switch tables. - * Index values: - * 0 = none - * 1 = F2 - * 2 = F3 - * 3 = 66 - */ -extern const ZyDisOpcodeTreeNode vxOptreeMandatory[][4]; - -/** - * @brief Contains all x87 opcode tables. - * Indexed by the numeric value of the 6 lowest bits of the modrm byte (modrm_mod should - * always be 11). - */ -extern const ZyDisOpcodeTreeNode vxOptreeX87[][64]; - -/** - * @brief Contains all address-size switch tables. - * Index values: - * 0 = 16 - * 1 = 32 - * 2 = 64 - */ -extern const ZyDisOpcodeTreeNode vxOptreeAddressSize[][3]; - -/** - * @brief Contains all operand-size switch tables. - * Index values: - * 0 = 16 - * 1 = 32 - * 2 = 64 - */ -extern const ZyDisOpcodeTreeNode vxOptreeOperandSize[][3]; - -/** - * @brief Contains all cpu-mode switch tables. - * Index values: - * 0 = [!= 64] - * 1 = 64 - */ -extern const ZyDisOpcodeTreeNode vxOptreeMode[][2]; - -/** - * @brief Contains all vendor switch tables. - * Index values: - * 0 = AMD - * 1 = Intel - */ -extern const ZyDisOpcodeTreeNode vxOptreeVendor[][2]; - -/** - * @brief Contains all 3DNow! switch tables. - * Indexed by the numeric value of the 3DNow! opcode. - */ -extern const ZyDisOpcodeTreeNode vxOptree3dnow[][256]; - -/** - * @brief Contains all vex switch tables. - * Index values: - * 0 = none - * 1 = 0F - * 2 = 0F38 - * 3 = 0F3A - * 4 = 66 - * 5 = 66_0F - * 6 = 66_0F38 - * 7 = 66_0F3A - * 8 = F3 - * 9 = F3_0F - * A = F3_0F38 - * B = F3_0F3A - * C = F2 - * D = F2_0F - * E = F2_0F38 - * F = F2_0F3A - */ -extern const ZyDisOpcodeTreeNode vxOptreeVex[][16]; - -/** - * @brief Contains all vex_w switch tables. - * Indexed by the numeric value of the vex_w field. - */ -extern const ZyDisOpcodeTreeNode vxOptreeVexW[][2]; - -/** - * @brief Contains all vex_l switch tables. - * Indexed by the numeric value of the vex_l field. - */ -extern const ZyDisOpcodeTreeNode vxOptreeVexL[][2]; - -/** - * @brief Contains all instruction definitions. - */ -extern const ZyDisInstructionDefinition vxInstrDefinitions[]; - -/** - * @brief Contains all instruction mnemonic strings. - */ -extern const char* vxInstrMnemonicStrings[]; - -/** - * @brief Returns the type of the specified opcode tree node. - * @param node The node. - * @return The type of the specified opcode tree node. - */ -ZYDIS_INLINE ZyDisOpcodeTreeNodeType ZyDisGetOpcodeNodeType(ZyDisOpcodeTreeNode node) -{ - return (ZyDisOpcodeTreeNodeType)((node >> 12) & 0x0F); -} - -/** - * @brief Returns the value of the specified opcode tree node. - * @param node The node. - * @return The value of the specified opcode tree node. - */ -ZYDIS_INLINE uint16_t ZyDisGetOpcodeNodeValue(ZyDisOpcodeTreeNode node) -{ - return (node & 0x0FFF); -} - -/** - * @brief Returns the root node of the opcode tree. - * @return The root node of the opcode tree. - */ -ZYDIS_INLINE ZyDisOpcodeTreeNode ZyDisGetOpcodeTreeRoot() -{ - return 0x1000; -} - -/** - * @brief Returns a child node of @c parent specified by @c index. - * @param parent The parent node. - * @param index The index of the child node to retrieve. - * @return The specified child node. - */ -ZYDIS_INLINE ZyDisOpcodeTreeNode ZyDisGetOpcodeTreeChild(ZyDisOpcodeTreeNode parent, uint16_t index) -{ - ZyDisOpcodeTreeNodeType nodeType = ZyDisGetOpcodeNodeType(parent); - uint16_t tableIndex = ZyDisGetOpcodeNodeValue(parent); - switch (nodeType) - { - case OTNT_TABLE: - assert(index < 256); - return vxOptreeTable[tableIndex][index]; - case OTNT_MODRM_MOD: - assert(index < 2); - return vxOptreeModrmMod[tableIndex][index]; - case OTNT_MODRM_REG: - assert(index < 8); - return vxOptreeModrmReg[tableIndex][index]; - case OTNT_MODRM_RM: - assert(index < 8); - return vxOptreeModrmRm[tableIndex][index]; - case OTNT_MANDATORY: - assert(index < 4); - return vxOptreeMandatory[tableIndex][index]; - case OTNT_X87: - assert(index < 64); - return vxOptreeX87[tableIndex][index]; - case OTNT_ADDRESS_SIZE: - assert(index < 3); - return vxOptreeAddressSize[tableIndex][index]; - case OTNT_OPERAND_SIZE: - assert(index < 3); - return vxOptreeOperandSize[tableIndex][index]; - case OTNT_MODE: - assert(index < 2); - return vxOptreeMode[tableIndex][index]; - case OTNT_VENDOR: - assert(index < 3); - return vxOptreeVendor[tableIndex][index]; - case OTNT_AMD3DNOW: - assert(index < 256); - return vxOptree3dnow[tableIndex][index]; - case OTNT_VEX: - assert(index < 16); - return vxOptreeVex[tableIndex][index]; - case OTNT_VEXW: - assert(index < 2); - return vxOptreeVexW[tableIndex][index]; - case OTNT_VEXL: - assert(index < 2); - return vxOptreeVexL[tableIndex][index]; - default: - assert(0); - } - return 0xFFFF; -} - -/** - * @brief Returns the instruction definition that is linked to the given @c node. - * @param node The instruction definition node. - * @return Pointer to the instruction definition. - */ -ZYDIS_INLINE const ZyDisInstructionDefinition* ZyDisGetInstructionDefinition(ZyDisOpcodeTreeNode node) -{ - assert(ZyDisGetOpcodeNodeType(node) == OTNT_INSTRUCTION_DEFINITION); - return &vxInstrDefinitions[node & 0x0FFF]; -} - -/** - * @brief Returns the specified instruction mnemonic string. - * @param mnemonic The mnemonic. - * @return The instruction mnemonic string. - */ -ZYDIS_INLINE const char* ZyDisGetInstructionMnemonicString(ZyDisInstructionMnemonic mnemonic) -{ - return vxInstrMnemonicStrings[(uint16_t)mnemonic]; -} - -/** - * @brief Returns the numeric value for a simple operand size definition. - * @param operandSize The defined operand size. - * @return The the numeric value for the simple operand size definition. - */ -ZYDIS_INLINE uint16_t ZyDisGetSimpleOperandSize(ZyDisDefinedOperandSize operandSize) -{ - static const uint16_t operandSizes[8] = - { - 8, 16, 32, 64, 80, 12, 128, 256 - }; - - uint16_t index = (uint16_t)(operandSize - DOS_B); - assert(index < 8); - return operandSizes[index]; -} - -/** - * @brief Returns the memory-size part of a complex operand size definition. - * @param operandSize The defined operand size. - * @return The memory-size part of the operand size definition. - */ -ZYDIS_INLINE ZyDisDefinedOperandSize ZyDisGetComplexOperandMemSize(ZyDisDefinedOperandSize operandSize) -{ - return (ZyDisDefinedOperandSize)(operandSize & 0x0F); -} - -/** - * @brief Returns the register-size part of a complex operand size definition. - * @param operandSize The defined operand size. - * @return The register-size part of the operand size definition. - */ -ZYDIS_INLINE ZyDisDefinedOperandSize ZyDisGetComplexOperandRegSize(ZyDisDefinedOperandSize operandSize) -{ - return (ZyDisDefinedOperandSize)((operandSize >> 4) & 0x0F); -} - -#endif // _VDE_ZyDisOPCODETABLEINTERNAL_H_ \ No newline at end of file diff --git a/Bindings/Cpp/ZyDisDisassembler.hpp b/Zydis/Zydis.hpp similarity index 77% rename from Bindings/Cpp/ZyDisDisassembler.hpp rename to Zydis/Zydis.hpp index 705e21a..4c77299 100644 --- a/Bindings/Cpp/ZyDisDisassembler.hpp +++ b/Zydis/Zydis.hpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : - - Last change : 29. October 2014 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,11 +26,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ +***************************************************************************************************/ -#pragma once +#ifndef _ZYDIS_DISASSEMBLER_HPP_ +#define _ZYDIS_DISASSEMBLER_HPP_ -#include "ZyDisDisassemblerTypes.hpp" -#include "ZyDisInstructionDecoder.hpp" -#include "ZyDisInstructionFormatter.hpp" -#include "ZyDisDisassemblerUtils.hpp" +#include "ZydisInstructionDecoder.hpp" +#include "ZydisInstructionFormatter.hpp" +#include "ZydisSymbolResolver.hpp" +#include "ZydisUtils.hpp" + +#endif /*_ZYDIS_DISASSEMBLER_HPP_ */ \ No newline at end of file diff --git a/Bindings/Cpp/ZyDisInstructionDecoder.cpp b/Zydis/ZydisInstructionDecoder.cpp similarity index 55% rename from Bindings/Cpp/ZyDisInstructionDecoder.cpp rename to Zydis/ZydisInstructionDecoder.cpp index 6672c6c..0a1f34d 100644 --- a/Bindings/Cpp/ZyDisInstructionDecoder.cpp +++ b/Zydis/ZydisInstructionDecoder.cpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : - - Last change : 29. October 2014 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,17 +26,21 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ -#include "ZyDisInstructionDecoder.hpp" +***************************************************************************************************/ + +#include "ZydisInstructionDecoder.hpp" #include -namespace Verteron +namespace Zydis { -bool ZyDisInstructionDecoder::decodeRegisterOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, - RegisterClass registerClass, uint8_t registerId, ZyDisDefinedOperandSize operandSize) const +/* InstructionDecoder ====================================================================== */ + +bool InstructionDecoder::decodeRegisterOperand(InstructionInfo& info, + OperandInfo& operand, RegisterClass registerClass, uint8_t registerId, + DefinedOperandSize operandSize) const { - ZyDisRegister reg = ZyDisRegister::NONE; + Register reg = Register::NONE; uint16_t size = getEffectiveOperandSize(info, operandSize); switch (registerClass) { @@ -46,79 +48,84 @@ bool ZyDisInstructionDecoder::decodeRegisterOperand(ZyDisInstructionInfo &info, switch (size) { case 64: - reg = static_cast(static_cast(ZyDisRegister::RAX) + registerId); + reg = static_cast( + static_cast(Register::RAX) + registerId); break; case 32: - reg = static_cast(static_cast(ZyDisRegister::EAX) + registerId); + reg = static_cast( + static_cast(Register::EAX) + registerId); break; case 16: - reg = static_cast(static_cast(ZyDisRegister::AX) + registerId); + reg = static_cast( + static_cast(Register::AX) + registerId); break; case 8: // TODO: Only REX? Or VEX too? - if (m_disassemblerMode == ZyDisDisassemblerMode::M64BIT && (info.flags & IF_PREFIX_REX)) + if (m_disassemblerMode == DisassemblerMode::M64BIT&& (info.flags& IF_PREFIX_REX)) { if (registerId >= 4) { - reg = static_cast( - static_cast(ZyDisRegister::SPL) + (registerId - 4)); + reg = static_cast( + static_cast(Register::SPL) + (registerId - 4)); } else { - reg = static_cast( - static_cast(ZyDisRegister::AL) + registerId); + reg = static_cast( + static_cast(Register::AL) + registerId); } } else { - reg = static_cast(static_cast(ZyDisRegister::AL) + registerId); + reg = static_cast( + static_cast(Register::AL) + registerId); } break; case 0: // TODO: Error? - reg = ZyDisRegister::NONE; + reg = Register::NONE; break; default: assert(0); } break; case RegisterClass::MMX: - reg = - static_cast(static_cast(ZyDisRegister::MM0) + (registerId & 0x07)); + reg = static_cast( + static_cast(Register::MM0) + (registerId& 0x07)); break; case RegisterClass::CONTROL: - reg = static_cast(static_cast(ZyDisRegister::CR0) + registerId); + reg = static_cast(static_cast(Register::CR0) + registerId); break; case RegisterClass::DEBUG: - reg = static_cast(static_cast(ZyDisRegister::DR0) + registerId); + reg = static_cast(static_cast(Register::DR0) + registerId); break; case RegisterClass::SEGMENT: - if ((registerId & 7) > 5) + if ((registerId& 7) > 5) { info.flags |= IF_ERROR_OPERAND; return false; } - reg = static_cast(static_cast(ZyDisRegister::ES) + (registerId & 0x07)); + reg = static_cast( + static_cast(Register::ES) + (registerId& 0x07)); break; case RegisterClass::XMM: - reg = static_cast(registerId + static_cast( - ((size == 256) ? ZyDisRegister::YMM0 : ZyDisRegister::XMM0))); + reg = static_cast(registerId + static_cast( + ((size == 256) ? Register::YMM0 : Register::XMM0))); break; default: assert(0); } - operand.type = ZyDisOperandType::REGISTER; - operand.base = static_cast(reg); + operand.type = OperandType::REGISTER; + operand.base = static_cast(reg); operand.size = size; return true; } -bool ZyDisInstructionDecoder::decodeRegisterMemoryOperand(ZyDisInstructionInfo &info, - ZyDisOperandInfo &operand, RegisterClass registerClass, ZyDisDefinedOperandSize operandSize) +bool InstructionDecoder::decodeRegisterMemoryOperand(InstructionInfo& info, + OperandInfo& operand, RegisterClass registerClass, DefinedOperandSize operandSize) { if (!decodeModrm(info)) { return false; } - assert(info.flags & IF_MODRM); + assert(info.flags& IF_MODRM); // Decode register operand if (info.modrm_mod == 3) { @@ -127,24 +134,25 @@ bool ZyDisInstructionDecoder::decodeRegisterMemoryOperand(ZyDisInstructionInfo & } // Decode memory operand uint8_t offset = 0; - operand.type = ZyDisOperandType::MEMORY; + operand.type = OperandType::MEMORY; operand.size = getEffectiveOperandSize(info, operandSize); switch (info.address_mode) { case 16: { - static const ZyDisRegister bases[] = { - ZyDisRegister::BX, ZyDisRegister::BX, ZyDisRegister::BP, ZyDisRegister::BP, - ZyDisRegister::SI, ZyDisRegister::DI, ZyDisRegister::BP, ZyDisRegister::BX }; - static const ZyDisRegister indices[] = { - ZyDisRegister::SI, ZyDisRegister::DI, ZyDisRegister::SI, ZyDisRegister::DI, - ZyDisRegister::NONE, ZyDisRegister::NONE, ZyDisRegister::NONE, ZyDisRegister::NONE }; - operand.base = static_cast(bases[info.modrm_rm_ext & 0x07]); - operand.index = static_cast(indices[info.modrm_rm_ext & 0x07]); + static const Register bases[] = { + Register::BX, Register::BX, Register::BP, Register::BP, + Register::SI, Register::DI, Register::BP, Register::BX }; + static const Register indices[] = { + Register::SI, Register::DI, Register::SI, Register::DI, + Register::NONE, Register::NONE, Register::NONE, + Register::NONE }; + operand.base = static_cast(bases[info.modrm_rm_ext& 0x07]); + operand.index = static_cast(indices[info.modrm_rm_ext& 0x07]); operand.scale = 0; - if (info.modrm_mod == 0 && info.modrm_rm_ext == 6) { + if (info.modrm_mod == 0&& info.modrm_rm_ext == 6) { offset = 16; - operand.base = ZyDisRegister::NONE; + operand.base = Register::NONE; } else if (info.modrm_mod == 1) { offset = 8; } else if (info.modrm_mod == 2) { @@ -153,14 +161,14 @@ bool ZyDisInstructionDecoder::decodeRegisterMemoryOperand(ZyDisInstructionInfo & } break; case 32: - operand.base = - static_cast(static_cast(ZyDisRegister::EAX) + info.modrm_rm_ext); + operand.base = static_cast( + static_cast(Register::EAX) + info.modrm_rm_ext); switch (info.modrm_mod) { case 0: if (info.modrm_rm_ext == 5) { - operand.base = ZyDisRegister::NONE; + operand.base = Register::NONE; offset = 32; } break; @@ -173,29 +181,29 @@ bool ZyDisInstructionDecoder::decodeRegisterMemoryOperand(ZyDisInstructionInfo & default: assert(0); } - if ((info.modrm_rm_ext & 0x07) == 4) + if ((info.modrm_rm_ext& 0x07) == 4) { if (!decodeSIB(info)) { return false; } operand.base = - static_cast(static_cast(ZyDisRegister::EAX) + + static_cast(static_cast(Register::EAX) + info.sib_base_ext); operand.index = - static_cast(static_cast(ZyDisRegister::EAX) + + static_cast(static_cast(Register::EAX) + info.sib_index_ext); - operand.scale = (1 << info.sib_scale) & ~1; - if (operand.index == ZyDisRegister::ESP) + operand.scale = (1 << info.sib_scale)& ~1; + if (operand.index == Register::ESP) { - operand.index = ZyDisRegister::NONE; + operand.index = Register::NONE; operand.scale = 0; } - if (operand.base == ZyDisRegister::EBP) + if (operand.base == Register::EBP) { if (info.modrm_mod == 0) { - operand.base = ZyDisRegister::NONE; + operand.base = Register::NONE; } if (info.modrm_mod == 1) { @@ -207,20 +215,20 @@ bool ZyDisInstructionDecoder::decodeRegisterMemoryOperand(ZyDisInstructionInfo & } } else { - operand.index = ZyDisRegister::NONE; + operand.index = Register::NONE; operand.scale = 0; } break; case 64: - operand.base = - static_cast(static_cast(ZyDisRegister::RAX) + info.modrm_rm_ext); + operand.base = static_cast( + static_cast(Register::RAX) + info.modrm_rm_ext); switch (info.modrm_mod) { case 0: - if ((info.modrm_rm_ext & 0x07) == 5) + if ((info.modrm_rm_ext& 0x07) == 5) { info.flags |= IF_RELATIVE; - operand.base = ZyDisRegister::RIP; + operand.base = Register::RIP; offset = 32; } break; @@ -233,31 +241,31 @@ bool ZyDisInstructionDecoder::decodeRegisterMemoryOperand(ZyDisInstructionInfo & default: assert(0); } - if ((info.modrm_rm_ext & 0x07) == 4) + if ((info.modrm_rm_ext& 0x07) == 4) { if (!decodeSIB(info)) { return false; } operand.base = - static_cast(static_cast(ZyDisRegister::RAX) + + static_cast(static_cast(Register::RAX) + info.sib_base_ext); operand.index = - static_cast(static_cast(ZyDisRegister::RAX) + + static_cast(static_cast(Register::RAX) + info.sib_index_ext); - if (operand.index == ZyDisRegister::RSP) + if (operand.index == Register::RSP) { - operand.index = ZyDisRegister::NONE; + operand.index = Register::NONE; operand.scale = 0; } else { - operand.scale = (1 << info.sib_scale) & ~1; + operand.scale = (1 << info.sib_scale)& ~1; } - if ((operand.base == ZyDisRegister::RBP) || (operand.base == ZyDisRegister::R13)) + if ((operand.base == Register::RBP) || (operand.base == Register::R13)) { if (info.modrm_mod == 0) { - operand.base = ZyDisRegister::NONE; + operand.base = Register::NONE; } if (info.modrm_mod == 1) { @@ -269,7 +277,7 @@ bool ZyDisInstructionDecoder::decodeRegisterMemoryOperand(ZyDisInstructionInfo & } } else { - operand.index = ZyDisRegister::NONE; + operand.index = Register::NONE; operand.scale = 0; } break; @@ -287,10 +295,10 @@ bool ZyDisInstructionDecoder::decodeRegisterMemoryOperand(ZyDisInstructionInfo & return true; } -bool ZyDisInstructionDecoder::decodeImmediate(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, - ZyDisDefinedOperandSize operandSize) +bool InstructionDecoder::decodeImmediate(InstructionInfo& info, OperandInfo& operand, + DefinedOperandSize operandSize) { - operand.type = ZyDisOperandType::IMMEDIATE; + operand.type = OperandType::IMMEDIATE; operand.size = getEffectiveOperandSize(info, operandSize); switch (operand.size) { @@ -310,15 +318,15 @@ bool ZyDisInstructionDecoder::decodeImmediate(ZyDisInstructionInfo &info, ZyDisO // TODO: Maybe return false instead of assert assert(0); } - if (!operand.lval.uqword && (info.flags & IF_ERROR_MASK)) + if (!operand.lval.uqword&& (info.flags& IF_ERROR_MASK)) { return false; } return true; } -bool ZyDisInstructionDecoder::decodeDisplacement(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, - uint8_t size) +bool InstructionDecoder::decodeDisplacement(InstructionInfo& info, + OperandInfo& operand, uint8_t size) { switch (size) { @@ -342,26 +350,26 @@ bool ZyDisInstructionDecoder::decodeDisplacement(ZyDisInstructionInfo &info, ZyD // TODO: Maybe return false instead of assert assert(0); } - if (!operand.lval.uqword && (info.flags & IF_ERROR_MASK)) + if (!operand.lval.uqword&& (info.flags& IF_ERROR_MASK)) { return false; } return true; } -bool ZyDisInstructionDecoder::decodeModrm(ZyDisInstructionInfo &info) +bool InstructionDecoder::decodeModrm(InstructionInfo& info) { - if (!(info.flags & IF_MODRM)) + if (!(info.flags& IF_MODRM)) { info.modrm = inputNext(info); - if (!info.modrm && (info.flags & IF_ERROR_MASK)) + if (!info.modrm&& (info.flags& IF_ERROR_MASK)) { return false; } info.flags |= IF_MODRM; - info.modrm_mod = (info.modrm >> 6) & 0x03; - info.modrm_reg = (info.modrm >> 3) & 0x07; - info.modrm_rm = (info.modrm >> 0) & 0x07; + info.modrm_mod = (info.modrm >> 6)& 0x03; + info.modrm_reg = (info.modrm >> 3)& 0x07; + info.modrm_rm = (info.modrm >> 0)& 0x07; } // The @c decodeModrm method might get called multiple times during the opcode- and the // operand decoding, but the effective REX/VEX fields are not initialized before the end of @@ -372,21 +380,21 @@ bool ZyDisInstructionDecoder::decodeModrm(ZyDisInstructionInfo &info) return true; } -bool ZyDisInstructionDecoder::decodeSIB(ZyDisInstructionInfo &info) +bool InstructionDecoder::decodeSIB(InstructionInfo& info) { - assert(info.flags & IF_MODRM); - assert((info.modrm_rm & 0x7) == 4); - if (!(info.flags & IF_SIB)) + assert(info.flags& IF_MODRM); + assert((info.modrm_rm& 0x7) == 4); + if (!(info.flags& IF_SIB)) { info.sib = inputNext(info); - if (!info.sib && (info.flags & IF_ERROR_MASK)) + if (!info.sib&& (info.flags& IF_ERROR_MASK)) { return false; } info.flags |= IF_SIB; - info.sib_scale = (info.sib >> 6) & 0x03; - info.sib_index = (info.sib >> 3) & 0x07; - info.sib_base = (info.sib >> 0) & 0x07; + info.sib_scale = (info.sib >> 6)& 0x03; + info.sib_index = (info.sib >> 3)& 0x07; + info.sib_base = (info.sib >> 0)& 0x07; // The @c decodeSib method is only called during the operand decoding, so updating the // extended values at this point should be safe. info.sib_index_ext = (info.eff_rexvex_x << 3) | info.sib_index; @@ -395,47 +403,47 @@ bool ZyDisInstructionDecoder::decodeSIB(ZyDisInstructionInfo &info) return true; } -bool ZyDisInstructionDecoder::decodeVex(ZyDisInstructionInfo &info) +bool InstructionDecoder::decodeVex(InstructionInfo& info) { - if (!(info.flags & IF_PREFIX_VEX)) + if (!(info.flags& IF_PREFIX_VEX)) { info.vex_op = inputCurrent(); switch (info.vex_op) { case 0xC4: info.vex_b1 = inputNext(info); - if (!info.vex_b1 || (info.flags & IF_ERROR_MASK)) + if (!info.vex_b1 || (info.flags& IF_ERROR_MASK)) { return false; } info.vex_b2 = inputNext(info); - if (!info.vex_b2 || (info.flags & IF_ERROR_MASK)) + if (!info.vex_b2 || (info.flags& IF_ERROR_MASK)) { return false; } - info.vex_r = (info.vex_b1 >> 7) & 0x01; - info.vex_x = (info.vex_b1 >> 6) & 0x01; - info.vex_b = (info.vex_b1 >> 5) & 0x01; - info.vex_m_mmmm = (info.vex_b1 >> 0) & 0x1F; - info.vex_w = (info.vex_b2 >> 7) & 0x01; - info.vex_vvvv = (info.vex_b2 >> 3) & 0x0F; - info.vex_l = (info.vex_b2 >> 2) & 0x01; - info.vex_pp = (info.vex_b2 >> 0) & 0x03; + info.vex_r = (info.vex_b1 >> 7)& 0x01; + info.vex_x = (info.vex_b1 >> 6)& 0x01; + info.vex_b = (info.vex_b1 >> 5)& 0x01; + info.vex_m_mmmm = (info.vex_b1 >> 0)& 0x1F; + info.vex_w = (info.vex_b2 >> 7)& 0x01; + info.vex_vvvv = (info.vex_b2 >> 3)& 0x0F; + info.vex_l = (info.vex_b2 >> 2)& 0x01; + info.vex_pp = (info.vex_b2 >> 0)& 0x03; break; case 0xC5: info.vex_b1 = inputNext(info); - if (!info.vex_b1 || (info.flags & IF_ERROR_MASK)) + if (!info.vex_b1 || (info.flags& IF_ERROR_MASK)) { return false; } - info.vex_r = (info.vex_b1 >> 7) & 0x01; + info.vex_r = (info.vex_b1 >> 7)& 0x01; info.vex_x = 1; info.vex_b = 1; info.vex_m_mmmm = 1; info.vex_w = 0; - info.vex_vvvv = (info.vex_b1 >> 3) & 0x0F; - info.vex_l = (info.vex_b1 >> 2) & 0x01; - info.vex_pp = (info.vex_b1 >> 0) & 0x03; + info.vex_vvvv = (info.vex_b1 >> 3)& 0x0F; + info.vex_l = (info.vex_b1 >> 2)& 0x01; + info.vex_pp = (info.vex_b1 >> 0)& 0x03; break; default: assert(0); @@ -451,32 +459,32 @@ bool ZyDisInstructionDecoder::decodeVex(ZyDisInstructionInfo &info) return true; } -uint16_t ZyDisInstructionDecoder::getEffectiveOperandSize(const ZyDisInstructionInfo &info, - ZyDisDefinedOperandSize operandSize) const +uint16_t InstructionDecoder::getEffectiveOperandSize(const InstructionInfo& info, + DefinedOperandSize operandSize) const { switch (operandSize) { - case ZyDisDefinedOperandSize::NA: + case DefinedOperandSize::NA: return 0; - case ZyDisDefinedOperandSize::Z: + case DefinedOperandSize::Z: return (info.operand_mode == 16) ? 16 : 32; - case ZyDisDefinedOperandSize::V: + case DefinedOperandSize::V: return info.operand_mode; - case ZyDisDefinedOperandSize::Y: + case DefinedOperandSize::Y: return (info.operand_mode == 16) ? 32 : info.operand_mode; - case ZyDisDefinedOperandSize::X: + case DefinedOperandSize::X: assert(info.vex_op != 0); return (info.eff_vex_l) ? - getEffectiveOperandSize(info, ZyDisDefinedOperandSize::QQ) : - getEffectiveOperandSize(info, ZyDisDefinedOperandSize::DQ); - case ZyDisDefinedOperandSize::RDQ: - return (m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) ? 64 : 32; + getEffectiveOperandSize(info, DefinedOperandSize::QQ) : + getEffectiveOperandSize(info, DefinedOperandSize::DQ); + case DefinedOperandSize::RDQ: + return (m_disassemblerMode == DisassemblerMode::M64BIT) ? 64 : 32; default: - return Internal::VDEGetSimpleOperandSize(operandSize); + return Internal::GetSimpleOperandSize(operandSize); } } -bool ZyDisInstructionDecoder::decodeOperands(ZyDisInstructionInfo &info) +bool InstructionDecoder::decodeOperands(InstructionInfo& info) { assert(info.instrDefinition); // Always try to decode the first operand @@ -488,7 +496,7 @@ bool ZyDisInstructionDecoder::decodeOperands(ZyDisInstructionInfo &info) // Decode other operands on demand for (unsigned int i = 1; i < 4; ++i) { - if (info.operand[i - 1].type != ZyDisOperandType::NONE) + if (info.operand[i - 1].type != OperandType::NONE) { if (!decodeOperand(info, info.operand[i], info.instrDefinition->operand[i].type, info.instrDefinition->operand[i].size)) @@ -500,26 +508,26 @@ bool ZyDisInstructionDecoder::decodeOperands(ZyDisInstructionInfo &info) // Update operand access modes for (unsigned int i = 0; i < 4; ++i) { - if (info.operand[i].type != ZyDisOperandType::NONE) + if (info.operand[i].type != OperandType::NONE) { - info.operand[i].access_mode = ZyDisOperandAccessMode::READ; + info.operand[i].access_mode = OperandAccessMode::READ; if (i == 0) { - if (info.instrDefinition->flags & IDF_OPERAND1_WRITE) + if (info.instrDefinition->flags& IDF_OPERAND1_WRITE) { - info.operand[0].access_mode = ZyDisOperandAccessMode::WRITE; - } else if (info.instrDefinition->flags & IDF_OPERAND1_READWRITE) + info.operand[0].access_mode = OperandAccessMode::WRITE; + } else if (info.instrDefinition->flags& IDF_OPERAND1_READWRITE) { - info.operand[0].access_mode = ZyDisOperandAccessMode::READWRITE; + info.operand[0].access_mode = OperandAccessMode::READWRITE; } } else if (i == 1) { - if (info.instrDefinition->flags & IDF_OPERAND2_WRITE) + if (info.instrDefinition->flags& IDF_OPERAND2_WRITE) { - info.operand[1].access_mode = ZyDisOperandAccessMode::WRITE; - } else if (info.instrDefinition->flags & IDF_OPERAND2_READWRITE) + info.operand[1].access_mode = OperandAccessMode::WRITE; + } else if (info.instrDefinition->flags& IDF_OPERAND2_READWRITE) { - info.operand[1].access_mode = ZyDisOperandAccessMode::READWRITE; + info.operand[1].access_mode = OperandAccessMode::READWRITE; } } } @@ -527,17 +535,17 @@ bool ZyDisInstructionDecoder::decodeOperands(ZyDisInstructionInfo &info) return true; } -bool ZyDisInstructionDecoder::decodeOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, - ZyDisDefinedOperandType operandType, ZyDisDefinedOperandSize operandSize) +bool InstructionDecoder::decodeOperand(InstructionInfo& info, OperandInfo& operand, + DefinedOperandType operandType, DefinedOperandSize operandSize) { using namespace Internal; - operand.type = ZyDisOperandType::NONE; + operand.type = OperandType::NONE; switch (operandType) { - case ZyDisDefinedOperandType::NONE: + case DefinedOperandType::NONE: break; - case ZyDisDefinedOperandType::A: - operand.type = ZyDisOperandType::POINTER; + case DefinedOperandType::A: + operand.type = OperandType::POINTER; if (info.operand_mode == 16) { operand.size = 32; @@ -548,109 +556,111 @@ bool ZyDisInstructionDecoder::decodeOperand(ZyDisInstructionInfo &info, ZyDisOpe operand.lval.ptr.off = inputNext(info); operand.lval.ptr.seg = inputNext(info); } - if ((!operand.lval.ptr.off || !operand.lval.ptr.seg) && (info.flags & IF_ERROR_MASK)) + if ((!operand.lval.ptr.off || !operand.lval.ptr.seg)&& (info.flags& IF_ERROR_MASK)) { return false; } break; - case ZyDisDefinedOperandType::C: + case DefinedOperandType::C: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::CONTROL, info.modrm_reg_ext, operandSize); - case ZyDisDefinedOperandType::D: + case DefinedOperandType::D: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::DEBUG, info.modrm_reg_ext, operandSize); - case ZyDisDefinedOperandType::F: + case DefinedOperandType::F: // TODO: FAR flag - case ZyDisDefinedOperandType::M: + case DefinedOperandType::M: // ModR/M byte may refer only to a register if (info.modrm_mod == 3) { info.flags |= IF_ERROR_OPERAND; return false; } - case ZyDisDefinedOperandType::E: + case DefinedOperandType::E: return decodeRegisterMemoryOperand(info, operand, RegisterClass::GENERAL_PURPOSE, operandSize); - case ZyDisDefinedOperandType::G: + case DefinedOperandType::G: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, info.modrm_reg_ext, operandSize); - case ZyDisDefinedOperandType::H: + case DefinedOperandType::H: assert(info.vex_op != 0); - return decodeRegisterOperand(info, operand, RegisterClass::XMM, (0xF & ~info.vex_vvvv), + return decodeRegisterOperand(info, operand, RegisterClass::XMM, (0xF& ~info.vex_vvvv), operandSize); - case ZyDisDefinedOperandType::sI: + case DefinedOperandType::sI: operand.signed_lval = true; - case ZyDisDefinedOperandType::I: + case DefinedOperandType::I: return decodeImmediate(info, operand, operandSize); - case ZyDisDefinedOperandType::I1: - operand.type = ZyDisOperandType::CONSTANT; + case DefinedOperandType::I1: + operand.type = OperandType::CONSTANT; operand.lval.udword = 1; break; - case ZyDisDefinedOperandType::J: + case DefinedOperandType::J: if (!decodeImmediate(info, operand, operandSize)) { return false; } - operand.type = ZyDisOperandType::REL_IMMEDIATE; + operand.type = OperandType::REL_IMMEDIATE; operand.signed_lval = true; info.flags |= IF_RELATIVE; break; - case ZyDisDefinedOperandType::L: + case DefinedOperandType::L: { assert(info.vex_op != 0); uint8_t imm = inputNext(info); - if (!imm && (info.flags & IF_ERROR_MASK)) + if (!imm&& (info.flags& IF_ERROR_MASK)) { return false; } - uint8_t mask = (m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) ? 0xF : 0x7; - return decodeRegisterOperand(info, operand, RegisterClass::XMM, mask & (imm >> 4), + uint8_t mask = (m_disassemblerMode == DisassemblerMode::M64BIT) ? 0xF : 0x7; + return decodeRegisterOperand(info, operand, RegisterClass::XMM, mask& (imm >> 4), operandSize); } - case ZyDisDefinedOperandType::MR: + case DefinedOperandType::MR: return decodeRegisterMemoryOperand(info, operand, RegisterClass::GENERAL_PURPOSE, info.modrm_mod == 3 ? - VDEGetComplexOperandRegSize(operandSize) : VDEGetComplexOperandMemSize(operandSize)); - case ZyDisDefinedOperandType::MU: + GetComplexOperandRegSize(operandSize) : + GetComplexOperandMemSize(operandSize)); + case DefinedOperandType::MU: return decodeRegisterMemoryOperand(info, operand, RegisterClass::XMM, info.modrm_mod == 3 ? - VDEGetComplexOperandRegSize(operandSize) : VDEGetComplexOperandMemSize(operandSize)); - case ZyDisDefinedOperandType::N: + GetComplexOperandRegSize(operandSize) : + GetComplexOperandMemSize(operandSize)); + case DefinedOperandType::N: // ModR/M byte may refer only to memory if (info.modrm_mod != 3) { info.flags |= IF_ERROR_OPERAND; return false; } - case ZyDisDefinedOperandType::Q: + case DefinedOperandType::Q: return decodeRegisterMemoryOperand(info, operand, RegisterClass::MMX, operandSize); - case ZyDisDefinedOperandType::O: - operand.type = ZyDisOperandType::MEMORY; - operand.base = ZyDisRegister::NONE; - operand.index = ZyDisRegister::NONE; + case DefinedOperandType::O: + operand.type = OperandType::MEMORY; + operand.base = Register::NONE; + operand.index = Register::NONE; operand.scale = 0; operand.size = getEffectiveOperandSize(info, operandSize); return decodeDisplacement(info, operand, info.address_mode); - case ZyDisDefinedOperandType::P: + case DefinedOperandType::P: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::MMX, info.modrm_reg_ext, operandSize); - case ZyDisDefinedOperandType::R: + case DefinedOperandType::R: // ModR/M byte may refer only to memory if (info.modrm_mod != 3) { @@ -659,91 +669,91 @@ bool ZyDisInstructionDecoder::decodeOperand(ZyDisInstructionInfo &info, ZyDisOpe } return decodeRegisterMemoryOperand(info, operand, RegisterClass::GENERAL_PURPOSE, operandSize); - case ZyDisDefinedOperandType::S: + case DefinedOperandType::S: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::SEGMENT, info.modrm_reg_ext, operandSize); - case ZyDisDefinedOperandType::U: + case DefinedOperandType::U: // ModR/M byte may refer only to memory if (info.modrm_mod != 3) { info.flags |= IF_ERROR_OPERAND; return false; } - case ZyDisDefinedOperandType::W: + case DefinedOperandType::W: return decodeRegisterMemoryOperand(info, operand, RegisterClass::XMM, operandSize); - case ZyDisDefinedOperandType::V: + case DefinedOperandType::V: if (!decodeModrm(info)) { return false; } return decodeRegisterOperand(info, operand, RegisterClass::XMM, info.modrm_reg_ext, operandSize); - case ZyDisDefinedOperandType::R0: - case ZyDisDefinedOperandType::R1: - case ZyDisDefinedOperandType::R2: - case ZyDisDefinedOperandType::R3: - case ZyDisDefinedOperandType::R4: - case ZyDisDefinedOperandType::R5: - case ZyDisDefinedOperandType::R6: - case ZyDisDefinedOperandType::R7: + case DefinedOperandType::R0: + case DefinedOperandType::R1: + case DefinedOperandType::R2: + case DefinedOperandType::R3: + case DefinedOperandType::R4: + case DefinedOperandType::R5: + case DefinedOperandType::R6: + case DefinedOperandType::R7: return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, ((info.eff_rexvex_b << 3) | (static_cast(operandType) - - static_cast(ZyDisDefinedOperandType::R0))), operandSize); - case ZyDisDefinedOperandType::AL: - case ZyDisDefinedOperandType::AX: - case ZyDisDefinedOperandType::EAX: - case ZyDisDefinedOperandType::RAX: + static_cast(DefinedOperandType::R0))), operandSize); + case DefinedOperandType::AL: + case DefinedOperandType::AX: + case DefinedOperandType::EAX: + case DefinedOperandType::RAX: return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, 0, operandSize); - case ZyDisDefinedOperandType::CL: - case ZyDisDefinedOperandType::CX: - case ZyDisDefinedOperandType::ECX: - case ZyDisDefinedOperandType::RCX: + case DefinedOperandType::CL: + case DefinedOperandType::CX: + case DefinedOperandType::ECX: + case DefinedOperandType::RCX: return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, 1, operandSize); - case ZyDisDefinedOperandType::DL: - case ZyDisDefinedOperandType::DX: - case ZyDisDefinedOperandType::EDX: - case ZyDisDefinedOperandType::RDX: + case DefinedOperandType::DL: + case DefinedOperandType::DX: + case DefinedOperandType::EDX: + case DefinedOperandType::RDX: return decodeRegisterOperand(info, operand, RegisterClass::GENERAL_PURPOSE, 2, operandSize); - case ZyDisDefinedOperandType::ES: - case ZyDisDefinedOperandType::CS: - case ZyDisDefinedOperandType::SS: - case ZyDisDefinedOperandType::DS: - case ZyDisDefinedOperandType::FS: - case ZyDisDefinedOperandType::GS: - if (m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) + case DefinedOperandType::ES: + case DefinedOperandType::CS: + case DefinedOperandType::SS: + case DefinedOperandType::DS: + case DefinedOperandType::FS: + case DefinedOperandType::GS: + if (m_disassemblerMode == DisassemblerMode::M64BIT) { - if ((operandType != ZyDisDefinedOperandType::FS) && - (operandType != ZyDisDefinedOperandType::GS)) + if ((operandType != DefinedOperandType::FS)&& + (operandType != DefinedOperandType::GS)) { info.flags |= IF_ERROR_OPERAND; return false; } } - operand.type = ZyDisOperandType::REGISTER; - operand.base = static_cast((static_cast(operandType) - - static_cast(ZyDisDefinedOperandType::ES)) + - static_cast(ZyDisRegister::ES)); + operand.type = OperandType::REGISTER; + operand.base = static_cast((static_cast(operandType) - + static_cast(DefinedOperandType::ES)) + + static_cast(Register::ES)); operand.size = 16; break; - case ZyDisDefinedOperandType::ST0: - case ZyDisDefinedOperandType::ST1: - case ZyDisDefinedOperandType::ST2: - case ZyDisDefinedOperandType::ST3: - case ZyDisDefinedOperandType::ST4: - case ZyDisDefinedOperandType::ST5: - case ZyDisDefinedOperandType::ST6: - case ZyDisDefinedOperandType::ST7: - operand.type = ZyDisOperandType::REGISTER; - operand.base = static_cast((static_cast(operandType) - - static_cast(ZyDisDefinedOperandType::ST0)) + - static_cast(ZyDisRegister::ST0)); + case DefinedOperandType::ST0: + case DefinedOperandType::ST1: + case DefinedOperandType::ST2: + case DefinedOperandType::ST3: + case DefinedOperandType::ST4: + case DefinedOperandType::ST5: + case DefinedOperandType::ST6: + case DefinedOperandType::ST7: + operand.type = OperandType::REGISTER; + operand.base = static_cast((static_cast(operandType) - + static_cast(DefinedOperandType::ST0)) + + static_cast(Register::ST0)); operand.size = 80; break; default: @@ -752,64 +762,64 @@ bool ZyDisInstructionDecoder::decodeOperand(ZyDisInstructionInfo &info, ZyDisOpe return true; } -void ZyDisInstructionDecoder::resolveOperandAndAddressMode(ZyDisInstructionInfo &info) const +void InstructionDecoder::resolveOperandAndAddressMode(InstructionInfo& info) const { assert(info.instrDefinition); switch (m_disassemblerMode) { - case ZyDisDisassemblerMode::M16BIT: - info.operand_mode = (info.flags & IF_PREFIX_OPERAND_SIZE) ? 32 : 16; - info.address_mode = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 32 : 16; + case DisassemblerMode::M16BIT: + info.operand_mode = (info.flags& IF_PREFIX_OPERAND_SIZE) ? 32 : 16; + info.address_mode = (info.flags& IF_PREFIX_ADDRESS_SIZE) ? 32 : 16; break; - case ZyDisDisassemblerMode::M32BIT: - info.operand_mode = (info.flags & IF_PREFIX_OPERAND_SIZE) ? 16 : 32; - info.address_mode = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 16 : 32; + case DisassemblerMode::M32BIT: + info.operand_mode = (info.flags& IF_PREFIX_OPERAND_SIZE) ? 16 : 32; + info.address_mode = (info.flags& IF_PREFIX_ADDRESS_SIZE) ? 16 : 32; break; - case ZyDisDisassemblerMode::M64BIT: + case DisassemblerMode::M64BIT: if (info.eff_rexvex_w) { info.operand_mode = 64; - } else if ((info.flags & IF_PREFIX_OPERAND_SIZE)) + } else if ((info.flags& IF_PREFIX_OPERAND_SIZE)) { info.operand_mode = 16; } else { - info.operand_mode = (info.instrDefinition->flags & IDF_DEFAULT_64) ? 64 : 32; + info.operand_mode = (info.instrDefinition->flags& IDF_DEFAULT_64) ? 64 : 32; } - info.address_mode = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 32 : 64; + info.address_mode = (info.flags& IF_PREFIX_ADDRESS_SIZE) ? 32 : 64; break; default: assert(0); } } -void ZyDisInstructionDecoder::calculateEffectiveRexVexValues(ZyDisInstructionInfo &info) const +void InstructionDecoder::calculateEffectiveRexVexValues(InstructionInfo& info) const { assert(info.instrDefinition); uint8_t rex = info.rex; - if (info.flags & IF_PREFIX_VEX) + if (info.flags& IF_PREFIX_VEX) { switch (info.vex_op) { case 0xC4: - rex = ((~(info.vex_b1 >> 5) & 0x07) | ((info.vex_b2 >> 4) & 0x08)); + rex = ((~(info.vex_b1 >> 5)& 0x07) | ((info.vex_b2 >> 4)& 0x08)); break; case 0xC5: - rex = (~(info.vex_b1 >> 5)) & 4; + rex = (~(info.vex_b1 >> 5))& 4; break; default: assert(0); } } - rex &= (info.instrDefinition->flags & 0x000F); - info.eff_rexvex_w = (rex >> 3) & 0x01; - info.eff_rexvex_r = (rex >> 2) & 0x01; - info.eff_rexvex_x = (rex >> 1) & 0x01; - info.eff_rexvex_b = (rex >> 0) & 0x01; - info.eff_vex_l = info.vex_l && (info.instrDefinition->flags & IDF_ACCEPTS_VEXL); + rex &= (info.instrDefinition->flags& 0x000F); + info.eff_rexvex_w = (rex >> 3)& 0x01; + info.eff_rexvex_r = (rex >> 2)& 0x01; + info.eff_rexvex_x = (rex >> 1)& 0x01; + info.eff_rexvex_b = (rex >> 0)& 0x01; + info.eff_vex_l = info.vex_l&& (info.instrDefinition->flags& IDF_ACCEPTS_VEXL); } -bool ZyDisInstructionDecoder::decodePrefixes(ZyDisInstructionInfo &info) +bool InstructionDecoder::decodePrefixes(InstructionInfo& info) { bool done = false; do @@ -831,27 +841,27 @@ bool ZyDisInstructionDecoder::decodePrefixes(ZyDisInstructionInfo &info) break; case 0x2E: info.flags |= IF_PREFIX_SEGMENT; - info.segment = ZyDisRegister::CS; + info.segment = Register::CS; break; case 0x36: info.flags |= IF_PREFIX_SEGMENT; - info.segment = ZyDisRegister::SS; + info.segment = Register::SS; break; case 0x3E: info.flags |= IF_PREFIX_SEGMENT; - info.segment = ZyDisRegister::DS; + info.segment = Register::DS; break; case 0x26: info.flags |= IF_PREFIX_SEGMENT; - info.segment = ZyDisRegister::ES; + info.segment = Register::ES; break; case 0x64: info.flags |= IF_PREFIX_SEGMENT; - info.segment = ZyDisRegister::FS; + info.segment = Register::FS; break; case 0x65: info.flags |= IF_PREFIX_SEGMENT; - info.segment = ZyDisRegister::GS; + info.segment = Register::GS; break; case 0x66: info.flags |= IF_PREFIX_OPERAND_SIZE; @@ -860,8 +870,8 @@ bool ZyDisInstructionDecoder::decodePrefixes(ZyDisInstructionInfo &info) info.flags |= IF_PREFIX_ADDRESS_SIZE; break; default: - if ((m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) && - (inputCurrent() & 0xF0) == 0x40) + if ((m_disassemblerMode == DisassemblerMode::M64BIT)&& + (inputCurrent()& 0xF0) == 0x40) { info.flags |= IF_PREFIX_REX; info.rex = inputCurrent(); @@ -874,7 +884,7 @@ bool ZyDisInstructionDecoder::decodePrefixes(ZyDisInstructionInfo &info) // Increase the input offset, if a prefix was found if (!done) { - if (!inputNext(info) && (info.flags & IF_ERROR_MASK)) + if (!inputNext(info)&& (info.flags& IF_ERROR_MASK)) { return false; } @@ -882,21 +892,21 @@ bool ZyDisInstructionDecoder::decodePrefixes(ZyDisInstructionInfo &info) } while (!done); // TODO: Check for multiple prefixes of the same group // Parse REX Prefix - if (info.flags & IF_PREFIX_REX) + if (info.flags& IF_PREFIX_REX) { - info.rex_w = (info.rex >> 3) & 0x01; - info.rex_r = (info.rex >> 2) & 0x01; - info.rex_x = (info.rex >> 1) & 0x01; - info.rex_b = (info.rex >> 0) & 0x01; + info.rex_w = (info.rex >> 3)& 0x01; + info.rex_r = (info.rex >> 2)& 0x01; + info.rex_x = (info.rex >> 1)& 0x01; + info.rex_b = (info.rex >> 0)& 0x01; } return true; } -bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) +bool InstructionDecoder::decodeOpcode(InstructionInfo& info) { using namespace Internal; // Read first opcode byte - if (!inputNext(info) && (info.flags & IF_ERROR_MASK)) + if (!inputNext(info)&& (info.flags& IF_ERROR_MASK)) { return false; } @@ -904,27 +914,28 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) info.opcode[0] = inputCurrent(); info.opcode_length = 1; // Iterate through opcode tree - ZyDisOpcodeTreeNode node = VDEGetOpcodeTreeChild(VDEGetOpcodeTreeRoot(), inputCurrent()); - ZyDisOpcodeTreeNodeType nodeType; + OpcodeTreeNode node = GetOpcodeTreeChild(GetOpcodeTreeRoot(), inputCurrent()); + OpcodeTreeNodeType nodeType; do { uint16_t index = 0; - nodeType = VDEGetOpcodeNodeType(node); + nodeType = GetOpcodeNodeType(node); switch (nodeType) { - case ZyDisOpcodeTreeNodeType::INSTRUCTION_DEFINITION: + case OpcodeTreeNodeType::INSTRUCTION_DEFINITION: { // Check for invalid instruction - if (VDEGetOpcodeNodeValue(node) == 0) + if (GetOpcodeNodeValue(node) == 0) { info.flags |= IF_ERROR_INVALID; return false; } // Get instruction definition - const ZyDisInstructionDefinition *instrDefinition = VDEGetInstructionDefinition(node); + const InstructionDefinition *instrDefinition = + GetInstructionDefinition(node); // Check for invalid 64 bit instruction - if ((m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) && - (instrDefinition->flags & IDF_INVALID_64)) + if ((m_disassemblerMode == DisassemblerMode::M64BIT)&& + (instrDefinition->flags& IDF_INVALID_64)) { info.flags |= IF_ERROR_INVALID_64; return false; @@ -943,20 +954,20 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) } } return true; - case ZyDisOpcodeTreeNodeType::TABLE: + case OpcodeTreeNodeType::TABLE: // Read next opcode byte - if (!inputNext(info) && (info.flags & IF_ERROR_MASK)) + if (!inputNext(info)&& (info.flags& IF_ERROR_MASK)) { return false; } // Update instruction info - assert((info.opcode_length > 0) && (info.opcode_length < 3)); + assert((info.opcode_length > 0)&& (info.opcode_length < 3)); info.opcode[info.opcode_length] = inputCurrent(); info.opcode_length++; // Set child node index for next iteration index = inputCurrent(); break; - case ZyDisOpcodeTreeNodeType::MODRM_MOD: + case OpcodeTreeNodeType::MODRM_MOD: // Decode modrm byte if (!decodeModrm(info)) { @@ -964,7 +975,7 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) } index = (info.modrm_mod == 0x3) ? 1 : 0; break; - case ZyDisOpcodeTreeNodeType::MODRM_REG: + case OpcodeTreeNodeType::MODRM_REG: // Decode modrm byte if (!decodeModrm(info)) { @@ -972,7 +983,7 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) } index = info.modrm_reg; break; - case ZyDisOpcodeTreeNodeType::MODRM_RM: + case OpcodeTreeNodeType::MODRM_RM: // Decode modrm byte if (!decodeModrm(info)) { @@ -980,23 +991,23 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) } index = info.modrm_rm; break; - case ZyDisOpcodeTreeNodeType::MANDATORY: + case OpcodeTreeNodeType::MANDATORY: // Check if there are any prefixes present - if (info.flags & IF_PREFIX_REP) + if (info.flags& IF_PREFIX_REP) { index = 1; // F2 - } else if (info.flags & IF_PREFIX_REPNE) + } else if (info.flags& IF_PREFIX_REPNE) { index = 2; // F3 - } else if (info.flags & IF_PREFIX_OPERAND_SIZE) + } else if (info.flags& IF_PREFIX_OPERAND_SIZE) { index = 3; // 66 } - if (VDEGetOpcodeTreeChild(node, index) == 0) + if (GetOpcodeTreeChild(node, index) == 0) { index = 0; } - if (index && (VDEGetOpcodeTreeChild(node, index) != 0)) + if (index&& (GetOpcodeTreeChild(node, index) != 0)) { // Remove REP and REPNE prefix info.flags &= ~IF_PREFIX_REP; @@ -1009,7 +1020,7 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) } } break; - case ZyDisOpcodeTreeNodeType::X87: + case OpcodeTreeNodeType::X87: // Decode modrm byte if (!decodeModrm(info)) { @@ -1017,64 +1028,64 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) } index = info.modrm - 0xC0; break; - case ZyDisOpcodeTreeNodeType::ADDRESS_SIZE: + case OpcodeTreeNodeType::ADDRESS_SIZE: switch (m_disassemblerMode) { - case ZyDisDisassemblerMode::M16BIT: - index = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 1 : 0; + case DisassemblerMode::M16BIT: + index = (info.flags& IF_PREFIX_ADDRESS_SIZE) ? 1 : 0; break; - case ZyDisDisassemblerMode::M32BIT: - index = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 0 : 1; + case DisassemblerMode::M32BIT: + index = (info.flags& IF_PREFIX_ADDRESS_SIZE) ? 0 : 1; break; - case ZyDisDisassemblerMode::M64BIT: - index = (info.flags & IF_PREFIX_ADDRESS_SIZE) ? 1 : 2; + case DisassemblerMode::M64BIT: + index = (info.flags& IF_PREFIX_ADDRESS_SIZE) ? 1 : 2; break; default: assert(0); } break; - case ZyDisOpcodeTreeNodeType::OPERAND_SIZE: + case OpcodeTreeNodeType::OPERAND_SIZE: switch (m_disassemblerMode) { - case ZyDisDisassemblerMode::M16BIT: - index = (info.flags & IF_PREFIX_OPERAND_SIZE) ? 1 : 0; + case DisassemblerMode::M16BIT: + index = (info.flags& IF_PREFIX_OPERAND_SIZE) ? 1 : 0; break; - case ZyDisDisassemblerMode::M32BIT: - index = (info.flags & IF_PREFIX_OPERAND_SIZE) ? 0 : 1; + case DisassemblerMode::M32BIT: + index = (info.flags& IF_PREFIX_OPERAND_SIZE) ? 0 : 1; break; - case ZyDisDisassemblerMode::M64BIT: - index = (info.rex_w) ? 2 : ((info.flags & IF_PREFIX_OPERAND_SIZE) ? 0 : 1); + case DisassemblerMode::M64BIT: + index = (info.rex_w) ? 2 : ((info.flags& IF_PREFIX_OPERAND_SIZE) ? 0 : 1); break; default: assert(0); } break; - case ZyDisOpcodeTreeNodeType::MODE: - index = (m_disassemblerMode != ZyDisDisassemblerMode::M64BIT) ? 0 : 1; + case OpcodeTreeNodeType::MODE: + index = (m_disassemblerMode != DisassemblerMode::M64BIT) ? 0 : 1; break; - case ZyDisOpcodeTreeNodeType::VENDOR: + case OpcodeTreeNodeType::VENDOR: switch (m_preferredVendor) { - case ZyDisInstructionSetVendor::ANY: - index = (VDEGetOpcodeTreeChild(node, 0) != 0) ? 0 : 1; + case InstructionSetVendor::ANY: + index = (GetOpcodeTreeChild(node, 0) != 0) ? 0 : 1; break; - case ZyDisInstructionSetVendor::INTEL: + case InstructionSetVendor::INTEL: index = 1; break; - case ZyDisInstructionSetVendor::AMD: + case InstructionSetVendor::AMD: index = 0; break; default: assert(0); } break; - case ZyDisOpcodeTreeNodeType::AMD3DNOW: + case OpcodeTreeNodeType::AMD3DNOW: { // As all 3dnow instructions got the same operands and flag definitions, we just // decode a random instruction and determine the specific opcode later. - assert(VDEGetOpcodeTreeChild(node, 0x0C) != 0); - const ZyDisInstructionDefinition *instrDefinition = - VDEGetInstructionDefinition(VDEGetOpcodeTreeChild(node, 0x0C)); + assert(GetOpcodeTreeChild(node, 0x0C) != 0); + const InstructionDefinition *instrDefinition = + GetInstructionDefinition(GetOpcodeTreeChild(node, 0x0C)); // Update instruction info info.instrDefinition = instrDefinition; info.mnemonic = instrDefinition->mnemonic; @@ -1089,15 +1100,15 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) } // Read the actual 3dnow opcode info.opcode[2] = inputNext(info); - if (!info.opcode[2] && (info.flags & IF_ERROR_MASK)) + if (!info.opcode[2]&& (info.flags& IF_ERROR_MASK)) { return false; } // Update instruction info instrDefinition = - VDEGetInstructionDefinition(VDEGetOpcodeTreeChild(node, info.opcode[2])); + GetInstructionDefinition(GetOpcodeTreeChild(node, info.opcode[2])); if (!instrDefinition || - (instrDefinition->mnemonic == ZyDisInstructionMnemonic::INVALID)) + (instrDefinition->mnemonic == InstructionMnemonic::INVALID)) { info.flags |= IF_ERROR_INVALID; return false; @@ -1107,37 +1118,37 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) // Update operand access modes for (unsigned int i = 0; i < 4; ++i) { - if (info.operand[i].type != ZyDisOperandType::NONE) + if (info.operand[i].type != OperandType::NONE) { - info.operand[i - 1].access_mode = ZyDisOperandAccessMode::READ; + info.operand[i - 1].access_mode = OperandAccessMode::READ; } } - if (info.operand[0].type != ZyDisOperandType::NONE) + if (info.operand[0].type != OperandType::NONE) { - if (info.instrDefinition->flags & IDF_OPERAND1_WRITE) + if (info.instrDefinition->flags& IDF_OPERAND1_WRITE) { - info.operand[0].access_mode = ZyDisOperandAccessMode::WRITE; - } else if (info.instrDefinition->flags & IDF_OPERAND1_READWRITE) + info.operand[0].access_mode = OperandAccessMode::WRITE; + } else if (info.instrDefinition->flags& IDF_OPERAND1_READWRITE) { - info.operand[0].access_mode = ZyDisOperandAccessMode::READWRITE; + info.operand[0].access_mode = OperandAccessMode::READWRITE; } } - if (info.operand[1].type != ZyDisOperandType::NONE) + if (info.operand[1].type != OperandType::NONE) { - if (info.instrDefinition->flags & IDF_OPERAND2_WRITE) + if (info.instrDefinition->flags& IDF_OPERAND2_WRITE) { - info.operand[1].access_mode = ZyDisOperandAccessMode::WRITE; - } else if (info.instrDefinition->flags & IDF_OPERAND2_READWRITE) + info.operand[1].access_mode = OperandAccessMode::WRITE; + } else if (info.instrDefinition->flags& IDF_OPERAND2_READWRITE) { - info.operand[1].access_mode = ZyDisOperandAccessMode::READWRITE; + info.operand[1].access_mode = OperandAccessMode::READWRITE; } } // Terminate loop return true; } - case ZyDisOpcodeTreeNodeType::VEX: - if ((m_disassemblerMode == ZyDisDisassemblerMode::M64BIT) || - (((inputCurrent() >> 6) & 0x03) == 0x03)) + case OpcodeTreeNodeType::VEX: + if ((m_disassemblerMode == DisassemblerMode::M64BIT) || + (((inputCurrent() >> 6)& 0x03) == 0x03)) { // Decode vex prefix if (!decodeVex(info)) @@ -1169,35 +1180,35 @@ bool ZyDisInstructionDecoder::decodeOpcode(ZyDisInstructionInfo &info) index = 0; } break; - case ZyDisOpcodeTreeNodeType::VEXW: - assert(info.flags & IF_PREFIX_VEX); + case OpcodeTreeNodeType::VEXW: + assert(info.flags& IF_PREFIX_VEX); index = info.vex_w; break; - case ZyDisOpcodeTreeNodeType::VEXL: - assert(info.flags & IF_PREFIX_VEX); + case OpcodeTreeNodeType::VEXL: + assert(info.flags& IF_PREFIX_VEX); index = info.vex_l; break; default: assert(0); } - node = VDEGetOpcodeTreeChild(node, index); - } while (nodeType != ZyDisOpcodeTreeNodeType::INSTRUCTION_DEFINITION); + node = GetOpcodeTreeChild(node, index); + } while (nodeType != OpcodeTreeNodeType::INSTRUCTION_DEFINITION); return false; } -ZyDisInstructionDecoder::ZyDisInstructionDecoder() - : m_dataSource(nullptr) - , m_disassemblerMode(ZyDisDisassemblerMode::M32BIT) - , m_preferredVendor(ZyDisInstructionSetVendor::ANY) +InstructionDecoder::InstructionDecoder() + : m_input(nullptr) + , m_disassemblerMode(DisassemblerMode::M32BIT) + , m_preferredVendor(InstructionSetVendor::ANY) , m_instructionPointer(0) { } -ZyDisInstructionDecoder::ZyDisInstructionDecoder(ZyDisBaseDataSource *input, - ZyDisDisassemblerMode disassemblerMode, ZyDisInstructionSetVendor preferredVendor, +InstructionDecoder::InstructionDecoder(BaseInput *input, + DisassemblerMode disassemblerMode, InstructionSetVendor preferredVendor, uint64_t instructionPointer) - : m_dataSource(input) + : m_input(input) , m_disassemblerMode(disassemblerMode) , m_preferredVendor(preferredVendor) , m_instructionPointer(instructionPointer) @@ -1205,20 +1216,20 @@ ZyDisInstructionDecoder::ZyDisInstructionDecoder(ZyDisBaseDataSource *input, } -bool ZyDisInstructionDecoder::decodeInstruction(ZyDisInstructionInfo &info) +bool InstructionDecoder::decodeInstruction(InstructionInfo& info) { // Clear instruction info memset(&info, 0, sizeof(info)); // Set disassembler mode flags switch (m_disassemblerMode) { - case ZyDisDisassemblerMode::M16BIT: + case DisassemblerMode::M16BIT: info.flags |= IF_DISASSEMBLER_MODE_16; break; - case ZyDisDisassemblerMode::M32BIT: + case DisassemblerMode::M32BIT: info.flags |= IF_DISASSEMBLER_MODE_32; break; - case ZyDisDisassemblerMode::M64BIT: + case DisassemblerMode::M64BIT: info.flags |= IF_DISASSEMBLER_MODE_64; break; default: @@ -1232,34 +1243,34 @@ bool ZyDisInstructionDecoder::decodeInstruction(ZyDisInstructionInfo &info) goto DecodeError; } // SWAPGS is only valid in 64 bit mode - if ((info.mnemonic == ZyDisInstructionMnemonic::SWAPGS) && - (m_disassemblerMode != ZyDisDisassemblerMode::M64BIT)) + if ((info.mnemonic == InstructionMnemonic::SWAPGS)&& + (m_disassemblerMode != DisassemblerMode::M64BIT)) { info.flags &= IF_ERROR_INVALID; goto DecodeError; } // Handle aliases - if (info.mnemonic == ZyDisInstructionMnemonic::XCHG) + if (info.mnemonic == InstructionMnemonic::XCHG) { - if ((info.operand[0].type == ZyDisOperandType::REGISTER && - info.operand[0].base == ZyDisRegister::AX && - info.operand[1].type == ZyDisOperandType::REGISTER && - info.operand[1].base == ZyDisRegister::AX) || - (info.operand[0].type == ZyDisOperandType::REGISTER && - info.operand[0].base == ZyDisRegister::EAX && - info.operand[1].type == ZyDisOperandType::REGISTER && - info.operand[1].base == ZyDisRegister::EAX)) + if ((info.operand[0].type == OperandType::REGISTER&& + info.operand[0].base == Register::AX&& + info.operand[1].type == OperandType::REGISTER&& + info.operand[1].base == Register::AX) || + (info.operand[0].type == OperandType::REGISTER&& + info.operand[0].base == Register::EAX&& + info.operand[1].type == OperandType::REGISTER&& + info.operand[1].base == Register::EAX)) { - info.mnemonic = ZyDisInstructionMnemonic::NOP; - info.operand[0].type = ZyDisOperandType::NONE; - info.operand[1].type = ZyDisOperandType::NONE; - info.operand[0].access_mode = ZyDisOperandAccessMode::NA; - info.operand[1].access_mode = ZyDisOperandAccessMode::NA; + info.mnemonic = InstructionMnemonic::NOP; + info.operand[0].type = OperandType::NONE; + info.operand[1].type = OperandType::NONE; + info.operand[0].access_mode = OperandAccessMode::NA; + info.operand[1].access_mode = OperandAccessMode::NA; } } - if ((info.mnemonic == ZyDisInstructionMnemonic::NOP) && (info.flags & IF_PREFIX_REP)) + if ((info.mnemonic == InstructionMnemonic::NOP)&& (info.flags& IF_PREFIX_REP)) { - info.mnemonic = ZyDisInstructionMnemonic::PAUSE; + info.mnemonic = InstructionMnemonic::PAUSE; info.flags &= ~IF_PREFIX_REP; } // Increment instruction pointer @@ -1271,7 +1282,7 @@ DecodeError: // Increment instruction pointer. m_instructionPointer += 1; // Backup all error flags, the instruction length and the instruction address - uint32_t flags = info.flags & (IF_ERROR_MASK | 0x00000007); + uint32_t flags = info.flags& (IF_ERROR_MASK | 0x00000007); uint8_t length = info.length; uint8_t firstByte = info.data[0]; uint64_t instrAddress = info.instrAddress; @@ -1282,22 +1293,24 @@ DecodeError: info.length = length; info.data[0] = firstByte; info.instrAddress = instrAddress; - info.instrDefinition = Internal::VDEGetInstructionDefinition(0); - // Return with error, if the end of the input source was reached while decoding the - // invalid instruction - if (info.flags & IF_ERROR_END_OF_INPUT) - { - info.length = 0; - return false; - } + info.instrDefinition = Internal::GetInstructionDefinition(0); // Decrement the input position, if more than one byte was read from the input data // source while decoding the invalid instruction. if (info.length != 1) { - m_dataSource->setPosition(m_dataSource->getPosition() - info.length + 1); + m_input->setPosition(m_input->getPosition() - info.length + 1); info.length = 1; } + // Return with error, if the end of the input source was reached while decoding the + // invalid instruction + if (info.flags& IF_ERROR_END_OF_INPUT) + { + info.length = 0; + return false; + } return true; } -} +/* ============================================================================================== */ + +} \ No newline at end of file diff --git a/Bindings/Cpp/ZyDisInstructionDecoder.hpp b/Zydis/ZydisInstructionDecoder.hpp similarity index 70% rename from Bindings/Cpp/ZyDisInstructionDecoder.hpp rename to Zydis/ZydisInstructionDecoder.hpp index 1f45331..84f9355 100644 --- a/Bindings/Cpp/ZyDisInstructionDecoder.hpp +++ b/Zydis/ZydisInstructionDecoder.hpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : - - Last change : 29. October 2014 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,22 +26,24 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ -#pragma once +***************************************************************************************************/ + +#ifndef _ZYDIS_INSTRUCTIONDECODER_HPP_ +#define _ZYDIS_INSTRUCTIONDECODER_HPP_ #include #include -#include "ZyDisDisassemblerTypes.hpp" +#include "ZydisTypes.hpp" -namespace Verteron +namespace Zydis { -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* BaseInput ==================================================================================== */ /** * @brief The base class for all data-source implementations. */ -class ZyDisBaseDataSource +class BaseInput { private: uint8_t m_currentInput; @@ -66,12 +66,12 @@ protected: /** * @brief Default constructor. */ - ZyDisBaseDataSource() { }; + BaseInput() { }; public: /** * @brief Destructor. */ - virtual ~ZyDisBaseDataSource() { }; + virtual ~BaseInput() { }; public: /** * @brief Reads the next byte from the data source. This method does NOT increase the @@ -81,7 +81,7 @@ public: * @c flags field of the @c info parameter for error flags. * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ - uint8_t inputPeek(ZyDisInstructionInfo &info); + uint8_t inputPeek(InstructionInfo& info); /** * @brief Reads the next byte from the data source. This method increases the current * input position and the @c length field of the @c info parameter. @@ -92,7 +92,7 @@ public: * @c flags field of the @c info parameter for error flags. * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ - uint8_t inputNext(ZyDisInstructionInfo &info); + uint8_t inputNext(InstructionInfo& info); /** * @brief Reads the next byte(s) from the data source. This method increases the current * input position and the @c length field of the @c info parameter. @@ -104,7 +104,7 @@ public: * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ template - T inputNext(ZyDisInstructionInfo &info); + T inputNext(InstructionInfo& info); /** * @brief Returns the current input byte. The current input byte is set everytime the * @c inputPeek or @c inputNext method is called. @@ -133,7 +133,7 @@ public: virtual bool setPosition(uint64_t position) = 0; }; -inline uint8_t ZyDisBaseDataSource::inputPeek(ZyDisInstructionInfo &info) +inline uint8_t BaseInput::inputPeek(InstructionInfo& info) { if (info.length == 15) { @@ -149,7 +149,7 @@ inline uint8_t ZyDisBaseDataSource::inputPeek(ZyDisInstructionInfo &info) return m_currentInput; } -inline uint8_t ZyDisBaseDataSource::inputNext(ZyDisInstructionInfo &info) +inline uint8_t BaseInput::inputNext(InstructionInfo& info) { if (info.length == 15) { @@ -168,14 +168,14 @@ inline uint8_t ZyDisBaseDataSource::inputNext(ZyDisInstructionInfo &info) } template -inline T ZyDisBaseDataSource::inputNext(ZyDisInstructionInfo &info) +inline T BaseInput::inputNext(InstructionInfo& info) { static_assert(std::is_integral::value, "integral type required"); T result = 0; for (unsigned i = 0; i < (sizeof(T) / sizeof(uint8_t)); ++i) { T b = inputNext(info); - if (!b && (info.flags & IF_ERROR_MASK)) + if (!b&& (info.flags& IF_ERROR_MASK)) { return 0; } @@ -184,20 +184,20 @@ inline T ZyDisBaseDataSource::inputNext(ZyDisInstructionInfo &info) return result; } -inline uint8_t ZyDisBaseDataSource::inputCurrent() const +inline uint8_t BaseInput::inputCurrent() const { return m_currentInput; } -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* MemoryInput ================================================================================== */ /** - * @brief A memory-buffer based data source for the @c ZyDisInstructionDecoder class. + * @brief A memory-buffer based data source for the @c InstructionDecoder class. */ -class ZyDisMemoryDataSource : public ZyDisBaseDataSource +class MemoryInput : public BaseInput { private: - const void *m_inputBuffer; + const void* m_inputBuffer; uint64_t m_inputBufferLen; uint64_t m_inputBufferPos; protected: @@ -219,7 +219,7 @@ public: * @param buffer The input buffer. * @param bufferLen The length of the input buffer. */ - ZyDisMemoryDataSource(const void* buffer, size_t bufferLen) + MemoryInput(const void* buffer, size_t bufferLen) : m_inputBuffer(buffer) , m_inputBufferLen(bufferLen) , m_inputBufferPos(0) { }; @@ -242,42 +242,42 @@ public: bool setPosition(uint64_t position) override; }; -inline uint8_t ZyDisMemoryDataSource::internalInputPeek() +inline uint8_t MemoryInput::internalInputPeek() { return *(static_cast(m_inputBuffer) + m_inputBufferPos); } -inline uint8_t ZyDisMemoryDataSource::internalInputNext() +inline uint8_t MemoryInput::internalInputNext() { ++m_inputBufferPos; return *(static_cast(m_inputBuffer) + m_inputBufferPos - 1); } -inline bool ZyDisMemoryDataSource::isEndOfInput() const +inline bool MemoryInput::isEndOfInput() const { return (m_inputBufferPos >= m_inputBufferLen); } -inline uint64_t ZyDisMemoryDataSource::getPosition() const +inline uint64_t MemoryInput::getPosition() const { return m_inputBufferPos; } -inline bool ZyDisMemoryDataSource::setPosition(uint64_t position) +inline bool MemoryInput::setPosition(uint64_t position) { m_inputBufferPos = position; return isEndOfInput(); } -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* StreamInput ================================================================================== */ /** - * @brief A stream based data source for the @c ZyDisInstructionDecoder class. + * @brief A stream based data source for the @c InstructionDecoder class. */ -class ZyDisStreamDataSource : public ZyDisBaseDataSource +class StreamInput : public BaseInput { private: - std::istream *m_inputStream; + std::istream* m_inputStream; protected: /** * @brief Reads the next byte from the data source. This method increases the current @@ -296,7 +296,7 @@ public: * @brief Constructor. * @param stream The input stream. */ - explicit ZyDisStreamDataSource(std::istream *stream) + explicit StreamInput(std::istream* stream) : m_inputStream(stream) { }; public: /** @@ -317,7 +317,7 @@ public: bool setPosition(uint64_t position) override; }; -inline uint8_t ZyDisStreamDataSource::internalInputPeek() +inline uint8_t StreamInput::internalInputPeek() { if (!m_inputStream) { @@ -326,7 +326,7 @@ inline uint8_t ZyDisStreamDataSource::internalInputPeek() return static_cast(m_inputStream->peek()); } -inline uint8_t ZyDisStreamDataSource::internalInputNext() +inline uint8_t StreamInput::internalInputNext() { if (!m_inputStream) { @@ -335,7 +335,7 @@ inline uint8_t ZyDisStreamDataSource::internalInputNext() return static_cast(m_inputStream->get()); } -inline bool ZyDisStreamDataSource::isEndOfInput() const +inline bool StreamInput::isEndOfInput() const { if (!m_inputStream) { @@ -346,7 +346,7 @@ inline bool ZyDisStreamDataSource::isEndOfInput() const return !m_inputStream->good(); } -inline uint64_t ZyDisStreamDataSource::getPosition() const +inline uint64_t StreamInput::getPosition() const { if (!m_inputStream) { @@ -355,7 +355,7 @@ inline uint64_t ZyDisStreamDataSource::getPosition() const return m_inputStream->tellg(); } -inline bool ZyDisStreamDataSource::setPosition(uint64_t position) +inline bool StreamInput::setPosition(uint64_t position) { if (!m_inputStream) { @@ -365,12 +365,12 @@ inline bool ZyDisStreamDataSource::setPosition(uint64_t position) return isEndOfInput(); } -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* Enums ======================================================================================== */ /** * @brief Values that represent a disassembler mode. */ -enum class ZyDisDisassemblerMode : uint8_t +enum class DisassemblerMode : uint8_t { M16BIT, M32BIT, @@ -380,18 +380,20 @@ enum class ZyDisDisassemblerMode : uint8_t /** * @brief Values that represent an instruction-set vendor. */ -enum class ZyDisInstructionSetVendor : uint8_t +enum class InstructionSetVendor : uint8_t { ANY, INTEL, AMD }; +/* InstructionDecoder =========================================================================== */ + /** - * @brief The @c ZyDisInstructionDecoder class decodes x86/x86-64 assembly instructions from a + * @brief The @c InstructionDecoder class decodes x86/x86-64 assembly instructions from a * given data source. */ -class ZyDisInstructionDecoder +class InstructionDecoder { private: enum class RegisterClass : uint8_t @@ -404,10 +406,10 @@ private: XMM }; private: - ZyDisBaseDataSource *m_dataSource; - ZyDisDisassemblerMode m_disassemblerMode; - ZyDisInstructionSetVendor m_preferredVendor; - uint64_t m_instructionPointer; + BaseInput* m_input; + DisassemblerMode m_disassemblerMode; + InstructionSetVendor m_preferredVendor; + uint64_t m_instructionPointer; private: /** * @brief Reads the next byte from the data source. This method does NOT increase the @@ -417,7 +419,7 @@ private: * @c flags field of the @c info parameter for error flags. * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ - uint8_t inputPeek(ZyDisInstructionInfo &info); + uint8_t inputPeek(InstructionInfo& info); /** * @brief Reads the next byte from the data source. This method increases the current * input position and the @c length field of the @info parameter. @@ -428,7 +430,7 @@ private: * @c flags field of the @c info parameter for error flags. * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ - uint8_t inputNext(ZyDisInstructionInfo &info); + uint8_t inputNext(InstructionInfo& info); /** * @brief Reads the next byte(s) from the data source. This method increases the current * input position and the @c length field of the @info parameter. @@ -440,7 +442,7 @@ private: * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. */ template - T inputNext(ZyDisInstructionInfo &info); + T inputNext(InstructionInfo& info); /** * @brief Returns the current input byte. The current input byte is set everytime the * @c inputPeek or @c inputNext method is called. @@ -451,64 +453,64 @@ private: /** * @brief Decodes a register operand. * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. + * @param operand The @c OperandInfo struct that receives the decoded data. * @param registerClass The register class to use. * @param registerId The register id. * @param operandSize The defined size of the operand. * @return True if it succeeds, false if it fails. */ - bool decodeRegisterOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, - RegisterClass registerClass, uint8_t registerId, ZyDisDefinedOperandSize operandSize) const; + bool decodeRegisterOperand(InstructionInfo& info, OperandInfo& operand, + RegisterClass registerClass, uint8_t registerId, DefinedOperandSize operandSize) const; /** * @brief Decodes a register/memory operand. * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. + * @param operand The @c OperandInfo struct that receives the decoded data. * @param registerClass The register class to use. * @param operandSize The defined size of the operand. * @return True if it succeeds, false if it fails. */ - bool decodeRegisterMemoryOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, - RegisterClass registerClass, ZyDisDefinedOperandSize operandSize); + bool decodeRegisterMemoryOperand(InstructionInfo& info, OperandInfo& operand, + RegisterClass registerClass, DefinedOperandSize operandSize); /** * @brief Decodes an immediate operand. * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. + * @param operand The @c OperandInfo struct that receives the decoded data. * @param operandSize The defined size of the operand. * @return True if it succeeds, false if it fails. */ - bool decodeImmediate(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, - ZyDisDefinedOperandSize operandSize); + bool decodeImmediate(InstructionInfo& info, OperandInfo& operand, + DefinedOperandSize operandSize); /** * @brief Decodes a displacement operand. * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. + * @param operand The @c OperandInfo struct that receives the decoded data. * @param size The size of the displacement data. * @return True if it succeeds, false if it fails. */ - bool decodeDisplacement(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, uint8_t size); + bool decodeDisplacement(InstructionInfo& info, OperandInfo& operand, uint8_t size); private: /** * @brief Decodes the modrm field of the instruction. This method reads an additional * input byte. - * @param The @c ZyDisInstructionInfo struct that receives the decoded data. + * @param The @c InstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeModrm(ZyDisInstructionInfo &info); + bool decodeModrm(InstructionInfo& info); /** * @brief Decodes the sib field of the instruction. This method reads an additional * input byte. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. + * @param info The @c InstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeSIB(ZyDisInstructionInfo &info); + bool decodeSIB(InstructionInfo& info); /** * @brief Decodes vex prefix of the instruction. This method takes the current input byte * to determine the vex prefix type and reads one or two additional input bytes * on demand. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. + * @param info The @c InstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeVex(ZyDisInstructionInfo &info); + bool decodeVex(InstructionInfo& info); private: /** * @brief Returns the effective operand size. @@ -516,59 +518,59 @@ private: * @param operandSize The defined operand size. * @return The effective operand size. */ - uint16_t getEffectiveOperandSize(const ZyDisInstructionInfo &info, - ZyDisDefinedOperandSize operandSize) const; + uint16_t getEffectiveOperandSize(const InstructionInfo& info, + DefinedOperandSize operandSize) const; /** * @brief Decodes all instruction operands. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. + * @param info The @c InstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeOperands(ZyDisInstructionInfo &info); + bool decodeOperands(InstructionInfo& info); /** * @brief Decodes the specified instruction operand. * @param info The instruction info. - * @param operand The @c ZyDisOperandInfo struct that receives the decoded data. + * @param operand The @c OperandInfo struct that receives the decoded data. * @param operandType The defined type of the operand. * @param operandSize The defined size of the operand. * @return True if it succeeds, false if it fails. */ - bool decodeOperand(ZyDisInstructionInfo &info, ZyDisOperandInfo &operand, - ZyDisDefinedOperandType operandType, ZyDisDefinedOperandSize operandSize); + bool decodeOperand(InstructionInfo& info, OperandInfo& operand, + DefinedOperandType operandType, DefinedOperandSize operandSize); private: /** * @brief Resolves the effective operand and address mode of the instruction. * This method requires a non-null value in the @c instrDefinition field of the * @c info struct. - * @param info The @c ZyDisInstructionInfo struct that receives the effective operand and + * @param info The @c InstructionInfo struct that receives the effective operand and * address mode. */ - void resolveOperandAndAddressMode(ZyDisInstructionInfo &info) const; + void resolveOperandAndAddressMode(InstructionInfo& info) const; /** * @brief Calculates the effective REX/VEX.w, r, x, b, l values. * This method requires a non-null value in the @c instrDefinition field of the * @c info struct. - * @param info The @c ZyDisInstructionInfo struct that receives the effective operand and + * @param info The @c InstructionInfo struct that receives the effective operand and * address mode. */ - void calculateEffectiveRexVexValues(ZyDisInstructionInfo &info) const; + void calculateEffectiveRexVexValues(InstructionInfo& info) const; private: /** * @brief Collects and decodes optional instruction prefixes. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. + * @param info The @c InstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodePrefixes(ZyDisInstructionInfo &info); + bool decodePrefixes(InstructionInfo& info); /** * @brief Collects and decodes the instruction opcodes using the opcode tree. - * @param info The @c ZyDisInstructionInfo struct that receives the decoded data. + * @param info The @c InstructionInfo struct that receives the decoded data. * @return True if it succeeds, false if it fails. */ - bool decodeOpcode(ZyDisInstructionInfo &info); + bool decodeOpcode(InstructionInfo& info); public: /** * @brief Default constructor. */ - ZyDisInstructionDecoder(); + InstructionDecoder(); /** * @brief Constructor. * @param input A reference to the input data source. @@ -576,51 +578,51 @@ public: * @param preferredVendor The preferred instruction-set vendor. * @param instructionPointer The initial instruction pointer. */ - explicit ZyDisInstructionDecoder(ZyDisBaseDataSource *input, - ZyDisDisassemblerMode disassemblerMode = ZyDisDisassemblerMode::M32BIT, - ZyDisInstructionSetVendor preferredVendor = ZyDisInstructionSetVendor::ANY, + explicit InstructionDecoder(BaseInput* input, + DisassemblerMode disassemblerMode = DisassemblerMode::M32BIT, + InstructionSetVendor preferredVendor = InstructionSetVendor::ANY, uint64_t instructionPointer = 0); public: /** * @brief Decodes the next instruction from the input data source. - * @param info The @c ZyDisInstructionInfo struct that receives the information about the + * @param info The @c InstructionInfo struct that receives the information about the * decoded instruction. * @return This method returns false, if the current position has exceeded the maximum input * length. * In all other cases (valid and invalid instructions) the return value is true. */ - bool decodeInstruction(ZyDisInstructionInfo &info); + bool decodeInstruction(InstructionInfo& info); public: /** * @brief Returns a pointer to the current data source. * @return A pointer to the current data source. */ - ZyDisBaseDataSource* getDataSource() const; + BaseInput* getDataSource() const; /** * @brief Sets a new data source. * @param input A reference to the new input data source. */ - void setDataSource(ZyDisBaseDataSource *input); + void setDataSource(BaseInput* input); /** * @brief Returns the current disassembler mode. * @return The current disassembler mode. */ - ZyDisDisassemblerMode getDisassemblerMode() const; + DisassemblerMode getDisassemblerMode() const; /** * @brief Sets the current disassembler mode. * @param disassemblerMode The new disassembler mode. */ - void setDisassemblerMode(ZyDisDisassemblerMode disassemblerMode); + void setDisassemblerMode(DisassemblerMode disassemblerMode); /** * @brief Returns the preferred instruction-set vendor. * @return The preferred instruction-set vendor. */ - ZyDisInstructionSetVendor getPreferredVendor() const; + InstructionSetVendor getPreferredVendor() const; /** * @brief Sets the preferred instruction-set vendor. * @param preferredVendor The new preferred instruction-set vendor. */ - void setPreferredVendor(ZyDisInstructionSetVendor preferredVendor); + void setPreferredVendor(InstructionSetVendor preferredVendor); /** * @brief Returns the current instruction pointer. * @return The current instruction pointer. @@ -633,86 +635,88 @@ public: void setInstructionPointer(uint64_t instructionPointer); }; -inline uint8_t ZyDisInstructionDecoder::inputPeek(ZyDisInstructionInfo &info) +inline uint8_t InstructionDecoder::inputPeek(InstructionInfo& info) { - if (!m_dataSource) + if (!m_input) { info.flags |= IF_ERROR_END_OF_INPUT; return 0; } - return m_dataSource->inputPeek(info); + return m_input->inputPeek(info); } -inline uint8_t ZyDisInstructionDecoder::inputNext(ZyDisInstructionInfo &info) +inline uint8_t InstructionDecoder::inputNext(InstructionInfo& info) { - if (!m_dataSource) + if (!m_input) { info.flags |= IF_ERROR_END_OF_INPUT; return 0; } - return m_dataSource->inputNext(info); + return m_input->inputNext(info); } template -inline T ZyDisInstructionDecoder::inputNext(ZyDisInstructionInfo &info) +inline T InstructionDecoder::inputNext(InstructionInfo& info) { - if (!m_dataSource) + if (!m_input) { info.flags |= IF_ERROR_END_OF_INPUT; return 0; } - return m_dataSource->inputNext(info); + return m_input->inputNext(info); } -inline uint8_t ZyDisInstructionDecoder::inputCurrent() const +inline uint8_t InstructionDecoder::inputCurrent() const { - if (!m_dataSource) + if (!m_input) { return 0; } - return m_dataSource->inputCurrent(); + return m_input->inputCurrent(); } -inline ZyDisBaseDataSource* ZyDisInstructionDecoder::getDataSource() const +inline BaseInput *InstructionDecoder::getDataSource() const { - return m_dataSource; + return m_input; } -inline void ZyDisInstructionDecoder::setDataSource(ZyDisBaseDataSource *input) +inline void InstructionDecoder::setDataSource(BaseInput* input) { - m_dataSource = input; + m_input = input; } -inline ZyDisDisassemblerMode ZyDisInstructionDecoder::getDisassemblerMode() const +inline DisassemblerMode InstructionDecoder::getDisassemblerMode() const { return m_disassemblerMode; } -inline void ZyDisInstructionDecoder::setDisassemblerMode(ZyDisDisassemblerMode disassemblerMode) +inline void InstructionDecoder::setDisassemblerMode(DisassemblerMode disassemblerMode) { m_disassemblerMode = disassemblerMode; } -inline ZyDisInstructionSetVendor ZyDisInstructionDecoder::getPreferredVendor() const +inline InstructionSetVendor InstructionDecoder::getPreferredVendor() const { return m_preferredVendor; } -inline void ZyDisInstructionDecoder::setPreferredVendor(ZyDisInstructionSetVendor preferredVendor) +inline void InstructionDecoder::setPreferredVendor(InstructionSetVendor preferredVendor) { m_preferredVendor = preferredVendor; } -inline uint64_t ZyDisInstructionDecoder::getInstructionPointer() const +inline uint64_t InstructionDecoder::getInstructionPointer() const { return m_instructionPointer; } -inline void ZyDisInstructionDecoder::setInstructionPointer(uint64_t instructionPointer) +inline void InstructionDecoder::setInstructionPointer(uint64_t instructionPointer) { m_instructionPointer = instructionPointer; } -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* ============================================================================================== */ } + +#endif /* _ZYDIS_INSTRUCTIONDECODER_HPP_ */ \ No newline at end of file diff --git a/Bindings/Cpp/ZyDisInstructionFormatter.cpp b/Zydis/ZydisInstructionFormatter.cpp similarity index 63% rename from Bindings/Cpp/ZyDisInstructionFormatter.cpp rename to Zydis/ZydisInstructionFormatter.cpp index 792c5d3..edee070 100644 --- a/Bindings/Cpp/ZyDisInstructionFormatter.cpp +++ b/Zydis/ZydisInstructionFormatter.cpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : - - Last change : 22. October 2014 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,34 +26,20 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ -#include "ZyDisInstructionFormatter.hpp" -#include "ZyDisDisassemblerUtils.hpp" +***************************************************************************************************/ + +#include "ZydisInstructionFormatter.hpp" +#include "ZydisUtils.hpp" #include #include -#include #include -#include -namespace Verteron +namespace Zydis { -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* BaseInstructionFormatter ================================================================ */ -ZyDisBaseSymbolResolver::~ZyDisBaseSymbolResolver() -{ - -} - -const char* ZyDisBaseSymbolResolver::resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, - uint64_t &offset) -{ - return nullptr; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -const char* ZyDisBaseInstructionFormatter::m_registerStrings[] = +const char *BaseInstructionFormatter::m_registerStrings[] = { /* 8 bit general purpose registers */ "al", "cl", "dl", "bl", @@ -111,12 +95,12 @@ const char* ZyDisBaseInstructionFormatter::m_registerStrings[] = "rip" }; -void ZyDisBaseInstructionFormatter::internalFormatInstruction(const ZyDisInstructionInfo &info) +void BaseInstructionFormatter::internalFormatInstruction(const InstructionInfo& /*info*/) { // Nothing to do here } -ZyDisBaseInstructionFormatter::ZyDisBaseInstructionFormatter() +BaseInstructionFormatter::BaseInstructionFormatter() : m_symbolResolver(nullptr) , m_outputStringLen(0) , m_outputUppercase(false) @@ -124,7 +108,8 @@ ZyDisBaseInstructionFormatter::ZyDisBaseInstructionFormatter() } -ZyDisBaseInstructionFormatter::ZyDisBaseInstructionFormatter(ZyDisBaseSymbolResolver *symbolResolver) +BaseInstructionFormatter::BaseInstructionFormatter( + BaseSymbolResolver *symbolResolver) : m_symbolResolver(symbolResolver) , m_outputStringLen(0) , m_outputUppercase(false) @@ -132,7 +117,7 @@ ZyDisBaseInstructionFormatter::ZyDisBaseInstructionFormatter(ZyDisBaseSymbolReso } -const char* ZyDisBaseInstructionFormatter::formatInstruction(const ZyDisInstructionInfo &info) +const char *BaseInstructionFormatter::formatInstruction(const InstructionInfo& info) { // Clears the internal string buffer outputClear(); @@ -141,28 +126,28 @@ const char* ZyDisBaseInstructionFormatter::formatInstruction(const ZyDisInstruct if (m_outputBuffer.size() == 0) { // The basic instruction formatter only returns the instruction menmonic. - return Internal::VDEGetInstructionMnemonicString(info.mnemonic); + return Internal::GetInstructionMnemonicString(info.mnemonic); } // Return the formatted instruction string return outputString(); } -ZyDisBaseInstructionFormatter::~ZyDisBaseInstructionFormatter() +BaseInstructionFormatter::~BaseInstructionFormatter() { } -void ZyDisBaseInstructionFormatter::outputClear() +void BaseInstructionFormatter::outputClear() { m_outputStringLen = 0; } -char const* ZyDisBaseInstructionFormatter::outputString() +char const *BaseInstructionFormatter::outputString() { - return &m_outputBuffer[0]; + return& m_outputBuffer[0]; } - void ZyDisBaseInstructionFormatter::outputAppend(char const *text) + void BaseInstructionFormatter::outputAppend(char const *text) { // Get the string length including the null-terminator char size_t strLen = strlen(text) + 1; @@ -191,7 +176,7 @@ char const* ZyDisBaseInstructionFormatter::outputString() } } - void ZyDisBaseInstructionFormatter::outputAppendFormatted(char const *format, ...) + void BaseInstructionFormatter::outputAppendFormatted(char const *format, ...) { va_list arguments; va_start(arguments, format); @@ -218,7 +203,7 @@ char const* ZyDisBaseInstructionFormatter::outputString() // Write the formatted text to the output buffer assert((bufLen - offset) > 0); strLen = - std::vsnprintf(&m_outputBuffer[offset], bufLen - offset, format, arguments); + vsnprintf_s(&m_outputBuffer[offset], bufLen - offset, _TRUNCATE, format, arguments); } while (strLen < 0); // Increase the string length m_outputStringLen = offset + strLen + 1; @@ -233,11 +218,11 @@ char const* ZyDisBaseInstructionFormatter::outputString() va_end(arguments); } -void ZyDisBaseInstructionFormatter::outputAppendAddress(const ZyDisInstructionInfo &info, +void BaseInstructionFormatter::outputAppendAddress(const InstructionInfo& info, uint64_t address, bool resolveSymbols) { uint64_t offset = 0; - const char* name = nullptr; + const char *name = nullptr; if (resolveSymbols) { name = resolveSymbol(info, address, offset); @@ -253,13 +238,13 @@ void ZyDisBaseInstructionFormatter::outputAppendAddress(const ZyDisInstructionIn } } else { - if (info.flags & IF_DISASSEMBLER_MODE_16) + if (info.flags& IF_DISASSEMBLER_MODE_16) { outputAppendFormatted("%.4X", address); - } else if (info.flags & IF_DISASSEMBLER_MODE_32) + } else if (info.flags& IF_DISASSEMBLER_MODE_32) { outputAppendFormatted("%.8lX", address); - } else if (info.flags & IF_DISASSEMBLER_MODE_64) + } else if (info.flags& IF_DISASSEMBLER_MODE_64) { outputAppendFormatted("%.16llX", address); } else @@ -269,12 +254,12 @@ void ZyDisBaseInstructionFormatter::outputAppendAddress(const ZyDisInstructionIn } } -void ZyDisBaseInstructionFormatter::outputAppendImmediate(const ZyDisInstructionInfo &info, - const ZyDisOperandInfo &operand, bool resolveSymbols) +void BaseInstructionFormatter::outputAppendImmediate(const InstructionInfo& info, + const OperandInfo& operand, bool resolveSymbols) { - assert(operand.type == ZyDisOperandType::IMMEDIATE); + assert(operand.type == OperandType::IMMEDIATE); uint64_t value = 0; - if (operand.signed_lval && (operand.size != info.operand_mode)) + if (operand.signed_lval&& (operand.size != info.operand_mode)) { if (operand.size == 8) { @@ -286,7 +271,7 @@ void ZyDisBaseInstructionFormatter::outputAppendImmediate(const ZyDisInstruction } if (info.operand_mode < 64) { - value = value & ((1ull << info.operand_mode) - 1ull); + value = value& ((1ull << info.operand_mode) - 1ull); } } else { @@ -309,7 +294,7 @@ void ZyDisBaseInstructionFormatter::outputAppendImmediate(const ZyDisInstruction } } uint64_t offset = 0; - const char* name = nullptr; + const char *name = nullptr; if (resolveSymbols) { name = resolveSymbol(info, value, offset); @@ -329,11 +314,10 @@ void ZyDisBaseInstructionFormatter::outputAppendImmediate(const ZyDisInstruction } } -void ZyDisBaseInstructionFormatter::outputAppendDisplacement(const ZyDisInstructionInfo &info, - const ZyDisOperandInfo &operand) +void BaseInstructionFormatter::outputAppendDisplacement(const OperandInfo& operand) { assert(operand.offset > 0); - if ((operand.base == ZyDisRegister::NONE) && (operand.index == ZyDisRegister::NONE)) + if ((operand.base == Register::NONE)&& (operand.index == Register::NONE)) { // Assume the displacement value is unsigned assert(operand.scale == 0); @@ -378,16 +362,15 @@ void ZyDisBaseInstructionFormatter::outputAppendDisplacement(const ZyDisInstruct outputAppendFormatted("-%.2lX", -value); } else { - outputAppendFormatted("%s%.2lX", (operand.base != ZyDisRegister::NONE || - operand.index != ZyDisRegister::NONE) ? "+" : "", value); + outputAppendFormatted("%s%.2lX", (operand.base != Register::NONE || + operand.index != Register::NONE) ? "+" : "", value); } } } -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* IntelInstructionFormatter =============================================================== */ -void ZyDisIntelInstructionFormatter::outputAppendOperandCast(const ZyDisInstructionInfo &info, - const ZyDisOperandInfo &operand) +void IntelInstructionFormatter::outputAppendOperandCast(const OperandInfo& operand) { switch(operand.size) { @@ -417,33 +400,33 @@ void ZyDisIntelInstructionFormatter::outputAppendOperandCast(const ZyDisInstruct } } -void ZyDisIntelInstructionFormatter::formatOperand(const ZyDisInstructionInfo &info, - const ZyDisOperandInfo &operand) +void IntelInstructionFormatter::formatOperand(const InstructionInfo& info, + const OperandInfo& operand) { switch (operand.type) { - case ZyDisOperandType::REGISTER: + case OperandType::REGISTER: outputAppend(registerToString(operand.base)); break; - case ZyDisOperandType::MEMORY: - if (info.flags & IF_PREFIX_SEGMENT) + case OperandType::MEMORY: + if (info.flags& IF_PREFIX_SEGMENT) { outputAppendFormatted("%s:", registerToString(info.segment)); } outputAppend("["); - if (operand.base == ZyDisRegister::RIP) + if (operand.base == Register::RIP) { // TODO: Add option - outputAppendAddress(info, VDECalcAbsoluteTarget(info, operand), true); + outputAppendAddress(info, CalcAbsoluteTarget(info, operand), true); } else { - if (operand.base != ZyDisRegister::NONE) + if (operand.base != Register::NONE) { outputAppend(registerToString(operand.base)); } - if (operand.index != ZyDisRegister::NONE) + if (operand.index != Register::NONE) { - outputAppendFormatted("%s%s", operand.base != ZyDisRegister::NONE ? "+" : "", + outputAppendFormatted("%s%s", operand.base != Register::NONE ? "+" : "", registerToString(operand.index)); if (operand.scale) { @@ -452,18 +435,18 @@ void ZyDisIntelInstructionFormatter::formatOperand(const ZyDisInstructionInfo &i } if (operand.offset) { - outputAppendDisplacement(info, operand); + outputAppendDisplacement(operand); } } outputAppend("]"); break; - case ZyDisOperandType::POINTER: + case OperandType::POINTER: // TODO: resolve symbols switch (operand.size) { case 32: outputAppendFormatted("word %.4X:%.4X", operand.lval.ptr.seg, - operand.lval.ptr.off & 0xFFFF); + operand.lval.ptr.off& 0xFFFF); break; case 48: outputAppendFormatted("dword %.4X:%.8lX", operand.lval.ptr.seg, operand.lval.ptr.off); @@ -472,21 +455,21 @@ void ZyDisIntelInstructionFormatter::formatOperand(const ZyDisInstructionInfo &i assert(0); } break; - case ZyDisOperandType::IMMEDIATE: + case OperandType::IMMEDIATE: { outputAppendImmediate(info, operand, true); } break; - case ZyDisOperandType::REL_IMMEDIATE: + case OperandType::REL_IMMEDIATE: { if (operand.size == 8) { outputAppend("short "); } - outputAppendAddress(info, VDECalcAbsoluteTarget(info, operand), true); + outputAppendAddress(info, CalcAbsoluteTarget(info, operand), true); } break; - case ZyDisOperandType::CONSTANT: + case OperandType::CONSTANT: outputAppendFormatted("%.2X", operand.lval.udword); break; default: @@ -495,47 +478,47 @@ void ZyDisIntelInstructionFormatter::formatOperand(const ZyDisInstructionInfo &i } } -void ZyDisIntelInstructionFormatter::internalFormatInstruction(const ZyDisInstructionInfo &info) +void IntelInstructionFormatter::internalFormatInstruction(const InstructionInfo& info) { // Append string prefixes - if (info.flags & IF_PREFIX_LOCK) + if (info.flags& IF_PREFIX_LOCK) { outputAppend("lock "); } - if (info.flags & IF_PREFIX_REP) + if (info.flags& IF_PREFIX_REP) { outputAppend("rep "); - } else if (info.flags & IF_PREFIX_REPNE) + } else if (info.flags& IF_PREFIX_REPNE) { outputAppend("repne "); } // Append the instruction mnemonic - outputAppend(Internal::VDEGetInstructionMnemonicString(info.mnemonic)); + outputAppend(Internal::GetInstructionMnemonicString(info.mnemonic)); // Append the first operand - if (info.operand[0].type != ZyDisOperandType::NONE) + if (info.operand[0].type != OperandType::NONE) { outputAppend(" "); bool cast = false; - if (info.operand[0].type == ZyDisOperandType::MEMORY) + if (info.operand[0].type == OperandType::MEMORY) { - if (info.operand[1].type == ZyDisOperandType::IMMEDIATE || - info.operand[1].type == ZyDisOperandType::CONSTANT || - info.operand[1].type == ZyDisOperandType::NONE || + if (info.operand[1].type == OperandType::IMMEDIATE || + info.operand[1].type == OperandType::CONSTANT || + info.operand[1].type == OperandType::NONE || (info.operand[0].size != info.operand[1].size)) { cast = true; - } else if (info.operand[1].type == ZyDisOperandType::REGISTER && - info.operand[1].base == ZyDisRegister::CL) + } else if (info.operand[1].type == OperandType::REGISTER&& + info.operand[1].base == Register::CL) { switch (info.mnemonic) { - case ZyDisInstructionMnemonic::RCL: - case ZyDisInstructionMnemonic::ROL: - case ZyDisInstructionMnemonic::ROR: - case ZyDisInstructionMnemonic::RCR: - case ZyDisInstructionMnemonic::SHL: - case ZyDisInstructionMnemonic::SHR: - case ZyDisInstructionMnemonic::SAR: + case InstructionMnemonic::RCL: + case InstructionMnemonic::ROL: + case InstructionMnemonic::ROR: + case InstructionMnemonic::RCR: + case InstructionMnemonic::SHL: + case InstructionMnemonic::SHR: + case InstructionMnemonic::SAR: cast = true; break; default: @@ -545,114 +528,75 @@ void ZyDisIntelInstructionFormatter::internalFormatInstruction(const ZyDisInstru } if (cast) { - outputAppendOperandCast(info, info.operand[0]); + outputAppendOperandCast(info.operand[0]); } formatOperand(info, info.operand[0]); } // Append the second operand - if (info.operand[1].type != ZyDisOperandType::NONE) + if (info.operand[1].type != OperandType::NONE) { outputAppend(", "); bool cast = false; - if (info.operand[1].type == ZyDisOperandType::MEMORY && - info.operand[0].size != info.operand[1].size && - ((info.operand[0].type != ZyDisOperandType::REGISTER) || - ((info.operand[0].base != ZyDisRegister::ES) && - (info.operand[0].base != ZyDisRegister::CS) && - (info.operand[0].base != ZyDisRegister::SS) && - (info.operand[0].base != ZyDisRegister::DS) && - (info.operand[0].base != ZyDisRegister::FS) && - (info.operand[0].base != ZyDisRegister::GS)))) + if (info.operand[1].type == OperandType::MEMORY&& + info.operand[0].size != info.operand[1].size&& + ((info.operand[0].type != OperandType::REGISTER) || + ((info.operand[0].base != Register::ES)&& + (info.operand[0].base != Register::CS)&& + (info.operand[0].base != Register::SS)&& + (info.operand[0].base != Register::DS)&& + (info.operand[0].base != Register::FS)&& + (info.operand[0].base != Register::GS)))) { cast = true; } if (cast) { - outputAppendOperandCast(info, info.operand[1]); + outputAppendOperandCast(info.operand[1]); } formatOperand(info, info.operand[1]); } // Append the third operand - if (info.operand[2].type != ZyDisOperandType::NONE) + if (info.operand[2].type != OperandType::NONE) { outputAppend(", "); bool cast = false; - if (info.operand[2].type == ZyDisOperandType::MEMORY && + if (info.operand[2].type == OperandType::MEMORY&& (info.operand[2].size != info.operand[1].size)) { cast = true; } if (cast) { - outputAppendOperandCast(info, info.operand[2]); + outputAppendOperandCast(info.operand[2]); } formatOperand(info, info.operand[2]); } // Append the fourth operand - if (info.operand[3].type != ZyDisOperandType::NONE) + if (info.operand[3].type != OperandType::NONE) { outputAppend(", "); formatOperand(info, info.operand[3]); } } -ZyDisIntelInstructionFormatter::ZyDisIntelInstructionFormatter() - : ZyDisBaseInstructionFormatter() +IntelInstructionFormatter::IntelInstructionFormatter() + : BaseInstructionFormatter() { } -ZyDisIntelInstructionFormatter::ZyDisIntelInstructionFormatter(ZyDisBaseSymbolResolver* symbolResolver) - : ZyDisBaseInstructionFormatter(symbolResolver) +IntelInstructionFormatter::IntelInstructionFormatter( + BaseSymbolResolver *symbolResolver) + : BaseInstructionFormatter(symbolResolver) { } -ZyDisIntelInstructionFormatter::~ZyDisIntelInstructionFormatter() +IntelInstructionFormatter::~IntelInstructionFormatter() { } -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* ============================================================================================== */ -ZyDisExactSymbolResolver::~ZyDisExactSymbolResolver() -{ - -} - -const char* ZyDisExactSymbolResolver::resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, - uint64_t &offset) -{ - std::unordered_map::const_iterator iterator = m_symbolMap.find(address); - if (iterator != m_symbolMap.cend()) - { - offset = 0; - return iterator->second.c_str(); - } - return nullptr; -} - -bool ZyDisExactSymbolResolver::containsSymbol(uint64_t address) const -{ - std::unordered_map::const_iterator iterator = m_symbolMap.find(address); - return (iterator != m_symbolMap.end()); -} - -void ZyDisExactSymbolResolver::setSymbol(uint64_t address, const char* name) -{ - m_symbolMap[address].assign(name); -} - -void ZyDisExactSymbolResolver::removeSymbol(uint64_t address) -{ - m_symbolMap.erase(address); -} - -void ZyDisExactSymbolResolver::clear() -{ - m_symbolMap.clear(); -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -} +} \ No newline at end of file diff --git a/Bindings/Cpp/ZyDisInstructionFormatter.hpp b/Zydis/ZydisInstructionFormatter.hpp similarity index 52% rename from Bindings/Cpp/ZyDisInstructionFormatter.hpp rename to Zydis/ZydisInstructionFormatter.hpp index 68d02bf..2eea615 100644 --- a/Bindings/Cpp/ZyDisInstructionFormatter.hpp +++ b/Zydis/ZydisInstructionFormatter.hpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : - - Last change : 22. October 2014 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,55 +26,31 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ -#pragma once +***************************************************************************************************/ + +#ifndef _ZYDIS_INSTRUCTIONFORMATTER_HPP_ +#define _ZYDIS_INSTRUCTIONFORMATTER_HPP_ #include -#include -#include -#include "ZyDisDisassemblerTypes.hpp" +#include "ZydisTypes.hpp" +#include "ZydisSymbolResolver.hpp" -namespace Verteron +namespace Zydis { -/////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * @brief Base class for all symbol resolver implementations. - */ -class ZyDisBaseSymbolResolver -{ -public: - /** - * @brief Destructor. - */ - virtual ~ZyDisBaseSymbolResolver(); -public: - /** - * @brief Resolves a symbol. - * @param info The instruction info. - * @param address The address. - * @param offset Reference to an unsigned 64 bit integer that receives an offset - * relative to the base address of the symbol. - * @return The name of the symbol, if the symbol was found, @c NULL if not. - */ - virtual const char* resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, - uint64_t &offset); -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* BaseInstructionFormatter ===================================================================== */ /** * @brief Base class for all instruction formatter implementations. */ -class ZyDisBaseInstructionFormatter +class BaseInstructionFormatter { private: - static const char *m_registerStrings[]; - ZyDisBaseSymbolResolver *m_symbolResolver; - std::vector m_outputBuffer; - size_t m_outputStringLen; - bool m_outputUppercase; + static const char* m_registerStrings[]; + BaseSymbolResolver* m_symbolResolver; + std::vector m_outputBuffer; + size_t m_outputStringLen; + bool m_outputUppercase; protected: /** * @brief Clears the output string buffer. @@ -91,12 +65,12 @@ protected: * @brief Appends text to the ouput string buffer. * @param text The text. */ - void outputAppend(const char *text); + void outputAppend(const char* text); /** * @brief Appends formatted text to the output string buffer. * @param format The format string. */ - void outputAppendFormatted(const char *format, ...); + void outputAppendFormatted(const char* format, ...); /** * @brief Changes automatic conversion of characters to uppercase. * @param uppercase Set true to enable automatic uppercase conversion. @@ -109,7 +83,7 @@ protected: * @param resolveSymbols If this parameter is true, the method will try to display a * smybol name instead of the numeric value. */ - void outputAppendAddress(const ZyDisInstructionInfo &info, uint64_t address, + void outputAppendAddress(const InstructionInfo& info, uint64_t address, bool resolveSymbols = true); /** * @brief Appends a formatted immediate value to the output string buffer. @@ -118,21 +92,20 @@ protected: * @param resolveSymbols If this parameter is true, the method will try to display a * smybol name instead of the numeric value. */ - void outputAppendImmediate(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand, + void outputAppendImmediate(const InstructionInfo& info, const OperandInfo& operand, bool resolveSymbols = false); /** * @brief Appends a formatted memory displacement value to the output string buffer. - * @param info The instruction info. * @param operand The memory operand. */ - void outputAppendDisplacement(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand); + void outputAppendDisplacement(const OperandInfo& operand); protected: /** * @brief Returns the string representation of a given register. * @param reg The register. * @return The string representation of the given register. */ - const char* registerToString(ZyDisRegister reg) const; + const char *registerToString(Register reg) const; /** * @brief Resolves a symbol. * @param info The instruction info. @@ -141,8 +114,8 @@ protected: * relative to the base address of the symbol. * @return The name of the symbol, if the symbol was found, @c NULL if not. */ - const char* resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, - uint64_t &offset) const; + const char* resolveSymbol(const InstructionInfo& info, uint64_t address, + uint64_t& offset) const; protected: /** * @brief Override this method to implement a custom disassembly syntax. Use the @@ -150,59 +123,59 @@ protected: * string buffer. * @param info The instruction info. */ - virtual void internalFormatInstruction(const ZyDisInstructionInfo &info); + virtual void internalFormatInstruction(const InstructionInfo& info); /** * @brief Default constructor. */ - ZyDisBaseInstructionFormatter(); + BaseInstructionFormatter(); /** * @brief Constructor. * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol * resolver should be used. */ - explicit ZyDisBaseInstructionFormatter(ZyDisBaseSymbolResolver *symbolResolver); + explicit BaseInstructionFormatter(BaseSymbolResolver* symbolResolver); public: /** * @brief Destructor. */ - virtual ~ZyDisBaseInstructionFormatter(); + virtual ~BaseInstructionFormatter(); public: /** * @brief Formats a decoded instruction. * @param info The instruction info. * @return Pointer to the formatted instruction string. */ - const char* formatInstruction(const ZyDisInstructionInfo &info); + const char *formatInstruction(const InstructionInfo& info); public: /** * @brief Returns a pointer to the current symbol resolver. * @return Pointer to the current symbol resolver or @c NULL, if no symbol resolver is used. */ - ZyDisBaseSymbolResolver* getSymbolResolver() const; + BaseSymbolResolver* getSymbolResolver() const; /** * @brief Sets a new symbol resolver. * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol * resolver should be used. */ - void setSymbolResolver(ZyDisBaseSymbolResolver *symbolResolver); + void setSymbolResolver(BaseSymbolResolver* symbolResolver); }; -inline void ZyDisBaseInstructionFormatter::outputSetUppercase(bool uppercase) +inline void BaseInstructionFormatter::outputSetUppercase(bool uppercase) { m_outputUppercase = uppercase; } -inline char const* ZyDisBaseInstructionFormatter::registerToString(ZyDisRegister reg) const +inline char const *BaseInstructionFormatter::registerToString(Register reg) const { - if (reg == ZyDisRegister::NONE) + if (reg == Register::NONE) { return "error"; } return m_registerStrings[static_cast(reg) - 1]; } -inline char const* ZyDisBaseInstructionFormatter::resolveSymbol(const ZyDisInstructionInfo &info, - uint64_t address, uint64_t &offset) const +inline char const* BaseInstructionFormatter::resolveSymbol(const InstructionInfo& info, + uint64_t address, uint64_t& offset) const { if (m_symbolResolver) { @@ -211,110 +184,62 @@ inline char const* ZyDisBaseInstructionFormatter::resolveSymbol(const ZyDisInstr return nullptr; } -inline ZyDisBaseSymbolResolver* ZyDisBaseInstructionFormatter::getSymbolResolver() const +inline BaseSymbolResolver* BaseInstructionFormatter::getSymbolResolver() const { return m_symbolResolver; } -inline void ZyDisBaseInstructionFormatter::setSymbolResolver(ZyDisBaseSymbolResolver *symbolResolver) +inline void BaseInstructionFormatter::setSymbolResolver( + BaseSymbolResolver* symbolResolver) { m_symbolResolver = symbolResolver; } -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* IntelInstructionFormatter ==================================================================== */ /** * @brief Intel syntax instruction formatter. */ -class ZyDisIntelInstructionFormatter : public ZyDisBaseInstructionFormatter +class IntelInstructionFormatter : public BaseInstructionFormatter { private: /** * @brief Appends an operand cast to the output string buffer. - * @param info The instruction info. * @param operand The operand. */ - void outputAppendOperandCast(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand); + void outputAppendOperandCast(const OperandInfo& operand); /** * @brief Formats the specified operand and appends the resulting string to the output * buffer. * @param info The instruction info. * @param operand The operand. */ - void formatOperand(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand); + void formatOperand(const InstructionInfo& info, const OperandInfo& operand); protected: /** * @brief Fills the internal string buffer with an intel style formatted instruction string. * @param info The instruction info. */ - void internalFormatInstruction(const ZyDisInstructionInfo &info) override; + void internalFormatInstruction(const InstructionInfo& info) override; public: /** * @brief Default constructor. */ - ZyDisIntelInstructionFormatter(); + IntelInstructionFormatter(); /** * @brief Constructor. * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol * resolver should be used. */ - explicit ZyDisIntelInstructionFormatter(ZyDisBaseSymbolResolver *symbolResolver); + explicit IntelInstructionFormatter(BaseSymbolResolver* symbolResolver); /** * @brief Destructor. */ - ~ZyDisIntelInstructionFormatter() override; + ~IntelInstructionFormatter() override; }; -/////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * @brief Simple symbol resolver that only matches exact addresses. - */ -class ZyDisExactSymbolResolver : public ZyDisBaseSymbolResolver -{ -private: - std::unordered_map m_symbolMap; -public: - /** - * @brief Destructor. - */ - ~ZyDisExactSymbolResolver() override; -public: - /** - * @brief Resolves a symbol. - * @param info The instruction info. - * @param address The address. - * @param offset Reference to an unsigned 64 bit integer that receives an offset - * relative to the base address of the symbol. - * @return The name of the symbol, if the symbol was found, @c NULL if not. - */ - const char* resolveSymbol(const ZyDisInstructionInfo &info, uint64_t address, - uint64_t &offset) override; -public: - /** - * @brief Query if the given address is a known symbol. - * @param address The address. - * @return True if the address is known, false if not. - */ - bool containsSymbol(uint64_t address) const; - /** - * @brief Adds or changes a symbol. - * @param address The address. - * @param name The symbol name. - */ - void setSymbol(uint64_t address, const char* name); - /** - * @brief Removes the symbol described by address. This will invalidate all char pointers - * to the specific symbol name. - * @param address The address. - */ - void removeSymbol(uint64_t address); - /** - * @brief Clears the symbol tree. - */ - void clear(); -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////// +/* ============================================================================================== */ } + +#endif /* _ZYDIS_INSTRUCTIONFORMATTER_HPP_ */ diff --git a/Zydis/ZydisOpcodeTable.cpp b/Zydis/ZydisOpcodeTable.cpp new file mode 100644 index 0000000..bac0710 --- /dev/null +++ b/Zydis/ZydisOpcodeTable.cpp @@ -0,0 +1,9654 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include "ZydisOpcodeTable.hpp" + +namespace Zydis +{ + +namespace Internal +{ + +#define ZYDIS_INVALID 0 +#define NODE(type, n) (static_cast(type) << 12 | (n)) + +const OpcodeTreeNode optreeTable[][256] = +{ + { + /* 00 */ 0x0015, + /* 01 */ 0x0014, + /* 02 */ 0x0016, + /* 03 */ 0x0018, + /* 04 */ 0x0017, + /* 05 */ 0x0010, + /* 06 */ NODE(OpcodeTreeNodeType::MODE, 0x0000), + /* 07 */ NODE(OpcodeTreeNodeType::MODE, 0x0001), + /* 08 */ 0x0394, + /* 09 */ 0x0393, + /* 0A */ 0x0396, + /* 0B */ 0x0395, + /* 0C */ 0x0390, + /* 0D */ 0x038F, + /* 0E */ NODE(OpcodeTreeNodeType::MODE, 0x0002), + /* 0F */ NODE(OpcodeTreeNodeType::TABLE, 0x0001), + /* 10 */ 0x000B, + /* 11 */ 0x000A, + /* 12 */ 0x000C, + /* 13 */ 0x000E, + /* 14 */ 0x000D, + /* 15 */ 0x0006, + /* 16 */ NODE(OpcodeTreeNodeType::MODE, 0x0007), + /* 17 */ NODE(OpcodeTreeNodeType::MODE, 0x0008), + /* 18 */ 0x04FE, + /* 19 */ 0x04F7, + /* 1A */ 0x04F8, + /* 1B */ 0x04FB, + /* 1C */ 0x04FA, + /* 1D */ 0x04F9, + /* 1E */ NODE(OpcodeTreeNodeType::MODE, 0x0009), + /* 1F */ NODE(OpcodeTreeNodeType::MODE, 0x000A), + /* 20 */ 0x0026, + /* 21 */ 0x0027, + /* 22 */ 0x0025, + /* 23 */ 0x002C, + /* 24 */ 0x002D, + /* 25 */ 0x002E, + /* 26 */ ZYDIS_INVALID, + /* 27 */ NODE(OpcodeTreeNodeType::MODE, 0x000B), + /* 28 */ 0x0542, + /* 29 */ 0x0549, + /* 2A */ 0x0548, + /* 2B */ 0x054B, + /* 2C */ 0x054A, + /* 2D */ 0x0547, + /* 2E */ ZYDIS_INVALID, + /* 2F */ NODE(OpcodeTreeNodeType::MODE, 0x000C), + /* 30 */ 0x06B8, + /* 31 */ 0x06B9, + /* 32 */ 0x06B6, + /* 33 */ 0x06B7, + /* 34 */ 0x06BA, + /* 35 */ 0x06BB, + /* 36 */ ZYDIS_INVALID, + /* 37 */ NODE(OpcodeTreeNodeType::MODE, 0x000D), + /* 38 */ 0x006C, + /* 39 */ 0x006D, + /* 3A */ 0x006B, + /* 3B */ 0x006A, + /* 3C */ 0x0070, + /* 3D */ 0x006F, + /* 3E */ ZYDIS_INVALID, + /* 3F */ NODE(OpcodeTreeNodeType::MODE, 0x000E), + /* 40 */ 0x02AB, + /* 41 */ 0x02AC, + /* 42 */ 0x02B2, + /* 43 */ 0x02B1, + /* 44 */ 0x02B3, + /* 45 */ 0x02B4, + /* 46 */ 0x02AE, + /* 47 */ 0x02AD, + /* 48 */ 0x00A7, + /* 49 */ 0x00A6, + /* 4A */ 0x00A8, + /* 4B */ 0x00AA, + /* 4C */ 0x00A9, + /* 4D */ 0x00A2, + /* 4E */ 0x00A1, + /* 4F */ 0x00A3, + /* 50 */ 0x04B4, + /* 51 */ 0x04B9, + /* 52 */ 0x04B3, + /* 53 */ 0x04AE, + /* 54 */ 0x04AF, + /* 55 */ 0x04B0, + /* 56 */ 0x04B1, + /* 57 */ 0x04B2, + /* 58 */ 0x0449, + /* 59 */ 0x0447, + /* 5A */ 0x0448, + /* 5B */ 0x0442, + /* 5C */ 0x043E, + /* 5D */ 0x043D, + /* 5E */ 0x043F, + /* 5F */ 0x0441, + /* 60 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0007), + /* 61 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0008), + /* 62 */ NODE(OpcodeTreeNodeType::MODE, 0x0013), + /* 63 */ NODE(OpcodeTreeNodeType::MODE, 0x0014), + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ 0x04B7, + /* 69 */ 0x02A4, + /* 6A */ 0x04AB, + /* 6B */ 0x02A6, + /* 6C */ 0x02B5, + /* 6D */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0009), + /* 6E */ 0x039F, + /* 6F */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x000A), + /* 70 */ 0x02E8, + /* 71 */ 0x02E2, + /* 72 */ 0x02CA, + /* 73 */ 0x02DE, + /* 74 */ 0x02CE, + /* 75 */ 0x02E1, + /* 76 */ 0x02CB, + /* 77 */ 0x02C7, + /* 78 */ 0x02ED, + /* 79 */ 0x02E6, + /* 7A */ 0x02EB, + /* 7B */ 0x02E5, + /* 7C */ 0x02D5, + /* 7D */ 0x02D3, + /* 7E */ 0x02D8, + /* 7F */ 0x02D1, + /* 80 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0013), + /* 81 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0014), + /* 82 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0015), + /* 83 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0016), + /* 84 */ 0x055C, + /* 85 */ 0x055D, + /* 86 */ 0x06A8, + /* 87 */ 0x06A7, + /* 88 */ 0x0334, + /* 89 */ 0x0336, + /* 8A */ 0x0335, + /* 8B */ 0x0331, + /* 8C */ 0x031D, + /* 8D */ 0x02F4, + /* 8E */ 0x031C, + /* 8F */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0017), + /* 90 */ 0x06A9, + /* 91 */ 0x06AB, + /* 92 */ 0x06AA, + /* 93 */ 0x06A3, + /* 94 */ 0x06A2, + /* 95 */ 0x06A4, + /* 96 */ 0x06A6, + /* 97 */ 0x06A5, + /* 98 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x000B), + /* 99 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x000C), + /* 9A */ NODE(OpcodeTreeNodeType::MODE, 0x001D), + /* 9B */ 0x069D, + /* 9C */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x000D), + /* 9D */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x000E), + /* 9E */ 0x04EF, + /* 9F */ 0x02EF, + /* A0 */ 0x031B, + /* A1 */ 0x0320, + /* A2 */ 0x031F, + /* A3 */ 0x031E, + /* A4 */ 0x0367, + /* A5 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x000F), + /* A6 */ 0x0076, + /* A7 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0010), + /* A8 */ 0x055E, + /* A9 */ 0x055B, + /* AA */ 0x053D, + /* AB */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0011), + /* AC */ 0x0300, + /* AD */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0012), + /* AE */ 0x0501, + /* AF */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0013), + /* B0 */ 0x0317, + /* B1 */ 0x031A, + /* B2 */ 0x0318, + /* B3 */ 0x0319, + /* B4 */ 0x0321, + /* B5 */ 0x032C, + /* B6 */ 0x032B, + /* B7 */ 0x032A, + /* B8 */ 0x032D, + /* B9 */ 0x0330, + /* BA */ 0x032F, + /* BB */ 0x032E, + /* BC */ 0x0329, + /* BD */ 0x0324, + /* BE */ 0x0323, + /* BF */ 0x0322, + /* C0 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0018), + /* C1 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0019), + /* C2 */ 0x04D9, + /* C3 */ 0x04D8, + /* C4 */ NODE(OpcodeTreeNodeType::VEX, 0x0000), + /* C5 */ NODE(OpcodeTreeNodeType::VEX, 0x0001), + /* C6 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x001E), + /* C7 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x001F), + /* C8 */ 0x00B4, + /* C9 */ 0x02F5, + /* CA */ 0x04DA, + /* CB */ 0x04DB, + /* CC */ 0x02BB, + /* CD */ 0x02B9, + /* CE */ NODE(OpcodeTreeNodeType::MODE, 0x0027), + /* CF */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0017), + /* D0 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0020), + /* D1 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0021), + /* D2 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0022), + /* D3 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0023), + /* D4 */ NODE(OpcodeTreeNodeType::MODE, 0x0028), + /* D5 */ NODE(OpcodeTreeNodeType::MODE, 0x0029), + /* D6 */ NODE(OpcodeTreeNodeType::MODE, 0x002A), + /* D7 */ 0x06B2, + /* D8 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0015), + /* D9 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0016), + /* DA */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0017), + /* DB */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0018), + /* DC */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0019), + /* DD */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x001A), + /* DE */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x001B), + /* DF */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x001C), + /* E0 */ 0x0306, + /* E1 */ 0x0305, + /* E2 */ 0x0304, + /* E3 */ NODE(OpcodeTreeNodeType::ADDRESS_SIZE, 0x0000), + /* E4 */ 0x02A9, + /* E5 */ 0x02AA, + /* E6 */ 0x039D, + /* E7 */ 0x039E, + /* E8 */ 0x004E, + /* E9 */ 0x02DB, + /* EA */ NODE(OpcodeTreeNodeType::MODE, 0x002B), + /* EB */ 0x02DD, + /* EC */ 0x02A7, + /* ED */ 0x02A8, + /* EE */ 0x039B, + /* EF */ 0x039C, + /* F0 */ 0x02FF, + /* F1 */ 0x02BA, + /* F2 */ 0x04D7, + /* F3 */ 0x04D6, + /* F4 */ 0x029D, + /* F5 */ 0x0059, + /* F6 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x002C), + /* F7 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x002D), + /* F8 */ 0x0053, + /* F9 */ 0x0538, + /* FA */ 0x0057, + /* FB */ 0x053B, + /* FC */ 0x0054, + /* FD */ 0x0539, + /* FE */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x002E), + /* FF */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x002F), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0000), + /* 01 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0000), + /* 02 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0003), + /* 03 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0004), + /* 04 */ ZYDIS_INVALID, + /* 05 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0005), + /* 06 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0006), + /* 07 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0007), + /* 08 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0008), + /* 09 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0009), + /* 0A */ ZYDIS_INVALID, + /* 0B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x000A), + /* 0C */ ZYDIS_INVALID, + /* 0D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x000B), + /* 0E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x000C), + /* 0F */ NODE(OpcodeTreeNodeType::AMD3DNOW, 0x0000), + /* 10 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x000D), + /* 11 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x000E), + /* 12 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0001), + /* 13 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0011), + /* 14 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0012), + /* 15 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0013), + /* 16 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0002), + /* 17 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0016), + /* 18 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0017), + /* 19 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0018), + /* 1A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0019), + /* 1B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x001A), + /* 1C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x001B), + /* 1D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x001C), + /* 1E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x001D), + /* 1F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x001E), + /* 20 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x001F), + /* 21 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0020), + /* 22 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0021), + /* 23 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0022), + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0023), + /* 29 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0024), + /* 2A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0025), + /* 2B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0026), + /* 2C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0027), + /* 2D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0028), + /* 2E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0029), + /* 2F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x002A), + /* 30 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x002B), + /* 31 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x002C), + /* 32 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x002D), + /* 33 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x002E), + /* 34 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x002F), + /* 35 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0030), + /* 36 */ ZYDIS_INVALID, + /* 37 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0031), + /* 38 */ NODE(OpcodeTreeNodeType::TABLE, 0x0002), + /* 39 */ ZYDIS_INVALID, + /* 3A */ NODE(OpcodeTreeNodeType::TABLE, 0x0003), + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0081), + /* 41 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0082), + /* 42 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0083), + /* 43 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0084), + /* 44 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0085), + /* 45 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0086), + /* 46 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0087), + /* 47 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0088), + /* 48 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0089), + /* 49 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x008A), + /* 4A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x008B), + /* 4B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x008C), + /* 4C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x008D), + /* 4D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x008E), + /* 4E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x008F), + /* 4F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0090), + /* 50 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0091), + /* 51 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0092), + /* 52 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0093), + /* 53 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0094), + /* 54 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0095), + /* 55 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0096), + /* 56 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0097), + /* 57 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0098), + /* 58 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0099), + /* 59 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x009A), + /* 5A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x009B), + /* 5B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x009C), + /* 5C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x009D), + /* 5D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x009E), + /* 5E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x009F), + /* 5F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A0), + /* 60 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A1), + /* 61 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A2), + /* 62 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A3), + /* 63 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A4), + /* 64 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A5), + /* 65 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A6), + /* 66 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A7), + /* 67 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A8), + /* 68 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00A9), + /* 69 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00AA), + /* 6A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00AB), + /* 6B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00AC), + /* 6C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00AD), + /* 6D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00AE), + /* 6E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00AF), + /* 6F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B0), + /* 70 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B1), + /* 71 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B2), + /* 72 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B3), + /* 73 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B4), + /* 74 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B5), + /* 75 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B6), + /* 76 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B7), + /* 77 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B8), + /* 78 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00B9), + /* 79 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00BA), + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00BB), + /* 7D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00BC), + /* 7E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00BD), + /* 7F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00BE), + /* 80 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00BF), + /* 81 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C0), + /* 82 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C1), + /* 83 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C2), + /* 84 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C3), + /* 85 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C4), + /* 86 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C5), + /* 87 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C6), + /* 88 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C7), + /* 89 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C8), + /* 8A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00C9), + /* 8B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00CA), + /* 8C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00CB), + /* 8D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00CC), + /* 8E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00CD), + /* 8F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00CE), + /* 90 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00CF), + /* 91 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D0), + /* 92 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D1), + /* 93 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D2), + /* 94 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D3), + /* 95 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D4), + /* 96 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D5), + /* 97 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D6), + /* 98 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D7), + /* 99 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D8), + /* 9A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00D9), + /* 9B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00DA), + /* 9C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00DB), + /* 9D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00DC), + /* 9E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00DD), + /* 9F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00DE), + /* A0 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00DF), + /* A1 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E0), + /* A2 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E1), + /* A3 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E2), + /* A4 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E3), + /* A5 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E4), + /* A6 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0003), + /* A7 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0004), + /* A8 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E7), + /* A9 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E8), + /* AA */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E9), + /* AB */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00EA), + /* AC */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00EB), + /* AD */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00EC), + /* AE */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0005), + /* AF */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00EF), + /* B0 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F0), + /* B1 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F1), + /* B2 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F2), + /* B3 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F3), + /* B4 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F4), + /* B5 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F5), + /* B6 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F6), + /* B7 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F7), + /* B8 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F8), + /* B9 */ ZYDIS_INVALID, + /* BA */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00F9), + /* BB */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00FA), + /* BC */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00FB), + /* BD */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00FC), + /* BE */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00FD), + /* BF */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00FE), + /* C0 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00FF), + /* C1 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0100), + /* C2 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0101), + /* C3 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0102), + /* C4 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0103), + /* C5 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0104), + /* C6 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0105), + /* C7 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0006), + /* C8 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0108), + /* C9 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0109), + /* CA */ NODE(OpcodeTreeNodeType::MANDATORY, 0x010A), + /* CB */ NODE(OpcodeTreeNodeType::MANDATORY, 0x010B), + /* CC */ NODE(OpcodeTreeNodeType::MANDATORY, 0x010C), + /* CD */ NODE(OpcodeTreeNodeType::MANDATORY, 0x010D), + /* CE */ NODE(OpcodeTreeNodeType::MANDATORY, 0x010E), + /* CF */ NODE(OpcodeTreeNodeType::MANDATORY, 0x010F), + /* D0 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0110), + /* D1 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0111), + /* D2 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0112), + /* D3 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0113), + /* D4 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0114), + /* D5 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0115), + /* D6 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0116), + /* D7 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0117), + /* D8 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0118), + /* D9 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0119), + /* DA */ NODE(OpcodeTreeNodeType::MANDATORY, 0x011A), + /* DB */ NODE(OpcodeTreeNodeType::MANDATORY, 0x011B), + /* DC */ NODE(OpcodeTreeNodeType::MANDATORY, 0x011C), + /* DD */ NODE(OpcodeTreeNodeType::MANDATORY, 0x011D), + /* DE */ NODE(OpcodeTreeNodeType::MANDATORY, 0x011E), + /* DF */ NODE(OpcodeTreeNodeType::MANDATORY, 0x011F), + /* E0 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0120), + /* E1 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0121), + /* E2 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0122), + /* E3 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0123), + /* E4 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0124), + /* E5 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0125), + /* E6 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0126), + /* E7 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0127), + /* E8 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0128), + /* E9 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0129), + /* EA */ NODE(OpcodeTreeNodeType::MANDATORY, 0x012A), + /* EB */ NODE(OpcodeTreeNodeType::MANDATORY, 0x012B), + /* EC */ NODE(OpcodeTreeNodeType::MANDATORY, 0x012C), + /* ED */ NODE(OpcodeTreeNodeType::MANDATORY, 0x012D), + /* EE */ NODE(OpcodeTreeNodeType::MANDATORY, 0x012E), + /* EF */ NODE(OpcodeTreeNodeType::MANDATORY, 0x012F), + /* F0 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0130), + /* F1 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0131), + /* F2 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0132), + /* F3 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0133), + /* F4 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0134), + /* F5 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0135), + /* F6 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0136), + /* F7 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0007), + /* F8 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0138), + /* F9 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0139), + /* FA */ NODE(OpcodeTreeNodeType::MANDATORY, 0x013A), + /* FB */ NODE(OpcodeTreeNodeType::MANDATORY, 0x013B), + /* FC */ NODE(OpcodeTreeNodeType::MANDATORY, 0x013C), + /* FD */ NODE(OpcodeTreeNodeType::MANDATORY, 0x013D), + /* FE */ NODE(OpcodeTreeNodeType::MANDATORY, 0x013E), + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0032), + /* 01 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0033), + /* 02 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0034), + /* 03 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0035), + /* 04 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0036), + /* 05 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0037), + /* 06 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0038), + /* 07 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0039), + /* 08 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x003A), + /* 09 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x003B), + /* 0A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x003C), + /* 0B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x003D), + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x003E), + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x003F), + /* 15 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0040), + /* 16 */ ZYDIS_INVALID, + /* 17 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0041), + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0042), + /* 1D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0043), + /* 1E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0044), + /* 1F */ ZYDIS_INVALID, + /* 20 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0045), + /* 21 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0046), + /* 22 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0047), + /* 23 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0048), + /* 24 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0049), + /* 25 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x004A), + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x004B), + /* 29 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x004C), + /* 2A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x004D), + /* 2B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x004E), + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x004F), + /* 31 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0050), + /* 32 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0051), + /* 33 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0052), + /* 34 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0053), + /* 35 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0054), + /* 36 */ ZYDIS_INVALID, + /* 37 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0055), + /* 38 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0056), + /* 39 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0057), + /* 3A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0058), + /* 3B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0059), + /* 3C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x005A), + /* 3D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x005B), + /* 3E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x005C), + /* 3F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x005D), + /* 40 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x005E), + /* 41 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x005F), + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0060), + /* 81 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0061), + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0062), + /* DC */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0063), + /* DD */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0064), + /* DE */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0065), + /* DF */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0066), + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0067), + /* F1 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0068), + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0069), + /* 09 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x006A), + /* 0A */ NODE(OpcodeTreeNodeType::MANDATORY, 0x006B), + /* 0B */ NODE(OpcodeTreeNodeType::MANDATORY, 0x006C), + /* 0C */ NODE(OpcodeTreeNodeType::MANDATORY, 0x006D), + /* 0D */ NODE(OpcodeTreeNodeType::MANDATORY, 0x006E), + /* 0E */ NODE(OpcodeTreeNodeType::MANDATORY, 0x006F), + /* 0F */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0070), + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0071), + /* 15 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0072), + /* 16 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0073), + /* 17 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0074), + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0075), + /* 21 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0076), + /* 22 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0077), + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0078), + /* 41 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0079), + /* 42 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x007A), + /* 43 */ ZYDIS_INVALID, + /* 44 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x007B), + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x007C), + /* 61 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x007D), + /* 62 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x007E), + /* 63 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x007F), + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0080), + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ 0x05E6, + /* 11 */ 0x05E5, + /* 12 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0008), + /* 13 */ 0x05CC, + /* 14 */ 0x0698, + /* 15 */ 0x0696, + /* 16 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0009), + /* 17 */ 0x05C7, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x05B8, + /* 29 */ 0x05B7, + /* 2A */ ZYDIS_INVALID, + /* 2B */ 0x05D2, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ 0x0694, + /* 2F */ 0x0581, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ 0x05CE, + /* 51 */ 0x0689, + /* 52 */ 0x0684, + /* 53 */ 0x067E, + /* 54 */ 0x0575, + /* 55 */ 0x0573, + /* 56 */ 0x05F6, + /* 57 */ 0x069A, + /* 58 */ 0x0567, + /* 59 */ 0x05EF, + /* 5A */ 0x0587, + /* 5B */ 0x0583, + /* 5C */ 0x068E, + /* 5D */ 0x05AF, + /* 5E */ 0x0593, + /* 5F */ 0x05A9, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ NODE(OpcodeTreeNodeType::VEXL, 0x0000), + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x000A), + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ 0x057D, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ 0x0687, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ 0x05E4, + /* 11 */ 0x05E3, + /* 12 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x000B), + /* 13 */ 0x05CA, + /* 14 */ 0x0697, + /* 15 */ 0x0695, + /* 16 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x000C), + /* 17 */ 0x05C5, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x05B5, + /* 29 */ 0x05B6, + /* 2A */ ZYDIS_INVALID, + /* 2B */ 0x05D1, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ 0x0693, + /* 2F */ 0x0580, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ 0x05CD, + /* 51 */ 0x0688, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ 0x0574, + /* 55 */ 0x0572, + /* 56 */ 0x05F5, + /* 57 */ 0x0699, + /* 58 */ 0x0566, + /* 59 */ 0x05EE, + /* 5A */ 0x0585, + /* 5B */ 0x0586, + /* 5C */ 0x068D, + /* 5D */ 0x05AE, + /* 5E */ 0x0592, + /* 5F */ 0x05A8, + /* 60 */ 0x0679, + /* 61 */ 0x067C, + /* 62 */ 0x067A, + /* 63 */ 0x05FB, + /* 64 */ 0x0614, + /* 65 */ 0x0617, + /* 66 */ 0x0615, + /* 67 */ 0x05FD, + /* 68 */ 0x0675, + /* 69 */ 0x0678, + /* 6A */ 0x0676, + /* 6B */ 0x05FA, + /* 6C */ 0x067B, + /* 6D */ 0x0677, + /* 6E */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0014), + /* 6F */ 0x05BF, + /* 70 */ 0x0654, + /* 71 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x001B), + /* 72 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x001C), + /* 73 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x001D), + /* 74 */ 0x060E, + /* 75 */ 0x0611, + /* 76 */ 0x060F, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ 0x059C, + /* 7D */ 0x059E, + /* 7E */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0015), + /* 7F */ 0x05C0, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ 0x057C, + /* C3 */ ZYDIS_INVALID, + /* C4 */ 0x0630, + /* C5 */ 0x0623, + /* C6 */ 0x0686, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ 0x056A, + /* D1 */ 0x066B, + /* D2 */ 0x0665, + /* D3 */ 0x0669, + /* D4 */ 0x0600, + /* D5 */ 0x0650, + /* D6 */ 0x05D4, + /* D7 */ NODE(OpcodeTreeNodeType::VEXL, 0x0004), + /* D8 */ 0x0671, + /* D9 */ 0x0672, + /* DA */ 0x063C, + /* DB */ 0x0607, + /* DC */ 0x0603, + /* DD */ 0x0604, + /* DE */ 0x0636, + /* DF */ 0x0608, + /* E0 */ 0x0609, + /* E1 */ 0x0663, + /* E2 */ 0x0662, + /* E3 */ 0x060A, + /* E4 */ 0x064D, + /* E5 */ 0x064E, + /* E6 */ 0x058E, + /* E7 */ 0x05CF, + /* E8 */ 0x066F, + /* E9 */ 0x0670, + /* EA */ 0x063B, + /* EB */ 0x0651, + /* EC */ 0x0601, + /* ED */ 0x0602, + /* EE */ 0x0635, + /* EF */ 0x067D, + /* F0 */ ZYDIS_INVALID, + /* F1 */ NODE(OpcodeTreeNodeType::VEXL, 0x0005), + /* F2 */ NODE(OpcodeTreeNodeType::VEXL, 0x0006), + /* F3 */ NODE(OpcodeTreeNodeType::VEXL, 0x0007), + /* F4 */ ZYDIS_INVALID, + /* F5 */ 0x0632, + /* F6 */ 0x0652, + /* F7 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x000D), + /* F8 */ 0x066C, + /* F9 */ 0x0673, + /* FA */ 0x066D, + /* FB */ 0x066E, + /* FC */ 0x05FE, + /* FD */ 0x0605, + /* FE */ 0x05FF, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0653, + /* 01 */ 0x0627, + /* 02 */ 0x0625, + /* 03 */ 0x0626, + /* 04 */ 0x0631, + /* 05 */ 0x062B, + /* 06 */ 0x0629, + /* 07 */ 0x062A, + /* 08 */ 0x0657, + /* 09 */ 0x0659, + /* 0A */ 0x0658, + /* 0B */ 0x064C, + /* 0C */ NODE(OpcodeTreeNodeType::VEXW, 0x0000), + /* 0D */ NODE(OpcodeTreeNodeType::VEXW, 0x0001), + /* 0E */ NODE(OpcodeTreeNodeType::VEXW, 0x0002), + /* 0F */ NODE(OpcodeTreeNodeType::VEXW, 0x0003), + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ 0x0674, + /* 18 */ NODE(OpcodeTreeNodeType::VEXW, 0x0004), + /* 19 */ NODE(OpcodeTreeNodeType::VEXW, 0x0005), + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ 0x05F7, + /* 1D */ 0x05F9, + /* 1E */ 0x05F8, + /* 1F */ ZYDIS_INVALID, + /* 20 */ 0x0642, + /* 21 */ 0x0640, + /* 22 */ 0x0641, + /* 23 */ 0x0643, + /* 24 */ 0x0644, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x064B, + /* 29 */ 0x0610, + /* 2A */ 0x05D0, + /* 2B */ 0x05FC, + /* 2C */ NODE(OpcodeTreeNodeType::VEXW, 0x0006), + /* 2D */ NODE(OpcodeTreeNodeType::VEXW, 0x0007), + /* 2E */ NODE(OpcodeTreeNodeType::VEXW, 0x0008), + /* 2F */ NODE(OpcodeTreeNodeType::VEXW, 0x0009), + /* 30 */ 0x0647, + /* 31 */ 0x0645, + /* 32 */ 0x0646, + /* 33 */ 0x0649, + /* 34 */ 0x064A, + /* 35 */ 0x0648, + /* 36 */ ZYDIS_INVALID, + /* 37 */ 0x0616, + /* 38 */ 0x0639, + /* 39 */ 0x063A, + /* 3A */ 0x063E, + /* 3B */ 0x063D, + /* 3C */ 0x0633, + /* 3D */ 0x0634, + /* 3E */ 0x0638, + /* 3F */ 0x0637, + /* 40 */ 0x064F, + /* 41 */ 0x0628, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ 0x0570, + /* DC */ 0x056E, + /* DD */ 0x056F, + /* DE */ 0x056C, + /* DF */ 0x056D, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ NODE(OpcodeTreeNodeType::VEXW, 0x000A), + /* 05 */ NODE(OpcodeTreeNodeType::VEXW, 0x000B), + /* 06 */ NODE(OpcodeTreeNodeType::VEXW, 0x000C), + /* 07 */ ZYDIS_INVALID, + /* 08 */ 0x0681, + /* 09 */ 0x0680, + /* 0A */ 0x0683, + /* 0B */ 0x0682, + /* 0C */ 0x0577, + /* 0D */ 0x0576, + /* 0E */ 0x060C, + /* 0F */ 0x0606, + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ NODE(OpcodeTreeNodeType::VEXW, 0x000D), + /* 15 */ 0x0624, + /* 16 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0016), + /* 17 */ 0x059B, + /* 18 */ NODE(OpcodeTreeNodeType::VEXW, 0x0011), + /* 19 */ NODE(OpcodeTreeNodeType::VEXW, 0x0012), + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ NODE(OpcodeTreeNodeType::VEXW, 0x0013), + /* 21 */ 0x05A1, + /* 22 */ NODE(OpcodeTreeNodeType::MODE, 0x0025), + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ 0x0597, + /* 41 */ 0x0596, + /* 42 */ 0x05E7, + /* 43 */ ZYDIS_INVALID, + /* 44 */ 0x060D, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ NODE(OpcodeTreeNodeType::VEXW, 0x0016), + /* 4B */ NODE(OpcodeTreeNodeType::VEXW, 0x0017), + /* 4C */ NODE(OpcodeTreeNodeType::VEXW, 0x0018), + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ 0x0613, + /* 61 */ 0x0612, + /* 62 */ 0x0619, + /* 63 */ 0x0618, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ 0x0571, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x000E), + /* 11 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x000F), + /* 12 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0010), + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0011), + /* 17 */ ZYDIS_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ 0x058B, + /* 2B */ ZYDIS_INVALID, + /* 2C */ 0x0591, + /* 2D */ 0x058D, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ 0x068B, + /* 52 */ 0x0685, + /* 53 */ 0x067F, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ 0x0569, + /* 59 */ 0x05F1, + /* 5A */ 0x058C, + /* 5B */ 0x058F, + /* 5C */ 0x0690, + /* 5D */ 0x05B1, + /* 5E */ 0x0595, + /* 5F */ 0x05AB, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ 0x05C2, + /* 70 */ 0x0655, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ 0x05D3, + /* 7F */ 0x05C1, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ 0x057F, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ 0x0582, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ ZYDIS_INVALID, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0012), + /* 11 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0013), + /* 12 */ NODE(OpcodeTreeNodeType::MODRM_MOD, 0x0014), + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ 0x058A, + /* 2B */ ZYDIS_INVALID, + /* 2C */ 0x0590, + /* 2D */ 0x0588, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ 0x068A, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ 0x0568, + /* 59 */ 0x05F0, + /* 5A */ 0x0589, + /* 5B */ ZYDIS_INVALID, + /* 5C */ 0x068F, + /* 5D */ 0x05B0, + /* 5E */ 0x0594, + /* 5F */ 0x05AA, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ 0x0656, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ 0x059D, + /* 7D */ 0x059F, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ ZYDIS_INVALID, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ ZYDIS_INVALID, + /* 8F */ ZYDIS_INVALID, + /* 90 */ ZYDIS_INVALID, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ ZYDIS_INVALID, + /* 95 */ ZYDIS_INVALID, + /* 96 */ ZYDIS_INVALID, + /* 97 */ ZYDIS_INVALID, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ ZYDIS_INVALID, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ ZYDIS_INVALID, + /* 9F */ ZYDIS_INVALID, + /* A0 */ ZYDIS_INVALID, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ ZYDIS_INVALID, + /* A5 */ ZYDIS_INVALID, + /* A6 */ ZYDIS_INVALID, + /* A7 */ ZYDIS_INVALID, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ ZYDIS_INVALID, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ ZYDIS_INVALID, + /* AF */ ZYDIS_INVALID, + /* B0 */ ZYDIS_INVALID, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ ZYDIS_INVALID, + /* B5 */ ZYDIS_INVALID, + /* B6 */ ZYDIS_INVALID, + /* B7 */ ZYDIS_INVALID, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ ZYDIS_INVALID, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ ZYDIS_INVALID, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ 0x057E, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ 0x056B, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ 0x0584, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ 0x05A2, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, +}; + +const OpcodeTreeNode optreeModrmMod[][2] = +{ + { + /* 00 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0001), + /* 01 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0002), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x000F), + /* 01 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0010), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0014), + /* 01 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0015), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E5), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00E6), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00ED), + /* 01 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x00EE), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0106), + /* 01 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0107), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(OpcodeTreeNodeType::MANDATORY, 0x0137), + }, + { + /* 00 */ 0x05CB, + /* 01 */ 0x05C3, + }, + { + /* 00 */ 0x05C6, + /* 01 */ 0x05C8, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x001A), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05C9, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05C4, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05A3, + }, + { + /* 00 */ 0x05E2, + /* 01 */ 0x05DF, + }, + { + /* 00 */ 0x05E0, + /* 01 */ 0x05E1, + }, + { + /* 00 */ 0x05DE, + /* 01 */ 0x05DD, + }, + { + /* 00 */ 0x05DB, + /* 01 */ 0x05DC, + }, + { + /* 00 */ 0x05DA, + /* 01 */ 0x05D9, + }, + { + /* 00 */ 0x05D8, + /* 01 */ 0x05D7, + }, + { + /* 00 */ 0x05BE, + /* 01 */ 0x05BD, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0024), + /* 01 */ NODE(OpcodeTreeNodeType::X87, 0x0000), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0025), + /* 01 */ NODE(OpcodeTreeNodeType::X87, 0x0001), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0026), + /* 01 */ NODE(OpcodeTreeNodeType::X87, 0x0002), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0027), + /* 01 */ NODE(OpcodeTreeNodeType::X87, 0x0003), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0028), + /* 01 */ NODE(OpcodeTreeNodeType::X87, 0x0004), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0029), + /* 01 */ NODE(OpcodeTreeNodeType::X87, 0x0005), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x002A), + /* 01 */ NODE(OpcodeTreeNodeType::X87, 0x0006), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x002B), + /* 01 */ NODE(OpcodeTreeNodeType::X87, 0x0007), + }, +}; + +const OpcodeTreeNode optreeModrmReg[][8] = +{ + { + /* 00 */ 0x0531, + /* 01 */ 0x0541, + /* 02 */ 0x02FC, + /* 03 */ 0x0309, + /* 04 */ 0x0598, + /* 05 */ 0x0599, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0516, + /* 01 */ 0x052F, + /* 02 */ 0x02F9, + /* 03 */ 0x02FB, + /* 04 */ 0x0533, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x02FE, + /* 07 */ 0x02C0, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0000), + /* 01 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0001), + /* 02 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0002), + /* 03 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0003), + /* 04 */ 0x0532, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x02FD, + /* 07 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0004), + }, + { + /* 00 */ 0x0455, + /* 01 */ 0x0456, + /* 02 */ 0x0457, + /* 03 */ 0x0458, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0486, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0479, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x0470, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0485, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0478, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x0473, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x047E, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0475, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x0468, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x047C, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0476, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x046A, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0482, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x046D, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0481, + /* 03 */ 0x0480, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x046C, + /* 07 */ 0x046B, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0005), + /* 01 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0006), + /* 02 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0007), + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0008), + /* 01 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x0009), + /* 02 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x000A), + /* 03 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x000B), + /* 04 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x000C), + /* 05 */ NODE(OpcodeTreeNodeType::MODRM_RM, 0x000D), + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0296, + /* 01 */ 0x0295, + /* 02 */ 0x02F2, + /* 03 */ 0x053C, + /* 04 */ 0x06C0, + /* 05 */ 0x06BF, + /* 06 */ ZYDIS_INVALID, + /* 07 */ 0x0055, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ 0x02F7, + /* 06 */ 0x0310, + /* 07 */ 0x0515, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0043, + /* 05 */ 0x0049, + /* 06 */ 0x0047, + /* 07 */ 0x0045, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0006), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0015), + /* 07 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0016), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0017), + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0018), + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x04D3, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x000F, + /* 01 */ 0x0392, + /* 02 */ 0x0005, + /* 03 */ 0x04FF, + /* 04 */ 0x0028, + /* 05 */ 0x0544, + /* 06 */ 0x06BC, + /* 07 */ 0x006E, + }, + { + /* 00 */ 0x0013, + /* 01 */ 0x0391, + /* 02 */ 0x0009, + /* 03 */ 0x0500, + /* 04 */ 0x0029, + /* 05 */ 0x0543, + /* 06 */ 0x06B5, + /* 07 */ 0x0072, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODE, 0x0015), + /* 01 */ NODE(OpcodeTreeNodeType::MODE, 0x0016), + /* 02 */ NODE(OpcodeTreeNodeType::MODE, 0x0017), + /* 03 */ NODE(OpcodeTreeNodeType::MODE, 0x0018), + /* 04 */ NODE(OpcodeTreeNodeType::MODE, 0x0019), + /* 05 */ NODE(OpcodeTreeNodeType::MODE, 0x001A), + /* 06 */ NODE(OpcodeTreeNodeType::MODE, 0x001B), + /* 07 */ NODE(OpcodeTreeNodeType::MODE, 0x001C), + }, + { + /* 00 */ 0x0012, + /* 01 */ 0x0397, + /* 02 */ 0x0008, + /* 03 */ 0x04FD, + /* 04 */ 0x002B, + /* 05 */ 0x0545, + /* 06 */ 0x06B4, + /* 07 */ 0x0071, + }, + { + /* 00 */ 0x0440, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04DE, + /* 01 */ 0x04E6, + /* 02 */ 0x04C6, + /* 03 */ 0x04D0, + /* 04 */ 0x0517, + /* 05 */ 0x0526, + /* 06 */ 0x051D, + /* 07 */ 0x04F3, + }, + { + /* 00 */ 0x04DF, + /* 01 */ 0x04E7, + /* 02 */ 0x04C7, + /* 03 */ 0x04CE, + /* 04 */ 0x051C, + /* 05 */ 0x0528, + /* 06 */ 0x051E, + /* 07 */ 0x04F6, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x068C, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x066A, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0664, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(OpcodeTreeNodeType::VEXL, 0x0001), + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0666, + /* 03 */ ZYDIS_INVALID, + /* 04 */ 0x0661, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(OpcodeTreeNodeType::VEXL, 0x0002), + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0668, + /* 03 */ 0x0667, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ NODE(OpcodeTreeNodeType::VEXL, 0x0003), + /* 07 */ 0x065C, + }, + { + /* 00 */ 0x0333, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0332, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04DD, + /* 01 */ 0x04E5, + /* 02 */ 0x04C8, + /* 03 */ 0x04CD, + /* 04 */ 0x0522, + /* 05 */ 0x0527, + /* 06 */ 0x051F, + /* 07 */ 0x04F1, + }, + { + /* 00 */ 0x04DC, + /* 01 */ 0x04E2, + /* 02 */ 0x04C5, + /* 03 */ 0x04CF, + /* 04 */ 0x0520, + /* 05 */ 0x052A, + /* 06 */ 0x0519, + /* 07 */ 0x04F4, + }, + { + /* 00 */ 0x04E1, + /* 01 */ 0x04E3, + /* 02 */ 0x04C3, + /* 03 */ 0x04CC, + /* 04 */ 0x0521, + /* 05 */ 0x0529, + /* 06 */ 0x051A, + /* 07 */ 0x04F2, + }, + { + /* 00 */ 0x04E0, + /* 01 */ 0x04E4, + /* 02 */ 0x04C4, + /* 03 */ 0x04CB, + /* 04 */ 0x0518, + /* 05 */ 0x0525, + /* 06 */ 0x051B, + /* 07 */ 0x04F5, + }, + { + /* 00 */ 0x00BB, + /* 01 */ 0x01CF, + /* 02 */ 0x0119, + /* 03 */ 0x013D, + /* 04 */ 0x022C, + /* 05 */ 0x0245, + /* 06 */ 0x0166, + /* 07 */ 0x0171, + }, + { + /* 00 */ 0x01BC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x01FF, + /* 03 */ 0x020B, + /* 04 */ 0x01C3, + /* 05 */ 0x01C2, + /* 06 */ 0x01EB, + /* 07 */ 0x01EA, + }, + { + /* 00 */ 0x019A, + /* 01 */ 0x01A8, + /* 02 */ 0x019C, + /* 03 */ 0x019F, + /* 04 */ 0x01B3, + /* 05 */ 0x01B5, + /* 06 */ 0x01A1, + /* 07 */ 0x01A3, + }, + { + /* 00 */ 0x01A4, + /* 01 */ 0x01B1, + /* 02 */ 0x01AB, + /* 03 */ 0x01AD, + /* 04 */ ZYDIS_INVALID, + /* 05 */ 0x01BA, + /* 06 */ ZYDIS_INVALID, + /* 07 */ 0x020A, + }, + { + /* 00 */ 0x00BA, + /* 01 */ 0x01D2, + /* 02 */ 0x0118, + /* 03 */ 0x013E, + /* 04 */ 0x022B, + /* 05 */ 0x0243, + /* 06 */ 0x0158, + /* 07 */ 0x017A, + }, + { + /* 00 */ 0x01BB, + /* 01 */ 0x01AF, + /* 02 */ 0x01FE, + /* 03 */ 0x0209, + /* 04 */ 0x01F3, + /* 05 */ ZYDIS_INVALID, + /* 06 */ 0x01E8, + /* 07 */ 0x01ED, + }, + { + /* 00 */ 0x019B, + /* 01 */ 0x01A7, + /* 02 */ 0x019D, + /* 03 */ 0x019E, + /* 04 */ 0x01B2, + /* 05 */ 0x01B4, + /* 06 */ 0x01A0, + /* 07 */ 0x01A2, + }, + { + /* 00 */ 0x01A6, + /* 01 */ 0x01B0, + /* 02 */ 0x01AA, + /* 03 */ 0x01AE, + /* 04 */ 0x00D2, + /* 05 */ 0x01A5, + /* 06 */ 0x00D3, + /* 07 */ 0x01AC, + }, + { + /* 00 */ 0x0557, + /* 01 */ 0x0558, + /* 02 */ 0x038E, + /* 03 */ 0x0385, + /* 04 */ 0x037E, + /* 05 */ 0x02A5, + /* 06 */ 0x00AC, + /* 07 */ 0x02A0, + }, + { + /* 00 */ 0x0559, + /* 01 */ 0x055A, + /* 02 */ 0x038D, + /* 03 */ 0x0384, + /* 04 */ 0x037D, + /* 05 */ 0x02A3, + /* 06 */ 0x00AB, + /* 07 */ 0x02A1, + }, + { + /* 00 */ 0x02AF, + /* 01 */ 0x00A4, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02B0, + /* 01 */ 0x00A5, + /* 02 */ NODE(OpcodeTreeNodeType::MODE, 0x002C), + /* 03 */ 0x004C, + /* 04 */ 0x02D9, + /* 05 */ 0x02DA, + /* 06 */ 0x04B8, + /* 07 */ ZYDIS_INVALID, + }, +}; + +const OpcodeTreeNode optreeModrmRm[][8] = +{ + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0000), + /* 02 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0001), + /* 03 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0002), + /* 04 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0003), + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0315, + /* 01 */ 0x0383, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06B1, + /* 01 */ 0x06C1, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0004), + /* 01 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0005), + /* 02 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0006), + /* 03 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0007), + /* 04 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0008), + /* 05 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0009), + /* 06 */ NODE(OpcodeTreeNodeType::VENDOR, 0x000A), + /* 07 */ NODE(OpcodeTreeNodeType::VENDOR, 0x000B), + }, + { + /* 00 */ 0x0550, + /* 01 */ NODE(OpcodeTreeNodeType::VENDOR, 0x000C), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0316, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06C2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06C3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06C4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06AF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06AC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06AE, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06AD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06B0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + }, +}; + +const OpcodeTreeNode optreeMandatory[][4] = +{ + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0000), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0001), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0002), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02F0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0307, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0551, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0058, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0556, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02BD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x069E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0561, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0454, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0189, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0379, + /* 01 */ 0x0368, + /* 02 */ 0x0371, + /* 03 */ 0x0377, + }, + { + /* 00 */ 0x0378, + /* 01 */ 0x036A, + /* 02 */ 0x0370, + /* 03 */ 0x0376, + }, + { + /* 00 */ 0x0355, + /* 01 */ 0x0345, + /* 02 */ 0x036D, + /* 03 */ 0x0353, + }, + { + /* 00 */ 0x034C, + /* 01 */ 0x0346, + /* 02 */ 0x036E, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0354, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0352, + }, + { + /* 00 */ 0x0565, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0564, + }, + { + /* 00 */ 0x0563, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0562, + }, + { + /* 00 */ 0x0350, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x036B, + /* 03 */ 0x034E, + }, + { + /* 00 */ 0x0351, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x036C, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x034F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x034D, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0003), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x038A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x038B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x038C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0389, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0386, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0387, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0388, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0325, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0328, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0327, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0326, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x033A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0338, + }, + { + /* 00 */ 0x0339, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0337, + }, + { + /* 00 */ 0x008D, + /* 01 */ 0x0093, + /* 02 */ 0x0094, + /* 03 */ 0x008C, + }, + { + /* 00 */ 0x035C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x035B, + }, + { + /* 00 */ 0x009A, + /* 01 */ 0x009B, + /* 02 */ 0x009C, + /* 03 */ 0x0098, + }, + { + /* 00 */ 0x0090, + /* 01 */ 0x0091, + /* 02 */ 0x0096, + /* 03 */ 0x008A, + }, + { + /* 00 */ 0x0560, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x055F, + }, + { + /* 00 */ 0x0082, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0081, + }, + { + /* 00 */ 0x069F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04D4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04D1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04D2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODE, 0x0003), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODE, 0x0004), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x029A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x045B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x045C, + }, + { + /* 00 */ 0x03FD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03FE, + }, + { + /* 00 */ 0x03FA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03F9, + }, + { + /* 00 */ 0x03FB, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03FC, + }, + { + /* 00 */ 0x040E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x040F, + }, + { + /* 00 */ 0x0405, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0404, + }, + { + /* 00 */ 0x0400, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0401, + }, + { + /* 00 */ 0x0402, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0403, + }, + { + /* 00 */ 0x0461, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0462, + }, + { + /* 00 */ 0x0466, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0465, + }, + { + /* 00 */ 0x0464, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0463, + }, + { + /* 00 */ 0x0431, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0432, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CA, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0037, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0036, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x049A, + }, + { + /* 00 */ 0x03A3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03A2, + }, + { + /* 00 */ 0x03A6, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03A7, + }, + { + /* 00 */ 0x03A4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03A5, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0426, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0424, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0425, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0428, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0429, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0427, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0430, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D1, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0359, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03AC, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042C, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042B, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042E, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042F, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x042D, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DA, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x041A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x041B, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0421, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0420, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0412, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0413, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0419, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0418, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0438, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03FF, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(OpcodeTreeNodeType::MODE, 0x0005), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(OpcodeTreeNodeType::MODE, 0x0006), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0023, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0021, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0022, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x001F, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0020, + }, + { + /* 00 */ 0x033B, + /* 01 */ 0x0086, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x033C, + /* 01 */ 0x0085, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04E9, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04E8, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04EB, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04EA, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0035, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0034, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CB, + }, + { + /* 00 */ 0x03BF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C0, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DF, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03E3, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0000), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x00B5, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0408, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x02B7, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0001), + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x00B2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x00B1, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x037C, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CC, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D5, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D4, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DE, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DD, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0024, + }, + { + /* 00 */ 0x0067, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0064, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0063, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0069, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0066, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0068, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0065, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0061, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0060, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0062, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x005F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0357, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0356, + }, + { + /* 00 */ 0x0535, + /* 01 */ 0x0536, + /* 02 */ 0x0537, + /* 03 */ 0x0534, + }, + { + /* 00 */ 0x04ED, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x04EE, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04C9, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x04CA, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0032, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0031, + }, + { + /* 00 */ 0x0030, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x002F, + }, + { + /* 00 */ 0x039A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0399, + }, + { + /* 00 */ 0x06BE, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x06BD, + }, + { + /* 00 */ 0x001A, + /* 01 */ 0x001B, + /* 02 */ 0x001C, + /* 03 */ 0x0019, + }, + { + /* 00 */ 0x0380, + /* 01 */ 0x0381, + /* 02 */ 0x0382, + /* 03 */ 0x037F, + }, + { + /* 00 */ 0x008F, + /* 01 */ 0x0092, + /* 02 */ 0x0095, + /* 03 */ 0x008B, + }, + { + /* 00 */ 0x0088, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x0099, + /* 03 */ 0x008E, + }, + { + /* 00 */ 0x054D, + /* 01 */ 0x054E, + /* 02 */ 0x054F, + /* 03 */ 0x054C, + }, + { + /* 00 */ 0x0312, + /* 01 */ 0x0313, + /* 02 */ 0x0314, + /* 03 */ 0x0311, + }, + { + /* 00 */ 0x00AE, + /* 01 */ 0x00AF, + /* 02 */ 0x00B0, + /* 03 */ 0x00AD, + }, + { + /* 00 */ 0x030D, + /* 01 */ 0x030E, + /* 02 */ 0x030F, + /* 03 */ 0x030C, + }, + { + /* 00 */ 0x04A2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A3, + }, + { + /* 00 */ 0x04A7, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A8, + }, + { + /* 00 */ 0x04A5, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A4, + }, + { + /* 00 */ 0x03AA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03AB, + }, + { + /* 00 */ 0x03D7, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D6, + }, + { + /* 00 */ 0x03DC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03DB, + }, + { + /* 00 */ 0x03D8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D9, + }, + { + /* 00 */ 0x03AD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03AE, + }, + { + /* 00 */ 0x049B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x049C, + }, + { + /* 00 */ 0x04A1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A0, + }, + { + /* 00 */ 0x049E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x049D, + }, + { + /* 00 */ 0x03A8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03A9, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04A6, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x049F, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0002), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0003), + }, + { + /* 00 */ 0x0363, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x034A, + /* 03 */ 0x0348, + }, + { + /* 00 */ 0x0460, + /* 01 */ 0x045F, + /* 02 */ 0x045E, + /* 03 */ 0x045D, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0004), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0005), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0006), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0007), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0008), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0009), + }, + { + /* 00 */ 0x03CD, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CE, + }, + { + /* 00 */ 0x03D2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03D3, + }, + { + /* 00 */ 0x03D0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03CF, + }, + { + /* 00 */ 0x00B3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0013), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0014), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x029C, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x029B, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x029F, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x029E, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0004), + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x035F, + /* 03 */ NODE(OpcodeTreeNodeType::OPERAND_SIZE, 0x0005), + }, + { + /* 00 */ 0x0362, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x034B, + /* 03 */ 0x0349, + }, + { + /* 00 */ 0x02E9, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02E3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02C9, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02DF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02CF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02E0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02CC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02C8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02EE, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02E7, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02EA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02E4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02D6, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02D4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02D7, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02D2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0512, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0507, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0506, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0509, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0508, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0505, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0514, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0511, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0513, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0510, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x050A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04B5, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x044A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0083, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0044, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0524, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0523, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x000A), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x000B), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04B6, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0444, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04EC, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x004A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x052C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x052B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x000C), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x000D), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02A2, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x007C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x007D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0308, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0048, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02F8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02FA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x037B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x037A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ 0x044D, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x000E), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0046, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0039, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0373, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0374, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06A1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06A0, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0075, + /* 01 */ 0x0077, + /* 02 */ 0x007A, + /* 03 */ 0x0074, + }, + { + /* 00 */ 0x035A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x040D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x040C, + }, + { + /* 00 */ 0x03E4, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03E5, + }, + { + /* 00 */ 0x052E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x052D, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x000F), + /* 01 */ ZYDIS_INVALID, + /* 02 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0010), + /* 03 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0011), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODRM_REG, 0x0012), + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0040, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x003B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0042, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0041, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x001E, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x001D, + }, + { + /* 00 */ 0x0487, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0488, + }, + { + /* 00 */ 0x047D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x047F, + }, + { + /* 00 */ 0x0483, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0484, + }, + { + /* 00 */ 0x03B3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B4, + }, + { + /* 00 */ 0x0439, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x043A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0347, + /* 02 */ 0x0366, + /* 03 */ 0x0361, + }, + { + /* 00 */ 0x0422, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0423, + }, + { + /* 00 */ 0x0494, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0493, + }, + { + /* 00 */ 0x0496, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0495, + }, + { + /* 00 */ 0x041E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x041F, + }, + { + /* 00 */ 0x03C1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C2, + }, + { + /* 00 */ 0x03BA, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B9, + }, + { + /* 00 */ 0x03BB, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03BC, + }, + { + /* 00 */ 0x0417, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0416, + }, + { + /* 00 */ 0x03C3, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C4, + }, + { + /* 00 */ 0x03C5, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C6, + }, + { + /* 00 */ 0x047A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x047B, + }, + { + /* 00 */ 0x0477, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0474, + }, + { + /* 00 */ 0x03C8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03C9, + }, + { + /* 00 */ 0x0434, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0435, + }, + { + /* 00 */ 0x0436, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0437, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0089, + /* 02 */ 0x0087, + /* 03 */ 0x0097, + }, + { + /* 00 */ 0x035D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0358, + }, + { + /* 00 */ 0x048F, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0490, + }, + { + /* 00 */ 0x0492, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0491, + }, + { + /* 00 */ 0x041C, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x041D, + }, + { + /* 00 */ 0x0453, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0452, + }, + { + /* 00 */ 0x03B6, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B5, + }, + { + /* 00 */ 0x03B8, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B7, + }, + { + /* 00 */ 0x0414, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0415, + }, + { + /* 00 */ 0x04C1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x04C2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02F1, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0472, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0471, + }, + { + /* 00 */ 0x0469, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0467, + }, + { + /* 00 */ 0x046E, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x046F, + }, + { + /* 00 */ 0x043B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x043C, + }, + { + /* 00 */ 0x0411, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0410, + }, + { + /* 00 */ 0x045A, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0459, + }, + { + /* 00 */ 0x030B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x030A, + }, + { + /* 00 */ 0x0489, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x048A, + }, + { + /* 00 */ 0x0498, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x0497, + }, + { + /* 00 */ 0x048B, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x048C, + }, + { + /* 00 */ 0x048D, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x048E, + }, + { + /* 00 */ 0x03AF, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B0, + }, + { + /* 00 */ 0x03BE, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03BD, + }, + { + /* 00 */ 0x03B1, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ 0x03B2, + }, +}; + +const OpcodeTreeNode optreeX87[][64] = +{ + { + /* 00 */ 0x00BC, + /* 01 */ 0x00BF, + /* 02 */ 0x00C2, + /* 03 */ 0x00C1, + /* 04 */ 0x00C0, + /* 05 */ 0x00C5, + /* 06 */ 0x00C3, + /* 07 */ 0x00C4, + /* 08 */ 0x01CE, + /* 09 */ 0x01CD, + /* 0A */ 0x01D9, + /* 0B */ 0x01DA, + /* 0C */ 0x01DB, + /* 0D */ 0x01D6, + /* 0E */ 0x01D7, + /* 0F */ 0x01D8, + /* 10 */ 0x011A, + /* 11 */ 0x011C, + /* 12 */ 0x011B, + /* 13 */ 0x0117, + /* 14 */ 0x0116, + /* 15 */ 0x011D, + /* 16 */ 0x011F, + /* 17 */ 0x011E, + /* 18 */ 0x013A, + /* 19 */ 0x0141, + /* 1A */ 0x013C, + /* 1B */ 0x0138, + /* 1C */ 0x013B, + /* 1D */ 0x0140, + /* 1E */ 0x013F, + /* 1F */ 0x0139, + /* 20 */ 0x022E, + /* 21 */ 0x0226, + /* 22 */ 0x0229, + /* 23 */ 0x0232, + /* 24 */ 0x0231, + /* 25 */ 0x022D, + /* 26 */ 0x022A, + /* 27 */ 0x0227, + /* 28 */ 0x0246, + /* 29 */ 0x024B, + /* 2A */ 0x024C, + /* 2B */ 0x024A, + /* 2C */ 0x0248, + /* 2D */ 0x0249, + /* 2E */ 0x0250, + /* 2F */ 0x0251, + /* 30 */ 0x0161, + /* 31 */ 0x0162, + /* 32 */ 0x0155, + /* 33 */ 0x015A, + /* 34 */ 0x0159, + /* 35 */ 0x0156, + /* 36 */ 0x0157, + /* 37 */ 0x0163, + /* 38 */ 0x0172, + /* 39 */ 0x016F, + /* 3A */ 0x0170, + /* 3B */ 0x0173, + /* 3C */ 0x0176, + /* 3D */ 0x0177, + /* 3E */ 0x0174, + /* 3F */ 0x0175, + }, + { + /* 00 */ 0x01BD, + /* 01 */ 0x01C0, + /* 02 */ 0x01BF, + /* 03 */ 0x01BE, + /* 04 */ 0x01B7, + /* 05 */ 0x01B6, + /* 06 */ 0x01B9, + /* 07 */ 0x01B8, + /* 08 */ 0x0281, + /* 09 */ 0x0282, + /* 0A */ 0x0283, + /* 0B */ 0x0280, + /* 0C */ 0x027D, + /* 0D */ 0x027E, + /* 0E */ 0x027F, + /* 0F */ 0x0284, + /* 10 */ 0x01E7, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_INVALID, + /* 18 */ 0x0213, + /* 19 */ 0x0212, + /* 1A */ 0x0215, + /* 1B */ 0x0214, + /* 1C */ 0x020F, + /* 1D */ 0x020E, + /* 1E */ 0x0211, + /* 1F */ 0x0210, + /* 20 */ 0x00D4, + /* 21 */ 0x00B7, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ 0x025A, + /* 25 */ 0x027C, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x01C1, + /* 29 */ 0x01C5, + /* 2A */ 0x01C4, + /* 2B */ 0x01C8, + /* 2C */ 0x01C6, + /* 2D */ 0x01C7, + /* 2E */ 0x01C9, + /* 2F */ ZYDIS_INVALID, + /* 30 */ 0x00B6, + /* 31 */ 0x0298, + /* 32 */ 0x01F1, + /* 33 */ 0x01EE, + /* 34 */ 0x0297, + /* 35 */ 0x01F0, + /* 36 */ 0x0154, + /* 37 */ 0x01A9, + /* 38 */ 0x01EF, + /* 39 */ 0x0299, + /* 3A */ 0x01F8, + /* 3B */ 0x01F7, + /* 3C */ 0x01F2, + /* 3D */ 0x01F5, + /* 3E */ 0x01F6, + /* 3F */ 0x0153, + }, + { + /* 00 */ 0x00D9, + /* 01 */ 0x00DA, + /* 02 */ 0x00DB, + /* 03 */ 0x00D6, + /* 04 */ 0x00D7, + /* 05 */ 0x00D8, + /* 06 */ 0x00DD, + /* 07 */ 0x00DC, + /* 08 */ 0x00E6, + /* 09 */ 0x00E7, + /* 0A */ 0x00E8, + /* 0B */ 0x00EC, + /* 0C */ 0x00ED, + /* 0D */ 0x00EB, + /* 0E */ 0x00E9, + /* 0F */ 0x00EA, + /* 10 */ 0x00E4, + /* 11 */ 0x00E5, + /* 12 */ 0x00E2, + /* 13 */ 0x00E3, + /* 14 */ 0x00DF, + /* 15 */ 0x00DE, + /* 16 */ 0x00E0, + /* 17 */ 0x00E1, + /* 18 */ 0x0113, + /* 19 */ 0x0114, + /* 1A */ 0x0115, + /* 1B */ 0x010F, + /* 1C */ 0x010E, + /* 1D */ 0x0110, + /* 1E */ 0x0111, + /* 1F */ 0x0112, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ 0x027B, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x00F0, + /* 01 */ 0x00F1, + /* 02 */ 0x00EE, + /* 03 */ 0x00EF, + /* 04 */ 0x00F4, + /* 05 */ 0x00F5, + /* 06 */ 0x00F2, + /* 07 */ 0x00F3, + /* 08 */ 0x0103, + /* 09 */ 0x0102, + /* 0A */ 0x0105, + /* 0B */ 0x0104, + /* 0C */ 0x00FF, + /* 0D */ 0x00FE, + /* 0E */ 0x0101, + /* 0F */ 0x0100, + /* 10 */ 0x00F8, + /* 11 */ 0x00F9, + /* 12 */ 0x00F6, + /* 13 */ 0x00F7, + /* 14 */ 0x00FC, + /* 15 */ 0x00FD, + /* 16 */ 0x00FA, + /* 17 */ 0x00FB, + /* 18 */ 0x010B, + /* 19 */ 0x010A, + /* 1A */ 0x010D, + /* 1B */ 0x010C, + /* 1C */ 0x0107, + /* 1D */ 0x0106, + /* 1E */ 0x0109, + /* 1F */ 0x0108, + /* 20 */ 0x01E5, + /* 21 */ 0x01E4, + /* 22 */ 0x00D5, + /* 23 */ 0x01E6, + /* 24 */ 0x01E9, + /* 25 */ 0x01F4, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x0269, + /* 29 */ 0x026A, + /* 2A */ 0x0265, + /* 2B */ 0x0264, + /* 2C */ 0x0263, + /* 2D */ 0x0268, + /* 2E */ 0x0267, + /* 2F */ 0x0266, + /* 30 */ 0x0129, + /* 31 */ 0x0128, + /* 32 */ 0x012B, + /* 33 */ 0x012A, + /* 34 */ 0x012F, + /* 35 */ 0x012E, + /* 36 */ 0x012D, + /* 37 */ 0x012C, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x00B9, + /* 01 */ 0x00B8, + /* 02 */ 0x00C6, + /* 03 */ 0x00C9, + /* 04 */ 0x00C8, + /* 05 */ 0x00C7, + /* 06 */ 0x00BE, + /* 07 */ 0x00BD, + /* 08 */ 0x01D1, + /* 09 */ 0x01D0, + /* 0A */ 0x01D5, + /* 0B */ 0x01D4, + /* 0C */ 0x01D3, + /* 0D */ 0x01CC, + /* 0E */ 0x01CB, + /* 0F */ 0x01CA, + /* 10 */ 0x0125, + /* 11 */ 0x0124, + /* 12 */ 0x0127, + /* 13 */ 0x0126, + /* 14 */ 0x0121, + /* 15 */ 0x0120, + /* 16 */ 0x0123, + /* 17 */ 0x0122, + /* 18 */ 0x0148, + /* 19 */ 0x0142, + /* 1A */ 0x0145, + /* 1B */ 0x0144, + /* 1C */ 0x0143, + /* 1D */ 0x0147, + /* 1E */ 0x0146, + /* 1F */ 0x0149, + /* 20 */ 0x024F, + /* 21 */ 0x0247, + /* 22 */ 0x0241, + /* 23 */ 0x0242, + /* 24 */ 0x0240, + /* 25 */ 0x024E, + /* 26 */ 0x024D, + /* 27 */ 0x0244, + /* 28 */ 0x0228, + /* 29 */ 0x0235, + /* 2A */ 0x0234, + /* 2B */ 0x0237, + /* 2C */ 0x0236, + /* 2D */ 0x0233, + /* 2E */ 0x0230, + /* 2F */ 0x022F, + /* 30 */ 0x017B, + /* 31 */ 0x0178, + /* 32 */ 0x0179, + /* 33 */ 0x017C, + /* 34 */ 0x017F, + /* 35 */ 0x0180, + /* 36 */ 0x017D, + /* 37 */ 0x017E, + /* 38 */ 0x015E, + /* 39 */ 0x015F, + /* 3A */ 0x0160, + /* 3B */ 0x015B, + /* 3C */ 0x015C, + /* 3D */ 0x015D, + /* 3E */ 0x0164, + /* 3F */ 0x0165, + }, + { + /* 00 */ 0x018F, + /* 01 */ 0x018E, + /* 02 */ 0x0191, + /* 03 */ 0x0190, + /* 04 */ 0x018B, + /* 05 */ 0x018A, + /* 06 */ 0x018D, + /* 07 */ 0x018C, + /* 08 */ 0x028A, + /* 09 */ 0x0289, + /* 0A */ 0x028C, + /* 0B */ 0x028B, + /* 0C */ 0x0286, + /* 0D */ 0x0285, + /* 0E */ 0x0288, + /* 0F */ 0x0287, + /* 10 */ 0x0200, + /* 11 */ 0x0202, + /* 12 */ 0x0201, + /* 13 */ 0x01FA, + /* 14 */ 0x01F9, + /* 15 */ 0x01FB, + /* 16 */ 0x01FD, + /* 17 */ 0x01FC, + /* 18 */ 0x020D, + /* 19 */ 0x020C, + /* 1A */ 0x0208, + /* 1B */ 0x0204, + /* 1C */ 0x0203, + /* 1D */ 0x0205, + /* 1E */ 0x0207, + /* 1F */ 0x0206, + /* 20 */ 0x025D, + /* 21 */ 0x025C, + /* 22 */ 0x025B, + /* 23 */ 0x025E, + /* 24 */ 0x0261, + /* 25 */ 0x0262, + /* 26 */ 0x025F, + /* 27 */ 0x0260, + /* 28 */ 0x0278, + /* 29 */ 0x0277, + /* 2A */ 0x027A, + /* 2B */ 0x0279, + /* 2C */ 0x0274, + /* 2D */ 0x0273, + /* 2E */ 0x0276, + /* 2F */ 0x0275, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x00CC, + /* 01 */ 0x00CD, + /* 02 */ 0x00CA, + /* 03 */ 0x00CB, + /* 04 */ 0x00D0, + /* 05 */ 0x00D1, + /* 06 */ 0x00CE, + /* 07 */ 0x00CF, + /* 08 */ 0x01E1, + /* 09 */ 0x01E0, + /* 0A */ 0x01E3, + /* 0B */ 0x01E2, + /* 0C */ 0x01DD, + /* 0D */ 0x01DC, + /* 0E */ 0x01DF, + /* 0F */ 0x01DE, + /* 10 */ 0x014F, + /* 11 */ 0x014E, + /* 12 */ 0x0151, + /* 13 */ 0x0150, + /* 14 */ 0x014B, + /* 15 */ 0x014A, + /* 16 */ 0x014D, + /* 17 */ 0x014C, + /* 18 */ ZYDIS_INVALID, + /* 19 */ 0x0152, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ ZYDIS_INVALID, + /* 1D */ ZYDIS_INVALID, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ 0x0258, + /* 21 */ 0x0259, + /* 22 */ 0x0256, + /* 23 */ 0x0257, + /* 24 */ 0x0253, + /* 25 */ 0x0252, + /* 26 */ 0x0255, + /* 27 */ 0x0254, + /* 28 */ 0x023B, + /* 29 */ 0x023D, + /* 2A */ 0x023C, + /* 2B */ 0x0239, + /* 2C */ 0x0238, + /* 2D */ 0x023A, + /* 2E */ 0x023E, + /* 2F */ 0x023F, + /* 30 */ 0x0186, + /* 31 */ 0x0185, + /* 32 */ 0x0188, + /* 33 */ 0x0187, + /* 34 */ 0x0182, + /* 35 */ 0x0181, + /* 36 */ 0x0184, + /* 37 */ 0x0183, + /* 38 */ 0x016C, + /* 39 */ 0x016B, + /* 3A */ 0x016E, + /* 3B */ 0x016D, + /* 3C */ 0x0168, + /* 3D */ 0x0167, + /* 3E */ 0x016A, + /* 3F */ 0x0169, + }, + { + /* 00 */ 0x0199, + /* 01 */ 0x0196, + /* 02 */ 0x0197, + /* 03 */ 0x0198, + /* 04 */ 0x0193, + /* 05 */ 0x0192, + /* 06 */ 0x0195, + /* 07 */ 0x0194, + /* 08 */ 0x028F, + /* 09 */ 0x0290, + /* 0A */ 0x028D, + /* 0B */ 0x028E, + /* 0C */ 0x0293, + /* 0D */ 0x0294, + /* 0E */ 0x0291, + /* 0F */ 0x0292, + /* 10 */ 0x021B, + /* 11 */ 0x021A, + /* 12 */ 0x021D, + /* 13 */ 0x021C, + /* 14 */ 0x0217, + /* 15 */ 0x0216, + /* 16 */ 0x0219, + /* 17 */ 0x0218, + /* 18 */ 0x0220, + /* 19 */ 0x0221, + /* 1A */ 0x021E, + /* 1B */ 0x021F, + /* 1C */ 0x0224, + /* 1D */ 0x0225, + /* 1E */ 0x0222, + /* 1F */ 0x0223, + /* 20 */ 0x01EC, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ 0x0271, + /* 29 */ 0x0272, + /* 2A */ 0x026D, + /* 2B */ 0x026C, + /* 2C */ 0x026B, + /* 2D */ 0x0270, + /* 2E */ 0x026F, + /* 2F */ 0x026E, + /* 30 */ 0x0136, + /* 31 */ 0x0137, + /* 32 */ 0x0133, + /* 33 */ 0x0134, + /* 34 */ 0x0135, + /* 35 */ 0x0130, + /* 36 */ 0x0131, + /* 37 */ 0x0132, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + }, +}; + +const OpcodeTreeNode optreeAddressSize[][3] = +{ + { + /* 00 */ 0x02CD, + /* 01 */ 0x02D0, + /* 02 */ 0x02EC, + }, +}; + +const OpcodeTreeNode optreeOperandSize[][3] = +{ + { + /* 00 */ 0x03E0, + /* 01 */ 0x03E1, + /* 02 */ 0x03E2, + }, + { + /* 00 */ 0x0409, + /* 01 */ 0x040A, + /* 02 */ 0x040B, + }, + { + /* 00 */ 0x033D, + /* 01 */ 0x0343, + /* 02 */ 0x035E, + }, + { + /* 00 */ 0x0341, + /* 01 */ 0x0342, + /* 02 */ 0x0364, + }, + { + /* 00 */ 0x0344, + /* 01 */ 0x033E, + /* 02 */ 0x0365, + }, + { + /* 00 */ 0x0340, + /* 01 */ 0x033F, + /* 02 */ 0x0360, + }, + { + /* 00 */ 0x007F, + /* 01 */ 0x0080, + /* 02 */ 0x007E, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODE, 0x000F), + /* 01 */ NODE(OpcodeTreeNodeType::MODE, 0x0010), + /* 02 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODE, 0x0011), + /* 01 */ NODE(OpcodeTreeNodeType::MODE, 0x0012), + /* 02 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02B8, + /* 01 */ 0x02B6, + /* 02 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x03A1, + /* 01 */ 0x03A0, + /* 02 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0050, + /* 01 */ 0x009E, + /* 02 */ 0x0052, + }, + { + /* 00 */ 0x009D, + /* 01 */ 0x0051, + /* 02 */ 0x0084, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODE, 0x001E), + /* 01 */ NODE(OpcodeTreeNodeType::MODE, 0x001F), + /* 02 */ NODE(OpcodeTreeNodeType::MODE, 0x0020), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODE, 0x0021), + /* 01 */ NODE(OpcodeTreeNodeType::MODE, 0x0022), + /* 02 */ NODE(OpcodeTreeNodeType::MODE, 0x0023), + }, + { + /* 00 */ 0x0372, + /* 01 */ 0x0369, + /* 02 */ 0x036F, + }, + { + /* 00 */ 0x007B, + /* 01 */ 0x0078, + /* 02 */ 0x0079, + }, + { + /* 00 */ 0x0540, + /* 01 */ 0x053E, + /* 02 */ 0x053F, + }, + { + /* 00 */ 0x0303, + /* 01 */ 0x0301, + /* 02 */ 0x0302, + }, + { + /* 00 */ 0x0504, + /* 01 */ 0x0502, + /* 02 */ 0x0503, + }, + { + /* 00 */ 0x05BB, + /* 01 */ 0x05BA, + /* 02 */ 0x05D5, + }, + { + /* 00 */ 0x05B9, + /* 01 */ 0x05BC, + /* 02 */ 0x05D6, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VEXW, 0x000E), + /* 01 */ NODE(OpcodeTreeNodeType::VEXW, 0x000F), + /* 02 */ NODE(OpcodeTreeNodeType::VEXW, 0x0010), + }, + { + /* 00 */ 0x02C6, + /* 01 */ 0x02C4, + /* 02 */ 0x02C5, + }, +}; + +const OpcodeTreeNode optreeMode[][2] = +{ + { + /* 00 */ 0x04AA, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0445, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04AD, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0553, + /* 01 */ NODE(OpcodeTreeNodeType::VENDOR, 0x000D), + }, + { + /* 00 */ 0x0555, + /* 01 */ NODE(OpcodeTreeNodeType::VENDOR, 0x000E), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VENDOR, 0x000F), + /* 01 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0010), + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0011), + /* 01 */ NODE(OpcodeTreeNodeType::VENDOR, 0x0012), + }, + { + /* 00 */ 0x04AC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0446, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04A9, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0443, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x009F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x00A0, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0001, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0004, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04BA, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04BB, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x044B, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x044C, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0038, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0033, + /* 01 */ 0x0375, + }, + { + /* 00 */ 0x0011, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0398, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0007, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04FC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x002A, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0546, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x06B3, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0073, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x004F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04C0, + /* 01 */ 0x04BF, + }, + { + /* 00 */ 0x04BC, + /* 01 */ 0x04BE, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x04BD, + }, + { + /* 00 */ 0x0451, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x044E, + /* 01 */ 0x0450, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x044F, + }, + { + /* 00 */ 0x02F6, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VEXW, 0x0014), + /* 01 */ NODE(OpcodeTreeNodeType::VEXW, 0x0015), + }, + { + /* 00 */ 0x02F3, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02BC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0003, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0002, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04F0, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02DC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x004D, + /* 01 */ 0x004B, + }, +}; + +const OpcodeTreeNode optreeVendor[][2] = +{ + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05AC, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05B2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05EB, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05F3, + }, + { + /* 00 */ 0x05EC, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05B4, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05B3, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05ED, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x053A, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0056, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0530, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x02C1, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x04D5, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0552, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0554, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02BE, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02BF, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02C3, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x02C2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05EA, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05F2, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05E8, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05E9, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05F4, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05AD, + }, +}; + +const OpcodeTreeNode optree3dnow[][256] = +{ + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ ZYDIS_INVALID, + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ ZYDIS_INVALID, + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ ZYDIS_INVALID, + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ 0x0407, + /* 0D */ 0x0406, + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + /* 10 */ ZYDIS_INVALID, + /* 11 */ ZYDIS_INVALID, + /* 12 */ ZYDIS_INVALID, + /* 13 */ ZYDIS_INVALID, + /* 14 */ ZYDIS_INVALID, + /* 15 */ ZYDIS_INVALID, + /* 16 */ ZYDIS_INVALID, + /* 17 */ ZYDIS_INVALID, + /* 18 */ ZYDIS_INVALID, + /* 19 */ ZYDIS_INVALID, + /* 1A */ ZYDIS_INVALID, + /* 1B */ ZYDIS_INVALID, + /* 1C */ 0x03E7, + /* 1D */ 0x03E6, + /* 1E */ ZYDIS_INVALID, + /* 1F */ ZYDIS_INVALID, + /* 20 */ ZYDIS_INVALID, + /* 21 */ ZYDIS_INVALID, + /* 22 */ ZYDIS_INVALID, + /* 23 */ ZYDIS_INVALID, + /* 24 */ ZYDIS_INVALID, + /* 25 */ ZYDIS_INVALID, + /* 26 */ ZYDIS_INVALID, + /* 27 */ ZYDIS_INVALID, + /* 28 */ ZYDIS_INVALID, + /* 29 */ ZYDIS_INVALID, + /* 2A */ ZYDIS_INVALID, + /* 2B */ ZYDIS_INVALID, + /* 2C */ ZYDIS_INVALID, + /* 2D */ ZYDIS_INVALID, + /* 2E */ ZYDIS_INVALID, + /* 2F */ ZYDIS_INVALID, + /* 30 */ ZYDIS_INVALID, + /* 31 */ ZYDIS_INVALID, + /* 32 */ ZYDIS_INVALID, + /* 33 */ ZYDIS_INVALID, + /* 34 */ ZYDIS_INVALID, + /* 35 */ ZYDIS_INVALID, + /* 36 */ ZYDIS_INVALID, + /* 37 */ ZYDIS_INVALID, + /* 38 */ ZYDIS_INVALID, + /* 39 */ ZYDIS_INVALID, + /* 3A */ ZYDIS_INVALID, + /* 3B */ ZYDIS_INVALID, + /* 3C */ ZYDIS_INVALID, + /* 3D */ ZYDIS_INVALID, + /* 3E */ ZYDIS_INVALID, + /* 3F */ ZYDIS_INVALID, + /* 40 */ ZYDIS_INVALID, + /* 41 */ ZYDIS_INVALID, + /* 42 */ ZYDIS_INVALID, + /* 43 */ ZYDIS_INVALID, + /* 44 */ ZYDIS_INVALID, + /* 45 */ ZYDIS_INVALID, + /* 46 */ ZYDIS_INVALID, + /* 47 */ ZYDIS_INVALID, + /* 48 */ ZYDIS_INVALID, + /* 49 */ ZYDIS_INVALID, + /* 4A */ ZYDIS_INVALID, + /* 4B */ ZYDIS_INVALID, + /* 4C */ ZYDIS_INVALID, + /* 4D */ ZYDIS_INVALID, + /* 4E */ ZYDIS_INVALID, + /* 4F */ ZYDIS_INVALID, + /* 50 */ ZYDIS_INVALID, + /* 51 */ ZYDIS_INVALID, + /* 52 */ ZYDIS_INVALID, + /* 53 */ ZYDIS_INVALID, + /* 54 */ ZYDIS_INVALID, + /* 55 */ ZYDIS_INVALID, + /* 56 */ ZYDIS_INVALID, + /* 57 */ ZYDIS_INVALID, + /* 58 */ ZYDIS_INVALID, + /* 59 */ ZYDIS_INVALID, + /* 5A */ ZYDIS_INVALID, + /* 5B */ ZYDIS_INVALID, + /* 5C */ ZYDIS_INVALID, + /* 5D */ ZYDIS_INVALID, + /* 5E */ ZYDIS_INVALID, + /* 5F */ ZYDIS_INVALID, + /* 60 */ ZYDIS_INVALID, + /* 61 */ ZYDIS_INVALID, + /* 62 */ ZYDIS_INVALID, + /* 63 */ ZYDIS_INVALID, + /* 64 */ ZYDIS_INVALID, + /* 65 */ ZYDIS_INVALID, + /* 66 */ ZYDIS_INVALID, + /* 67 */ ZYDIS_INVALID, + /* 68 */ ZYDIS_INVALID, + /* 69 */ ZYDIS_INVALID, + /* 6A */ ZYDIS_INVALID, + /* 6B */ ZYDIS_INVALID, + /* 6C */ ZYDIS_INVALID, + /* 6D */ ZYDIS_INVALID, + /* 6E */ ZYDIS_INVALID, + /* 6F */ ZYDIS_INVALID, + /* 70 */ ZYDIS_INVALID, + /* 71 */ ZYDIS_INVALID, + /* 72 */ ZYDIS_INVALID, + /* 73 */ ZYDIS_INVALID, + /* 74 */ ZYDIS_INVALID, + /* 75 */ ZYDIS_INVALID, + /* 76 */ ZYDIS_INVALID, + /* 77 */ ZYDIS_INVALID, + /* 78 */ ZYDIS_INVALID, + /* 79 */ ZYDIS_INVALID, + /* 7A */ ZYDIS_INVALID, + /* 7B */ ZYDIS_INVALID, + /* 7C */ ZYDIS_INVALID, + /* 7D */ ZYDIS_INVALID, + /* 7E */ ZYDIS_INVALID, + /* 7F */ ZYDIS_INVALID, + /* 80 */ ZYDIS_INVALID, + /* 81 */ ZYDIS_INVALID, + /* 82 */ ZYDIS_INVALID, + /* 83 */ ZYDIS_INVALID, + /* 84 */ ZYDIS_INVALID, + /* 85 */ ZYDIS_INVALID, + /* 86 */ ZYDIS_INVALID, + /* 87 */ ZYDIS_INVALID, + /* 88 */ ZYDIS_INVALID, + /* 89 */ ZYDIS_INVALID, + /* 8A */ 0x03F0, + /* 8B */ ZYDIS_INVALID, + /* 8C */ ZYDIS_INVALID, + /* 8D */ ZYDIS_INVALID, + /* 8E */ 0x03F1, + /* 8F */ ZYDIS_INVALID, + /* 90 */ 0x03EB, + /* 91 */ ZYDIS_INVALID, + /* 92 */ ZYDIS_INVALID, + /* 93 */ ZYDIS_INVALID, + /* 94 */ 0x03EE, + /* 95 */ ZYDIS_INVALID, + /* 96 */ 0x03F2, + /* 97 */ 0x03F6, + /* 98 */ ZYDIS_INVALID, + /* 99 */ ZYDIS_INVALID, + /* 9A */ 0x03F7, + /* 9B */ ZYDIS_INVALID, + /* 9C */ ZYDIS_INVALID, + /* 9D */ ZYDIS_INVALID, + /* 9E */ 0x03E9, + /* 9F */ ZYDIS_INVALID, + /* A0 */ 0x03EC, + /* A1 */ ZYDIS_INVALID, + /* A2 */ ZYDIS_INVALID, + /* A3 */ ZYDIS_INVALID, + /* A4 */ 0x03ED, + /* A5 */ ZYDIS_INVALID, + /* A6 */ 0x03F3, + /* A7 */ 0x03F5, + /* A8 */ ZYDIS_INVALID, + /* A9 */ ZYDIS_INVALID, + /* AA */ 0x03F8, + /* AB */ ZYDIS_INVALID, + /* AC */ ZYDIS_INVALID, + /* AD */ ZYDIS_INVALID, + /* AE */ 0x03E8, + /* AF */ ZYDIS_INVALID, + /* B0 */ 0x03EA, + /* B1 */ ZYDIS_INVALID, + /* B2 */ ZYDIS_INVALID, + /* B3 */ ZYDIS_INVALID, + /* B4 */ 0x03EF, + /* B5 */ ZYDIS_INVALID, + /* B6 */ 0x03F4, + /* B7 */ 0x0433, + /* B8 */ ZYDIS_INVALID, + /* B9 */ ZYDIS_INVALID, + /* BA */ ZYDIS_INVALID, + /* BB */ 0x0499, + /* BC */ ZYDIS_INVALID, + /* BD */ ZYDIS_INVALID, + /* BE */ ZYDIS_INVALID, + /* BF */ 0x03C7, + /* C0 */ ZYDIS_INVALID, + /* C1 */ ZYDIS_INVALID, + /* C2 */ ZYDIS_INVALID, + /* C3 */ ZYDIS_INVALID, + /* C4 */ ZYDIS_INVALID, + /* C5 */ ZYDIS_INVALID, + /* C6 */ ZYDIS_INVALID, + /* C7 */ ZYDIS_INVALID, + /* C8 */ ZYDIS_INVALID, + /* C9 */ ZYDIS_INVALID, + /* CA */ ZYDIS_INVALID, + /* CB */ ZYDIS_INVALID, + /* CC */ ZYDIS_INVALID, + /* CD */ ZYDIS_INVALID, + /* CE */ ZYDIS_INVALID, + /* CF */ ZYDIS_INVALID, + /* D0 */ ZYDIS_INVALID, + /* D1 */ ZYDIS_INVALID, + /* D2 */ ZYDIS_INVALID, + /* D3 */ ZYDIS_INVALID, + /* D4 */ ZYDIS_INVALID, + /* D5 */ ZYDIS_INVALID, + /* D6 */ ZYDIS_INVALID, + /* D7 */ ZYDIS_INVALID, + /* D8 */ ZYDIS_INVALID, + /* D9 */ ZYDIS_INVALID, + /* DA */ ZYDIS_INVALID, + /* DB */ ZYDIS_INVALID, + /* DC */ ZYDIS_INVALID, + /* DD */ ZYDIS_INVALID, + /* DE */ ZYDIS_INVALID, + /* DF */ ZYDIS_INVALID, + /* E0 */ ZYDIS_INVALID, + /* E1 */ ZYDIS_INVALID, + /* E2 */ ZYDIS_INVALID, + /* E3 */ ZYDIS_INVALID, + /* E4 */ ZYDIS_INVALID, + /* E5 */ ZYDIS_INVALID, + /* E6 */ ZYDIS_INVALID, + /* E7 */ ZYDIS_INVALID, + /* E8 */ ZYDIS_INVALID, + /* E9 */ ZYDIS_INVALID, + /* EA */ ZYDIS_INVALID, + /* EB */ ZYDIS_INVALID, + /* EC */ ZYDIS_INVALID, + /* ED */ ZYDIS_INVALID, + /* EE */ ZYDIS_INVALID, + /* EF */ ZYDIS_INVALID, + /* F0 */ ZYDIS_INVALID, + /* F1 */ ZYDIS_INVALID, + /* F2 */ ZYDIS_INVALID, + /* F3 */ ZYDIS_INVALID, + /* F4 */ ZYDIS_INVALID, + /* F5 */ ZYDIS_INVALID, + /* F6 */ ZYDIS_INVALID, + /* F7 */ ZYDIS_INVALID, + /* F8 */ ZYDIS_INVALID, + /* F9 */ ZYDIS_INVALID, + /* FA */ ZYDIS_INVALID, + /* FB */ ZYDIS_INVALID, + /* FC */ ZYDIS_INVALID, + /* FD */ ZYDIS_INVALID, + /* FE */ ZYDIS_INVALID, + /* FF */ ZYDIS_INVALID, + }, +}; + +const OpcodeTreeNode optreeVex[][16] = +{ + { + /* 00 */ NODE(OpcodeTreeNodeType::MODE, 0x0024), + /* 01 */ NODE(OpcodeTreeNodeType::TABLE, 0x0004), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ NODE(OpcodeTreeNodeType::TABLE, 0x0005), + /* 06 */ NODE(OpcodeTreeNodeType::TABLE, 0x0006), + /* 07 */ NODE(OpcodeTreeNodeType::TABLE, 0x0007), + /* 08 */ ZYDIS_INVALID, + /* 09 */ NODE(OpcodeTreeNodeType::TABLE, 0x0008), + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ NODE(OpcodeTreeNodeType::TABLE, 0x0009), + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::MODE, 0x0026), + /* 01 */ NODE(OpcodeTreeNodeType::TABLE, 0x0004), + /* 02 */ ZYDIS_INVALID, + /* 03 */ ZYDIS_INVALID, + /* 04 */ ZYDIS_INVALID, + /* 05 */ NODE(OpcodeTreeNodeType::TABLE, 0x0005), + /* 06 */ ZYDIS_INVALID, + /* 07 */ ZYDIS_INVALID, + /* 08 */ ZYDIS_INVALID, + /* 09 */ NODE(OpcodeTreeNodeType::TABLE, 0x0008), + /* 0A */ ZYDIS_INVALID, + /* 0B */ ZYDIS_INVALID, + /* 0C */ ZYDIS_INVALID, + /* 0D */ NODE(OpcodeTreeNodeType::TABLE, 0x0009), + /* 0E */ ZYDIS_INVALID, + /* 0F */ ZYDIS_INVALID, + }, +}; + +const OpcodeTreeNode optreeVexW[][2] = +{ + { + /* 00 */ 0x061D, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x061C, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0692, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0691, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x057B, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VEXL, 0x0008), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05A6, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05A5, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05A7, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x05A4, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x061E, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x061B, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VEXL, 0x0009), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x061F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0620, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0621, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x0622, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VEXL, 0x000A), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VEXL, 0x000B), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VEXL, 0x000C), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VEXL, 0x000D), + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ NODE(OpcodeTreeNodeType::VEXL, 0x000E), + /* 01 */ NODE(OpcodeTreeNodeType::VEXL, 0x000F), + }, + { + /* 00 */ 0x0579, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x0578, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x060B, + /* 01 */ ZYDIS_INVALID, + }, +}; + +const OpcodeTreeNode optreeVexL[][2] = +{ + { + /* 00 */ 0x069C, + /* 01 */ 0x069B, + }, + { + /* 00 */ 0x0660, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065A, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065E, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x063F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065F, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065B, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x065D, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x057A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x061A, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x05A0, + }, + { + /* 00 */ ZYDIS_INVALID, + /* 01 */ 0x059A, + }, + { + /* 00 */ 0x062C, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x062E, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x062D, + /* 01 */ ZYDIS_INVALID, + }, + { + /* 00 */ 0x062F, + /* 01 */ ZYDIS_INVALID, + }, +}; + +#undef ZYDIS_INVALID +#undef NODE + +#define OPI_NONE { DefinedOperandType::NONE, DefinedOperandSize::NA } +#define OPI_AL { DefinedOperandType::AL, DefinedOperandSize::B } +#define OPI_AX { DefinedOperandType::AX, DefinedOperandSize::W } +#define OPI_Av { DefinedOperandType::A, DefinedOperandSize::V } +#define OPI_C { DefinedOperandType::C, DefinedOperandSize::NA } +#define OPI_CL { DefinedOperandType::CL, DefinedOperandSize::B } +#define OPI_CS { DefinedOperandType::CS, DefinedOperandSize::NA } +#define OPI_CX { DefinedOperandType::CX, DefinedOperandSize::W } +#define OPI_D { DefinedOperandType::D, DefinedOperandSize::NA } +#define OPI_DL { DefinedOperandType::DL, DefinedOperandSize::B } +#define OPI_DS { DefinedOperandType::DS, DefinedOperandSize::NA } +#define OPI_DX { DefinedOperandType::DX, DefinedOperandSize::W } +#define OPI_E { DefinedOperandType::E, DefinedOperandSize::NA } +#define OPI_ES { DefinedOperandType::ES, DefinedOperandSize::NA } +#define OPI_Eb { DefinedOperandType::E, DefinedOperandSize::B } +#define OPI_Ed { DefinedOperandType::E, DefinedOperandSize::D } +#define OPI_Eq { DefinedOperandType::E, DefinedOperandSize::Q } +#define OPI_Ev { DefinedOperandType::E, DefinedOperandSize::V } +#define OPI_Ew { DefinedOperandType::E, DefinedOperandSize::W } +#define OPI_Ey { DefinedOperandType::E, DefinedOperandSize::Y } +#define OPI_Ez { DefinedOperandType::E, DefinedOperandSize::Z } +#define OPI_FS { DefinedOperandType::FS, DefinedOperandSize::NA } +#define OPI_Fv { DefinedOperandType::F, DefinedOperandSize::V } +#define OPI_G { DefinedOperandType::G, DefinedOperandSize::NA } +#define OPI_GS { DefinedOperandType::GS, DefinedOperandSize::NA } +#define OPI_Gb { DefinedOperandType::G, DefinedOperandSize::B } +#define OPI_Gd { DefinedOperandType::G, DefinedOperandSize::D } +#define OPI_Gq { DefinedOperandType::G, DefinedOperandSize::Q } +#define OPI_Gv { DefinedOperandType::G, DefinedOperandSize::V } +#define OPI_Gw { DefinedOperandType::G, DefinedOperandSize::W } +#define OPI_Gy { DefinedOperandType::G, DefinedOperandSize::Y } +#define OPI_Gz { DefinedOperandType::G, DefinedOperandSize::Z } +#define OPI_H { DefinedOperandType::H, DefinedOperandSize::X } +#define OPI_Hqq { DefinedOperandType::H, DefinedOperandSize::QQ } +#define OPI_Hx { DefinedOperandType::H, DefinedOperandSize::X } +#define OPI_I1 { DefinedOperandType::I1, DefinedOperandSize::NA } +#define OPI_Ib { DefinedOperandType::I, DefinedOperandSize::B } +#define OPI_Iv { DefinedOperandType::I, DefinedOperandSize::V } +#define OPI_Iw { DefinedOperandType::I, DefinedOperandSize::W } +#define OPI_Iz { DefinedOperandType::I, DefinedOperandSize::Z } +#define OPI_Jb { DefinedOperandType::J, DefinedOperandSize::B } +#define OPI_Jv { DefinedOperandType::J, DefinedOperandSize::V } +#define OPI_Jz { DefinedOperandType::J, DefinedOperandSize::Z } +#define OPI_L { DefinedOperandType::L, DefinedOperandSize::O } +#define OPI_Lx { DefinedOperandType::L, DefinedOperandSize::X } +#define OPI_M { DefinedOperandType::M, DefinedOperandSize::NA } +#define OPI_Mb { DefinedOperandType::M, DefinedOperandSize::B } +#define OPI_MbRd { DefinedOperandType::MR, DefinedOperandSize::BD } +#define OPI_MbRv { DefinedOperandType::MR, DefinedOperandSize::BV } +#define OPI_Md { DefinedOperandType::M, DefinedOperandSize::D } +#define OPI_MdRy { DefinedOperandType::MR, DefinedOperandSize::DY } +#define OPI_MdU { DefinedOperandType::MU, DefinedOperandSize::DO } +#define OPI_Mdq { DefinedOperandType::M, DefinedOperandSize::DQ } +#define OPI_Mo { DefinedOperandType::M, DefinedOperandSize::O } +#define OPI_Mq { DefinedOperandType::M, DefinedOperandSize::Q } +#define OPI_MqU { DefinedOperandType::MU, DefinedOperandSize::QO } +#define OPI_Ms { DefinedOperandType::M, DefinedOperandSize::W } +#define OPI_Mt { DefinedOperandType::M, DefinedOperandSize::T } +#define OPI_Mv { DefinedOperandType::M, DefinedOperandSize::V } +#define OPI_Mw { DefinedOperandType::M, DefinedOperandSize::W } +#define OPI_MwRd { DefinedOperandType::MR, DefinedOperandSize::WD } +#define OPI_MwRv { DefinedOperandType::MR, DefinedOperandSize::WV } +#define OPI_MwRy { DefinedOperandType::MR, DefinedOperandSize::WY } +#define OPI_MwU { DefinedOperandType::MU, DefinedOperandSize::WO } +#define OPI_N { DefinedOperandType::N, DefinedOperandSize::Q } +#define OPI_Ob { DefinedOperandType::O, DefinedOperandSize::B } +#define OPI_Ov { DefinedOperandType::O, DefinedOperandSize::V } +#define OPI_Ow { DefinedOperandType::O, DefinedOperandSize::W } +#define OPI_P { DefinedOperandType::P, DefinedOperandSize::Q } +#define OPI_Q { DefinedOperandType::Q, DefinedOperandSize::Q } +#define OPI_R { DefinedOperandType::R, DefinedOperandSize::RDQ } +#define OPI_R0b { DefinedOperandType::R0, DefinedOperandSize::B } +#define OPI_R0v { DefinedOperandType::R0, DefinedOperandSize::V } +#define OPI_R0w { DefinedOperandType::R0, DefinedOperandSize::W } +#define OPI_R0y { DefinedOperandType::R0, DefinedOperandSize::Y } +#define OPI_R0z { DefinedOperandType::R0, DefinedOperandSize::Z } +#define OPI_R1b { DefinedOperandType::R1, DefinedOperandSize::B } +#define OPI_R1v { DefinedOperandType::R1, DefinedOperandSize::V } +#define OPI_R1w { DefinedOperandType::R1, DefinedOperandSize::W } +#define OPI_R1y { DefinedOperandType::R1, DefinedOperandSize::Y } +#define OPI_R1z { DefinedOperandType::R1, DefinedOperandSize::Z } +#define OPI_R2b { DefinedOperandType::R2, DefinedOperandSize::B } +#define OPI_R2v { DefinedOperandType::R2, DefinedOperandSize::V } +#define OPI_R2w { DefinedOperandType::R2, DefinedOperandSize::W } +#define OPI_R2y { DefinedOperandType::R2, DefinedOperandSize::Y } +#define OPI_R2z { DefinedOperandType::R2, DefinedOperandSize::Z } +#define OPI_R3b { DefinedOperandType::R3, DefinedOperandSize::B } +#define OPI_R3v { DefinedOperandType::R3, DefinedOperandSize::V } +#define OPI_R3w { DefinedOperandType::R3, DefinedOperandSize::W } +#define OPI_R3y { DefinedOperandType::R3, DefinedOperandSize::Y } +#define OPI_R3z { DefinedOperandType::R3, DefinedOperandSize::Z } +#define OPI_R4b { DefinedOperandType::R4, DefinedOperandSize::B } +#define OPI_R4v { DefinedOperandType::R4, DefinedOperandSize::V } +#define OPI_R4w { DefinedOperandType::R4, DefinedOperandSize::W } +#define OPI_R4y { DefinedOperandType::R4, DefinedOperandSize::Y } +#define OPI_R4z { DefinedOperandType::R4, DefinedOperandSize::Z } +#define OPI_R5b { DefinedOperandType::R5, DefinedOperandSize::B } +#define OPI_R5v { DefinedOperandType::R5, DefinedOperandSize::V } +#define OPI_R5w { DefinedOperandType::R5, DefinedOperandSize::W } +#define OPI_R5y { DefinedOperandType::R5, DefinedOperandSize::Y } +#define OPI_R5z { DefinedOperandType::R5, DefinedOperandSize::Z } +#define OPI_R6b { DefinedOperandType::R6, DefinedOperandSize::B } +#define OPI_R6v { DefinedOperandType::R6, DefinedOperandSize::V } +#define OPI_R6w { DefinedOperandType::R6, DefinedOperandSize::W } +#define OPI_R6y { DefinedOperandType::R6, DefinedOperandSize::Y } +#define OPI_R6z { DefinedOperandType::R6, DefinedOperandSize::Z } +#define OPI_R7b { DefinedOperandType::R7, DefinedOperandSize::B } +#define OPI_R7v { DefinedOperandType::R7, DefinedOperandSize::V } +#define OPI_R7w { DefinedOperandType::R7, DefinedOperandSize::W } +#define OPI_R7y { DefinedOperandType::R7, DefinedOperandSize::Y } +#define OPI_R7z { DefinedOperandType::R7, DefinedOperandSize::Z } +#define OPI_S { DefinedOperandType::S, DefinedOperandSize::W } +#define OPI_SS { DefinedOperandType::SS, DefinedOperandSize::NA } +#define OPI_ST0 { DefinedOperandType::ST0, DefinedOperandSize::NA } +#define OPI_ST1 { DefinedOperandType::ST1, DefinedOperandSize::NA } +#define OPI_ST2 { DefinedOperandType::ST2, DefinedOperandSize::NA } +#define OPI_ST3 { DefinedOperandType::ST3, DefinedOperandSize::NA } +#define OPI_ST4 { DefinedOperandType::ST4, DefinedOperandSize::NA } +#define OPI_ST5 { DefinedOperandType::ST5, DefinedOperandSize::NA } +#define OPI_ST6 { DefinedOperandType::ST6, DefinedOperandSize::NA } +#define OPI_ST7 { DefinedOperandType::ST7, DefinedOperandSize::NA } +#define OPI_U { DefinedOperandType::U, DefinedOperandSize::O } +#define OPI_Ux { DefinedOperandType::U, DefinedOperandSize::X } +#define OPI_V { DefinedOperandType::V, DefinedOperandSize::DQ } +#define OPI_Vdq { DefinedOperandType::V, DefinedOperandSize::DQ } +#define OPI_Vqq { DefinedOperandType::V, DefinedOperandSize::QQ } +#define OPI_Vsd { DefinedOperandType::V, DefinedOperandSize::Q } +#define OPI_Vx { DefinedOperandType::V, DefinedOperandSize::X } +#define OPI_W { DefinedOperandType::W, DefinedOperandSize::DQ } +#define OPI_Wdq { DefinedOperandType::W, DefinedOperandSize::DQ } +#define OPI_Wqq { DefinedOperandType::W, DefinedOperandSize::QQ } +#define OPI_Wsd { DefinedOperandType::W, DefinedOperandSize::Q } +#define OPI_Wx { DefinedOperandType::W, DefinedOperandSize::X } +#define OPI_eAX { DefinedOperandType::EAX, DefinedOperandSize::Z } +#define OPI_eCX { DefinedOperandType::ECX, DefinedOperandSize::Z } +#define OPI_eDX { DefinedOperandType::EDX, DefinedOperandSize::Z } +#define OPI_rAX { DefinedOperandType::RAX, DefinedOperandSize::V } +#define OPI_rCX { DefinedOperandType::RCX, DefinedOperandSize::V } +#define OPI_rDX { DefinedOperandType::RDX, DefinedOperandSize::V } +#define OPI_sIb { DefinedOperandType::sI, DefinedOperandSize::B } +#define OPI_sIz { DefinedOperandType::sI, DefinedOperandSize::Z } + +const InstructionDefinition instrDefinitions[] = +{ + /* 000 */ { InstructionMnemonic::INVALID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 001 */ { InstructionMnemonic::AAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 002 */ { InstructionMnemonic::AAD, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 003 */ { InstructionMnemonic::AAM, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 004 */ { InstructionMnemonic::AAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 005 */ { InstructionMnemonic::ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 006 */ { InstructionMnemonic::ADC, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 007 */ { InstructionMnemonic::ADC, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 008 */ { InstructionMnemonic::ADC, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 009 */ { InstructionMnemonic::ADC, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00A */ { InstructionMnemonic::ADC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00B */ { InstructionMnemonic::ADC, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00C */ { InstructionMnemonic::ADC, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00D */ { InstructionMnemonic::ADC, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 00E */ { InstructionMnemonic::ADC, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 00F */ { InstructionMnemonic::ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 010 */ { InstructionMnemonic::ADD, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 011 */ { InstructionMnemonic::ADD, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 012 */ { InstructionMnemonic::ADD, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 013 */ { InstructionMnemonic::ADD, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 014 */ { InstructionMnemonic::ADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 015 */ { InstructionMnemonic::ADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 016 */ { InstructionMnemonic::ADD, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 017 */ { InstructionMnemonic::ADD, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 018 */ { InstructionMnemonic::ADD, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 019 */ { InstructionMnemonic::ADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01A */ { InstructionMnemonic::ADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01B */ { InstructionMnemonic::ADDSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01C */ { InstructionMnemonic::ADDSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01D */ { InstructionMnemonic::ADDSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01E */ { InstructionMnemonic::ADDSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 01F */ { InstructionMnemonic::AESDEC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 020 */ { InstructionMnemonic::AESDECLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 021 */ { InstructionMnemonic::AESENC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 022 */ { InstructionMnemonic::AESENCLAST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 023 */ { InstructionMnemonic::AESIMC, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 024 */ { InstructionMnemonic::AESKEYGENASSIST, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 025 */ { InstructionMnemonic::AND, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 026 */ { InstructionMnemonic::AND, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 027 */ { InstructionMnemonic::AND, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 028 */ { InstructionMnemonic::AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 029 */ { InstructionMnemonic::AND, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 02A */ { InstructionMnemonic::AND, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 02B */ { InstructionMnemonic::AND, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 02C */ { InstructionMnemonic::AND, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 02D */ { InstructionMnemonic::AND, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 02E */ { InstructionMnemonic::AND, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 02F */ { InstructionMnemonic::ANDNPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 030 */ { InstructionMnemonic::ANDNPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 031 */ { InstructionMnemonic::ANDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 032 */ { InstructionMnemonic::ANDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 033 */ { InstructionMnemonic::ARPL, { OPI_Ew, OPI_Gw, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 034 */ { InstructionMnemonic::BLENDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 035 */ { InstructionMnemonic::BLENDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 036 */ { InstructionMnemonic::BLENDVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 037 */ { InstructionMnemonic::BLENDVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 038 */ { InstructionMnemonic::BOUND, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 039 */ { InstructionMnemonic::BSF, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 03A */ { InstructionMnemonic::BSR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 03B */ { InstructionMnemonic::BSWAP, { OPI_R5y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03C */ { InstructionMnemonic::BSWAP, { OPI_R3y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03D */ { InstructionMnemonic::BSWAP, { OPI_R1y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03E */ { InstructionMnemonic::BSWAP, { OPI_R4y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 03F */ { InstructionMnemonic::BSWAP, { OPI_R0y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 040 */ { InstructionMnemonic::BSWAP, { OPI_R2y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 041 */ { InstructionMnemonic::BSWAP, { OPI_R7y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 042 */ { InstructionMnemonic::BSWAP, { OPI_R6y, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 043 */ { InstructionMnemonic::BT, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 044 */ { InstructionMnemonic::BT, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 045 */ { InstructionMnemonic::BTC, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 046 */ { InstructionMnemonic::BTC, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 047 */ { InstructionMnemonic::BTR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 048 */ { InstructionMnemonic::BTR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 049 */ { InstructionMnemonic::BTS, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 04A */ { InstructionMnemonic::BTS, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 04B */ { InstructionMnemonic::CALL, { OPI_Eq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 04C */ { InstructionMnemonic::CALL, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 04D */ { InstructionMnemonic::CALL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 04E */ { InstructionMnemonic::CALL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 04F */ { InstructionMnemonic::CALL, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 050 */ { InstructionMnemonic::CBW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 051 */ { InstructionMnemonic::CDQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 052 */ { InstructionMnemonic::CDQE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 053 */ { InstructionMnemonic::CLC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 054 */ { InstructionMnemonic::CLD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 055 */ { InstructionMnemonic::CLFLUSH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 056 */ { InstructionMnemonic::CLGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 057 */ { InstructionMnemonic::CLI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 058 */ { InstructionMnemonic::CLTS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 059 */ { InstructionMnemonic::CMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 05A */ { InstructionMnemonic::CMOVA, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05B */ { InstructionMnemonic::CMOVAE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05C */ { InstructionMnemonic::CMOVB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05D */ { InstructionMnemonic::CMOVBE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05E */ { InstructionMnemonic::CMOVE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 05F */ { InstructionMnemonic::CMOVG, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 060 */ { InstructionMnemonic::CMOVGE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 061 */ { InstructionMnemonic::CMOVL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 062 */ { InstructionMnemonic::CMOVLE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 063 */ { InstructionMnemonic::CMOVNE, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 064 */ { InstructionMnemonic::CMOVNO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 065 */ { InstructionMnemonic::CMOVNP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 066 */ { InstructionMnemonic::CMOVNS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 067 */ { InstructionMnemonic::CMOVO, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 068 */ { InstructionMnemonic::CMOVP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 069 */ { InstructionMnemonic::CMOVS, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 06A */ { InstructionMnemonic::CMP, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06B */ { InstructionMnemonic::CMP, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06C */ { InstructionMnemonic::CMP, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06D */ { InstructionMnemonic::CMP, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06E */ { InstructionMnemonic::CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 06F */ { InstructionMnemonic::CMP, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 070 */ { InstructionMnemonic::CMP, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, + /* 071 */ { InstructionMnemonic::CMP, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 072 */ { InstructionMnemonic::CMP, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 073 */ { InstructionMnemonic::CMP, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 }, + /* 074 */ { InstructionMnemonic::CMPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 075 */ { InstructionMnemonic::CMPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 076 */ { InstructionMnemonic::CMPSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 077 */ { InstructionMnemonic::CMPSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 078 */ { InstructionMnemonic::CMPSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 079 */ { InstructionMnemonic::CMPSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 07A */ { InstructionMnemonic::CMPSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07B */ { InstructionMnemonic::CMPSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 07C */ { InstructionMnemonic::CMPXCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07D */ { InstructionMnemonic::CMPXCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07E */ { InstructionMnemonic::CMPXCHG16B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 07F */ { InstructionMnemonic::CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 080 */ { InstructionMnemonic::CMPXCHG8B, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 081 */ { InstructionMnemonic::COMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 082 */ { InstructionMnemonic::COMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 083 */ { InstructionMnemonic::CPUID, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 084 */ { InstructionMnemonic::CQO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 085 */ { InstructionMnemonic::CRC32, { OPI_Gy, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 086 */ { InstructionMnemonic::CRC32, { OPI_Gy, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 087 */ { InstructionMnemonic::CVTDQ2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 088 */ { InstructionMnemonic::CVTDQ2PS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 089 */ { InstructionMnemonic::CVTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08A */ { InstructionMnemonic::CVTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08B */ { InstructionMnemonic::CVTPD2PS, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08C */ { InstructionMnemonic::CVTPI2PD, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08D */ { InstructionMnemonic::CVTPI2PS, { OPI_V, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08E */ { InstructionMnemonic::CVTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 08F */ { InstructionMnemonic::CVTPS2PD, { OPI_V, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 090 */ { InstructionMnemonic::CVTPS2PI, { OPI_P, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 091 */ { InstructionMnemonic::CVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 092 */ { InstructionMnemonic::CVTSD2SS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 093 */ { InstructionMnemonic::CVTSI2SD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 094 */ { InstructionMnemonic::CVTSI2SS, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 095 */ { InstructionMnemonic::CVTSS2SD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 096 */ { InstructionMnemonic::CVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 097 */ { InstructionMnemonic::CVTTPD2DQ, { OPI_Vdq, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 098 */ { InstructionMnemonic::CVTTPD2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 099 */ { InstructionMnemonic::CVTTPS2DQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09A */ { InstructionMnemonic::CVTTPS2PI, { OPI_P, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09B */ { InstructionMnemonic::CVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09C */ { InstructionMnemonic::CVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 09D */ { InstructionMnemonic::CWD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 09E */ { InstructionMnemonic::CWDE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 09F */ { InstructionMnemonic::DAA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 0A0 */ { InstructionMnemonic::DAS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 0A1 */ { InstructionMnemonic::DEC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A2 */ { InstructionMnemonic::DEC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A3 */ { InstructionMnemonic::DEC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A4 */ { InstructionMnemonic::DEC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0A5 */ { InstructionMnemonic::DEC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0A6 */ { InstructionMnemonic::DEC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A7 */ { InstructionMnemonic::DEC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A8 */ { InstructionMnemonic::DEC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0A9 */ { InstructionMnemonic::DEC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0AA */ { InstructionMnemonic::DEC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 0AB */ { InstructionMnemonic::DIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 0AC */ { InstructionMnemonic::DIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 0AD */ { InstructionMnemonic::DIVPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0AE */ { InstructionMnemonic::DIVPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0AF */ { InstructionMnemonic::DIVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B0 */ { InstructionMnemonic::DIVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B1 */ { InstructionMnemonic::DPPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B2 */ { InstructionMnemonic::DPPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 0B3 */ { InstructionMnemonic::EMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0B4 */ { InstructionMnemonic::ENTER, { OPI_Iw, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, + /* 0B5 */ { InstructionMnemonic::EXTRACTPS, { OPI_MdRy, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 0B6 */ { InstructionMnemonic::F2XM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0B7 */ { InstructionMnemonic::FABS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0B8 */ { InstructionMnemonic::FADD, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0B9 */ { InstructionMnemonic::FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BA */ { InstructionMnemonic::FADD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0BB */ { InstructionMnemonic::FADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0BC */ { InstructionMnemonic::FADD, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BD */ { InstructionMnemonic::FADD, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BE */ { InstructionMnemonic::FADD, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0BF */ { InstructionMnemonic::FADD, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0C0 */ { InstructionMnemonic::FADD, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0C1 */ { InstructionMnemonic::FADD, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0C2 */ { InstructionMnemonic::FADD, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0C3 */ { InstructionMnemonic::FADD, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0C4 */ { InstructionMnemonic::FADD, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0C5 */ { InstructionMnemonic::FADD, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0C6 */ { InstructionMnemonic::FADD, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0C7 */ { InstructionMnemonic::FADD, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0C8 */ { InstructionMnemonic::FADD, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0C9 */ { InstructionMnemonic::FADD, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CA */ { InstructionMnemonic::FADDP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CB */ { InstructionMnemonic::FADDP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CC */ { InstructionMnemonic::FADDP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CD */ { InstructionMnemonic::FADDP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CE */ { InstructionMnemonic::FADDP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0CF */ { InstructionMnemonic::FADDP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0D0 */ { InstructionMnemonic::FADDP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0D1 */ { InstructionMnemonic::FADDP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0D2 */ { InstructionMnemonic::FBLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0D3 */ { InstructionMnemonic::FBSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 0D4 */ { InstructionMnemonic::FCHS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0D5 */ { InstructionMnemonic::FCLEX, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 0D6 */ { InstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0D7 */ { InstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0D8 */ { InstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0D9 */ { InstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0DA */ { InstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0DB */ { InstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0DC */ { InstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0DD */ { InstructionMnemonic::FCMOVB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0DE */ { InstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0DF */ { InstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0E0 */ { InstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0E1 */ { InstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0E2 */ { InstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0E3 */ { InstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0E4 */ { InstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0E5 */ { InstructionMnemonic::FCMOVBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0E6 */ { InstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0E7 */ { InstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0E8 */ { InstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0E9 */ { InstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0EA */ { InstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0EB */ { InstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0EC */ { InstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0ED */ { InstructionMnemonic::FCMOVE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0EE */ { InstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0EF */ { InstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0F0 */ { InstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0F1 */ { InstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0F2 */ { InstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0F3 */ { InstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0F4 */ { InstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0F5 */ { InstructionMnemonic::FCMOVNB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0F6 */ { InstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 0F7 */ { InstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 0F8 */ { InstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 0F9 */ { InstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 0FA */ { InstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 0FB */ { InstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 0FC */ { InstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 0FD */ { InstructionMnemonic::FCMOVNBE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0FE */ { InstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 0FF */ { InstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 100 */ { InstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 101 */ { InstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 102 */ { InstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 103 */ { InstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 104 */ { InstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 105 */ { InstructionMnemonic::FCMOVNE, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 106 */ { InstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 107 */ { InstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 108 */ { InstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 109 */ { InstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 10A */ { InstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 10B */ { InstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 10C */ { InstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 10D */ { InstructionMnemonic::FCMOVNU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 10E */ { InstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 10F */ { InstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 110 */ { InstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 111 */ { InstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 112 */ { InstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 113 */ { InstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 114 */ { InstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 115 */ { InstructionMnemonic::FCMOVU, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 116 */ { InstructionMnemonic::FCOM, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 117 */ { InstructionMnemonic::FCOM, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 118 */ { InstructionMnemonic::FCOM, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 119 */ { InstructionMnemonic::FCOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 11A */ { InstructionMnemonic::FCOM, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 11B */ { InstructionMnemonic::FCOM, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 11C */ { InstructionMnemonic::FCOM, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 11D */ { InstructionMnemonic::FCOM, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 11E */ { InstructionMnemonic::FCOM, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 11F */ { InstructionMnemonic::FCOM, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 120 */ { InstructionMnemonic::FCOM2, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 121 */ { InstructionMnemonic::FCOM2, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 122 */ { InstructionMnemonic::FCOM2, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 123 */ { InstructionMnemonic::FCOM2, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 124 */ { InstructionMnemonic::FCOM2, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 125 */ { InstructionMnemonic::FCOM2, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 126 */ { InstructionMnemonic::FCOM2, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 127 */ { InstructionMnemonic::FCOM2, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 128 */ { InstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 129 */ { InstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 12A */ { InstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 12B */ { InstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 12C */ { InstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 12D */ { InstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 12E */ { InstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 12F */ { InstructionMnemonic::FCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 130 */ { InstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 131 */ { InstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 132 */ { InstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 133 */ { InstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 134 */ { InstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 135 */ { InstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 136 */ { InstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 137 */ { InstructionMnemonic::FCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 138 */ { InstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 139 */ { InstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 13A */ { InstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 13B */ { InstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 13C */ { InstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 13D */ { InstructionMnemonic::FCOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 13E */ { InstructionMnemonic::FCOMP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 13F */ { InstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 140 */ { InstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 141 */ { InstructionMnemonic::FCOMP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 142 */ { InstructionMnemonic::FCOMP3, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 143 */ { InstructionMnemonic::FCOMP3, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 144 */ { InstructionMnemonic::FCOMP3, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 145 */ { InstructionMnemonic::FCOMP3, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 146 */ { InstructionMnemonic::FCOMP3, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 147 */ { InstructionMnemonic::FCOMP3, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 148 */ { InstructionMnemonic::FCOMP3, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 149 */ { InstructionMnemonic::FCOMP3, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14A */ { InstructionMnemonic::FCOMP5, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14B */ { InstructionMnemonic::FCOMP5, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14C */ { InstructionMnemonic::FCOMP5, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14D */ { InstructionMnemonic::FCOMP5, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14E */ { InstructionMnemonic::FCOMP5, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 14F */ { InstructionMnemonic::FCOMP5, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 150 */ { InstructionMnemonic::FCOMP5, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 151 */ { InstructionMnemonic::FCOMP5, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 152 */ { InstructionMnemonic::FCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 153 */ { InstructionMnemonic::FCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 154 */ { InstructionMnemonic::FDECSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 155 */ { InstructionMnemonic::FDIV, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 156 */ { InstructionMnemonic::FDIV, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 157 */ { InstructionMnemonic::FDIV, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 158 */ { InstructionMnemonic::FDIV, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 159 */ { InstructionMnemonic::FDIV, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 15A */ { InstructionMnemonic::FDIV, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 15B */ { InstructionMnemonic::FDIV, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15C */ { InstructionMnemonic::FDIV, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15D */ { InstructionMnemonic::FDIV, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15E */ { InstructionMnemonic::FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 15F */ { InstructionMnemonic::FDIV, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 160 */ { InstructionMnemonic::FDIV, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 161 */ { InstructionMnemonic::FDIV, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 162 */ { InstructionMnemonic::FDIV, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 163 */ { InstructionMnemonic::FDIV, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 164 */ { InstructionMnemonic::FDIV, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 165 */ { InstructionMnemonic::FDIV, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 166 */ { InstructionMnemonic::FDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 167 */ { InstructionMnemonic::FDIVP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 168 */ { InstructionMnemonic::FDIVP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 169 */ { InstructionMnemonic::FDIVP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16A */ { InstructionMnemonic::FDIVP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16B */ { InstructionMnemonic::FDIVP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16C */ { InstructionMnemonic::FDIVP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16D */ { InstructionMnemonic::FDIVP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16E */ { InstructionMnemonic::FDIVP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 16F */ { InstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 170 */ { InstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 171 */ { InstructionMnemonic::FDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 172 */ { InstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 173 */ { InstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 174 */ { InstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 175 */ { InstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 176 */ { InstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 177 */ { InstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 178 */ { InstructionMnemonic::FDIVR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 179 */ { InstructionMnemonic::FDIVR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17A */ { InstructionMnemonic::FDIVR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 17B */ { InstructionMnemonic::FDIVR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17C */ { InstructionMnemonic::FDIVR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17D */ { InstructionMnemonic::FDIVR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17E */ { InstructionMnemonic::FDIVR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 17F */ { InstructionMnemonic::FDIVR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 180 */ { InstructionMnemonic::FDIVR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 181 */ { InstructionMnemonic::FDIVRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 182 */ { InstructionMnemonic::FDIVRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 183 */ { InstructionMnemonic::FDIVRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 184 */ { InstructionMnemonic::FDIVRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 185 */ { InstructionMnemonic::FDIVRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 186 */ { InstructionMnemonic::FDIVRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 187 */ { InstructionMnemonic::FDIVRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 188 */ { InstructionMnemonic::FDIVRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 189 */ { InstructionMnemonic::FEMMS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18A */ { InstructionMnemonic::FFREE, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18B */ { InstructionMnemonic::FFREE, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18C */ { InstructionMnemonic::FFREE, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18D */ { InstructionMnemonic::FFREE, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18E */ { InstructionMnemonic::FFREE, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 18F */ { InstructionMnemonic::FFREE, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 190 */ { InstructionMnemonic::FFREE, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 191 */ { InstructionMnemonic::FFREE, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 192 */ { InstructionMnemonic::FFREEP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 193 */ { InstructionMnemonic::FFREEP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 194 */ { InstructionMnemonic::FFREEP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 195 */ { InstructionMnemonic::FFREEP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 196 */ { InstructionMnemonic::FFREEP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 197 */ { InstructionMnemonic::FFREEP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 198 */ { InstructionMnemonic::FFREEP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 199 */ { InstructionMnemonic::FFREEP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 19A */ { InstructionMnemonic::FIADD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19B */ { InstructionMnemonic::FIADD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19C */ { InstructionMnemonic::FICOM, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19D */ { InstructionMnemonic::FICOM, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19E */ { InstructionMnemonic::FICOMP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 19F */ { InstructionMnemonic::FICOMP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A0 */ { InstructionMnemonic::FIDIV, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A1 */ { InstructionMnemonic::FIDIV, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A2 */ { InstructionMnemonic::FIDIVR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A3 */ { InstructionMnemonic::FIDIVR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A4 */ { InstructionMnemonic::FILD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A5 */ { InstructionMnemonic::FILD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A6 */ { InstructionMnemonic::FILD, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A7 */ { InstructionMnemonic::FIMUL, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A8 */ { InstructionMnemonic::FIMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1A9 */ { InstructionMnemonic::FINCSTP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1AA */ { InstructionMnemonic::FIST, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AB */ { InstructionMnemonic::FIST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AC */ { InstructionMnemonic::FISTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AD */ { InstructionMnemonic::FISTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AE */ { InstructionMnemonic::FISTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1AF */ { InstructionMnemonic::FISTTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B0 */ { InstructionMnemonic::FISTTP, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B1 */ { InstructionMnemonic::FISTTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B2 */ { InstructionMnemonic::FISUB, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B3 */ { InstructionMnemonic::FISUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B4 */ { InstructionMnemonic::FISUBR, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B5 */ { InstructionMnemonic::FISUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1B6 */ { InstructionMnemonic::FLD, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1B7 */ { InstructionMnemonic::FLD, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1B8 */ { InstructionMnemonic::FLD, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1B9 */ { InstructionMnemonic::FLD, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1BA */ { InstructionMnemonic::FLD, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1BB */ { InstructionMnemonic::FLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1BC */ { InstructionMnemonic::FLD, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1BD */ { InstructionMnemonic::FLD, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1BE */ { InstructionMnemonic::FLD, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1BF */ { InstructionMnemonic::FLD, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C0 */ { InstructionMnemonic::FLD, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C1 */ { InstructionMnemonic::FLD1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C2 */ { InstructionMnemonic::FLDCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1C3 */ { InstructionMnemonic::FLDENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1C4 */ { InstructionMnemonic::FLDL2E, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C5 */ { InstructionMnemonic::FLDL2T, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C6 */ { InstructionMnemonic::FLDLG2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C7 */ { InstructionMnemonic::FLDLN2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C8 */ { InstructionMnemonic::FLDPI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1C9 */ { InstructionMnemonic::FLDZ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1CA */ { InstructionMnemonic::FMUL, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CB */ { InstructionMnemonic::FMUL, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CC */ { InstructionMnemonic::FMUL, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CD */ { InstructionMnemonic::FMUL, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 1CE */ { InstructionMnemonic::FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1CF */ { InstructionMnemonic::FMUL, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1D0 */ { InstructionMnemonic::FMUL, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D1 */ { InstructionMnemonic::FMUL, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D2 */ { InstructionMnemonic::FMUL, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1D3 */ { InstructionMnemonic::FMUL, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D4 */ { InstructionMnemonic::FMUL, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D5 */ { InstructionMnemonic::FMUL, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1D6 */ { InstructionMnemonic::FMUL, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 1D7 */ { InstructionMnemonic::FMUL, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 1D8 */ { InstructionMnemonic::FMUL, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 1D9 */ { InstructionMnemonic::FMUL, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 1DA */ { InstructionMnemonic::FMUL, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 1DB */ { InstructionMnemonic::FMUL, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 1DC */ { InstructionMnemonic::FMULP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1DD */ { InstructionMnemonic::FMULP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1DE */ { InstructionMnemonic::FMULP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1DF */ { InstructionMnemonic::FMULP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E0 */ { InstructionMnemonic::FMULP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E1 */ { InstructionMnemonic::FMULP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E2 */ { InstructionMnemonic::FMULP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E3 */ { InstructionMnemonic::FMULP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 1E4 */ { InstructionMnemonic::FNDISI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E5 */ { InstructionMnemonic::FNENI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E6 */ { InstructionMnemonic::FNINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E7 */ { InstructionMnemonic::FNOP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1E8 */ { InstructionMnemonic::FNSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1E9 */ { InstructionMnemonic::FNSETPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1EA */ { InstructionMnemonic::FNSTCW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1EB */ { InstructionMnemonic::FNSTENV, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1EC */ { InstructionMnemonic::FNSTSW, { OPI_AX, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1ED */ { InstructionMnemonic::FNSTSW, { OPI_Mw, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1EE */ { InstructionMnemonic::FPATAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1EF */ { InstructionMnemonic::FPREM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F0 */ { InstructionMnemonic::FPREM1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F1 */ { InstructionMnemonic::FPTAN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F2 */ { InstructionMnemonic::FRNDINT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F3 */ { InstructionMnemonic::FRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1F4 */ { InstructionMnemonic::FRSTPM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F5 */ { InstructionMnemonic::FSCALE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F6 */ { InstructionMnemonic::FSIN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F7 */ { InstructionMnemonic::FSINCOS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F8 */ { InstructionMnemonic::FSQRT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1F9 */ { InstructionMnemonic::FST, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FA */ { InstructionMnemonic::FST, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FB */ { InstructionMnemonic::FST, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FC */ { InstructionMnemonic::FST, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FD */ { InstructionMnemonic::FST, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 1FE */ { InstructionMnemonic::FST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 1FF */ { InstructionMnemonic::FST, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 200 */ { InstructionMnemonic::FST, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 201 */ { InstructionMnemonic::FST, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 202 */ { InstructionMnemonic::FST, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 203 */ { InstructionMnemonic::FSTP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 204 */ { InstructionMnemonic::FSTP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 205 */ { InstructionMnemonic::FSTP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 206 */ { InstructionMnemonic::FSTP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 207 */ { InstructionMnemonic::FSTP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 208 */ { InstructionMnemonic::FSTP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 209 */ { InstructionMnemonic::FSTP, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 20A */ { InstructionMnemonic::FSTP, { OPI_Mt, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 20B */ { InstructionMnemonic::FSTP, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 20C */ { InstructionMnemonic::FSTP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 20D */ { InstructionMnemonic::FSTP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 20E */ { InstructionMnemonic::FSTP1, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 20F */ { InstructionMnemonic::FSTP1, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 210 */ { InstructionMnemonic::FSTP1, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 211 */ { InstructionMnemonic::FSTP1, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 212 */ { InstructionMnemonic::FSTP1, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 213 */ { InstructionMnemonic::FSTP1, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 214 */ { InstructionMnemonic::FSTP1, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 215 */ { InstructionMnemonic::FSTP1, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 216 */ { InstructionMnemonic::FSTP8, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 217 */ { InstructionMnemonic::FSTP8, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 218 */ { InstructionMnemonic::FSTP8, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 219 */ { InstructionMnemonic::FSTP8, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21A */ { InstructionMnemonic::FSTP8, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21B */ { InstructionMnemonic::FSTP8, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21C */ { InstructionMnemonic::FSTP8, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21D */ { InstructionMnemonic::FSTP8, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21E */ { InstructionMnemonic::FSTP9, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 21F */ { InstructionMnemonic::FSTP9, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 220 */ { InstructionMnemonic::FSTP9, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 221 */ { InstructionMnemonic::FSTP9, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 222 */ { InstructionMnemonic::FSTP9, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 223 */ { InstructionMnemonic::FSTP9, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 224 */ { InstructionMnemonic::FSTP9, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 225 */ { InstructionMnemonic::FSTP9, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 226 */ { InstructionMnemonic::FSUB, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 227 */ { InstructionMnemonic::FSUB, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 228 */ { InstructionMnemonic::FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 229 */ { InstructionMnemonic::FSUB, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 22A */ { InstructionMnemonic::FSUB, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 22B */ { InstructionMnemonic::FSUB, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 22C */ { InstructionMnemonic::FSUB, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 22D */ { InstructionMnemonic::FSUB, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 22E */ { InstructionMnemonic::FSUB, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 22F */ { InstructionMnemonic::FSUB, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 230 */ { InstructionMnemonic::FSUB, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 231 */ { InstructionMnemonic::FSUB, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 232 */ { InstructionMnemonic::FSUB, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 233 */ { InstructionMnemonic::FSUB, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 234 */ { InstructionMnemonic::FSUB, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 235 */ { InstructionMnemonic::FSUB, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 236 */ { InstructionMnemonic::FSUB, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 237 */ { InstructionMnemonic::FSUB, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 238 */ { InstructionMnemonic::FSUBP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 239 */ { InstructionMnemonic::FSUBP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23A */ { InstructionMnemonic::FSUBP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23B */ { InstructionMnemonic::FSUBP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23C */ { InstructionMnemonic::FSUBP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23D */ { InstructionMnemonic::FSUBP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23E */ { InstructionMnemonic::FSUBP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 23F */ { InstructionMnemonic::FSUBP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 240 */ { InstructionMnemonic::FSUBR, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 241 */ { InstructionMnemonic::FSUBR, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 242 */ { InstructionMnemonic::FSUBR, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 243 */ { InstructionMnemonic::FSUBR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 244 */ { InstructionMnemonic::FSUBR, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 245 */ { InstructionMnemonic::FSUBR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 246 */ { InstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 247 */ { InstructionMnemonic::FSUBR, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 248 */ { InstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 249 */ { InstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 24A */ { InstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 24B */ { InstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 24C */ { InstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 24D */ { InstructionMnemonic::FSUBR, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 24E */ { InstructionMnemonic::FSUBR, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 24F */ { InstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 250 */ { InstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 251 */ { InstructionMnemonic::FSUBR, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 252 */ { InstructionMnemonic::FSUBRP, { OPI_ST5, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 253 */ { InstructionMnemonic::FSUBRP, { OPI_ST4, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 254 */ { InstructionMnemonic::FSUBRP, { OPI_ST7, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 255 */ { InstructionMnemonic::FSUBRP, { OPI_ST6, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 256 */ { InstructionMnemonic::FSUBRP, { OPI_ST2, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 257 */ { InstructionMnemonic::FSUBRP, { OPI_ST3, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 258 */ { InstructionMnemonic::FSUBRP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 259 */ { InstructionMnemonic::FSUBRP, { OPI_ST1, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 25A */ { InstructionMnemonic::FTST, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25B */ { InstructionMnemonic::FUCOM, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25C */ { InstructionMnemonic::FUCOM, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25D */ { InstructionMnemonic::FUCOM, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25E */ { InstructionMnemonic::FUCOM, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 25F */ { InstructionMnemonic::FUCOM, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 260 */ { InstructionMnemonic::FUCOM, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 261 */ { InstructionMnemonic::FUCOM, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 262 */ { InstructionMnemonic::FUCOM, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 263 */ { InstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 264 */ { InstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 265 */ { InstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 266 */ { InstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 267 */ { InstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 268 */ { InstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 269 */ { InstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 26A */ { InstructionMnemonic::FUCOMI, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 26B */ { InstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 26C */ { InstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 26D */ { InstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 26E */ { InstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 26F */ { InstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 270 */ { InstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 271 */ { InstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 272 */ { InstructionMnemonic::FUCOMIP, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 273 */ { InstructionMnemonic::FUCOMP, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 274 */ { InstructionMnemonic::FUCOMP, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 275 */ { InstructionMnemonic::FUCOMP, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 276 */ { InstructionMnemonic::FUCOMP, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 277 */ { InstructionMnemonic::FUCOMP, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 278 */ { InstructionMnemonic::FUCOMP, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 279 */ { InstructionMnemonic::FUCOMP, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27A */ { InstructionMnemonic::FUCOMP, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27B */ { InstructionMnemonic::FUCOMPP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27C */ { InstructionMnemonic::FXAM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 27D */ { InstructionMnemonic::FXCH, { OPI_ST0, OPI_ST4, OPI_NONE, OPI_NONE }, 0 }, + /* 27E */ { InstructionMnemonic::FXCH, { OPI_ST0, OPI_ST5, OPI_NONE, OPI_NONE }, 0 }, + /* 27F */ { InstructionMnemonic::FXCH, { OPI_ST0, OPI_ST6, OPI_NONE, OPI_NONE }, 0 }, + /* 280 */ { InstructionMnemonic::FXCH, { OPI_ST0, OPI_ST3, OPI_NONE, OPI_NONE }, 0 }, + /* 281 */ { InstructionMnemonic::FXCH, { OPI_ST0, OPI_ST0, OPI_NONE, OPI_NONE }, 0 }, + /* 282 */ { InstructionMnemonic::FXCH, { OPI_ST0, OPI_ST1, OPI_NONE, OPI_NONE }, 0 }, + /* 283 */ { InstructionMnemonic::FXCH, { OPI_ST0, OPI_ST2, OPI_NONE, OPI_NONE }, 0 }, + /* 284 */ { InstructionMnemonic::FXCH, { OPI_ST0, OPI_ST7, OPI_NONE, OPI_NONE }, 0 }, + /* 285 */ { InstructionMnemonic::FXCH4, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 286 */ { InstructionMnemonic::FXCH4, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 287 */ { InstructionMnemonic::FXCH4, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 288 */ { InstructionMnemonic::FXCH4, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 289 */ { InstructionMnemonic::FXCH4, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28A */ { InstructionMnemonic::FXCH4, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28B */ { InstructionMnemonic::FXCH4, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28C */ { InstructionMnemonic::FXCH4, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28D */ { InstructionMnemonic::FXCH7, { OPI_ST2, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28E */ { InstructionMnemonic::FXCH7, { OPI_ST3, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 28F */ { InstructionMnemonic::FXCH7, { OPI_ST0, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 290 */ { InstructionMnemonic::FXCH7, { OPI_ST1, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 291 */ { InstructionMnemonic::FXCH7, { OPI_ST6, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 292 */ { InstructionMnemonic::FXCH7, { OPI_ST7, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 293 */ { InstructionMnemonic::FXCH7, { OPI_ST4, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 294 */ { InstructionMnemonic::FXCH7, { OPI_ST5, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 295 */ { InstructionMnemonic::FXRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 296 */ { InstructionMnemonic::FXSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 297 */ { InstructionMnemonic::FXTRACT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 298 */ { InstructionMnemonic::FYL2X, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 299 */ { InstructionMnemonic::FYL2XP1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 29A */ { InstructionMnemonic::GETSEC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 29B */ { InstructionMnemonic::HADDPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 29C */ { InstructionMnemonic::HADDPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 29D */ { InstructionMnemonic::HLT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 29E */ { InstructionMnemonic::HSUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 29F */ { InstructionMnemonic::HSUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A0 */ { InstructionMnemonic::IDIV, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2A1 */ { InstructionMnemonic::IDIV, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2A2 */ { InstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A3 */ { InstructionMnemonic::IMUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A4 */ { InstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_Iz, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A5 */ { InstructionMnemonic::IMUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A6 */ { InstructionMnemonic::IMUL, { OPI_Gv, OPI_Ev, OPI_sIb, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2A7 */ { InstructionMnemonic::IN, { OPI_AL, OPI_DX, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 2A8 */ { InstructionMnemonic::IN, { OPI_eAX, OPI_DX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2A9 */ { InstructionMnemonic::IN, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 2AA */ { InstructionMnemonic::IN, { OPI_eAX, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2AB */ { InstructionMnemonic::INC, { OPI_R0z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AC */ { InstructionMnemonic::INC, { OPI_R1z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AD */ { InstructionMnemonic::INC, { OPI_R7z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AE */ { InstructionMnemonic::INC, { OPI_R6z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2AF */ { InstructionMnemonic::INC, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2B0 */ { InstructionMnemonic::INC, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 2B1 */ { InstructionMnemonic::INC, { OPI_R3z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B2 */ { InstructionMnemonic::INC, { OPI_R2z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B3 */ { InstructionMnemonic::INC, { OPI_R4z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B4 */ { InstructionMnemonic::INC, { OPI_R5z, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_READWRITE }, + /* 2B5 */ { InstructionMnemonic::INSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 2B6 */ { InstructionMnemonic::INSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 2B7 */ { InstructionMnemonic::INSERTPS, { OPI_V, OPI_Md, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2B8 */ { InstructionMnemonic::INSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 2B9 */ { InstructionMnemonic::INT, { OPI_Ib, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BA */ { InstructionMnemonic::INT1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BB */ { InstructionMnemonic::INT3, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BC */ { InstructionMnemonic::INTO, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 2BD */ { InstructionMnemonic::INVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2BE */ { InstructionMnemonic::INVEPT, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2BF */ { InstructionMnemonic::INVEPT, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2C0 */ { InstructionMnemonic::INVLPG, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2C1 */ { InstructionMnemonic::INVLPGA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2C2 */ { InstructionMnemonic::INVVPID, { OPI_Gq, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2C3 */ { InstructionMnemonic::INVVPID, { OPI_Gd, OPI_Mo, OPI_NONE, OPI_NONE }, 0 }, + /* 2C4 */ { InstructionMnemonic::IRETD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 2C5 */ { InstructionMnemonic::IRETQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 2C6 */ { InstructionMnemonic::IRETW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 2C7 */ { InstructionMnemonic::JA, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2C8 */ { InstructionMnemonic::JA, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2C9 */ { InstructionMnemonic::JB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2CA */ { InstructionMnemonic::JB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2CB */ { InstructionMnemonic::JBE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2CC */ { InstructionMnemonic::JBE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2CD */ { InstructionMnemonic::JCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, + /* 2CE */ { InstructionMnemonic::JE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2CF */ { InstructionMnemonic::JE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D0 */ { InstructionMnemonic::JECXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, + /* 2D1 */ { InstructionMnemonic::JG, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D2 */ { InstructionMnemonic::JG, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D3 */ { InstructionMnemonic::JGE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D4 */ { InstructionMnemonic::JGE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D5 */ { InstructionMnemonic::JL, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D6 */ { InstructionMnemonic::JL, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D7 */ { InstructionMnemonic::JLE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2D8 */ { InstructionMnemonic::JLE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2D9 */ { InstructionMnemonic::JMP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 2DA */ { InstructionMnemonic::JMP, { OPI_Fv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2DB */ { InstructionMnemonic::JMP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 2DC */ { InstructionMnemonic::JMP, { OPI_Av, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 2DD */ { InstructionMnemonic::JMP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_DEFAULT_64 }, + /* 2DE */ { InstructionMnemonic::JNB, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2DF */ { InstructionMnemonic::JNB, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E0 */ { InstructionMnemonic::JNE, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E1 */ { InstructionMnemonic::JNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E2 */ { InstructionMnemonic::JNO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E3 */ { InstructionMnemonic::JNO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E4 */ { InstructionMnemonic::JNP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E5 */ { InstructionMnemonic::JNP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E6 */ { InstructionMnemonic::JNS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E7 */ { InstructionMnemonic::JNS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2E8 */ { InstructionMnemonic::JO, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2E9 */ { InstructionMnemonic::JO, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2EA */ { InstructionMnemonic::JP, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2EB */ { InstructionMnemonic::JP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2EC */ { InstructionMnemonic::JRCXZ, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX }, + /* 2ED */ { InstructionMnemonic::JS, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2EE */ { InstructionMnemonic::JS, { OPI_Jz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 2EF */ { InstructionMnemonic::LAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2F0 */ { InstructionMnemonic::LAR, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F1 */ { InstructionMnemonic::LDDQU, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F2 */ { InstructionMnemonic::LDMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2F3 */ { InstructionMnemonic::LDS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2F4 */ { InstructionMnemonic::LEA, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F5 */ { InstructionMnemonic::LEAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2F6 */ { InstructionMnemonic::LES, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_OPERAND1_WRITE }, + /* 2F7 */ { InstructionMnemonic::LFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 2F8 */ { InstructionMnemonic::LFS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2F9 */ { InstructionMnemonic::LGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FA */ { InstructionMnemonic::LGS, { OPI_Gz, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 2FB */ { InstructionMnemonic::LIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FC */ { InstructionMnemonic::LLDT, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FD */ { InstructionMnemonic::LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FE */ { InstructionMnemonic::LMSW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 2FF */ { InstructionMnemonic::LOCK, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 300 */ { InstructionMnemonic::LODSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 301 */ { InstructionMnemonic::LODSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 302 */ { InstructionMnemonic::LODSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 303 */ { InstructionMnemonic::LODSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 304 */ { InstructionMnemonic::LOOP, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 305 */ { InstructionMnemonic::LOOPE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 306 */ { InstructionMnemonic::LOOPNE, { OPI_Jb, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 307 */ { InstructionMnemonic::LSL, { OPI_Gv, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 308 */ { InstructionMnemonic::LSS, { OPI_Gv, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 309 */ { InstructionMnemonic::LTR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 30A */ { InstructionMnemonic::MASKMOVDQU, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 30B */ { InstructionMnemonic::MASKMOVQ, { OPI_P, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 30C */ { InstructionMnemonic::MAXPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 30D */ { InstructionMnemonic::MAXPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 30E */ { InstructionMnemonic::MAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 30F */ { InstructionMnemonic::MAXSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 310 */ { InstructionMnemonic::MFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 311 */ { InstructionMnemonic::MINPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 312 */ { InstructionMnemonic::MINPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 313 */ { InstructionMnemonic::MINSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 314 */ { InstructionMnemonic::MINSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 315 */ { InstructionMnemonic::MONITOR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 316 */ { InstructionMnemonic::MONTMUL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 317 */ { InstructionMnemonic::MOV, { OPI_R0b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 318 */ { InstructionMnemonic::MOV, { OPI_R2b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 319 */ { InstructionMnemonic::MOV, { OPI_R3b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31A */ { InstructionMnemonic::MOV, { OPI_R1b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31B */ { InstructionMnemonic::MOV, { OPI_AL, OPI_Ob, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 31C */ { InstructionMnemonic::MOV, { OPI_S, OPI_MwRv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31D */ { InstructionMnemonic::MOV, { OPI_MwRv, OPI_S, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 31E */ { InstructionMnemonic::MOV, { OPI_Ov, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 31F */ { InstructionMnemonic::MOV, { OPI_Ob, OPI_AL, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 320 */ { InstructionMnemonic::MOV, { OPI_rAX, OPI_Ov, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 321 */ { InstructionMnemonic::MOV, { OPI_R4b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 322 */ { InstructionMnemonic::MOV, { OPI_R7v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 323 */ { InstructionMnemonic::MOV, { OPI_R6v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 324 */ { InstructionMnemonic::MOV, { OPI_R5v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 325 */ { InstructionMnemonic::MOV, { OPI_R, OPI_C, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 326 */ { InstructionMnemonic::MOV, { OPI_D, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 327 */ { InstructionMnemonic::MOV, { OPI_C, OPI_R, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 328 */ { InstructionMnemonic::MOV, { OPI_R, OPI_D, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 329 */ { InstructionMnemonic::MOV, { OPI_R4v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32A */ { InstructionMnemonic::MOV, { OPI_R7b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32B */ { InstructionMnemonic::MOV, { OPI_R6b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32C */ { InstructionMnemonic::MOV, { OPI_R5b, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32D */ { InstructionMnemonic::MOV, { OPI_R0v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32E */ { InstructionMnemonic::MOV, { OPI_R3v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 32F */ { InstructionMnemonic::MOV, { OPI_R2v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 330 */ { InstructionMnemonic::MOV, { OPI_R1v, OPI_Iv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 331 */ { InstructionMnemonic::MOV, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 332 */ { InstructionMnemonic::MOV, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 333 */ { InstructionMnemonic::MOV, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 334 */ { InstructionMnemonic::MOV, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 335 */ { InstructionMnemonic::MOV, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 336 */ { InstructionMnemonic::MOV, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 337 */ { InstructionMnemonic::MOVAPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 338 */ { InstructionMnemonic::MOVAPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 339 */ { InstructionMnemonic::MOVAPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33A */ { InstructionMnemonic::MOVAPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33B */ { InstructionMnemonic::MOVBE, { OPI_Gv, OPI_Mv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33C */ { InstructionMnemonic::MOVBE, { OPI_Mv, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33D */ { InstructionMnemonic::MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33E */ { InstructionMnemonic::MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 33F */ { InstructionMnemonic::MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 340 */ { InstructionMnemonic::MOVD, { OPI_Ey, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 341 */ { InstructionMnemonic::MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 342 */ { InstructionMnemonic::MOVD, { OPI_V, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 343 */ { InstructionMnemonic::MOVD, { OPI_P, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 344 */ { InstructionMnemonic::MOVD, { OPI_Ey, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 345 */ { InstructionMnemonic::MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 346 */ { InstructionMnemonic::MOVDDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 347 */ { InstructionMnemonic::MOVDQ2Q, { OPI_P, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 348 */ { InstructionMnemonic::MOVDQA, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 349 */ { InstructionMnemonic::MOVDQA, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34A */ { InstructionMnemonic::MOVDQU, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34B */ { InstructionMnemonic::MOVDQU, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34C */ { InstructionMnemonic::MOVHLPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34D */ { InstructionMnemonic::MOVHPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34E */ { InstructionMnemonic::MOVHPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 34F */ { InstructionMnemonic::MOVHPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 350 */ { InstructionMnemonic::MOVHPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 351 */ { InstructionMnemonic::MOVLHPS, { OPI_V, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 352 */ { InstructionMnemonic::MOVLPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 353 */ { InstructionMnemonic::MOVLPD, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 354 */ { InstructionMnemonic::MOVLPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 355 */ { InstructionMnemonic::MOVLPS, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 356 */ { InstructionMnemonic::MOVMSKPD, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 357 */ { InstructionMnemonic::MOVMSKPS, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 358 */ { InstructionMnemonic::MOVNTDQ, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 359 */ { InstructionMnemonic::MOVNTDQA, { OPI_V, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35A */ { InstructionMnemonic::MOVNTI, { OPI_M, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35B */ { InstructionMnemonic::MOVNTPD, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35C */ { InstructionMnemonic::MOVNTPS, { OPI_M, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35D */ { InstructionMnemonic::MOVNTQ, { OPI_M, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35E */ { InstructionMnemonic::MOVQ, { OPI_P, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 35F */ { InstructionMnemonic::MOVQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 360 */ { InstructionMnemonic::MOVQ, { OPI_Eq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 361 */ { InstructionMnemonic::MOVQ, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 362 */ { InstructionMnemonic::MOVQ, { OPI_Q, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 363 */ { InstructionMnemonic::MOVQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 364 */ { InstructionMnemonic::MOVQ, { OPI_V, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 365 */ { InstructionMnemonic::MOVQ, { OPI_Eq, OPI_P, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 366 */ { InstructionMnemonic::MOVQ2DQ, { OPI_V, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_OPERAND1_WRITE }, + /* 367 */ { InstructionMnemonic::MOVSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_OPERAND1_WRITE }, + /* 368 */ { InstructionMnemonic::MOVSD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 369 */ { InstructionMnemonic::MOVSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 36A */ { InstructionMnemonic::MOVSD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36B */ { InstructionMnemonic::MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36C */ { InstructionMnemonic::MOVSHDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36D */ { InstructionMnemonic::MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36E */ { InstructionMnemonic::MOVSLDUP, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 36F */ { InstructionMnemonic::MOVSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 370 */ { InstructionMnemonic::MOVSS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 371 */ { InstructionMnemonic::MOVSS, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 372 */ { InstructionMnemonic::MOVSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 373 */ { InstructionMnemonic::MOVSX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 374 */ { InstructionMnemonic::MOVSX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 375 */ { InstructionMnemonic::MOVSXD, { OPI_Gq, OPI_Ed, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 376 */ { InstructionMnemonic::MOVUPD, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 377 */ { InstructionMnemonic::MOVUPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 378 */ { InstructionMnemonic::MOVUPS, { OPI_W, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 379 */ { InstructionMnemonic::MOVUPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 37A */ { InstructionMnemonic::MOVZX, { OPI_Gy, OPI_Ew, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 37B */ { InstructionMnemonic::MOVZX, { OPI_Gv, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 37C */ { InstructionMnemonic::MPSADBW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 37D */ { InstructionMnemonic::MUL, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 37E */ { InstructionMnemonic::MUL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 37F */ { InstructionMnemonic::MULPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 380 */ { InstructionMnemonic::MULPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 381 */ { InstructionMnemonic::MULSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 382 */ { InstructionMnemonic::MULSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 383 */ { InstructionMnemonic::MWAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 384 */ { InstructionMnemonic::NEG, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 385 */ { InstructionMnemonic::NEG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 386 */ { InstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 387 */ { InstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 388 */ { InstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 389 */ { InstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38A */ { InstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38B */ { InstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38C */ { InstructionMnemonic::NOP, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 38D */ { InstructionMnemonic::NOT, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 38E */ { InstructionMnemonic::NOT, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 38F */ { InstructionMnemonic::OR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 390 */ { InstructionMnemonic::OR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 391 */ { InstructionMnemonic::OR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 392 */ { InstructionMnemonic::OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 393 */ { InstructionMnemonic::OR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 394 */ { InstructionMnemonic::OR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 395 */ { InstructionMnemonic::OR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 396 */ { InstructionMnemonic::OR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 397 */ { InstructionMnemonic::OR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 398 */ { InstructionMnemonic::OR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 399 */ { InstructionMnemonic::ORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 39A */ { InstructionMnemonic::ORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 39B */ { InstructionMnemonic::OUT, { OPI_DX, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, + /* 39C */ { InstructionMnemonic::OUT, { OPI_DX, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 39D */ { InstructionMnemonic::OUT, { OPI_Ib, OPI_AL, OPI_NONE, OPI_NONE }, 0 }, + /* 39E */ { InstructionMnemonic::OUT, { OPI_Ib, OPI_eAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 39F */ { InstructionMnemonic::OUTSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 3A0 */ { InstructionMnemonic::OUTSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 3A1 */ { InstructionMnemonic::OUTSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 3A2 */ { InstructionMnemonic::PABSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A3 */ { InstructionMnemonic::PABSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A4 */ { InstructionMnemonic::PABSD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A5 */ { InstructionMnemonic::PABSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A6 */ { InstructionMnemonic::PABSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A7 */ { InstructionMnemonic::PABSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3A8 */ { InstructionMnemonic::PACKSSDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3A9 */ { InstructionMnemonic::PACKSSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AA */ { InstructionMnemonic::PACKSSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AB */ { InstructionMnemonic::PACKSSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AC */ { InstructionMnemonic::PACKUSDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AD */ { InstructionMnemonic::PACKUSWB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AE */ { InstructionMnemonic::PACKUSWB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3AF */ { InstructionMnemonic::PADDB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B0 */ { InstructionMnemonic::PADDB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B1 */ { InstructionMnemonic::PADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B2 */ { InstructionMnemonic::PADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B3 */ { InstructionMnemonic::PADDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B4 */ { InstructionMnemonic::PADDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B5 */ { InstructionMnemonic::PADDSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B6 */ { InstructionMnemonic::PADDSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B7 */ { InstructionMnemonic::PADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B8 */ { InstructionMnemonic::PADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3B9 */ { InstructionMnemonic::PADDUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BA */ { InstructionMnemonic::PADDUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BB */ { InstructionMnemonic::PADDUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BC */ { InstructionMnemonic::PADDUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BD */ { InstructionMnemonic::PADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BE */ { InstructionMnemonic::PADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3BF */ { InstructionMnemonic::PALIGNR, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C0 */ { InstructionMnemonic::PALIGNR, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C1 */ { InstructionMnemonic::PAND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C2 */ { InstructionMnemonic::PAND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C3 */ { InstructionMnemonic::PANDN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C4 */ { InstructionMnemonic::PANDN, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C5 */ { InstructionMnemonic::PAVGB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C6 */ { InstructionMnemonic::PAVGB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C7 */ { InstructionMnemonic::PAVGUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C8 */ { InstructionMnemonic::PAVGW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3C9 */ { InstructionMnemonic::PAVGW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CA */ { InstructionMnemonic::PBLENDVB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CB */ { InstructionMnemonic::PBLENDW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CC */ { InstructionMnemonic::PCLMULQDQ, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CD */ { InstructionMnemonic::PCMPEQB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CE */ { InstructionMnemonic::PCMPEQB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3CF */ { InstructionMnemonic::PCMPEQD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D0 */ { InstructionMnemonic::PCMPEQD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D1 */ { InstructionMnemonic::PCMPEQQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3D2 */ { InstructionMnemonic::PCMPEQW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D3 */ { InstructionMnemonic::PCMPEQW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D4 */ { InstructionMnemonic::PCMPESTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3D5 */ { InstructionMnemonic::PCMPESTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3D6 */ { InstructionMnemonic::PCMPGTB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D7 */ { InstructionMnemonic::PCMPGTB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D8 */ { InstructionMnemonic::PCMPGTD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3D9 */ { InstructionMnemonic::PCMPGTD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3DA */ { InstructionMnemonic::PCMPGTQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3DB */ { InstructionMnemonic::PCMPGTW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3DC */ { InstructionMnemonic::PCMPGTW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3DD */ { InstructionMnemonic::PCMPISTRI, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3DE */ { InstructionMnemonic::PCMPISTRM, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 3DF */ { InstructionMnemonic::PEXTRB, { OPI_MbRv, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 3E0 */ { InstructionMnemonic::PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E1 */ { InstructionMnemonic::PEXTRD, { OPI_Ed, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E2 */ { InstructionMnemonic::PEXTRQ, { OPI_Eq, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 3E3 */ { InstructionMnemonic::PEXTRW, { OPI_MwRd, OPI_V, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E4 */ { InstructionMnemonic::PEXTRW, { OPI_Gd, OPI_N, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E5 */ { InstructionMnemonic::PEXTRW, { OPI_Gd, OPI_U, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E6 */ { InstructionMnemonic::PF2ID, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E7 */ { InstructionMnemonic::PF2IW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3E8 */ { InstructionMnemonic::PFACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3E9 */ { InstructionMnemonic::PFADD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EA */ { InstructionMnemonic::PFCMPEQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EB */ { InstructionMnemonic::PFCMPGE, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EC */ { InstructionMnemonic::PFCMPGT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3ED */ { InstructionMnemonic::PFMAX, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EE */ { InstructionMnemonic::PFMIN, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3EF */ { InstructionMnemonic::PFMUL, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F0 */ { InstructionMnemonic::PFNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F1 */ { InstructionMnemonic::PFPNACC, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F2 */ { InstructionMnemonic::PFRCP, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F3 */ { InstructionMnemonic::PFRCPIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F4 */ { InstructionMnemonic::PFRCPIT2, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F5 */ { InstructionMnemonic::PFRSQIT1, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F6 */ { InstructionMnemonic::PFRSQRT, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 3F7 */ { InstructionMnemonic::PFSUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F8 */ { InstructionMnemonic::PFSUBR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3F9 */ { InstructionMnemonic::PHADDD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FA */ { InstructionMnemonic::PHADDD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FB */ { InstructionMnemonic::PHADDSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FC */ { InstructionMnemonic::PHADDSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FD */ { InstructionMnemonic::PHADDW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FE */ { InstructionMnemonic::PHADDW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 3FF */ { InstructionMnemonic::PHMINPOSUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 400 */ { InstructionMnemonic::PHSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 401 */ { InstructionMnemonic::PHSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 402 */ { InstructionMnemonic::PHSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 403 */ { InstructionMnemonic::PHSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 404 */ { InstructionMnemonic::PHSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 405 */ { InstructionMnemonic::PHSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 406 */ { InstructionMnemonic::PI2FD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 407 */ { InstructionMnemonic::PI2FW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 408 */ { InstructionMnemonic::PINSRB, { OPI_V, OPI_MbRd, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 409 */ { InstructionMnemonic::PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 40A */ { InstructionMnemonic::PINSRD, { OPI_V, OPI_Ed, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 40B */ { InstructionMnemonic::PINSRQ, { OPI_V, OPI_Eq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 40C */ { InstructionMnemonic::PINSRW, { OPI_V, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 40D */ { InstructionMnemonic::PINSRW, { OPI_P, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 40E */ { InstructionMnemonic::PMADDUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 40F */ { InstructionMnemonic::PMADDUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 410 */ { InstructionMnemonic::PMADDWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 411 */ { InstructionMnemonic::PMADDWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 412 */ { InstructionMnemonic::PMAXSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 413 */ { InstructionMnemonic::PMAXSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 414 */ { InstructionMnemonic::PMAXSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 415 */ { InstructionMnemonic::PMAXSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 416 */ { InstructionMnemonic::PMAXUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 417 */ { InstructionMnemonic::PMAXUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 418 */ { InstructionMnemonic::PMAXUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 419 */ { InstructionMnemonic::PMAXUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41A */ { InstructionMnemonic::PMINSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41B */ { InstructionMnemonic::PMINSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41C */ { InstructionMnemonic::PMINSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41D */ { InstructionMnemonic::PMINSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41E */ { InstructionMnemonic::PMINUB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 41F */ { InstructionMnemonic::PMINUB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 420 */ { InstructionMnemonic::PMINUD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 421 */ { InstructionMnemonic::PMINUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 422 */ { InstructionMnemonic::PMOVMSKB, { OPI_Gd, OPI_N, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 423 */ { InstructionMnemonic::PMOVMSKB, { OPI_Gd, OPI_U, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 424 */ { InstructionMnemonic::PMOVSXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 425 */ { InstructionMnemonic::PMOVSXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 426 */ { InstructionMnemonic::PMOVSXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 427 */ { InstructionMnemonic::PMOVSXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 428 */ { InstructionMnemonic::PMOVSXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 429 */ { InstructionMnemonic::PMOVSXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42A */ { InstructionMnemonic::PMOVZXBD, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42B */ { InstructionMnemonic::PMOVZXBQ, { OPI_V, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42C */ { InstructionMnemonic::PMOVZXBW, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42D */ { InstructionMnemonic::PMOVZXDQ, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42E */ { InstructionMnemonic::PMOVZXWD, { OPI_V, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 42F */ { InstructionMnemonic::PMOVZXWQ, { OPI_V, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 430 */ { InstructionMnemonic::PMULDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 431 */ { InstructionMnemonic::PMULHRSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 432 */ { InstructionMnemonic::PMULHRSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 433 */ { InstructionMnemonic::PMULHRW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 434 */ { InstructionMnemonic::PMULHUW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 435 */ { InstructionMnemonic::PMULHUW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 436 */ { InstructionMnemonic::PMULHW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 437 */ { InstructionMnemonic::PMULHW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 438 */ { InstructionMnemonic::PMULLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 439 */ { InstructionMnemonic::PMULLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43A */ { InstructionMnemonic::PMULLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43B */ { InstructionMnemonic::PMULUDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43C */ { InstructionMnemonic::PMULUDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 43D */ { InstructionMnemonic::POP, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 43E */ { InstructionMnemonic::POP, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 43F */ { InstructionMnemonic::POP, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 440 */ { InstructionMnemonic::POP, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 441 */ { InstructionMnemonic::POP, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 442 */ { InstructionMnemonic::POP, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 443 */ { InstructionMnemonic::POP, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 444 */ { InstructionMnemonic::POP, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 445 */ { InstructionMnemonic::POP, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 446 */ { InstructionMnemonic::POP, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 447 */ { InstructionMnemonic::POP, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 448 */ { InstructionMnemonic::POP, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 449 */ { InstructionMnemonic::POP, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 44A */ { InstructionMnemonic::POP, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 44B */ { InstructionMnemonic::POPA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 44C */ { InstructionMnemonic::POPAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 44D */ { InstructionMnemonic::POPCNT, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 44E */ { InstructionMnemonic::POPFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 44F */ { InstructionMnemonic::POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 450 */ { InstructionMnemonic::POPFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 451 */ { InstructionMnemonic::POPFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 452 */ { InstructionMnemonic::POR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 453 */ { InstructionMnemonic::POR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 454 */ { InstructionMnemonic::PREFETCH, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 455 */ { InstructionMnemonic::PREFETCHNTA, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 456 */ { InstructionMnemonic::PREFETCHT0, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 457 */ { InstructionMnemonic::PREFETCHT1, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 458 */ { InstructionMnemonic::PREFETCHT2, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 459 */ { InstructionMnemonic::PSADBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45A */ { InstructionMnemonic::PSADBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45B */ { InstructionMnemonic::PSHUFB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45C */ { InstructionMnemonic::PSHUFB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 45D */ { InstructionMnemonic::PSHUFD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 45E */ { InstructionMnemonic::PSHUFHW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 45F */ { InstructionMnemonic::PSHUFLW, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 460 */ { InstructionMnemonic::PSHUFW, { OPI_P, OPI_Q, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 461 */ { InstructionMnemonic::PSIGNB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 462 */ { InstructionMnemonic::PSIGNB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 463 */ { InstructionMnemonic::PSIGND, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 464 */ { InstructionMnemonic::PSIGND, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 465 */ { InstructionMnemonic::PSIGNW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 466 */ { InstructionMnemonic::PSIGNW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 467 */ { InstructionMnemonic::PSLLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 468 */ { InstructionMnemonic::PSLLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 469 */ { InstructionMnemonic::PSLLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46A */ { InstructionMnemonic::PSLLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46B */ { InstructionMnemonic::PSLLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46C */ { InstructionMnemonic::PSLLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46D */ { InstructionMnemonic::PSLLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 46E */ { InstructionMnemonic::PSLLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 46F */ { InstructionMnemonic::PSLLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 470 */ { InstructionMnemonic::PSLLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 471 */ { InstructionMnemonic::PSLLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 472 */ { InstructionMnemonic::PSLLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 473 */ { InstructionMnemonic::PSLLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 474 */ { InstructionMnemonic::PSRAD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 475 */ { InstructionMnemonic::PSRAD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 476 */ { InstructionMnemonic::PSRAD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 477 */ { InstructionMnemonic::PSRAD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 478 */ { InstructionMnemonic::PSRAW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 479 */ { InstructionMnemonic::PSRAW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 47A */ { InstructionMnemonic::PSRAW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47B */ { InstructionMnemonic::PSRAW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47C */ { InstructionMnemonic::PSRLD, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47D */ { InstructionMnemonic::PSRLD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 47E */ { InstructionMnemonic::PSRLD, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 47F */ { InstructionMnemonic::PSRLD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 480 */ { InstructionMnemonic::PSRLDQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 481 */ { InstructionMnemonic::PSRLQ, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 482 */ { InstructionMnemonic::PSRLQ, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 483 */ { InstructionMnemonic::PSRLQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 484 */ { InstructionMnemonic::PSRLQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 485 */ { InstructionMnemonic::PSRLW, { OPI_U, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 486 */ { InstructionMnemonic::PSRLW, { OPI_N, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 487 */ { InstructionMnemonic::PSRLW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 488 */ { InstructionMnemonic::PSRLW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 489 */ { InstructionMnemonic::PSUBB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48A */ { InstructionMnemonic::PSUBB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48B */ { InstructionMnemonic::PSUBD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48C */ { InstructionMnemonic::PSUBD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48D */ { InstructionMnemonic::PSUBQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48E */ { InstructionMnemonic::PSUBQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 48F */ { InstructionMnemonic::PSUBSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 490 */ { InstructionMnemonic::PSUBSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 491 */ { InstructionMnemonic::PSUBSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 492 */ { InstructionMnemonic::PSUBSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 493 */ { InstructionMnemonic::PSUBUSB, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 494 */ { InstructionMnemonic::PSUBUSB, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 495 */ { InstructionMnemonic::PSUBUSW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 496 */ { InstructionMnemonic::PSUBUSW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 497 */ { InstructionMnemonic::PSUBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 498 */ { InstructionMnemonic::PSUBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 499 */ { InstructionMnemonic::PSWAPD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 49A */ { InstructionMnemonic::PTEST, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 49B */ { InstructionMnemonic::PUNPCKHBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49C */ { InstructionMnemonic::PUNPCKHBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49D */ { InstructionMnemonic::PUNPCKHDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49E */ { InstructionMnemonic::PUNPCKHDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 49F */ { InstructionMnemonic::PUNPCKHQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A0 */ { InstructionMnemonic::PUNPCKHWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A1 */ { InstructionMnemonic::PUNPCKHWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A2 */ { InstructionMnemonic::PUNPCKLBW, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A3 */ { InstructionMnemonic::PUNPCKLBW, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A4 */ { InstructionMnemonic::PUNPCKLDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A5 */ { InstructionMnemonic::PUNPCKLDQ, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A6 */ { InstructionMnemonic::PUNPCKLQDQ, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A7 */ { InstructionMnemonic::PUNPCKLWD, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A8 */ { InstructionMnemonic::PUNPCKLWD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4A9 */ { InstructionMnemonic::PUSH, { OPI_DS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AA */ { InstructionMnemonic::PUSH, { OPI_ES, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AB */ { InstructionMnemonic::PUSH, { OPI_sIb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_DEFAULT_64 }, + /* 4AC */ { InstructionMnemonic::PUSH, { OPI_SS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AD */ { InstructionMnemonic::PUSH, { OPI_CS, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 }, + /* 4AE */ { InstructionMnemonic::PUSH, { OPI_R3v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4AF */ { InstructionMnemonic::PUSH, { OPI_R4v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B0 */ { InstructionMnemonic::PUSH, { OPI_R5v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B1 */ { InstructionMnemonic::PUSH, { OPI_R6v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B2 */ { InstructionMnemonic::PUSH, { OPI_R7v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B3 */ { InstructionMnemonic::PUSH, { OPI_R2v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B4 */ { InstructionMnemonic::PUSH, { OPI_R0v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B5 */ { InstructionMnemonic::PUSH, { OPI_FS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4B6 */ { InstructionMnemonic::PUSH, { OPI_GS, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4B7 */ { InstructionMnemonic::PUSH, { OPI_sIz, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4B8 */ { InstructionMnemonic::PUSH, { OPI_Ev, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4B9 */ { InstructionMnemonic::PUSH, { OPI_R1v, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 4BA */ { InstructionMnemonic::PUSHA, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 4BB */ { InstructionMnemonic::PUSHAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_INVALID_64 }, + /* 4BC */ { InstructionMnemonic::PUSHFD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 4BD */ { InstructionMnemonic::PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4BE */ { InstructionMnemonic::PUSHFQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4BF */ { InstructionMnemonic::PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_DEFAULT_64 }, + /* 4C0 */ { InstructionMnemonic::PUSHFW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX }, + /* 4C1 */ { InstructionMnemonic::PXOR, { OPI_P, OPI_Q, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C2 */ { InstructionMnemonic::PXOR, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C3 */ { InstructionMnemonic::RCL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C4 */ { InstructionMnemonic::RCL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C5 */ { InstructionMnemonic::RCL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C6 */ { InstructionMnemonic::RCL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C7 */ { InstructionMnemonic::RCL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C8 */ { InstructionMnemonic::RCL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4C9 */ { InstructionMnemonic::RCPPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4CA */ { InstructionMnemonic::RCPSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4CB */ { InstructionMnemonic::RCR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CC */ { InstructionMnemonic::RCR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CD */ { InstructionMnemonic::RCR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CE */ { InstructionMnemonic::RCR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4CF */ { InstructionMnemonic::RCR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4D0 */ { InstructionMnemonic::RCR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4D1 */ { InstructionMnemonic::RDMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D2 */ { InstructionMnemonic::RDPMC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D3 */ { InstructionMnemonic::RDRAND, { OPI_R, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4D4 */ { InstructionMnemonic::RDTSC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D5 */ { InstructionMnemonic::RDTSCP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D6 */ { InstructionMnemonic::REP, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D7 */ { InstructionMnemonic::REPNE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D8 */ { InstructionMnemonic::RET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4D9 */ { InstructionMnemonic::RET, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4DA */ { InstructionMnemonic::RETF, { OPI_Iw, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4DB */ { InstructionMnemonic::RETF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4DC */ { InstructionMnemonic::ROL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4DD */ { InstructionMnemonic::ROL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4DE */ { InstructionMnemonic::ROL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4DF */ { InstructionMnemonic::ROL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E0 */ { InstructionMnemonic::ROL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E1 */ { InstructionMnemonic::ROL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E2 */ { InstructionMnemonic::ROR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E3 */ { InstructionMnemonic::ROR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E4 */ { InstructionMnemonic::ROR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E5 */ { InstructionMnemonic::ROR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E6 */ { InstructionMnemonic::ROR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E7 */ { InstructionMnemonic::ROR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4E8 */ { InstructionMnemonic::ROUNDPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4E9 */ { InstructionMnemonic::ROUNDPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EA */ { InstructionMnemonic::ROUNDSD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EB */ { InstructionMnemonic::ROUNDSS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EC */ { InstructionMnemonic::RSM, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4ED */ { InstructionMnemonic::RSQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EE */ { InstructionMnemonic::RSQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4EF */ { InstructionMnemonic::SAHF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 4F0 */ { InstructionMnemonic::SALC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 4F1 */ { InstructionMnemonic::SAR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F2 */ { InstructionMnemonic::SAR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F3 */ { InstructionMnemonic::SAR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F4 */ { InstructionMnemonic::SAR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F5 */ { InstructionMnemonic::SAR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F6 */ { InstructionMnemonic::SAR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 4F7 */ { InstructionMnemonic::SBB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4F8 */ { InstructionMnemonic::SBB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4F9 */ { InstructionMnemonic::SBB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_WRITE }, + /* 4FA */ { InstructionMnemonic::SBB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_WRITE }, + /* 4FB */ { InstructionMnemonic::SBB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4FC */ { InstructionMnemonic::SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_WRITE }, + /* 4FD */ { InstructionMnemonic::SBB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4FE */ { InstructionMnemonic::SBB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 4FF */ { InstructionMnemonic::SBB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 500 */ { InstructionMnemonic::SBB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 501 */ { InstructionMnemonic::SCASB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 502 */ { InstructionMnemonic::SCASD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 503 */ { InstructionMnemonic::SCASQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 504 */ { InstructionMnemonic::SCASW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 505 */ { InstructionMnemonic::SETA, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 506 */ { InstructionMnemonic::SETAE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 507 */ { InstructionMnemonic::SETB, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 508 */ { InstructionMnemonic::SETBE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 509 */ { InstructionMnemonic::SETE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50A */ { InstructionMnemonic::SETG, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50B */ { InstructionMnemonic::SETGE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50C */ { InstructionMnemonic::SETL, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50D */ { InstructionMnemonic::SETLE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50E */ { InstructionMnemonic::SETNE, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 50F */ { InstructionMnemonic::SETNO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 510 */ { InstructionMnemonic::SETNP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 511 */ { InstructionMnemonic::SETNS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 512 */ { InstructionMnemonic::SETO, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 513 */ { InstructionMnemonic::SETP, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 514 */ { InstructionMnemonic::SETS, { OPI_Eb, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 515 */ { InstructionMnemonic::SFENCE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 516 */ { InstructionMnemonic::SGDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 517 */ { InstructionMnemonic::SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 518 */ { InstructionMnemonic::SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 519 */ { InstructionMnemonic::SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51A */ { InstructionMnemonic::SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51B */ { InstructionMnemonic::SHL, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51C */ { InstructionMnemonic::SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51D */ { InstructionMnemonic::SHL, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51E */ { InstructionMnemonic::SHL, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 51F */ { InstructionMnemonic::SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 520 */ { InstructionMnemonic::SHL, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 521 */ { InstructionMnemonic::SHL, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 522 */ { InstructionMnemonic::SHL, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 523 */ { InstructionMnemonic::SHLD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 524 */ { InstructionMnemonic::SHLD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 525 */ { InstructionMnemonic::SHR, { OPI_Ev, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 526 */ { InstructionMnemonic::SHR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 527 */ { InstructionMnemonic::SHR, { OPI_Eb, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 528 */ { InstructionMnemonic::SHR, { OPI_Ev, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 529 */ { InstructionMnemonic::SHR, { OPI_Eb, OPI_CL, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52A */ { InstructionMnemonic::SHR, { OPI_Ev, OPI_I1, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52B */ { InstructionMnemonic::SHRD, { OPI_Ev, OPI_Gv, OPI_CL, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52C */ { InstructionMnemonic::SHRD, { OPI_Ev, OPI_Gv, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52D */ { InstructionMnemonic::SHUFPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52E */ { InstructionMnemonic::SHUFPS, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 52F */ { InstructionMnemonic::SIDT, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 530 */ { InstructionMnemonic::SKINIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 531 */ { InstructionMnemonic::SLDT, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 532 */ { InstructionMnemonic::SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 533 */ { InstructionMnemonic::SMSW, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 534 */ { InstructionMnemonic::SQRTPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 535 */ { InstructionMnemonic::SQRTPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 536 */ { InstructionMnemonic::SQRTSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 537 */ { InstructionMnemonic::SQRTSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 538 */ { InstructionMnemonic::STC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 539 */ { InstructionMnemonic::STD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 53A */ { InstructionMnemonic::STGI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 53B */ { InstructionMnemonic::STI, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 53C */ { InstructionMnemonic::STMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 53D */ { InstructionMnemonic::STOSB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 53E */ { InstructionMnemonic::STOSD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 53F */ { InstructionMnemonic::STOSQ, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 540 */ { InstructionMnemonic::STOSW, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REP_PREFIX |IDF_ACCEPTS_SEGMENT_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 541 */ { InstructionMnemonic::STR, { OPI_MwRv, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 542 */ { InstructionMnemonic::SUB, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 543 */ { InstructionMnemonic::SUB, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 544 */ { InstructionMnemonic::SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 545 */ { InstructionMnemonic::SUB, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 546 */ { InstructionMnemonic::SUB, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 547 */ { InstructionMnemonic::SUB, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 548 */ { InstructionMnemonic::SUB, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 549 */ { InstructionMnemonic::SUB, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54A */ { InstructionMnemonic::SUB, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 54B */ { InstructionMnemonic::SUB, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54C */ { InstructionMnemonic::SUBPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54D */ { InstructionMnemonic::SUBPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54E */ { InstructionMnemonic::SUBSD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 54F */ { InstructionMnemonic::SUBSS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 550 */ { InstructionMnemonic::SWAPGS, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 551 */ { InstructionMnemonic::SYSCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 552 */ { InstructionMnemonic::SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 553 */ { InstructionMnemonic::SYSENTER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 554 */ { InstructionMnemonic::SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 555 */ { InstructionMnemonic::SYSEXIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 556 */ { InstructionMnemonic::SYSRET, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 557 */ { InstructionMnemonic::TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 558 */ { InstructionMnemonic::TEST, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 559 */ { InstructionMnemonic::TEST, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55A */ { InstructionMnemonic::TEST, { OPI_Ev, OPI_Iz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55B */ { InstructionMnemonic::TEST, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW }, + /* 55C */ { InstructionMnemonic::TEST, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55D */ { InstructionMnemonic::TEST, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 55E */ { InstructionMnemonic::TEST, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, 0 }, + /* 55F */ { InstructionMnemonic::UCOMISD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 560 */ { InstructionMnemonic::UCOMISS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 561 */ { InstructionMnemonic::UD2, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 562 */ { InstructionMnemonic::UNPCKHPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 563 */ { InstructionMnemonic::UNPCKHPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 564 */ { InstructionMnemonic::UNPCKLPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 565 */ { InstructionMnemonic::UNPCKLPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 566 */ { InstructionMnemonic::VADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 567 */ { InstructionMnemonic::VADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 568 */ { InstructionMnemonic::VADDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 569 */ { InstructionMnemonic::VADDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56A */ { InstructionMnemonic::VADDSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56B */ { InstructionMnemonic::VADDSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56C */ { InstructionMnemonic::VAESDEC, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56D */ { InstructionMnemonic::VAESDECLAST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56E */ { InstructionMnemonic::VAESENC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 56F */ { InstructionMnemonic::VAESENCLAST, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 570 */ { InstructionMnemonic::VAESIMC, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 571 */ { InstructionMnemonic::VAESKEYGENASSIST, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 572 */ { InstructionMnemonic::VANDNPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 573 */ { InstructionMnemonic::VANDNPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 574 */ { InstructionMnemonic::VANDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 575 */ { InstructionMnemonic::VANDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 576 */ { InstructionMnemonic::VBLENDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 577 */ { InstructionMnemonic::VBLENDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 578 */ { InstructionMnemonic::VBLENDVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 579 */ { InstructionMnemonic::VBLENDVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Lx }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 57A */ { InstructionMnemonic::VBROADCASTSD, { OPI_Vqq, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 57B */ { InstructionMnemonic::VBROADCASTSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 57C */ { InstructionMnemonic::VCMPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 57D */ { InstructionMnemonic::VCMPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 57E */ { InstructionMnemonic::VCMPSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 57F */ { InstructionMnemonic::VCMPSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 580 */ { InstructionMnemonic::VCOMISD, { OPI_Vsd, OPI_Wsd, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 581 */ { InstructionMnemonic::VCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 582 */ { InstructionMnemonic::VCVTDQ2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 583 */ { InstructionMnemonic::VCVTDQ2PS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 584 */ { InstructionMnemonic::VCVTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 585 */ { InstructionMnemonic::VCVTPD2PS, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 586 */ { InstructionMnemonic::VCVTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 587 */ { InstructionMnemonic::VCVTPS2PD, { OPI_Vx, OPI_Wdq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 588 */ { InstructionMnemonic::VCVTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 589 */ { InstructionMnemonic::VCVTSD2SS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58A */ { InstructionMnemonic::VCVTSI2SD, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58B */ { InstructionMnemonic::VCVTSI2SS, { OPI_Vx, OPI_Hx, OPI_Ey, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58C */ { InstructionMnemonic::VCVTSS2SD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58D */ { InstructionMnemonic::VCVTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 58E */ { InstructionMnemonic::VCVTTPD2DQ, { OPI_Vdq, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 58F */ { InstructionMnemonic::VCVTTPS2DQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 590 */ { InstructionMnemonic::VCVTTSD2SI, { OPI_Gy, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 591 */ { InstructionMnemonic::VCVTTSS2SI, { OPI_Gy, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 592 */ { InstructionMnemonic::VDIVPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 593 */ { InstructionMnemonic::VDIVPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 594 */ { InstructionMnemonic::VDIVSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 595 */ { InstructionMnemonic::VDIVSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 596 */ { InstructionMnemonic::VDPPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 597 */ { InstructionMnemonic::VDPPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 598 */ { InstructionMnemonic::VERR, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 599 */ { InstructionMnemonic::VERW, { OPI_Ew, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 59A */ { InstructionMnemonic::VEXTRACTF128, { OPI_Wdq, OPI_Vqq, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 59B */ { InstructionMnemonic::VEXTRACTPS, { OPI_MdRy, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 59C */ { InstructionMnemonic::VHADDPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 59D */ { InstructionMnemonic::VHADDPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 59E */ { InstructionMnemonic::VHSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 59F */ { InstructionMnemonic::VHSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5A0 */ { InstructionMnemonic::VINSERTF128, { OPI_Vqq, OPI_Hqq, OPI_Wdq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A1 */ { InstructionMnemonic::VINSERTPS, { OPI_Vx, OPI_Hx, OPI_Md, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5A2 */ { InstructionMnemonic::VLDDQU, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A3 */ { InstructionMnemonic::VMASKMOVDQU, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5A4 */ { InstructionMnemonic::VMASKMOVPD, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A5 */ { InstructionMnemonic::VMASKMOVPD, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A6 */ { InstructionMnemonic::VMASKMOVPS, { OPI_V, OPI_H, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A7 */ { InstructionMnemonic::VMASKMOVPS, { OPI_M, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5A8 */ { InstructionMnemonic::VMAXPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5A9 */ { InstructionMnemonic::VMAXPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5AA */ { InstructionMnemonic::VMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5AB */ { InstructionMnemonic::VMAXSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5AC */ { InstructionMnemonic::VMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5AD */ { InstructionMnemonic::VMCLEAR, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5AE */ { InstructionMnemonic::VMINPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5AF */ { InstructionMnemonic::VMINPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5B0 */ { InstructionMnemonic::VMINSD, { OPI_Vx, OPI_Hx, OPI_MqU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5B1 */ { InstructionMnemonic::VMINSS, { OPI_Vx, OPI_Hx, OPI_MdU, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5B2 */ { InstructionMnemonic::VMLAUNCH, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5B3 */ { InstructionMnemonic::VMLOAD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5B4 */ { InstructionMnemonic::VMMCALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5B5 */ { InstructionMnemonic::VMOVAPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B6 */ { InstructionMnemonic::VMOVAPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B7 */ { InstructionMnemonic::VMOVAPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B8 */ { InstructionMnemonic::VMOVAPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5B9 */ { InstructionMnemonic::VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BA */ { InstructionMnemonic::VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BB */ { InstructionMnemonic::VMOVD, { OPI_Vx, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BC */ { InstructionMnemonic::VMOVD, { OPI_Ey, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BD */ { InstructionMnemonic::VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BE */ { InstructionMnemonic::VMOVDDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5BF */ { InstructionMnemonic::VMOVDQA, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C0 */ { InstructionMnemonic::VMOVDQA, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C1 */ { InstructionMnemonic::VMOVDQU, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C2 */ { InstructionMnemonic::VMOVDQU, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5C3 */ { InstructionMnemonic::VMOVHLPS, { OPI_Vx, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C4 */ { InstructionMnemonic::VMOVHPD, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C5 */ { InstructionMnemonic::VMOVHPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C6 */ { InstructionMnemonic::VMOVHPS, { OPI_Vx, OPI_Hx, OPI_M, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C7 */ { InstructionMnemonic::VMOVHPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C8 */ { InstructionMnemonic::VMOVLHPS, { OPI_Vx, OPI_Hx, OPI_Ux, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5C9 */ { InstructionMnemonic::VMOVLPD, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CA */ { InstructionMnemonic::VMOVLPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CB */ { InstructionMnemonic::VMOVLPS, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CC */ { InstructionMnemonic::VMOVLPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CD */ { InstructionMnemonic::VMOVMSKPD, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5CE */ { InstructionMnemonic::VMOVMSKPS, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5CF */ { InstructionMnemonic::VMOVNTDQ, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D0 */ { InstructionMnemonic::VMOVNTDQA, { OPI_Vx, OPI_M, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D1 */ { InstructionMnemonic::VMOVNTPD, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D2 */ { InstructionMnemonic::VMOVNTPS, { OPI_M, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5D3 */ { InstructionMnemonic::VMOVQ, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D4 */ { InstructionMnemonic::VMOVQ, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D5 */ { InstructionMnemonic::VMOVQ, { OPI_Vx, OPI_Eq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D6 */ { InstructionMnemonic::VMOVQ, { OPI_Eq, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D7 */ { InstructionMnemonic::VMOVSD, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D8 */ { InstructionMnemonic::VMOVSD, { OPI_Mq, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5D9 */ { InstructionMnemonic::VMOVSD, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5DA */ { InstructionMnemonic::VMOVSD, { OPI_V, OPI_Mq, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5DB */ { InstructionMnemonic::VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DC */ { InstructionMnemonic::VMOVSHDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DD */ { InstructionMnemonic::VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DE */ { InstructionMnemonic::VMOVSLDUP, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5DF */ { InstructionMnemonic::VMOVSS, { OPI_V, OPI_H, OPI_U, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E0 */ { InstructionMnemonic::VMOVSS, { OPI_Md, OPI_V, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E1 */ { InstructionMnemonic::VMOVSS, { OPI_U, OPI_H, OPI_V, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E2 */ { InstructionMnemonic::VMOVSS, { OPI_V, OPI_Md, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 5E3 */ { InstructionMnemonic::VMOVUPD, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E4 */ { InstructionMnemonic::VMOVUPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E5 */ { InstructionMnemonic::VMOVUPS, { OPI_Wx, OPI_Vx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E6 */ { InstructionMnemonic::VMOVUPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5E7 */ { InstructionMnemonic::VMPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5E8 */ { InstructionMnemonic::VMPTRLD, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5E9 */ { InstructionMnemonic::VMPTRST, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5EA */ { InstructionMnemonic::VMREAD, { OPI_Ey, OPI_Gy, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 5EB */ { InstructionMnemonic::VMRESUME, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5EC */ { InstructionMnemonic::VMRUN, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5ED */ { InstructionMnemonic::VMSAVE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5EE */ { InstructionMnemonic::VMULPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5EF */ { InstructionMnemonic::VMULPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5F0 */ { InstructionMnemonic::VMULSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5F1 */ { InstructionMnemonic::VMULSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 5F2 */ { InstructionMnemonic::VMWRITE, { OPI_Gy, OPI_Ey, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 }, + /* 5F3 */ { InstructionMnemonic::VMXOFF, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 5F4 */ { InstructionMnemonic::VMXON, { OPI_Mq, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 5F5 */ { InstructionMnemonic::VORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5F6 */ { InstructionMnemonic::VORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 5F7 */ { InstructionMnemonic::VPABSB, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5F8 */ { InstructionMnemonic::VPABSD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5F9 */ { InstructionMnemonic::VPABSW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 5FA */ { InstructionMnemonic::VPACKSSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FB */ { InstructionMnemonic::VPACKSSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FC */ { InstructionMnemonic::VPACKUSDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FD */ { InstructionMnemonic::VPACKUSWB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FE */ { InstructionMnemonic::VPADDB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 5FF */ { InstructionMnemonic::VPADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 600 */ { InstructionMnemonic::VPADDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 601 */ { InstructionMnemonic::VPADDSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 602 */ { InstructionMnemonic::VPADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 603 */ { InstructionMnemonic::VPADDUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 604 */ { InstructionMnemonic::VPADDUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 605 */ { InstructionMnemonic::VPADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 606 */ { InstructionMnemonic::VPALIGNR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 607 */ { InstructionMnemonic::VPAND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 608 */ { InstructionMnemonic::VPANDN, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 609 */ { InstructionMnemonic::VPAVGB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60A */ { InstructionMnemonic::VPAVGW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60B */ { InstructionMnemonic::VPBLENDVB, { OPI_V, OPI_H, OPI_W, OPI_L }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 60C */ { InstructionMnemonic::VPBLENDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60D */ { InstructionMnemonic::VPCLMULQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60E */ { InstructionMnemonic::VPCMPEQB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 60F */ { InstructionMnemonic::VPCMPEQD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 610 */ { InstructionMnemonic::VPCMPEQQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 611 */ { InstructionMnemonic::VPCMPEQW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 612 */ { InstructionMnemonic::VPCMPESTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 613 */ { InstructionMnemonic::VPCMPESTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 614 */ { InstructionMnemonic::VPCMPGTB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 615 */ { InstructionMnemonic::VPCMPGTD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 616 */ { InstructionMnemonic::VPCMPGTQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 617 */ { InstructionMnemonic::VPCMPGTW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 618 */ { InstructionMnemonic::VPCMPISTRI, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 619 */ { InstructionMnemonic::VPCMPISTRM, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 61A */ { InstructionMnemonic::VPERM2F128, { OPI_Vqq, OPI_Hqq, OPI_Wqq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61B */ { InstructionMnemonic::VPERMILPD, { OPI_V, OPI_W, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61C */ { InstructionMnemonic::VPERMILPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61D */ { InstructionMnemonic::VPERMILPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61E */ { InstructionMnemonic::VPERMILPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 61F */ { InstructionMnemonic::VPEXTRB, { OPI_MbRv, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 620 */ { InstructionMnemonic::VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 621 */ { InstructionMnemonic::VPEXTRD, { OPI_Ed, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 622 */ { InstructionMnemonic::VPEXTRQ, { OPI_Eq, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 623 */ { InstructionMnemonic::VPEXTRW, { OPI_Gd, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 624 */ { InstructionMnemonic::VPEXTRW, { OPI_MwRd, OPI_Vx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 625 */ { InstructionMnemonic::VPHADDD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 626 */ { InstructionMnemonic::VPHADDSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 627 */ { InstructionMnemonic::VPHADDW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 628 */ { InstructionMnemonic::VPHMINPOSUW, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 629 */ { InstructionMnemonic::VPHSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 62A */ { InstructionMnemonic::VPHSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 62B */ { InstructionMnemonic::VPHSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 62C */ { InstructionMnemonic::VPINSRB, { OPI_V, OPI_H, OPI_MbRd, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 62D */ { InstructionMnemonic::VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 62E */ { InstructionMnemonic::VPINSRD, { OPI_V, OPI_H, OPI_Ed, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 62F */ { InstructionMnemonic::VPINSRQ, { OPI_V, OPI_H, OPI_Eq, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 630 */ { InstructionMnemonic::VPINSRW, { OPI_Vx, OPI_MwRy, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_DEFAULT_64 | IDF_OPERAND1_WRITE }, + /* 631 */ { InstructionMnemonic::VPMADDUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 632 */ { InstructionMnemonic::VPMADDWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 633 */ { InstructionMnemonic::VPMAXSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 634 */ { InstructionMnemonic::VPMAXSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 635 */ { InstructionMnemonic::VPMAXSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 636 */ { InstructionMnemonic::VPMAXUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 637 */ { InstructionMnemonic::VPMAXUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 638 */ { InstructionMnemonic::VPMAXUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 639 */ { InstructionMnemonic::VPMINSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63A */ { InstructionMnemonic::VPMINSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63B */ { InstructionMnemonic::VPMINSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63C */ { InstructionMnemonic::VPMINUB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63D */ { InstructionMnemonic::VPMINUD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63E */ { InstructionMnemonic::VPMINUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 63F */ { InstructionMnemonic::VPMOVMSKB, { OPI_Gd, OPI_Ux, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 640 */ { InstructionMnemonic::VPMOVSXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 641 */ { InstructionMnemonic::VPMOVSXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 642 */ { InstructionMnemonic::VPMOVSXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 643 */ { InstructionMnemonic::VPMOVSXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 644 */ { InstructionMnemonic::VPMOVSXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 645 */ { InstructionMnemonic::VPMOVZXBD, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 646 */ { InstructionMnemonic::VPMOVZXBQ, { OPI_Vx, OPI_MwU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 647 */ { InstructionMnemonic::VPMOVZXBW, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 648 */ { InstructionMnemonic::VPMOVZXDQ, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 649 */ { InstructionMnemonic::VPMOVZXWD, { OPI_Vx, OPI_MqU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 64A */ { InstructionMnemonic::VPMOVZXWQ, { OPI_Vx, OPI_MdU, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 64B */ { InstructionMnemonic::VPMULDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64C */ { InstructionMnemonic::VPMULHRSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64D */ { InstructionMnemonic::VPMULHUW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64E */ { InstructionMnemonic::VPMULHW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 64F */ { InstructionMnemonic::VPMULLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 650 */ { InstructionMnemonic::VPMULLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 651 */ { InstructionMnemonic::VPOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 652 */ { InstructionMnemonic::VPSADBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 653 */ { InstructionMnemonic::VPSHUFB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 654 */ { InstructionMnemonic::VPSHUFD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 655 */ { InstructionMnemonic::VPSHUFHW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 656 */ { InstructionMnemonic::VPSHUFLW, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 657 */ { InstructionMnemonic::VPSIGNB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 658 */ { InstructionMnemonic::VPSIGND, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 659 */ { InstructionMnemonic::VPSIGNW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 65A */ { InstructionMnemonic::VPSLLD, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65B */ { InstructionMnemonic::VPSLLD, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65C */ { InstructionMnemonic::VPSLLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 65D */ { InstructionMnemonic::VPSLLQ, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65E */ { InstructionMnemonic::VPSLLQ, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 65F */ { InstructionMnemonic::VPSLLW, { OPI_V, OPI_H, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 660 */ { InstructionMnemonic::VPSLLW, { OPI_H, OPI_V, OPI_W, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 661 */ { InstructionMnemonic::VPSRAD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 662 */ { InstructionMnemonic::VPSRAD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 663 */ { InstructionMnemonic::VPSRAW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 664 */ { InstructionMnemonic::VPSRAW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 665 */ { InstructionMnemonic::VPSRLD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 666 */ { InstructionMnemonic::VPSRLD, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 667 */ { InstructionMnemonic::VPSRLDQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 668 */ { InstructionMnemonic::VPSRLQ, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 669 */ { InstructionMnemonic::VPSRLQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66A */ { InstructionMnemonic::VPSRLW, { OPI_Hx, OPI_Ux, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66B */ { InstructionMnemonic::VPSRLW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66C */ { InstructionMnemonic::VPSUBB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66D */ { InstructionMnemonic::VPSUBD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66E */ { InstructionMnemonic::VPSUBQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 66F */ { InstructionMnemonic::VPSUBSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 670 */ { InstructionMnemonic::VPSUBSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 671 */ { InstructionMnemonic::VPSUBUSB, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 672 */ { InstructionMnemonic::VPSUBUSW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 673 */ { InstructionMnemonic::VPSUBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 674 */ { InstructionMnemonic::VPTEST, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 675 */ { InstructionMnemonic::VPUNPCKHBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 676 */ { InstructionMnemonic::VPUNPCKHDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 677 */ { InstructionMnemonic::VPUNPCKHQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 678 */ { InstructionMnemonic::VPUNPCKHWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 679 */ { InstructionMnemonic::VPUNPCKLBW, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67A */ { InstructionMnemonic::VPUNPCKLDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67B */ { InstructionMnemonic::VPUNPCKLQDQ, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67C */ { InstructionMnemonic::VPUNPCKLWD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67D */ { InstructionMnemonic::VPXOR, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 67E */ { InstructionMnemonic::VRCPPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 67F */ { InstructionMnemonic::VRCPSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 680 */ { InstructionMnemonic::VROUNDPD, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 681 */ { InstructionMnemonic::VROUNDPS, { OPI_Vx, OPI_Wx, OPI_Ib, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 682 */ { InstructionMnemonic::VROUNDSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 683 */ { InstructionMnemonic::VROUNDSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 684 */ { InstructionMnemonic::VRSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 685 */ { InstructionMnemonic::VRSQRTSS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 686 */ { InstructionMnemonic::VSHUFPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 687 */ { InstructionMnemonic::VSHUFPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_Ib }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 688 */ { InstructionMnemonic::VSQRTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 689 */ { InstructionMnemonic::VSQRTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_WRITE }, + /* 68A */ { InstructionMnemonic::VSQRTSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 68B */ { InstructionMnemonic::VSQRTSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 68C */ { InstructionMnemonic::VSTMXCSR, { OPI_Md, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_WRITE }, + /* 68D */ { InstructionMnemonic::VSUBPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 68E */ { InstructionMnemonic::VSUBPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 68F */ { InstructionMnemonic::VSUBSD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 690 */ { InstructionMnemonic::VSUBSS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 691 */ { InstructionMnemonic::VTESTPD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 692 */ { InstructionMnemonic::VTESTPS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL }, + /* 693 */ { InstructionMnemonic::VUCOMISD, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 694 */ { InstructionMnemonic::VUCOMISS, { OPI_Vx, OPI_Wx, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 695 */ { InstructionMnemonic::VUNPCKHPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 696 */ { InstructionMnemonic::VUNPCKHPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 697 */ { InstructionMnemonic::VUNPCKLPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 698 */ { InstructionMnemonic::VUNPCKLPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 699 */ { InstructionMnemonic::VXORPD, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_ACCEPTS_VEXL | IDF_OPERAND1_READWRITE }, + /* 69A */ { InstructionMnemonic::VXORPS, { OPI_Vx, OPI_Hx, OPI_Wx, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 69B */ { InstructionMnemonic::VZEROALL, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69C */ { InstructionMnemonic::VZEROUPPER, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69D */ { InstructionMnemonic::WAIT, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69E */ { InstructionMnemonic::WBINVD, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 69F */ { InstructionMnemonic::WRMSR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6A0 */ { InstructionMnemonic::XADD, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, + /* 6A1 */ { InstructionMnemonic::XADD, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_WRITE }, + /* 6A2 */ { InstructionMnemonic::XCHG, { OPI_R4v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A3 */ { InstructionMnemonic::XCHG, { OPI_R3v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A4 */ { InstructionMnemonic::XCHG, { OPI_R5v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A5 */ { InstructionMnemonic::XCHG, { OPI_R7v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A6 */ { InstructionMnemonic::XCHG, { OPI_R6v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A7 */ { InstructionMnemonic::XCHG, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A8 */ { InstructionMnemonic::XCHG, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6A9 */ { InstructionMnemonic::XCHG, { OPI_R0v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6AA */ { InstructionMnemonic::XCHG, { OPI_R2v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6AB */ { InstructionMnemonic::XCHG, { OPI_R1v, OPI_rAX, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE | IDF_OPERAND2_READWRITE }, + /* 6AC */ { InstructionMnemonic::XCRYPTCBC, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6AD */ { InstructionMnemonic::XCRYPTCFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6AE */ { InstructionMnemonic::XCRYPTCTR, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6AF */ { InstructionMnemonic::XCRYPTECB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6B0 */ { InstructionMnemonic::XCRYPTOFB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6B1 */ { InstructionMnemonic::XGETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6B2 */ { InstructionMnemonic::XLATB, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_REXW | IDF_ACCEPTS_SEGMENT_PREFIX }, + /* 6B3 */ { InstructionMnemonic::XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_INVALID_64 | IDF_OPERAND1_READWRITE }, + /* 6B4 */ { InstructionMnemonic::XOR, { OPI_Ev, OPI_sIb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B5 */ { InstructionMnemonic::XOR, { OPI_Ev, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B6 */ { InstructionMnemonic::XOR, { OPI_Gb, OPI_Eb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B7 */ { InstructionMnemonic::XOR, { OPI_Gv, OPI_Ev, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B8 */ { InstructionMnemonic::XOR, { OPI_Eb, OPI_Gb, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6B9 */ { InstructionMnemonic::XOR, { OPI_Ev, OPI_Gv, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BA */ { InstructionMnemonic::XOR, { OPI_AL, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_OPERAND1_READWRITE }, + /* 6BB */ { InstructionMnemonic::XOR, { OPI_rAX, OPI_sIz, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_OPERAND_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_OPERAND1_READWRITE }, + /* 6BC */ { InstructionMnemonic::XOR, { OPI_Eb, OPI_Ib, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BD */ { InstructionMnemonic::XORPD, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BE */ { InstructionMnemonic::XORPS, { OPI_V, OPI_W, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB | IDF_OPERAND1_READWRITE }, + /* 6BF */ { InstructionMnemonic::XRSTOR, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 6C0 */ { InstructionMnemonic::XSAVE, { OPI_M, OPI_NONE, OPI_NONE, OPI_NONE }, IDF_ACCEPTS_ADDRESS_SIZE_PREFIX | IDF_ACCEPTS_REXW | IDF_ACCEPTS_REXR | IDF_ACCEPTS_REXX | IDF_ACCEPTS_REXB }, + /* 6C1 */ { InstructionMnemonic::XSETBV, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6C2 */ { InstructionMnemonic::XSHA1, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6C3 */ { InstructionMnemonic::XSHA256, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, + /* 6C4 */ { InstructionMnemonic::XSTORE, { OPI_NONE, OPI_NONE, OPI_NONE, OPI_NONE }, 0 }, +}; + +#undef OPI_NONE +#undef OPI_AL +#undef OPI_AX +#undef OPI_Av +#undef OPI_C +#undef OPI_CL +#undef OPI_CS +#undef OPI_CX +#undef OPI_D +#undef OPI_DL +#undef OPI_DS +#undef OPI_DX +#undef OPI_E +#undef OPI_ES +#undef OPI_Eb +#undef OPI_Ed +#undef OPI_Eq +#undef OPI_Ev +#undef OPI_Ew +#undef OPI_Ey +#undef OPI_Ez +#undef OPI_FS +#undef OPI_Fv +#undef OPI_G +#undef OPI_GS +#undef OPI_Gb +#undef OPI_Gd +#undef OPI_Gq +#undef OPI_Gv +#undef OPI_Gw +#undef OPI_Gy +#undef OPI_Gz +#undef OPI_H +#undef OPI_Hqq +#undef OPI_Hx +#undef OPI_I1 +#undef OPI_Ib +#undef OPI_Iv +#undef OPI_Iw +#undef OPI_Iz +#undef OPI_Jb +#undef OPI_Jv +#undef OPI_Jz +#undef OPI_L +#undef OPI_Lx +#undef OPI_M +#undef OPI_Mb +#undef OPI_MbRd +#undef OPI_MbRv +#undef OPI_Md +#undef OPI_MdRy +#undef OPI_MdU +#undef OPI_Mdq +#undef OPI_Mo +#undef OPI_Mq +#undef OPI_MqU +#undef OPI_Ms +#undef OPI_Mt +#undef OPI_Mv +#undef OPI_Mw +#undef OPI_MwRd +#undef OPI_MwRv +#undef OPI_MwRy +#undef OPI_MwU +#undef OPI_N +#undef OPI_Ob +#undef OPI_Ov +#undef OPI_Ow +#undef OPI_P +#undef OPI_Q +#undef OPI_R +#undef OPI_R0b +#undef OPI_R0v +#undef OPI_R0w +#undef OPI_R0y +#undef OPI_R0z +#undef OPI_R1b +#undef OPI_R1v +#undef OPI_R1w +#undef OPI_R1y +#undef OPI_R1z +#undef OPI_R2b +#undef OPI_R2v +#undef OPI_R2w +#undef OPI_R2y +#undef OPI_R2z +#undef OPI_R3b +#undef OPI_R3v +#undef OPI_R3w +#undef OPI_R3y +#undef OPI_R3z +#undef OPI_R4b +#undef OPI_R4v +#undef OPI_R4w +#undef OPI_R4y +#undef OPI_R4z +#undef OPI_R5b +#undef OPI_R5v +#undef OPI_R5w +#undef OPI_R5y +#undef OPI_R5z +#undef OPI_R6b +#undef OPI_R6v +#undef OPI_R6w +#undef OPI_R6y +#undef OPI_R6z +#undef OPI_R7b +#undef OPI_R7v +#undef OPI_R7w +#undef OPI_R7y +#undef OPI_R7z +#undef OPI_S +#undef OPI_SS +#undef OPI_ST0 +#undef OPI_ST1 +#undef OPI_ST2 +#undef OPI_ST3 +#undef OPI_ST4 +#undef OPI_ST5 +#undef OPI_ST6 +#undef OPI_ST7 +#undef OPI_U +#undef OPI_Ux +#undef OPI_V +#undef OPI_Vdq +#undef OPI_Vqq +#undef OPI_Vsd +#undef OPI_Vx +#undef OPI_W +#undef OPI_Wdq +#undef OPI_Wqq +#undef OPI_Wsd +#undef OPI_Wx +#undef OPI_eAX +#undef OPI_eCX +#undef OPI_eDX +#undef OPI_rAX +#undef OPI_rCX +#undef OPI_rDX +#undef OPI_sIb +#undef OPI_sIz + +const char *instrMnemonicStrings[] = +{ + /* 000 */ "invalid", + /* 001 */ "aaa", + /* 002 */ "aad", + /* 003 */ "aam", + /* 004 */ "aas", + /* 005 */ "adc", + /* 006 */ "add", + /* 007 */ "addpd", + /* 008 */ "addps", + /* 009 */ "addsd", + /* 00A */ "addss", + /* 00B */ "addsubpd", + /* 00C */ "addsubps", + /* 00D */ "aesdec", + /* 00E */ "aesdeclast", + /* 00F */ "aesenc", + /* 010 */ "aesenclast", + /* 011 */ "aesimc", + /* 012 */ "aeskeygenassist", + /* 013 */ "and", + /* 014 */ "andnpd", + /* 015 */ "andnps", + /* 016 */ "andpd", + /* 017 */ "andps", + /* 018 */ "arpl", + /* 019 */ "blendpd", + /* 01A */ "blendps", + /* 01B */ "blendvpd", + /* 01C */ "blendvps", + /* 01D */ "bound", + /* 01E */ "bsf", + /* 01F */ "bsr", + /* 020 */ "bswap", + /* 021 */ "bt", + /* 022 */ "btc", + /* 023 */ "btr", + /* 024 */ "bts", + /* 025 */ "call", + /* 026 */ "cbw", + /* 027 */ "cdq", + /* 028 */ "cdqe", + /* 029 */ "clc", + /* 02A */ "cld", + /* 02B */ "clflush", + /* 02C */ "clgi", + /* 02D */ "cli", + /* 02E */ "clts", + /* 02F */ "cmc", + /* 030 */ "cmova", + /* 031 */ "cmovae", + /* 032 */ "cmovb", + /* 033 */ "cmovbe", + /* 034 */ "cmove", + /* 035 */ "cmovg", + /* 036 */ "cmovge", + /* 037 */ "cmovl", + /* 038 */ "cmovle", + /* 039 */ "cmovne", + /* 03A */ "cmovno", + /* 03B */ "cmovnp", + /* 03C */ "cmovns", + /* 03D */ "cmovo", + /* 03E */ "cmovp", + /* 03F */ "cmovs", + /* 040 */ "cmp", + /* 041 */ "cmppd", + /* 042 */ "cmpps", + /* 043 */ "cmpsb", + /* 044 */ "cmpsd", + /* 045 */ "cmpsq", + /* 046 */ "cmpss", + /* 047 */ "cmpsw", + /* 048 */ "cmpxchg", + /* 049 */ "cmpxchg16b", + /* 04A */ "cmpxchg8b", + /* 04B */ "comisd", + /* 04C */ "comiss", + /* 04D */ "cpuid", + /* 04E */ "cqo", + /* 04F */ "crc32", + /* 050 */ "cvtdq2pd", + /* 051 */ "cvtdq2ps", + /* 052 */ "cvtpd2dq", + /* 053 */ "cvtpd2pi", + /* 054 */ "cvtpd2ps", + /* 055 */ "cvtpi2pd", + /* 056 */ "cvtpi2ps", + /* 057 */ "cvtps2dq", + /* 058 */ "cvtps2pd", + /* 059 */ "cvtps2pi", + /* 05A */ "cvtsd2si", + /* 05B */ "cvtsd2ss", + /* 05C */ "cvtsi2sd", + /* 05D */ "cvtsi2ss", + /* 05E */ "cvtss2sd", + /* 05F */ "cvtss2si", + /* 060 */ "cvttpd2dq", + /* 061 */ "cvttpd2pi", + /* 062 */ "cvttps2dq", + /* 063 */ "cvttps2pi", + /* 064 */ "cvttsd2si", + /* 065 */ "cvttss2si", + /* 066 */ "cwd", + /* 067 */ "cwde", + /* 068 */ "daa", + /* 069 */ "das", + /* 06A */ "dec", + /* 06B */ "div", + /* 06C */ "divpd", + /* 06D */ "divps", + /* 06E */ "divsd", + /* 06F */ "divss", + /* 070 */ "dppd", + /* 071 */ "dpps", + /* 072 */ "emms", + /* 073 */ "enter", + /* 074 */ "extractps", + /* 075 */ "f2xm1", + /* 076 */ "fabs", + /* 077 */ "fadd", + /* 078 */ "faddp", + /* 079 */ "fbld", + /* 07A */ "fbstp", + /* 07B */ "fchs", + /* 07C */ "fclex", + /* 07D */ "fcmovb", + /* 07E */ "fcmovbe", + /* 07F */ "fcmove", + /* 080 */ "fcmovnb", + /* 081 */ "fcmovnbe", + /* 082 */ "fcmovne", + /* 083 */ "fcmovnu", + /* 084 */ "fcmovu", + /* 085 */ "fcom", + /* 086 */ "fcom2", + /* 087 */ "fcomi", + /* 088 */ "fcomip", + /* 089 */ "fcomp", + /* 08A */ "fcomp3", + /* 08B */ "fcomp5", + /* 08C */ "fcompp", + /* 08D */ "fcos", + /* 08E */ "fdecstp", + /* 08F */ "fdiv", + /* 090 */ "fdivp", + /* 091 */ "fdivr", + /* 092 */ "fdivrp", + /* 093 */ "femms", + /* 094 */ "ffree", + /* 095 */ "ffreep", + /* 096 */ "fiadd", + /* 097 */ "ficom", + /* 098 */ "ficomp", + /* 099 */ "fidiv", + /* 09A */ "fidivr", + /* 09B */ "fild", + /* 09C */ "fimul", + /* 09D */ "fincstp", + /* 09E */ "fist", + /* 09F */ "fistp", + /* 0A0 */ "fisttp", + /* 0A1 */ "fisub", + /* 0A2 */ "fisubr", + /* 0A3 */ "fld", + /* 0A4 */ "fld1", + /* 0A5 */ "fldcw", + /* 0A6 */ "fldenv", + /* 0A7 */ "fldl2e", + /* 0A8 */ "fldl2t", + /* 0A9 */ "fldlg2", + /* 0AA */ "fldln2", + /* 0AB */ "fldpi", + /* 0AC */ "fldz", + /* 0AD */ "fmul", + /* 0AE */ "fmulp", + /* 0AF */ "fndisi", + /* 0B0 */ "fneni", + /* 0B1 */ "fninit", + /* 0B2 */ "fnop", + /* 0B3 */ "fnsave", + /* 0B4 */ "fnsetpm", + /* 0B5 */ "fnstcw", + /* 0B6 */ "fnstenv", + /* 0B7 */ "fnstsw", + /* 0B8 */ "fpatan", + /* 0B9 */ "fprem", + /* 0BA */ "fprem1", + /* 0BB */ "fptan", + /* 0BC */ "frndint", + /* 0BD */ "frstor", + /* 0BE */ "frstpm", + /* 0BF */ "fscale", + /* 0C0 */ "fsin", + /* 0C1 */ "fsincos", + /* 0C2 */ "fsqrt", + /* 0C3 */ "fst", + /* 0C4 */ "fstp", + /* 0C5 */ "fstp1", + /* 0C6 */ "fstp8", + /* 0C7 */ "fstp9", + /* 0C8 */ "fsub", + /* 0C9 */ "fsubp", + /* 0CA */ "fsubr", + /* 0CB */ "fsubrp", + /* 0CC */ "ftst", + /* 0CD */ "fucom", + /* 0CE */ "fucomi", + /* 0CF */ "fucomip", + /* 0D0 */ "fucomp", + /* 0D1 */ "fucompp", + /* 0D2 */ "fxam", + /* 0D3 */ "fxch", + /* 0D4 */ "fxch4", + /* 0D5 */ "fxch7", + /* 0D6 */ "fxrstor", + /* 0D7 */ "fxsave", + /* 0D8 */ "fxtract", + /* 0D9 */ "fyl2x", + /* 0DA */ "fyl2xp1", + /* 0DB */ "getsec", + /* 0DC */ "haddpd", + /* 0DD */ "haddps", + /* 0DE */ "hlt", + /* 0DF */ "hsubpd", + /* 0E0 */ "hsubps", + /* 0E1 */ "idiv", + /* 0E2 */ "imul", + /* 0E3 */ "in", + /* 0E4 */ "inc", + /* 0E5 */ "insb", + /* 0E6 */ "insd", + /* 0E7 */ "insertps", + /* 0E8 */ "insw", + /* 0E9 */ "int", + /* 0EA */ "int1", + /* 0EB */ "int3", + /* 0EC */ "into", + /* 0ED */ "invd", + /* 0EE */ "invept", + /* 0EF */ "invlpg", + /* 0F0 */ "invlpga", + /* 0F1 */ "invvpid", + /* 0F2 */ "iretd", + /* 0F3 */ "iretq", + /* 0F4 */ "iretw", + /* 0F5 */ "ja", + /* 0F6 */ "jb", + /* 0F7 */ "jbe", + /* 0F8 */ "jcxz", + /* 0F9 */ "je", + /* 0FA */ "jecxz", + /* 0FB */ "jg", + /* 0FC */ "jge", + /* 0FD */ "jl", + /* 0FE */ "jle", + /* 0FF */ "jmp", + /* 100 */ "jnb", + /* 101 */ "jne", + /* 102 */ "jno", + /* 103 */ "jnp", + /* 104 */ "jns", + /* 105 */ "jo", + /* 106 */ "jp", + /* 107 */ "jrcxz", + /* 108 */ "js", + /* 109 */ "lahf", + /* 10A */ "lar", + /* 10B */ "lddqu", + /* 10C */ "ldmxcsr", + /* 10D */ "lds", + /* 10E */ "lea", + /* 10F */ "leave", + /* 110 */ "les", + /* 111 */ "lfence", + /* 112 */ "lfs", + /* 113 */ "lgdt", + /* 114 */ "lgs", + /* 115 */ "lidt", + /* 116 */ "lldt", + /* 117 */ "lmsw", + /* 118 */ "lock", + /* 119 */ "lodsb", + /* 11A */ "lodsd", + /* 11B */ "lodsq", + /* 11C */ "lodsw", + /* 11D */ "loop", + /* 11E */ "loope", + /* 11F */ "loopne", + /* 120 */ "lsl", + /* 121 */ "lss", + /* 122 */ "ltr", + /* 123 */ "maskmovdqu", + /* 124 */ "maskmovq", + /* 125 */ "maxpd", + /* 126 */ "maxps", + /* 127 */ "maxsd", + /* 128 */ "maxss", + /* 129 */ "mfence", + /* 12A */ "minpd", + /* 12B */ "minps", + /* 12C */ "minsd", + /* 12D */ "minss", + /* 12E */ "monitor", + /* 12F */ "montmul", + /* 130 */ "mov", + /* 131 */ "movapd", + /* 132 */ "movaps", + /* 133 */ "movbe", + /* 134 */ "movd", + /* 135 */ "movddup", + /* 136 */ "movdq2q", + /* 137 */ "movdqa", + /* 138 */ "movdqu", + /* 139 */ "movhlps", + /* 13A */ "movhpd", + /* 13B */ "movhps", + /* 13C */ "movlhps", + /* 13D */ "movlpd", + /* 13E */ "movlps", + /* 13F */ "movmskpd", + /* 140 */ "movmskps", + /* 141 */ "movntdq", + /* 142 */ "movntdqa", + /* 143 */ "movnti", + /* 144 */ "movntpd", + /* 145 */ "movntps", + /* 146 */ "movntq", + /* 147 */ "movq", + /* 148 */ "movq2dq", + /* 149 */ "movsb", + /* 14A */ "movsd", + /* 14B */ "movshdup", + /* 14C */ "movsldup", + /* 14D */ "movsq", + /* 14E */ "movss", + /* 14F */ "movsw", + /* 150 */ "movsx", + /* 151 */ "movsxd", + /* 152 */ "movupd", + /* 153 */ "movups", + /* 154 */ "movzx", + /* 155 */ "mpsadbw", + /* 156 */ "mul", + /* 157 */ "mulpd", + /* 158 */ "mulps", + /* 159 */ "mulsd", + /* 15A */ "mulss", + /* 15B */ "mwait", + /* 15C */ "neg", + /* 15D */ "nop", + /* 15E */ "not", + /* 15F */ "or", + /* 160 */ "orpd", + /* 161 */ "orps", + /* 162 */ "out", + /* 163 */ "outsb", + /* 164 */ "outsd", + /* 165 */ "outsw", + /* 166 */ "pabsb", + /* 167 */ "pabsd", + /* 168 */ "pabsw", + /* 169 */ "packssdw", + /* 16A */ "packsswb", + /* 16B */ "packusdw", + /* 16C */ "packuswb", + /* 16D */ "paddb", + /* 16E */ "paddd", + /* 16F */ "paddq", + /* 170 */ "paddsb", + /* 171 */ "paddsw", + /* 172 */ "paddusb", + /* 173 */ "paddusw", + /* 174 */ "paddw", + /* 175 */ "palignr", + /* 176 */ "pand", + /* 177 */ "pandn", + /* 178 */ "pause", + /* 179 */ "pavgb", + /* 17A */ "pavgusb", + /* 17B */ "pavgw", + /* 17C */ "pblendvb", + /* 17D */ "pblendw", + /* 17E */ "pclmulqdq", + /* 17F */ "pcmpeqb", + /* 180 */ "pcmpeqd", + /* 181 */ "pcmpeqq", + /* 182 */ "pcmpeqw", + /* 183 */ "pcmpestri", + /* 184 */ "pcmpestrm", + /* 185 */ "pcmpgtb", + /* 186 */ "pcmpgtd", + /* 187 */ "pcmpgtq", + /* 188 */ "pcmpgtw", + /* 189 */ "pcmpistri", + /* 18A */ "pcmpistrm", + /* 18B */ "pextrb", + /* 18C */ "pextrd", + /* 18D */ "pextrq", + /* 18E */ "pextrw", + /* 18F */ "pf2id", + /* 190 */ "pf2iw", + /* 191 */ "pfacc", + /* 192 */ "pfadd", + /* 193 */ "pfcmpeq", + /* 194 */ "pfcmpge", + /* 195 */ "pfcmpgt", + /* 196 */ "pfmax", + /* 197 */ "pfmin", + /* 198 */ "pfmul", + /* 199 */ "pfnacc", + /* 19A */ "pfpnacc", + /* 19B */ "pfrcp", + /* 19C */ "pfrcpit1", + /* 19D */ "pfrcpit2", + /* 19E */ "pfrsqit1", + /* 19F */ "pfrsqrt", + /* 1A0 */ "pfsub", + /* 1A1 */ "pfsubr", + /* 1A2 */ "phaddd", + /* 1A3 */ "phaddsw", + /* 1A4 */ "phaddw", + /* 1A5 */ "phminposuw", + /* 1A6 */ "phsubd", + /* 1A7 */ "phsubsw", + /* 1A8 */ "phsubw", + /* 1A9 */ "pi2fd", + /* 1AA */ "pi2fw", + /* 1AB */ "pinsrb", + /* 1AC */ "pinsrd", + /* 1AD */ "pinsrq", + /* 1AE */ "pinsrw", + /* 1AF */ "pmaddubsw", + /* 1B0 */ "pmaddwd", + /* 1B1 */ "pmaxsb", + /* 1B2 */ "pmaxsd", + /* 1B3 */ "pmaxsw", + /* 1B4 */ "pmaxub", + /* 1B5 */ "pmaxud", + /* 1B6 */ "pmaxuw", + /* 1B7 */ "pminsb", + /* 1B8 */ "pminsd", + /* 1B9 */ "pminsw", + /* 1BA */ "pminub", + /* 1BB */ "pminud", + /* 1BC */ "pminuw", + /* 1BD */ "pmovmskb", + /* 1BE */ "pmovsxbd", + /* 1BF */ "pmovsxbq", + /* 1C0 */ "pmovsxbw", + /* 1C1 */ "pmovsxdq", + /* 1C2 */ "pmovsxwd", + /* 1C3 */ "pmovsxwq", + /* 1C4 */ "pmovzxbd", + /* 1C5 */ "pmovzxbq", + /* 1C6 */ "pmovzxbw", + /* 1C7 */ "pmovzxdq", + /* 1C8 */ "pmovzxwd", + /* 1C9 */ "pmovzxwq", + /* 1CA */ "pmuldq", + /* 1CB */ "pmulhrsw", + /* 1CC */ "pmulhrw", + /* 1CD */ "pmulhuw", + /* 1CE */ "pmulhw", + /* 1CF */ "pmulld", + /* 1D0 */ "pmullw", + /* 1D1 */ "pmuludq", + /* 1D2 */ "pop", + /* 1D3 */ "popa", + /* 1D4 */ "popad", + /* 1D5 */ "popcnt", + /* 1D6 */ "popfd", + /* 1D7 */ "popfq", + /* 1D8 */ "popfw", + /* 1D9 */ "por", + /* 1DA */ "prefetch", + /* 1DB */ "prefetchnta", + /* 1DC */ "prefetcht0", + /* 1DD */ "prefetcht1", + /* 1DE */ "prefetcht2", + /* 1DF */ "psadbw", + /* 1E0 */ "pshufb", + /* 1E1 */ "pshufd", + /* 1E2 */ "pshufhw", + /* 1E3 */ "pshuflw", + /* 1E4 */ "pshufw", + /* 1E5 */ "psignb", + /* 1E6 */ "psignd", + /* 1E7 */ "psignw", + /* 1E8 */ "pslld", + /* 1E9 */ "pslldq", + /* 1EA */ "psllq", + /* 1EB */ "psllw", + /* 1EC */ "psrad", + /* 1ED */ "psraw", + /* 1EE */ "psrld", + /* 1EF */ "psrldq", + /* 1F0 */ "psrlq", + /* 1F1 */ "psrlw", + /* 1F2 */ "psubb", + /* 1F3 */ "psubd", + /* 1F4 */ "psubq", + /* 1F5 */ "psubsb", + /* 1F6 */ "psubsw", + /* 1F7 */ "psubusb", + /* 1F8 */ "psubusw", + /* 1F9 */ "psubw", + /* 1FA */ "pswapd", + /* 1FB */ "ptest", + /* 1FC */ "punpckhbw", + /* 1FD */ "punpckhdq", + /* 1FE */ "punpckhqdq", + /* 1FF */ "punpckhwd", + /* 200 */ "punpcklbw", + /* 201 */ "punpckldq", + /* 202 */ "punpcklqdq", + /* 203 */ "punpcklwd", + /* 204 */ "push", + /* 205 */ "pusha", + /* 206 */ "pushad", + /* 207 */ "pushfd", + /* 208 */ "pushfq", + /* 209 */ "pushfw", + /* 20A */ "pxor", + /* 20B */ "rcl", + /* 20C */ "rcpps", + /* 20D */ "rcpss", + /* 20E */ "rcr", + /* 20F */ "rdmsr", + /* 210 */ "rdpmc", + /* 211 */ "rdrand", + /* 212 */ "rdtsc", + /* 213 */ "rdtscp", + /* 214 */ "rep", + /* 215 */ "repne", + /* 216 */ "ret", + /* 217 */ "retf", + /* 218 */ "rol", + /* 219 */ "ror", + /* 21A */ "roundpd", + /* 21B */ "roundps", + /* 21C */ "roundsd", + /* 21D */ "roundss", + /* 21E */ "rsm", + /* 21F */ "rsqrtps", + /* 220 */ "rsqrtss", + /* 221 */ "sahf", + /* 222 */ "salc", + /* 223 */ "sar", + /* 224 */ "sbb", + /* 225 */ "scasb", + /* 226 */ "scasd", + /* 227 */ "scasq", + /* 228 */ "scasw", + /* 229 */ "seta", + /* 22A */ "setae", + /* 22B */ "setb", + /* 22C */ "setbe", + /* 22D */ "sete", + /* 22E */ "setg", + /* 22F */ "setge", + /* 230 */ "setl", + /* 231 */ "setle", + /* 232 */ "setne", + /* 233 */ "setno", + /* 234 */ "setnp", + /* 235 */ "setns", + /* 236 */ "seto", + /* 237 */ "setp", + /* 238 */ "sets", + /* 239 */ "sfence", + /* 23A */ "sgdt", + /* 23B */ "shl", + /* 23C */ "shld", + /* 23D */ "shr", + /* 23E */ "shrd", + /* 23F */ "shufpd", + /* 240 */ "shufps", + /* 241 */ "sidt", + /* 242 */ "skinit", + /* 243 */ "sldt", + /* 244 */ "smsw", + /* 245 */ "sqrtpd", + /* 246 */ "sqrtps", + /* 247 */ "sqrtsd", + /* 248 */ "sqrtss", + /* 249 */ "stc", + /* 24A */ "std", + /* 24B */ "stgi", + /* 24C */ "sti", + /* 24D */ "stmxcsr", + /* 24E */ "stosb", + /* 24F */ "stosd", + /* 250 */ "stosq", + /* 251 */ "stosw", + /* 252 */ "str", + /* 253 */ "sub", + /* 254 */ "subpd", + /* 255 */ "subps", + /* 256 */ "subsd", + /* 257 */ "subss", + /* 258 */ "swapgs", + /* 259 */ "syscall", + /* 25A */ "sysenter", + /* 25B */ "sysexit", + /* 25C */ "sysret", + /* 25D */ "test", + /* 25E */ "ucomisd", + /* 25F */ "ucomiss", + /* 260 */ "ud2", + /* 261 */ "unpckhpd", + /* 262 */ "unpckhps", + /* 263 */ "unpcklpd", + /* 264 */ "unpcklps", + /* 265 */ "vaddpd", + /* 266 */ "vaddps", + /* 267 */ "vaddsd", + /* 268 */ "vaddss", + /* 269 */ "vaddsubpd", + /* 26A */ "vaddsubps", + /* 26B */ "vaesdec", + /* 26C */ "vaesdeclast", + /* 26D */ "vaesenc", + /* 26E */ "vaesenclast", + /* 26F */ "vaesimc", + /* 270 */ "vaeskeygenassist", + /* 271 */ "vandnpd", + /* 272 */ "vandnps", + /* 273 */ "vandpd", + /* 274 */ "vandps", + /* 275 */ "vblendpd", + /* 276 */ "vblendps", + /* 277 */ "vblendvpd", + /* 278 */ "vblendvps", + /* 279 */ "vbroadcastsd", + /* 27A */ "vbroadcastss", + /* 27B */ "vcmppd", + /* 27C */ "vcmpps", + /* 27D */ "vcmpsd", + /* 27E */ "vcmpss", + /* 27F */ "vcomisd", + /* 280 */ "vcomiss", + /* 281 */ "vcvtdq2pd", + /* 282 */ "vcvtdq2ps", + /* 283 */ "vcvtpd2dq", + /* 284 */ "vcvtpd2ps", + /* 285 */ "vcvtps2dq", + /* 286 */ "vcvtps2pd", + /* 287 */ "vcvtsd2si", + /* 288 */ "vcvtsd2ss", + /* 289 */ "vcvtsi2sd", + /* 28A */ "vcvtsi2ss", + /* 28B */ "vcvtss2sd", + /* 28C */ "vcvtss2si", + /* 28D */ "vcvttpd2dq", + /* 28E */ "vcvttps2dq", + /* 28F */ "vcvttsd2si", + /* 290 */ "vcvttss2si", + /* 291 */ "vdivpd", + /* 292 */ "vdivps", + /* 293 */ "vdivsd", + /* 294 */ "vdivss", + /* 295 */ "vdppd", + /* 296 */ "vdpps", + /* 297 */ "verr", + /* 298 */ "verw", + /* 299 */ "vextractf128", + /* 29A */ "vextractps", + /* 29B */ "vhaddpd", + /* 29C */ "vhaddps", + /* 29D */ "vhsubpd", + /* 29E */ "vhsubps", + /* 29F */ "vinsertf128", + /* 2A0 */ "vinsertps", + /* 2A1 */ "vlddqu", + /* 2A2 */ "vmaskmovdqu", + /* 2A3 */ "vmaskmovpd", + /* 2A4 */ "vmaskmovps", + /* 2A5 */ "vmaxpd", + /* 2A6 */ "vmaxps", + /* 2A7 */ "vmaxsd", + /* 2A8 */ "vmaxss", + /* 2A9 */ "vmcall", + /* 2AA */ "vmclear", + /* 2AB */ "vminpd", + /* 2AC */ "vminps", + /* 2AD */ "vminsd", + /* 2AE */ "vminss", + /* 2AF */ "vmlaunch", + /* 2B0 */ "vmload", + /* 2B1 */ "vmmcall", + /* 2B2 */ "vmovapd", + /* 2B3 */ "vmovaps", + /* 2B4 */ "vmovd", + /* 2B5 */ "vmovddup", + /* 2B6 */ "vmovdqa", + /* 2B7 */ "vmovdqu", + /* 2B8 */ "vmovhlps", + /* 2B9 */ "vmovhpd", + /* 2BA */ "vmovhps", + /* 2BB */ "vmovlhps", + /* 2BC */ "vmovlpd", + /* 2BD */ "vmovlps", + /* 2BE */ "vmovmskpd", + /* 2BF */ "vmovmskps", + /* 2C0 */ "vmovntdq", + /* 2C1 */ "vmovntdqa", + /* 2C2 */ "vmovntpd", + /* 2C3 */ "vmovntps", + /* 2C4 */ "vmovq", + /* 2C5 */ "vmovsd", + /* 2C6 */ "vmovshdup", + /* 2C7 */ "vmovsldup", + /* 2C8 */ "vmovss", + /* 2C9 */ "vmovupd", + /* 2CA */ "vmovups", + /* 2CB */ "vmpsadbw", + /* 2CC */ "vmptrld", + /* 2CD */ "vmptrst", + /* 2CE */ "vmread", + /* 2CF */ "vmresume", + /* 2D0 */ "vmrun", + /* 2D1 */ "vmsave", + /* 2D2 */ "vmulpd", + /* 2D3 */ "vmulps", + /* 2D4 */ "vmulsd", + /* 2D5 */ "vmulss", + /* 2D6 */ "vmwrite", + /* 2D7 */ "vmxoff", + /* 2D8 */ "vmxon", + /* 2D9 */ "vorpd", + /* 2DA */ "vorps", + /* 2DB */ "vpabsb", + /* 2DC */ "vpabsd", + /* 2DD */ "vpabsw", + /* 2DE */ "vpackssdw", + /* 2DF */ "vpacksswb", + /* 2E0 */ "vpackusdw", + /* 2E1 */ "vpackuswb", + /* 2E2 */ "vpaddb", + /* 2E3 */ "vpaddd", + /* 2E4 */ "vpaddq", + /* 2E5 */ "vpaddsb", + /* 2E6 */ "vpaddsw", + /* 2E7 */ "vpaddusb", + /* 2E8 */ "vpaddusw", + /* 2E9 */ "vpaddw", + /* 2EA */ "vpalignr", + /* 2EB */ "vpand", + /* 2EC */ "vpandn", + /* 2ED */ "vpavgb", + /* 2EE */ "vpavgw", + /* 2EF */ "vpblendvb", + /* 2F0 */ "vpblendw", + /* 2F1 */ "vpclmulqdq", + /* 2F2 */ "vpcmpeqb", + /* 2F3 */ "vpcmpeqd", + /* 2F4 */ "vpcmpeqq", + /* 2F5 */ "vpcmpeqw", + /* 2F6 */ "vpcmpestri", + /* 2F7 */ "vpcmpestrm", + /* 2F8 */ "vpcmpgtb", + /* 2F9 */ "vpcmpgtd", + /* 2FA */ "vpcmpgtq", + /* 2FB */ "vpcmpgtw", + /* 2FC */ "vpcmpistri", + /* 2FD */ "vpcmpistrm", + /* 2FE */ "vperm2f128", + /* 2FF */ "vpermilpd", + /* 300 */ "vpermilps", + /* 301 */ "vpextrb", + /* 302 */ "vpextrd", + /* 303 */ "vpextrq", + /* 304 */ "vpextrw", + /* 305 */ "vphaddd", + /* 306 */ "vphaddsw", + /* 307 */ "vphaddw", + /* 308 */ "vphminposuw", + /* 309 */ "vphsubd", + /* 30A */ "vphsubsw", + /* 30B */ "vphsubw", + /* 30C */ "vpinsrb", + /* 30D */ "vpinsrd", + /* 30E */ "vpinsrq", + /* 30F */ "vpinsrw", + /* 310 */ "vpmaddubsw", + /* 311 */ "vpmaddwd", + /* 312 */ "vpmaxsb", + /* 313 */ "vpmaxsd", + /* 314 */ "vpmaxsw", + /* 315 */ "vpmaxub", + /* 316 */ "vpmaxud", + /* 317 */ "vpmaxuw", + /* 318 */ "vpminsb", + /* 319 */ "vpminsd", + /* 31A */ "vpminsw", + /* 31B */ "vpminub", + /* 31C */ "vpminud", + /* 31D */ "vpminuw", + /* 31E */ "vpmovmskb", + /* 31F */ "vpmovsxbd", + /* 320 */ "vpmovsxbq", + /* 321 */ "vpmovsxbw", + /* 322 */ "vpmovsxwd", + /* 323 */ "vpmovsxwq", + /* 324 */ "vpmovzxbd", + /* 325 */ "vpmovzxbq", + /* 326 */ "vpmovzxbw", + /* 327 */ "vpmovzxdq", + /* 328 */ "vpmovzxwd", + /* 329 */ "vpmovzxwq", + /* 32A */ "vpmuldq", + /* 32B */ "vpmulhrsw", + /* 32C */ "vpmulhuw", + /* 32D */ "vpmulhw", + /* 32E */ "vpmulld", + /* 32F */ "vpmullw", + /* 330 */ "vpor", + /* 331 */ "vpsadbw", + /* 332 */ "vpshufb", + /* 333 */ "vpshufd", + /* 334 */ "vpshufhw", + /* 335 */ "vpshuflw", + /* 336 */ "vpsignb", + /* 337 */ "vpsignd", + /* 338 */ "vpsignw", + /* 339 */ "vpslld", + /* 33A */ "vpslldq", + /* 33B */ "vpsllq", + /* 33C */ "vpsllw", + /* 33D */ "vpsrad", + /* 33E */ "vpsraw", + /* 33F */ "vpsrld", + /* 340 */ "vpsrldq", + /* 341 */ "vpsrlq", + /* 342 */ "vpsrlw", + /* 343 */ "vpsubb", + /* 344 */ "vpsubd", + /* 345 */ "vpsubq", + /* 346 */ "vpsubsb", + /* 347 */ "vpsubsw", + /* 348 */ "vpsubusb", + /* 349 */ "vpsubusw", + /* 34A */ "vpsubw", + /* 34B */ "vptest", + /* 34C */ "vpunpckhbw", + /* 34D */ "vpunpckhdq", + /* 34E */ "vpunpckhqdq", + /* 34F */ "vpunpckhwd", + /* 350 */ "vpunpcklbw", + /* 351 */ "vpunpckldq", + /* 352 */ "vpunpcklqdq", + /* 353 */ "vpunpcklwd", + /* 354 */ "vpxor", + /* 355 */ "vrcpps", + /* 356 */ "vrcpss", + /* 357 */ "vroundpd", + /* 358 */ "vroundps", + /* 359 */ "vroundsd", + /* 35A */ "vroundss", + /* 35B */ "vrsqrtps", + /* 35C */ "vrsqrtss", + /* 35D */ "vshufpd", + /* 35E */ "vshufps", + /* 35F */ "vsqrtpd", + /* 360 */ "vsqrtps", + /* 361 */ "vsqrtsd", + /* 362 */ "vsqrtss", + /* 363 */ "vstmxcsr", + /* 364 */ "vsubpd", + /* 365 */ "vsubps", + /* 366 */ "vsubsd", + /* 367 */ "vsubss", + /* 368 */ "vtestpd", + /* 369 */ "vtestps", + /* 36A */ "vucomisd", + /* 36B */ "vucomiss", + /* 36C */ "vunpckhpd", + /* 36D */ "vunpckhps", + /* 36E */ "vunpcklpd", + /* 36F */ "vunpcklps", + /* 370 */ "vxorpd", + /* 371 */ "vxorps", + /* 372 */ "vzeroall", + /* 373 */ "vzeroupper", + /* 374 */ "wait", + /* 375 */ "wbinvd", + /* 376 */ "wrmsr", + /* 377 */ "xadd", + /* 378 */ "xchg", + /* 379 */ "xcryptcbc", + /* 37A */ "xcryptcfb", + /* 37B */ "xcryptctr", + /* 37C */ "xcryptecb", + /* 37D */ "xcryptofb", + /* 37E */ "xgetbv", + /* 37F */ "xlatb", + /* 380 */ "xor", + /* 381 */ "xorpd", + /* 382 */ "xorps", + /* 383 */ "xrstor", + /* 384 */ "xsave", + /* 385 */ "xsetbv", + /* 386 */ "xsha1", + /* 387 */ "xsha256", + /* 388 */ "xstore", +}; + +} + +} \ No newline at end of file diff --git a/Bindings/Cpp/ZyDisOpcodeTable.hpp b/Zydis/ZydisOpcodeTable.hpp similarity index 92% rename from Bindings/Cpp/ZyDisOpcodeTable.hpp rename to Zydis/ZydisOpcodeTable.hpp index c5f388f..1b1d14a 100644 --- a/Bindings/Cpp/ZyDisOpcodeTable.hpp +++ b/Zydis/ZydisOpcodeTable.hpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : - - Last change : 29. October 2014 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,19 +26,21 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ -#pragma once +***************************************************************************************************/ + +#ifndef _ZYDIS_OPCODETABLE_HPP_ +#define _ZYDIS_OPCODETABLE_HPP_ #include #include -namespace Verteron +namespace Zydis { /** * @brief Values that represent an instruction mnemonic. */ -enum class ZyDisInstructionMnemonic : uint16_t +enum class InstructionMnemonic : uint16_t { /* 000 */ INVALID, /* 001 */ AAA, @@ -922,8 +922,8 @@ enum class ZyDisInstructionMnemonic : uint16_t /* 36D */ VUNPCKHPS, /* 36E */ VUNPCKLPD, /* 36F */ VUNPCKLPS, - /* 370 */ ZyDisORPD, - /* 371 */ ZyDisORPS, + /* 370 */ VXORPD, + /* 371 */ VXORPS, /* 372 */ VZEROALL, /* 373 */ VZEROUPPER, /* 374 */ WAIT, @@ -953,12 +953,12 @@ enum class ZyDisInstructionMnemonic : uint16_t * @brief Defines an alias representing an opcode tree node. An opcode tree node is a 16 bit * unsigned integer value with its first 4 bits reserved for the node type. */ -typedef uint16_t ZyDisOpcodeTreeNode; +typedef uint16_t OpcodeTreeNode; /** * @brief Values that represent the type of an opcode tree node. */ -enum class ZyDisOpcodeTreeNodeType : uint8_t +enum class OpcodeTreeNodeType : uint8_t { /** * @brief Reference to a concrete instruction definition. @@ -1025,7 +1025,7 @@ enum class ZyDisOpcodeTreeNodeType : uint8_t /** * @brief Values that represent the type of an operand in the instruction definition. */ -enum class ZyDisDefinedOperandType : uint8_t +enum class DefinedOperandType : uint8_t { /* * @brief No operand. @@ -1286,7 +1286,7 @@ enum class ZyDisDefinedOperandType : uint8_t * @brief Values that represent the size of an operand in the instruction definition. * Do not change the order or the values of this enum! */ -enum class ZyDisDefinedOperandSize : uint8_t +enum class DefinedOperandSize : uint8_t { /** * @brief No operand. @@ -1386,7 +1386,7 @@ enum class ZyDisDefinedOperandSize : uint8_t * @brief Values that represent optional flags in the instruction definition. * Do not change the order or the values of this enum! */ -enum ZyDisInstructionDefinitionFlags : uint16_t +enum InstructionDefinitionFlags : uint16_t { /** * @brief The instruction accepts the rex.b prefix value. @@ -1454,30 +1454,30 @@ enum ZyDisInstructionDefinitionFlags : uint16_t /** * @brief An operand definition. */ -struct ZyDisOperandDefinition +struct OperandDefinition { /** * @brief The defined operand type. */ - ZyDisDefinedOperandType type; + DefinedOperandType type; /** * @brief The defined operand size. */ - ZyDisDefinedOperandSize size; + DefinedOperandSize size; }; /** * @brief An instruction definition. */ -struct ZyDisInstructionDefinition +struct InstructionDefinition { /** * @brief The instruction mnemonic. */ - ZyDisInstructionMnemonic mnemonic; + InstructionMnemonic mnemonic; /** * @brief The operand definitions for all four possible operands. */ - ZyDisOperandDefinition operand[4]; + OperandDefinition operand[4]; /** * @brief Additional flags for the instruction definition. */ @@ -1492,24 +1492,24 @@ namespace Internal * @brief Contains all opcode tables. * Indexed by the numeric value of the opcode. */ -extern const ZyDisOpcodeTreeNode optreeTable[][256]; +extern const OpcodeTreeNode optreeTable[][256]; /** * @brief Contains all modrm_mod switch tables. * Index values: * 0 = [modrm_mod == !11] * 1 = [modrm_mod == 11] */ -extern const ZyDisOpcodeTreeNode optreeModrmMod[][2]; +extern const OpcodeTreeNode optreeModrmMod[][2]; /** * @brief Contains all modrm_reg switch tables. * Indexed by the numeric value of the modrm_reg field. */ -extern const ZyDisOpcodeTreeNode optreeModrmReg[][8]; +extern const OpcodeTreeNode optreeModrmReg[][8]; /** * @brief Contains all modrm_rm switch tables. * Indexed by the numeric value of the modrm_rm field. */ -extern const ZyDisOpcodeTreeNode optreeModrmRm[][8]; +extern const OpcodeTreeNode optreeModrmRm[][8]; /** * @brief Contains all mandatory-prefix switch tables. * Index values: @@ -1518,13 +1518,13 @@ extern const ZyDisOpcodeTreeNode optreeModrmRm[][8]; * 2 = F3 * 3 = 66 */ -extern const ZyDisOpcodeTreeNode optreeMandatory[][4]; +extern const OpcodeTreeNode optreeMandatory[][4]; /** * @brief Contains all x87 opcode tables. * Indexed by the numeric value of the 6 lowest bits of the modrm byte (modrm_mod should * always be 11). */ -extern const ZyDisOpcodeTreeNode optreeX87[][64]; +extern const OpcodeTreeNode optreeX87[][64]; /** * @brief Contains all address-size switch tables. * Index values: @@ -1532,7 +1532,7 @@ extern const ZyDisOpcodeTreeNode optreeX87[][64]; * 1 = 32 * 2 = 64 */ -extern const ZyDisOpcodeTreeNode optreeAddressSize[][3]; +extern const OpcodeTreeNode optreeAddressSize[][3]; /** * @brief Contains all operand-size switch tables. * Index values: @@ -1540,26 +1540,26 @@ extern const ZyDisOpcodeTreeNode optreeAddressSize[][3]; * 1 = 32 * 2 = 64 */ -extern const ZyDisOpcodeTreeNode optreeOperandSize[][3]; +extern const OpcodeTreeNode optreeOperandSize[][3]; /** * @brief Contains all cpu-mode switch tables. * Index values: * 0 = [!= 64] * 1 = 64 */ -extern const ZyDisOpcodeTreeNode optreeMode[][2]; +extern const OpcodeTreeNode optreeMode[][2]; /** * @brief Contains all vendor switch tables. * Index values: * 0 = AMD * 1 = Intel */ -extern const ZyDisOpcodeTreeNode optreeVendor[][2]; +extern const OpcodeTreeNode optreeVendor[][2]; /** * @brief Contains all 3dnow! switch tables. * Indexed by the numeric value of the 3dnow! opcode. */ -extern const ZyDisOpcodeTreeNode optree3dnow[][256]; +extern const OpcodeTreeNode optree3dnow[][256]; /** * @brief Contains all vex switch tables. * Index values: @@ -1580,21 +1580,21 @@ extern const ZyDisOpcodeTreeNode optree3dnow[][256]; * E = F2_0F38 * F = F2_0F3A */ -extern const ZyDisOpcodeTreeNode optreeVex[][16]; +extern const OpcodeTreeNode optreeVex[][16]; /** * @brief Contains all vex_w switch tables. * Indexed by the numeric value of the vex_w field. */ -extern const ZyDisOpcodeTreeNode optreeVexW[][2]; +extern const OpcodeTreeNode optreeVexW[][2]; /** * @brief Contains all vex_l switch tables. * Indexed by the numeric value of the vex_l field. */ -extern const ZyDisOpcodeTreeNode optreeVexL[][2]; +extern const OpcodeTreeNode optreeVexL[][2]; /** * @brief Contains all instruction definitions. */ -extern const ZyDisInstructionDefinition instrDefinitions[]; +extern const InstructionDefinition instrDefinitions[]; /** * @brief Contains all instruction mnemonic strings. */ @@ -1605,9 +1605,9 @@ extern const char* instrMnemonicStrings[]; * @param node The node. * @return The type of the specified opcode tree node. */ -inline ZyDisOpcodeTreeNodeType VDEGetOpcodeNodeType(ZyDisOpcodeTreeNode node) +inline OpcodeTreeNodeType GetOpcodeNodeType(OpcodeTreeNode node) { - return static_cast((node >> 12) & 0x0F); + return static_cast((node >> 12)& 0x0F); } /** @@ -1615,16 +1615,16 @@ inline ZyDisOpcodeTreeNodeType VDEGetOpcodeNodeType(ZyDisOpcodeTreeNode node) * @param node The node. * @return The value of the specified opcode tree node. */ -inline uint16_t VDEGetOpcodeNodeValue(ZyDisOpcodeTreeNode node) +inline uint16_t GetOpcodeNodeValue(OpcodeTreeNode node) { - return (node & 0x0FFF); + return (node& 0x0FFF); } /** * @brief Returns the root node of the opcode tree. * @return The root node of the opcode tree. */ -inline ZyDisOpcodeTreeNode VDEGetOpcodeTreeRoot() +inline OpcodeTreeNode GetOpcodeTreeRoot() { return 0x1000; } @@ -1635,53 +1635,53 @@ inline ZyDisOpcodeTreeNode VDEGetOpcodeTreeRoot() * @param index The index of the child node to retrieve. * @return The specified child node. */ -inline ZyDisOpcodeTreeNode VDEGetOpcodeTreeChild(ZyDisOpcodeTreeNode parent, uint16_t index) +inline OpcodeTreeNode GetOpcodeTreeChild(OpcodeTreeNode parent, uint16_t index) { using namespace Internal; - ZyDisOpcodeTreeNodeType nodeType = VDEGetOpcodeNodeType(parent); - uint16_t tableIndex = VDEGetOpcodeNodeValue(parent); + OpcodeTreeNodeType nodeType = GetOpcodeNodeType(parent); + uint16_t tableIndex = GetOpcodeNodeValue(parent); switch (nodeType) { - case ZyDisOpcodeTreeNodeType::TABLE: + case OpcodeTreeNodeType::TABLE: assert(index < 256); return optreeTable[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::MODRM_MOD: + case OpcodeTreeNodeType::MODRM_MOD: assert(index < 2); return optreeModrmMod[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::MODRM_REG: + case OpcodeTreeNodeType::MODRM_REG: assert(index < 8); return optreeModrmReg[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::MODRM_RM: + case OpcodeTreeNodeType::MODRM_RM: assert(index < 8); return optreeModrmRm[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::MANDATORY: + case OpcodeTreeNodeType::MANDATORY: assert(index < 4); return optreeMandatory[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::X87: + case OpcodeTreeNodeType::X87: assert(index < 64); return optreeX87[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::ADDRESS_SIZE: + case OpcodeTreeNodeType::ADDRESS_SIZE: assert(index < 3); return optreeAddressSize[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::OPERAND_SIZE: + case OpcodeTreeNodeType::OPERAND_SIZE: assert(index < 3); return optreeOperandSize[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::MODE: + case OpcodeTreeNodeType::MODE: assert(index < 2); return optreeMode[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::VENDOR: + case OpcodeTreeNodeType::VENDOR: assert(index < 3); return optreeVendor[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::AMD3DNOW: + case OpcodeTreeNodeType::AMD3DNOW: assert(index < 256); return optree3dnow[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::VEX: + case OpcodeTreeNodeType::VEX: assert(index < 16); return optreeVex[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::VEXW: + case OpcodeTreeNodeType::VEXW: assert(index < 2); return optreeVexW[tableIndex][index]; - case ZyDisOpcodeTreeNodeType::VEXL: + case OpcodeTreeNodeType::VEXL: assert(index < 2); return optreeVexL[tableIndex][index]; default: @@ -1695,10 +1695,10 @@ inline ZyDisOpcodeTreeNode VDEGetOpcodeTreeChild(ZyDisOpcodeTreeNode parent, uin * @param node The instruction definition node. * @return Pointer to the instruction definition. */ -inline const ZyDisInstructionDefinition* VDEGetInstructionDefinition(ZyDisOpcodeTreeNode node) +inline const InstructionDefinition* GetInstructionDefinition(OpcodeTreeNode node) { - assert(VDEGetOpcodeNodeType(node) == ZyDisOpcodeTreeNodeType::INSTRUCTION_DEFINITION); - return &instrDefinitions[node & 0x0FFF]; + assert(GetOpcodeNodeType(node) == OpcodeTreeNodeType::INSTRUCTION_DEFINITION); + return& instrDefinitions[node& 0x0FFF]; } /** @@ -1706,7 +1706,7 @@ inline const ZyDisInstructionDefinition* VDEGetInstructionDefinition(ZyDisOpcode * @param mnemonic The mnemonic. * @return The instruction mnemonic string. */ -inline const char* VDEGetInstructionMnemonicString(ZyDisInstructionMnemonic mnemonic) +inline const char* GetInstructionMnemonicString(InstructionMnemonic mnemonic) { return instrMnemonicStrings[static_cast(mnemonic)]; } @@ -1716,14 +1716,14 @@ inline const char* VDEGetInstructionMnemonicString(ZyDisInstructionMnemonic mnem * @param operandSize The defined operand size. * @return The the numeric value for the simple operand size definition. */ -inline uint16_t VDEGetSimpleOperandSize(ZyDisDefinedOperandSize operandSize) +inline uint16_t GetSimpleOperandSize(DefinedOperandSize operandSize) { static uint16_t operandSizes[8] = { 8, 16, 32, 64, 80, 12, 128, 256 }; uint16_t index = - static_cast(operandSize) - static_cast(ZyDisDefinedOperandSize::B); + static_cast(operandSize) - static_cast(DefinedOperandSize::B); assert(index < 8); return operandSizes[index]; } @@ -1733,9 +1733,9 @@ inline uint16_t VDEGetSimpleOperandSize(ZyDisDefinedOperandSize operandSize) * @param operandSize The defined operand size. * @return The memory-size part of the operand size definition. */ -inline ZyDisDefinedOperandSize VDEGetComplexOperandMemSize(ZyDisDefinedOperandSize operandSize) +inline DefinedOperandSize GetComplexOperandMemSize(DefinedOperandSize operandSize) { - return static_cast(static_cast(operandSize) & 0x0F); + return static_cast(static_cast(operandSize)& 0x0F); } /** @@ -1743,11 +1743,13 @@ inline ZyDisDefinedOperandSize VDEGetComplexOperandMemSize(ZyDisDefinedOperandSi * @param operandSize The defined operand size. * @return The register-size part of the operand size definition. */ -inline ZyDisDefinedOperandSize VDEGetComplexOperandRegSize(ZyDisDefinedOperandSize operandSize) +inline DefinedOperandSize GetComplexOperandRegSize(DefinedOperandSize operandSize) { - return static_cast((static_cast(operandSize) >> 4) & 0x0F); + return static_cast((static_cast(operandSize) >> 4)& 0x0F); } } } + +#endif /* _ZYDIS_OPCODETABLE_HPP_ */ diff --git a/Zydis/ZydisSymbolResolver.cpp b/Zydis/ZydisSymbolResolver.cpp new file mode 100644 index 0000000..92be232 --- /dev/null +++ b/Zydis/ZydisSymbolResolver.cpp @@ -0,0 +1,91 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include "ZydisSymbolResolver.hpp" + +namespace Zydis +{ + +/* BaseSymbolResolver ====================================================================== */ + +BaseSymbolResolver::~BaseSymbolResolver() +{ + +} + +const char *BaseSymbolResolver::resolveSymbol(const InstructionInfo& info, + uint64_t address, uint64_t& offset) +{ + return nullptr; +} + +/* ExactSymbolResolver ===================================================================== */ + +ExactSymbolResolver::~ExactSymbolResolver() +{ + +} + +const char *ExactSymbolResolver::resolveSymbol(const InstructionInfo& info, + uint64_t address, uint64_t& offset) +{ + std::unordered_map::const_iterator iterator = m_symbolMap.find(address); + if (iterator != m_symbolMap.cend()) + { + offset = 0; + return iterator->second.c_str(); + } + return nullptr; +} + +bool ExactSymbolResolver::containsSymbol(uint64_t address) const +{ + std::unordered_map::const_iterator iterator = m_symbolMap.find(address); + return (iterator != m_symbolMap.end()); +} + +void ExactSymbolResolver::setSymbol(uint64_t address, const char *name) +{ + m_symbolMap[address].assign(name); +} + +void ExactSymbolResolver::removeSymbol(uint64_t address) +{ + m_symbolMap.erase(address); +} + +void ExactSymbolResolver::clear() +{ + m_symbolMap.clear(); +} + +/* ============================================================================================== */ + +} \ No newline at end of file diff --git a/Zydis/ZydisSymbolResolver.hpp b/Zydis/ZydisSymbolResolver.hpp new file mode 100644 index 0000000..b8bf0ca --- /dev/null +++ b/Zydis/ZydisSymbolResolver.hpp @@ -0,0 +1,119 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#ifndef _ZYDIS_SYMBOLRESOLVER_HPP_ +#define _ZYDIS_SYMBOLRESOLVER_HPP_ + +#include +#include "ZydisTypes.hpp" + +namespace Zydis +{ + +/* BaseSymbolResolver =========================================================================== */ + +/** + * @brief Base class for all symbol resolver implementations. + */ +class BaseSymbolResolver +{ +public: + /** + * @brief Destructor. + */ + virtual ~BaseSymbolResolver(); +public: + /** + * @brief Resolves a symbol. + * @param info The instruction info. + * @param address The address. + * @param offset Reference to an unsigned 64 bit integer that receives an offset + * relative to the base address of the symbol. + * @return The name of the symbol, if the symbol was found, @c NULL if not. + */ + virtual const char *resolveSymbol(const InstructionInfo& info, uint64_t address, + uint64_t& offset); +}; + +/* ExactSymbolResolver ========================================================================== */ + +/** + * @brief Simple symbol resolver that only matches exact addresses. + */ +class ExactSymbolResolver : public BaseSymbolResolver +{ +private: + std::unordered_map m_symbolMap; +public: + /** + * @brief Destructor. + */ + ~ExactSymbolResolver() override; +public: + /** + * @brief Resolves a symbol. + * @param info The instruction info. + * @param address The address. + * @param offset Reference to an unsigned 64 bit integer that receives an offset + * relative to the base address of the symbol. + * @return The name of the symbol, if the symbol was found, @c NULL if not. + */ + const char* resolveSymbol(const InstructionInfo& info, uint64_t address, + uint64_t& offset) override; +public: + /** + * @brief Query if the given address is a known symbol. + * @param address The address. + * @return True if the address is known, false if not. + */ + bool containsSymbol(uint64_t address) const; + /** + * @brief Adds or changes a symbol. + * @param address The address. + * @param name The symbol name. + */ + void setSymbol(uint64_t address, const char *name); + /** + * @brief Removes the symbol described by address. This will invalidate all char pointers + * to the specific symbol name. + * @param address The address. + */ + void removeSymbol(uint64_t address); + /** + * @brief Clears the symbol tree. + */ + void clear(); +}; + +/* ============================================================================================== */ + +} + +#endif /* _ZYDIS_SYMBOLRESOLVER_HPP_ */ diff --git a/Bindings/Cpp/ZyDisDisassemblerTypes.hpp b/Zydis/ZydisTypes.hpp similarity index 92% rename from Bindings/Cpp/ZyDisDisassemblerTypes.hpp rename to Zydis/ZydisTypes.hpp index 257a4df..a63bc4d 100644 --- a/Bindings/Cpp/ZyDisDisassemblerTypes.hpp +++ b/Zydis/ZydisTypes.hpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : - - Last change : 22. October 2014 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,15 +26,19 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ -#pragma once +***************************************************************************************************/ + +#ifndef _ZYDIS_TYPES_HPP_ +#define _ZYDIS_TYPES_HPP_ #include -#include "ZyDisOpcodeTable.hpp" +#include "ZydisOpcodeTable.hpp" -namespace Verteron +namespace Zydis { +/* InstructionFlags ============================================================================= */ + /** * @brief Values that represent additional flags of a decoded instruction. */ @@ -125,10 +127,12 @@ enum InstructionFlags : uint32_t IF_ERROR_OPERAND = 0x01000000 }; +/* Register ===================================================================================== */ + /** * @brief Values that represent a cpu register. */ -enum class ZyDisRegister : uint16_t +enum class Register : uint16_t { NONE, /* 8 bit general purpose registers */ @@ -185,10 +189,12 @@ enum class ZyDisRegister : uint16_t RIP }; +/* OperandType ================================================================================== */ + /** * @brief Values that represent the type of a decoded operand. */ -enum class ZyDisOperandType : uint8_t +enum class OperandType : uint8_t { /** * @brief The operand is not used. @@ -220,10 +226,12 @@ enum class ZyDisOperandType : uint8_t CONSTANT }; +/* ZydisOperandAccessMode ============================================================================ */ + /** * @brief Values that represent the operand access mode. */ -enum class ZyDisOperandAccessMode : uint8_t +enum class OperandAccessMode : uint8_t { NA, /** @@ -240,15 +248,17 @@ enum class ZyDisOperandAccessMode : uint8_t READWRITE }; +/* OperandInfo ================================================================================== */ + /** * @brief This struct holds information about a decoded operand. */ -struct ZyDisOperandInfo +struct OperandInfo { /** * @brief The type of the operand. */ - ZyDisOperandType type; + OperandType type; /** * @brief The size of the operand. */ @@ -256,15 +266,15 @@ struct ZyDisOperandInfo /** * @brief The operand access mode. */ - ZyDisOperandAccessMode access_mode; + OperandAccessMode access_mode; /** * @brief The base register. */ - ZyDisRegister base; + Register base; /** * @brief The index register. */ - ZyDisRegister index; + Register index; /** * @brief The scale factor. */ @@ -297,10 +307,12 @@ struct ZyDisOperandInfo } lval; }; +/* InstructionInfo ============================================================================== */ + /** * @brief This struct holds information about a decoded instruction. */ -struct ZyDisInstructionInfo +struct InstructionInfo { /** * @brief The instruction flags. @@ -309,7 +321,7 @@ struct ZyDisInstructionInfo /** * @brief The instruction mnemonic. */ - ZyDisInstructionMnemonic mnemonic; + InstructionMnemonic mnemonic; /** * @brief The total length of the instruction. */ @@ -337,12 +349,12 @@ struct ZyDisInstructionInfo /** * @brief The decoded operands. */ - ZyDisOperandInfo operand[4]; + OperandInfo operand[4]; /** * @brief The segment register. This value will default to @c NONE, if no segment register * prefix is present. */ - ZyDisRegister segment; + Register segment; /** * @brief The rex prefix byte. */ @@ -512,7 +524,7 @@ struct ZyDisInstructionInfo /** * @brief The instruction definition. */ - const ZyDisInstructionDefinition *instrDefinition; + const InstructionDefinition* instrDefinition; /** * @brief The instruction address points to the current instruction (relative to the * initial instruction pointer). @@ -527,3 +539,5 @@ struct ZyDisInstructionInfo }; } + +#endif /* _ZYDIS_TYPES_HPP_ */ diff --git a/Bindings/Cpp/ZyDisDisassemblerUtils.cpp b/Zydis/ZydisUtils.cpp similarity index 66% rename from Bindings/Cpp/ZyDisDisassemblerUtils.cpp rename to Zydis/ZydisUtils.cpp index 2c7b61a..85d6c86 100644 --- a/Bindings/Cpp/ZyDisDisassemblerUtils.cpp +++ b/Zydis/ZydisUtils.cpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : - - Last change : 30. October 2014 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,47 +26,48 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ -#include "ZyDisDisassemblerUtils.hpp" +***************************************************************************************************/ + +#include "ZydisUtils.hpp" #include -namespace Verteron +namespace Zydis { - -uint64_t VDECalcAbsoluteTarget(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand) + +uint64_t CalcAbsoluteTarget(const InstructionInfo& info, const OperandInfo& operand) { - assert((operand.type == ZyDisOperandType::REL_IMMEDIATE) || - ((operand.type == ZyDisOperandType::MEMORY) && (operand.base == ZyDisRegister::RIP))); + assert((operand.type == OperandType::REL_IMMEDIATE) || + ((operand.type == OperandType::MEMORY)&& (operand.base == Register::RIP))); uint64_t truncMask = 0xFFFFFFFFFFFFFFFFull; - if (!(info.flags & IF_DISASSEMBLER_MODE_64)) + if (!(info.flags& IF_DISASSEMBLER_MODE_64)) { truncMask >>= (64 - info.operand_mode); } uint16_t size = operand.size; - if ((operand.type == ZyDisOperandType::MEMORY) && (operand.base == ZyDisRegister::RIP)) + if ((operand.type == OperandType::MEMORY)&& (operand.base == Register::RIP)) { size = operand.offset; } switch (size) { case 8: - return (info.instrPointer + operand.lval.sbyte) & truncMask; + return (info.instrPointer + operand.lval.sbyte)& truncMask; case 16: { - uint32_t delta = operand.lval.sword & truncMask; + uint32_t delta = operand.lval.sword& truncMask; if ((info.instrPointer + delta) > 0xFFFF) { - return (info.instrPointer & 0xF0000) + ((info.instrPointer + delta) & 0xFFFF); + return (info.instrPointer& 0xF0000) + ((info.instrPointer + delta)& 0xFFFF); } return info.instrPointer + delta; } case 32: - return (info.instrPointer + operand.lval.sdword) & truncMask; + return (info.instrPointer + operand.lval.sdword)& truncMask; default: assert(0); } return 0; } -} +} \ No newline at end of file diff --git a/Bindings/Cpp/ZyDisDisassemblerUtils.hpp b/Zydis/ZydisUtils.hpp similarity index 81% rename from Bindings/Cpp/ZyDisDisassemblerUtils.hpp rename to Zydis/ZydisUtils.hpp index 6068ade..81c5398 100644 --- a/Bindings/Cpp/ZyDisDisassemblerUtils.hpp +++ b/Zydis/ZydisUtils.hpp @@ -1,14 +1,12 @@ -/************************************************************************************************** +/*************************************************************************************************** - Verteron Disassembler Engine + Zyan Disassembler Engine Version 1.0 Remarks : Freeware, Copyright must be included Original Author : Florian Bernd - Modifications : - - Last change : 30. October 2014 + Modifications : Joel Höner * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -16,10 +14,10 @@ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,13 +26,15 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. -**************************************************************************************************/ -#pragma once +***************************************************************************************************/ + +#ifndef _ZYDIS_UTILS_HPP_ +#define _ZYDIS_UTILS_HPP_ #include -#include "ZyDisDisassemblerTypes.hpp" +#include "ZydisTypes.hpp" -namespace Verteron +namespace Zydis { /** @@ -43,6 +43,8 @@ namespace Verteron * @param operand The operand. * @return The absolute target address. */ -uint64_t VDECalcAbsoluteTarget(const ZyDisInstructionInfo &info, const ZyDisOperandInfo &operand); +uint64_t CalcAbsoluteTarget(const InstructionInfo& info, const OperandInfo& operand); } + +#endif /* _ZYDIS_UTILS_HPP_ */ From ad845a1dae58fcbc5ce01f3cc05de444a8898060 Mon Sep 17 00:00:00 2001 From: flobernd Date: Sat, 16 May 2015 05:06:52 +0200 Subject: [PATCH 28/33] Minor readme changes --- README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 724620a..a8677ba 100644 --- a/README.md +++ b/README.md @@ -26,21 +26,19 @@ The following example program uses Zydis to disassemble a given memory buffer an #include #include "Zydis.hpp" -using namespace Zydis; - int _tmain(int argc, _TCHAR* argv[]) { uint8_t data[] = { 0x90, 0xE9, 0x00, 0x00, 0x00, 0x00, 0xC3 }; - MemoryInput input(&data[0], sizeof(data)); - InstructionInfo info; - InstructionDecoder decoder; - decoder.setDisassemblerMode(ZydisMode::M32BIT); + Zydis::MemoryInput input(&data[0], sizeof(data)); + Zydis::InstructionInfo info; + Zydis::InstructionDecoder decoder; + decoder.setDisassemblerMode(Zydis::ZydisMode::M32BIT); decoder.setDataSource(&input); decoder.setInstructionPointer(0); - IntelInstructionFormatter formatter; + Zydis::IntelInstructionFormatter formatter; while (decoder.decodeInstruction(info)) { std::cout << formatter.formatInstruction(info) << std::endl; From 8837a61d82428de5372e2eea89ebc8cac83075ec Mon Sep 17 00:00:00 2001 From: athre0z Date: Sat, 16 May 2015 05:25:11 +0200 Subject: [PATCH 29/33] updated CMakeLists.txt, fixed warnings --- CMakeLists.txt | 101 ++++++++++++---------------- Zydis/ZydisInstructionFormatter.cpp | 4 +- Zydis/ZydisSymbolResolver.cpp | 6 +- 3 files changed, 47 insertions(+), 64 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2a104b..fdccb77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,14 @@ cmake_minimum_required(VERSION 2.8.12) include(GenerateExportHeader) -project(ZyanDisassemblerEngine) +project(Zydis) option(BUILD_SHARED_LIBS "Build shared libraries rather than static ones" FALSE) option(FORCE_SHARED_CRT "Forces shared linkage against the CRT even when building a static library" FALSE) option(BUILD_EXAMPLES "Build examples" TRUE) -option(BUILD_CPP_BINDINGS "Build C++ bindings" TRUE) +option(BUILD_C_BINDINGS "Build C bindings" TRUE) if (NOT CONFIGURED_ONCE) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR @@ -43,72 +43,55 @@ if (MSVC AND NOT BUILD_SHARED_LIBS AND NOT FORCE_SHARED_CRT) endif () # Library -set(vde_headers - "VerteronDisassemblerEngine/ZyDisDisassembler.h" - "VerteronDisassemblerEngine/ZyDisDisassemblerTypes.h" - "VerteronDisassemblerEngine/ZyDisDisassemblerUtils.h" - "VerteronDisassemblerEngine/ZyDisInstructionDecoder.h" - "VerteronDisassemblerEngine/ZyDisInstructionFormatter.h" - "VerteronDisassemblerEngine/ZyDisOpcodeTable.h" - "VerteronDisassemblerEngine/ZyDisOpcodeTableInternal.h" - "VerteronDisassemblerEngine/ZyDisInternalHelpers.h" - "VerteronDisassemblerEngine/ZyDisInternalConfig.h") -set(vde_sources - "VerteronDisassemblerEngine/ZyDisDisassemblerUtils.c" - "VerteronDisassemblerEngine/ZyDisInstructionFormatter.c" - "VerteronDisassemblerEngine/ZyDisOpcodeTable.c" - "VerteronDisassemblerEngine/ZyDisInstructionDecoder.c") +set(headers + "ZyDis/ZydisSymbolResolver.hpp" + "ZyDis/ZydisOpcodeTable.hpp" + "ZyDis/ZydisInstructionDecoder.hpp" + "ZyDis/ZydisInstructionFormatter.hpp" + "ZyDis/ZydisTypes.hpp" + "ZyDis/ZydisUtils.hpp" + "ZyDis/Zydis.hpp") +set(sources + "ZyDis/ZydisInstructionDecoder.cpp" + "ZyDis/ZydisInstructionFormatter.cpp" + "ZyDis/ZydisOpcodeTable.cpp" + "ZyDis/ZydisSymbolResolver.cpp" + "ZyDis/ZydisUtils.cpp") -add_library("VerteronDisassemblerEngine" ${vde_headers} ${vde_sources}) +add_library("Zydis" ${headers} ${sources}) generate_export_header( - "VerteronDisassemblerEngine" - BASE_NAME "ZyDis" - EXPORT_FILE_NAME "ZyDisExportConfig.h") + "Zydis" + BASE_NAME "Zydis" + EXPORT_FILE_NAME "ZydisExportConfig.h") include_directories(${PROJECT_BINARY_DIR}) -# C++ bindings -if (BUILD_CPP_BINDINGS) - set(vdecpp_headers - "Bindings/Cpp/ZyDisDisassembler.hpp" - "Bindings/Cpp/ZyDisDisassemblerTypes.hpp" - "Bindings/Cpp/ZyDisDisassemblerUtils.hpp" - "Bindings/Cpp/ZyDisInstructionDecoder.hpp" - "Bindings/Cpp/ZyDisInstructionFormatter.hpp" - "Bindings/Cpp/ZyDisOpcodeTable.hpp") - set(vdecpp_sources - "Bindings/Cpp/ZyDisDisassemblerUtils.cpp" - "Bindings/Cpp/ZyDisInstructionFormatter.cpp" - "Bindings/Cpp/ZyDisOpcodeTable.cpp" - "Bindings/Cpp/ZyDisInstructionDecoder.cpp") - add_library("VerteronDisassemblerEngineCpp" ${vdecpp_headers} ${vdecpp_sources}) - target_link_libraries("VerteronDisassemblerEngineCpp" "VerteronDisassemblerEngine") +# C bindings +if (BUILD_C_BINDINGS) + set(c_headers + "Bindings/C/Zydis.h" + "Bindings/C/ZydisInstructionDecoder.h" + "Bindings/C/ZydisTypes.h" + "Bindings/C/ZydisInstructionFormatter.h" + "Bindings/C/ZydisUtils.h" + "Bindings/C/ZydisSymbolResolver.h" + "Bindings/C/ZydisOpcodeTable.h") + set(c_sources + "Bindings/C/ZydisSymbolResolver.cpp" + "Bindings/C/ZydisOpcodeTable.cpp" + "Bindings/C/ZydisInstructionFormatter.cpp" + "Bindings/C/ZydisInstructionDecoder.cpp" + "Bindings/C/ZydisUtils.cpp") + add_library("ZydisC" ${c_headers} ${c_sources}) + include_directories("Zydis") + target_link_libraries("ZydisC" "Zydis") endif () # Examples if (BUILD_EXAMPLES) - include_directories("VerteronDisassemblerEngine") + include_directories("Bindings/C") - add_executable("CustomDataSource" "Examples/CustomDataSource/Main.c") - target_link_libraries("CustomDataSource" "VerteronDisassemblerEngine") - - add_executable("PerformanceTest" "Examples/PerformanceTest/Main.c") - target_link_libraries("PerformanceTest" "VerteronDisassemblerEngine") - - add_executable("SimpleDemo" "Examples/SimpleDemo/Main.c") - target_link_libraries("SimpleDemo" "VerteronDisassemblerEngine") - - if (BUILD_CPP_BINDINGS) - add_executable("CppBindingsTest" "Examples/CppBindings/Main.cpp") - include_directories("Bindings/Cpp") - target_link_libraries("CppBindingsTest" "VerteronDisassemblerEngineCpp") - endif () - - if (WIN32) - add_executable("SymbolResolver" "Examples/SymbolResolver/Main.c") - target_link_libraries("SymbolResolver" "VerteronDisassemblerEngine") - else () - message(STATUS "Example 'SymbolResolver' not compatible with platform, ignoring.") - endif () + add_executable("C_SimpleDemo" "Examples/C/SimpleDemo/SimpleDemo.c") + target_link_libraries("C_SimpleDemo" "ZydisC") endif () set(CONFIGURED_ONCE TRUE CACHE INTERNAL "CMake has configured at least once.") diff --git a/Zydis/ZydisInstructionFormatter.cpp b/Zydis/ZydisInstructionFormatter.cpp index edee070..6420b9b 100644 --- a/Zydis/ZydisInstructionFormatter.cpp +++ b/Zydis/ZydisInstructionFormatter.cpp @@ -171,7 +171,7 @@ char const *BaseInstructionFormatter::outputString() { for (size_t i = offset; i < m_outputStringLen - 1; ++i) { - m_outputBuffer[i] = toupper(m_outputBuffer[i]); + m_outputBuffer[i] = static_cast(toupper(m_outputBuffer[i])); } } } @@ -212,7 +212,7 @@ char const *BaseInstructionFormatter::outputString() { for (size_t i = offset; i < m_outputStringLen - 1; ++i) { - m_outputBuffer[i] = toupper(m_outputBuffer[i]); + m_outputBuffer[i] = static_cast(toupper(m_outputBuffer[i])); } } va_end(arguments); diff --git a/Zydis/ZydisSymbolResolver.cpp b/Zydis/ZydisSymbolResolver.cpp index 92be232..00f0a45 100644 --- a/Zydis/ZydisSymbolResolver.cpp +++ b/Zydis/ZydisSymbolResolver.cpp @@ -40,8 +40,8 @@ BaseSymbolResolver::~BaseSymbolResolver() } -const char *BaseSymbolResolver::resolveSymbol(const InstructionInfo& info, - uint64_t address, uint64_t& offset) +const char *BaseSymbolResolver::resolveSymbol(const InstructionInfo& /*info*/, + uint64_t /*address*/, uint64_t& /*offset*/) { return nullptr; } @@ -53,7 +53,7 @@ ExactSymbolResolver::~ExactSymbolResolver() } -const char *ExactSymbolResolver::resolveSymbol(const InstructionInfo& info, +const char *ExactSymbolResolver::resolveSymbol(const InstructionInfo& /*info*/, uint64_t address, uint64_t& offset) { std::unordered_map::const_iterator iterator = m_symbolMap.find(address); From 292b9ea037a0467c3f39326249981815e1971cba Mon Sep 17 00:00:00 2001 From: flobernd Date: Mon, 18 May 2015 02:26:18 +0200 Subject: [PATCH 30/33] Improved C-bindings * Moved C-bindings from seperate project to the core library * Added type checks * Added error checks to the C-bindings SimpleDemo.c --- Bindings/C/Zydis.h | 40 - Bindings/C/ZydisInstructionDecoder.cpp | 259 ------ Bindings/C/ZydisInstructionDecoder.h | 253 ------ Bindings/C/ZydisInstructionFormatter.cpp | 251 ----- Bindings/C/ZydisInstructionFormatter.h | 104 --- Bindings/C/ZydisOpcodeTable.cpp | 32 - Bindings/C/ZydisOpcodeTable.h | 961 -------------------- Bindings/C/ZydisSymbolResolver.cpp | 144 --- Bindings/C/ZydisSymbolResolver.h | 126 --- Bindings/C/ZydisUtils.cpp | 46 - Bindings/C/ZydisUtils.h | 54 -- CMakeLists.txt | 58 +- Examples/C/SimpleDemo/SimpleDemo.c | 145 ++- Zydis/ZydisAPI.cpp | 421 +++++++++ Bindings/C/ZydisTypes.h => Zydis/ZydisAPI.h | 174 +++- Zydis/ZydisInstructionFormatter.cpp | 5 +- Zydis/ZydisSymbolResolver.hpp | 4 +- 17 files changed, 743 insertions(+), 2334 deletions(-) delete mode 100644 Bindings/C/Zydis.h delete mode 100644 Bindings/C/ZydisInstructionDecoder.cpp delete mode 100644 Bindings/C/ZydisInstructionDecoder.h delete mode 100644 Bindings/C/ZydisInstructionFormatter.cpp delete mode 100644 Bindings/C/ZydisInstructionFormatter.h delete mode 100644 Bindings/C/ZydisOpcodeTable.cpp delete mode 100644 Bindings/C/ZydisOpcodeTable.h delete mode 100644 Bindings/C/ZydisSymbolResolver.cpp delete mode 100644 Bindings/C/ZydisSymbolResolver.h delete mode 100644 Bindings/C/ZydisUtils.cpp delete mode 100644 Bindings/C/ZydisUtils.h create mode 100644 Zydis/ZydisAPI.cpp rename Bindings/C/ZydisTypes.h => Zydis/ZydisAPI.h (74%) diff --git a/Bindings/C/Zydis.h b/Bindings/C/Zydis.h deleted file mode 100644 index 49e8574..0000000 --- a/Bindings/C/Zydis.h +++ /dev/null @@ -1,40 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_DISASSEMBLER_H_ -#define _ZYDIS_DISASSEMBLER_H_ - -#include "ZydisTypes.h" -#include "ZydisInstructionDecoder.h" -#include "ZydisInstructionFormatter.h" -#include "ZydisSymbolResolver.h" -#include "ZydisUtils.h" - -#endif /* _ZYDIS_DISASSEMBLER_H_ */ \ No newline at end of file diff --git a/Bindings/C/ZydisInstructionDecoder.cpp b/Bindings/C/ZydisInstructionDecoder.cpp deleted file mode 100644 index 89b622c..0000000 --- a/Bindings/C/ZydisInstructionDecoder.cpp +++ /dev/null @@ -1,259 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisInstructionDecoder.h" -#include "ZydisInstructionDecoder.hpp" -#include "ZydisTypes.hpp" - -/* Helpers ===================================================================================== */ - -namespace -{ - -inline Zydis::BaseInput* ZydisBaseInput_CppPtr( - ZydisBaseInputContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseInput* ZydisBaseInput_CppPtr( - const ZydisBaseInputContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseInputContext* ZydisBaseInput_CPtr( - Zydis::BaseInput *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisBaseInputContext* ZydisBaseInput_CPtr( - const Zydis::BaseInput *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline const Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - const ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline ZydisInstructionDecoderContext* ZydisInstructionDecoder_CPtr( - Zydis::InstructionDecoder *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisInstructionDecoderContext* ZydisInstructionDecoder_CPtr( - const Zydis::InstructionDecoder *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::InstructionDecoder* ZydisInstructionDecoder_CppPtr( - ZydisInstructionDecoderContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::InstructionDecoder* ZydisInstructionDecoder_CppPtr( - const ZydisInstructionDecoderContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline Zydis::DisassemblerMode ZydisDisassemblerMode_CppRepr( - ZydisDisassemblerMode val) -{ - return static_cast(val); -} - -inline ZydisDisassemblerMode ZydisDisassemblerMode_CRepr( - Zydis::DisassemblerMode val) -{ - return static_cast(val); -} - -inline Zydis::InstructionSetVendor ZydisInstructionSetVendor_CppRepr( - ZydisInstructionSetVendor val) -{ - return static_cast(val); -} - -inline ZydisInstructionSetVendor ZydisInstructionSetVendor_CRepr( - Zydis::InstructionSetVendor val) -{ - return static_cast(val); -} - -} - -/* BaseInput ============================================================================ */ - -void ZydisBaseInput_Release(ZydisBaseInputContext *ctx) -{ - delete ZydisBaseInput_CppPtr(ctx); -} - -uint8_t ZydisBaseInput_InputPeek(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info) -{ - return ZydisBaseInput_CppPtr(ctx)->inputPeek(*ZydisInstructionInfo_CppPtr(info)); -} - -uint8_t ZydisBaseInput_InputNext(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info) -{ - return ZydisBaseInput_CppPtr(ctx)->inputNext(*ZydisInstructionInfo_CppPtr(info)); -} - -uint8_t ZydisBaseInput_InputCurrent(const ZydisBaseInputContext *ctx) -{ - return ZydisBaseInput_CppPtr(ctx)->inputCurrent(); -} - -bool ZydisBaseInput_IsEndOfInput(const ZydisBaseInputContext *ctx) -{ - return ZydisBaseInput_CppPtr(ctx)->isEndOfInput(); -} - -uint64_t ZydisBaseInput_GetPosition(const ZydisBaseInputContext *ctx) -{ - return ZydisBaseInput_CppPtr(ctx)->getPosition(); -} - -bool ZydisBaseInput_SetPosition(ZydisBaseInputContext *ctx, uint64_t position) -{ - return ZydisBaseInput_CppPtr(ctx)->setPosition(position); -} - -/* MemoryInput ========================================================================== */ - -ZydisBaseInputContext* ZydisMemoryInput_Create(const void* buffer, size_t bufferLen) -{ - return reinterpret_cast( - new Zydis::MemoryInput(buffer, bufferLen)); -} - -/* InstructionDecoder ======================================================================== */ - -ZydisInstructionDecoderContext* ZydisInstructionDecoder_Create() -{ - return reinterpret_cast(new Zydis::InstructionDecoder); -} - -ZydisInstructionDecoderContext* ZydisInstructionDecoder_CreateEx( - ZydisBaseInputContext *input, - ZydisDisassemblerMode disassemblerMode, - ZydisInstructionSetVendor preferredVendor, - uint64_t instructionPointer) -{ - return ZydisInstructionDecoder_CPtr(new Zydis::InstructionDecoder( - ZydisBaseInput_CppPtr(input), - ZydisDisassemblerMode_CppRepr(disassemblerMode), - ZydisInstructionSetVendor_CppRepr(preferredVendor), - instructionPointer)); -} - -void ZydisInstructionDecoder_Release(ZydisInstructionDecoderContext *ctx) -{ - delete ZydisInstructionDecoder_CppPtr(ctx); -} - -bool ZydisInstructionDecoder_DecodeInstruction( - ZydisInstructionDecoderContext *ctx, ZydisInstructionInfo *info) -{ - return ZydisInstructionDecoder_CppPtr(ctx)->decodeInstruction( - *ZydisInstructionInfo_CppPtr(info)); -} - -ZydisBaseInputContext* ZydisInstructionDecoder_GetDataSource( - const ZydisInstructionDecoderContext *ctx) -{ - return ZydisBaseInput_CPtr(ZydisInstructionDecoder_CppPtr(ctx)->getDataSource()); -} - -void ZydisInstructionDecoder_SetDataSource( - ZydisInstructionDecoderContext *ctx, ZydisBaseInputContext *input) -{ - ZydisInstructionDecoder_CppPtr(ctx)->setDataSource(ZydisBaseInput_CppPtr(input)); -} - -ZydisDisassemblerMode ZydisInstructionDecoder_GetDisassemblerMode( - ZydisInstructionDecoderContext *ctx) -{ - return ZydisDisassemblerMode_CRepr(ZydisInstructionDecoder_CppPtr(ctx)->getDisassemblerMode()); -} - -void ZydisInstructionDecoder_SetDisassemblerMode( - ZydisInstructionDecoderContext *ctx, - ZydisDisassemblerMode disassemblerMode) -{ - ZydisInstructionDecoder_CppPtr(ctx)->setDisassemblerMode( - ZydisDisassemblerMode_CppRepr(disassemblerMode)); -} - -ZydisInstructionSetVendor ZydisInstructionDecoder_GetPreferredVendor( - const ZydisInstructionDecoderContext *ctx) -{ - return ZydisInstructionSetVendor_CRepr( - ZydisInstructionDecoder_CppPtr(ctx)->getPreferredVendor()); -} - -void ZydisInstructionDecoder_SetPreferredVendor( - ZydisInstructionDecoderContext *ctx, - ZydisInstructionSetVendor preferredVendor) -{ - return ZydisInstructionDecoder_CppPtr(ctx)->setPreferredVendor( - ZydisInstructionSetVendor_CppRepr(preferredVendor)); -} - -uint64_t ZydisInstructionDecoder_GetInstructionPointer( - ZydisInstructionDecoderContext *ctx) -{ - return ZydisInstructionDecoder_CppPtr(ctx)->getInstructionPointer(); -} - -void ZydisInstructionDecoder_SetInstructionPointer( - ZydisInstructionDecoderContext *ctx, - uint64_t instructionPointer) -{ - ZydisInstructionDecoder_CppPtr(ctx)->setInstructionPointer(instructionPointer); -} - -/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/ZydisInstructionDecoder.h b/Bindings/C/ZydisInstructionDecoder.h deleted file mode 100644 index f6a3bce..0000000 --- a/Bindings/C/ZydisInstructionDecoder.h +++ /dev/null @@ -1,253 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_INSTRUCTIONDECODER_H_ -#define _ZYDIS_INSTRUCTIONDECODER_H_ - -#include "ZydisTypes.h" -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* BaseInput ============================================================================ */ - -typedef struct _ZydisBaseInputContext { int a; } ZydisBaseInputContext; - -/** - * @brief Releases a data source. - * @param ctx The context to release. - * The context may no longer be used after it was released. - */ -void ZydisBaseInput_Release(ZydisBaseInputContext *ctx); - -/** - * @brief Reads the next byte from the data source without altering the current input position - * or the @c length field of the @c info parameter. - * @param ctx The data source context. - * @param info The instruction info struct. - * @return The current input byte. If the result is zero, you should always check the @c flags - * field of the @c info parameter for error flags. Possible error values are - * @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - */ -uint8_t ZydisBaseInput_InputPeek(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info); - -/** - * @brief Reads the next byte from the data source. - * @param ctx The data soruce context. - * @param info The instruction info. - * @return The current input byte. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - * This method increases the current input position and the @c length field of the @c info - * parameter. This function also appends the new byte to to @c data field of the @c info - * parameter. - */ -uint8_t ZydisBaseInput_InputNext(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info); - -/** - * @brief Returns the current input byte. - * @param ctx The data soruce context. - * @return The current input byte. - * The current input byte is set everytime the @c inputPeek or @c inputNext method is called. - */ -// TODO: check long descr -uint8_t ZydisBaseInput_InputCurrent(const ZydisBaseInputContext *ctx); - -/** - * @brief Queries if the end of the data source is reached. - * @param ctx The data soruce context. - * @return @c true if end of input, @c false if not. - */ -bool ZydisBaseInput_IsEndOfInput(const ZydisBaseInputContext *ctx); - -/** - * @brief Returns the current input position. - * @param ctx The data soruce context. - * @return The current input position. - */ -uint64_t ZydisBaseInput_GetPosition(const ZydisBaseInputContext *ctx); - -/** - * @brief Sets a new input position. - * @param ctx The data soruce context. - * @param position The new input position. - * @return @c false if the new position exceeds the maximum input length. - */ -bool ZydisBaseInput_SetPosition(ZydisBaseInputContext *ctx, uint64_t position); - -/* MemoryInput ========================================================================== */ - -/** - * @brief Creates a memory data source. - * @param buffer The input buffer. - * @param bufferLen THe length of the input buffer. - * @return @c NULL if it fails, else a data source context. - * @see BaseInput_Release - */ -// TODO: verify return value -ZydisBaseInputContext* ZydisMemoryInput_Create(const void* buffer, size_t bufferLen); - -/* Enums ======================================================================================= */ - -/** - * @brief Values that represent a disassembler mode. - */ -typedef enum _ZydisDisassemblerMode /* : uint8_t */ -{ - DM_M16BIT, - DM_M32BIT, - DM_M64BIT -} ZydisDisassemblerMode; - -/** - * @brief Values that represent an instruction-set vendor. - */ -typedef enum _ZydisInstructionSetVendor /* : uint8_t */ -{ - ISV_ANY, - ISV_INTEL, - ISV_AMD -} ZydisInstructionSetVendor; - -/* InstructionDecoder ======================================================================== */ - -typedef struct _ZydisInstructionDecoderContext { int a; } ZydisInstructionDecoderContext; - -/** - * @brief Creates an instruction decoder. - * @return @c NULL if it fails, else an instruction decoder context. - * @see InstructionDecoder_Release - */ -// TODO: verify return value -ZydisInstructionDecoderContext* ZydisInstructionDecoder_Create(void); - -/** - * @brief Creates an instruction decoder. - * @param input A reference to the input data source. - * @param disassemblerMode The disassembler mode. - * @param preferredVendor The preferred instruction-set vendor. - * @param instructionPointer The initial instruction pointer. - * @return @c NULL if it fails, else an instruction decoder context. - * @see InstructionDecoder_Release - */ -ZydisInstructionDecoderContext* ZydisInstructionDecoder_CreateEx(ZydisBaseInputContext *input, - ZydisDisassemblerMode disassemblerMode, ZydisInstructionSetVendor preferredVendor, - uint64_t instructionPointer); - -/** - * @brief Releases an instruction decoder. - * @param ctx The context of the instruction decoder to release. - */ -void ZydisInstructionDecoder_Release(ZydisInstructionDecoderContext *ctx); - -/** - * @brief Decodes the next instruction from the input data source. - * @param ctx The instruction decoder context. - * @param info The @c ZydisInstructionInfo struct that receives the information about the decoded - * instruction. - * @return This function returns @c false if the current position exceeds the maximum input - * length. In all other cases (valid and invalid instructions) the return value is - * @c true. - */ -bool ZydisInstructionDecoder_DecodeInstruction(ZydisInstructionDecoderContext *ctx, - ZydisInstructionInfo *info); - -/** - * @brief Returns a pointer to the current data source. - * @param ctx The instruction decoder context. - * @return The context of the data source. - */ -ZydisBaseInputContext* ZydisInstructionDecoder_GetDataSource(const ZydisInstructionDecoderContext *ctx); - -/** - * @brief Sets a new data source. - * @param ctx The instruction decoder context. - * @param input The context of the new input data source. - */ -void ZydisInstructionDecoder_SetDataSource(ZydisInstructionDecoderContext *ctx, - ZydisBaseInputContext *input); - -/** - * @brief Returns the current disassembler mode. - * @param ctx The instruction decoder context. - * @return The current disassembler mode. - */ -ZydisDisassemblerMode ZydisInstructionDecoder_GetDisassemblerMode(ZydisInstructionDecoderContext *ctx); - -/** - * @brief Sets the current disassembler mode. - * @param ctx The instruction decoder context. - * @param disassemblerMode The new disassembler mode. - */ -void ZydisInstructionDecoder_SetDisassemblerMode(ZydisInstructionDecoderContext *ctx, - ZydisDisassemblerMode disassemblerMode); - -/** - * @brief Returns the preferred instruction-set vendor. - * @param ctx The instruction decoder context. - * @return The preferred instruction-set vendor. - */ -ZydisInstructionSetVendor ZydisInstructionDecoder_GetPreferredVendor( - const ZydisInstructionDecoderContext *ctx); - -/** - * @brief Sets the preferred instruction-set vendor. - * @param ctx The instruction decoder context. - * @param preferredVendor The new preferred instruction-set vendor. - */ -void ZydisInstructionDecoder_SetPreferredVendor(ZydisInstructionDecoderContext *ctx, - ZydisInstructionSetVendor preferredVendor); - -/** - * @brief Returns the current instruction pointer. - * @param ctx The instruction decoder context. - * @return The current instruction pointer. - */ -uint64_t ZydisInstructionDecoder_GetInstructionPointer(ZydisInstructionDecoderContext *ctx); - -/** - * @brief Sets a new instruction pointer. - * @param ctx The instruction decoder context. - * @param instructionPointer The new instruction pointer. - */ -void ZydisInstructionDecoder_SetInstructionPointer(ZydisInstructionDecoderContext *ctx, - uint64_t instructionPointer); - -/* ============================================================================================= */ - -#ifdef __cplusplus -} -#endif - -#endif /* _ZYDIS_INSTRUCTIONDECODER_H_ */ diff --git a/Bindings/C/ZydisInstructionFormatter.cpp b/Bindings/C/ZydisInstructionFormatter.cpp deleted file mode 100644 index d6d8c7c..0000000 --- a/Bindings/C/ZydisInstructionFormatter.cpp +++ /dev/null @@ -1,251 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisInstructionFormatter.h" -#include "ZydisInstructionFormatter.hpp" - -/* Helpers ===================================================================================== */ - -namespace -{ - -inline Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( - ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( - const ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( - Zydis::BaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( - const Zydis::BaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::ExactSymbolResolver* ZydisExactSymbolResolver_CppPtr( - ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::ExactSymbolResolver* ZydisExactSymbolResolver_CppPtr( - const ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_CPtr( - Zydis::ExactSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_CPtr( - const Zydis::ExactSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline const Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - const ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline ZydisInstructionInfo* ZydisInstructionInfo_CPtr( - Zydis::InstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisInstructionInfo* ZydisInstructionInfo_CPtr( - const Zydis::InstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::BaseInstructionFormatter* ZydisBaseInstructionFormatter_CppPtr( - ZydisBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseInstructionFormatter* ZydisBaseInstructionFormatter_CppPtr( - const ZydisBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline Zydis::BaseInstructionFormatter* ZydisIntelInstructionFormatter_CppPtr( - ZydisBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseInstructionFormatter* ZydisIntelInstructionFormatter_CppPtr( - const ZydisBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CPtr( - Zydis::BaseInstructionFormatter *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CPtr( - const Zydis::BaseInstructionFormatter *ctx) -{ - return reinterpret_cast(ctx); -} - -} - -/* BaseSymbolResolver ======================================================================== */ - -void ZydisBaseSymbolResolver_Release( - ZydisBaseSymbolResolverContext *ctx) -{ - delete ZydisBaseSymbolResolver_CppPtr(ctx); -} - -const char* ZydisBaseSymbolResolver_ResolveSymbol( - ZydisBaseSymbolResolverContext *ctx, - const ZydisInstructionInfo *info, - uint64_t address, - uint64_t *offset) -{ - return ZydisBaseSymbolResolver_CppPtr(ctx)->resolveSymbol( - *ZydisInstructionInfo_CppPtr(info), - address, - *offset); -} - -/* ExactSymbolResolver ======================================================================= */ - -ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_Create(void) -{ - return ZydisExactSymbolResolver_CPtr(new Zydis::ExactSymbolResolver); -} - -bool EZydisxactSymbolResolver_ContainsSymbol( - ZydisBaseSymbolResolverContext *ctx, - uint64_t address) -{ - return ZydisExactSymbolResolver_CppPtr(ctx)->containsSymbol(address); -} - -void ZydisExactSymbolResolverContext_SetSymbol( - ZydisBaseSymbolResolverContext *ctx, - uint64_t address, - const char* name) -{ - ZydisExactSymbolResolver_CppPtr(ctx)->setSymbol(address, name); -} - -void ZydisExactSymbolResolverContext_RemoveSymbol( - ZydisBaseSymbolResolverContext *ctx, - uint64_t address) -{ - ZydisExactSymbolResolver_CppPtr(ctx)->removeSymbol(address); -} - -void ZydisExactSymbolResolverContext_Clear( - ZydisBaseSymbolResolverContext *ctx) -{ - ZydisExactSymbolResolver_CppPtr(ctx)->clear(); -} - -/* BaseInstructionFormatter ================================================================== */ - -const char* ZydisBaseInstructionFormatter_FormatInstruction( - ZydisBaseInstructionFormatterContext *ctx, - const ZydisInstructionInfo *info) -{ - return ZydisBaseInstructionFormatter_CppPtr(ctx)->formatInstruction( - *ZydisInstructionInfo_CppPtr(info)); -} - -ZydisBaseSymbolResolverContext* ZydisBaseInstructionFormatter_GetSymbolResolver( - const ZydisBaseInstructionFormatterContext *ctx) -{ - return ZydisBaseSymbolResolver_CPtr( - ZydisBaseInstructionFormatter_CppPtr(ctx)->getSymbolResolver()); -} - -void ZydisBaseInstructionFormatter_SetSymbolResolver( - ZydisBaseInstructionFormatterContext *ctx, - ZydisBaseSymbolResolverContext *resolver) -{ - ZydisBaseInstructionFormatter_CppPtr(ctx)->setSymbolResolver( - ZydisBaseSymbolResolver_CppPtr(resolver)); -} - -void ZydisBaseInstructionFormatter_Release( - ZydisBaseInstructionFormatterContext *ctx) -{ - delete ZydisBaseInstructionFormatter_CppPtr(ctx); -} - -/* IntelInstructionFormatter ================================================================ */ - -ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_Create(void) -{ - return ZydisIntelInstructionFormatter_CPtr(new Zydis::IntelInstructionFormatter); -} - -ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CreateEx( - ZydisBaseSymbolResolverContext *resolver) -{ - return ZydisIntelInstructionFormatter_CPtr(new Zydis::IntelInstructionFormatter( - ZydisBaseSymbolResolver_CppPtr(resolver))); -} - -/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/ZydisInstructionFormatter.h b/Bindings/C/ZydisInstructionFormatter.h deleted file mode 100644 index cc51b38..0000000 --- a/Bindings/C/ZydisInstructionFormatter.h +++ /dev/null @@ -1,104 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_INSTRUCTIONFORMATTER_H_ -#define _ZYDIS_INSTRUCTIONFORMATTER_H_ - -#include "ZydisTypes.h" -#include "ZydisSymbolResolver.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* BaseInstructionFormatter ================================================================== */ - -typedef struct _ZydisBaseInstructionFormatterContext {int a;} ZydisBaseInstructionFormatterContext; - -/** - * @brief Formats a decoded instruction. - * @param ctx The instruction formatter context. - * @param info The instruction info. - * @return Pointer to the formatted instruction string. This pointer remains valid until - * this function is called again or the context is released. - */ -const char* ZydisBaseInstructionFormatter_FormatInstruction( - ZydisBaseInstructionFormatterContext *ctx, const ZydisInstructionInfo *info); - -/** - * @brief Returns a pointer to the current symbol resolver. - * @param ctx The instruction formatter context. - * @return Pointer to the current symbol resolver or @c NULL if no symbol resolver is used. - */ -ZydisBaseSymbolResolverContext* ZydisBaseInstructionFormatter_GetSymbolResolver( - const ZydisBaseInstructionFormatterContext *ctx); - -/** - * @brief Sets a new symbol resolver. - * @param ctx The instruction formatter context. - * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol - * resolver should be used. - */ -void ZydisBaseInstructionFormatter_SetSymbolResolver(ZydisBaseInstructionFormatterContext *ctx, - ZydisBaseSymbolResolverContext *resolver); - -/** - * @brief Releases an instruction formatter. - * @param ctx The context of the instruction formatter to release. - * The context may no longer used after it has been released. - */ -void ZydisBaseInstructionFormatter_Release(ZydisBaseInstructionFormatterContext *ctx); - -/* IntelInstructionFormatter ================================================================ */ - -/** - * @brief Creates an Intel-syntax instruction formatter. - * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see BaseInstructionFormatter_Release - */ -ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_Create(void); - -/** - * @brief Creates an Intel-syntax instruction formatter. - * @param resolver The symbol resolver consulted to resolve symbols on formatting. - * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see BaseInstructionFormatter_Release - */ -ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CreateEx( - ZydisBaseSymbolResolverContext *resolver); - -/* ============================================================================================= */ - -#ifdef __cplusplus -} -#endif - -#endif /* _ZYDIS_INSTRUCTIONFORMATTER_H_ */ \ No newline at end of file diff --git a/Bindings/C/ZydisOpcodeTable.cpp b/Bindings/C/ZydisOpcodeTable.cpp deleted file mode 100644 index 6724ea4..0000000 --- a/Bindings/C/ZydisOpcodeTable.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisOpcodeTable.h" -#include "ZydisOpcodeTable.hpp" diff --git a/Bindings/C/ZydisOpcodeTable.h b/Bindings/C/ZydisOpcodeTable.h deleted file mode 100644 index 3f9ab5f..0000000 --- a/Bindings/C/ZydisOpcodeTable.h +++ /dev/null @@ -1,961 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_OPCODETABLE_H_ -#define _ZYDIS_OPCODETABLE_H_ - -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * @brief Values that represent an instruction mnemonic. - */ -typedef enum _ZydisInstructionMnemonic /* : uint16_t */ -{ - /* 000 */ ZYDIS_MNEM_INVALID, - /* 001 */ ZYDIS_MNEM_AAA, - /* 002 */ ZYDIS_MNEM_AAD, - /* 003 */ ZYDIS_MNEM_AAM, - /* 004 */ ZYDIS_MNEM_AAS, - /* 005 */ ZYDIS_MNEM_ADC, - /* 006 */ ZYDIS_MNEM_ADD, - /* 007 */ ZYDIS_MNEM_ADDPD, - /* 008 */ ZYDIS_MNEM_ADDPS, - /* 009 */ ZYDIS_MNEM_ADDSD, - /* 00A */ ZYDIS_MNEM_ADDSS, - /* 00B */ ZYDIS_MNEM_ADDSUBPD, - /* 00C */ ZYDIS_MNEM_ADDSUBPS, - /* 00D */ ZYDIS_MNEM_AESDEC, - /* 00E */ ZYDIS_MNEM_AESDECLAST, - /* 00F */ ZYDIS_MNEM_AESENC, - /* 010 */ ZYDIS_MNEM_AESENCLAST, - /* 011 */ ZYDIS_MNEM_AESIMC, - /* 012 */ ZYDIS_MNEM_AESKEYGENASSIST, - /* 013 */ ZYDIS_MNEM_AND, - /* 014 */ ZYDIS_MNEM_ANDNPD, - /* 015 */ ZYDIS_MNEM_ANDNPS, - /* 016 */ ZYDIS_MNEM_ANDPD, - /* 017 */ ZYDIS_MNEM_ANDPS, - /* 018 */ ZYDIS_MNEM_ARPL, - /* 019 */ ZYDIS_MNEM_BLENDPD, - /* 01A */ ZYDIS_MNEM_BLENDPS, - /* 01B */ ZYDIS_MNEM_BLENDVPD, - /* 01C */ ZYDIS_MNEM_BLENDVPS, - /* 01D */ ZYDIS_MNEM_BOUND, - /* 01E */ ZYDIS_MNEM_BSF, - /* 01F */ ZYDIS_MNEM_BSR, - /* 020 */ ZYDIS_MNEM_BSWAP, - /* 021 */ ZYDIS_MNEM_BT, - /* 022 */ ZYDIS_MNEM_BTC, - /* 023 */ ZYDIS_MNEM_BTR, - /* 024 */ ZYDIS_MNEM_BTS, - /* 025 */ ZYDIS_MNEM_CALL, - /* 026 */ ZYDIS_MNEM_CBW, - /* 027 */ ZYDIS_MNEM_CDQ, - /* 028 */ ZYDIS_MNEM_CDQE, - /* 029 */ ZYDIS_MNEM_CLC, - /* 02A */ ZYDIS_MNEM_CLD, - /* 02B */ ZYDIS_MNEM_CLFLUSH, - /* 02C */ ZYDIS_MNEM_CLGI, - /* 02D */ ZYDIS_MNEM_CLI, - /* 02E */ ZYDIS_MNEM_CLTS, - /* 02F */ ZYDIS_MNEM_CMC, - /* 030 */ ZYDIS_MNEM_CMOVA, - /* 031 */ ZYDIS_MNEM_CMOVAE, - /* 032 */ ZYDIS_MNEM_CMOVB, - /* 033 */ ZYDIS_MNEM_CMOVBE, - /* 034 */ ZYDIS_MNEM_CMOVE, - /* 035 */ ZYDIS_MNEM_CMOVG, - /* 036 */ ZYDIS_MNEM_CMOVGE, - /* 037 */ ZYDIS_MNEM_CMOVL, - /* 038 */ ZYDIS_MNEM_CMOVLE, - /* 039 */ ZYDIS_MNEM_CMOVNE, - /* 03A */ ZYDIS_MNEM_CMOVNO, - /* 03B */ ZYDIS_MNEM_CMOVNP, - /* 03C */ ZYDIS_MNEM_CMOVNS, - /* 03D */ ZYDIS_MNEM_CMOVO, - /* 03E */ ZYDIS_MNEM_CMOVP, - /* 03F */ ZYDIS_MNEM_CMOVS, - /* 040 */ ZYDIS_MNEM_CMP, - /* 041 */ ZYDIS_MNEM_CMPPD, - /* 042 */ ZYDIS_MNEM_CMPPS, - /* 043 */ ZYDIS_MNEM_CMPSB, - /* 044 */ ZYDIS_MNEM_CMPSD, - /* 045 */ ZYDIS_MNEM_CMPSQ, - /* 046 */ ZYDIS_MNEM_CMPSS, - /* 047 */ ZYDIS_MNEM_CMPSW, - /* 048 */ ZYDIS_MNEM_CMPXCHG, - /* 049 */ ZYDIS_MNEM_CMPXCHG16B, - /* 04A */ ZYDIS_MNEM_CMPXCHG8B, - /* 04B */ ZYDIS_MNEM_COMISD, - /* 04C */ ZYDIS_MNEM_COMISS, - /* 04D */ ZYDIS_MNEM_CPUID, - /* 04E */ ZYDIS_MNEM_CQO, - /* 04F */ ZYDIS_MNEM_CRC32, - /* 050 */ ZYDIS_MNEM_CVTDQ2PD, - /* 051 */ ZYDIS_MNEM_CVTDQ2PS, - /* 052 */ ZYDIS_MNEM_CVTPD2DQ, - /* 053 */ ZYDIS_MNEM_CVTPD2PI, - /* 054 */ ZYDIS_MNEM_CVTPD2PS, - /* 055 */ ZYDIS_MNEM_CVTPI2PD, - /* 056 */ ZYDIS_MNEM_CVTPI2PS, - /* 057 */ ZYDIS_MNEM_CVTPS2DQ, - /* 058 */ ZYDIS_MNEM_CVTPS2PD, - /* 059 */ ZYDIS_MNEM_CVTPS2PI, - /* 05A */ ZYDIS_MNEM_CVTSD2SI, - /* 05B */ ZYDIS_MNEM_CVTSD2SS, - /* 05C */ ZYDIS_MNEM_CVTSI2SD, - /* 05D */ ZYDIS_MNEM_CVTSI2SS, - /* 05E */ ZYDIS_MNEM_CVTSS2SD, - /* 05F */ ZYDIS_MNEM_CVTSS2SI, - /* 060 */ ZYDIS_MNEM_CVTTPD2DQ, - /* 061 */ ZYDIS_MNEM_CVTTPD2PI, - /* 062 */ ZYDIS_MNEM_CVTTPS2DQ, - /* 063 */ ZYDIS_MNEM_CVTTPS2PI, - /* 064 */ ZYDIS_MNEM_CVTTSD2SI, - /* 065 */ ZYDIS_MNEM_CVTTSS2SI, - /* 066 */ ZYDIS_MNEM_CWD, - /* 067 */ ZYDIS_MNEM_CWDE, - /* 068 */ ZYDIS_MNEM_DAA, - /* 069 */ ZYDIS_MNEM_DAS, - /* 06A */ ZYDIS_MNEM_DEC, - /* 06B */ ZYDIS_MNEM_DIV, - /* 06C */ ZYDIS_MNEM_DIVPD, - /* 06D */ ZYDIS_MNEM_DIVPS, - /* 06E */ ZYDIS_MNEM_DIVSD, - /* 06F */ ZYDIS_MNEM_DIVSS, - /* 070 */ ZYDIS_MNEM_DPPD, - /* 071 */ ZYDIS_MNEM_DPPS, - /* 072 */ ZYDIS_MNEM_EMMS, - /* 073 */ ZYDIS_MNEM_ENTER, - /* 074 */ ZYDIS_MNEM_EXTRACTPS, - /* 075 */ ZYDIS_MNEM_F2XM1, - /* 076 */ ZYDIS_MNEM_FABS, - /* 077 */ ZYDIS_MNEM_FADD, - /* 078 */ ZYDIS_MNEM_FADDP, - /* 079 */ ZYDIS_MNEM_FBLD, - /* 07A */ ZYDIS_MNEM_FBSTP, - /* 07B */ ZYDIS_MNEM_FCHS, - /* 07C */ ZYDIS_MNEM_FCLEX, - /* 07D */ ZYDIS_MNEM_FCMOVB, - /* 07E */ ZYDIS_MNEM_FCMOVBE, - /* 07F */ ZYDIS_MNEM_FCMOVE, - /* 080 */ ZYDIS_MNEM_FCMOVNB, - /* 081 */ ZYDIS_MNEM_FCMOVNBE, - /* 082 */ ZYDIS_MNEM_FCMOVNE, - /* 083 */ ZYDIS_MNEM_FCMOVNU, - /* 084 */ ZYDIS_MNEM_FCMOVU, - /* 085 */ ZYDIS_MNEM_FCOM, - /* 086 */ ZYDIS_MNEM_FCOM2, - /* 087 */ ZYDIS_MNEM_FCOMI, - /* 088 */ ZYDIS_MNEM_FCOMIP, - /* 089 */ ZYDIS_MNEM_FCOMP, - /* 08A */ ZYDIS_MNEM_FCOMP3, - /* 08B */ ZYDIS_MNEM_FCOMP5, - /* 08C */ ZYDIS_MNEM_FCOMPP, - /* 08D */ ZYDIS_MNEM_FCOS, - /* 08E */ ZYDIS_MNEM_FDECSTP, - /* 08F */ ZYDIS_MNEM_FDIV, - /* 090 */ ZYDIS_MNEM_FDIVP, - /* 091 */ ZYDIS_MNEM_FDIVR, - /* 092 */ ZYDIS_MNEM_FDIVRP, - /* 093 */ ZYDIS_MNEM_FEMMS, - /* 094 */ ZYDIS_MNEM_FFREE, - /* 095 */ ZYDIS_MNEM_FFREEP, - /* 096 */ ZYDIS_MNEM_FIADD, - /* 097 */ ZYDIS_MNEM_FICOM, - /* 098 */ ZYDIS_MNEM_FICOMP, - /* 099 */ ZYDIS_MNEM_FIDIV, - /* 09A */ ZYDIS_MNEM_FIDIVR, - /* 09B */ ZYDIS_MNEM_FILD, - /* 09C */ ZYDIS_MNEM_FIMUL, - /* 09D */ ZYDIS_MNEM_FINCSTP, - /* 09E */ ZYDIS_MNEM_FIST, - /* 09F */ ZYDIS_MNEM_FISTP, - /* 0A0 */ ZYDIS_MNEM_FISTTP, - /* 0A1 */ ZYDIS_MNEM_FISUB, - /* 0A2 */ ZYDIS_MNEM_FISUBR, - /* 0A3 */ ZYDIS_MNEM_FLD, - /* 0A4 */ ZYDIS_MNEM_FLD1, - /* 0A5 */ ZYDIS_MNEM_FLDCW, - /* 0A6 */ ZYDIS_MNEM_FLDENV, - /* 0A7 */ ZYDIS_MNEM_FLDL2E, - /* 0A8 */ ZYDIS_MNEM_FLDL2T, - /* 0A9 */ ZYDIS_MNEM_FLDLG2, - /* 0AA */ ZYDIS_MNEM_FLDLN2, - /* 0AB */ ZYDIS_MNEM_FLDPI, - /* 0AC */ ZYDIS_MNEM_FLDZ, - /* 0AD */ ZYDIS_MNEM_FMUL, - /* 0AE */ ZYDIS_MNEM_FMULP, - /* 0AF */ ZYDIS_MNEM_FNDISI, - /* 0B0 */ ZYDIS_MNEM_FNENI, - /* 0B1 */ ZYDIS_MNEM_FNINIT, - /* 0B2 */ ZYDIS_MNEM_FNOP, - /* 0B3 */ ZYDIS_MNEM_FNSAVE, - /* 0B4 */ ZYDIS_MNEM_FNSETPM, - /* 0B5 */ ZYDIS_MNEM_FNSTCW, - /* 0B6 */ ZYDIS_MNEM_FNSTENV, - /* 0B7 */ ZYDIS_MNEM_FNSTSW, - /* 0B8 */ ZYDIS_MNEM_FPATAN, - /* 0B9 */ ZYDIS_MNEM_FPREM, - /* 0BA */ ZYDIS_MNEM_FPREM1, - /* 0BB */ ZYDIS_MNEM_FPTAN, - /* 0BC */ ZYDIS_MNEM_FRNDINT, - /* 0BD */ ZYDIS_MNEM_FRSTOR, - /* 0BE */ ZYDIS_MNEM_FRSTPM, - /* 0BF */ ZYDIS_MNEM_FSCALE, - /* 0C0 */ ZYDIS_MNEM_FSIN, - /* 0C1 */ ZYDIS_MNEM_FSINCOS, - /* 0C2 */ ZYDIS_MNEM_FSQRT, - /* 0C3 */ ZYDIS_MNEM_FST, - /* 0C4 */ ZYDIS_MNEM_FSTP, - /* 0C5 */ ZYDIS_MNEM_FSTP1, - /* 0C6 */ ZYDIS_MNEM_FSTP8, - /* 0C7 */ ZYDIS_MNEM_FSTP9, - /* 0C8 */ ZYDIS_MNEM_FSUB, - /* 0C9 */ ZYDIS_MNEM_FSUBP, - /* 0CA */ ZYDIS_MNEM_FSUBR, - /* 0CB */ ZYDIS_MNEM_FSUBRP, - /* 0CC */ ZYDIS_MNEM_FTST, - /* 0CD */ ZYDIS_MNEM_FUCOM, - /* 0CE */ ZYDIS_MNEM_FUCOMI, - /* 0CF */ ZYDIS_MNEM_FUCOMIP, - /* 0D0 */ ZYDIS_MNEM_FUCOMP, - /* 0D1 */ ZYDIS_MNEM_FUCOMPP, - /* 0D2 */ ZYDIS_MNEM_FXAM, - /* 0D3 */ ZYDIS_MNEM_FXCH, - /* 0D4 */ ZYDIS_MNEM_FXCH4, - /* 0D5 */ ZYDIS_MNEM_FXCH7, - /* 0D6 */ ZYDIS_MNEM_FXRSTOR, - /* 0D7 */ ZYDIS_MNEM_FXSAVE, - /* 0D8 */ ZYDIS_MNEM_FXTRACT, - /* 0D9 */ ZYDIS_MNEM_FYL2X, - /* 0DA */ ZYDIS_MNEM_FYL2XP1, - /* 0DB */ ZYDIS_MNEM_GETSEC, - /* 0DC */ ZYDIS_MNEM_HADDPD, - /* 0DD */ ZYDIS_MNEM_HADDPS, - /* 0DE */ ZYDIS_MNEM_HLT, - /* 0DF */ ZYDIS_MNEM_HSUBPD, - /* 0E0 */ ZYDIS_MNEM_HSUBPS, - /* 0E1 */ ZYDIS_MNEM_IDIV, - /* 0E2 */ ZYDIS_MNEM_IMUL, - /* 0E3 */ ZYDIS_MNEM_IN, - /* 0E4 */ ZYDIS_MNEM_INC, - /* 0E5 */ ZYDIS_MNEM_INSB, - /* 0E6 */ ZYDIS_MNEM_INSD, - /* 0E7 */ ZYDIS_MNEM_INSERTPS, - /* 0E8 */ ZYDIS_MNEM_INSW, - /* 0E9 */ ZYDIS_MNEM_INT, - /* 0EA */ ZYDIS_MNEM_INT1, - /* 0EB */ ZYDIS_MNEM_INT3, - /* 0EC */ ZYDIS_MNEM_INTO, - /* 0ED */ ZYDIS_MNEM_INVD, - /* 0EE */ ZYDIS_MNEM_INVEPT, - /* 0EF */ ZYDIS_MNEM_INVLPG, - /* 0F0 */ ZYDIS_MNEM_INVLPGA, - /* 0F1 */ ZYDIS_MNEM_INVVPID, - /* 0F2 */ ZYDIS_MNEM_IRETD, - /* 0F3 */ ZYDIS_MNEM_IRETQ, - /* 0F4 */ ZYDIS_MNEM_IRETW, - /* 0F5 */ ZYDIS_MNEM_JA, - /* 0F6 */ ZYDIS_MNEM_JB, - /* 0F7 */ ZYDIS_MNEM_JBE, - /* 0F8 */ ZYDIS_MNEM_JCXZ, - /* 0F9 */ ZYDIS_MNEM_JE, - /* 0FA */ ZYDIS_MNEM_JECXZ, - /* 0FB */ ZYDIS_MNEM_JG, - /* 0FC */ ZYDIS_MNEM_JGE, - /* 0FD */ ZYDIS_MNEM_JL, - /* 0FE */ ZYDIS_MNEM_JLE, - /* 0FF */ ZYDIS_MNEM_JMP, - /* 100 */ ZYDIS_MNEM_JNB, - /* 101 */ ZYDIS_MNEM_JNE, - /* 102 */ ZYDIS_MNEM_JNO, - /* 103 */ ZYDIS_MNEM_JNP, - /* 104 */ ZYDIS_MNEM_JNS, - /* 105 */ ZYDIS_MNEM_JO, - /* 106 */ ZYDIS_MNEM_JP, - /* 107 */ ZYDIS_MNEM_JRCXZ, - /* 108 */ ZYDIS_MNEM_JS, - /* 109 */ ZYDIS_MNEM_LAHF, - /* 10A */ ZYDIS_MNEM_LAR, - /* 10B */ ZYDIS_MNEM_LDDQU, - /* 10C */ ZYDIS_MNEM_LDMXCSR, - /* 10D */ ZYDIS_MNEM_LDS, - /* 10E */ ZYDIS_MNEM_LEA, - /* 10F */ ZYDIS_MNEM_LEAVE, - /* 110 */ ZYDIS_MNEM_LES, - /* 111 */ ZYDIS_MNEM_LFENCE, - /* 112 */ ZYDIS_MNEM_LFS, - /* 113 */ ZYDIS_MNEM_LGDT, - /* 114 */ ZYDIS_MNEM_LGS, - /* 115 */ ZYDIS_MNEM_LIDT, - /* 116 */ ZYDIS_MNEM_LLDT, - /* 117 */ ZYDIS_MNEM_LMSW, - /* 118 */ ZYDIS_MNEM_LOCK, - /* 119 */ ZYDIS_MNEM_LODSB, - /* 11A */ ZYDIS_MNEM_LODSD, - /* 11B */ ZYDIS_MNEM_LODSQ, - /* 11C */ ZYDIS_MNEM_LODSW, - /* 11D */ ZYDIS_MNEM_LOOP, - /* 11E */ ZYDIS_MNEM_LOOPE, - /* 11F */ ZYDIS_MNEM_LOOPNE, - /* 120 */ ZYDIS_MNEM_LSL, - /* 121 */ ZYDIS_MNEM_LSS, - /* 122 */ ZYDIS_MNEM_LTR, - /* 123 */ ZYDIS_MNEM_MASKMOVDQU, - /* 124 */ ZYDIS_MNEM_MASKMOVQ, - /* 125 */ ZYDIS_MNEM_MAXPD, - /* 126 */ ZYDIS_MNEM_MAXPS, - /* 127 */ ZYDIS_MNEM_MAXSD, - /* 128 */ ZYDIS_MNEM_MAXSS, - /* 129 */ ZYDIS_MNEM_MFENCE, - /* 12A */ ZYDIS_MNEM_MINPD, - /* 12B */ ZYDIS_MNEM_MINPS, - /* 12C */ ZYDIS_MNEM_MINSD, - /* 12D */ ZYDIS_MNEM_MINSS, - /* 12E */ ZYDIS_MNEM_MONITOR, - /* 12F */ ZYDIS_MNEM_MONTMUL, - /* 130 */ ZYDIS_MNEM_MOV, - /* 131 */ ZYDIS_MNEM_MOVAPD, - /* 132 */ ZYDIS_MNEM_MOVAPS, - /* 133 */ ZYDIS_MNEM_MOVBE, - /* 134 */ ZYDIS_MNEM_MOVD, - /* 135 */ ZYDIS_MNEM_MOVDDUP, - /* 136 */ ZYDIS_MNEM_MOVDQ2Q, - /* 137 */ ZYDIS_MNEM_MOVDQA, - /* 138 */ ZYDIS_MNEM_MOVDQU, - /* 139 */ ZYDIS_MNEM_MOVHLPS, - /* 13A */ ZYDIS_MNEM_MOVHPD, - /* 13B */ ZYDIS_MNEM_MOVHPS, - /* 13C */ ZYDIS_MNEM_MOVLHPS, - /* 13D */ ZYDIS_MNEM_MOVLPD, - /* 13E */ ZYDIS_MNEM_MOVLPS, - /* 13F */ ZYDIS_MNEM_MOVMSKPD, - /* 140 */ ZYDIS_MNEM_MOVMSKPS, - /* 141 */ ZYDIS_MNEM_MOVNTDQ, - /* 142 */ ZYDIS_MNEM_MOVNTDQA, - /* 143 */ ZYDIS_MNEM_MOVNTI, - /* 144 */ ZYDIS_MNEM_MOVNTPD, - /* 145 */ ZYDIS_MNEM_MOVNTPS, - /* 146 */ ZYDIS_MNEM_MOVNTQ, - /* 147 */ ZYDIS_MNEM_MOVQ, - /* 148 */ ZYDIS_MNEM_MOVQ2DQ, - /* 149 */ ZYDIS_MNEM_MOVSB, - /* 14A */ ZYDIS_MNEM_MOVSD, - /* 14B */ ZYDIS_MNEM_MOVSHDUP, - /* 14C */ ZYDIS_MNEM_MOVSLDUP, - /* 14D */ ZYDIS_MNEM_MOVSQ, - /* 14E */ ZYDIS_MNEM_MOVSS, - /* 14F */ ZYDIS_MNEM_MOVSW, - /* 150 */ ZYDIS_MNEM_MOVSX, - /* 151 */ ZYDIS_MNEM_MOVSXD, - /* 152 */ ZYDIS_MNEM_MOVUPD, - /* 153 */ ZYDIS_MNEM_MOVUPS, - /* 154 */ ZYDIS_MNEM_MOVZX, - /* 155 */ ZYDIS_MNEM_MPSADBW, - /* 156 */ ZYDIS_MNEM_MUL, - /* 157 */ ZYDIS_MNEM_MULPD, - /* 158 */ ZYDIS_MNEM_MULPS, - /* 159 */ ZYDIS_MNEM_MULSD, - /* 15A */ ZYDIS_MNEM_MULSS, - /* 15B */ ZYDIS_MNEM_MWAIT, - /* 15C */ ZYDIS_MNEM_NEG, - /* 15D */ ZYDIS_MNEM_NOP, - /* 15E */ ZYDIS_MNEM_NOT, - /* 15F */ ZYDIS_MNEM_OR, - /* 160 */ ZYDIS_MNEM_ORPD, - /* 161 */ ZYDIS_MNEM_ORPS, - /* 162 */ ZYDIS_MNEM_OUT, - /* 163 */ ZYDIS_MNEM_OUTSB, - /* 164 */ ZYDIS_MNEM_OUTSD, - /* 165 */ ZYDIS_MNEM_OUTSW, - /* 166 */ ZYDIS_MNEM_PABSB, - /* 167 */ ZYDIS_MNEM_PABSD, - /* 168 */ ZYDIS_MNEM_PABSW, - /* 169 */ ZYDIS_MNEM_PACKSSDW, - /* 16A */ ZYDIS_MNEM_PACKSSWB, - /* 16B */ ZYDIS_MNEM_PACKUSDW, - /* 16C */ ZYDIS_MNEM_PACKUSWB, - /* 16D */ ZYDIS_MNEM_PADDB, - /* 16E */ ZYDIS_MNEM_PADDD, - /* 16F */ ZYDIS_MNEM_PADDQ, - /* 170 */ ZYDIS_MNEM_PADDSB, - /* 171 */ ZYDIS_MNEM_PADDSW, - /* 172 */ ZYDIS_MNEM_PADDUSB, - /* 173 */ ZYDIS_MNEM_PADDUSW, - /* 174 */ ZYDIS_MNEM_PADDW, - /* 175 */ ZYDIS_MNEM_PALIGNR, - /* 176 */ ZYDIS_MNEM_PAND, - /* 177 */ ZYDIS_MNEM_PANDN, - /* 178 */ ZYDIS_MNEM_PAUSE, - /* 179 */ ZYDIS_MNEM_PAVGB, - /* 17A */ ZYDIS_MNEM_PAVGUSB, - /* 17B */ ZYDIS_MNEM_PAVGW, - /* 17C */ ZYDIS_MNEM_PBLENDVB, - /* 17D */ ZYDIS_MNEM_PBLENDW, - /* 17E */ ZYDIS_MNEM_PCLMULQDQ, - /* 17F */ ZYDIS_MNEM_PCMPEQB, - /* 180 */ ZYDIS_MNEM_PCMPEQD, - /* 181 */ ZYDIS_MNEM_PCMPEQQ, - /* 182 */ ZYDIS_MNEM_PCMPEQW, - /* 183 */ ZYDIS_MNEM_PCMPESTRI, - /* 184 */ ZYDIS_MNEM_PCMPESTRM, - /* 185 */ ZYDIS_MNEM_PCMPGTB, - /* 186 */ ZYDIS_MNEM_PCMPGTD, - /* 187 */ ZYDIS_MNEM_PCMPGTQ, - /* 188 */ ZYDIS_MNEM_PCMPGTW, - /* 189 */ ZYDIS_MNEM_PCMPISTRI, - /* 18A */ ZYDIS_MNEM_PCMPISTRM, - /* 18B */ ZYDIS_MNEM_PEXTRB, - /* 18C */ ZYDIS_MNEM_PEXTRD, - /* 18D */ ZYDIS_MNEM_PEXTRQ, - /* 18E */ ZYDIS_MNEM_PEXTRW, - /* 18F */ ZYDIS_MNEM_PF2ID, - /* 190 */ ZYDIS_MNEM_PF2IW, - /* 191 */ ZYDIS_MNEM_PFACC, - /* 192 */ ZYDIS_MNEM_PFADD, - /* 193 */ ZYDIS_MNEM_PFCMPEQ, - /* 194 */ ZYDIS_MNEM_PFCMPGE, - /* 195 */ ZYDIS_MNEM_PFCMPGT, - /* 196 */ ZYDIS_MNEM_PFMAX, - /* 197 */ ZYDIS_MNEM_PFMIN, - /* 198 */ ZYDIS_MNEM_PFMUL, - /* 199 */ ZYDIS_MNEM_PFNACC, - /* 19A */ ZYDIS_MNEM_PFPNACC, - /* 19B */ ZYDIS_MNEM_PFRCP, - /* 19C */ ZYDIS_MNEM_PFRCPIT1, - /* 19D */ ZYDIS_MNEM_PFRCPIT2, - /* 19E */ ZYDIS_MNEM_PFRSQIT1, - /* 19F */ ZYDIS_MNEM_PFRSQRT, - /* 1A0 */ ZYDIS_MNEM_PFSUB, - /* 1A1 */ ZYDIS_MNEM_PFSUBR, - /* 1A2 */ ZYDIS_MNEM_PHADDD, - /* 1A3 */ ZYDIS_MNEM_PHADDSW, - /* 1A4 */ ZYDIS_MNEM_PHADDW, - /* 1A5 */ ZYDIS_MNEM_PHMINPOSUW, - /* 1A6 */ ZYDIS_MNEM_PHSUBD, - /* 1A7 */ ZYDIS_MNEM_PHSUBSW, - /* 1A8 */ ZYDIS_MNEM_PHSUBW, - /* 1A9 */ ZYDIS_MNEM_PI2FD, - /* 1AA */ ZYDIS_MNEM_PI2FW, - /* 1AB */ ZYDIS_MNEM_PINSRB, - /* 1AC */ ZYDIS_MNEM_PINSRD, - /* 1AD */ ZYDIS_MNEM_PINSRQ, - /* 1AE */ ZYDIS_MNEM_PINSRW, - /* 1AF */ ZYDIS_MNEM_PMADDUBSW, - /* 1B0 */ ZYDIS_MNEM_PMADDWD, - /* 1B1 */ ZYDIS_MNEM_PMAXSB, - /* 1B2 */ ZYDIS_MNEM_PMAXSD, - /* 1B3 */ ZYDIS_MNEM_PMAXSW, - /* 1B4 */ ZYDIS_MNEM_PMAXUB, - /* 1B5 */ ZYDIS_MNEM_PMAXUD, - /* 1B6 */ ZYDIS_MNEM_PMAXUW, - /* 1B7 */ ZYDIS_MNEM_PMINSB, - /* 1B8 */ ZYDIS_MNEM_PMINSD, - /* 1B9 */ ZYDIS_MNEM_PMINSW, - /* 1BA */ ZYDIS_MNEM_PMINUB, - /* 1BB */ ZYDIS_MNEM_PMINUD, - /* 1BC */ ZYDIS_MNEM_PMINUW, - /* 1BD */ ZYDIS_MNEM_PMOVMSKB, - /* 1BE */ ZYDIS_MNEM_PMOVSXBD, - /* 1BF */ ZYDIS_MNEM_PMOVSXBQ, - /* 1C0 */ ZYDIS_MNEM_PMOVSXBW, - /* 1C1 */ ZYDIS_MNEM_PMOVSXDQ, - /* 1C2 */ ZYDIS_MNEM_PMOVSXWD, - /* 1C3 */ ZYDIS_MNEM_PMOVSXWQ, - /* 1C4 */ ZYDIS_MNEM_PMOVZXBD, - /* 1C5 */ ZYDIS_MNEM_PMOVZXBQ, - /* 1C6 */ ZYDIS_MNEM_PMOVZXBW, - /* 1C7 */ ZYDIS_MNEM_PMOVZXDQ, - /* 1C8 */ ZYDIS_MNEM_PMOVZXWD, - /* 1C9 */ ZYDIS_MNEM_PMOVZXWQ, - /* 1CA */ ZYDIS_MNEM_PMULDQ, - /* 1CB */ ZYDIS_MNEM_PMULHRSW, - /* 1CC */ ZYDIS_MNEM_PMULHRW, - /* 1CD */ ZYDIS_MNEM_PMULHUW, - /* 1CE */ ZYDIS_MNEM_PMULHW, - /* 1CF */ ZYDIS_MNEM_PMULLD, - /* 1D0 */ ZYDIS_MNEM_PMULLW, - /* 1D1 */ ZYDIS_MNEM_PMULUDQ, - /* 1D2 */ ZYDIS_MNEM_POP, - /* 1D3 */ ZYDIS_MNEM_POPA, - /* 1D4 */ ZYDIS_MNEM_POPAD, - /* 1D5 */ ZYDIS_MNEM_POPCNT, - /* 1D6 */ ZYDIS_MNEM_POPFD, - /* 1D7 */ ZYDIS_MNEM_POPFQ, - /* 1D8 */ ZYDIS_MNEM_POPFW, - /* 1D9 */ ZYDIS_MNEM_POR, - /* 1DA */ ZYDIS_MNEM_PREFETCH, - /* 1DB */ ZYDIS_MNEM_PREFETCHNTA, - /* 1DC */ ZYDIS_MNEM_PREFETCHT0, - /* 1DD */ ZYDIS_MNEM_PREFETCHT1, - /* 1DE */ ZYDIS_MNEM_PREFETCHT2, - /* 1DF */ ZYDIS_MNEM_PSADBW, - /* 1E0 */ ZYDIS_MNEM_PSHUFB, - /* 1E1 */ ZYDIS_MNEM_PSHUFD, - /* 1E2 */ ZYDIS_MNEM_PSHUFHW, - /* 1E3 */ ZYDIS_MNEM_PSHUFLW, - /* 1E4 */ ZYDIS_MNEM_PSHUFW, - /* 1E5 */ ZYDIS_MNEM_PSIGNB, - /* 1E6 */ ZYDIS_MNEM_PSIGND, - /* 1E7 */ ZYDIS_MNEM_PSIGNW, - /* 1E8 */ ZYDIS_MNEM_PSLLD, - /* 1E9 */ ZYDIS_MNEM_PSLLDQ, - /* 1EA */ ZYDIS_MNEM_PSLLQ, - /* 1EB */ ZYDIS_MNEM_PSLLW, - /* 1EC */ ZYDIS_MNEM_PSRAD, - /* 1ED */ ZYDIS_MNEM_PSRAW, - /* 1EE */ ZYDIS_MNEM_PSRLD, - /* 1EF */ ZYDIS_MNEM_PSRLDQ, - /* 1F0 */ ZYDIS_MNEM_PSRLQ, - /* 1F1 */ ZYDIS_MNEM_PSRLW, - /* 1F2 */ ZYDIS_MNEM_PSUBB, - /* 1F3 */ ZYDIS_MNEM_PSUBD, - /* 1F4 */ ZYDIS_MNEM_PSUBQ, - /* 1F5 */ ZYDIS_MNEM_PSUBSB, - /* 1F6 */ ZYDIS_MNEM_PSUBSW, - /* 1F7 */ ZYDIS_MNEM_PSUBUSB, - /* 1F8 */ ZYDIS_MNEM_PSUBUSW, - /* 1F9 */ ZYDIS_MNEM_PSUBW, - /* 1FA */ ZYDIS_MNEM_PSWAPD, - /* 1FB */ ZYDIS_MNEM_PTEST, - /* 1FC */ ZYDIS_MNEM_PUNPCKHBW, - /* 1FD */ ZYDIS_MNEM_PUNPCKHDQ, - /* 1FE */ ZYDIS_MNEM_PUNPCKHQDQ, - /* 1FF */ ZYDIS_MNEM_PUNPCKHWD, - /* 200 */ ZYDIS_MNEM_PUNPCKLBW, - /* 201 */ ZYDIS_MNEM_PUNPCKLDQ, - /* 202 */ ZYDIS_MNEM_PUNPCKLQDQ, - /* 203 */ ZYDIS_MNEM_PUNPCKLWD, - /* 204 */ ZYDIS_MNEM_PUSH, - /* 205 */ ZYDIS_MNEM_PUSHA, - /* 206 */ ZYDIS_MNEM_PUSHAD, - /* 207 */ ZYDIS_MNEM_PUSHFD, - /* 208 */ ZYDIS_MNEM_PUSHFQ, - /* 209 */ ZYDIS_MNEM_PUSHFW, - /* 20A */ ZYDIS_MNEM_PXOR, - /* 20B */ ZYDIS_MNEM_RCL, - /* 20C */ ZYDIS_MNEM_RCPPS, - /* 20D */ ZYDIS_MNEM_RCPSS, - /* 20E */ ZYDIS_MNEM_RCR, - /* 20F */ ZYDIS_MNEM_RDMSR, - /* 210 */ ZYDIS_MNEM_RDPMC, - /* 211 */ ZYDIS_MNEM_RDRAND, - /* 212 */ ZYDIS_MNEM_RDTSC, - /* 213 */ ZYDIS_MNEM_RDTSCP, - /* 214 */ ZYDIS_MNEM_REP, - /* 215 */ ZYDIS_MNEM_REPNE, - /* 216 */ ZYDIS_MNEM_RET, - /* 217 */ ZYDIS_MNEM_RETF, - /* 218 */ ZYDIS_MNEM_ROL, - /* 219 */ ZYDIS_MNEM_ROR, - /* 21A */ ZYDIS_MNEM_ROUNDPD, - /* 21B */ ZYDIS_MNEM_ROUNDPS, - /* 21C */ ZYDIS_MNEM_ROUNDSD, - /* 21D */ ZYDIS_MNEM_ROUNDSS, - /* 21E */ ZYDIS_MNEM_RSM, - /* 21F */ ZYDIS_MNEM_RSQRTPS, - /* 220 */ ZYDIS_MNEM_RSQRTSS, - /* 221 */ ZYDIS_MNEM_SAHF, - /* 222 */ ZYDIS_MNEM_SALC, - /* 223 */ ZYDIS_MNEM_SAR, - /* 224 */ ZYDIS_MNEM_SBB, - /* 225 */ ZYDIS_MNEM_SCASB, - /* 226 */ ZYDIS_MNEM_SCASD, - /* 227 */ ZYDIS_MNEM_SCASQ, - /* 228 */ ZYDIS_MNEM_SCASW, - /* 229 */ ZYDIS_MNEM_SETA, - /* 22A */ ZYDIS_MNEM_SETAE, - /* 22B */ ZYDIS_MNEM_SETB, - /* 22C */ ZYDIS_MNEM_SETBE, - /* 22D */ ZYDIS_MNEM_SETE, - /* 22E */ ZYDIS_MNEM_SETG, - /* 22F */ ZYDIS_MNEM_SETGE, - /* 230 */ ZYDIS_MNEM_SETL, - /* 231 */ ZYDIS_MNEM_SETLE, - /* 232 */ ZYDIS_MNEM_SETNE, - /* 233 */ ZYDIS_MNEM_SETNO, - /* 234 */ ZYDIS_MNEM_SETNP, - /* 235 */ ZYDIS_MNEM_SETNS, - /* 236 */ ZYDIS_MNEM_SETO, - /* 237 */ ZYDIS_MNEM_SETP, - /* 238 */ ZYDIS_MNEM_SETS, - /* 239 */ ZYDIS_MNEM_SFENCE, - /* 23A */ ZYDIS_MNEM_SGDT, - /* 23B */ ZYDIS_MNEM_SHL, - /* 23C */ ZYDIS_MNEM_SHLD, - /* 23D */ ZYDIS_MNEM_SHR, - /* 23E */ ZYDIS_MNEM_SHRD, - /* 23F */ ZYDIS_MNEM_SHUFPD, - /* 240 */ ZYDIS_MNEM_SHUFPS, - /* 241 */ ZYDIS_MNEM_SIDT, - /* 242 */ ZYDIS_MNEM_SKINIT, - /* 243 */ ZYDIS_MNEM_SLDT, - /* 244 */ ZYDIS_MNEM_SMSW, - /* 245 */ ZYDIS_MNEM_SQRTPD, - /* 246 */ ZYDIS_MNEM_SQRTPS, - /* 247 */ ZYDIS_MNEM_SQRTSD, - /* 248 */ ZYDIS_MNEM_SQRTSS, - /* 249 */ ZYDIS_MNEM_STC, - /* 24A */ ZYDIS_MNEM_STD, - /* 24B */ ZYDIS_MNEM_STGI, - /* 24C */ ZYDIS_MNEM_STI, - /* 24D */ ZYDIS_MNEM_STMXCSR, - /* 24E */ ZYDIS_MNEM_STOSB, - /* 24F */ ZYDIS_MNEM_STOSD, - /* 250 */ ZYDIS_MNEM_STOSQ, - /* 251 */ ZYDIS_MNEM_STOSW, - /* 252 */ ZYDIS_MNEM_STR, - /* 253 */ ZYDIS_MNEM_SUB, - /* 254 */ ZYDIS_MNEM_SUBPD, - /* 255 */ ZYDIS_MNEM_SUBPS, - /* 256 */ ZYDIS_MNEM_SUBSD, - /* 257 */ ZYDIS_MNEM_SUBSS, - /* 258 */ ZYDIS_MNEM_SWAPGS, - /* 259 */ ZYDIS_MNEM_SYSCALL, - /* 25A */ ZYDIS_MNEM_SYSENTER, - /* 25B */ ZYDIS_MNEM_SYSEXIT, - /* 25C */ ZYDIS_MNEM_SYSRET, - /* 25D */ ZYDIS_MNEM_TEST, - /* 25E */ ZYDIS_MNEM_UCOMISD, - /* 25F */ ZYDIS_MNEM_UCOMISS, - /* 260 */ ZYDIS_MNEM_UD2, - /* 261 */ ZYDIS_MNEM_UNPCKHPD, - /* 262 */ ZYDIS_MNEM_UNPCKHPS, - /* 263 */ ZYDIS_MNEM_UNPCKLPD, - /* 264 */ ZYDIS_MNEM_UNPCKLPS, - /* 265 */ ZYDIS_MNEM_VADDPD, - /* 266 */ ZYDIS_MNEM_VADDPS, - /* 267 */ ZYDIS_MNEM_VADDSD, - /* 268 */ ZYDIS_MNEM_VADDSS, - /* 269 */ ZYDIS_MNEM_VADDSUBPD, - /* 26A */ ZYDIS_MNEM_VADDSUBPS, - /* 26B */ ZYDIS_MNEM_VAESDEC, - /* 26C */ ZYDIS_MNEM_VAESDECLAST, - /* 26D */ ZYDIS_MNEM_VAESENC, - /* 26E */ ZYDIS_MNEM_VAESENCLAST, - /* 26F */ ZYDIS_MNEM_VAESIMC, - /* 270 */ ZYDIS_MNEM_VAESKEYGENASSIST, - /* 271 */ ZYDIS_MNEM_VANDNPD, - /* 272 */ ZYDIS_MNEM_VANDNPS, - /* 273 */ ZYDIS_MNEM_VANDPD, - /* 274 */ ZYDIS_MNEM_VANDPS, - /* 275 */ ZYDIS_MNEM_VBLENDPD, - /* 276 */ ZYDIS_MNEM_VBLENDPS, - /* 277 */ ZYDIS_MNEM_VBLENDVPD, - /* 278 */ ZYDIS_MNEM_VBLENDVPS, - /* 279 */ ZYDIS_MNEM_VBROADCASTSD, - /* 27A */ ZYDIS_MNEM_VBROADCASTSS, - /* 27B */ ZYDIS_MNEM_VCMPPD, - /* 27C */ ZYDIS_MNEM_VCMPPS, - /* 27D */ ZYDIS_MNEM_VCMPSD, - /* 27E */ ZYDIS_MNEM_VCMPSS, - /* 27F */ ZYDIS_MNEM_VCOMISD, - /* 280 */ ZYDIS_MNEM_VCOMISS, - /* 281 */ ZYDIS_MNEM_VCVTDQ2PD, - /* 282 */ ZYDIS_MNEM_VCVTDQ2PS, - /* 283 */ ZYDIS_MNEM_VCVTPD2DQ, - /* 284 */ ZYDIS_MNEM_VCVTPD2PS, - /* 285 */ ZYDIS_MNEM_VCVTPS2DQ, - /* 286 */ ZYDIS_MNEM_VCVTPS2PD, - /* 287 */ ZYDIS_MNEM_VCVTSD2SI, - /* 288 */ ZYDIS_MNEM_VCVTSD2SS, - /* 289 */ ZYDIS_MNEM_VCVTSI2SD, - /* 28A */ ZYDIS_MNEM_VCVTSI2SS, - /* 28B */ ZYDIS_MNEM_VCVTSS2SD, - /* 28C */ ZYDIS_MNEM_VCVTSS2SI, - /* 28D */ ZYDIS_MNEM_VCVTTPD2DQ, - /* 28E */ ZYDIS_MNEM_VCVTTPS2DQ, - /* 28F */ ZYDIS_MNEM_VCVTTSD2SI, - /* 290 */ ZYDIS_MNEM_VCVTTSS2SI, - /* 291 */ ZYDIS_MNEM_VDIVPD, - /* 292 */ ZYDIS_MNEM_VDIVPS, - /* 293 */ ZYDIS_MNEM_VDIVSD, - /* 294 */ ZYDIS_MNEM_VDIVSS, - /* 295 */ ZYDIS_MNEM_VDPPD, - /* 296 */ ZYDIS_MNEM_VDPPS, - /* 297 */ ZYDIS_MNEM_VERR, - /* 298 */ ZYDIS_MNEM_VERW, - /* 299 */ ZYDIS_MNEM_VEXTRACTF128, - /* 29A */ ZYDIS_MNEM_VEXTRACTPS, - /* 29B */ ZYDIS_MNEM_VHADDPD, - /* 29C */ ZYDIS_MNEM_VHADDPS, - /* 29D */ ZYDIS_MNEM_VHSUBPD, - /* 29E */ ZYDIS_MNEM_VHSUBPS, - /* 29F */ ZYDIS_MNEM_VINSERTF128, - /* 2A0 */ ZYDIS_MNEM_VINSERTPS, - /* 2A1 */ ZYDIS_MNEM_VLDDQU, - /* 2A2 */ ZYDIS_MNEM_VMASKMOVDQU, - /* 2A3 */ ZYDIS_MNEM_VMASKMOVPD, - /* 2A4 */ ZYDIS_MNEM_VMASKMOVPS, - /* 2A5 */ ZYDIS_MNEM_VMAXPD, - /* 2A6 */ ZYDIS_MNEM_VMAXPS, - /* 2A7 */ ZYDIS_MNEM_VMAXSD, - /* 2A8 */ ZYDIS_MNEM_VMAXSS, - /* 2A9 */ ZYDIS_MNEM_VMCALL, - /* 2AA */ ZYDIS_MNEM_VMCLEAR, - /* 2AB */ ZYDIS_MNEM_VMINPD, - /* 2AC */ ZYDIS_MNEM_VMINPS, - /* 2AD */ ZYDIS_MNEM_VMINSD, - /* 2AE */ ZYDIS_MNEM_VMINSS, - /* 2AF */ ZYDIS_MNEM_VMLAUNCH, - /* 2B0 */ ZYDIS_MNEM_VMLOAD, - /* 2B1 */ ZYDIS_MNEM_VMMCALL, - /* 2B2 */ ZYDIS_MNEM_VMOVAPD, - /* 2B3 */ ZYDIS_MNEM_VMOVAPS, - /* 2B4 */ ZYDIS_MNEM_VMOVD, - /* 2B5 */ ZYDIS_MNEM_VMOVDDUP, - /* 2B6 */ ZYDIS_MNEM_VMOVDQA, - /* 2B7 */ ZYDIS_MNEM_VMOVDQU, - /* 2B8 */ ZYDIS_MNEM_VMOVHLPS, - /* 2B9 */ ZYDIS_MNEM_VMOVHPD, - /* 2BA */ ZYDIS_MNEM_VMOVHPS, - /* 2BB */ ZYDIS_MNEM_VMOVLHPS, - /* 2BC */ ZYDIS_MNEM_VMOVLPD, - /* 2BD */ ZYDIS_MNEM_VMOVLPS, - /* 2BE */ ZYDIS_MNEM_VMOVMSKPD, - /* 2BF */ ZYDIS_MNEM_VMOVMSKPS, - /* 2C0 */ ZYDIS_MNEM_VMOVNTDQ, - /* 2C1 */ ZYDIS_MNEM_VMOVNTDQA, - /* 2C2 */ ZYDIS_MNEM_VMOVNTPD, - /* 2C3 */ ZYDIS_MNEM_VMOVNTPS, - /* 2C4 */ ZYDIS_MNEM_VMOVQ, - /* 2C5 */ ZYDIS_MNEM_VMOVSD, - /* 2C6 */ ZYDIS_MNEM_VMOVSHDUP, - /* 2C7 */ ZYDIS_MNEM_VMOVSLDUP, - /* 2C8 */ ZYDIS_MNEM_VMOVSS, - /* 2C9 */ ZYDIS_MNEM_VMOVUPD, - /* 2CA */ ZYDIS_MNEM_VMOVUPS, - /* 2CB */ ZYDIS_MNEM_VMPSADBW, - /* 2CC */ ZYDIS_MNEM_VMPTRLD, - /* 2CD */ ZYDIS_MNEM_VMPTRST, - /* 2CE */ ZYDIS_MNEM_VMREAD, - /* 2CF */ ZYDIS_MNEM_VMRESUME, - /* 2D0 */ ZYDIS_MNEM_VMRUN, - /* 2D1 */ ZYDIS_MNEM_VMSAVE, - /* 2D2 */ ZYDIS_MNEM_VMULPD, - /* 2D3 */ ZYDIS_MNEM_VMULPS, - /* 2D4 */ ZYDIS_MNEM_VMULSD, - /* 2D5 */ ZYDIS_MNEM_VMULSS, - /* 2D6 */ ZYDIS_MNEM_VMWRITE, - /* 2D7 */ ZYDIS_MNEM_VMXOFF, - /* 2D8 */ ZYDIS_MNEM_VMXON, - /* 2D9 */ ZYDIS_MNEM_VORPD, - /* 2DA */ ZYDIS_MNEM_VORPS, - /* 2DB */ ZYDIS_MNEM_VPABSB, - /* 2DC */ ZYDIS_MNEM_VPABSD, - /* 2DD */ ZYDIS_MNEM_VPABSW, - /* 2DE */ ZYDIS_MNEM_VPACKSSDW, - /* 2DF */ ZYDIS_MNEM_VPACKSSWB, - /* 2E0 */ ZYDIS_MNEM_VPACKUSDW, - /* 2E1 */ ZYDIS_MNEM_VPACKUSWB, - /* 2E2 */ ZYDIS_MNEM_VPADDB, - /* 2E3 */ ZYDIS_MNEM_VPADDD, - /* 2E4 */ ZYDIS_MNEM_VPADDQ, - /* 2E5 */ ZYDIS_MNEM_VPADDSB, - /* 2E6 */ ZYDIS_MNEM_VPADDSW, - /* 2E7 */ ZYDIS_MNEM_VPADDUSB, - /* 2E8 */ ZYDIS_MNEM_VPADDUSW, - /* 2E9 */ ZYDIS_MNEM_VPADDW, - /* 2EA */ ZYDIS_MNEM_VPALIGNR, - /* 2EB */ ZYDIS_MNEM_VPAND, - /* 2EC */ ZYDIS_MNEM_VPANDN, - /* 2ED */ ZYDIS_MNEM_VPAVGB, - /* 2EE */ ZYDIS_MNEM_VPAVGW, - /* 2EF */ ZYDIS_MNEM_VPBLENDVB, - /* 2F0 */ ZYDIS_MNEM_VPBLENDW, - /* 2F1 */ ZYDIS_MNEM_VPCLMULQDQ, - /* 2F2 */ ZYDIS_MNEM_VPCMPEQB, - /* 2F3 */ ZYDIS_MNEM_VPCMPEQD, - /* 2F4 */ ZYDIS_MNEM_VPCMPEQQ, - /* 2F5 */ ZYDIS_MNEM_VPCMPEQW, - /* 2F6 */ ZYDIS_MNEM_VPCMPESTRI, - /* 2F7 */ ZYDIS_MNEM_VPCMPESTRM, - /* 2F8 */ ZYDIS_MNEM_VPCMPGTB, - /* 2F9 */ ZYDIS_MNEM_VPCMPGTD, - /* 2FA */ ZYDIS_MNEM_VPCMPGTQ, - /* 2FB */ ZYDIS_MNEM_VPCMPGTW, - /* 2FC */ ZYDIS_MNEM_VPCMPISTRI, - /* 2FD */ ZYDIS_MNEM_VPCMPISTRM, - /* 2FE */ ZYDIS_MNEM_VPERM2F128, - /* 2FF */ ZYDIS_MNEM_VPERMILPD, - /* 300 */ ZYDIS_MNEM_VPERMILPS, - /* 301 */ ZYDIS_MNEM_VPEXTRB, - /* 302 */ ZYDIS_MNEM_VPEXTRD, - /* 303 */ ZYDIS_MNEM_VPEXTRQ, - /* 304 */ ZYDIS_MNEM_VPEXTRW, - /* 305 */ ZYDIS_MNEM_VPHADDD, - /* 306 */ ZYDIS_MNEM_VPHADDSW, - /* 307 */ ZYDIS_MNEM_VPHADDW, - /* 308 */ ZYDIS_MNEM_VPHMINPOSUW, - /* 309 */ ZYDIS_MNEM_VPHSUBD, - /* 30A */ ZYDIS_MNEM_VPHSUBSW, - /* 30B */ ZYDIS_MNEM_VPHSUBW, - /* 30C */ ZYDIS_MNEM_VPINSRB, - /* 30D */ ZYDIS_MNEM_VPINSRD, - /* 30E */ ZYDIS_MNEM_VPINSRQ, - /* 30F */ ZYDIS_MNEM_VPINSRW, - /* 310 */ ZYDIS_MNEM_VPMADDUBSW, - /* 311 */ ZYDIS_MNEM_VPMADDWD, - /* 312 */ ZYDIS_MNEM_VPMAXSB, - /* 313 */ ZYDIS_MNEM_VPMAXSD, - /* 314 */ ZYDIS_MNEM_VPMAXSW, - /* 315 */ ZYDIS_MNEM_VPMAXUB, - /* 316 */ ZYDIS_MNEM_VPMAXUD, - /* 317 */ ZYDIS_MNEM_VPMAXUW, - /* 318 */ ZYDIS_MNEM_VPMINSB, - /* 319 */ ZYDIS_MNEM_VPMINSD, - /* 31A */ ZYDIS_MNEM_VPMINSW, - /* 31B */ ZYDIS_MNEM_VPMINUB, - /* 31C */ ZYDIS_MNEM_VPMINUD, - /* 31D */ ZYDIS_MNEM_VPMINUW, - /* 31E */ ZYDIS_MNEM_VPMOVMSKB, - /* 31F */ ZYDIS_MNEM_VPMOVSXBD, - /* 320 */ ZYDIS_MNEM_VPMOVSXBQ, - /* 321 */ ZYDIS_MNEM_VPMOVSXBW, - /* 322 */ ZYDIS_MNEM_VPMOVSXWD, - /* 323 */ ZYDIS_MNEM_VPMOVSXWQ, - /* 324 */ ZYDIS_MNEM_VPMOVZXBD, - /* 325 */ ZYDIS_MNEM_VPMOVZXBQ, - /* 326 */ ZYDIS_MNEM_VPMOVZXBW, - /* 327 */ ZYDIS_MNEM_VPMOVZXDQ, - /* 328 */ ZYDIS_MNEM_VPMOVZXWD, - /* 329 */ ZYDIS_MNEM_VPMOVZXWQ, - /* 32A */ ZYDIS_MNEM_VPMULDQ, - /* 32B */ ZYDIS_MNEM_VPMULHRSW, - /* 32C */ ZYDIS_MNEM_VPMULHUW, - /* 32D */ ZYDIS_MNEM_VPMULHW, - /* 32E */ ZYDIS_MNEM_VPMULLD, - /* 32F */ ZYDIS_MNEM_VPMULLW, - /* 330 */ ZYDIS_MNEM_VPOR, - /* 331 */ ZYDIS_MNEM_VPSADBW, - /* 332 */ ZYDIS_MNEM_VPSHUFB, - /* 333 */ ZYDIS_MNEM_VPSHUFD, - /* 334 */ ZYDIS_MNEM_VPSHUFHW, - /* 335 */ ZYDIS_MNEM_VPSHUFLW, - /* 336 */ ZYDIS_MNEM_VPSIGNB, - /* 337 */ ZYDIS_MNEM_VPSIGND, - /* 338 */ ZYDIS_MNEM_VPSIGNW, - /* 339 */ ZYDIS_MNEM_VPSLLD, - /* 33A */ ZYDIS_MNEM_VPSLLDQ, - /* 33B */ ZYDIS_MNEM_VPSLLQ, - /* 33C */ ZYDIS_MNEM_VPSLLW, - /* 33D */ ZYDIS_MNEM_VPSRAD, - /* 33E */ ZYDIS_MNEM_VPSRAW, - /* 33F */ ZYDIS_MNEM_VPSRLD, - /* 340 */ ZYDIS_MNEM_VPSRLDQ, - /* 341 */ ZYDIS_MNEM_VPSRLQ, - /* 342 */ ZYDIS_MNEM_VPSRLW, - /* 343 */ ZYDIS_MNEM_VPSUBB, - /* 344 */ ZYDIS_MNEM_VPSUBD, - /* 345 */ ZYDIS_MNEM_VPSUBQ, - /* 346 */ ZYDIS_MNEM_VPSUBSB, - /* 347 */ ZYDIS_MNEM_VPSUBSW, - /* 348 */ ZYDIS_MNEM_VPSUBUSB, - /* 349 */ ZYDIS_MNEM_VPSUBUSW, - /* 34A */ ZYDIS_MNEM_VPSUBW, - /* 34B */ ZYDIS_MNEM_VPTEST, - /* 34C */ ZYDIS_MNEM_VPUNPCKHBW, - /* 34D */ ZYDIS_MNEM_VPUNPCKHDQ, - /* 34E */ ZYDIS_MNEM_VPUNPCKHQDQ, - /* 34F */ ZYDIS_MNEM_VPUNPCKHWD, - /* 350 */ ZYDIS_MNEM_VPUNPCKLBW, - /* 351 */ ZYDIS_MNEM_VPUNPCKLDQ, - /* 352 */ ZYDIS_MNEM_VPUNPCKLQDQ, - /* 353 */ ZYDIS_MNEM_VPUNPCKLWD, - /* 354 */ ZYDIS_MNEM_VPXOR, - /* 355 */ ZYDIS_MNEM_VRCPPS, - /* 356 */ ZYDIS_MNEM_VRCPSS, - /* 357 */ ZYDIS_MNEM_VROUNDPD, - /* 358 */ ZYDIS_MNEM_VROUNDPS, - /* 359 */ ZYDIS_MNEM_VROUNDSD, - /* 35A */ ZYDIS_MNEM_VROUNDSS, - /* 35B */ ZYDIS_MNEM_VRSQRTPS, - /* 35C */ ZYDIS_MNEM_VRSQRTSS, - /* 35D */ ZYDIS_MNEM_VSHUFPD, - /* 35E */ ZYDIS_MNEM_VSHUFPS, - /* 35F */ ZYDIS_MNEM_VSQRTPD, - /* 360 */ ZYDIS_MNEM_VSQRTPS, - /* 361 */ ZYDIS_MNEM_VSQRTSD, - /* 362 */ ZYDIS_MNEM_VSQRTSS, - /* 363 */ ZYDIS_MNEM_VSTMXCSR, - /* 364 */ ZYDIS_MNEM_VSUBPD, - /* 365 */ ZYDIS_MNEM_VSUBPS, - /* 366 */ ZYDIS_MNEM_VSUBSD, - /* 367 */ ZYDIS_MNEM_VSUBSS, - /* 368 */ ZYDIS_MNEM_VTESTPD, - /* 369 */ ZYDIS_MNEM_VTESTPS, - /* 36A */ ZYDIS_MNEM_VUCOMISD, - /* 36B */ ZYDIS_MNEM_VUCOMISS, - /* 36C */ ZYDIS_MNEM_VUNPCKHPD, - /* 36D */ ZYDIS_MNEM_VUNPCKHPS, - /* 36E */ ZYDIS_MNEM_VUNPCKLPD, - /* 36F */ ZYDIS_MNEM_VUNPCKLPS, - /* 370 */ ZYDIS_MNEM_VXORPD, - /* 371 */ ZYDIS_MNEM_VXORPS, - /* 372 */ ZYDIS_MNEM_VZEROALL, - /* 373 */ ZYDIS_MNEM_VZEROUPPER, - /* 374 */ ZYDIS_MNEM_WAIT, - /* 375 */ ZYDIS_MNEM_WBINVD, - /* 376 */ ZYDIS_MNEM_WRMSR, - /* 377 */ ZYDIS_MNEM_XADD, - /* 378 */ ZYDIS_MNEM_XCHG, - /* 379 */ ZYDIS_MNEM_XCRYPTCBC, - /* 37A */ ZYDIS_MNEM_XCRYPTCFB, - /* 37B */ ZYDIS_MNEM_XCRYPTCTR, - /* 37C */ ZYDIS_MNEM_XCRYPTECB, - /* 37D */ ZYDIS_MNEM_XCRYPTOFB, - /* 37E */ ZYDIS_MNEM_XGETBV, - /* 37F */ ZYDIS_MNEM_XLATB, - /* 380 */ ZYDIS_MNEM_XOR, - /* 381 */ ZYDIS_MNEM_XORPD, - /* 382 */ ZYDIS_MNEM_XORPS, - /* 383 */ ZYDIS_MNEM_XRSTOR, - /* 384 */ ZYDIS_MNEM_XSAVE, - /* 385 */ ZYDIS_MNEM_XSETBV, - /* 386 */ ZYDIS_MNEM_XSHA1, - /* 387 */ ZYDIS_MNEM_XSHA256, - /* 388 */ ZYDIS_MNEM_XSTORE, - - ZYDIS_MNEM_FORCE_WORD = 0x7FFF -} ZydisInstructionMnemonic; - -/* TODO: Port instruction definition types */ - -#ifdef __cplusplus -} -#endif - -#endif // _ZYDIS_OPCODETABLE_H_ \ No newline at end of file diff --git a/Bindings/C/ZydisSymbolResolver.cpp b/Bindings/C/ZydisSymbolResolver.cpp deleted file mode 100644 index 6d8277a..0000000 --- a/Bindings/C/ZydisSymbolResolver.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisSymbolResolver.h" -#include - -/* CustomSymbolResolver ========================================================================= */ - -inline Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( - ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( - const ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( - Zydis::BaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( - const Zydis::BaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline const Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - const ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline ZydisInstructionInfo* ZydisInstructionInfo_CPtr( - Zydis::InstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisInstructionInfo* ZydisInstructionInfo_CPtr( - const Zydis::InstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -/* Internal helper class ----------------------------------------------------------------------- */ - -namespace -{ - -class ZydisCustomSymbolResolver : public Zydis::BaseSymbolResolver -{ - ZydisResolveSymbol_t m_resolverCb; - void* m_userData; -public: - /** - * @brief Constructor. - * @param resolverCb The resolver callback. - * @param userData User provided pointer to arbitrary data passed to resolve callback. - */ - ZydisCustomSymbolResolver(ZydisResolveSymbol_t resolverCb, void *userData); - /** - * @brief Destructor. - */ - ~ZydisCustomSymbolResolver() override = default; -public: - /** - * @brief Resolves a symbol. - * @param info The instruction info. - * @param address The address. - * @param offset Reference to an unsigned 64 bit integer that receives an offset - * relative to the base address of the symbol. - * @return The name of the symbol, if the symbol was found, @c NULL if not. - */ - const char* resolveSymbol(const Zydis::InstructionInfo &info, uint64_t address, - uint64_t &offset) override; -}; - -ZydisCustomSymbolResolver::ZydisCustomSymbolResolver(ZydisResolveSymbol_t resolverCb, - void *userData) - : m_resolverCb(resolverCb) - , m_userData(userData) -{ - -} - -const char* ZydisCustomSymbolResolver::resolveSymbol( - const Zydis::InstructionInfo &info, uint64_t address, uint64_t &offset) -{ - return m_resolverCb(ZydisInstructionInfo_CPtr(&info), address, &offset, m_userData); -} - -} // anon namespace - -/* C API implementation ------------------------------------------------------------------------ */ - -ZydisBaseSymbolResolverContext* ZydisCustomSymbolResolver_Create( - ZydisResolveSymbol_t resolverCb, - void *userData) -{ - return ZydisBaseSymbolResolver_CPtr(new ZydisCustomSymbolResolver(resolverCb, userData)); -} - -/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/ZydisSymbolResolver.h b/Bindings/C/ZydisSymbolResolver.h deleted file mode 100644 index 371a121..0000000 --- a/Bindings/C/ZydisSymbolResolver.h +++ /dev/null @@ -1,126 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_SYMBOLRESOLVER_H_ -#define _ZYDIS_SYMBOLRESOLVER_H_ - -#include "ZydisTypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* BaseSymbolResolver ======================================================================== */ - -typedef struct _ZydisBaseSymbolResolverContext { int a; } ZydisBaseSymbolResolverContext; - -/** - * @brief Releases a symbol resolver. - * @param ctx The context of the symbol resolver to free. - * The context may no longer used after it was released. - */ -void ZydisBaseSymbolResolver_Release(ZydisBaseSymbolResolverContext *ctx); - -/** - * @brief Resolves a symbol. - * @param ctx The symbol resolver context. - * @param info The instruction info. - * @param address The address. - * @param offset Pointer to an unsigned 64 bit integer that receives an offset relative to - * the base address of the symbol. - * @return The name of the symbol if the symbol was found, else @c NULL. - */ -const char* ZydisBaseSymbolResolver_ResolveSymbol(ZydisBaseSymbolResolverContext *ctx, - const ZydisInstructionInfo *info, uint64_t address, uint64_t *offset); - -/* ExactSymbolResolver ======================================================================= */ - -/** - * @brief Creates an exact symbol resolver. - * @return @c NULL if it fails, else a symbol resolver context. - * @see BaseSymbolResolver_Release - * An exact resolver is a simple symbol resolver that only matches exact addresses. - */ -// TODO: verify return value -ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_Create(void); - -/** - * @brief Query if the given address is a known symbol. - * @param ctx The exact symbol resolver context. - * @param address The address. - * @return @c true if the address is known, @c false if not. - */ -bool ZydisExactSymbolResolver_ContainsSymbol(ZydisBaseSymbolResolverContext *ctx, uint64_t address); - -/** - * @brief Adds or changes a symbol. - * @param ctx The exact symbol resolver context. - * @param address The address. - * @param name The symbol name. - */ -void ZydisExactSymbolResolverContext_SetSymbol(ZydisBaseSymbolResolverContext *ctx, - uint64_t address, const char* name); - -/** - * @brief Removes the symbol described by address. - * @param ctx The exact symbol resolver context. - * @param address The address. - * This will invalidate all char-pointers to the affected symbol name. - */ -void ZydisExactSymbolResolverContext_RemoveSymbol(ZydisBaseSymbolResolverContext *ctx, - uint64_t address); - -/** - * @brief Clears the symbol tree. - * @param ctx The exact symbol resolver context. - */ -void ExactSymbolResolverContext_Clear(ZydisBaseSymbolResolverContext *ctx); - -/* CustomSymbolResolver ====================================================================== */ - -typedef const char* (*ZydisResolveSymbol_t)(const ZydisInstructionInfo *info, uint64_t address, - uint64_t *offset, void *userData); - -/** - * @brief Creates a custom symbol resolver. - * @param resolverCb The resolver callback consulted when symbols need to be resolved. - * @param userData A pointer to arbitrary data passed to the resolver callback. - * May also be @c NULL. - * @return @c NULL if it fails, else a symbol resolver context. - */ -ZydisBaseSymbolResolverContext* CustomSymbolResolver_Create(ZydisResolveSymbol_t resolverCb, - void *userData); - -#ifdef __cplusplus -} -#endif - -#endif /* _ZYDIS_SYMBOLRESOLVER_H_ */ \ No newline at end of file diff --git a/Bindings/C/ZydisUtils.cpp b/Bindings/C/ZydisUtils.cpp deleted file mode 100644 index 70e40f8..0000000 --- a/Bindings/C/ZydisUtils.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisUtils.h" -#include "ZydisUtils.hpp" - -static_assert( - sizeof(ZydisInstructionInfo) == sizeof(Zydis::InstructionInfo), - "struct size mismatch"); -static_assert( - sizeof(ZydisOperandInfo) == sizeof(Zydis::OperandInfo), - "struct size mismatch"); - -uint64_t ZydisCalcAbsoluteTarget(const ZydisInstructionInfo *info, const ZydisOperandInfo *operand) -{ - return Zydis::CalcAbsoluteTarget( - *reinterpret_cast(info), - *reinterpret_cast(operand)); -} \ No newline at end of file diff --git a/Bindings/C/ZydisUtils.h b/Bindings/C/ZydisUtils.h deleted file mode 100644 index 8e29541..0000000 --- a/Bindings/C/ZydisUtils.h +++ /dev/null @@ -1,54 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_UTILS_H_ -#define _ZYDIS_UTILS_H_ - -#include -#include "ZydisTypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * @brief Calculates the absolute target address of a relative instruction operand. - * @param info The instruction info. - * @param operand The operand. - * @return The absolute target address. - */ -uint64_t ZydisCalcAbsoluteTarget(const ZydisInstructionInfo* info, const ZydisOperandInfo* operand); - -#ifdef __cplusplus -} -#endif - -#endif /* _ZYDIS_UTILS_H_ */ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index fdccb77..8496c59 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,54 +44,40 @@ endif () # Library set(headers - "ZyDis/ZydisSymbolResolver.hpp" - "ZyDis/ZydisOpcodeTable.hpp" - "ZyDis/ZydisInstructionDecoder.hpp" - "ZyDis/ZydisInstructionFormatter.hpp" - "ZyDis/ZydisTypes.hpp" - "ZyDis/ZydisUtils.hpp" - "ZyDis/Zydis.hpp") + "Zydis/Zydis.hpp" + "Zydis/ZydisInstructionDecoder.hpp" + "Zydis/ZydisInstructionFormatter.hpp" + "Zydis/ZydisOpcodeTable.hpp" + "Zydis/ZydisSymbolResolver.hpp" + "Zydis/ZydisTypes.hpp" + "Zydis/ZydisUtils.hpp") set(sources - "ZyDis/ZydisInstructionDecoder.cpp" - "ZyDis/ZydisInstructionFormatter.cpp" - "ZyDis/ZydisOpcodeTable.cpp" - "ZyDis/ZydisSymbolResolver.cpp" - "ZyDis/ZydisUtils.cpp") + "Zydis/ZydisInstructionDecoder.cpp" + "Zydis/ZydisInstructionFormatter.cpp" + "Zydis/ZydisOpcodeTable.cpp" + "Zydis/ZydisSymbolResolver.cpp" + "Zydis/ZydisUtils.cpp") + +if (BUILD_C_BINDINGS) + set(headers ${headers} + "Zydis/ZydisAPI.h") + set(sources ${sources} + "Zydis/ZydisAPI.cpp") +endif () add_library("Zydis" ${headers} ${sources}) generate_export_header( "Zydis" - BASE_NAME "Zydis" + BASE_NAME "ZYDIS" EXPORT_FILE_NAME "ZydisExportConfig.h") include_directories(${PROJECT_BINARY_DIR}) -# C bindings -if (BUILD_C_BINDINGS) - set(c_headers - "Bindings/C/Zydis.h" - "Bindings/C/ZydisInstructionDecoder.h" - "Bindings/C/ZydisTypes.h" - "Bindings/C/ZydisInstructionFormatter.h" - "Bindings/C/ZydisUtils.h" - "Bindings/C/ZydisSymbolResolver.h" - "Bindings/C/ZydisOpcodeTable.h") - set(c_sources - "Bindings/C/ZydisSymbolResolver.cpp" - "Bindings/C/ZydisOpcodeTable.cpp" - "Bindings/C/ZydisInstructionFormatter.cpp" - "Bindings/C/ZydisInstructionDecoder.cpp" - "Bindings/C/ZydisUtils.cpp") - add_library("ZydisC" ${c_headers} ${c_sources}) - include_directories("Zydis") - target_link_libraries("ZydisC" "Zydis") -endif () - # Examples if (BUILD_EXAMPLES) - include_directories("Bindings/C") + include_directories("Zydis") add_executable("C_SimpleDemo" "Examples/C/SimpleDemo/SimpleDemo.c") - target_link_libraries("C_SimpleDemo" "ZydisC") + target_link_libraries("C_SimpleDemo" "Zydis") endif () set(CONFIGURED_ONCE TRUE CACHE INTERNAL "CMake has configured at least once.") diff --git a/Examples/C/SimpleDemo/SimpleDemo.c b/Examples/C/SimpleDemo/SimpleDemo.c index 94949b9..700e260 100644 --- a/Examples/C/SimpleDemo/SimpleDemo.c +++ b/Examples/C/SimpleDemo/SimpleDemo.c @@ -1,8 +1,58 @@ -#include +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include #include #include +void PrintZydisError() +{ + puts("Zydis error: "); + switch (ZydisGetLastError()) + { + case ZYDIS_ERROR_SUCCESS: + puts("success"); + break; + case ZYDIS_ERROR_UNKNOWN: + puts("unknown error"); + break; + case ZYDIS_ERROR_NOT_ENOUGH_MEMORY: + puts("not enough memory"); + break; + case ZYDIS_ERROR_INVALID_PARAMETER: + puts("invalid parameter"); + break; + } +} + int main() { uint8_t data32[] = @@ -34,22 +84,42 @@ int main() ZydisInstructionInfo info; ZydisInstructionDecoderContext* decoder = NULL; - ZydisBaseInstructionFormatterContext* formatter = NULL; - ZydisBaseInputContext* input32 = NULL; - ZydisBaseInputContext* input64 = NULL; + ZydisInstructionFormatterContext* formatter = NULL; + ZydisInputContext* input32 = NULL; + ZydisInputContext* input64 = NULL; - decoder = ZydisInstructionDecoder_Create(); - formatter = ZydisIntelInstructionFormatter_Create(); + // Create decoder and formatter instances + decoder = ZydisCreateInstructionDecoder(); + if (!decoder) + { + goto FreeZydisDecoder; + } + formatter = ZydisCreateIntelInstructionFormatter(); + if (!formatter) + { + goto FreeZydisFormatter; + } - input32 = ZydisMemoryInput_Create(&data32[0], sizeof(data32)); - input64 = ZydisMemoryInput_Create(&data64[0], sizeof(data64)); + // Create memory data sources + input32 = ZydisCreateMemoryInput(&data32[0], sizeof(data32)); + if (!input32) + { + goto FreeZydisInput32; + } + input64 = ZydisCreateMemoryInput(&data64[0], sizeof(data64)); + if (!input64) + { + goto FreeZydisInput64; + } - ZydisInstructionDecoder_SetDisassemblerMode(decoder, DM_M32BIT); - ZydisInstructionDecoder_SetDataSource(decoder, input32); - ZydisInstructionDecoder_SetInstructionPointer(decoder, 0x77091852); + // Set decoder properties + ZydisSetDisassemblerMode(decoder, ZYDIS_DM_M32BIT); + ZydisSetDataSource(decoder, input32); + ZydisSetInstructionPointer(decoder, 0x77091852); + // Decode and format all instructions puts("32 bit test ...\n\n"); - while (ZydisInstructionDecoder_DecodeInstruction(decoder, &info)) + while (ZydisDecodeInstruction(decoder, &info)) { printf("%08X ", (uint32_t)(info.instrAddress & 0xFFFFFFFF)); if (info.flags & ZYDIS_IF_ERROR_MASK) @@ -58,17 +128,28 @@ int main() } else { - printf("%s\n", ZydisBaseInstructionFormatter_FormatInstruction(formatter, &info)); + const char* instructionText; + if (!ZydisFormatInstruction(formatter, &info, &instructionText)) + { + goto FreeZydisInput64; + } + printf("%s\n", instructionText); } } + // Check if an error occured in ZydisDecodeInstruction or the end of the input was reached. + if (ZydisGetLastError() != ZYDIS_ERROR_SUCCESS) + { + goto FreeZydisInput64; + } puts("\n"); - ZydisInstructionDecoder_SetDisassemblerMode(decoder, DM_M64BIT); - ZydisInstructionDecoder_SetDataSource(decoder, input64); - ZydisInstructionDecoder_SetInstructionPointer(decoder, 0x00007FFA39A81930ull); + // Set decoder properties + ZydisSetDisassemblerMode(decoder, ZYDIS_DM_M64BIT); + ZydisSetDataSource(decoder, input64); + ZydisSetInstructionPointer(decoder, 0x00007FFA39A81930ull); puts("64 bit test ...\n\n"); - while (ZydisInstructionDecoder_DecodeInstruction(decoder, &info)) + while (ZydisDecodeInstruction(decoder, &info)) { printf("%016llX ", info.instrAddress); if (info.flags & ZYDIS_IF_ERROR_MASK) @@ -77,10 +158,38 @@ int main() } else { - printf("%s\n", ZydisBaseInstructionFormatter_FormatInstruction(formatter, &info)); + const char* instructionText; + if (!ZydisFormatInstruction(formatter, &info, &instructionText)) + { + goto FreeZydisInput64; + } + printf("%s\n", instructionText); } + } + // Check if an error occured in ZydisDecodeInstruction or the end of the input was reached. + if (ZydisGetLastError() != ZYDIS_ERROR_SUCCESS) + { + goto FreeZydisInput64; + } + + // Cleanup code +FreeZydisInput64: + ZydisFreeInput(input64); +FreeZydisInput32: + ZydisFreeInput(input32); +FreeZydisFormatter: + ZydisFreeInstructionFormatter(formatter); +FreeZydisDecoder: + ZydisFreeInstructionDecoder(decoder); + + if (ZydisGetLastError() != ZYDIS_ERROR_SUCCESS) + { + PrintZydisError(); + getchar(); + return 1; } getchar(); + return 0; } \ No newline at end of file diff --git a/Zydis/ZydisAPI.cpp b/Zydis/ZydisAPI.cpp new file mode 100644 index 0000000..4771676 --- /dev/null +++ b/Zydis/ZydisAPI.cpp @@ -0,0 +1,421 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include "ZydisAPI.h" +#include "ZydisInstructionDecoder.hpp" +#include "ZydisInstructionFormatter.hpp" + +static_assert( + sizeof(ZydisOperandInfo) == sizeof(Zydis::OperandInfo), + "struct size mismatch"); + +static_assert( + sizeof(ZydisInstructionInfo) == sizeof(Zydis::InstructionInfo), + "struct size mismatch"); + +/* Error Handling =============================================================================== */ + +static uint32_t g_zydisLastError = ZYDIS_ERROR_SUCCESS; + +uint32_t ZydisGetLastError() +{ + return g_zydisLastError; +} + +void ZydisSetLastError(uint32_t errorCode) +{ + g_zydisLastError = errorCode; +} + +/* Conversion Helper ============================================================================ */ + +template +ContextT* ZydisCreateContextInplace(uint8_t contextType, InstanceCtorArgsT... args) +{ + ContextT* context = new (std::nothrow) ContextT; + if (!context) + { + ZydisSetLastError(ZYDIS_ERROR_NOT_ENOUGH_MEMORY); + return nullptr; + } + context->type = contextType; + context->object = new (std::nothrow) InstanceT(args...); + if (!context->object) + { + delete context; + ZydisSetLastError(ZYDIS_ERROR_NOT_ENOUGH_MEMORY); + return nullptr; + } + return context; +} + +template +ContextT* ZydisCreateContext(uint8_t contextType, InstanceT* instance) +{ + ContextT* context = new (std::nothrow) ContextT; + if (!context) + { + ZydisSetLastError(ZYDIS_ERROR_NOT_ENOUGH_MEMORY); + return nullptr; + } + context->type = contextType; + context->object = instance; + return context; +} + +template +bool ZydisFreeContext(const ContextT* context, uint8_t expectedType) +{ + InstanceT* instance = ZydisCast(context, expectedType); + if (!instance) + { + return false; + } + delete instance; + delete context; + return true; +} + +template +InstanceT* ZydisCast(const ContextT* input, uint8_t expectedType) +{ + if (!input || !input->object || ((input->type & expectedType) != expectedType)) + { + ZydisSetLastError(ZYDIS_ERROR_INVALID_PARAMETER); + return nullptr; + } + return reinterpret_cast(input->object); +} + +/* Input ======================================================================================== */ + +ZydisInputContext* ZydisCreateCustomInput(/* TODO */) +{ + return nullptr; +} + +ZydisInputContext* ZydisCreateMemoryInput(const void* buffer, size_t bufferLen) +{ + return ZydisCreateContextInplace( + ZYDIS_CONTEXT_INPUT | ZYDIS_CONTEXT_INPUT_MEMORY, buffer, bufferLen); +} + +bool ZydisIsEndOfInput(const ZydisInputContext* input, bool* isEndOfInput) +{ + Zydis::BaseInput* instance = + ZydisCast(input, ZYDIS_CONTEXT_INPUT); + if (!instance) + { + return false; + } + *isEndOfInput = instance->isEndOfInput(); + return true; +} + +bool ZydisGetInputPosition(const ZydisInputContext* input, uint64_t* position) +{ + Zydis::BaseInput* instance = + ZydisCast(input, ZYDIS_CONTEXT_INPUT); + if (!instance) + { + return false; + } + *position = instance->getPosition(); + return true; +} + +bool ZydisSetInputPosition(const ZydisInputContext* input, uint64_t position) +{ + Zydis::BaseInput* instance = + ZydisCast(input, ZYDIS_CONTEXT_INPUT); + if (!instance) + { + return false; + } + ZydisSetLastError(ZYDIS_ERROR_SUCCESS); + return instance->setPosition(position); +} + +bool ZydisFreeInput(const ZydisInputContext* input) +{ + return ZydisFreeContext(input, ZYDIS_CONTEXT_INPUT); +} + +/* InstructionDecoder =========================================================================== */ + +ZydisInstructionDecoderContext* ZydisCreateInstructionDecoder() +{ + return ZydisCreateContextInplace( + ZYDIS_CONTEXT_INSTRUCTIONDECODER); +} + +bool ZydisDecodeInstruction(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionInfo* info) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + ZydisSetLastError(ZYDIS_ERROR_SUCCESS); + return instance->decodeInstruction(*reinterpret_cast(info)); +} + +bool ZydisGetDataSource(const ZydisInstructionDecoderContext* decoder, + ZydisInputContext** input) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + *input = ZydisCreateContext(ZYDIS_CONTEXT_INPUT, instance->getDataSource()); + if (!input) + { + return false; + } + return true; +} + +bool ZydisSetDataSource(const ZydisInstructionDecoderContext* decoder, + ZydisInputContext* input) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + Zydis::BaseInput* object = + ZydisCast(input, ZYDIS_CONTEXT_INPUT); + if (!object) + { + return false; + } + instance->setDataSource(object); + return true; +} + +bool ZydisGetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, + ZydisDisassemblerMode* disassemblerMode) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + *disassemblerMode = static_cast(instance->getDisassemblerMode()); + return true; +} + +bool ZydisSetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, + ZydisDisassemblerMode disassemblerMode) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + instance->setDisassemblerMode(static_cast(disassemblerMode)); + return true; +} + +bool ZydisGetPreferredVendor(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionSetVendor* preferredVendor) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + *preferredVendor = static_cast(instance->getPreferredVendor()); + return true; +} + +bool ZydisSetPreferredVendor(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionSetVendor preferredVendor) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + instance->setPreferredVendor(static_cast(preferredVendor)); + return true; +} + + bool ZydisGetInstructionPointer(const ZydisInstructionDecoderContext* decoder, + uint64_t* instructionPointer) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + *instructionPointer = instance->getInstructionPointer(); + return true; +} + +bool ZydisSetInstructionPointer(const ZydisInstructionDecoderContext* decoder, + uint64_t instructionPointer) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + instance->setInstructionPointer(instructionPointer); + return true; +} + +bool ZydisFreeInstructionDecoder(const ZydisInstructionDecoderContext* decoder) +{ + return ZydisFreeContext< + ZydisInstructionDecoderContext, Zydis::InstructionDecoder>( + decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); +} + +/* InstructionFormatter ========================================================================= */ + +ZydisInstructionFormatterContext* ZydisCreateCustomInstructionFormatter(/* TODO */) +{ + return nullptr; +} + +ZydisInstructionFormatterContext* ZydisCreateIntelInstructionFormatter() +{ + return ZydisCreateContextInplace( + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER | ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL); +} + +bool ZydisFormatInstruction(const ZydisInstructionFormatterContext* formatter, + const ZydisInstructionInfo* info, const char** instructionText) +{ + Zydis::IntelInstructionFormatter* instance = + ZydisCast(formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + if (!instance) + { + return false; + } + *instructionText = + instance->formatInstruction(*reinterpret_cast(info)); + return true; +} + +bool ZydisGetSymbolResolver(const ZydisInstructionFormatterContext* formatter, + ZydisSymbolResolverContext** resolver) +{ + Zydis::IntelInstructionFormatter* instance = + ZydisCast(formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + if (!instance) + { + return false; + } + *resolver = ZydisCreateContext(ZYDIS_CONTEXT_SYMBOLRESOLVER, instance->getSymbolResolver()); + if (!resolver) + { + return false; + } + return true; +} + +bool ZydisSetSymbolResolver(const ZydisInstructionFormatterContext* formatter, + ZydisSymbolResolverContext* resolver) +{ + Zydis::IntelInstructionFormatter* instance = + ZydisCast(formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + if (!instance) + { + return false; + } + Zydis::BaseSymbolResolver* object = + ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER); + if (!object) + { + return false; + } + instance->setSymbolResolver(object); + return true; +} + +bool ZydisFreeInstructionFormatter(const ZydisInstructionFormatterContext* formatter) +{ + return ZydisFreeContext< + ZydisInstructionFormatterContext, Zydis::BaseInstructionFormatter>( + formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); +} + +/* SymbolResolver =============================================================================== */ + +ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateCustomSymbolResolver(/*TODO*/); + +ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateExactSymbolResolver(); + +ZYDIS_EXPORT bool ZydisResolveSymbol(const ZydisSymbolResolverContext* resolver, + const ZydisInstructionInfo* info, uint64_t address, const char** symbol, uint64_t* offset); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverContainsSymbol( + const ZydisSymbolResolverContext* resolver, uint64_t address, bool* containsSymbol); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverSetSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address, const char* symbol); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverRemoveSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverClear(const ZydisSymbolResolverContext* resolver); + +ZYDIS_EXPORT bool ZydisFreeSymbolResolver(const ZydisSymbolResolverContext* resolver); + +/* ============================================================================================== */ \ No newline at end of file diff --git a/Bindings/C/ZydisTypes.h b/Zydis/ZydisAPI.h similarity index 74% rename from Bindings/C/ZydisTypes.h rename to Zydis/ZydisAPI.h index 5c9527c..107ba5f 100644 --- a/Bindings/C/ZydisTypes.h +++ b/Zydis/ZydisAPI.h @@ -28,18 +28,22 @@ ***************************************************************************************************/ -#ifndef _ZYDIS_TYPES_H_ -#define _ZYDIS_TYPES_H_ +#ifndef _ZYDIS_API_H_ +#define _ZYDIS_API_H_ +#define Zydis_EXPORTS + +#include #include -#include -#include "ZydisOpcodeTable.h" +#include "ZydisExportConfig.h" #ifdef __cplusplus extern "C" { #endif +/* Types ======================================================================================== */ + /** * @brief Values that represent additional flags of a decoded instruction. */ @@ -539,8 +543,168 @@ typedef struct _ZydisInstructionInfo uint64_t instrPointer; } ZydisInstructionInfo; +/* Context Types ================================================================================ */ + +typedef enum _ZydisContextType +{ + ZYDIS_CONTEXT_INPUT = 0x0080, + ZYDIS_CONTEXT_INPUT_CUSTOM = 0x0001, + ZYDIS_CONTEXT_INPUT_MEMORY = 0x0002, + ZYDIS_CONTEXT_INSTRUCTIONDECODER = 0x0040, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER = 0x0020, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_CUSTOM = 0x0001, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL = 0x0002, + ZYDIS_CONTEXT_SYMBOLRESOLVER = 0x0010, + ZYDIS_CONTEXT_SYMBOLRESOLVER_CUSTOM = 0x0001, + ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT = 0x0002 +} ZydisContextType; + +typedef struct _ZydisInputContext +{ + uint8_t type; + void* object; +} ZydisInputContext; + +typedef struct _ZydisInstructionDecoderContext +{ + uint8_t type; + void* object; +} ZydisInstructionDecoderContext; + +typedef struct _ZydisInstructionFormatterContext +{ + uint8_t type; + void* object; +} ZydisInstructionFormatterContext; + +typedef struct _ZydisSymbolResolverContext +{ + uint8_t type; + void* object; +} ZydisSymbolResolverContext; + +/* Error Handling =============================================================================== */ + +typedef enum _ZydisErrorCode /* : uint8_t */ +{ + ZYDIS_ERROR_SUCCESS, + ZYDIS_ERROR_UNKNOWN, + ZYDIS_ERROR_NOT_ENOUGH_MEMORY, + ZYDIS_ERROR_INVALID_PARAMETER +} ZydisErrorCode; + +ZYDIS_EXPORT uint32_t ZydisGetLastError(); + +/* Input ======================================================================================== */ + +ZYDIS_EXPORT ZydisInputContext* ZydisCreateCustomInput(/* TODO */); + +ZYDIS_EXPORT ZydisInputContext* ZydisCreateMemoryInput(const void* buffer, size_t bufferLen); + +ZYDIS_EXPORT bool ZydisIsEndOfInput(const ZydisInputContext* input, bool* isEndOfInput); + +ZYDIS_EXPORT bool ZydisGetInputPosition(const ZydisInputContext* input, uint64_t* position); + +ZYDIS_EXPORT bool ZydisSetInputPosition(const ZydisInputContext* input, uint64_t position); + +ZYDIS_EXPORT bool ZydisFreeInput(const ZydisInputContext* input); + +/* InstructionDecoder =========================================================================== */ + +/** + * @brief Values that represent a disassembler mode. + */ +typedef enum _ZydisDisassemblerMode /* : uint8_t */ +{ + ZYDIS_DM_M16BIT, + ZYDIS_DM_M32BIT, + ZYDIS_DM_M64BIT +} ZydisDisassemblerMode; + +/** + * @brief Values that represent an instruction-set vendor. + */ +typedef enum _ZydisInstructionSetVendor /* : uint8_t */ +{ + ZYDIS_ISV_ANY, + ZYDIS_ISV_INTEL, + ZYDIS_ISV_AMD +} ZydisInstructionSetVendor; + +ZYDIS_EXPORT ZydisInstructionDecoderContext* ZydisCreateInstructionDecoder(); + +ZYDIS_EXPORT bool ZydisDecodeInstruction(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionInfo* info); + +ZYDIS_EXPORT bool ZydisGetDataSource(const ZydisInstructionDecoderContext* decoder, + ZydisInputContext** input); + +ZYDIS_EXPORT bool ZydisSetDataSource(const ZydisInstructionDecoderContext* decoder, + ZydisInputContext* input); + +ZYDIS_EXPORT bool ZydisGetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, + ZydisDisassemblerMode* disassemblerMode); + +ZYDIS_EXPORT bool ZydisSetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, + ZydisDisassemblerMode disassemblerMode); + +ZYDIS_EXPORT bool ZydisGetPreferredVendor(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionSetVendor* preferredVendor); + +ZYDIS_EXPORT bool ZydisSetPreferredVendor(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionSetVendor preferredVendor); + + ZYDIS_EXPORT bool ZydisGetInstructionPointer(const ZydisInstructionDecoderContext* decoder, + uint64_t* instructionPointer); + +ZYDIS_EXPORT bool ZydisSetInstructionPointer(const ZydisInstructionDecoderContext* decoder, + uint64_t instructionPointer); + +ZYDIS_EXPORT bool ZydisFreeInstructionDecoder(const ZydisInstructionDecoderContext* decoder); + +/* InstructionFormatter ========================================================================= */ + +ZYDIS_EXPORT ZydisInstructionFormatterContext* ZydisCreateCustomInstructionFormatter(/*TODO*/); + +ZYDIS_EXPORT ZydisInstructionFormatterContext* ZydisCreateIntelInstructionFormatter(); + +ZYDIS_EXPORT bool ZydisFormatInstruction(const ZydisInstructionFormatterContext* formatter, + const ZydisInstructionInfo* info, const char** instructionText); + +ZYDIS_EXPORT bool ZydisGetSymbolResolver(const ZydisInstructionFormatterContext* formatter, + ZydisSymbolResolverContext** resolver); + +ZYDIS_EXPORT bool ZydisSetSymbolResolver(const ZydisInstructionFormatterContext* formatter, + ZydisSymbolResolverContext* resolver); + +ZYDIS_EXPORT bool ZydisFreeInstructionFormatter(const ZydisInstructionFormatterContext* formatter); + +/* SymbolResolver =============================================================================== */ + +ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateCustomSymbolResolver(/*TODO*/); + +ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateExactSymbolResolver(); + +ZYDIS_EXPORT bool ZydisResolveSymbol(const ZydisSymbolResolverContext* resolver, + const ZydisInstructionInfo* info, uint64_t address, const char** symbol, uint64_t* offset); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverContainsSymbol( + const ZydisSymbolResolverContext* resolver, uint64_t address, bool* containsSymbol); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverSetSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address, const char** symbol); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverRemoveSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverClear(const ZydisSymbolResolverContext* resolver); + +ZYDIS_EXPORT bool ZydisFreeSymbolResolver(const ZydisSymbolResolverContext* resolver); + +/* ============================================================================================== */ + #ifdef __cplusplus } #endif -#endif /* _ZYDIS_TYPES_H_ */ \ No newline at end of file +#endif /* _ZYDIS_API_H_ */ diff --git a/Zydis/ZydisInstructionFormatter.cpp b/Zydis/ZydisInstructionFormatter.cpp index 6420b9b..a09b1a5 100644 --- a/Zydis/ZydisInstructionFormatter.cpp +++ b/Zydis/ZydisInstructionFormatter.cpp @@ -117,7 +117,7 @@ BaseInstructionFormatter::BaseInstructionFormatter( } -const char *BaseInstructionFormatter::formatInstruction(const InstructionInfo& info) +const char* BaseInstructionFormatter::formatInstruction(const InstructionInfo& info) { // Clears the internal string buffer outputClear(); @@ -202,8 +202,7 @@ char const *BaseInstructionFormatter::outputString() } // Write the formatted text to the output buffer assert((bufLen - offset) > 0); - strLen = - vsnprintf_s(&m_outputBuffer[offset], bufLen - offset, _TRUNCATE, format, arguments); + strLen = std::vsnprintf(&m_outputBuffer[offset], bufLen - offset, format, arguments); } while (strLen < 0); // Increase the string length m_outputStringLen = offset + strLen + 1; diff --git a/Zydis/ZydisSymbolResolver.hpp b/Zydis/ZydisSymbolResolver.hpp index b8bf0ca..d825863 100644 --- a/Zydis/ZydisSymbolResolver.hpp +++ b/Zydis/ZydisSymbolResolver.hpp @@ -58,7 +58,7 @@ public: * relative to the base address of the symbol. * @return The name of the symbol, if the symbol was found, @c NULL if not. */ - virtual const char *resolveSymbol(const InstructionInfo& info, uint64_t address, + virtual const char* resolveSymbol(const InstructionInfo& info, uint64_t address, uint64_t& offset); }; @@ -99,7 +99,7 @@ public: * @param address The address. * @param name The symbol name. */ - void setSymbol(uint64_t address, const char *name); + void setSymbol(uint64_t address, const char* name); /** * @brief Removes the symbol described by address. This will invalidate all char pointers * to the specific symbol name. From 2ffca64bcd813fc08c8fb1dcba5587f70a1e2b8f Mon Sep 17 00:00:00 2001 From: flobernd Date: Mon, 18 May 2015 02:33:04 +0200 Subject: [PATCH 31/33] Added instruction mnemonic enum to the C-bindings --- Zydis/ZydisAPI.h | 918 ++++++++++++++++++++++++++++ Zydis/ZydisInstructionFormatter.cpp | 4 +- Zydis/ZydisInstructionFormatter.hpp | 4 +- Zydis/ZydisSymbolResolver.cpp | 4 +- 4 files changed, 924 insertions(+), 6 deletions(-) diff --git a/Zydis/ZydisAPI.h b/Zydis/ZydisAPI.h index 107ba5f..34209ce 100644 --- a/Zydis/ZydisAPI.h +++ b/Zydis/ZydisAPI.h @@ -701,6 +701,924 @@ ZYDIS_EXPORT bool ZydisExactSymbolResolverClear(const ZydisSymbolResolverContext ZYDIS_EXPORT bool ZydisFreeSymbolResolver(const ZydisSymbolResolverContext* resolver); +/* Opcode Table ================================================================================= */ + +/** + * @brief Values that represent an instruction mnemonic. + */ +typedef enum _ZydisInstructionMnemonic /* : uint16_t */ +{ + /* 000 */ ZYDIS_MNEM_INVALID, + /* 001 */ ZYDIS_MNEM_AAA, + /* 002 */ ZYDIS_MNEM_AAD, + /* 003 */ ZYDIS_MNEM_AAM, + /* 004 */ ZYDIS_MNEM_AAS, + /* 005 */ ZYDIS_MNEM_ADC, + /* 006 */ ZYDIS_MNEM_ADD, + /* 007 */ ZYDIS_MNEM_ADDPD, + /* 008 */ ZYDIS_MNEM_ADDPS, + /* 009 */ ZYDIS_MNEM_ADDSD, + /* 00A */ ZYDIS_MNEM_ADDSS, + /* 00B */ ZYDIS_MNEM_ADDSUBPD, + /* 00C */ ZYDIS_MNEM_ADDSUBPS, + /* 00D */ ZYDIS_MNEM_AESDEC, + /* 00E */ ZYDIS_MNEM_AESDECLAST, + /* 00F */ ZYDIS_MNEM_AESENC, + /* 010 */ ZYDIS_MNEM_AESENCLAST, + /* 011 */ ZYDIS_MNEM_AESIMC, + /* 012 */ ZYDIS_MNEM_AESKEYGENASSIST, + /* 013 */ ZYDIS_MNEM_AND, + /* 014 */ ZYDIS_MNEM_ANDNPD, + /* 015 */ ZYDIS_MNEM_ANDNPS, + /* 016 */ ZYDIS_MNEM_ANDPD, + /* 017 */ ZYDIS_MNEM_ANDPS, + /* 018 */ ZYDIS_MNEM_ARPL, + /* 019 */ ZYDIS_MNEM_BLENDPD, + /* 01A */ ZYDIS_MNEM_BLENDPS, + /* 01B */ ZYDIS_MNEM_BLENDVPD, + /* 01C */ ZYDIS_MNEM_BLENDVPS, + /* 01D */ ZYDIS_MNEM_BOUND, + /* 01E */ ZYDIS_MNEM_BSF, + /* 01F */ ZYDIS_MNEM_BSR, + /* 020 */ ZYDIS_MNEM_BSWAP, + /* 021 */ ZYDIS_MNEM_BT, + /* 022 */ ZYDIS_MNEM_BTC, + /* 023 */ ZYDIS_MNEM_BTR, + /* 024 */ ZYDIS_MNEM_BTS, + /* 025 */ ZYDIS_MNEM_CALL, + /* 026 */ ZYDIS_MNEM_CBW, + /* 027 */ ZYDIS_MNEM_CDQ, + /* 028 */ ZYDIS_MNEM_CDQE, + /* 029 */ ZYDIS_MNEM_CLC, + /* 02A */ ZYDIS_MNEM_CLD, + /* 02B */ ZYDIS_MNEM_CLFLUSH, + /* 02C */ ZYDIS_MNEM_CLGI, + /* 02D */ ZYDIS_MNEM_CLI, + /* 02E */ ZYDIS_MNEM_CLTS, + /* 02F */ ZYDIS_MNEM_CMC, + /* 030 */ ZYDIS_MNEM_CMOVA, + /* 031 */ ZYDIS_MNEM_CMOVAE, + /* 032 */ ZYDIS_MNEM_CMOVB, + /* 033 */ ZYDIS_MNEM_CMOVBE, + /* 034 */ ZYDIS_MNEM_CMOVE, + /* 035 */ ZYDIS_MNEM_CMOVG, + /* 036 */ ZYDIS_MNEM_CMOVGE, + /* 037 */ ZYDIS_MNEM_CMOVL, + /* 038 */ ZYDIS_MNEM_CMOVLE, + /* 039 */ ZYDIS_MNEM_CMOVNE, + /* 03A */ ZYDIS_MNEM_CMOVNO, + /* 03B */ ZYDIS_MNEM_CMOVNP, + /* 03C */ ZYDIS_MNEM_CMOVNS, + /* 03D */ ZYDIS_MNEM_CMOVO, + /* 03E */ ZYDIS_MNEM_CMOVP, + /* 03F */ ZYDIS_MNEM_CMOVS, + /* 040 */ ZYDIS_MNEM_CMP, + /* 041 */ ZYDIS_MNEM_CMPPD, + /* 042 */ ZYDIS_MNEM_CMPPS, + /* 043 */ ZYDIS_MNEM_CMPSB, + /* 044 */ ZYDIS_MNEM_CMPSD, + /* 045 */ ZYDIS_MNEM_CMPSQ, + /* 046 */ ZYDIS_MNEM_CMPSS, + /* 047 */ ZYDIS_MNEM_CMPSW, + /* 048 */ ZYDIS_MNEM_CMPXCHG, + /* 049 */ ZYDIS_MNEM_CMPXCHG16B, + /* 04A */ ZYDIS_MNEM_CMPXCHG8B, + /* 04B */ ZYDIS_MNEM_COMISD, + /* 04C */ ZYDIS_MNEM_COMISS, + /* 04D */ ZYDIS_MNEM_CPUID, + /* 04E */ ZYDIS_MNEM_CQO, + /* 04F */ ZYDIS_MNEM_CRC32, + /* 050 */ ZYDIS_MNEM_CVTDQ2PD, + /* 051 */ ZYDIS_MNEM_CVTDQ2PS, + /* 052 */ ZYDIS_MNEM_CVTPD2DQ, + /* 053 */ ZYDIS_MNEM_CVTPD2PI, + /* 054 */ ZYDIS_MNEM_CVTPD2PS, + /* 055 */ ZYDIS_MNEM_CVTPI2PD, + /* 056 */ ZYDIS_MNEM_CVTPI2PS, + /* 057 */ ZYDIS_MNEM_CVTPS2DQ, + /* 058 */ ZYDIS_MNEM_CVTPS2PD, + /* 059 */ ZYDIS_MNEM_CVTPS2PI, + /* 05A */ ZYDIS_MNEM_CVTSD2SI, + /* 05B */ ZYDIS_MNEM_CVTSD2SS, + /* 05C */ ZYDIS_MNEM_CVTSI2SD, + /* 05D */ ZYDIS_MNEM_CVTSI2SS, + /* 05E */ ZYDIS_MNEM_CVTSS2SD, + /* 05F */ ZYDIS_MNEM_CVTSS2SI, + /* 060 */ ZYDIS_MNEM_CVTTPD2DQ, + /* 061 */ ZYDIS_MNEM_CVTTPD2PI, + /* 062 */ ZYDIS_MNEM_CVTTPS2DQ, + /* 063 */ ZYDIS_MNEM_CVTTPS2PI, + /* 064 */ ZYDIS_MNEM_CVTTSD2SI, + /* 065 */ ZYDIS_MNEM_CVTTSS2SI, + /* 066 */ ZYDIS_MNEM_CWD, + /* 067 */ ZYDIS_MNEM_CWDE, + /* 068 */ ZYDIS_MNEM_DAA, + /* 069 */ ZYDIS_MNEM_DAS, + /* 06A */ ZYDIS_MNEM_DEC, + /* 06B */ ZYDIS_MNEM_DIV, + /* 06C */ ZYDIS_MNEM_DIVPD, + /* 06D */ ZYDIS_MNEM_DIVPS, + /* 06E */ ZYDIS_MNEM_DIVSD, + /* 06F */ ZYDIS_MNEM_DIVSS, + /* 070 */ ZYDIS_MNEM_DPPD, + /* 071 */ ZYDIS_MNEM_DPPS, + /* 072 */ ZYDIS_MNEM_EMMS, + /* 073 */ ZYDIS_MNEM_ENTER, + /* 074 */ ZYDIS_MNEM_EXTRACTPS, + /* 075 */ ZYDIS_MNEM_F2XM1, + /* 076 */ ZYDIS_MNEM_FABS, + /* 077 */ ZYDIS_MNEM_FADD, + /* 078 */ ZYDIS_MNEM_FADDP, + /* 079 */ ZYDIS_MNEM_FBLD, + /* 07A */ ZYDIS_MNEM_FBSTP, + /* 07B */ ZYDIS_MNEM_FCHS, + /* 07C */ ZYDIS_MNEM_FCLEX, + /* 07D */ ZYDIS_MNEM_FCMOVB, + /* 07E */ ZYDIS_MNEM_FCMOVBE, + /* 07F */ ZYDIS_MNEM_FCMOVE, + /* 080 */ ZYDIS_MNEM_FCMOVNB, + /* 081 */ ZYDIS_MNEM_FCMOVNBE, + /* 082 */ ZYDIS_MNEM_FCMOVNE, + /* 083 */ ZYDIS_MNEM_FCMOVNU, + /* 084 */ ZYDIS_MNEM_FCMOVU, + /* 085 */ ZYDIS_MNEM_FCOM, + /* 086 */ ZYDIS_MNEM_FCOM2, + /* 087 */ ZYDIS_MNEM_FCOMI, + /* 088 */ ZYDIS_MNEM_FCOMIP, + /* 089 */ ZYDIS_MNEM_FCOMP, + /* 08A */ ZYDIS_MNEM_FCOMP3, + /* 08B */ ZYDIS_MNEM_FCOMP5, + /* 08C */ ZYDIS_MNEM_FCOMPP, + /* 08D */ ZYDIS_MNEM_FCOS, + /* 08E */ ZYDIS_MNEM_FDECSTP, + /* 08F */ ZYDIS_MNEM_FDIV, + /* 090 */ ZYDIS_MNEM_FDIVP, + /* 091 */ ZYDIS_MNEM_FDIVR, + /* 092 */ ZYDIS_MNEM_FDIVRP, + /* 093 */ ZYDIS_MNEM_FEMMS, + /* 094 */ ZYDIS_MNEM_FFREE, + /* 095 */ ZYDIS_MNEM_FFREEP, + /* 096 */ ZYDIS_MNEM_FIADD, + /* 097 */ ZYDIS_MNEM_FICOM, + /* 098 */ ZYDIS_MNEM_FICOMP, + /* 099 */ ZYDIS_MNEM_FIDIV, + /* 09A */ ZYDIS_MNEM_FIDIVR, + /* 09B */ ZYDIS_MNEM_FILD, + /* 09C */ ZYDIS_MNEM_FIMUL, + /* 09D */ ZYDIS_MNEM_FINCSTP, + /* 09E */ ZYDIS_MNEM_FIST, + /* 09F */ ZYDIS_MNEM_FISTP, + /* 0A0 */ ZYDIS_MNEM_FISTTP, + /* 0A1 */ ZYDIS_MNEM_FISUB, + /* 0A2 */ ZYDIS_MNEM_FISUBR, + /* 0A3 */ ZYDIS_MNEM_FLD, + /* 0A4 */ ZYDIS_MNEM_FLD1, + /* 0A5 */ ZYDIS_MNEM_FLDCW, + /* 0A6 */ ZYDIS_MNEM_FLDENV, + /* 0A7 */ ZYDIS_MNEM_FLDL2E, + /* 0A8 */ ZYDIS_MNEM_FLDL2T, + /* 0A9 */ ZYDIS_MNEM_FLDLG2, + /* 0AA */ ZYDIS_MNEM_FLDLN2, + /* 0AB */ ZYDIS_MNEM_FLDPI, + /* 0AC */ ZYDIS_MNEM_FLDZ, + /* 0AD */ ZYDIS_MNEM_FMUL, + /* 0AE */ ZYDIS_MNEM_FMULP, + /* 0AF */ ZYDIS_MNEM_FNDISI, + /* 0B0 */ ZYDIS_MNEM_FNENI, + /* 0B1 */ ZYDIS_MNEM_FNINIT, + /* 0B2 */ ZYDIS_MNEM_FNOP, + /* 0B3 */ ZYDIS_MNEM_FNSAVE, + /* 0B4 */ ZYDIS_MNEM_FNSETPM, + /* 0B5 */ ZYDIS_MNEM_FNSTCW, + /* 0B6 */ ZYDIS_MNEM_FNSTENV, + /* 0B7 */ ZYDIS_MNEM_FNSTSW, + /* 0B8 */ ZYDIS_MNEM_FPATAN, + /* 0B9 */ ZYDIS_MNEM_FPREM, + /* 0BA */ ZYDIS_MNEM_FPREM1, + /* 0BB */ ZYDIS_MNEM_FPTAN, + /* 0BC */ ZYDIS_MNEM_FRNDINT, + /* 0BD */ ZYDIS_MNEM_FRSTOR, + /* 0BE */ ZYDIS_MNEM_FRSTPM, + /* 0BF */ ZYDIS_MNEM_FSCALE, + /* 0C0 */ ZYDIS_MNEM_FSIN, + /* 0C1 */ ZYDIS_MNEM_FSINCOS, + /* 0C2 */ ZYDIS_MNEM_FSQRT, + /* 0C3 */ ZYDIS_MNEM_FST, + /* 0C4 */ ZYDIS_MNEM_FSTP, + /* 0C5 */ ZYDIS_MNEM_FSTP1, + /* 0C6 */ ZYDIS_MNEM_FSTP8, + /* 0C7 */ ZYDIS_MNEM_FSTP9, + /* 0C8 */ ZYDIS_MNEM_FSUB, + /* 0C9 */ ZYDIS_MNEM_FSUBP, + /* 0CA */ ZYDIS_MNEM_FSUBR, + /* 0CB */ ZYDIS_MNEM_FSUBRP, + /* 0CC */ ZYDIS_MNEM_FTST, + /* 0CD */ ZYDIS_MNEM_FUCOM, + /* 0CE */ ZYDIS_MNEM_FUCOMI, + /* 0CF */ ZYDIS_MNEM_FUCOMIP, + /* 0D0 */ ZYDIS_MNEM_FUCOMP, + /* 0D1 */ ZYDIS_MNEM_FUCOMPP, + /* 0D2 */ ZYDIS_MNEM_FXAM, + /* 0D3 */ ZYDIS_MNEM_FXCH, + /* 0D4 */ ZYDIS_MNEM_FXCH4, + /* 0D5 */ ZYDIS_MNEM_FXCH7, + /* 0D6 */ ZYDIS_MNEM_FXRSTOR, + /* 0D7 */ ZYDIS_MNEM_FXSAVE, + /* 0D8 */ ZYDIS_MNEM_FXTRACT, + /* 0D9 */ ZYDIS_MNEM_FYL2X, + /* 0DA */ ZYDIS_MNEM_FYL2XP1, + /* 0DB */ ZYDIS_MNEM_GETSEC, + /* 0DC */ ZYDIS_MNEM_HADDPD, + /* 0DD */ ZYDIS_MNEM_HADDPS, + /* 0DE */ ZYDIS_MNEM_HLT, + /* 0DF */ ZYDIS_MNEM_HSUBPD, + /* 0E0 */ ZYDIS_MNEM_HSUBPS, + /* 0E1 */ ZYDIS_MNEM_IDIV, + /* 0E2 */ ZYDIS_MNEM_IMUL, + /* 0E3 */ ZYDIS_MNEM_IN, + /* 0E4 */ ZYDIS_MNEM_INC, + /* 0E5 */ ZYDIS_MNEM_INSB, + /* 0E6 */ ZYDIS_MNEM_INSD, + /* 0E7 */ ZYDIS_MNEM_INSERTPS, + /* 0E8 */ ZYDIS_MNEM_INSW, + /* 0E9 */ ZYDIS_MNEM_INT, + /* 0EA */ ZYDIS_MNEM_INT1, + /* 0EB */ ZYDIS_MNEM_INT3, + /* 0EC */ ZYDIS_MNEM_INTO, + /* 0ED */ ZYDIS_MNEM_INVD, + /* 0EE */ ZYDIS_MNEM_INVEPT, + /* 0EF */ ZYDIS_MNEM_INVLPG, + /* 0F0 */ ZYDIS_MNEM_INVLPGA, + /* 0F1 */ ZYDIS_MNEM_INVVPID, + /* 0F2 */ ZYDIS_MNEM_IRETD, + /* 0F3 */ ZYDIS_MNEM_IRETQ, + /* 0F4 */ ZYDIS_MNEM_IRETW, + /* 0F5 */ ZYDIS_MNEM_JA, + /* 0F6 */ ZYDIS_MNEM_JB, + /* 0F7 */ ZYDIS_MNEM_JBE, + /* 0F8 */ ZYDIS_MNEM_JCXZ, + /* 0F9 */ ZYDIS_MNEM_JE, + /* 0FA */ ZYDIS_MNEM_JECXZ, + /* 0FB */ ZYDIS_MNEM_JG, + /* 0FC */ ZYDIS_MNEM_JGE, + /* 0FD */ ZYDIS_MNEM_JL, + /* 0FE */ ZYDIS_MNEM_JLE, + /* 0FF */ ZYDIS_MNEM_JMP, + /* 100 */ ZYDIS_MNEM_JNB, + /* 101 */ ZYDIS_MNEM_JNE, + /* 102 */ ZYDIS_MNEM_JNO, + /* 103 */ ZYDIS_MNEM_JNP, + /* 104 */ ZYDIS_MNEM_JNS, + /* 105 */ ZYDIS_MNEM_JO, + /* 106 */ ZYDIS_MNEM_JP, + /* 107 */ ZYDIS_MNEM_JRCXZ, + /* 108 */ ZYDIS_MNEM_JS, + /* 109 */ ZYDIS_MNEM_LAHF, + /* 10A */ ZYDIS_MNEM_LAR, + /* 10B */ ZYDIS_MNEM_LDDQU, + /* 10C */ ZYDIS_MNEM_LDMXCSR, + /* 10D */ ZYDIS_MNEM_LDS, + /* 10E */ ZYDIS_MNEM_LEA, + /* 10F */ ZYDIS_MNEM_LEAVE, + /* 110 */ ZYDIS_MNEM_LES, + /* 111 */ ZYDIS_MNEM_LFENCE, + /* 112 */ ZYDIS_MNEM_LFS, + /* 113 */ ZYDIS_MNEM_LGDT, + /* 114 */ ZYDIS_MNEM_LGS, + /* 115 */ ZYDIS_MNEM_LIDT, + /* 116 */ ZYDIS_MNEM_LLDT, + /* 117 */ ZYDIS_MNEM_LMSW, + /* 118 */ ZYDIS_MNEM_LOCK, + /* 119 */ ZYDIS_MNEM_LODSB, + /* 11A */ ZYDIS_MNEM_LODSD, + /* 11B */ ZYDIS_MNEM_LODSQ, + /* 11C */ ZYDIS_MNEM_LODSW, + /* 11D */ ZYDIS_MNEM_LOOP, + /* 11E */ ZYDIS_MNEM_LOOPE, + /* 11F */ ZYDIS_MNEM_LOOPNE, + /* 120 */ ZYDIS_MNEM_LSL, + /* 121 */ ZYDIS_MNEM_LSS, + /* 122 */ ZYDIS_MNEM_LTR, + /* 123 */ ZYDIS_MNEM_MASKMOVDQU, + /* 124 */ ZYDIS_MNEM_MASKMOVQ, + /* 125 */ ZYDIS_MNEM_MAXPD, + /* 126 */ ZYDIS_MNEM_MAXPS, + /* 127 */ ZYDIS_MNEM_MAXSD, + /* 128 */ ZYDIS_MNEM_MAXSS, + /* 129 */ ZYDIS_MNEM_MFENCE, + /* 12A */ ZYDIS_MNEM_MINPD, + /* 12B */ ZYDIS_MNEM_MINPS, + /* 12C */ ZYDIS_MNEM_MINSD, + /* 12D */ ZYDIS_MNEM_MINSS, + /* 12E */ ZYDIS_MNEM_MONITOR, + /* 12F */ ZYDIS_MNEM_MONTMUL, + /* 130 */ ZYDIS_MNEM_MOV, + /* 131 */ ZYDIS_MNEM_MOVAPD, + /* 132 */ ZYDIS_MNEM_MOVAPS, + /* 133 */ ZYDIS_MNEM_MOVBE, + /* 134 */ ZYDIS_MNEM_MOVD, + /* 135 */ ZYDIS_MNEM_MOVDDUP, + /* 136 */ ZYDIS_MNEM_MOVDQ2Q, + /* 137 */ ZYDIS_MNEM_MOVDQA, + /* 138 */ ZYDIS_MNEM_MOVDQU, + /* 139 */ ZYDIS_MNEM_MOVHLPS, + /* 13A */ ZYDIS_MNEM_MOVHPD, + /* 13B */ ZYDIS_MNEM_MOVHPS, + /* 13C */ ZYDIS_MNEM_MOVLHPS, + /* 13D */ ZYDIS_MNEM_MOVLPD, + /* 13E */ ZYDIS_MNEM_MOVLPS, + /* 13F */ ZYDIS_MNEM_MOVMSKPD, + /* 140 */ ZYDIS_MNEM_MOVMSKPS, + /* 141 */ ZYDIS_MNEM_MOVNTDQ, + /* 142 */ ZYDIS_MNEM_MOVNTDQA, + /* 143 */ ZYDIS_MNEM_MOVNTI, + /* 144 */ ZYDIS_MNEM_MOVNTPD, + /* 145 */ ZYDIS_MNEM_MOVNTPS, + /* 146 */ ZYDIS_MNEM_MOVNTQ, + /* 147 */ ZYDIS_MNEM_MOVQ, + /* 148 */ ZYDIS_MNEM_MOVQ2DQ, + /* 149 */ ZYDIS_MNEM_MOVSB, + /* 14A */ ZYDIS_MNEM_MOVSD, + /* 14B */ ZYDIS_MNEM_MOVSHDUP, + /* 14C */ ZYDIS_MNEM_MOVSLDUP, + /* 14D */ ZYDIS_MNEM_MOVSQ, + /* 14E */ ZYDIS_MNEM_MOVSS, + /* 14F */ ZYDIS_MNEM_MOVSW, + /* 150 */ ZYDIS_MNEM_MOVSX, + /* 151 */ ZYDIS_MNEM_MOVSXD, + /* 152 */ ZYDIS_MNEM_MOVUPD, + /* 153 */ ZYDIS_MNEM_MOVUPS, + /* 154 */ ZYDIS_MNEM_MOVZX, + /* 155 */ ZYDIS_MNEM_MPSADBW, + /* 156 */ ZYDIS_MNEM_MUL, + /* 157 */ ZYDIS_MNEM_MULPD, + /* 158 */ ZYDIS_MNEM_MULPS, + /* 159 */ ZYDIS_MNEM_MULSD, + /* 15A */ ZYDIS_MNEM_MULSS, + /* 15B */ ZYDIS_MNEM_MWAIT, + /* 15C */ ZYDIS_MNEM_NEG, + /* 15D */ ZYDIS_MNEM_NOP, + /* 15E */ ZYDIS_MNEM_NOT, + /* 15F */ ZYDIS_MNEM_OR, + /* 160 */ ZYDIS_MNEM_ORPD, + /* 161 */ ZYDIS_MNEM_ORPS, + /* 162 */ ZYDIS_MNEM_OUT, + /* 163 */ ZYDIS_MNEM_OUTSB, + /* 164 */ ZYDIS_MNEM_OUTSD, + /* 165 */ ZYDIS_MNEM_OUTSW, + /* 166 */ ZYDIS_MNEM_PABSB, + /* 167 */ ZYDIS_MNEM_PABSD, + /* 168 */ ZYDIS_MNEM_PABSW, + /* 169 */ ZYDIS_MNEM_PACKSSDW, + /* 16A */ ZYDIS_MNEM_PACKSSWB, + /* 16B */ ZYDIS_MNEM_PACKUSDW, + /* 16C */ ZYDIS_MNEM_PACKUSWB, + /* 16D */ ZYDIS_MNEM_PADDB, + /* 16E */ ZYDIS_MNEM_PADDD, + /* 16F */ ZYDIS_MNEM_PADDQ, + /* 170 */ ZYDIS_MNEM_PADDSB, + /* 171 */ ZYDIS_MNEM_PADDSW, + /* 172 */ ZYDIS_MNEM_PADDUSB, + /* 173 */ ZYDIS_MNEM_PADDUSW, + /* 174 */ ZYDIS_MNEM_PADDW, + /* 175 */ ZYDIS_MNEM_PALIGNR, + /* 176 */ ZYDIS_MNEM_PAND, + /* 177 */ ZYDIS_MNEM_PANDN, + /* 178 */ ZYDIS_MNEM_PAUSE, + /* 179 */ ZYDIS_MNEM_PAVGB, + /* 17A */ ZYDIS_MNEM_PAVGUSB, + /* 17B */ ZYDIS_MNEM_PAVGW, + /* 17C */ ZYDIS_MNEM_PBLENDVB, + /* 17D */ ZYDIS_MNEM_PBLENDW, + /* 17E */ ZYDIS_MNEM_PCLMULQDQ, + /* 17F */ ZYDIS_MNEM_PCMPEQB, + /* 180 */ ZYDIS_MNEM_PCMPEQD, + /* 181 */ ZYDIS_MNEM_PCMPEQQ, + /* 182 */ ZYDIS_MNEM_PCMPEQW, + /* 183 */ ZYDIS_MNEM_PCMPESTRI, + /* 184 */ ZYDIS_MNEM_PCMPESTRM, + /* 185 */ ZYDIS_MNEM_PCMPGTB, + /* 186 */ ZYDIS_MNEM_PCMPGTD, + /* 187 */ ZYDIS_MNEM_PCMPGTQ, + /* 188 */ ZYDIS_MNEM_PCMPGTW, + /* 189 */ ZYDIS_MNEM_PCMPISTRI, + /* 18A */ ZYDIS_MNEM_PCMPISTRM, + /* 18B */ ZYDIS_MNEM_PEXTRB, + /* 18C */ ZYDIS_MNEM_PEXTRD, + /* 18D */ ZYDIS_MNEM_PEXTRQ, + /* 18E */ ZYDIS_MNEM_PEXTRW, + /* 18F */ ZYDIS_MNEM_PF2ID, + /* 190 */ ZYDIS_MNEM_PF2IW, + /* 191 */ ZYDIS_MNEM_PFACC, + /* 192 */ ZYDIS_MNEM_PFADD, + /* 193 */ ZYDIS_MNEM_PFCMPEQ, + /* 194 */ ZYDIS_MNEM_PFCMPGE, + /* 195 */ ZYDIS_MNEM_PFCMPGT, + /* 196 */ ZYDIS_MNEM_PFMAX, + /* 197 */ ZYDIS_MNEM_PFMIN, + /* 198 */ ZYDIS_MNEM_PFMUL, + /* 199 */ ZYDIS_MNEM_PFNACC, + /* 19A */ ZYDIS_MNEM_PFPNACC, + /* 19B */ ZYDIS_MNEM_PFRCP, + /* 19C */ ZYDIS_MNEM_PFRCPIT1, + /* 19D */ ZYDIS_MNEM_PFRCPIT2, + /* 19E */ ZYDIS_MNEM_PFRSQIT1, + /* 19F */ ZYDIS_MNEM_PFRSQRT, + /* 1A0 */ ZYDIS_MNEM_PFSUB, + /* 1A1 */ ZYDIS_MNEM_PFSUBR, + /* 1A2 */ ZYDIS_MNEM_PHADDD, + /* 1A3 */ ZYDIS_MNEM_PHADDSW, + /* 1A4 */ ZYDIS_MNEM_PHADDW, + /* 1A5 */ ZYDIS_MNEM_PHMINPOSUW, + /* 1A6 */ ZYDIS_MNEM_PHSUBD, + /* 1A7 */ ZYDIS_MNEM_PHSUBSW, + /* 1A8 */ ZYDIS_MNEM_PHSUBW, + /* 1A9 */ ZYDIS_MNEM_PI2FD, + /* 1AA */ ZYDIS_MNEM_PI2FW, + /* 1AB */ ZYDIS_MNEM_PINSRB, + /* 1AC */ ZYDIS_MNEM_PINSRD, + /* 1AD */ ZYDIS_MNEM_PINSRQ, + /* 1AE */ ZYDIS_MNEM_PINSRW, + /* 1AF */ ZYDIS_MNEM_PMADDUBSW, + /* 1B0 */ ZYDIS_MNEM_PMADDWD, + /* 1B1 */ ZYDIS_MNEM_PMAXSB, + /* 1B2 */ ZYDIS_MNEM_PMAXSD, + /* 1B3 */ ZYDIS_MNEM_PMAXSW, + /* 1B4 */ ZYDIS_MNEM_PMAXUB, + /* 1B5 */ ZYDIS_MNEM_PMAXUD, + /* 1B6 */ ZYDIS_MNEM_PMAXUW, + /* 1B7 */ ZYDIS_MNEM_PMINSB, + /* 1B8 */ ZYDIS_MNEM_PMINSD, + /* 1B9 */ ZYDIS_MNEM_PMINSW, + /* 1BA */ ZYDIS_MNEM_PMINUB, + /* 1BB */ ZYDIS_MNEM_PMINUD, + /* 1BC */ ZYDIS_MNEM_PMINUW, + /* 1BD */ ZYDIS_MNEM_PMOVMSKB, + /* 1BE */ ZYDIS_MNEM_PMOVSXBD, + /* 1BF */ ZYDIS_MNEM_PMOVSXBQ, + /* 1C0 */ ZYDIS_MNEM_PMOVSXBW, + /* 1C1 */ ZYDIS_MNEM_PMOVSXDQ, + /* 1C2 */ ZYDIS_MNEM_PMOVSXWD, + /* 1C3 */ ZYDIS_MNEM_PMOVSXWQ, + /* 1C4 */ ZYDIS_MNEM_PMOVZXBD, + /* 1C5 */ ZYDIS_MNEM_PMOVZXBQ, + /* 1C6 */ ZYDIS_MNEM_PMOVZXBW, + /* 1C7 */ ZYDIS_MNEM_PMOVZXDQ, + /* 1C8 */ ZYDIS_MNEM_PMOVZXWD, + /* 1C9 */ ZYDIS_MNEM_PMOVZXWQ, + /* 1CA */ ZYDIS_MNEM_PMULDQ, + /* 1CB */ ZYDIS_MNEM_PMULHRSW, + /* 1CC */ ZYDIS_MNEM_PMULHRW, + /* 1CD */ ZYDIS_MNEM_PMULHUW, + /* 1CE */ ZYDIS_MNEM_PMULHW, + /* 1CF */ ZYDIS_MNEM_PMULLD, + /* 1D0 */ ZYDIS_MNEM_PMULLW, + /* 1D1 */ ZYDIS_MNEM_PMULUDQ, + /* 1D2 */ ZYDIS_MNEM_POP, + /* 1D3 */ ZYDIS_MNEM_POPA, + /* 1D4 */ ZYDIS_MNEM_POPAD, + /* 1D5 */ ZYDIS_MNEM_POPCNT, + /* 1D6 */ ZYDIS_MNEM_POPFD, + /* 1D7 */ ZYDIS_MNEM_POPFQ, + /* 1D8 */ ZYDIS_MNEM_POPFW, + /* 1D9 */ ZYDIS_MNEM_POR, + /* 1DA */ ZYDIS_MNEM_PREFETCH, + /* 1DB */ ZYDIS_MNEM_PREFETCHNTA, + /* 1DC */ ZYDIS_MNEM_PREFETCHT0, + /* 1DD */ ZYDIS_MNEM_PREFETCHT1, + /* 1DE */ ZYDIS_MNEM_PREFETCHT2, + /* 1DF */ ZYDIS_MNEM_PSADBW, + /* 1E0 */ ZYDIS_MNEM_PSHUFB, + /* 1E1 */ ZYDIS_MNEM_PSHUFD, + /* 1E2 */ ZYDIS_MNEM_PSHUFHW, + /* 1E3 */ ZYDIS_MNEM_PSHUFLW, + /* 1E4 */ ZYDIS_MNEM_PSHUFW, + /* 1E5 */ ZYDIS_MNEM_PSIGNB, + /* 1E6 */ ZYDIS_MNEM_PSIGND, + /* 1E7 */ ZYDIS_MNEM_PSIGNW, + /* 1E8 */ ZYDIS_MNEM_PSLLD, + /* 1E9 */ ZYDIS_MNEM_PSLLDQ, + /* 1EA */ ZYDIS_MNEM_PSLLQ, + /* 1EB */ ZYDIS_MNEM_PSLLW, + /* 1EC */ ZYDIS_MNEM_PSRAD, + /* 1ED */ ZYDIS_MNEM_PSRAW, + /* 1EE */ ZYDIS_MNEM_PSRLD, + /* 1EF */ ZYDIS_MNEM_PSRLDQ, + /* 1F0 */ ZYDIS_MNEM_PSRLQ, + /* 1F1 */ ZYDIS_MNEM_PSRLW, + /* 1F2 */ ZYDIS_MNEM_PSUBB, + /* 1F3 */ ZYDIS_MNEM_PSUBD, + /* 1F4 */ ZYDIS_MNEM_PSUBQ, + /* 1F5 */ ZYDIS_MNEM_PSUBSB, + /* 1F6 */ ZYDIS_MNEM_PSUBSW, + /* 1F7 */ ZYDIS_MNEM_PSUBUSB, + /* 1F8 */ ZYDIS_MNEM_PSUBUSW, + /* 1F9 */ ZYDIS_MNEM_PSUBW, + /* 1FA */ ZYDIS_MNEM_PSWAPD, + /* 1FB */ ZYDIS_MNEM_PTEST, + /* 1FC */ ZYDIS_MNEM_PUNPCKHBW, + /* 1FD */ ZYDIS_MNEM_PUNPCKHDQ, + /* 1FE */ ZYDIS_MNEM_PUNPCKHQDQ, + /* 1FF */ ZYDIS_MNEM_PUNPCKHWD, + /* 200 */ ZYDIS_MNEM_PUNPCKLBW, + /* 201 */ ZYDIS_MNEM_PUNPCKLDQ, + /* 202 */ ZYDIS_MNEM_PUNPCKLQDQ, + /* 203 */ ZYDIS_MNEM_PUNPCKLWD, + /* 204 */ ZYDIS_MNEM_PUSH, + /* 205 */ ZYDIS_MNEM_PUSHA, + /* 206 */ ZYDIS_MNEM_PUSHAD, + /* 207 */ ZYDIS_MNEM_PUSHFD, + /* 208 */ ZYDIS_MNEM_PUSHFQ, + /* 209 */ ZYDIS_MNEM_PUSHFW, + /* 20A */ ZYDIS_MNEM_PXOR, + /* 20B */ ZYDIS_MNEM_RCL, + /* 20C */ ZYDIS_MNEM_RCPPS, + /* 20D */ ZYDIS_MNEM_RCPSS, + /* 20E */ ZYDIS_MNEM_RCR, + /* 20F */ ZYDIS_MNEM_RDMSR, + /* 210 */ ZYDIS_MNEM_RDPMC, + /* 211 */ ZYDIS_MNEM_RDRAND, + /* 212 */ ZYDIS_MNEM_RDTSC, + /* 213 */ ZYDIS_MNEM_RDTSCP, + /* 214 */ ZYDIS_MNEM_REP, + /* 215 */ ZYDIS_MNEM_REPNE, + /* 216 */ ZYDIS_MNEM_RET, + /* 217 */ ZYDIS_MNEM_RETF, + /* 218 */ ZYDIS_MNEM_ROL, + /* 219 */ ZYDIS_MNEM_ROR, + /* 21A */ ZYDIS_MNEM_ROUNDPD, + /* 21B */ ZYDIS_MNEM_ROUNDPS, + /* 21C */ ZYDIS_MNEM_ROUNDSD, + /* 21D */ ZYDIS_MNEM_ROUNDSS, + /* 21E */ ZYDIS_MNEM_RSM, + /* 21F */ ZYDIS_MNEM_RSQRTPS, + /* 220 */ ZYDIS_MNEM_RSQRTSS, + /* 221 */ ZYDIS_MNEM_SAHF, + /* 222 */ ZYDIS_MNEM_SALC, + /* 223 */ ZYDIS_MNEM_SAR, + /* 224 */ ZYDIS_MNEM_SBB, + /* 225 */ ZYDIS_MNEM_SCASB, + /* 226 */ ZYDIS_MNEM_SCASD, + /* 227 */ ZYDIS_MNEM_SCASQ, + /* 228 */ ZYDIS_MNEM_SCASW, + /* 229 */ ZYDIS_MNEM_SETA, + /* 22A */ ZYDIS_MNEM_SETAE, + /* 22B */ ZYDIS_MNEM_SETB, + /* 22C */ ZYDIS_MNEM_SETBE, + /* 22D */ ZYDIS_MNEM_SETE, + /* 22E */ ZYDIS_MNEM_SETG, + /* 22F */ ZYDIS_MNEM_SETGE, + /* 230 */ ZYDIS_MNEM_SETL, + /* 231 */ ZYDIS_MNEM_SETLE, + /* 232 */ ZYDIS_MNEM_SETNE, + /* 233 */ ZYDIS_MNEM_SETNO, + /* 234 */ ZYDIS_MNEM_SETNP, + /* 235 */ ZYDIS_MNEM_SETNS, + /* 236 */ ZYDIS_MNEM_SETO, + /* 237 */ ZYDIS_MNEM_SETP, + /* 238 */ ZYDIS_MNEM_SETS, + /* 239 */ ZYDIS_MNEM_SFENCE, + /* 23A */ ZYDIS_MNEM_SGDT, + /* 23B */ ZYDIS_MNEM_SHL, + /* 23C */ ZYDIS_MNEM_SHLD, + /* 23D */ ZYDIS_MNEM_SHR, + /* 23E */ ZYDIS_MNEM_SHRD, + /* 23F */ ZYDIS_MNEM_SHUFPD, + /* 240 */ ZYDIS_MNEM_SHUFPS, + /* 241 */ ZYDIS_MNEM_SIDT, + /* 242 */ ZYDIS_MNEM_SKINIT, + /* 243 */ ZYDIS_MNEM_SLDT, + /* 244 */ ZYDIS_MNEM_SMSW, + /* 245 */ ZYDIS_MNEM_SQRTPD, + /* 246 */ ZYDIS_MNEM_SQRTPS, + /* 247 */ ZYDIS_MNEM_SQRTSD, + /* 248 */ ZYDIS_MNEM_SQRTSS, + /* 249 */ ZYDIS_MNEM_STC, + /* 24A */ ZYDIS_MNEM_STD, + /* 24B */ ZYDIS_MNEM_STGI, + /* 24C */ ZYDIS_MNEM_STI, + /* 24D */ ZYDIS_MNEM_STMXCSR, + /* 24E */ ZYDIS_MNEM_STOSB, + /* 24F */ ZYDIS_MNEM_STOSD, + /* 250 */ ZYDIS_MNEM_STOSQ, + /* 251 */ ZYDIS_MNEM_STOSW, + /* 252 */ ZYDIS_MNEM_STR, + /* 253 */ ZYDIS_MNEM_SUB, + /* 254 */ ZYDIS_MNEM_SUBPD, + /* 255 */ ZYDIS_MNEM_SUBPS, + /* 256 */ ZYDIS_MNEM_SUBSD, + /* 257 */ ZYDIS_MNEM_SUBSS, + /* 258 */ ZYDIS_MNEM_SWAPGS, + /* 259 */ ZYDIS_MNEM_SYSCALL, + /* 25A */ ZYDIS_MNEM_SYSENTER, + /* 25B */ ZYDIS_MNEM_SYSEXIT, + /* 25C */ ZYDIS_MNEM_SYSRET, + /* 25D */ ZYDIS_MNEM_TEST, + /* 25E */ ZYDIS_MNEM_UCOMISD, + /* 25F */ ZYDIS_MNEM_UCOMISS, + /* 260 */ ZYDIS_MNEM_UD2, + /* 261 */ ZYDIS_MNEM_UNPCKHPD, + /* 262 */ ZYDIS_MNEM_UNPCKHPS, + /* 263 */ ZYDIS_MNEM_UNPCKLPD, + /* 264 */ ZYDIS_MNEM_UNPCKLPS, + /* 265 */ ZYDIS_MNEM_VADDPD, + /* 266 */ ZYDIS_MNEM_VADDPS, + /* 267 */ ZYDIS_MNEM_VADDSD, + /* 268 */ ZYDIS_MNEM_VADDSS, + /* 269 */ ZYDIS_MNEM_VADDSUBPD, + /* 26A */ ZYDIS_MNEM_VADDSUBPS, + /* 26B */ ZYDIS_MNEM_VAESDEC, + /* 26C */ ZYDIS_MNEM_VAESDECLAST, + /* 26D */ ZYDIS_MNEM_VAESENC, + /* 26E */ ZYDIS_MNEM_VAESENCLAST, + /* 26F */ ZYDIS_MNEM_VAESIMC, + /* 270 */ ZYDIS_MNEM_VAESKEYGENASSIST, + /* 271 */ ZYDIS_MNEM_VANDNPD, + /* 272 */ ZYDIS_MNEM_VANDNPS, + /* 273 */ ZYDIS_MNEM_VANDPD, + /* 274 */ ZYDIS_MNEM_VANDPS, + /* 275 */ ZYDIS_MNEM_VBLENDPD, + /* 276 */ ZYDIS_MNEM_VBLENDPS, + /* 277 */ ZYDIS_MNEM_VBLENDVPD, + /* 278 */ ZYDIS_MNEM_VBLENDVPS, + /* 279 */ ZYDIS_MNEM_VBROADCASTSD, + /* 27A */ ZYDIS_MNEM_VBROADCASTSS, + /* 27B */ ZYDIS_MNEM_VCMPPD, + /* 27C */ ZYDIS_MNEM_VCMPPS, + /* 27D */ ZYDIS_MNEM_VCMPSD, + /* 27E */ ZYDIS_MNEM_VCMPSS, + /* 27F */ ZYDIS_MNEM_VCOMISD, + /* 280 */ ZYDIS_MNEM_VCOMISS, + /* 281 */ ZYDIS_MNEM_VCVTDQ2PD, + /* 282 */ ZYDIS_MNEM_VCVTDQ2PS, + /* 283 */ ZYDIS_MNEM_VCVTPD2DQ, + /* 284 */ ZYDIS_MNEM_VCVTPD2PS, + /* 285 */ ZYDIS_MNEM_VCVTPS2DQ, + /* 286 */ ZYDIS_MNEM_VCVTPS2PD, + /* 287 */ ZYDIS_MNEM_VCVTSD2SI, + /* 288 */ ZYDIS_MNEM_VCVTSD2SS, + /* 289 */ ZYDIS_MNEM_VCVTSI2SD, + /* 28A */ ZYDIS_MNEM_VCVTSI2SS, + /* 28B */ ZYDIS_MNEM_VCVTSS2SD, + /* 28C */ ZYDIS_MNEM_VCVTSS2SI, + /* 28D */ ZYDIS_MNEM_VCVTTPD2DQ, + /* 28E */ ZYDIS_MNEM_VCVTTPS2DQ, + /* 28F */ ZYDIS_MNEM_VCVTTSD2SI, + /* 290 */ ZYDIS_MNEM_VCVTTSS2SI, + /* 291 */ ZYDIS_MNEM_VDIVPD, + /* 292 */ ZYDIS_MNEM_VDIVPS, + /* 293 */ ZYDIS_MNEM_VDIVSD, + /* 294 */ ZYDIS_MNEM_VDIVSS, + /* 295 */ ZYDIS_MNEM_VDPPD, + /* 296 */ ZYDIS_MNEM_VDPPS, + /* 297 */ ZYDIS_MNEM_VERR, + /* 298 */ ZYDIS_MNEM_VERW, + /* 299 */ ZYDIS_MNEM_VEXTRACTF128, + /* 29A */ ZYDIS_MNEM_VEXTRACTPS, + /* 29B */ ZYDIS_MNEM_VHADDPD, + /* 29C */ ZYDIS_MNEM_VHADDPS, + /* 29D */ ZYDIS_MNEM_VHSUBPD, + /* 29E */ ZYDIS_MNEM_VHSUBPS, + /* 29F */ ZYDIS_MNEM_VINSERTF128, + /* 2A0 */ ZYDIS_MNEM_VINSERTPS, + /* 2A1 */ ZYDIS_MNEM_VLDDQU, + /* 2A2 */ ZYDIS_MNEM_VMASKMOVDQU, + /* 2A3 */ ZYDIS_MNEM_VMASKMOVPD, + /* 2A4 */ ZYDIS_MNEM_VMASKMOVPS, + /* 2A5 */ ZYDIS_MNEM_VMAXPD, + /* 2A6 */ ZYDIS_MNEM_VMAXPS, + /* 2A7 */ ZYDIS_MNEM_VMAXSD, + /* 2A8 */ ZYDIS_MNEM_VMAXSS, + /* 2A9 */ ZYDIS_MNEM_VMCALL, + /* 2AA */ ZYDIS_MNEM_VMCLEAR, + /* 2AB */ ZYDIS_MNEM_VMINPD, + /* 2AC */ ZYDIS_MNEM_VMINPS, + /* 2AD */ ZYDIS_MNEM_VMINSD, + /* 2AE */ ZYDIS_MNEM_VMINSS, + /* 2AF */ ZYDIS_MNEM_VMLAUNCH, + /* 2B0 */ ZYDIS_MNEM_VMLOAD, + /* 2B1 */ ZYDIS_MNEM_VMMCALL, + /* 2B2 */ ZYDIS_MNEM_VMOVAPD, + /* 2B3 */ ZYDIS_MNEM_VMOVAPS, + /* 2B4 */ ZYDIS_MNEM_VMOVD, + /* 2B5 */ ZYDIS_MNEM_VMOVDDUP, + /* 2B6 */ ZYDIS_MNEM_VMOVDQA, + /* 2B7 */ ZYDIS_MNEM_VMOVDQU, + /* 2B8 */ ZYDIS_MNEM_VMOVHLPS, + /* 2B9 */ ZYDIS_MNEM_VMOVHPD, + /* 2BA */ ZYDIS_MNEM_VMOVHPS, + /* 2BB */ ZYDIS_MNEM_VMOVLHPS, + /* 2BC */ ZYDIS_MNEM_VMOVLPD, + /* 2BD */ ZYDIS_MNEM_VMOVLPS, + /* 2BE */ ZYDIS_MNEM_VMOVMSKPD, + /* 2BF */ ZYDIS_MNEM_VMOVMSKPS, + /* 2C0 */ ZYDIS_MNEM_VMOVNTDQ, + /* 2C1 */ ZYDIS_MNEM_VMOVNTDQA, + /* 2C2 */ ZYDIS_MNEM_VMOVNTPD, + /* 2C3 */ ZYDIS_MNEM_VMOVNTPS, + /* 2C4 */ ZYDIS_MNEM_VMOVQ, + /* 2C5 */ ZYDIS_MNEM_VMOVSD, + /* 2C6 */ ZYDIS_MNEM_VMOVSHDUP, + /* 2C7 */ ZYDIS_MNEM_VMOVSLDUP, + /* 2C8 */ ZYDIS_MNEM_VMOVSS, + /* 2C9 */ ZYDIS_MNEM_VMOVUPD, + /* 2CA */ ZYDIS_MNEM_VMOVUPS, + /* 2CB */ ZYDIS_MNEM_VMPSADBW, + /* 2CC */ ZYDIS_MNEM_VMPTRLD, + /* 2CD */ ZYDIS_MNEM_VMPTRST, + /* 2CE */ ZYDIS_MNEM_VMREAD, + /* 2CF */ ZYDIS_MNEM_VMRESUME, + /* 2D0 */ ZYDIS_MNEM_VMRUN, + /* 2D1 */ ZYDIS_MNEM_VMSAVE, + /* 2D2 */ ZYDIS_MNEM_VMULPD, + /* 2D3 */ ZYDIS_MNEM_VMULPS, + /* 2D4 */ ZYDIS_MNEM_VMULSD, + /* 2D5 */ ZYDIS_MNEM_VMULSS, + /* 2D6 */ ZYDIS_MNEM_VMWRITE, + /* 2D7 */ ZYDIS_MNEM_VMXOFF, + /* 2D8 */ ZYDIS_MNEM_VMXON, + /* 2D9 */ ZYDIS_MNEM_VORPD, + /* 2DA */ ZYDIS_MNEM_VORPS, + /* 2DB */ ZYDIS_MNEM_VPABSB, + /* 2DC */ ZYDIS_MNEM_VPABSD, + /* 2DD */ ZYDIS_MNEM_VPABSW, + /* 2DE */ ZYDIS_MNEM_VPACKSSDW, + /* 2DF */ ZYDIS_MNEM_VPACKSSWB, + /* 2E0 */ ZYDIS_MNEM_VPACKUSDW, + /* 2E1 */ ZYDIS_MNEM_VPACKUSWB, + /* 2E2 */ ZYDIS_MNEM_VPADDB, + /* 2E3 */ ZYDIS_MNEM_VPADDD, + /* 2E4 */ ZYDIS_MNEM_VPADDQ, + /* 2E5 */ ZYDIS_MNEM_VPADDSB, + /* 2E6 */ ZYDIS_MNEM_VPADDSW, + /* 2E7 */ ZYDIS_MNEM_VPADDUSB, + /* 2E8 */ ZYDIS_MNEM_VPADDUSW, + /* 2E9 */ ZYDIS_MNEM_VPADDW, + /* 2EA */ ZYDIS_MNEM_VPALIGNR, + /* 2EB */ ZYDIS_MNEM_VPAND, + /* 2EC */ ZYDIS_MNEM_VPANDN, + /* 2ED */ ZYDIS_MNEM_VPAVGB, + /* 2EE */ ZYDIS_MNEM_VPAVGW, + /* 2EF */ ZYDIS_MNEM_VPBLENDVB, + /* 2F0 */ ZYDIS_MNEM_VPBLENDW, + /* 2F1 */ ZYDIS_MNEM_VPCLMULQDQ, + /* 2F2 */ ZYDIS_MNEM_VPCMPEQB, + /* 2F3 */ ZYDIS_MNEM_VPCMPEQD, + /* 2F4 */ ZYDIS_MNEM_VPCMPEQQ, + /* 2F5 */ ZYDIS_MNEM_VPCMPEQW, + /* 2F6 */ ZYDIS_MNEM_VPCMPESTRI, + /* 2F7 */ ZYDIS_MNEM_VPCMPESTRM, + /* 2F8 */ ZYDIS_MNEM_VPCMPGTB, + /* 2F9 */ ZYDIS_MNEM_VPCMPGTD, + /* 2FA */ ZYDIS_MNEM_VPCMPGTQ, + /* 2FB */ ZYDIS_MNEM_VPCMPGTW, + /* 2FC */ ZYDIS_MNEM_VPCMPISTRI, + /* 2FD */ ZYDIS_MNEM_VPCMPISTRM, + /* 2FE */ ZYDIS_MNEM_VPERM2F128, + /* 2FF */ ZYDIS_MNEM_VPERMILPD, + /* 300 */ ZYDIS_MNEM_VPERMILPS, + /* 301 */ ZYDIS_MNEM_VPEXTRB, + /* 302 */ ZYDIS_MNEM_VPEXTRD, + /* 303 */ ZYDIS_MNEM_VPEXTRQ, + /* 304 */ ZYDIS_MNEM_VPEXTRW, + /* 305 */ ZYDIS_MNEM_VPHADDD, + /* 306 */ ZYDIS_MNEM_VPHADDSW, + /* 307 */ ZYDIS_MNEM_VPHADDW, + /* 308 */ ZYDIS_MNEM_VPHMINPOSUW, + /* 309 */ ZYDIS_MNEM_VPHSUBD, + /* 30A */ ZYDIS_MNEM_VPHSUBSW, + /* 30B */ ZYDIS_MNEM_VPHSUBW, + /* 30C */ ZYDIS_MNEM_VPINSRB, + /* 30D */ ZYDIS_MNEM_VPINSRD, + /* 30E */ ZYDIS_MNEM_VPINSRQ, + /* 30F */ ZYDIS_MNEM_VPINSRW, + /* 310 */ ZYDIS_MNEM_VPMADDUBSW, + /* 311 */ ZYDIS_MNEM_VPMADDWD, + /* 312 */ ZYDIS_MNEM_VPMAXSB, + /* 313 */ ZYDIS_MNEM_VPMAXSD, + /* 314 */ ZYDIS_MNEM_VPMAXSW, + /* 315 */ ZYDIS_MNEM_VPMAXUB, + /* 316 */ ZYDIS_MNEM_VPMAXUD, + /* 317 */ ZYDIS_MNEM_VPMAXUW, + /* 318 */ ZYDIS_MNEM_VPMINSB, + /* 319 */ ZYDIS_MNEM_VPMINSD, + /* 31A */ ZYDIS_MNEM_VPMINSW, + /* 31B */ ZYDIS_MNEM_VPMINUB, + /* 31C */ ZYDIS_MNEM_VPMINUD, + /* 31D */ ZYDIS_MNEM_VPMINUW, + /* 31E */ ZYDIS_MNEM_VPMOVMSKB, + /* 31F */ ZYDIS_MNEM_VPMOVSXBD, + /* 320 */ ZYDIS_MNEM_VPMOVSXBQ, + /* 321 */ ZYDIS_MNEM_VPMOVSXBW, + /* 322 */ ZYDIS_MNEM_VPMOVSXWD, + /* 323 */ ZYDIS_MNEM_VPMOVSXWQ, + /* 324 */ ZYDIS_MNEM_VPMOVZXBD, + /* 325 */ ZYDIS_MNEM_VPMOVZXBQ, + /* 326 */ ZYDIS_MNEM_VPMOVZXBW, + /* 327 */ ZYDIS_MNEM_VPMOVZXDQ, + /* 328 */ ZYDIS_MNEM_VPMOVZXWD, + /* 329 */ ZYDIS_MNEM_VPMOVZXWQ, + /* 32A */ ZYDIS_MNEM_VPMULDQ, + /* 32B */ ZYDIS_MNEM_VPMULHRSW, + /* 32C */ ZYDIS_MNEM_VPMULHUW, + /* 32D */ ZYDIS_MNEM_VPMULHW, + /* 32E */ ZYDIS_MNEM_VPMULLD, + /* 32F */ ZYDIS_MNEM_VPMULLW, + /* 330 */ ZYDIS_MNEM_VPOR, + /* 331 */ ZYDIS_MNEM_VPSADBW, + /* 332 */ ZYDIS_MNEM_VPSHUFB, + /* 333 */ ZYDIS_MNEM_VPSHUFD, + /* 334 */ ZYDIS_MNEM_VPSHUFHW, + /* 335 */ ZYDIS_MNEM_VPSHUFLW, + /* 336 */ ZYDIS_MNEM_VPSIGNB, + /* 337 */ ZYDIS_MNEM_VPSIGND, + /* 338 */ ZYDIS_MNEM_VPSIGNW, + /* 339 */ ZYDIS_MNEM_VPSLLD, + /* 33A */ ZYDIS_MNEM_VPSLLDQ, + /* 33B */ ZYDIS_MNEM_VPSLLQ, + /* 33C */ ZYDIS_MNEM_VPSLLW, + /* 33D */ ZYDIS_MNEM_VPSRAD, + /* 33E */ ZYDIS_MNEM_VPSRAW, + /* 33F */ ZYDIS_MNEM_VPSRLD, + /* 340 */ ZYDIS_MNEM_VPSRLDQ, + /* 341 */ ZYDIS_MNEM_VPSRLQ, + /* 342 */ ZYDIS_MNEM_VPSRLW, + /* 343 */ ZYDIS_MNEM_VPSUBB, + /* 344 */ ZYDIS_MNEM_VPSUBD, + /* 345 */ ZYDIS_MNEM_VPSUBQ, + /* 346 */ ZYDIS_MNEM_VPSUBSB, + /* 347 */ ZYDIS_MNEM_VPSUBSW, + /* 348 */ ZYDIS_MNEM_VPSUBUSB, + /* 349 */ ZYDIS_MNEM_VPSUBUSW, + /* 34A */ ZYDIS_MNEM_VPSUBW, + /* 34B */ ZYDIS_MNEM_VPTEST, + /* 34C */ ZYDIS_MNEM_VPUNPCKHBW, + /* 34D */ ZYDIS_MNEM_VPUNPCKHDQ, + /* 34E */ ZYDIS_MNEM_VPUNPCKHQDQ, + /* 34F */ ZYDIS_MNEM_VPUNPCKHWD, + /* 350 */ ZYDIS_MNEM_VPUNPCKLBW, + /* 351 */ ZYDIS_MNEM_VPUNPCKLDQ, + /* 352 */ ZYDIS_MNEM_VPUNPCKLQDQ, + /* 353 */ ZYDIS_MNEM_VPUNPCKLWD, + /* 354 */ ZYDIS_MNEM_VPXOR, + /* 355 */ ZYDIS_MNEM_VRCPPS, + /* 356 */ ZYDIS_MNEM_VRCPSS, + /* 357 */ ZYDIS_MNEM_VROUNDPD, + /* 358 */ ZYDIS_MNEM_VROUNDPS, + /* 359 */ ZYDIS_MNEM_VROUNDSD, + /* 35A */ ZYDIS_MNEM_VROUNDSS, + /* 35B */ ZYDIS_MNEM_VRSQRTPS, + /* 35C */ ZYDIS_MNEM_VRSQRTSS, + /* 35D */ ZYDIS_MNEM_VSHUFPD, + /* 35E */ ZYDIS_MNEM_VSHUFPS, + /* 35F */ ZYDIS_MNEM_VSQRTPD, + /* 360 */ ZYDIS_MNEM_VSQRTPS, + /* 361 */ ZYDIS_MNEM_VSQRTSD, + /* 362 */ ZYDIS_MNEM_VSQRTSS, + /* 363 */ ZYDIS_MNEM_VSTMXCSR, + /* 364 */ ZYDIS_MNEM_VSUBPD, + /* 365 */ ZYDIS_MNEM_VSUBPS, + /* 366 */ ZYDIS_MNEM_VSUBSD, + /* 367 */ ZYDIS_MNEM_VSUBSS, + /* 368 */ ZYDIS_MNEM_VTESTPD, + /* 369 */ ZYDIS_MNEM_VTESTPS, + /* 36A */ ZYDIS_MNEM_VUCOMISD, + /* 36B */ ZYDIS_MNEM_VUCOMISS, + /* 36C */ ZYDIS_MNEM_VUNPCKHPD, + /* 36D */ ZYDIS_MNEM_VUNPCKHPS, + /* 36E */ ZYDIS_MNEM_VUNPCKLPD, + /* 36F */ ZYDIS_MNEM_VUNPCKLPS, + /* 370 */ ZYDIS_MNEM_VXORPD, + /* 371 */ ZYDIS_MNEM_VXORPS, + /* 372 */ ZYDIS_MNEM_VZEROALL, + /* 373 */ ZYDIS_MNEM_VZEROUPPER, + /* 374 */ ZYDIS_MNEM_WAIT, + /* 375 */ ZYDIS_MNEM_WBINVD, + /* 376 */ ZYDIS_MNEM_WRMSR, + /* 377 */ ZYDIS_MNEM_XADD, + /* 378 */ ZYDIS_MNEM_XCHG, + /* 379 */ ZYDIS_MNEM_XCRYPTCBC, + /* 37A */ ZYDIS_MNEM_XCRYPTCFB, + /* 37B */ ZYDIS_MNEM_XCRYPTCTR, + /* 37C */ ZYDIS_MNEM_XCRYPTECB, + /* 37D */ ZYDIS_MNEM_XCRYPTOFB, + /* 37E */ ZYDIS_MNEM_XGETBV, + /* 37F */ ZYDIS_MNEM_XLATB, + /* 380 */ ZYDIS_MNEM_XOR, + /* 381 */ ZYDIS_MNEM_XORPD, + /* 382 */ ZYDIS_MNEM_XORPS, + /* 383 */ ZYDIS_MNEM_XRSTOR, + /* 384 */ ZYDIS_MNEM_XSAVE, + /* 385 */ ZYDIS_MNEM_XSETBV, + /* 386 */ ZYDIS_MNEM_XSHA1, + /* 387 */ ZYDIS_MNEM_XSHA256, + /* 388 */ ZYDIS_MNEM_XSTORE, + + ZYDIS_MNEM_FORCE_WORD = 0x7FFF +} ZydisInstructionMnemonic; + +/* TODO: Port instruction definition types */ + /* ============================================================================================== */ #ifdef __cplusplus diff --git a/Zydis/ZydisInstructionFormatter.cpp b/Zydis/ZydisInstructionFormatter.cpp index a09b1a5..5866609 100644 --- a/Zydis/ZydisInstructionFormatter.cpp +++ b/Zydis/ZydisInstructionFormatter.cpp @@ -147,7 +147,7 @@ char const *BaseInstructionFormatter::outputString() return& m_outputBuffer[0]; } - void BaseInstructionFormatter::outputAppend(char const *text) + void BaseInstructionFormatter::outputAppend(char const* text) { // Get the string length including the null-terminator char size_t strLen = strlen(text) + 1; @@ -176,7 +176,7 @@ char const *BaseInstructionFormatter::outputString() } } - void BaseInstructionFormatter::outputAppendFormatted(char const *format, ...) + void BaseInstructionFormatter::outputAppendFormatted(char const* format, ...) { va_list arguments; va_start(arguments, format); diff --git a/Zydis/ZydisInstructionFormatter.hpp b/Zydis/ZydisInstructionFormatter.hpp index 2eea615..d2d8789 100644 --- a/Zydis/ZydisInstructionFormatter.hpp +++ b/Zydis/ZydisInstructionFormatter.hpp @@ -145,7 +145,7 @@ public: * @param info The instruction info. * @return Pointer to the formatted instruction string. */ - const char *formatInstruction(const InstructionInfo& info); + const char* formatInstruction(const InstructionInfo& info); public: /** * @brief Returns a pointer to the current symbol resolver. @@ -165,7 +165,7 @@ inline void BaseInstructionFormatter::outputSetUppercase(bool uppercase) m_outputUppercase = uppercase; } -inline char const *BaseInstructionFormatter::registerToString(Register reg) const +inline char const* BaseInstructionFormatter::registerToString(Register reg) const { if (reg == Register::NONE) { diff --git a/Zydis/ZydisSymbolResolver.cpp b/Zydis/ZydisSymbolResolver.cpp index 00f0a45..08b0938 100644 --- a/Zydis/ZydisSymbolResolver.cpp +++ b/Zydis/ZydisSymbolResolver.cpp @@ -40,7 +40,7 @@ BaseSymbolResolver::~BaseSymbolResolver() } -const char *BaseSymbolResolver::resolveSymbol(const InstructionInfo& /*info*/, +const char* BaseSymbolResolver::resolveSymbol(const InstructionInfo& /*info*/, uint64_t /*address*/, uint64_t& /*offset*/) { return nullptr; @@ -53,7 +53,7 @@ ExactSymbolResolver::~ExactSymbolResolver() } -const char *ExactSymbolResolver::resolveSymbol(const InstructionInfo& /*info*/, +const char* ExactSymbolResolver::resolveSymbol(const InstructionInfo& /*info*/, uint64_t address, uint64_t& offset) { std::unordered_map::const_iterator iterator = m_symbolMap.find(address); From c4cb49faa7c32ca0773144e7f3e92ee14e6b8a4b Mon Sep 17 00:00:00 2001 From: flobernd Date: Mon, 18 May 2015 16:37:31 +0200 Subject: [PATCH 32/33] Finished C-bindings export implementations --- Zydis/ZydisAPI.cpp | 91 ++++++++++++++++++++++++++++++++++++++++------ Zydis/ZydisAPI.h | 12 +++--- 2 files changed, 85 insertions(+), 18 deletions(-) diff --git a/Zydis/ZydisAPI.cpp b/Zydis/ZydisAPI.cpp index 4771676..9673beb 100644 --- a/Zydis/ZydisAPI.cpp +++ b/Zydis/ZydisAPI.cpp @@ -398,24 +398,91 @@ bool ZydisFreeInstructionFormatter(const ZydisInstructionFormatterContext* forma /* SymbolResolver =============================================================================== */ -ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateCustomSymbolResolver(/*TODO*/); +ZydisSymbolResolverContext* ZydisCreateCustomSymbolResolver(/*TODO*/) +{ + return nullptr; +} -ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateExactSymbolResolver(); +ZydisSymbolResolverContext* ZydisCreateExactSymbolResolver() +{ + return ZydisCreateContextInplace( + ZYDIS_CONTEXT_SYMBOLRESOLVER | ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); +} -ZYDIS_EXPORT bool ZydisResolveSymbol(const ZydisSymbolResolverContext* resolver, - const ZydisInstructionInfo* info, uint64_t address, const char** symbol, uint64_t* offset); +bool ZydisResolveSymbol(const ZydisSymbolResolverContext* resolver, + const ZydisInstructionInfo* info, uint64_t address, const char** symbol, uint64_t* offset) +{ + Zydis::BaseSymbolResolver* instance = + ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER); + if (!instance) + { + return false; + } + *symbol = instance->resolveSymbol(*reinterpret_cast(info), + address, *offset); + return true; +} -ZYDIS_EXPORT bool ZydisExactSymbolResolverContainsSymbol( - const ZydisSymbolResolverContext* resolver, uint64_t address, bool* containsSymbol); +bool ZydisExactSymbolResolverContainsSymbol( + const ZydisSymbolResolverContext* resolver, uint64_t address, bool* containsSymbol) +{ + Zydis::ExactSymbolResolver* instance = + ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); + if (!instance) + { + return false; + } + *containsSymbol = instance->containsSymbol(address); + return true; +} -ZYDIS_EXPORT bool ZydisExactSymbolResolverSetSymbol(const ZydisSymbolResolverContext* resolver, - uint64_t address, const char* symbol); +bool ZydisExactSymbolResolverSetSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address, const char* name) +{ + Zydis::ExactSymbolResolver* instance = + ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); + if (!instance) + { + return false; + } + instance->setSymbol(address, name); + return true; +} -ZYDIS_EXPORT bool ZydisExactSymbolResolverRemoveSymbol(const ZydisSymbolResolverContext* resolver, - uint64_t address); +bool ZydisExactSymbolResolverRemoveSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address) +{ + Zydis::ExactSymbolResolver* instance = + ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); + if (!instance) + { + return false; + } + instance->removeSymbol(address); + return true; +} -ZYDIS_EXPORT bool ZydisExactSymbolResolverClear(const ZydisSymbolResolverContext* resolver); +bool ZydisExactSymbolResolverClear(const ZydisSymbolResolverContext* resolver) +{ + Zydis::ExactSymbolResolver* instance = + ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); + if (!instance) + { + return false; + } + instance->clear(); + return true; +} -ZYDIS_EXPORT bool ZydisFreeSymbolResolver(const ZydisSymbolResolverContext* resolver); +bool ZydisFreeSymbolResolver(const ZydisSymbolResolverContext* resolver) +{ + return ZydisFreeContext( + resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER); +} /* ============================================================================================== */ \ No newline at end of file diff --git a/Zydis/ZydisAPI.h b/Zydis/ZydisAPI.h index 34209ce..78c36c2 100644 --- a/Zydis/ZydisAPI.h +++ b/Zydis/ZydisAPI.h @@ -548,15 +548,15 @@ typedef struct _ZydisInstructionInfo typedef enum _ZydisContextType { ZYDIS_CONTEXT_INPUT = 0x0080, - ZYDIS_CONTEXT_INPUT_CUSTOM = 0x0001, - ZYDIS_CONTEXT_INPUT_MEMORY = 0x0002, + ZYDIS_CONTEXT_INPUT_CUSTOM = ZYDIS_CONTEXT_INPUT | 0x0001, + ZYDIS_CONTEXT_INPUT_MEMORY = ZYDIS_CONTEXT_INPUT | 0x0002, ZYDIS_CONTEXT_INSTRUCTIONDECODER = 0x0040, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER = 0x0020, - ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_CUSTOM = 0x0001, - ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL = 0x0002, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_CUSTOM = ZYDIS_CONTEXT_INSTRUCTIONFORMATTER | 0x0001, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL = ZYDIS_CONTEXT_INSTRUCTIONFORMATTER | 0x0002, ZYDIS_CONTEXT_SYMBOLRESOLVER = 0x0010, - ZYDIS_CONTEXT_SYMBOLRESOLVER_CUSTOM = 0x0001, - ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT = 0x0002 + ZYDIS_CONTEXT_SYMBOLRESOLVER_CUSTOM = ZYDIS_CONTEXT_SYMBOLRESOLVER | 0x0001, + ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT = ZYDIS_CONTEXT_SYMBOLRESOLVER | 0x0002 } ZydisContextType; typedef struct _ZydisInputContext From 7caec91207e00ac41b21b48965abcf796bfaf797 Mon Sep 17 00:00:00 2001 From: flobernd Date: Tue, 19 May 2015 21:45:53 +0200 Subject: [PATCH 33/33] Improved C-bindings again * Implemented API for custom data souces * Internal changes --- CMakeLists.txt | 25 +- Examples/C/SimpleDemo/SimpleDemo.c | 11 +- Examples/CPP/SimpleDemo/SimpleDemo.cpp | 109 +++++++ README.md | 3 +- Zydis/ZydisAPI.cpp | 379 ++++++++++++++++++------- Zydis/ZydisAPI.h | 71 +++-- 6 files changed, 437 insertions(+), 161 deletions(-) create mode 100644 Examples/CPP/SimpleDemo/SimpleDemo.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8496c59..934e304 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,10 +44,10 @@ endif () # Library set(headers - "Zydis/Zydis.hpp" - "Zydis/ZydisInstructionDecoder.hpp" + "Zydis/Zydis.hpp" + "Zydis/ZydisInstructionDecoder.hpp" "Zydis/ZydisInstructionFormatter.hpp" - "Zydis/ZydisOpcodeTable.hpp" + "Zydis/ZydisOpcodeTable.hpp" "Zydis/ZydisSymbolResolver.hpp" "Zydis/ZydisTypes.hpp" "Zydis/ZydisUtils.hpp") @@ -57,12 +57,12 @@ set(sources "Zydis/ZydisOpcodeTable.cpp" "Zydis/ZydisSymbolResolver.cpp" "Zydis/ZydisUtils.cpp") - + if (BUILD_C_BINDINGS) - set(headers ${headers} - "Zydis/ZydisAPI.h") - set(sources ${sources} - "Zydis/ZydisAPI.cpp") + set(headers ${headers} + "Zydis/ZydisAPI.h") + set(sources ${sources} + "Zydis/ZydisAPI.cpp") endif () add_library("Zydis" ${headers} ${sources}) @@ -76,8 +76,13 @@ include_directories(${PROJECT_BINARY_DIR}) if (BUILD_EXAMPLES) include_directories("Zydis") - add_executable("C_SimpleDemo" "Examples/C/SimpleDemo/SimpleDemo.c") - target_link_libraries("C_SimpleDemo" "Zydis") + add_executable("SimpleDemo_CPP" "Examples/CPP/SimpleDemo/SimpleDemo.cpp") + target_link_libraries("SimpleDemo_CPP" "Zydis") + + if (BUILD_C_BINDINGS) + add_executable("SimpleDemo_C" "Examples/C/SimpleDemo/SimpleDemo.c") + target_link_libraries("SimpleDemo_C" "Zydis") + endif () endif () set(CONFIGURED_ONCE TRUE CACHE INTERNAL "CMake has configured at least once.") diff --git a/Examples/C/SimpleDemo/SimpleDemo.c b/Examples/C/SimpleDemo/SimpleDemo.c index 700e260..1484985 100644 --- a/Examples/C/SimpleDemo/SimpleDemo.c +++ b/Examples/C/SimpleDemo/SimpleDemo.c @@ -92,24 +92,24 @@ int main() decoder = ZydisCreateInstructionDecoder(); if (!decoder) { - goto FreeZydisDecoder; + goto ZydisError; } formatter = ZydisCreateIntelInstructionFormatter(); if (!formatter) { - goto FreeZydisFormatter; + goto FreeZydisDecoder; } // Create memory data sources input32 = ZydisCreateMemoryInput(&data32[0], sizeof(data32)); if (!input32) { - goto FreeZydisInput32; + goto FreeZydisFormatter; } input64 = ZydisCreateMemoryInput(&data64[0], sizeof(data64)); if (!input64) { - goto FreeZydisInput64; + goto FreeZydisInput32; } // Set decoder properties @@ -148,6 +148,8 @@ int main() ZydisSetDisassemblerMode(decoder, ZYDIS_DM_M64BIT); ZydisSetDataSource(decoder, input64); ZydisSetInstructionPointer(decoder, 0x00007FFA39A81930ull); + + // Decode and format all instructions puts("64 bit test ...\n\n"); while (ZydisDecodeInstruction(decoder, &info)) { @@ -181,6 +183,7 @@ FreeZydisFormatter: ZydisFreeInstructionFormatter(formatter); FreeZydisDecoder: ZydisFreeInstructionDecoder(decoder); +ZydisError: if (ZydisGetLastError() != ZYDIS_ERROR_SUCCESS) { diff --git a/Examples/CPP/SimpleDemo/SimpleDemo.cpp b/Examples/CPP/SimpleDemo/SimpleDemo.cpp new file mode 100644 index 0000000..2bf03fb --- /dev/null +++ b/Examples/CPP/SimpleDemo/SimpleDemo.cpp @@ -0,0 +1,109 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include +#include +#include +#include + +int main() +{ + uint8_t data32[] = + { + 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x6A, 0xFE, 0x68, 0xD8, 0x18, 0x09, 0x77, 0x68, 0x85, 0xD2, + 0x09, 0x77, 0x64, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x50, 0x83, 0xEC, 0x14, 0x53, 0x56, 0x57, + 0xA1, 0x68, 0xEE, 0x13, 0x77, 0x31, 0x45, 0xF8, 0x33, 0xC5, 0x50, 0x8D, 0x45, 0xF0, 0x64, + 0xA3, 0x00, 0x00, 0x00, 0x00, 0x89, 0x65, 0xE8, 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x8B, 0x5D, 0x08, 0xF6, 0xC3, 0x04, 0x0F, 0x85, 0x57, 0x74, 0x00, 0x00, 0x53, 0x6A, 0x00, + 0xFF, 0x35, 0xA0, 0xE3, 0x13, 0x77, 0xFF, 0x15, 0x00, 0x10, 0x14, 0x77, 0x85, 0xC0, 0x0F, + 0x84, 0xC6, 0x48, 0x04, 0x00, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xFC, + 0xFE, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0x8B, 0x4D, 0xF0, 0x64, 0x89, 0x0D, 0x00, 0x00, 0x00, + 0x00, 0x59, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00 + }; + uint8_t data64[] = + { + 0x48, 0x89, 0x5C, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4C, 0x24, 0x08, 0x57, + 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xEC, 0x40, 0x4C, 0x8B, 0xF2, + 0x8B, 0xD9, 0x48, 0xC7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x33, 0xF6, 0x48, 0x89, + 0x74, 0x24, 0x30, 0x45, 0x33, 0xFF, 0xF7, 0xC1, 0x8D, 0xF0, 0xFF, 0xFF, 0x0F, 0x85, 0xAA, + 0x53, 0x08, 0x00, 0xF6, 0xC1, 0x40, 0x8B, 0xFE, 0x41, 0xBD, 0x08, 0x00, 0x00, 0x00, 0x41, + 0x0F, 0x45, 0xFD, 0xF6, 0xC1, 0x02, 0x48, 0x8B, 0x0D, 0x10, 0xD4, 0x0E, 0x00, 0x0F, 0x85, + 0x40, 0xE1, 0x01, 0x00, 0x8B, 0x15, 0x4C, 0xD5, 0x0E, 0x00, 0x81, 0xC2, 0x00, 0x00, 0x14, + 0x00, 0x0B, 0xD7, 0x4D, 0x8B, 0xC6, 0xFF, 0x15, 0x3B, 0x2F, 0x10, 0x00, 0x48, 0x8B, 0xD8, + 0x48, 0x85, 0xC0, 0x0F, 0x84, 0x93, 0x78, 0x0A, 0x00, 0x48, 0x8B, 0xC3, 0x48, 0x8B, 0x5C, + 0x24, 0x78, 0x48, 0x8B, 0xB4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0x40, 0x41, + 0x5F, 0x41, 0x5E, 0x41, 0x5D, 0x41, 0x5C, 0x5F, 0xC3 + }; + + Zydis::InstructionInfo info; + Zydis::InstructionDecoder decoder; + Zydis::IntelInstructionFormatter formatter; + Zydis::MemoryInput input32(&data32[0], sizeof(data32)); + Zydis::MemoryInput input64(&data64[0], sizeof(data64)); + + decoder.setDisassemblerMode(Zydis::DisassemblerMode::M32BIT); + decoder.setDataSource(&input32); + decoder.setInstructionPointer(0x77091852); + std::cout << "32 bit test ..." << std::endl << std::endl; + while (decoder.decodeInstruction(info)) + { + std::cout << std::hex << std::setw(8) << std::setfill('0') << std::uppercase + << info.instrAddress << " "; + if (info.flags & Zydis::IF_ERROR_MASK) + { + std::cout << "db " << std::setw(2) << info.data[0]; + } else + { + std::cout << formatter.formatInstruction(info) << std::endl; + } + } + + std::cout << std::endl; + + decoder.setDisassemblerMode(Zydis::DisassemblerMode::M64BIT); + decoder.setDataSource(&input64); + decoder.setInstructionPointer(0x00007FFA39A81930ull); + std::cout << "64 bit test ..." << std::endl << std::endl; + while (decoder.decodeInstruction(info)) + { + std::cout << std::hex << std::setw(16) << std::setfill('0') << std::uppercase + << info.instrAddress << " "; + if (info.flags & Zydis::IF_ERROR_MASK) + { + std::cout << "db " << std::setw(2) << info.data[0]; + } else + { + std::cout << formatter.formatInstruction(info) << std::endl; + } + } + + std::cin.get(); + return 0; +} \ No newline at end of file diff --git a/README.md b/README.md index a8677ba..d6bf326 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,7 @@ int _tmain(int argc, _TCHAR* argv[]) ## Compilation ## -- While Zydis supports other compilers in theory, compilation has not been tested with any compiler other than MSVC12 (Visual Studio 2013) -- Multi-compiler support might be added in the future +Zydis builds cleanly on most platforms without any external dependencies. You can use CMake to generate project files for your favorite C++14 compiler. ## License ## Zyan Disassembler Engine is licensed under the MIT License. Dependencies are under their respective licenses. diff --git a/Zydis/ZydisAPI.cpp b/Zydis/ZydisAPI.cpp index 9673beb..e26dc26 100644 --- a/Zydis/ZydisAPI.cpp +++ b/Zydis/ZydisAPI.cpp @@ -32,6 +32,8 @@ #include "ZydisInstructionDecoder.hpp" #include "ZydisInstructionFormatter.hpp" +/* Static Checks ================================================================================ */ + static_assert( sizeof(ZydisOperandInfo) == sizeof(Zydis::OperandInfo), "struct size mismatch"); @@ -56,81 +58,229 @@ void ZydisSetLastError(uint32_t errorCode) /* Conversion Helper ============================================================================ */ -template -ContextT* ZydisCreateContextInplace(uint8_t contextType, InstanceCtorArgsT... args) +typedef enum _ZydisClassType { - ContextT* context = new (std::nothrow) ContextT; - if (!context) + ZYDIS_CONTEXT_INPUT = 0x00000080, + ZYDIS_CONTEXT_INPUT_CUSTOM = ZYDIS_CONTEXT_INPUT | 0x00000001, + ZYDIS_CONTEXT_INPUT_MEMORY = ZYDIS_CONTEXT_INPUT | 0x00000002, + ZYDIS_CONTEXT_INSTRUCTIONDECODER = 0x00000040, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER = 0x00000020, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_CUSTOM = ZYDIS_CONTEXT_INSTRUCTIONFORMATTER | 0x00000001, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL = ZYDIS_CONTEXT_INSTRUCTIONFORMATTER | 0x00000002, + ZYDIS_CONTEXT_SYMBOLRESOLVER = 0x00000010, + ZYDIS_CONTEXT_SYMBOLRESOLVER_CUSTOM = ZYDIS_CONTEXT_SYMBOLRESOLVER | 0x00000001, + ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT = ZYDIS_CONTEXT_SYMBOLRESOLVER | 0x00000002 +} ZydisClassType; + +/** + * @brief This helper class extends a zydis class with a type field. It is used by the C-bindings + * to check type correctness for input parameters. + * @param ZydisClassT The zydis class type. + */ +#pragma pack(push, 1) +template +class ZydisClassEx final +{ +private: + using FullClassT = ZydisClassEx; +public: + uint32_t type; + std::conditional_t::value, char, ZydisClassT> instance; +public: + /** + * @brief Constructor + * @param InstanceCtorArgsT The argument types for the constructor of the zydis class. + * @param classType The type of the zydis class. + * @param args... The arguments for the constructor of the zydis class. + */ + template< + typename ZydisClassTT=ZydisClassT, + std::enable_if_t::value, int> = 0, + typename... InstanceCtorArgsT> + ZydisClassEx(uint32_t classType, InstanceCtorArgsT... args) + : type(classType) + , instance(args...) { }; +public: + /** + * @brief Returns the class type. + * @return The assigned class type. + */ + uint32_t getClassType() const + { + return type; + } + /** + * @brief Returns the zydis class instance. + * @return Pointer to the zydis class instance. + */ + ZydisClassT* getInstance() + { + return reinterpret_cast(&instance); + } +public: + /** + * @brief Casts the given instance to @c ZydisClassEx. + * @param instance The zydis class instance. + * @return Pointer to the @c ZydisClassEx instance. + */ + static FullClassT* fromInstance(ZydisClassT* instance) + { + return reinterpret_cast( + reinterpret_cast(instance) - offsetof(FullClassT, instance)); + } +}; +#pragma pack(pop) + +/** + * @brief Creates a context by constructing a new wrapped zydis class instance. + * @param ContextClassT The context class. + * @param ZydisClassT The zydis class type. + * @param ZydisClassCtorArgsT The argument types for the constructor of the zydis class. + * @param classType The type of the zydis class. + * @param args... The arguments for the constructor of the zydis class. + */ +template +ContextClassT* ZydisCreateContext(uint32_t classType, ZydisClassCtorArgsT... args) +{ + auto instanceEx = new (std::nothrow) ZydisClassEx(classType, args...); + if (!instanceEx) { ZydisSetLastError(ZYDIS_ERROR_NOT_ENOUGH_MEMORY); return nullptr; } - context->type = contextType; - context->object = new (std::nothrow) InstanceT(args...); - if (!context->object) - { - delete context; - ZydisSetLastError(ZYDIS_ERROR_NOT_ENOUGH_MEMORY); - return nullptr; - } - return context; + // Return the original instance as context. + return reinterpret_cast(instanceEx->getInstance()); } -template -ContextT* ZydisCreateContext(uint8_t contextType, InstanceT* instance) +/** + * @brief Retrieves the zydis class instance of the given context. + * @param ContextClassT The context class. + * @param ZydisClassT The zydis class type. + * @param expectedType The expected type of the zydis class. + */ +template +ZydisClassT* ZydisRetrieveInstance(uint32_t expectedType, const ContextClassT* context) { - ContextT* context = new (std::nothrow) ContextT; - if (!context) - { - ZydisSetLastError(ZYDIS_ERROR_NOT_ENOUGH_MEMORY); - return nullptr; - } - context->type = contextType; - context->object = instance; - return context; -} - -template -bool ZydisFreeContext(const ContextT* context, uint8_t expectedType) -{ - InstanceT* instance = ZydisCast(context, expectedType); - if (!instance) - { - return false; - } - delete instance; - delete context; - return true; -} - -template -InstanceT* ZydisCast(const ContextT* input, uint8_t expectedType) -{ - if (!input || !input->object || ((input->type & expectedType) != expectedType)) + auto instanceEx = ZydisClassEx::fromInstance( + reinterpret_cast(const_cast(context))); + if ((instanceEx->getClassType() & expectedType) != expectedType) { ZydisSetLastError(ZYDIS_ERROR_INVALID_PARAMETER); return nullptr; } - return reinterpret_cast(input->object); + // The context points to the same address as the instance. We just need to cast it. + return reinterpret_cast(const_cast(context)); +} + +/** + * @brief Creates a context by constructing a new wrapped zydis instance. + * @param ContextClassT The context class. + * @param ZydisClassT The zydis class type. + * @param expectedType The expected type of the zydis class. + */ +template +bool ZydisFreeContext(uint32_t expectedType, const ContextClassT* context) +{ + auto instanceEx = ZydisClassEx::fromInstance( + reinterpret_cast(const_cast(context))); + if ((instanceEx->getClassType() & expectedType) != expectedType) + { + ZydisSetLastError(ZYDIS_ERROR_INVALID_PARAMETER); + return false; + } + delete instanceEx; + return true; } /* Input ======================================================================================== */ -ZydisInputContext* ZydisCreateCustomInput(/* TODO */) +/** + * @brief Helper class for custom input implementations. + */ +class ZydisCustomInput : public Zydis::BaseInput { - return nullptr; +private: + void* m_userData; + ZydisCustomDestructorT m_cbDestructor; + ZydisCustomInputPeekT m_cbPeek; + ZydisCustomInputNextT m_cbNext; + ZydisCustomInputIsEndOfInputT m_cbIsEndOfInput; + ZydisCustomInputGetPositionT m_cbGetPosition; + ZydisCustomInputSetPositionT m_cbSetPosition; +protected: + uint8_t internalInputPeek() override + { + return m_cbPeek(m_userData); + } + + uint8_t internalInputNext() override + { + return m_cbNext(m_userData); + } +public: + ZydisCustomInput(void* userData, + ZydisCustomInputPeekT cbPeek, ZydisCustomInputNextT cbNext, + ZydisCustomInputIsEndOfInputT cbIsEndOfInput, ZydisCustomInputGetPositionT cbGetPosition, + ZydisCustomInputSetPositionT cbSetPosition, ZydisCustomDestructorT cbDestructor) + : m_userData(userData) + , m_cbDestructor(cbDestructor) + , m_cbPeek(cbPeek) + , m_cbNext(cbNext) + , m_cbIsEndOfInput(cbIsEndOfInput) + , m_cbGetPosition(cbGetPosition) + , m_cbSetPosition(cbSetPosition) + { + + } + + ~ZydisCustomInput() override + { + if (m_cbDestructor) + { + m_cbDestructor(m_userData); + } + } +public: + bool isEndOfInput() const override + { + return m_cbIsEndOfInput(m_userData); + } + + uint64_t getPosition() const override + { + return m_cbGetPosition(m_userData); + } + + bool setPosition(uint64_t position) override + { + return m_cbSetPosition(m_userData, position); + } +}; + +ZydisInputContext* ZydisCreateCustomInput(void* userData, + ZydisCustomInputPeekT cbPeek, ZydisCustomInputNextT cbNext, + ZydisCustomInputIsEndOfInputT cbIsEndOfInput, ZydisCustomInputGetPositionT cbGetPosition, + ZydisCustomInputSetPositionT cbSetPosition, ZydisCustomDestructorT cbDestructor) +{ + if (!cbPeek || !cbNext || !cbIsEndOfInput || !cbGetPosition || !cbSetPosition) + { + ZydisSetLastError(ZYDIS_ERROR_INVALID_PARAMETER); + return nullptr; + } + return ZydisCreateContext(ZYDIS_CONTEXT_INPUT_CUSTOM, + userData, cbPeek, cbNext, cbIsEndOfInput, cbGetPosition, cbSetPosition, cbDestructor); } ZydisInputContext* ZydisCreateMemoryInput(const void* buffer, size_t bufferLen) { - return ZydisCreateContextInplace( - ZYDIS_CONTEXT_INPUT | ZYDIS_CONTEXT_INPUT_MEMORY, buffer, bufferLen); + return ZydisCreateContext( + ZYDIS_CONTEXT_INPUT_MEMORY, buffer, bufferLen); } bool ZydisIsEndOfInput(const ZydisInputContext* input, bool* isEndOfInput) { Zydis::BaseInput* instance = - ZydisCast(input, ZYDIS_CONTEXT_INPUT); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INPUT, input); if (!instance) { return false; @@ -142,7 +292,7 @@ bool ZydisIsEndOfInput(const ZydisInputContext* input, bool* isEndOfInput) bool ZydisGetInputPosition(const ZydisInputContext* input, uint64_t* position) { Zydis::BaseInput* instance = - ZydisCast(input, ZYDIS_CONTEXT_INPUT); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INPUT, input); if (!instance) { return false; @@ -154,7 +304,7 @@ bool ZydisGetInputPosition(const ZydisInputContext* input, uint64_t* position) bool ZydisSetInputPosition(const ZydisInputContext* input, uint64_t position) { Zydis::BaseInput* instance = - ZydisCast(input, ZYDIS_CONTEXT_INPUT); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INPUT, input); if (!instance) { return false; @@ -165,23 +315,39 @@ bool ZydisSetInputPosition(const ZydisInputContext* input, uint64_t position) bool ZydisFreeInput(const ZydisInputContext* input) { - return ZydisFreeContext(input, ZYDIS_CONTEXT_INPUT); + return ZydisFreeContext(ZYDIS_CONTEXT_INPUT, input); } /* InstructionDecoder =========================================================================== */ ZydisInstructionDecoderContext* ZydisCreateInstructionDecoder() { - return ZydisCreateContextInplace( + return ZydisCreateContext( ZYDIS_CONTEXT_INSTRUCTIONDECODER); } +ZydisInstructionDecoderContext* ZydisCreateInstructionDecoderEx( + const ZydisInputContext* input, ZydisDisassemblerMode disassemblerMode, + ZydisInstructionSetVendor preferredVendor, uint64_t instructionPointer) +{ + Zydis::BaseInput* object = + ZydisRetrieveInstance(ZYDIS_CONTEXT_INPUT, input); + if (!object) + { + return nullptr; + } + return ZydisCreateContext( + ZYDIS_CONTEXT_INSTRUCTIONDECODER, object, + static_cast(disassemblerMode), + static_cast(preferredVendor), instructionPointer); +} + bool ZydisDecodeInstruction(const ZydisInstructionDecoderContext* decoder, ZydisInstructionInfo* info) { Zydis::InstructionDecoder* instance = - ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); if (!instance) { return false; @@ -194,14 +360,13 @@ bool ZydisGetDataSource(const ZydisInstructionDecoderContext* decoder, ZydisInputContext** input) { Zydis::InstructionDecoder* instance = - ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); if (!instance) { return false; } - *input = ZydisCreateContext(ZYDIS_CONTEXT_INPUT, instance->getDataSource()); + *input = reinterpret_cast(instance->getDataSource()); if (!input) { return false; @@ -213,14 +378,14 @@ bool ZydisSetDataSource(const ZydisInstructionDecoderContext* decoder, ZydisInputContext* input) { Zydis::InstructionDecoder* instance = - ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); if (!instance) { return false; } Zydis::BaseInput* object = - ZydisCast(input, ZYDIS_CONTEXT_INPUT); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INPUT, input); if (!object) { return false; @@ -233,8 +398,8 @@ bool ZydisGetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, ZydisDisassemblerMode* disassemblerMode) { Zydis::InstructionDecoder* instance = - ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); if (!instance) { return false; @@ -247,8 +412,8 @@ bool ZydisSetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, ZydisDisassemblerMode disassemblerMode) { Zydis::InstructionDecoder* instance = - ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); if (!instance) { return false; @@ -261,8 +426,8 @@ bool ZydisGetPreferredVendor(const ZydisInstructionDecoderContext* decoder, ZydisInstructionSetVendor* preferredVendor) { Zydis::InstructionDecoder* instance = - ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); if (!instance) { return false; @@ -275,8 +440,8 @@ bool ZydisSetPreferredVendor(const ZydisInstructionDecoderContext* decoder, ZydisInstructionSetVendor preferredVendor) { Zydis::InstructionDecoder* instance = - ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); if (!instance) { return false; @@ -289,8 +454,8 @@ bool ZydisSetPreferredVendor(const ZydisInstructionDecoderContext* decoder, uint64_t* instructionPointer) { Zydis::InstructionDecoder* instance = - ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); if (!instance) { return false; @@ -303,8 +468,8 @@ bool ZydisSetInstructionPointer(const ZydisInstructionDecoderContext* decoder, uint64_t instructionPointer) { Zydis::InstructionDecoder* instance = - ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); if (!instance) { return false; @@ -315,9 +480,8 @@ bool ZydisSetInstructionPointer(const ZydisInstructionDecoderContext* decoder, bool ZydisFreeInstructionDecoder(const ZydisInstructionDecoderContext* decoder) { - return ZydisFreeContext< - ZydisInstructionDecoderContext, Zydis::InstructionDecoder>( - decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + return ZydisFreeContext( + ZYDIS_CONTEXT_INSTRUCTIONDECODER, decoder); } /* InstructionFormatter ========================================================================= */ @@ -329,17 +493,16 @@ ZydisInstructionFormatterContext* ZydisCreateCustomInstructionFormatter(/* TODO ZydisInstructionFormatterContext* ZydisCreateIntelInstructionFormatter() { - return ZydisCreateContextInplace( - ZYDIS_CONTEXT_INSTRUCTIONFORMATTER | ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL); + return ZydisCreateContext(ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL); } bool ZydisFormatInstruction(const ZydisInstructionFormatterContext* formatter, const ZydisInstructionInfo* info, const char** instructionText) { - Zydis::IntelInstructionFormatter* instance = - ZydisCast(formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + Zydis::BaseInstructionFormatter* instance = + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONFORMATTER, formatter); if (!instance) { return false; @@ -352,15 +515,14 @@ bool ZydisFormatInstruction(const ZydisInstructionFormatterContext* formatter, bool ZydisGetSymbolResolver(const ZydisInstructionFormatterContext* formatter, ZydisSymbolResolverContext** resolver) { - Zydis::IntelInstructionFormatter* instance = - ZydisCast(formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + Zydis::BaseInstructionFormatter* instance = + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONFORMATTER, formatter); if (!instance) { return false; } - *resolver = ZydisCreateContext(ZYDIS_CONTEXT_SYMBOLRESOLVER, instance->getSymbolResolver()); + *resolver = reinterpret_cast(instance->getSymbolResolver()); if (!resolver) { return false; @@ -371,16 +533,16 @@ bool ZydisGetSymbolResolver(const ZydisInstructionFormatterContext* formatter, bool ZydisSetSymbolResolver(const ZydisInstructionFormatterContext* formatter, ZydisSymbolResolverContext* resolver) { - Zydis::IntelInstructionFormatter* instance = - ZydisCast(formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + Zydis::BaseInstructionFormatter* instance = + ZydisRetrieveInstance(ZYDIS_CONTEXT_INSTRUCTIONFORMATTER, formatter); if (!instance) { return false; } Zydis::BaseSymbolResolver* object = - ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_SYMBOLRESOLVER, resolver); if (!object) { return false; @@ -391,9 +553,8 @@ bool ZydisSetSymbolResolver(const ZydisInstructionFormatterContext* formatter, bool ZydisFreeInstructionFormatter(const ZydisInstructionFormatterContext* formatter) { - return ZydisFreeContext< - ZydisInstructionFormatterContext, Zydis::BaseInstructionFormatter>( - formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + return ZydisFreeContext( + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER, formatter); } /* SymbolResolver =============================================================================== */ @@ -405,16 +566,16 @@ ZydisSymbolResolverContext* ZydisCreateCustomSymbolResolver(/*TODO*/) ZydisSymbolResolverContext* ZydisCreateExactSymbolResolver() { - return ZydisCreateContextInplace( - ZYDIS_CONTEXT_SYMBOLRESOLVER | ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); + return ZydisCreateContext( + ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); } bool ZydisResolveSymbol(const ZydisSymbolResolverContext* resolver, const ZydisInstructionInfo* info, uint64_t address, const char** symbol, uint64_t* offset) { Zydis::BaseSymbolResolver* instance = - ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER); + ZydisRetrieveInstance(ZYDIS_CONTEXT_SYMBOLRESOLVER, resolver); if (!instance) { return false; @@ -428,8 +589,8 @@ bool ZydisExactSymbolResolverContainsSymbol( const ZydisSymbolResolverContext* resolver, uint64_t address, bool* containsSymbol) { Zydis::ExactSymbolResolver* instance = - ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); + ZydisRetrieveInstance(ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT, resolver); if (!instance) { return false; @@ -442,8 +603,8 @@ bool ZydisExactSymbolResolverSetSymbol(const ZydisSymbolResolverContext* resolve uint64_t address, const char* name) { Zydis::ExactSymbolResolver* instance = - ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); + ZydisRetrieveInstance(ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT, resolver); if (!instance) { return false; @@ -456,8 +617,8 @@ bool ZydisExactSymbolResolverRemoveSymbol(const ZydisSymbolResolverContext* reso uint64_t address) { Zydis::ExactSymbolResolver* instance = - ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); + ZydisRetrieveInstance(ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT, resolver); if (!instance) { return false; @@ -469,8 +630,8 @@ bool ZydisExactSymbolResolverRemoveSymbol(const ZydisSymbolResolverContext* reso bool ZydisExactSymbolResolverClear(const ZydisSymbolResolverContext* resolver) { Zydis::ExactSymbolResolver* instance = - ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT); + ZydisRetrieveInstance(ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT, resolver); if (!instance) { return false; @@ -482,7 +643,7 @@ bool ZydisExactSymbolResolverClear(const ZydisSymbolResolverContext* resolver) bool ZydisFreeSymbolResolver(const ZydisSymbolResolverContext* resolver) { return ZydisFreeContext( - resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER); + ZYDIS_CONTEXT_SYMBOLRESOLVER, resolver); } /* ============================================================================================== */ \ No newline at end of file diff --git a/Zydis/ZydisAPI.h b/Zydis/ZydisAPI.h index 78c36c2..a5a8b29 100644 --- a/Zydis/ZydisAPI.h +++ b/Zydis/ZydisAPI.h @@ -42,7 +42,7 @@ extern "C" { #endif -/* Types ======================================================================================== */ +/* Zydis Types ================================================================================== */ /** * @brief Values that represent additional flags of a decoded instruction. @@ -543,45 +543,37 @@ typedef struct _ZydisInstructionInfo uint64_t instrPointer; } ZydisInstructionInfo; -/* Context Types ================================================================================ */ +/* Context Declarations ========================================================================= */ -typedef enum _ZydisContextType -{ - ZYDIS_CONTEXT_INPUT = 0x0080, - ZYDIS_CONTEXT_INPUT_CUSTOM = ZYDIS_CONTEXT_INPUT | 0x0001, - ZYDIS_CONTEXT_INPUT_MEMORY = ZYDIS_CONTEXT_INPUT | 0x0002, - ZYDIS_CONTEXT_INSTRUCTIONDECODER = 0x0040, - ZYDIS_CONTEXT_INSTRUCTIONFORMATTER = 0x0020, - ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_CUSTOM = ZYDIS_CONTEXT_INSTRUCTIONFORMATTER | 0x0001, - ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL = ZYDIS_CONTEXT_INSTRUCTIONFORMATTER | 0x0002, - ZYDIS_CONTEXT_SYMBOLRESOLVER = 0x0010, - ZYDIS_CONTEXT_SYMBOLRESOLVER_CUSTOM = ZYDIS_CONTEXT_SYMBOLRESOLVER | 0x0001, - ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT = ZYDIS_CONTEXT_SYMBOLRESOLVER | 0x0002 -} ZydisContextType; +typedef struct _ZydisInputContext { int dummy; } ZydisInputContext; -typedef struct _ZydisInputContext -{ - uint8_t type; - void* object; -} ZydisInputContext; +typedef struct _ZydisInstructionDecoderContext { int dummy; } ZydisInstructionDecoderContext; -typedef struct _ZydisInstructionDecoderContext -{ - uint8_t type; - void* object; -} ZydisInstructionDecoderContext; +typedef struct _ZydisInstructionFormatterContext { int dummy; } ZydisInstructionFormatterContext; -typedef struct _ZydisInstructionFormatterContext -{ - uint8_t type; - void* object; -} ZydisInstructionFormatterContext; +typedef struct _ZydisSymbolResolverContext { int dummy; } ZydisSymbolResolverContext; -typedef struct _ZydisSymbolResolverContext -{ - uint8_t type; - void* object; -} ZydisSymbolResolverContext; +/* Callback Declarations ======================================================================== */ + +/* General -------------------------------------------------------------------------------------- */ + +typedef void (*ZydisCustomDestructorT)(void* userData); + +/* Input ---------------------------------------------------------------------------------------- */ + +typedef uint8_t (*ZydisCustomInputPeekT)(void* userData); +typedef uint8_t (*ZydisCustomInputNextT)(void* userData); +typedef bool (*ZydisCustomInputIsEndOfInputT)(void* userData); +typedef uint64_t (*ZydisCustomInputGetPositionT)(void* userData); +typedef bool (*ZydisCustomInputSetPositionT)(void* userData, uint64_t position); + +/* InstructionFormatter ------------------------------------------------------------------------- */ + +// TODO: + +/* SymbolResolver ------------------------------------------------------------------------------- */ + +// TODO: /* Error Handling =============================================================================== */ @@ -597,7 +589,10 @@ ZYDIS_EXPORT uint32_t ZydisGetLastError(); /* Input ======================================================================================== */ -ZYDIS_EXPORT ZydisInputContext* ZydisCreateCustomInput(/* TODO */); +ZYDIS_EXPORT ZydisInputContext* ZydisCreateCustomInput(void* userData, + ZydisCustomInputPeekT cbPeek, ZydisCustomInputNextT cbNext, + ZydisCustomInputIsEndOfInputT cbIsEndOfInput, ZydisCustomInputGetPositionT cbGetPosition, + ZydisCustomInputSetPositionT cbSetPosition, ZydisCustomDestructorT cbDestructor); ZYDIS_EXPORT ZydisInputContext* ZydisCreateMemoryInput(const void* buffer, size_t bufferLen); @@ -633,6 +628,10 @@ typedef enum _ZydisInstructionSetVendor /* : uint8_t */ ZYDIS_EXPORT ZydisInstructionDecoderContext* ZydisCreateInstructionDecoder(); +ZYDIS_EXPORT ZydisInstructionDecoderContext* ZydisCreateInstructionDecoderEx( + const ZydisInputContext* input, ZydisDisassemblerMode disassemblerMode, + ZydisInstructionSetVendor preferredVendor, uint64_t instructionPointer); + ZYDIS_EXPORT bool ZydisDecodeInstruction(const ZydisInstructionDecoderContext* decoder, ZydisInstructionInfo* info);