]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* sysdeps/powerpc/nofpu/fsetexcptflg.c (__fesetexceptflag): Do not
authorDaniel Jacobowitz <dan@codesourcery.com>
Wed, 29 Aug 2007 20:34:36 +0000 (20:34 +0000)
committerDaniel Jacobowitz <dan@codesourcery.com>
Wed, 29 Aug 2007 20:34:36 +0000 (20:34 +0000)
clobber other exceptions.
* sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Raise new
exceptions.
* sysdeps/powerpc/nofpu/fraiseexcpt.c (__feraiseexcept): Handle
multiple new exceptions if some are disabled.
* sysdeps/powerpc/nofpu/sim-full.c (__simulate_exceptions): Likewise.

ChangeLog.powerpc
sysdeps/powerpc/nofpu/feupdateenv.c
sysdeps/powerpc/nofpu/fraiseexcpt.c
sysdeps/powerpc/nofpu/fsetexcptflg.c
sysdeps/powerpc/nofpu/sim-full.c

index c775ee052b8b62db78e926e4ff76c04e962cad48..463dd291a560662f87ff1059ebcc131ca2b171b9 100644 (file)
@@ -1,3 +1,13 @@
+2007-08-29  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * sysdeps/powerpc/nofpu/fsetexcptflg.c (__fesetexceptflag): Do not
+       clobber other exceptions.
+       * sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Raise new
+       exceptions.
+       * sysdeps/powerpc/nofpu/fraiseexcpt.c (__feraiseexcept): Handle
+       multiple new exceptions if some are disabled.
+       * sysdeps/powerpc/nofpu/sim-full.c (__simulate_exceptions): Likewise.
+
 2007-07-13  Steven Munroe  <sjmunroe@us.ibm.com>
 
        * sysdeps/powerpc/nofpu/Makefile: Remove fe_nomask from libm-support.
index 5073776e7dba118804756a53a377032b00f28959..17af8d3ec0d8e8ed955aaeefd97150414e777936 100644 (file)
 
 #include "soft-fp.h"
 #include "soft-supp.h"
+#include <signal.h>
 #include <bp-sym.h>
 
 int
 __feupdateenv (const fenv_t *envp)
 {
-  fenv_union_t u;
   int saved_exceptions;
 
   /* Save currently set exceptions.  */
@@ -37,6 +37,8 @@ __feupdateenv (const fenv_t *envp)
 
   /* Raise old exceptions.  */
   __sim_exceptions |= saved_exceptions;
+  if (saved_exceptions & ~__sim_disabled_exceptions)
+    raise (SIGFPE);
 
   return 0;
 }
index cd915027e14d1aba93ea85e7f7c2ea2cb64263a6..5d3a87fe8e9af81098844a63a911d7f9e53f0bec 100644 (file)
@@ -28,10 +28,7 @@ int
 __feraiseexcept (int x)
 {
   __sim_exceptions |= x;
-  if (x == 0 || __sim_disabled_exceptions & x)
-    /* Ignore exception.  */
-    ;
-  else
+  if (x & ~__sim_disabled_exceptions)
     raise (SIGFPE);
   return 0;
 }
index 85fd88f01f84c9402ca4dcbe7c512d500efa8beb..2faeb1f103b2dd66dffa17c728e568d2ff02344c 100644 (file)
@@ -26,7 +26,7 @@ int
 __fesetexceptflag(const fexcept_t *flagp, int excepts)
 {
   /* Ignore exceptions not listed in 'excepts'.  */
-  __sim_exceptions = *flagp & excepts;
+  __sim_exceptions = (__sim_exceptions & ~excepts) | (*flagp & excepts);
 
   return 0;
 }
index d018240e6db977ca96dc68389bc056e4a5e9e82f..d5ee007ca98a6e362a1b34eff98daeb1044c29dd 100644 (file)
@@ -37,9 +37,6 @@ void
 __simulate_exceptions (int x)
 {
   __sim_exceptions |= x;
-  if (x == 0 || __sim_disabled_exceptions & x)
-    /* Ignore exception.  */
-    ;
-  else
+  if (x & ~__sim_disabled_exceptions)
     raise (SIGFPE);
 }