Leaked source code of windows server 2003
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.
|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
codeseqp.h
Abstract:
This header file contains the non-processor-specific includes and declarations used by mips, ppc, and alpha codeseq.c files.
Author:
Barry Bond (barrybo) creation-date 23-Sept-1996
Revision History:
24-Aug-1999 [askhalid] copied from 32-bit wx86 directory and make work for 64bit. 20-Sept-1999[barrybo] added FRAG2REF(LockCmpXchg8bFrag32, ULONGLONG)
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#define _WX86CPUAPI_
#define _codegen_
#include <wx86.h>
#include <wx86nt.h>
#include <wx86cpu.h>
#include <cpuassrt.h>
#include <instr.h>
#include <config.h>
#include <threadst.h>
#include <frag.h>
#include <fragp.h>
#include <ptchstrc.h>
#include <codeseq.h>
#include <compiler.h>
#include <codegen.h>
#include <codesize.h>
#include <opt.h>
#if _ALPHA_
#include <soalpha.h>
#elif _MIPS_
#include <somips.h>
#elif _PPC_
#include <soppc.h>
#endif
#include <process.h>
extern int JumpToNextCompilationUnitHelper(); extern int CallJxxHelper(); extern int CallJxxSlowHelper(); extern int CallJxxFwdHelper(); extern int CallJmpDirectHelper(); extern int CallJmpDirectSlowHelper(); extern int CallJmpFwdDirectHelper(); extern int CallJmpfDirectHelper(); extern int CallJmpfDirect2Helper(); extern int CallDirectHelper(); extern int CallfDirectHelper(); extern int CallDirectHelper2(); extern int CallfDirectHelper2(); extern int CallIndirectHelper(); extern int CallfIndirectHelper(); extern int IndirectControlTransferHelper(); extern int IndirectControlTransferFarHelper(); extern int RegisterOffset[];
#define START_FRAGMENT \
PULONG d = CodeLocation;
//
// fragment generation function beginnings and endings
//
#if _ALPHA_
#define FRAGMENT(name) \
ULONG \ Gen##name ( \ IN PULONG CodeLocation, \ IN ULONG CurrentECU, \ IN PINSTRUCTION Instruction \ ) \ { \ const ULONG fCompiling = TRUE; \ START_FRAGMENT #else
#define FRAGMENT(name) \
ULONG \ Gen##name ( \ IN PULONG CodeLocation, \ IN PINSTRUCTION Instruction \ ) \ { \ const ULONG fCompiling = TRUE; \ START_FRAGMENT #endif
#define END_FRAGMENT \
return (ULONG)(ULONGLONG)(d - CodeLocation) * sizeof(ULONG); \ } #define OP_FRAGMENT(name) \
ULONG \ Gen##name ( \ IN PULONG CodeLocation, \ IN POPERAND Operand, \ IN ULONG OperandNumber \ ) \ { \ START_FRAGMENT
//
// These functions have a private interface. The caller and callee have to
// agree how many of the parameters are valid. This lets us use the same
// basic form for all of the code that goes into the translation cache
//
#if _ALPHA_
#define PATCH_FRAGMENT(name) \
ULONG \ Gen##name ( \ IN PULONG CodeLocation, \ IN ULONG fCompiling, \ IN ULONG CurrentECU, \ IN ULONG Param1, \ IN ULONG Param2 \ ) \ { \ START_FRAGMENT #else
#define PATCH_FRAGMENT(name) \
ULONG \ Gen##name ( \ IN PULONG CodeLocation, \ IN ULONG fCompiling, \ IN ULONG Param1, \ IN ULONG Param2 \ ) \ { \ START_FRAGMENT #endif
|