X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/7e13988c1113d38bec17bd79b71757d78d977e76..bb5ae5c85c0812c52e8d53187f2c6b0ee9525c8c:/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 cc18bba..dac3d26 100644 --- a/lunaix-os/arch/aarch64/includes/asm/abi.h +++ b/lunaix-os/arch/aarch64/includes/asm/abi.h @@ -5,15 +5,21 @@ #ifndef __ASM__ +#include +#include + #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) +#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 +switch_context() +{ asm ("b _aa64_switch_task"); unreachable; } @@ -45,7 +51,12 @@ abi_get_callframe() static inline void must_inline j_usr(ptr_t sp, ptr_t pc) { - // TODO + set_sysreg(SPSR_EL1, SPSR_EL0_preset); + set_sysreg(SP_EL0, sp); + set_sysreg(ELR_E1, pc); + asm ("eret"); + + unreachable; } #endif