/** @file Instruction parsing support definitions. Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __INSTRUCTION_PARSING_H__ #define __INSTRUCTION_PARSING_H__ #include #include // // Instruction REX prefix definition // typedef union { struct { UINT8 BitB : 1; UINT8 BitX : 1; UINT8 BitR : 1; UINT8 BitW : 1; UINT8 Rex : 4; } Bits; UINT8 Uint8; } INSTRUCTION_REX_PREFIX; // // Instruction ModRM definition // typedef union { struct { UINT8 Rm : 3; UINT8 Reg : 3; UINT8 Mod : 2; } Bits; UINT8 Uint8; } INSTRUCTION_MODRM; // // Instruction SIB definition // typedef union { struct { UINT8 Base : 3; UINT8 Index : 3; UINT8 Scale : 2; } Bits; UINT8 Uint8; } INSTRUCTION_SIB; // // Legacy Instruction Prefixes // #define OVERRIDE_SEGMENT_CS 0x2E #define OVERRIDE_SEGMENT_DS 0x3E #define OVERRIDE_SEGMENT_ES 0x26 #define OVERRIDE_SEGMENT_SS 0x36 #define OVERRIDE_SEGMENT_FS 0x64 #define OVERRIDE_SEGMENT_GS 0x65 #define OVERRIDE_OPERAND_SIZE 0x66 #define OVERRIDE_ADDRESS_SIZE 0x67 #define LOCK_PREFIX 0xF0 #define REPNZ_PREFIX 0xF2 #define REPZ_PREFIX 0xF3 // // REX Prefixes // #define REX_PREFIX_START 0x40 #define REX_PREFIX_STOP 0x4F #define REX_64BIT_OPERAND_SIZE_MASK 0x08 // // Two-byte Opcode Flag // #define TWO_BYTE_OPCODE_ESCAPE 0x0F #endif