34 lines
617 B
ArmAsm
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
|