|
|
/*++
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
|