* sim-fpu.c (pack_fpu): If SIM_QUIET_NAN_NEGATED is defined, use a
authorIan Lance Taylor <ian@airs.com>
Fri, 8 Jul 2005 18:41:54 +0000 (18:41 +0000)
committerIan Lance Taylor <ian@airs.com>
Fri, 8 Jul 2005 18:41:54 +0000 (18:41 +0000)
different fraction for a quiet NaN.
(unpack_fpu): Likewise.

sim/common/ChangeLog
sim/common/sim-fpu.c

index 7a43a29..c2ef9e0 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-08  Ian Lance Taylor  <ian@airs.com>
+
+       * sim-fpu.c (pack_fpu): If SIM_QUIET_NAN_NEGATED is defined, use a
+       different fraction for a quiet NaN.
+       (unpack_fpu): Likewise.
+
 2005-07-08  Ben Elliston  <bje@au.ibm.com>
 
        * callback.c: Remove ANSI_PROTOTYPES conditional code.
index 845248a..c9678bd 100644 (file)
@@ -201,7 +201,11 @@ pack_fpu (const sim_fpu *src,
       /* force fraction to correct class */
       fraction = src->fraction;
       fraction >>= NR_GUARDS;
+#ifdef SIM_QUIET_NAN_NEGATED
+      fraction |= QUIET_NAN - 1;
+#else
       fraction |= QUIET_NAN;
+#endif
       break;
     case sim_fpu_class_snan:
       sign = src->sign;
@@ -362,10 +366,17 @@ unpack_fpu (sim_fpu *dst, unsigned64 packed, int is_double)
        }
       else
        {
+         int qnan;
+
          /* Non zero fraction, means NaN */
          dst->sign = sign;
          dst->fraction = (fraction << NR_GUARDS);
-         if (fraction >= QUIET_NAN)
+#ifdef SIM_QUIET_NAN_NEGATED
+         qnan = (fraction & QUIET_NAN) == 0;
+#else
+         qnan = fraction >= QUIET_NAN;
+#endif
+         if (qnan)
            dst->class = sim_fpu_class_qnan;
          else
            dst->class = sim_fpu_class_snan;