aboutsummaryrefslogtreecommitdiff
path: root/src/arch/x86_64/asm/proc.s
blob: e1996a74ccd2f774e5b084d03b8aca9045cca58b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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