xref: /titanic_52/usr/src/boot/lib/libstand/i386/_setjmp.S (revision 4a5d661a82b942b6538acd26209d959ce98b593a)
1*4a5d661aSToomas Soome/*-
2*4a5d661aSToomas Soome * Copyright (c) 1990 The Regents of the University of California.
3*4a5d661aSToomas Soome * All rights reserved.
4*4a5d661aSToomas Soome *
5*4a5d661aSToomas Soome * This code is derived from software contributed to Berkeley by
6*4a5d661aSToomas Soome * William Jolitz.
7*4a5d661aSToomas Soome *
8*4a5d661aSToomas Soome * Redistribution and use in source and binary forms, with or without
9*4a5d661aSToomas Soome * modification, are permitted provided that the following conditions
10*4a5d661aSToomas Soome * are met:
11*4a5d661aSToomas Soome * 1. Redistributions of source code must retain the above copyright
12*4a5d661aSToomas Soome *    notice, this list of conditions and the following disclaimer.
13*4a5d661aSToomas Soome * 2. Redistributions in binary form must reproduce the above copyright
14*4a5d661aSToomas Soome *    notice, this list of conditions and the following disclaimer in the
15*4a5d661aSToomas Soome *    documentation and/or other materials provided with the distribution.
16*4a5d661aSToomas Soome * 4. Neither the name of the University nor the names of its contributors
17*4a5d661aSToomas Soome *    may be used to endorse or promote products derived from this software
18*4a5d661aSToomas Soome *    without specific prior written permission.
19*4a5d661aSToomas Soome *
20*4a5d661aSToomas Soome * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21*4a5d661aSToomas Soome * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22*4a5d661aSToomas Soome * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23*4a5d661aSToomas Soome * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24*4a5d661aSToomas Soome * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25*4a5d661aSToomas Soome * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26*4a5d661aSToomas Soome * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27*4a5d661aSToomas Soome * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28*4a5d661aSToomas Soome * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29*4a5d661aSToomas Soome * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30*4a5d661aSToomas Soome * SUCH DAMAGE.
31*4a5d661aSToomas Soome */
32*4a5d661aSToomas Soome
33*4a5d661aSToomas Soome#if defined(LIBC_RCS) && !defined(lint)
34*4a5d661aSToomas Soome	.text
35*4a5d661aSToomas Soome	.asciz "$FreeBSD$"
36*4a5d661aSToomas Soome#endif /* LIBC_RCS and not lint */
37*4a5d661aSToomas Soome
38*4a5d661aSToomas Soome/*
39*4a5d661aSToomas Soome * C library -- _setjmp, _longjmp
40*4a5d661aSToomas Soome *
41*4a5d661aSToomas Soome *	_longjmp(a,v)
42*4a5d661aSToomas Soome * will generate a "return(v)" from the last call to
43*4a5d661aSToomas Soome *	_setjmp(a)
44*4a5d661aSToomas Soome * by restoring registers from the environment 'a'.
45*4a5d661aSToomas Soome * The previous signal state is NOT restored.
46*4a5d661aSToomas Soome */
47*4a5d661aSToomas Soome
48*4a5d661aSToomas Soome#include <machine/asm.h>
49*4a5d661aSToomas Soome
50*4a5d661aSToomas SoomeENTRY(_setjmp)
51*4a5d661aSToomas Soome	movl	4(%esp),%eax
52*4a5d661aSToomas Soome	movl	0(%esp),%edx
53*4a5d661aSToomas Soome	movl	%edx, 0(%eax)		/* rta */
54*4a5d661aSToomas Soome	movl	%ebx, 4(%eax)
55*4a5d661aSToomas Soome	movl	%esp, 8(%eax)
56*4a5d661aSToomas Soome	movl	%ebp,12(%eax)
57*4a5d661aSToomas Soome	movl	%esi,16(%eax)
58*4a5d661aSToomas Soome	movl	%edi,20(%eax)
59*4a5d661aSToomas Soome	xorl	%eax,%eax
60*4a5d661aSToomas Soome	ret
61*4a5d661aSToomas SoomeEND(_setjmp)
62*4a5d661aSToomas Soome
63*4a5d661aSToomas SoomeENTRY(_longjmp)
64*4a5d661aSToomas Soome	movl	4(%esp),%edx
65*4a5d661aSToomas Soome	movl	8(%esp),%eax
66*4a5d661aSToomas Soome	movl	0(%edx),%ecx
67*4a5d661aSToomas Soome	movl	4(%edx),%ebx
68*4a5d661aSToomas Soome	movl	8(%edx),%esp
69*4a5d661aSToomas Soome	movl	12(%edx),%ebp
70*4a5d661aSToomas Soome	movl	16(%edx),%esi
71*4a5d661aSToomas Soome	movl	20(%edx),%edi
72*4a5d661aSToomas Soome	testl	%eax,%eax
73*4a5d661aSToomas Soome	jnz	1f
74*4a5d661aSToomas Soome	incl	%eax
75*4a5d661aSToomas Soome1:	movl	%ecx,0(%esp)
76*4a5d661aSToomas Soome	ret
77*4a5d661aSToomas SoomeEND(_longjmp)
78