e500 port: setjmp/longjmp.

This commit is contained in:
Joseph Myers 2013-09-18 14:46:57 +00:00
parent d13ef0662f
commit 2e071de0f7
3 changed files with 54 additions and 36 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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