windows-nt/Source/XPSP1/NT/base/wow64/mscpu/inc/instr.h
2020-09-26 16:20:57 +08:00

87 lines
1.7 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
instr.h
Abstract:
This module contains structures, enums and constants used to define the
Intel instruction stream.
Author:
Dave Hastings (daveh) creation-date 23-Jun-1995
Revision History:
--*/
#ifndef _INSTR_H_
#define _INSTR_H_
// We need the definitions of Entry Points for the instruction structure
#include "entrypt.h"
//
// This enumeration defines all of the possible operations.
// N.B. It is also used to find the fragment corresponding to the
// operation.
//
typedef enum _Operation {
#define DEF_INSTR(OpName, FlagsNeeded, FlagsSet, RegsSet, Opfl, FastPlaceFn, SlowPlaceFn, FragName) OpName,
#include "idata.h"
OP_MAX
} OPERATION, *POPERATION;
typedef enum _PlaceFn {
#define DEF_PLACEFN(Name) FN_ ## Name,
#include "fndata.h"
FN_MAX
} PLACEFN;
typedef struct _Operand {
enum {
OPND_NONE = 0,
OPND_NOCODEGEN,
OPND_REGREF,
OPND_REGVALUE,
OPND_ADDRREF,
OPND_ADDRVALUE32,
OPND_ADDRVALUE16,
OPND_ADDRVALUE8,
OPND_IMM,
OPND_MOVTOREG,
OPND_MOVREGTOREG,
OPND_MOVTOMEM,
} Type;
ULONG Immed;
ULONG Reg;
ULONG Scale;
ULONG IndexReg;
ULONG Alignment;
} OPERAND, *POPERAND;
typedef struct _Instruction {
OPERATION Operation;
OPERAND Operand1;
OPERAND Operand2;
OPERAND Operand3;
ULONG FsOverride;
ULONG Size;
PCHAR NativeStart;
ULONG IntelAddress;
DWORD RegsSet;
DWORD RegsNeeded;
DWORD RegsToCache;
BOOL EbpAligned;
PENTRYPOINT EntryPoint;
} INSTRUCTION, *PINSTRUCTION;
#endif