Files
opencoreC/kernel/asm/context.S
T

34 lines
617 B
ArmAsm

/* opencoreC - Thread Context Switch */
.global switch_to
.section .text
/*
* void switch_to(uint64_t **prev_rsp_ptr, uint64_t *next_rsp);
* RDI = pointer to current thread's stored RSP
* RSI = target thread's RSP
*/
switch_to:
/* Push callee-saved registers of outgoing thread */
push rbp
push rbx
push r12
push r13
push r14
push r15
/* Save current stack pointer */
mov [rdi], rsp
/* Load target stack pointer */
mov rsp, rsi
/* Pop callee-saved registers of incoming thread */
pop r15
pop r14
pop r13
pop r12
pop rbx
pop rbp
ret