/** @file | |
Instruction parsing support definitions. | |
Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef __INSTRUCTION_PARSING_H__ | |
#define __INSTRUCTION_PARSING_H__ | |
#include <Base.h> | |
#include <Uefi.h> | |
// | |
// 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 |