Remove building with NOCRYPTO option
[minix3.git] / lib / libc / arch / sparc / gen / _setjmp.S
blobdb8fb5bd2f889481167e2b1c0d7efb1eea222f08
1 /*      $NetBSD: _setjmp.S,v 1.10 2014/07/12 19:11:57 nakayama Exp $    */
3 /*-
4  * Copyright (c) 1999 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Paul Kranenburg.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
32 #include <machine/asm.h>
33 #include <machine/trap.h>
35 #if defined(LIBC_SCCS) && !defined(lint)
36 RCSID("$NetBSD: _setjmp.S,v 1.10 2014/07/12 19:11:57 nakayama Exp $")
37 #endif /* LIBC_SCCS and not lint */
40  * C library -- _setjmp, _longjmp
41  *
42  *      _longjmp(a,v)
43  * will generate a "return(v?v:1)" from
44  * the last call to
45  *      _setjmp(a)
46  * The previous signal state is NOT restored.
47  */
49 ENTRY(_setjmp)
50         /* store important globals, sigsetjmp compatible */
51         st      %g3, [%o0 + 16]
52         st      %g2, [%o0 + 24]
53         st      %g4, [%o0 + 48]
54         st      %g7, [%o0 + 52]
56         st      %sp, [%o0+0]    /* store caller's stack pointer */
57         st      %o7, [%o0+4]    /* and the return pc */
58         retl
59          clr    %o0             ! return 0
61 ENTRY(_longjmp)
62 #ifdef __sparc_v9__
63         save    %sp, -CCFSZ, %sp
64         flushw
65         /*
66          * We restore the saved stack pointer to %fp, then issue
67          * a `restore' instruction which will reload the register
68          * window from the stack.
69          */
70         ld      [%i0 + 16], %g3
71         ld      [%i0 + 24], %g2
72         ld      [%i0 + 48], %g4
73         ld      [%i0 + 52], %g7
74         ld      [%i0 + 4], %i7  /* restore return pc */
75         ld      [%i0 + 0], %fp  /* and stack pointer */
76         mov     1, %i0
77         movrnz  %i1, %i1, %i0   ! compute v ? v : 1
78         ret
79          restore
80 #else
81         save    %sp, -64, %sp   ! set up a local stack frame
82         tst     %i1             ! compute v ? v : 1
83         be,a    0f
84          mov    1, %i1
86         t       ST_FLUSHWIN     ! flush register windows out to the stack
88         /* restore globals */
89         ld      [%i0 + 16], %g3
90         ld      [%i0 + 24], %g2
91         ld      [%i0 + 48], %g4
92         ld      [%i0 + 52], %g7
94         /*
95          * We restore the saved stack pointer to %fp, then issue
96          * a `restore' instruction which will reload the register
97          * window from the stack.
98          */
99         ld      [%i0+4], %i7    /* restore return pc */
100         ld      [%i0+0], %fp    /* and stack pointer */
102         ret                     ! success, return %i1
103          restore        %i1, 0, %o0
104 #endif