riscv32: decouple from riscv64
[uclibc-ng.git] / libc / sysdeps / linux / riscv32 / setjmp.S
blob100a0bd78be539e08b152db07e994f82d6a49075
1 /* setjmp for RISC-V.
2    Copyright (C) 1996-2018 Free Software Foundation, Inc.
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library.  If not, see
16    <http://www.gnu.org/licenses/>.  */
18 #include <sysdep.h>
19 #include <sys/asm.h>
21 ENTRY (_setjmp)
22   li    a1, 0
23   j     HIDDEN_JUMPTARGET (__sigsetjmp)
24 END (_setjmp)
25 ENTRY (setjmp)
26   li    a1, 1
27   /* Fallthrough */
28 END (setjmp)
29 ENTRY (__sigsetjmp)
30         REG_S ra,  0*SZREG(a0)
31         REG_S s0,  1*SZREG(a0)
32         REG_S s1,  2*SZREG(a0)
33         REG_S s2,  3*SZREG(a0)
34         REG_S s3,  4*SZREG(a0)
35         REG_S s4,  5*SZREG(a0)
36         REG_S s5,  6*SZREG(a0)
37         REG_S s6,  7*SZREG(a0)
38         REG_S s7,  8*SZREG(a0)
39         REG_S s8,  9*SZREG(a0)
40         REG_S s9, 10*SZREG(a0)
41         REG_S s10,11*SZREG(a0)
42         REG_S s11,12*SZREG(a0)
43         REG_S sp, 13*SZREG(a0)
45 #ifndef __riscv_float_abi_soft
46         FREG_S fs0, 14*SZREG+ 0*SZFREG(a0)
47         FREG_S fs1, 14*SZREG+ 1*SZFREG(a0)
48         FREG_S fs2, 14*SZREG+ 2*SZFREG(a0)
49         FREG_S fs3, 14*SZREG+ 3*SZFREG(a0)
50         FREG_S fs4, 14*SZREG+ 4*SZFREG(a0)
51         FREG_S fs5, 14*SZREG+ 5*SZFREG(a0)
52         FREG_S fs6, 14*SZREG+ 6*SZFREG(a0)
53         FREG_S fs7, 14*SZREG+ 7*SZFREG(a0)
54         FREG_S fs8, 14*SZREG+ 8*SZFREG(a0)
55         FREG_S fs9, 14*SZREG+ 9*SZFREG(a0)
56         FREG_S fs10,14*SZREG+10*SZFREG(a0)
57         FREG_S fs11,14*SZREG+11*SZFREG(a0)
58 #endif
60 #if !IS_IN_libc && IS_IN_rtld
61   /* In ld.so we never save the signal mask.  */
62   li a0, 0
63   ret
64 #else
65   /* Make a tail call to __sigjmp_save; it takes the same args.  */
66   j __sigjmp_save
67 #endif
70 END (__sigsetjmp)
72 hidden_def (__sigsetjmp)
73 weak_alias (_setjmp, __GI__setjmp)