You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.7 KiB
86 lines
1.7 KiB
/*++
|
|
|
|
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
|