aboutsummaryrefslogtreecommitdiff
path: root/src/libthread/OpenBSD-x86_64-asm.S
blob: e982cdef87d47e930ba560b48bbce22d59fc94d2 (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
.text
.align 8

.globl libthread_getmcontext
libthread_getmcontext:
	movq	$1, 0*8(%rdi)  // rax
	movq	%rbx, 1*8(%rdi)
	movq	%rcx, 2*8(%rdi)
	movq	%rdx, 3*8(%rdi)
	movq	%rsi, 4*8(%rdi)
	movq	%rdi, 5*8(%rdi)
	movq	%rbp, 6*8(%rdi)
	movq	%rsp, 7*8(%rdi)
	movq	%r8, 8*8(%rdi)
	movq	%r9, 9*8(%rdi)
	movq	%r10, 10*8(%rdi)
	movq	%r11, 11*8(%rdi)
	movq	%r12, 12*8(%rdi)
	movq	%r13, 13*8(%rdi)
	movq	%r14, 14*8(%rdi)
	movq	%r15, 15*8(%rdi)
	movq	$0, %rax
	ret

.globl libthread_setmcontext
libthread_setmcontext:
	movq	0*8(%rdi), %rax
	movq	1*8(%rdi), %rbx
	movq	2*8(%rdi), %rcx
	movq	3*8(%rdi), %rdx
	movq	4*8(%rdi), %rsi
	// %rdi later
	movq	6*8(%rdi), %rbp
	movq	7*8(%rdi), %rsp
	movq	8*8(%rdi), %r8
	movq	9*8(%rdi), %r9
	movq	10*8(%rdi), %r10
	movq	11*8(%rdi), %r11
	movq	12*8(%rdi), %r12
	movq	13*8(%rdi), %r13
	movq	14*8(%rdi), %r14
	movq	15*8(%rdi), %r15
	movq	5*8(%rdi), %rdi
	ret