diff --git a/sdk/include/asm/kxarm64.h b/sdk/include/asm/kxarm64.h new file mode 100644 index 00000000000..e510959ac35 --- /dev/null +++ b/sdk/include/asm/kxarm64.h @@ -0,0 +1,259 @@ + +#define ENABLE_FRAME_POINTER 1 + +#undef TRUE +//#define TRUE 1 +#undef FALSE +//#define FALSE 0 + +//#include "kxarmunw.h" + +#ifdef _MSC_VER + + /* Globals */ + GBLS __FuncStartLabel + GBLS __FuncEpilog1StartLabel + GBLS __FuncEpilog2StartLabel + GBLS __FuncEpilog3StartLabel + GBLS __FuncEpilog4StartLabel + GBLS __FuncXDataLabel + GBLS __FuncXDataPrologLabel + GBLS __FuncXDataEpilog1Label + GBLS __FuncXDataEpilog2Label + GBLS __FuncXDataEpilog3Label + GBLS __FuncXDataEpilog4Label + GBLS __FuncXDataEndLabel + GBLS __FuncEndLabel + GBLS __FuncArea + GBLS __FuncExceptionHandler + + MACRO + __DeriveFunctionLabels $FuncName +__FuncStartLabel SETS "|$FuncName|" +__FuncEndLabel SETS "|$FuncName._end|" +__FuncEpilog1StartLabel SETS "|$FuncName._epilog1_start|" +__FuncEpilog2StartLabel SETS "|$FuncName._epilog2_start|" +__FuncEpilog3StartLabel SETS "|$FuncName._epilog3_start|" +__FuncEpilog4StartLabel SETS "|$FuncName._epilog4_start|" +__FuncXDataLabel SETS "|$FuncName._xdata|" +__FuncXDataPrologLabel SETS "|$FuncName._xdata_prolog|" +__FuncXDataEpilog1Label SETS "|$FuncName._xdata_epilog1|" +__FuncXDataEpilog2Label SETS "|$FuncName._xdata_epilog2|" +__FuncXDataEpilog3Label SETS "|$FuncName._xdata_epilog3|" +__FuncXDataEpilog4Label SETS "|$FuncName._xdata_epilog4|" +__FuncXDataEndLabel SETS "|$FuncName._xdata_end|" + MEND + + MACRO + __ExportName $FuncName + LCLS Name +Name SETS "|$FuncName|" + ALIGN 4 + EXPORT $Name +$Name + MEND + + MACRO + __ExportProc $FuncName + LCLS Name +Name SETS "|$FuncName|" + ALIGN 4 + EXPORT $Name +$Name PROC + MEND + + MACRO + TEXTAREA +#if defined(_CONTROL_FLOW_GUARD) + AREA |.text|,ALIGN=4,CODE,READONLY +#else + AREA |.text|,ALIGN=2,CODE,READONLY +#endif + MEND + + MACRO + DATAAREA + AREA |.data|,DATA + MEND + + MACRO + RODATAAREA + AREA |.rdata|,DATA,READONLY + MEND + + MACRO + NESTED_ENTRY $FuncName, $AreaName, $ExceptHandler + __DeriveFunctionLabels $FuncName +__FuncArea SETS "|.text|" + IF "$AreaName" != "" +__FuncArea SETS "$AreaName" + ENDIF +__FuncExceptionHandler SETS "" + IF "$ExceptHandler" != "" +__FuncExceptionHandler SETS "|$ExceptHandler|" + ENDIF + AREA $__FuncArea,CODE,READONLY + __ExportProc $FuncName + ROUT + // __ResetUnwindState + MEND + + // FIXME: this does not exist in native + MACRO + PROLOG_END + /* Ignore for now */ + MEND + + MACRO + NESTED_END $FuncName +$__FuncEndLabel + LTORG + ENDP + //AREA |.pdata|,ALIGN=2,READONLY + //DCD $__FuncStartLabel + //RELOC 2 + //DCD $__FuncXDataLabel + //RELOC 2 + //__EmitUnwindXData + //AREA $__FuncArea,CODE,READONLY +__FuncStartLabel SETS "" +__FuncEndLabel SETS "" + MEND + + MACRO + LEAF_ENTRY $FuncName, $AreaName + NESTED_ENTRY $FuncName, $AreaName + MEND + + MACRO + LEAF_END $FuncName + NESTED_END $FuncName + MEND + + MACRO + LEAF_ENTRY_NO_PDATA $FuncName, $AreaName + __DeriveFunctionLabels $FuncName +__FuncArea SETS "|.text|" + IF "$AreaName" != "" +__FuncArea SETS "$AreaName" + ENDIF + AREA $__FuncArea,CODE,READONLY + __ExportProc $FuncName + ROUT + MEND + + MACRO + LEAF_END_NO_PDATA $FuncName +$__FuncEndLabel + LTORG + ENDP +__FuncStartLabel SETS "" +__FuncEndLabel SETS "" + MEND + + MACRO + ALTERNATE_ENTRY $FuncName + __ExportName $FuncName + ROUT + MEND + + + #define CR 13 + #define LF 10 + #define NUL 0 + + #define ASCII dcb + + MACRO + UNIMPLEMENTED $Name + MEND + +#else + +/* Compatibility define */ +#define EQU .equ + +.macro IMPORT Name + /* Ignore */ +.endm + +.macro EXPORT Name + .global &Name +.endm + +.macro TEXTAREA + .section .text, "rx" +#if defined(_CONTROL_FLOW_GUARD) + .align 4 +#else + .align 2 +#endif +.endm + +.macro DATAAREA + .section .data, "rw" +.endm + +.macro RODATAAREA + .section .rdata, "rw" +.endm + +.macro NESTED_ENTRY Name +FuncName .equ &Name +PrologName .equ &Name&_Prolog +FuncEndName .equ &Name&_end + .global &FuncName + .align 2 + .func &FuncName + &FuncName: +.endm + +// FIXME: should go to kxarmunw.h +.macro PROLOG_END + \PrologName: +.endm + +.macro NESTED_END Name + &FuncEndName: + .endfunc +.endm + +.macro LEAF_ENTRY $FuncName, $AreaName + NESTED_ENTRY $FuncName, $AreaName +.endm + +.macro LEAF_END $FuncName + NESTED_END $FuncName +.endm + + +/* Some "intrinsics", see http://codemachine.com/article_armasm.html */ + +.macro __debugbreak + DCD 0xDEFE +.endm + +.macro __assertfail + DCD 0xDEFC +.endm + +.macro __fastfail + DCD 0xDEFB +.endm + +.macro __rdpmccntr64 + DCD 0xDEFA +.endm + +.macro __debugservice + DCD 0xDEFD +.endm + +.macro __brkdiv0 + DCD 0xDEF9 +.endm + + +#endif + +