]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/powerpc/powerpc32/__longjmp-common.S
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / powerpc / powerpc32 / __longjmp-common.S
CommitLineData
5c76ff27 1/* longjmp for PowerPC.
b168057a 2 Copyright (C) 1995-2015 Free Software Foundation, Inc.
5c76ff27
UD
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
59ba27a6
PE
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
5c76ff27
UD
18
19#include <sysdep.h>
eb5ad6b9 20#include <stap-probe.h>
5c76ff27 21#define _ASM
5c76ff27
UD
22#ifdef __NO_VMX__
23# include <novmxsetjmp.h>
24#else
a7140723 25# include <jmpbuf-offsets.h>
5c76ff27 26#endif
5c76ff27 27
2e071de0
JM
28#if defined __SPE__ || (defined __NO_FPRS__ && !defined _SOFT_FLOAT)
29# define LOAD_GP(N) evldd r##N,((JB_FPRS+((N)-14)*2)*4)(r3)
30#else
31# define LOAD_GP(N) lwz r##N,((JB_GPRS+(N)-14)*4)(r3)
32#endif
33
eb5ad6b9 34ENTRY (__longjmp_symbol)
5c76ff27 35
0323b051 36#if defined PTR_DEMANGLE || defined CHECK_SP
4a132246 37 lwz r24,(JB_GPR1*4)(r3)
15efafdf
AS
38# ifdef CHECK_SP
39# ifdef PTR_DEMANGLE
40 PTR_DEMANGLE3 (r24, r24, r25)
41# endif
42 CHECK_SP (r24)
43 mr r1,r24
44# endif
4a132246 45#else
5c76ff27 46 lwz r1,(JB_GPR1*4)(r3)
4a132246 47#endif
5c76ff27 48 lwz r0,(JB_LR*4)(r3)
2e071de0
JM
49 LOAD_GP (14)
50 LOAD_GP (15)
51 LOAD_GP (16)
52 LOAD_GP (17)
53 LOAD_GP (18)
54 LOAD_GP (19)
55 LOAD_GP (20)
00c2b3b9 56#ifdef PTR_DEMANGLE
15efafdf 57# ifndef CHECK_SP
4a132246 58 PTR_DEMANGLE3 (r1, r24, r25)
0323b051 59# endif
4a132246 60 PTR_DEMANGLE2 (r0, r25)
00c2b3b9 61#endif
eb5ad6b9
AZ
62 /* longjmp/longjmp_target probe expects longjmp first argument (4@3),
63 second argument (-4@4), and target address (4@0), respectively. */
64 LIBC_PROBE (longjmp, 3, 4@3, -4@4, 4@0)
5c76ff27 65 mtlr r0
2e071de0
JM
66 LOAD_GP (21)
67 LOAD_GP (22)
eb5ad6b9 68 lwz r5,(JB_CR*4)(r3)
2e071de0
JM
69 LOAD_GP (23)
70 LOAD_GP (24)
71 LOAD_GP (25)
eb5ad6b9 72 mtcrf 0xFF,r5
2e071de0
JM
73 LOAD_GP (26)
74 LOAD_GP (27)
75 LOAD_GP (28)
76 LOAD_GP (29)
77 LOAD_GP (30)
78 LOAD_GP (31)
eb5ad6b9 79 LIBC_PROBE (longjmp_target, 3, 4@3, -4@4, 4@0)
5c76ff27
UD
80 mr r3,r4
81 blr
eb5ad6b9 82END (__longjmp_symbol)