/*++ 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 #include #include #include #define _WX86CPUAPI_ #define _codegen_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if _ALPHA_ #include #elif _MIPS_ #include #elif _PPC_ #include #endif #include 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