summaryrefslogtreecommitdiff
path: root/src/setjmp.s
blob: 59f25226ec9204ed66641c6568dc90647cdfa652 (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
.global setjmp
.global longjmp

setjmp:
	mov 4(%esp), %eax
	mov    %ebx, (%eax)
	mov    %esi, 4(%eax)
	mov    %edi, 8(%eax)
	mov    %ebp, 12(%eax)
	lea 4(%esp), %ecx
	mov    %ecx, 16(%eax)
	mov  (%esp), %ecx
	mov    %ecx, 20(%eax)
	xor    %eax, %eax
	ret

longjmp:
	mov  4(%esp),%edx
	mov  8(%esp),%eax
	cmp       $1,%eax
	adc       $0, %al
	mov   (%edx),%ebx
	mov  4(%edx),%esi
	mov  8(%edx),%edi
	mov 12(%edx),%ebp
	mov 16(%edx),%esp
	jmp *20(%edx)