86 lines
2.2 KiB
C
86 lines
2.2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1995 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
dwordfns.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Instuctions which operate on 32-bit DWORDS
|
||
|
|
||
|
Author:
|
||
|
|
||
|
29-Jun-1995 BarryBo
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include <nt.h>
|
||
|
#include <ntrtl.h>
|
||
|
#include <nturtl.h>
|
||
|
#include <windows.h>
|
||
|
#include <stdio.h>
|
||
|
#include "cpuassrt.h"
|
||
|
#include "threadst.h"
|
||
|
#include "instr.h"
|
||
|
#include "decoderp.h"
|
||
|
#include "dwordfns.h"
|
||
|
|
||
|
ASSERTNAME;
|
||
|
|
||
|
// set up to include common functions
|
||
|
#define GET_REG get_reg32
|
||
|
#define MANGLENAME(x) x ## 32
|
||
|
#define MSB 0x80000000
|
||
|
#define MOD_RM mod_rm_reg32
|
||
|
#define UTYPE unsigned long
|
||
|
#define STYPE signed long
|
||
|
#define GET_VAL GET_LONG
|
||
|
#define PUT_VAL PUT_LONG
|
||
|
#define PUSH_VAL PUSH_LONG
|
||
|
#define POP_VAL POP_LONG
|
||
|
#define OPNAME(x) OP_ ## x ## 32
|
||
|
#define LOCKOPNAME(x) OP_SynchLock ## x ## 32
|
||
|
#define DISPATCHCOMMON(fn) DISPATCH(fn ## 32)
|
||
|
#define CALLFRAGCOMMON0(fn) CALLFRAG0( fn ## 32 )
|
||
|
#define CALLFRAGCOMMON1(fn, pop1) CALLFRAG1( fn ## 32 , pop1)
|
||
|
#define CALLFRAGCOMMON2(fn, pop1, op2) CALLFRAG2( fn ## 32 , pop1, op2)
|
||
|
#define AREG GP_EAX
|
||
|
#define BREG GP_EBX
|
||
|
#define CREG GP_ECX
|
||
|
#define DREG GP_EDX
|
||
|
#define SPREG GP_ESP
|
||
|
#define BPREG GP_EBP
|
||
|
#define SIREG GP_ESI
|
||
|
#define DIREG GP_EDI
|
||
|
#define DEREF(Op) DEREF32(Op)
|
||
|
|
||
|
// include the common functions with 8/16/32 flavors
|
||
|
#include "common.c"
|
||
|
|
||
|
// include the common functions with 16/32 flavors
|
||
|
#include "comm1632.c"
|
||
|
|
||
|
// create the mod_rm_reg32() decoder function
|
||
|
#define MOD11_RM000 GP_EAX
|
||
|
#define MOD11_RM001 GP_ECX
|
||
|
#define MOD11_RM010 GP_EDX
|
||
|
#define MOD11_RM011 GP_EBX
|
||
|
#define MOD11_RM100 GP_ESP
|
||
|
#define MOD11_RM101 GP_EBP
|
||
|
#define MOD11_RM110 GP_ESI
|
||
|
#define MOD11_RM111 GP_EDI
|
||
|
#define REG000 GP_EAX
|
||
|
#define REG001 GP_ECX
|
||
|
#define REG010 GP_EDX
|
||
|
#define REG011 GP_EBX
|
||
|
#define REG100 GP_ESP
|
||
|
#define REG101 GP_EBP
|
||
|
#define REG110 GP_ESI
|
||
|
#define REG111 GP_EDI
|
||
|
#define MOD_RM_DECODER mod_rm_reg32
|
||
|
#include "modrm.c"
|