diff options
Diffstat (limited to 'na/arch/riscv/trap/swtch.S')
| -rw-r--r-- | na/arch/riscv/trap/swtch.S | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/na/arch/riscv/trap/swtch.S b/na/arch/riscv/trap/swtch.S new file mode 100644 index 0000000..4393505 --- /dev/null +++ b/na/arch/riscv/trap/swtch.S @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* Copyright (C) 2026 Richard Qin */ + + .section .text + .globl context_switch + .align 2 +# void context_switch(Context* old_ctx, Context* next_ctx); +# a0 = old_ctx_ptr, a1 = next_ctx_ptr +context_switch: + 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 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
\ No newline at end of file |
