diff options
| author | Tianhao Wang <shrik3@mailbox.org> | 2024-06-06 02:08:21 +0200 |
|---|---|---|
| committer | Tianhao Wang <shrik3@mailbox.org> | 2024-06-11 15:17:14 +0200 |
| commit | d495a1745c83a8186bf1c6c531177887dd245436 (patch) | |
| tree | 5ea93adceea22d7aa12eb0165fce80e458dd3864 /src/arch/x86_64/asm/proc.s | |
| parent | a86f59b32eb86a1ccb94bf1e627c1115c3b6b217 (diff) | |
proc: basic infra for multithreading
including task and scheduler wrapper, context swap assembly, and some
notes... The lifetime of task is tricky, I'll fix it later
Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
Diffstat (limited to 'src/arch/x86_64/asm/proc.s')
| -rw-r--r-- | src/arch/x86_64/asm/proc.s | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/arch/x86_64/asm/proc.s b/src/arch/x86_64/asm/proc.s new file mode 100644 index 0000000..e1996a7 --- /dev/null +++ b/src/arch/x86_64/asm/proc.s @@ -0,0 +1,35 @@ +; vi: ft=nasm +; vectors.s - idt for x86_64 +[BITS 64] +[GLOBAL context_swap] +[GLOBAL context_swap_to] +; parameters 1 (rdi) pointer to from context +; parameters 2 (rsi) pointer to to context +; struct arch_reg::Context64 +context_swap: + mov [rdi + 8*0], rbx + mov [rdi + 8*1], r12 + mov [rdi + 8*2], r13 + mov [rdi + 8*3], r14 + mov [rdi + 8*4], r15 + mov [rdi + 8*5], rbp + mov [rdi + 8*6], rsp + mov rbx, [rsi + 8*0] + mov r12, [rsi + 8*1] + mov r13, [rsi + 8*2] + mov r14, [rsi + 8*3] + mov r15, [rsi + 8*4] + mov rbp, [rsi + 8*5] + mov rsp, [rsi + 8*6] + ret + +; parameters 1 (rdi) pointer to to context +context_swap_to: + mov rbx, [rdi + 8*0] + mov r12, [rdi + 8*1] + mov r13, [rdi + 8*2] + mov r14, [rdi + 8*3] + mov r15, [rdi + 8*4] + mov rbp, [rdi + 8*5] + mov rsp, [rdi + 8*6] + ret |
