1178580Simp/*	$NetBSD: sigsetjmp.S,v 1.8 2005/09/17 11:49:39 tsutsui Exp $	*/
2178580Simp
3178580Simp/*-
4178580Simp * Copyright (c) 1991, 1993, 1995,
5178580Simp *	The Regents of the University of California.  All rights reserved.
6178580Simp *
7178580Simp * This code is derived from software contributed to Berkeley by
8178580Simp * Havard Eidnes.
9178580Simp *
10178580Simp * Redistribution and use in source and binary forms, with or without
11178580Simp * modification, are permitted provided that the following conditions
12178580Simp * are met:
13178580Simp * 1. Redistributions of source code must retain the above copyright
14178580Simp *    notice, this list of conditions and the following disclaimer.
15178580Simp * 2. Redistributions in binary form must reproduce the above copyright
16178580Simp *    notice, this list of conditions and the following disclaimer in the
17178580Simp *    documentation and/or other materials provided with the distribution.
18178580Simp * 3. Neither the name of the University nor the names of its contributors
19178580Simp *    may be used to endorse or promote products derived from this software
20178580Simp *    without specific prior written permission.
21178580Simp *
22178580Simp * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23178580Simp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24178580Simp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25178580Simp * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26178580Simp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27178580Simp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28178580Simp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29178580Simp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30178580Simp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31178580Simp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32178580Simp * SUCH DAMAGE.
33178580Simp */
34178580Simp
35178580Simp#include <machine/asm.h>
36178580Simp__FBSDID("$FreeBSD: releng/10.3/lib/libc/mips/gen/sigsetjmp.S 282143 2015-04-28 12:52:08Z emaste $");
37178580Simp#include <machine/regnum.h>
38178580Simp#if defined(LIBC_SCCS) && !defined(lint)
39178580Simp	ASMSTR("from: @(#)setjmp.s	8.1 (Berkeley) 6/4/93")
40178580Simp	ASMSTR("$NetBSD: sigsetjmp.S,v 1.8 2005/09/17 11:49:39 tsutsui Exp $")
41178580Simp#endif /* LIBC_SCCS and not lint */
42178580Simp
43209231Sjchandra#include "SYS.h"
44209231Sjchandra
45178580Simp#ifdef __ABICALLS__
46178580Simp	.abicalls
47178580Simp#endif
48178580Simp
49178580Simp/*
50178580Simp * C library -- sigsetjmp, siglongjmp
51178580Simp *
52178580Simp *	siglongjmp(a,v)
53178580Simp * will generate a "return(v)" from
54178580Simp * the last call to
55178580Simp *	sigsetjmp(a, savemask)
56178580Simp * by restoring registers from the stack,
57178580Simp * and dependent on savemask restores the
58178580Simp * signal mask.
59178580Simp */
60178580Simp
61178580SimpLEAF(sigsetjmp)
62209231Sjchandra	PIC_PROLOGUE(sigsetjmp)
63209231Sjchandra
64282143Semaste	bne	a1, zero, 1f			# do saving of signal mask?
65209231Sjchandra	PIC_TAILCALL(_setjmp)
66178580Simp
67209231Sjchandra1:	PIC_TAILCALL(setjmp)
68178580SimpEND(sigsetjmp)
69178580Simp
70178580SimpLEAF(siglongjmp)
71209231Sjchandra	PIC_PROLOGUE(siglongjmp)
72209231Sjchandra	REG_L	t0, (_JB_MAGIC  * SZREG)(a0)
73209231Sjchandra	REG_LI	t1, _JB_MAGIC__SETJMP
74178580Simp	bne	t0, t1, 1f			# setjmp or _setjmp magic?
75209231Sjchandra	PIC_TAILCALL(_longjmp)
76209231Sjchandra1:	PIC_TAILCALL(longjmp)
77178580SimpEND(siglongjmp)
78