diff options
Diffstat (limited to 'src/arch/x86_64/asm')
| -rw-r--r-- | src/arch/x86_64/asm/proc.s | 35 | ||||
| -rw-r--r-- | src/arch/x86_64/asm/toc.s | 0 |
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 |
