]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/sh/sh3/__longjmp.S
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / sysdeps / sh / sh3 / __longjmp.S
1 /* longjmp for SH.
2 Copyright (C) 1999-2019 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
18
19 #include <sysdep.h>
20 #define _SETJMP_H
21 #define _ASM
22 #include <bits/setjmp.h>
23
24 /* __longjmp(jmpbuf, val) */
25
26 ENTRY (__longjmp)
27 mov.l @r4+, r8
28 mov.l @r4+, r9
29 mov.l @r4+, r10
30 mov.l @r4+, r11
31 mov.l @r4+, r12
32 mov r5, r0 /* get the return value in place */
33 tst r0, r0
34 bf.s 1f
35 mov.l @r4+, r13
36 mov #1,r0 /* can't let setjmp() return zero! */
37 1:
38 #ifdef PTR_DEMANGLE
39 mov.l @r4+, r2
40 PTR_DEMANGLE (r2, r1)
41 mov r2, r14
42 mov.l @r4+, r2
43 PTR_DEMANGLE2 (r2, r1)
44 # ifdef CHECK_SP
45 CHECK_SP (r2)
46 # endif
47 mov r2, r15
48 mov.l @r4+, r2
49 PTR_DEMANGLE2 (r2, r1)
50 lds r2, pr
51 mov #0, r1
52 #else
53 mov.l @r4+, r14
54 # ifdef CHECK_SP
55 mov.l @r4, r2
56 CHECK_SP (r2)
57 # endif
58 mov.l @r4+, r15
59 lds.l @r4+, pr
60 #endif
61 rts
62 ldc.l @r4+, gbr
63 END (__longjmp)