/* * PROJECT: ReactOS SDK * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: ReactOS AMD64 architecture asm macros * COPYRIGHT: Timo Kreuzer (timo.kreuzer@reactos.org) */ #include MACRO(push_reg, Reg) push Reg .pushreg Reg ENDM MACRO(rex_push_reg, Reg) db HEX(048) ; REX prefix push Reg .pushreg Reg ENDM MACRO(push_eflags) pushfq .allocstack 8 ENDM MACRO(rex_push_eflags) db HEX(048) ; REX prefix pushfq .allocstack 8 ENDM MACRO(rex_jmp_reg, Reg) db HEX(048) ; REX prefix / hint tail call to unwinder jmp Reg ENDM MACRO(ret_zero) ret ENDM MACRO(alloc_stack, Size) sub rsp, Size .allocstack Size ENDM MACRO(save_reg, Reg, Offset) mov [rsp + Offset], Reg .savereg Reg, Offset ENDM MACRO(save_xmm128, Reg, Offset) movaps [rsp + Offset], Reg .savexmm128 Reg, Offset ENDM MACRO(push_frame, Code) .pushframe Code ENDM MACRO(set_frame, Reg, Offset) if Offset lea Reg, [rsp + Offset] else mov Reg, rsp endif .setframe Reg, Offset ENDM MACRO(END_PROLOGUE) .endprolog ENDM MACRO(BEGIN_EPILOGUE) .beginepilog ENDM MACRO(LEAF_ENTRY, Name, Section, NoPad) Section segment para 'CODE' ifb db 6 dup HEX(CC) endif align 16 public Name Name proc frame END_PROLOGUE ENDM MACRO(LEAF_ENTRY_ARG1, Name, Section, Arg1, NoPad) Section segment para 'CODE' ifb db 6 dup HEX(CC) endif align 16 public Name Name proc frame END_PROLOGUE ENDM MACRO(LEAF_ENTRY_ARG2, Name, Section, Arg1, Arg2, NoPad) Section segment para 'CODE' ifb db 6 dup HEX(CC) endif align 16 public Name Name proc frame END_PROLOGUE ENDM MACRO(LEAF_ENTRY_ARG3, Name, Section, Arg1, Arg2, Arg3, NoPad) Section segment para 'CODE' ifb db 6 dup HEX(CC) endif align 16 public Name Name proc frame END_PROLOGUE ENDM MACRO(LEAF_END, Name, section) Name endp Section ends ENDM MACRO(NESTED_ENTR, Name, Section, Handler, NoPad) ifdef _CurrentSection_ ifdif
, _CurrentSection_ .err endif endif _CurrentSection_ EQU
Section segment para 'CODE' ifb db 6 dup (0cch) endif align 16 public Name ifb Name proc frame else Name proc frame:Handler endif ENDM MACRO(NESTED_END, Name, section) Name endp Section ends ENDM MACRO(ALTERNATE_ENTRY, Name) Name: ENDM MACRO(Yield) pause ENDM /* EOF */