43 lines
911 B
ArmAsm
43 lines
911 B
ArmAsm
/* MARKUS MAIWALD (ARCHITECT) | VOXIS FORGE (AI)
|
|
RUMPK HAL // X86_64 CONTEXT SWITCH
|
|
|
|
System V ABI (x86_64) Callee-Saved:
|
|
- rbx, rbp, r12, r13, r14, r15
|
|
- rip is saved by CALL instruction (on stack)
|
|
|
|
Frame: 6 regs * 8 = 48 bytes + 8 (RIP) = 56, aligned to 64
|
|
*/
|
|
|
|
.global cpu_switch_to
|
|
.type cpu_switch_to, @function
|
|
|
|
// void cpu_switch_to(uint64_t* prev_sp_ptr, uint64_t next_sp);
|
|
// rdi = prev_sp_ptr
|
|
// rsi = next_sp
|
|
|
|
cpu_switch_to:
|
|
// 1. Save Callee-Saved Registers (48 bytes)
|
|
pushq %rbp
|
|
pushq %rbx
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
|
|
// 2. Save Old Stack Pointer to *rdi
|
|
movq %rsp, (%rdi)
|
|
|
|
// 3. Load New Stack Pointer from rsi
|
|
movq %rsi, %rsp
|
|
|
|
// 4. Restore Callee-Saved Registers
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
popq %rbx
|
|
popq %rbp
|
|
|
|
// 5. Return (pops RIP from stack)
|
|
ret
|