.intel_syntax noprefix // void context_switch(UINT64* old_rsp, UINT64 new_rsp) // rdi = &old_rsp (pointer to save current RSP) // rsi = new_rsp (value of new stack pointer) // // Saves/restores callee-saved registers only. // On first switch into a new task, ret lands on task_entry_trampoline. .global context_switch context_switch: push rbx push rbp push r12 push r13 push r14 push r15 mov [rdi], rsp // save current RSP mov rsp, rsi // switch to new stack pop r15 pop r14 pop r13 pop r12 pop rbp pop rbx ret .section .note.GNU-stack,"",@progbits