Files
mango/arch/x86_64/thread_switch.S

53 lines
594 B
ArmAsm

.code64
.extern THREAD_sp
.global switch_to
.type switch_to, @function
// %rdi = (struct thread *) current thread.
// %rsi = (struct thread *) next thread.
switch_to:
pushfq
push %rax
push %rcx
push %rdx
push %rbx
pushq $0
push %rbp
push %rsi
push %rdi
push %r8
push %r9
push %r10
push %r11
push %r12
push %r13
push %r14
push %r15
movq %rsp, THREAD_sp(%rdi)
movq THREAD_sp(%rsi), %rsp
pop %r15
pop %r14
pop %r13
pop %r12
pop %r11
pop %r10
pop %r9
pop %r8
pop %rdi
pop %rsi
pop %rbp
add $8, %rsp
pop %rbx
pop %rdx
pop %rcx
pop %rax
popfq
ret