/* 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