An x86-64 operating system built from xv6, now largely rewritten: SMP, a copy-on-write root filesystem (SchFS), PCI/USB/virtio drivers, a TTF rasteriser, and a Linux-numbered syscall ABI. No history before this point -- the tree was never under version control. This commit exists so the rename that follows has something to undo to.
30 lines
510 B
ArmAsm
30 lines
510 B
ArmAsm
# Context switch
|
|
#
|
|
# void swtch(struct context **old, struct context *new);
|
|
#
|
|
# Save current register context in old
|
|
# and then load register context from new.
|
|
|
|
.global swtch
|
|
swtch:
|
|
# Save old callee-save registers
|
|
pushq %rbp
|
|
pushq %rbx
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
|
|
# Switch stacks
|
|
movq %rsp, (%rdi)
|
|
movq %rsi, %rsp
|
|
|
|
# Load new callee-save registers
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
popq %rbx
|
|
popq %rbp
|
|
|
|
retq #??
|