From: Jun Sun <jsun@mvista.com>
To: Andreas Jaeger <aj@suse.de>
Cc: "Kevin D. Kissell" <kevink@mips.com>,
Florian Lohoff <flo@rfc822.org>,
linux-mips@oss.sgi.com
Subject: Re: [RESUME] fpu emulator
Date: Thu, 08 Feb 2001 12:42:40 -0800 [thread overview]
Message-ID: <3A8304C0.D3CFFEF7@mvista.com> (raw)
In-Reply-To: hor919tm4a.fsf@gee.suse.de
[-- Attachment #1: Type: text/plain, Size: 617 bytes --]
Andreas Jaeger wrote:
>
> > saves/restores the FP registers in setjmp/longjmp, the
>
> Any ideas how this can be done?
>
> > model of "simply sending SIGILL/SIGFPE" will result
> > in *all* processes being terminated with extreme prejudice,
> > starting with init!
>
There is a patch for glibc2.0.7, which I think was done by Jay Carlson. It
basically works for glibc2.0.6 as well. See the one for glibc2.0.6 attached
below.
I think the patch is not "clean", in the sense that you only want to apply it
if you want to configure with "--without-fp". Otherwise the patch will break
other configurations.
Jun
[-- Attachment #2: glibc-2.0.6-mips-softfloat.patch --]
[-- Type: text/plain, Size: 2816 bytes --]
--- glibc-2.0.6/sysdeps/mips/__longjmp.c.orig-rpm Sat Sep 11 00:01:44 1999
+++ glibc-2.0.6/sysdeps/mips/__longjmp.c Sat Sep 11 00:02:36 1999
@@ -35,6 +35,7 @@
along the way. */
register int val asm ("a1");
+#ifdef __HAVE_FPU__
/* Pull back the floating point callee-saved registers. */
asm volatile ("l.d $f20, %0" : : "m" (env[0].__fpregs[0]));
asm volatile ("l.d $f22, %0" : : "m" (env[0].__fpregs[1]));
@@ -42,13 +43,16 @@
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
/* Restore the stack pointer. */
asm volatile ("lw $29, %0" : : "m" (env[0].__sp));
+#ifdef __HAVE_FPU__
/* Get and reconstruct the floating point csr. */
asm volatile ("lw $2, %0" : : "m" (env[0].__fpc_csr));
asm volatile ("ctc1 $2, $31");
+#endif
/* Get the FP. */
asm volatile ("lw $30, %0" : : "m" (env[0].__fp));
--- glibc-2.0.6/sysdeps/mips/setjmp_aux.c.orig-rpm Sat Sep 11 00:04:00 1999
+++ glibc-2.0.6/sysdeps/mips/setjmp_aux.c Sat Sep 11 00:04:24 1999
@@ -26,6 +26,7 @@
int
__sigsetjmp_aux (jmp_buf env, int savemask, int sp, int fp)
{
+#ifdef __HAVE_FPU__
/* Store the floating point callee-saved registers... */
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]));
@@ -33,6 +34,7 @@
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 ("sw $31, %0" : : "m" (env[0].__jmpbuf[0].__pc));
@@ -56,8 +58,10 @@
asm volatile ("sw $22, %0" : : "m" (env[0].__jmpbuf[0].__regs[6]));
asm volatile ("sw $23, %0" : : "m" (env[0].__jmpbuf[0].__regs[7]));
+#ifdef __HAVE_FPU__
/* .. and finally get and reconstruct the floating point csr. */
asm ("cfc1 %0, $31" : "=r" (env[0].__jmpbuf[0].__fpc_csr));
+#endif
/* Save the signal mask if requested. */
return __sigjmp_save (env, savemask);
--- glibc-2.0.6/sysdeps/mips/fpu_control.h.orig-rpm Sat Sep 11 00:18:51 1999
+++ glibc-2.0.6/sysdeps/mips/fpu_control.h Sat Sep 11 00:10:44 1999
@@ -83,8 +83,13 @@
typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__)));
/* Macros for accessing the hardware control word. */
+#ifdef __HAVE_FPU__
#define _FPU_GETCW(cw) __asm__ ("cfc1 %0,$31" : "=r" (cw) : )
#define _FPU_SETCW(cw) __asm__ ("ctc1 %0,$31" : : "r" (cw))
+#else
+#define _FPU_GETCW(cw) (_FPU_DEFAULT)
+#define _FPU_SETCW(cw)
+#endif
/* Default control word set at startup. */
extern fpu_control_t __fpu_control;
next prev parent reply other threads:[~2001-02-08 20:44 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-02-08 11:20 [RESUME] fpu emulator Florian Lohoff
2001-02-08 11:43 ` Kevin D. Kissell
2001-02-08 11:43 ` Kevin D. Kissell
2001-02-08 12:06 ` Andreas Jaeger
2001-02-08 12:06 ` Andreas Jaeger
2001-02-08 20:42 ` Jun Sun [this message]
2001-02-09 9:17 ` Andreas Jaeger
2001-02-09 19:30 ` Jun Sun
2001-02-09 20:31 ` Andreas Jaeger
2001-02-09 21:09 ` Jun Sun
2001-02-08 12:33 ` Florian Lohoff
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3A8304C0.D3CFFEF7@mvista.com \
--to=jsun@mvista.com \
--cc=aj@suse.de \
--cc=flo@rfc822.org \
--cc=kevink@mips.com \
--cc=linux-mips@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.