X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/32b9a6d76790c73d3d2d36d9081a2581cc65d184..28c176b668c841a3b7fb093faccf0efa39257603:/lunaix-os/arch/x86/includes/sys/abi64.h?ds=inline diff --git a/lunaix-os/arch/x86/includes/sys/abi64.h b/lunaix-os/arch/x86/includes/sys/abi64.h new file mode 100644 index 0000000..1c93cc1 --- /dev/null +++ b/lunaix-os/arch/x86/includes/sys/abi64.h @@ -0,0 +1,40 @@ +#ifndef __LUNAIX_ARCH_ABI64_H +#define __LUNAIX_ARCH_ABI64_H + +#include "sys/x86_isa.h" + +#define stack_alignment 0xfffffffffffffff0UL + +#ifndef __ASM__ +#define store_retval(retval) current_thread->hstate->registers.rax = (retval) + +#define store_retval_to(th, retval) (th)->hstate->registers.rax = (retval) + +static inline void must_inline +j_usr(ptr_t sp, ptr_t pc) +{ + asm volatile( + "pushq %0\n" + "pushq %1\n" + "pushq %2\n" + "pushq %3\n" + "retfq" + :: + "i"(UDATA_SEG), + "r"(sp), + "i"(UCODE_SEG), + "r"(pc) + : + "memory"); +} + +static inline ptr_t must_inline +abi_get_callframe() +{ + ptr_t val; + asm("movq %%rbp, %0" : "=r"(val)::); + return val; +} + +#endif +#endif /* __LUNAIX_ARCH_ABI64_H */