xref: /csrg-svn/lib/libc/i386/gen/setjmp.s (revision 61128)
141041Swilliam/*-
2*61128Sbostic * Copyright (c) 1990, 1993
3*61128Sbostic *	The Regents of the University of California.  All rights reserved.
441041Swilliam *
541041Swilliam * This code is derived from software contributed to Berkeley by
641041Swilliam * William Jolitz.
741041Swilliam *
841041Swilliam * %sccs.include.redist.c%
941041Swilliam */
1041041Swilliam
1141041Swilliam#if defined(LIBC_SCCS) && !defined(lint)
12*61128Sbostic	.asciz "@(#)setjmp.s	8.1 (Berkeley) 06/04/93"
1341041Swilliam#endif /* LIBC_SCCS and not lint */
1441041Swilliam
1541041Swilliam/*
1641041Swilliam * C library -- _setjmp, _longjmp
1741041Swilliam *
1841041Swilliam *	longjmp(a,v)
1941041Swilliam * will generate a "return(v)" from the last call to
2041041Swilliam *	setjmp(a)
2141041Swilliam * by restoring registers from the stack.
2241041Swilliam * The previous signal state is restored.
2341041Swilliam */
2441041Swilliam
2541041Swilliam#include "DEFS.h"
2641041Swilliam
2741041SwilliamENTRY(setjmp)
2841041Swilliam	pushl	$0
2941041Swilliam	call	_sigblock
3041041Swilliam	popl	%edx
3141041Swilliam	movl	4(%esp),%ecx
3241041Swilliam	movl	0(%esp),%edx
3341041Swilliam	movl	%edx, 0(%ecx)
3441041Swilliam	movl	%ebx, 4(%ecx)
3541041Swilliam	movl	%esp, 8(%ecx)
3641041Swilliam	movl	%ebp,12(%ecx)
3741041Swilliam	movl	%esi,16(%ecx)
3841041Swilliam	movl	%edi,20(%ecx)
3941041Swilliam	movl	%eax,24(%ecx)
4041041Swilliam	movl	$0,%eax
4141041Swilliam	ret
4241041Swilliam
4341041SwilliamENTRY(longjmp)
4441041Swilliam	movl	4(%esp),%edx
4541041Swilliam	pushl	24(%edx)
4641041Swilliam	call	_sigsetmask
4741041Swilliam	popl	%eax
4841041Swilliam	movl	4(%esp),%edx
4941041Swilliam	movl	8(%esp),%eax
5041041Swilliam	movl	0(%edx),%ecx
5141041Swilliam	movl	4(%edx),%ebx
5241041Swilliam	movl	8(%edx),%esp
5341041Swilliam	movl	12(%edx),%ebp
5441041Swilliam	movl	16(%edx),%esi
5541041Swilliam	movl	20(%edx),%edi
5641041Swilliam	cmpl	$0,%eax
5741041Swilliam	jne	1f
5841041Swilliam	movl	$1,%eax
5941041Swilliam1:	movl	%ecx,0(%esp)
6041041Swilliam	ret
61