op-common.h, op-4.h: Update from glibc CVS.
authorJoseph Myers <joseph@codesourcery.com>
Mon, 15 Jan 2007 23:56:32 +0000 (23:56 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Mon, 15 Jan 2007 23:56:32 +0000 (23:56 +0000)
* config/soft-fp/op-common.h, config/soft-fp/op-4.h: Update from
glibc CVS.

From-SVN: r120806

gcc/ChangeLog
gcc/config/soft-fp/op-4.h
gcc/config/soft-fp/op-common.h

index 30bc446..74b2285 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-15  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * config/soft-fp/op-common.h, config/soft-fp/op-4.h: Update from
+       glibc CVS.
+
 2007-01-15  Tom Tromey  <tromey@redhat.com>
 
        * doc/sourcebuild.texi (libgcj Tests): Don't mention jacks.
index 34f5098..1b90535 100644 (file)
     r1 = x1 - y1;                                              \
     _c2 = r1 > x1;                                             \
     r1 -= _c1;                                                 \
-    _c2 |= r1 > _c1;                                           \
+    _c2 |= _c1 && (y1 == x1);                                  \
     r2 = x2 - y2 - _c2;                                                \
   } while (0)
 #endif
     r1 = x1 - y1;                                              \
     _c2 = r1 > x1;                                             \
     r1 -= _c1;                                                 \
-    _c2 |= r1 > _c1;                                           \
+    _c2 |= _c1 && (y1 == x1);                                  \
     r2 = x2 - y2;                                              \
     _c3 = r2 > x2;                                             \
     r2 -= _c2;                                                 \
-    _c3 |= r2 > _c2;                                           \
+    _c3 |= _c2 && (y2 == x2);                                  \
     r3 = x3 - y3 - _c3;                                                \
   } while (0)
 #endif
index 4ec7fad..0aa6e3e 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation. Common operations.
-   Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
                  Jakub Jelinek (jj@ultra.linux.cz),
@@ -99,10 +99,10 @@ do {                                                        \
   else                                                 \
     {                                                  \
       X##_e = _FP_EXPMAX_##fs - 1;                     \
-      FP_SET_EXCEPTION(FP_EX_OVERFLOW);                        \
-      FP_SET_EXCEPTION(FP_EX_INEXACT);                 \
       _FP_FRAC_SET_##wc(X, _FP_MAXFRAC_##wc);          \
     }                                                  \
+    FP_SET_EXCEPTION(FP_EX_INEXACT);                   \
+    FP_SET_EXCEPTION(FP_EX_OVERFLOW);                  \
 } while (0)
 
 /* Check for a semi-raw value being a signaling NaN and raise the
@@ -1252,6 +1252,9 @@ do {                                                                           \
              _FP_FRAC_SRL_##swc(S, (_FP_WFRACBITS_##sfs                     \
                                     - _FP_WFRACBITS_##dfs));                \
              _FP_FRAC_COPY_##dwc##_##swc(D, S);                             \
+             /* Semi-raw NaN must have all workbits cleared.  */            \
+             _FP_FRAC_LOW_##dwc(D)                                          \
+               &= ~(_FP_W_TYPE) ((1 << _FP_WORKBITS) - 1);                  \
              _FP_FRAC_HIGH_##dfs(D) |= _FP_QNANBIT_SH_##dfs;                \
            }                                                                \
        }                                                                    \