summaryrefslogtreecommitdiff
path: root/stage3/yield.asm
blob: c078f165eeacc3f8275c8afcd68becdd01783b74 (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
36
37
38
39
40
41
42
43
44
45
extern thread_sched, thread_sched_stack
global yield, resume

extern print_num, halt

yield:
	; push rip (done using call)
	push rbx
	push rbp
	push rdi
	push rsi
	push r12
	push r13
	push r14
	push r15

	cld
	; mov rdi, rdi
	mov rsi, rsp
	mov rsp, [thread_sched_stack]
	jmp thread_sched

; stack in rdi
; return in rsi
resume:
	mov rsp, rdi
	mov rax, rsi

	pop r15
	pop r14
	pop r13
	pop r12
	pop rsi
	pop rdi
	pop rbp
	pop rbx

	;mov rdi, [rsp]
	;mov rsi, 16
	;mov rdx, 0
	;call print_num
	;cli
	;call halt

	ret ; pop rip