	.file "stack.s"

	.globl	stksize
	.globl saveenv
	.globl jmpenv
	.globl	Special

stksize:
	movl	stkbase,%eax
	subl	%esp,%eax
	addl	$120,%eax
	ret

saveenv:
	movl	4(%esp),%eax
	movl	%ebp,12(%eax)
	movl   %ebx,40(%eax)
	movl	(%esp),%ebx
	movl	%ebx,4(%eax)
	addl	$4,%esp
	movl	%esp,8(%eax)
	movl   %esi,44(%eax)
	movl   %edi,48(%eax)
	movl   %ebp,52(%eax)
	movl   %edx,56(%eax)

	movl	%esp,%esi
	movl	%eax,%edi
	addl	$80,%edi

	movl	stkbase,%ecx
	subl	%esi,%ecx
	shr	$2,%ecx
	repz
 	movsl	
	subl	%esi,%edi
	movl	%edi,(%eax)
	movl	40(%eax),%ebx
	movl    44(%eax),%esi
	movl    48(%eax),%edi
	movl    52(%eax),%ebp
	movl    56(%eax),%edx
	movl	%eax,%ecx
	movl	Special,%eax
	jmp	*4(%ecx)

jmpenv:
	movl	8(%esp),%ecx
	movl	4(%esp),%eax
	movl	8(%eax),%esp
	movl	%esp,%edi
	movl	%eax,%esi
	addl	$80,%esi
	movl	%ecx,%ebx
	movl	stkbase,%ecx
	subl	%edi,%ecx
	shr	$2,%ecx
	repz
	movsl
	movl	%ebx,%ecx
	movl	40(%eax),%ebx
	movl    44(%eax),%esi
	movl    48(%eax),%edi
	movl    52(%eax),%ebp
	movl    56(%eax),%edx
	movl	12(%eax),%ebp
	xchg	%eax,%ecx
	jmp	*4(%ecx)

