From a50136dfe186a3ea3d78a4264187915ad16ab861 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Fri, 23 Nov 2012 14:30:58 -0500 Subject: [PATCH] fix powerpc setjmp/longjmp to save/restore float regs; enlarge/align jmp_buf --- arch/powerpc/bits/setjmp.h | 2 +- src/setjmp/powerpc/longjmp.s | 18 ++++++++++++++++++ src/setjmp/powerpc/setjmp.s | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/bits/setjmp.h b/arch/powerpc/bits/setjmp.h index a4baec4c..ab583aba 100644 --- a/arch/powerpc/bits/setjmp.h +++ b/arch/powerpc/bits/setjmp.h @@ -1 +1 @@ -typedef unsigned long jmp_buf [64]; +typedef unsigned long long jmp_buf [56]; diff --git a/src/setjmp/powerpc/longjmp.s b/src/setjmp/powerpc/longjmp.s index fd61ae7b..bab17511 100644 --- a/src/setjmp/powerpc/longjmp.s +++ b/src/setjmp/powerpc/longjmp.s @@ -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 diff --git a/src/setjmp/powerpc/setjmp.s b/src/setjmp/powerpc/setjmp.s index eaf7b684..e39687aa 100644 --- a/src/setjmp/powerpc/setjmp.s +++ b/src/setjmp/powerpc/setjmp.s @@ -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