aboutsummaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-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