[PATCH] [PORTS] PPC fenv fixes for soft-fp

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] [PORTS] PPC fenv fixes for soft-fp

Steven Munroe
This change exposes a few bugs in the soft-fp implementations for PPC.
The current feholdexcept implementation has where it uses fesetenv to
resort the current env:

/* Get the current state. */
fegetenv (envp);

u.fenv = *envp;
/* Clear everything except the rounding mode. */
u.l[0] &= 0x3;

/* ?? Should we clear the disabled exceptions as well ?? */

/* Put the new state in effect. */
fesetenv (envp);

Which is incorrect. It should disable exceptions and pass the updated
env to fesetenv:

/* Disable exceptions */
u.l[1] = FE_ALL_EXCEPT;

/* Put the new state in effect. */
fesetenv (&u.fenv);

Finally the powerpc/nofpu version is missing the libm_hidden_def which
results in a link error in make check.

The attached patch fixes all of these problems.


2007-04-02  Steven Munroe  <[hidden email]>

        * sysdeps/powerpc/nofpu/feholdexcpt.c (feholdexcept): Disable
        exceptions.  Use the updated env in fesetenv().
        Add libm_hidden_def.

diff -urN libc25-cvstip-20070320/ports/sysdeps/powerpc/nofpu/feholdexcpt.c libc25/ports/sysdeps/powerpc/nofpu/feholdexcpt.c
--- libc25-cvstip-20070320/ports/sysdeps/powerpc/nofpu/feholdexcpt.c 2002-10-19 15:06:29.000000000 -0500
+++ libc25/ports/sysdeps/powerpc/nofpu/feholdexcpt.c 2007-04-02 10:57:50.350540888 -0500
@@ -1,6 +1,6 @@
 /* Store current floating-point environment and clear exceptions
    (soft-float edition).
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2007 Free Software Foundation, Inc.
    Contributed by Aldy Hernandez <[hidden email]>, 2002.
    This file is part of the GNU C Library.
 
@@ -33,11 +33,12 @@
   u.fenv = *envp;
   /* Clear everything except the rounding mode.  */
   u.l[0] &= 0x3;
-
-  /* ?? Should we clear the disabled exceptions as well ?? */
+  /* Disable exceptions */
+  u.l[1] = FE_ALL_EXCEPT;
 
   /* Put the new state in effect.  */
-  fesetenv (envp);
+  fesetenv (&u.fenv);
 
   return 0;
 }
+libm_hidden_def (feholdexcept)

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] [PORTS] PPC fenv fixes for soft-fp

Daniel Jacobowitz-2
On Mon, Apr 02, 2007 at 11:59:54AM -0500, Steven Munroe wrote:
> 2007-04-02  Steven Munroe  <[hidden email]>
>
> * sysdeps/powerpc/nofpu/feholdexcpt.c (feholdexcept): Disable
> exceptions.  Use the updated env in fesetenv().
> Add libm_hidden_def.

Sorry for the delay, I committed it.

--
Daniel Jacobowitz
CodeSourcery