reactos/sdk/include/asm/macamd64.inc

160 lines
2.7 KiB
PHP
Raw Normal View History

/*
* 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 <asm.inc>
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 <NoPad>
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 <NoPad>
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 <NoPad>
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 <NoPad>
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 <Section>, _CurrentSection_
.err <NESTED_ENTRY invoked for different sections within same module>
endif
endif
_CurrentSection_ EQU <Section>
Section segment para 'CODE'
ifb <NoPad>
db 6 dup (0cch)
endif
align 16
public Name
ifb <Handler>
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 */