summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/powerpc/setjmp.S
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2001-11-26 09:19:30 +0000
committerDavid Schleef <ds@schleef.org>2001-11-26 09:19:30 +0000
commite4cfe3fb823dc44c0e3e884e53d1ae7c05ae7416 (patch)
tree7ce9d1c188f48f13d57df2be1a681ce1b4e08204 /libc/sysdeps/linux/powerpc/setjmp.S
parentb76b3fcd18d8c7e0ed25cccc355f6f0192c1e83b (diff)
Rewrite vfork() as C, should now work. Changed longjmp.S and setjmp.S
to use GCC's internal ppc-asm.h, and added macro to disable FP save/ restore in longjmp and setjmp. Fixed name of _setjmp() (was __setjmp). Fixed _setjmp to be PIC.
Diffstat (limited to 'libc/sysdeps/linux/powerpc/setjmp.S')
-rw-r--r--libc/sysdeps/linux/powerpc/setjmp.S57
1 files changed, 35 insertions, 22 deletions
diff --git a/libc/sysdeps/linux/powerpc/setjmp.S b/libc/sysdeps/linux/powerpc/setjmp.S
index 290669cec..4b3c48a8c 100644
--- a/libc/sysdeps/linux/powerpc/setjmp.S
+++ b/libc/sysdeps/linux/powerpc/setjmp.S
@@ -17,16 +17,25 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include "ppc_asm.h"
+#include <ppc-asm.h>
+#define r1 1
+#define r2 2
#define _ASM
#define _SETJMP_H
#include <bits/setjmp.h>
-.global __setjmp
-.type __setjmp,@function
+#define USE_FP
+#ifdef USE_FP
+#define FP(x...) x
+#else
+#define FP(x...)
+#endif
+
+.global _setjmp
+.type _setjmp,@function
.align 4
-__setjmp:
+_setjmp:
li r4,0
.global __sigsetjmp
.type __sigsetjmp,@function
@@ -36,44 +45,48 @@ __sigsetjmp:
mflr r0
stw r2,(JB_GPR2*4)(3)
stw r14,((JB_GPRS+0)*4)(3)
- stfd fr14,((JB_FPRS+0*2)*4)(3)
+FP( stfd f14,((JB_FPRS+0*2)*4)(3) )
stw r0,(JB_LR*4)(3)
stw r15,((JB_GPRS+1)*4)(3)
- stfd fr15,((JB_FPRS+1*2)*4)(3)
+FP( stfd f15,((JB_FPRS+1*2)*4)(3) )
mfcr r0
stw r16,((JB_GPRS+2)*4)(3)
- stfd fr16,((JB_FPRS+2*2)*4)(3)
+FP( stfd f16,((JB_FPRS+2*2)*4)(3) )
stw r0,(JB_CR*4)(3)
stw r17,((JB_GPRS+3)*4)(3)
- stfd fr17,((JB_FPRS+3*2)*4)(3)
+FP( stfd f7,((JB_FPRS+3*2)*4)(3) )
stw r18,((JB_GPRS+4)*4)(3)
- stfd fr18,((JB_FPRS+4*2)*4)(3)
+FP( stfd f18,((JB_FPRS+4*2)*4)(3) )
stw r19,((JB_GPRS+5)*4)(3)
- stfd fr19,((JB_FPRS+5*2)*4)(3)
+FP( stfd f19,((JB_FPRS+5*2)*4)(3) )
stw r20,((JB_GPRS+6)*4)(3)
- stfd fr20,((JB_FPRS+6*2)*4)(3)
+FP( stfd f20,((JB_FPRS+6*2)*4)(3) )
stw r21,((JB_GPRS+7)*4)(3)
- stfd fr21,((JB_FPRS+7*2)*4)(3)
+FP( stfd f21,((JB_FPRS+7*2)*4)(3) )
stw r22,((JB_GPRS+8)*4)(3)
- stfd fr22,((JB_FPRS+8*2)*4)(3)
+FP( stfd f22,((JB_FPRS+8*2)*4)(3) )
stw r23,((JB_GPRS+9)*4)(3)
- stfd fr23,((JB_FPRS+9*2)*4)(3)
+FP( stfd f23,((JB_FPRS+9*2)*4)(3) )
stw r24,((JB_GPRS+10)*4)(3)
- stfd fr24,((JB_FPRS+10*2)*4)(3)
+FP( stfd f24,((JB_FPRS+10*2)*4)(3) )
stw r25,((JB_GPRS+11)*4)(3)
- stfd fr25,((JB_FPRS+11*2)*4)(3)
+FP( stfd f25,((JB_FPRS+11*2)*4)(3) )
stw r26,((JB_GPRS+12)*4)(3)
- stfd fr26,((JB_FPRS+12*2)*4)(3)
+FP( stfd f26,((JB_FPRS+12*2)*4)(3) )
stw r27,((JB_GPRS+13)*4)(3)
- stfd fr27,((JB_FPRS+13*2)*4)(3)
+FP( stfd f27,((JB_FPRS+13*2)*4)(3) )
stw r28,((JB_GPRS+14)*4)(3)
- stfd fr28,((JB_FPRS+14*2)*4)(3)
+FP( stfd f28,((JB_FPRS+14*2)*4)(3) )
stw r29,((JB_GPRS+15)*4)(3)
- stfd fr29,((JB_FPRS+15*2)*4)(3)
+FP( stfd f29,((JB_FPRS+15*2)*4)(3) )
stw r30,((JB_GPRS+16)*4)(3)
- stfd fr30,((JB_FPRS+16*2)*4)(3)
+FP( stfd f30,((JB_FPRS+16*2)*4)(3) )
stw r31,((JB_GPRS+17)*4)(3)
- stfd fr31,((JB_FPRS+17*2)*4)(3)
+FP( stfd f31,((JB_FPRS+17*2)*4)(3) )
+#ifdef __PIC__
+ b __sigjmp_save@PLT
+#else
b __sigjmp_save
+#endif
.size __sigsetjmp,.-__sigsetjmp