/*++

Copyright (c) 1996  Microsoft Corporation

Module Name:

    codeseq.h

Abstract:

    This header file contains the function prototypes for all fragments
    in codeseq.c

Author:

    Barry Bond (barrybo) creation-date 23-Sept-1996

Revision History:


--*/


#undef FRAGMENT
#undef PATCH_FRAGMENT
#undef OP_FRAGMENT

#if _ALPHA_
    #define FRAGMENT(name)                  \
    ULONG                                   \
    Gen##name (                             \
        IN PULONG CodeLocation,             \
        IN ULONG CurrentECU,                \
        IN PINSTRUCTION Instruction         \
        );

    #define PATCH_FRAGMENT(name)            \
    ULONG                                   \
    Gen##name (                             \
        IN PULONG CodeLocation,             \
        IN ULONG fCompiling,                \
        IN ULONG CurrentECU,                \
        IN ULONG Param1,                    \
        IN ULONG Param2                     \
        );
#else
    #define FRAGMENT(name)                  \
    ULONG                                   \
    Gen##name (                             \
        IN PULONG CodeLocation,             \
        IN PINSTRUCTION Instruction         \
        );

    #define PATCH_FRAGMENT(name)            \
    ULONG                                   \
    Gen##name (                             \
        IN PULONG CodeLocation,             \
        IN ULONG fCompiling,                \
        IN ULONG Param1,                    \
        IN ULONG Param2                     \
        );
#endif

#define OP_FRAGMENT(name)               \
ULONG                                   \
Gen##name (                             \
    IN PULONG CodeLocation,             \
    IN POPERAND Operand,                \
    IN ULONG OperandNumber              \
    );


FRAGMENT(AddFragNoFlags32)
FRAGMENT(AddFragNoFlags32A)
FRAGMENT(AndFragNoFlags32)
FRAGMENT(AndFragNoFlags32A)
FRAGMENT(DecFragNoFlags32)
FRAGMENT(DecFragNoFlags32A)
FRAGMENT(IncFragNoFlags32)
FRAGMENT(IncFragNoFlags32A)
FRAGMENT(OrFragNoFlags32)
FRAGMENT(OrFragNoFlags32A)
FRAGMENT(SubFragNoFlags32)
FRAGMENT(SubFragNoFlags32A)
FRAGMENT(XorFragNoFlags32)
FRAGMENT(XorFragNoFlags32A)
FRAGMENT(StartBasicBlock)
FRAGMENT(JumpToNextCompilationUnit)
PATCH_FRAGMENT(JumpToNextCompilationUnit2)
FRAGMENT(CallCFrag)
FRAGMENT(CallCFragNoCpu)
FRAGMENT(CallCFragLoadEip)
FRAGMENT(CallCFragLoadEipNoCpu)
FRAGMENT(CallCFragLoadEipNoCpuSlow)
FRAGMENT(CallCFragLoadEipSlow)
FRAGMENT(CallCFragSlow)
FRAGMENT(CallCFragNoCpuSlow)
FRAGMENT(JaFrag)
FRAGMENT(JaeFrag)
FRAGMENT(JbeFrag)
FRAGMENT(JbFrag)
FRAGMENT(JeFrag)
FRAGMENT(JgFrag)
FRAGMENT(JlFrag)
FRAGMENT(JleFrag)
FRAGMENT(JneFrag)
FRAGMENT(JnlFrag)
FRAGMENT(JnoFrag)
FRAGMENT(JnpFrag)
FRAGMENT(JnsFrag)
FRAGMENT(JoFrag)
FRAGMENT(JpFrag)
FRAGMENT(JsFrag)
FRAGMENT(JecxzFrag)
FRAGMENT(JcxzFrag)
FRAGMENT(LoopFrag32)
FRAGMENT(LoopFrag16)
FRAGMENT(LoopneFrag32)
FRAGMENT(LoopneFrag16)
FRAGMENT(LoopeFrag32)
FRAGMENT(LoopeFrag16)
FRAGMENT(JxxBody)
PATCH_FRAGMENT(JxxBody2)
FRAGMENT(JxxStartSlow)
FRAGMENT(JxxBodySlow)
PATCH_FRAGMENT(JxxBodySlow2)
FRAGMENT(JxxBodyFwd)
PATCH_FRAGMENT(JxxBodyFwd2)
FRAGMENT(CallJmpDirect)
PATCH_FRAGMENT(CallJmpDirect2)
FRAGMENT(CallJmpDirectSlow)
PATCH_FRAGMENT(CallJmpDirectSlow2)
FRAGMENT(CallJmpFwdDirect)
PATCH_FRAGMENT(CallJmpFwdDirect2)
FRAGMENT(CallJmpfDirect)
PATCH_FRAGMENT(CallJmpfDirect2)
FRAGMENT(CallJmpIndirect)
FRAGMENT(CallJmpfIndirect)
FRAGMENT(CallRetIndirect)
FRAGMENT(CallDirect)
PATCH_FRAGMENT(CallDirect2)
PATCH_FRAGMENT(CallDirect3)
FRAGMENT(CallfDirect)
PATCH_FRAGMENT(CallfDirect2)
PATCH_FRAGMENT(CallfDirect3)
FRAGMENT(CallIndirect)
FRAGMENT(CallfIndirect)
PATCH_FRAGMENT(CallIndirect2)
PATCH_FRAGMENT(CallfIndirect2)
FRAGMENT(Movsx8To32)
FRAGMENT(Movsx8To32Slow)
FRAGMENT(Movsx16To32)
FRAGMENT(Movsx16To32Slow)
FRAGMENT(Movsx8To16)
FRAGMENT(Movsx8To16Slow)
FRAGMENT(Movzx8To32)
FRAGMENT(Movzx8To32Slow)
FRAGMENT(Movzx16To32)
FRAGMENT(Movzx16To32Slow)
FRAGMENT(Movzx8To16)
FRAGMENT(Movzx8To16Slow)
FRAGMENT(EndCompilationUnit)
FRAGMENT(EndMovSlow)

#if _ALPHA_
OP_FRAGMENT(OperandMovRegToReg8B)
OP_FRAGMENT(OperandMovToMem8D)
OP_FRAGMENT(OperandMovToMem16D)
#endif

OP_FRAGMENT(OperandMovToMem32B)
OP_FRAGMENT(OperandMovToMem32D)
OP_FRAGMENT(OperandMovToMem16B)
OP_FRAGMENT(OperandMovToMem16W)
OP_FRAGMENT(OperandMovToMem8B)
OP_FRAGMENT(OperandMovToReg)
OP_FRAGMENT(OperandMovRegToReg32)
OP_FRAGMENT(OperandMovRegToReg16)
OP_FRAGMENT(OperandMovRegToReg8)
OP_FRAGMENT(OperandImm)
OP_FRAGMENT(OperandRegRef)
OP_FRAGMENT(OperandRegVal)
OP_FRAGMENT(LoadCacheReg)

ULONG GenOperandAddr(
    PULONG CodeLocation,
    POPERAND Operand,
    ULONG OperandNumber,
    ULONG FsOverride
    );

#undef FRAGMENT
#undef PATCH_FRAGMENT
#undef OP_FRAGMENT