aboutsummaryrefslogtreecommitdiff
path: root/src/arch/x86_64
diff options
context:
space:
mode:
authorTianhao Wang <shrik3@mailbox.org>2024-06-06 02:08:21 +0200
committerTianhao Wang <shrik3@mailbox.org>2024-06-11 15:17:14 +0200
commitd495a1745c83a8186bf1c6c531177887dd245436 (patch)
tree5ea93adceea22d7aa12eb0165fce80e458dd3864 /src/arch/x86_64
parenta86f59b32eb86a1ccb94bf1e627c1115c3b6b217 (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')
-rw-r--r--src/arch/x86_64/asm/proc.s35
-rw-r--r--src/arch/x86_64/asm/toc.s0
2 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
diff --git a/src/arch/x86_64/asm/toc.s b/src/arch/x86_64/asm/toc.s
deleted file mode 100644
index e69de29..0000000
--- a/src/arch/x86_64/asm/toc.s
+++ /dev/null