xref: /xv6-public/swtch.S (revision 5ce9751c)
1.globl setjmp
2setjmp:
3	movl 4(%esp), %eax
4
5	movl %ebx, 0(%eax)
6	movl %ecx, 4(%eax)
7	movl %edx, 8(%eax)
8	movl %esi, 12(%eax)
9	movl %edi, 16(%eax)
10	movl %esp, 20(%eax)
11	movl %ebp, 24(%eax)
12	pushl 0(%esp)	/* %eip */
13	popl 28(%eax)
14
15	movl $0, %eax	/* return value */
16	ret
17
18.globl longjmp
19longjmp:
20	movl 4(%esp), %eax
21
22	movl 0(%eax), %ebx
23	movl 4(%eax), %ecx
24	movl 8(%eax), %edx
25	movl 12(%eax), %esi
26	movl 16(%eax), %edi
27	movl 20(%eax), %esp
28	movl 24(%eax), %ebp
29
30	addl $4, %esp	/* pop %eip into thin air */
31	pushl 28(%eax)	/* push new %eip */
32
33	movl $1, %eax	/* return value (appears to come from setjmp!) */
34	ret
35
36
37
38