xv6-riscv-kernel/kernel/swtch.S

49 lines
1,022 B
ArmAsm

# For a quick reference on RISC-V assembly:
# https://risc-v.guru/instructions/
# Context switch
#
# Save current registers in old. Load from new.
#
# See: defs.h for swtch declaration
# See: proc.h for struct context definition
#
# void swtch(struct context *old, struct context *new);
.globl swtch
swtch:
# sd = Store Double (64 bits)
sd ra, 0(a0)
sd sp, 8(a0)
sd s0, 16(a0)
sd s1, 24(a0)
sd s2, 32(a0)
sd s3, 40(a0)
sd s4, 48(a0)
sd s5, 56(a0)
sd s6, 64(a0)
sd s7, 72(a0)
sd s8, 80(a0)
sd s9, 88(a0)
sd s10, 96(a0)
sd s11, 104(a0)
# ld = Load Double (64 bits)
ld ra, 0(a1)
ld sp, 8(a1)
ld s0, 16(a1)
ld s1, 24(a1)
ld s2, 32(a1)
ld s3, 40(a1)
ld s4, 48(a1)
ld s5, 56(a1)
ld s6, 64(a1)
ld s7, 72(a1)
ld s8, 80(a1)
ld s9, 88(a1)
ld s10, 96(a1)
ld s11, 104(a1)
ret