* 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 c775ee0..463dd29 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 5073776..17af8d3 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 cd91502..5d3a87f 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 85fd88f..2faeb1f 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 d018240..d5ee007 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);
 }