mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-29 16:21:07 +00:00
e500 port: setjmp/longjmp.
This commit is contained in:
parent
d13ef0662f
commit
2e071de0f7
@ -1,5 +1,12 @@
|
||||
2013-09-18 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* sysdeps/powerpc/powerpc32/__longjmp-common.S (LOAD_GP): Define
|
||||
macro conditional on [__SPE__ || (__NO_FPRS__ && !_SOFT_FLOAT)].
|
||||
(__longjmp): Use LOAD_GP to load saved GPRs.
|
||||
* sysdeps/powerpc/powerpc32/setjmp-common.S (SAVE_GP): Define
|
||||
macro conditional on [__SPE__ || (__NO_FPRS__ && !_SOFT_FLOAT)].
|
||||
(__sigsetjmp): Use SAVE_GP to save GPRs.
|
||||
|
||||
* sysdeps/powerpc/powerpc32/Makefile [$(with-fp) = no] (+cflags):
|
||||
Do not append -msoft-float.
|
||||
[$(with-fp) = no] (sysdep-LDFLAGS): Likewise.
|
||||
|
@ -24,6 +24,12 @@
|
||||
# include <jmpbuf-offsets.h>
|
||||
#endif
|
||||
|
||||
#if defined __SPE__ || (defined __NO_FPRS__ && !defined _SOFT_FLOAT)
|
||||
# define LOAD_GP(N) evldd r##N,((JB_FPRS+((N)-14)*2)*4)(r3)
|
||||
#else
|
||||
# define LOAD_GP(N) lwz r##N,((JB_GPRS+(N)-14)*4)(r3)
|
||||
#endif
|
||||
|
||||
ENTRY (__longjmp)
|
||||
|
||||
#if defined PTR_DEMANGLE || defined CHECK_SP
|
||||
@ -39,13 +45,13 @@ ENTRY (__longjmp)
|
||||
lwz r1,(JB_GPR1*4)(r3)
|
||||
#endif
|
||||
lwz r0,(JB_LR*4)(r3)
|
||||
lwz r14,((JB_GPRS+0)*4)(r3)
|
||||
lwz r15,((JB_GPRS+1)*4)(r3)
|
||||
lwz r16,((JB_GPRS+2)*4)(r3)
|
||||
lwz r17,((JB_GPRS+3)*4)(r3)
|
||||
lwz r18,((JB_GPRS+4)*4)(r3)
|
||||
lwz r19,((JB_GPRS+5)*4)(r3)
|
||||
lwz r20,((JB_GPRS+6)*4)(r3)
|
||||
LOAD_GP (14)
|
||||
LOAD_GP (15)
|
||||
LOAD_GP (16)
|
||||
LOAD_GP (17)
|
||||
LOAD_GP (18)
|
||||
LOAD_GP (19)
|
||||
LOAD_GP (20)
|
||||
#ifdef PTR_DEMANGLE
|
||||
# ifndef CHECK_SP
|
||||
PTR_DEMANGLE3 (r1, r24, r25)
|
||||
@ -53,19 +59,19 @@ ENTRY (__longjmp)
|
||||
PTR_DEMANGLE2 (r0, r25)
|
||||
#endif
|
||||
mtlr r0
|
||||
lwz r21,((JB_GPRS+7)*4)(r3)
|
||||
lwz r22,((JB_GPRS+8)*4)(r3)
|
||||
LOAD_GP (21)
|
||||
LOAD_GP (22)
|
||||
lwz r0,(JB_CR*4)(r3)
|
||||
lwz r23,((JB_GPRS+9)*4)(r3)
|
||||
lwz r24,((JB_GPRS+10)*4)(r3)
|
||||
lwz r25,((JB_GPRS+11)*4)(r3)
|
||||
LOAD_GP (23)
|
||||
LOAD_GP (24)
|
||||
LOAD_GP (25)
|
||||
mtcrf 0xFF,r0
|
||||
lwz r26,((JB_GPRS+12)*4)(r3)
|
||||
lwz r27,((JB_GPRS+13)*4)(r3)
|
||||
lwz r28,((JB_GPRS+14)*4)(r3)
|
||||
lwz r29,((JB_GPRS+15)*4)(r3)
|
||||
lwz r30,((JB_GPRS+16)*4)(r3)
|
||||
lwz r31,((JB_GPRS+17)*4)(r3)
|
||||
LOAD_GP (26)
|
||||
LOAD_GP (27)
|
||||
LOAD_GP (28)
|
||||
LOAD_GP (29)
|
||||
LOAD_GP (30)
|
||||
LOAD_GP (31)
|
||||
mr r3,r4
|
||||
blr
|
||||
END (__longjmp)
|
||||
|
@ -24,6 +24,11 @@
|
||||
# include <jmpbuf-offsets.h>
|
||||
#endif
|
||||
|
||||
#if defined __SPE__ || (defined __NO_FPRS__ && !defined _SOFT_FLOAT)
|
||||
# define SAVE_GP(N) evstdd r##N,((JB_FPRS+((N)-14)*2)*4)(3)
|
||||
#else
|
||||
# define SAVE_GP(N) stw r##N,((JB_GPRS+(N)-14)*4)(3)
|
||||
#endif
|
||||
|
||||
ENTRY (__sigsetjmp)
|
||||
|
||||
@ -35,31 +40,31 @@ ENTRY (__sigsetjmp)
|
||||
stw r1,(JB_GPR1*4)(3)
|
||||
#endif
|
||||
mflr r0
|
||||
stw r14,((JB_GPRS+0)*4)(3)
|
||||
SAVE_GP (14)
|
||||
#ifdef PTR_MANGLE
|
||||
PTR_MANGLE2 (r0, r10)
|
||||
li r10,0
|
||||
#endif
|
||||
stw r0,(JB_LR*4)(3)
|
||||
stw r15,((JB_GPRS+1)*4)(3)
|
||||
SAVE_GP (15)
|
||||
mfcr r0
|
||||
stw r16,((JB_GPRS+2)*4)(3)
|
||||
SAVE_GP (16)
|
||||
stw r0,(JB_CR*4)(3)
|
||||
stw r17,((JB_GPRS+3)*4)(3)
|
||||
stw r18,((JB_GPRS+4)*4)(3)
|
||||
stw r19,((JB_GPRS+5)*4)(3)
|
||||
stw r20,((JB_GPRS+6)*4)(3)
|
||||
stw r21,((JB_GPRS+7)*4)(3)
|
||||
stw r22,((JB_GPRS+8)*4)(3)
|
||||
stw r23,((JB_GPRS+9)*4)(3)
|
||||
stw r24,((JB_GPRS+10)*4)(3)
|
||||
stw r25,((JB_GPRS+11)*4)(3)
|
||||
stw r26,((JB_GPRS+12)*4)(3)
|
||||
stw r27,((JB_GPRS+13)*4)(3)
|
||||
stw r28,((JB_GPRS+14)*4)(3)
|
||||
stw r29,((JB_GPRS+15)*4)(3)
|
||||
stw r30,((JB_GPRS+16)*4)(3)
|
||||
stw r31,((JB_GPRS+17)*4)(3)
|
||||
SAVE_GP (17)
|
||||
SAVE_GP (18)
|
||||
SAVE_GP (19)
|
||||
SAVE_GP (20)
|
||||
SAVE_GP (21)
|
||||
SAVE_GP (22)
|
||||
SAVE_GP (23)
|
||||
SAVE_GP (24)
|
||||
SAVE_GP (25)
|
||||
SAVE_GP (26)
|
||||
SAVE_GP (27)
|
||||
SAVE_GP (28)
|
||||
SAVE_GP (29)
|
||||
SAVE_GP (30)
|
||||
SAVE_GP (31)
|
||||
#if defined NOT_IN_libc && defined IS_IN_rtld
|
||||
li r3,0
|
||||
blr
|
||||
|
Loading…
Reference in New Issue
Block a user