Browse Source

fix powerpc setjmp/longjmp to save/restore float regs; enlarge/align jmp_buf

Rich Felker 12 years ago
parent
commit
a50136dfe1
3 changed files with 37 additions and 1 deletions
  1. 1 1
      arch/powerpc/bits/setjmp.h
  2. 18 0
      src/setjmp/powerpc/longjmp.s
  3. 18 0
      src/setjmp/powerpc/setjmp.s

+ 1 - 1
arch/powerpc/bits/setjmp.h

@@ -1 +1 @@
-typedef unsigned long jmp_buf [64];
+typedef unsigned long long jmp_buf [56];

+ 18 - 0
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
 

+ 18 - 0
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