X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/22d06cbaaf660067bfea03f73bee9c8630c05d50..c7a60d29f54d6de10a8388d26af441c8bc48a803:/lunaix-os/arch/aarch64/includes/asm/abi.h diff --git a/lunaix-os/arch/aarch64/includes/asm/abi.h b/lunaix-os/arch/aarch64/includes/asm/abi.h index 099c0f7..cc18bba 100644 --- a/lunaix-os/arch/aarch64/includes/asm/abi.h +++ b/lunaix-os/arch/aarch64/includes/asm/abi.h @@ -4,11 +4,17 @@ #include #ifndef __ASM__ -#define align_stack(ptr) ((ptr) & stack_alignment) + +#define align_stack(ptr) ((ptr) & ~15) + +#define store_retval(retval) current_thread->hstate->registers.x[0] = (retval) +#define store_retval_to(th, retval) (th)->hstate->registers.x[0] = (retval) + static inline void must_inline noret switch_context() { // TODO + asm ("b _aa64_switch_task"); unreachable; } @@ -28,6 +34,20 @@ abi_get_retaddrat(ptr_t fp) return ((ptr_t*)fp)[1]; } +static inline ptr_t must_inline +abi_get_callframe() +{ + ptr_t val; + asm volatile("mov %0, fp" : "=r"(val)); + return val; +} + +static inline void must_inline +j_usr(ptr_t sp, ptr_t pc) +{ + // TODO +} + #endif #endif /* __LUNAIX_AA64_ABI_H */