2.5-18.1
[jlayton/glibc.git] / sysdeps / sh / sh3 / __longjmp.S
index cd78cfe5161137df3057d3a91b67f5cdf1748e3c..c6d8a3214c4a52488a22af3d938804c4c79a8912 100644 (file)
@@ -1,5 +1,5 @@
 /* longjmp for SH.
-   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -30,15 +30,28 @@ ENTRY (__longjmp)
        mov.l   @r4+, r10
        mov.l   @r4+, r11
        mov.l   @r4+, r12
-       mov.l   @r4+, r13
-       mov.l   @r4+, r14
-       mov.l   @r4+, r15
        mov     r5, r0          /* get the return value in place */
        tst     r0, r0
        bf.s    1f
-        lds.l  @r4+, pr
+        mov.l  @r4+, r13
        mov     #1,r0           /* can't let setjmp() return zero! */
 1:
+#ifdef PTR_DEMANGLE
+       mov.l   @r4+, r2
+       PTR_DEMANGLE (r2, r1)
+       mov     r2, r14
+       mov.l   @r4+, r2
+       PTR_DEMANGLE2 (r2, r1)
+       mov     r2, r15
+       mov.l   @r4+, r2
+       PTR_DEMANGLE2 (r2, r1)
+       lds     r2, pr
+       mov     #0, r1
+#else
+       mov.l   @r4+, r14
+       mov.l   @r4+, r15
+       lds.l   @r4+, pr
+#endif
        rts
         ldc.l  @r4+, gbr
 END (__longjmp)