mirror of
https://github.com/reactos/reactos.git
synced 2024-08-14 23:49:49 +00:00
160 lines
2.7 KiB
PHP
160 lines
2.7 KiB
PHP
/*
|
|
* 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 */
|