summaryrefslogtreecommitdiff
path: root/src/thread/i386/syscall_cp.s
blob: fa435f32ec3d127dec911fc9d8c0da1f4e79fa0c (plain) (blame)
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
.text
.global __syscall_cp_asm
__syscall_cp_asm:
	pushl %ebx
	pushl %esi
	pushl %edi
	pushl %ebp
	leal 20(%esp),%ebp
	call 1f
1:	popl %eax
	movl (%ebp),%ecx
	addl $[1f-1b],%eax
	movl %eax,4(%ecx)
	movl %esp,(%ecx)
	movl 8(%ecx),%eax
	testl %eax,%eax
	jnz 2f
	movl 4(%ebp),%eax
	movl 8(%ebp),%ebx
	movl 12(%ebp),%ecx
	movl 16(%ebp),%edx
	movl 20(%ebp),%esi
	movl 24(%ebp),%edi
	movl 28(%ebp),%ebp
1:	int $128
	popl %ebp
	popl %edi
	popl %esi
	popl %ebx
	xorl %edx,%edx
	movl 4(%esp),%ecx
	movl %edx,(%ecx)
	ret
2:	call __cancel