fix powerpc setjmp/longjmp to save/restore float regs; enlarge/align jmp_buf
authorRich Felker <dalias@aerifal.cx>
Fri, 23 Nov 2012 19:30:58 +0000 (14:30 -0500)
committerRich Felker <dalias@aerifal.cx>
Fri, 23 Nov 2012 19:30:58 +0000 (14:30 -0500)
arch/powerpc/bits/setjmp.h
src/setjmp/powerpc/longjmp.s
src/setjmp/powerpc/setjmp.s

index a4baec4..ab583ab 100644 (file)
@@ -1 +1 @@
-typedef unsigned long jmp_buf [64];
+typedef unsigned long long jmp_buf [56];
index fd61ae7..bab1751 100644 (file)
@@ -35,6 +35,24 @@ longjmp:
        lwz 29, 72(3)
        lwz 30, 76(3)
        lwz 31, 80(3)
+       lfd 14,88(3)
+       lfd 15,96(3)
+       lfd 16,104(3)
+       lfd 17,112(3)
+       lfd 18,120(3)
+       lfd 19,128(3)
+       lfd 20,136(3)
+       lfd 21,144(3)
+       lfd 22,152(3)
+       lfd 23,160(3)
+       lfd 24,168(3)
+       lfd 25,176(3)
+       lfd 26,184(3)
+       lfd 27,192(3)
+       lfd 28,200(3)
+       lfd 29,208(3)
+       lfd 30,216(3)
+       lfd 31,224(3)
        #5) put val into return reg r3
        mr 3, 4
 
index eaf7b68..e39687a 100644 (file)
@@ -34,6 +34,24 @@ setjmp:
        stw 29, 72(3)
        stw 30, 76(3)
        stw 31, 80(3)
+       stfd 14,88(3)
+       stfd 15,96(3)
+       stfd 16,104(3)
+       stfd 17,112(3)
+       stfd 18,120(3)
+       stfd 19,128(3)
+       stfd 20,136(3)
+       stfd 21,144(3)
+       stfd 22,152(3)
+       stfd 23,160(3)
+       stfd 24,168(3)
+       stfd 25,176(3)
+       stfd 26,184(3)
+       stfd 27,192(3)
+       stfd 28,200(3)
+       stfd 29,208(3)
+       stfd 30,216(3)
+       stfd 31,224(3)
        # 4) set return value to 0
        li 3, 0
        # 5) return