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 a4baec4c7b70291976b791ed5f9303ede1dc0d90..ab583abafd93b6c92e2e548824a83f9fd45091e9 100644 (file)
@@ -1 +1 @@
-typedef unsigned long jmp_buf [64];
+typedef unsigned long long jmp_buf [56];
index fd61ae7b42bb56d829c62226fa9fe03a95af7519..bab1751176ecdde88458de482bcb9c04617454d6 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 eaf7b684f67dcc76124fc7930b4b08af2ac3be0c..e39687aa6999dfa221814475eee1ab47ad8252fa 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