X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fsetjmp%2Fpowerpc64%2Flongjmp.s;h=81d45ff60bfd0560dbea9e20307ebdf4da55a7fb;hb=59b64ff686cef2a87e9552658b2c8d2531f87176;hp=7f241c2d23270b39aa2cb6e0ce02d73560c3b827;hpb=c0ede9e4046a0882d83ae4b45c7dfac86fb7c15d;p=musl diff --git a/src/setjmp/powerpc64/longjmp.s b/src/setjmp/powerpc64/longjmp.s index 7f241c2d..81d45ff6 100644 --- a/src/setjmp/powerpc64/longjmp.s +++ b/src/setjmp/powerpc64/longjmp.s @@ -10,10 +10,14 @@ longjmp: # 1) restore cr ld 0, 1*8(3) mtcr 0 - # 2) restore r1-r2 (SP and TOC) + # 2) restore SP ld 1, 2*8(3) + # 3) restore TOC into both r2 and the caller's stack. + # Which location is required depends on whether setjmp was called + # locally or non-locally, but it's always safe to restore to both. ld 2, 3*8(3) - # 3) restore r14-r31 + std 2, 24(1) + # 4) restore r14-r31 ld 14, 4*8(3) ld 15, 5*8(3) ld 16, 6*8(3) @@ -32,7 +36,7 @@ longjmp: ld 29, 19*8(3) ld 30, 20*8(3) ld 31, 21*8(3) - # 4) restore floating point registers f14-f31 + # 5) restore floating point registers f14-f31 lfd 14, 22*8(3) lfd 15, 23*8(3) lfd 16, 24*8(3) @@ -52,7 +56,7 @@ longjmp: lfd 30, 38*8(3) lfd 31, 39*8(3) - # 5) restore vector registers v20-v31 + # 6) restore vector registers v20-v31 addi 3, 3, 40*8 lvx 20, 0, 3 ; addi 3, 3, 16 lvx 21, 0, 3 ; addi 3, 3, 16 @@ -67,7 +71,7 @@ longjmp: lvx 30, 0, 3 ; addi 3, 3, 16 lvx 31, 0, 3 - # 6) return r4 ? r4 : 1 + # 7) return r4 ? r4 : 1 mr 3, 4 cmpwi cr7, 4, 0 bne cr7, 1f