* 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.
This commit is contained in:
parent
fe638fda3c
commit
a5b668cc8a
|
@ -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];
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in a new issue