diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2003-03-20 22:29:44 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@redhat.com> | 2003-03-20 22:29:44 +0000 |
commit | d20152e148cfba15486243d6ad312005e7ab7e32 (patch) | |
tree | 75eacf2f7560d8a2ac36df13a4c2be899c3e3754 | |
parent | 4b5e1c5f0ef986ccf8a67ed44d701dc18f7d7a44 (diff) | |
download | glibc-d20152e148cfba15486243d6ad312005e7ab7e32.tar.gz glibc-d20152e148cfba15486243d6ad312005e7ab7e32.tar.xz glibc-d20152e148cfba15486243d6ad312005e7ab7e32.zip |
* sysdeps/mips/bits/setjmp.h: n32 has only 6 call-saved fpregs. * sysdeps/mips/mips64/setjmp_aux.c (__sigsetjmp_aux): Adjust. * sysdeps/mips/mips64/__longjmp.c (__longjmp): Likewise.
* sysdeps/mips/bits/setjmp.h: n32 has only 6 call-saved fpregs. * sysdeps/mips/mips64/setjmp_aux.c (__sigsetjmp_aux): Adjust. * sysdeps/mips/mips64/__longjmp.c (__longjmp): Likewise.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | sysdeps/mips/bits/setjmp.h | 6 | ||||
-rw-r--r-- | sysdeps/mips/mips64/__longjmp.c | 11 | ||||
-rw-r--r-- | sysdeps/mips/mips64/setjmp_aux.c | 9 |
4 files changed, 26 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index 6121a0326b..4e291fba72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2003-03-20 Alexandre Oliva <aoliva@redhat.com> + * sysdeps/mips/bits/setjmp.h: n32 has only 6 call-saved fpregs. + * sysdeps/mips/mips64/setjmp_aux.c (__sigsetjmp_aux): Adjust. + * sysdeps/mips/mips64/__longjmp.c (__longjmp): Likewise. + * sysdeps/unix/sysv/linux/mips/pread.c: Don't break up offset into high and low halves on n64. * sysdeps/unix/sysv/linux/mips/pread64.c: Likewise. diff --git a/sysdeps/mips/bits/setjmp.h b/sysdeps/mips/bits/setjmp.h index 562c13243c..b2ee3749dd 100644 --- a/sysdeps/mips/bits/setjmp.h +++ b/sysdeps/mips/bits/setjmp.h @@ -60,10 +60,10 @@ typedef struct int __fpc_csr; /* Callee-saved floating point registers. */ -#if _MIPS_SIM == _MIPS_SIM_ABI32 - double __fpregs[6]; -#else +#if defined _ABI64 && _MIPS_SIM == _ABI64 double __fpregs[8]; +#else + double __fpregs[6]; #endif } __jmp_buf[1]; diff --git a/sysdeps/mips/mips64/__longjmp.c b/sysdeps/mips/mips64/__longjmp.c index 6523d49d9c..32587d1c87 100644 --- a/sysdeps/mips/mips64/__longjmp.c +++ b/sysdeps/mips/mips64/__longjmp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995, 1997, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Brendan Kehoe (brendan@zen.org). @@ -38,6 +38,7 @@ __longjmp (env, val_arg) register int val asm ("a1"); /* Pull back the floating point callee-saved registers. */ +#if defined _ABI64 && _MIPS_SIM == _ABI64 asm volatile ("l.d $f24, %0" : : "m" (env[0].__fpregs[0])); asm volatile ("l.d $f25, %0" : : "m" (env[0].__fpregs[1])); asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[2])); @@ -46,6 +47,14 @@ __longjmp (env, val_arg) asm volatile ("l.d $f29, %0" : : "m" (env[0].__fpregs[5])); asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[6])); asm volatile ("l.d $f31, %0" : : "m" (env[0].__fpregs[7])); +#else + asm volatile ("l.d $f20, %0" : : "m" (env[0].__fpregs[0])); + asm volatile ("l.d $f22, %0" : : "m" (env[0].__fpregs[1])); + asm volatile ("l.d $f24, %0" : : "m" (env[0].__fpregs[2])); + asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[3])); + asm volatile ("l.d $f28, %0" : : "m" (env[0].__fpregs[4])); + asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[5])); +#endif /* Get and reconstruct the floating point csr. */ asm volatile ("lw $2, %0" : : "m" (env[0].__fpc_csr)); diff --git a/sysdeps/mips/mips64/setjmp_aux.c b/sysdeps/mips/mips64/setjmp_aux.c index db75a21a30..b55a3c6c11 100644 --- a/sysdeps/mips/mips64/setjmp_aux.c +++ b/sysdeps/mips/mips64/setjmp_aux.c @@ -29,6 +29,7 @@ __sigsetjmp_aux (jmp_buf env, int savemask, long long sp, long long fp, long long gp) { /* Store the floating point callee-saved registers... */ +#if defined _ABI64 && _MIPS_SIM == _ABI64 asm volatile ("s.d $f24, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[0])); asm volatile ("s.d $f25, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[1])); asm volatile ("s.d $f26, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[2])); @@ -37,6 +38,14 @@ __sigsetjmp_aux (jmp_buf env, int savemask, long long sp, long long fp, asm volatile ("s.d $f29, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[5])); asm volatile ("s.d $f30, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[6])); asm volatile ("s.d $f31, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[7])); +#else + asm volatile ("s.d $f20, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[0])); + asm volatile ("s.d $f22, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[1])); + asm volatile ("s.d $f24, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[2])); + asm volatile ("s.d $f26, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[3])); + asm volatile ("s.d $f28, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[4])); + asm volatile ("s.d $f30, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[5])); +#endif /* .. and the PC; */ asm volatile ("sd $31, %0" : : "m" (env[0].__jmpbuf[0].__pc)); |