e500 port: setjmp/longjmp.
authorJoseph Myers <joseph@codesourcery.com>
Wed, 18 Sep 2013 14:46:57 +0000 (14:46 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 18 Sep 2013 14:46:57 +0000 (14:46 +0000)
ChangeLog
sysdeps/powerpc/powerpc32/__longjmp-common.S
sysdeps/powerpc/powerpc32/setjmp-common.S

index e377dc0..2a8feff 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index 7874473..df1d519 100644 (file)
 # 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)
index 60b0026..3fb65b5 100644 (file)
 # 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