Author: marius
Date: Tue Mar 30 19:06:31 2010
New Revision: 205896
URL: http://svn.freebsd.org/changeset/base/205896

Log:
  MFC: r205396
  
  Division should take both arguments' signs into account when the
  the dividend is infinity or zero and the divisor is not the same.
  
  PR:           144900
  Submitted by: Peter Jeremy

Modified:
  stable/8/lib/libc/sparc64/fpu/fpu_div.c
Directory Properties:
  stable/8/lib/libc/   (props changed)
  stable/8/lib/libc/stdtime/   (props changed)

Modified: stable/8/lib/libc/sparc64/fpu/fpu_div.c
==============================================================================
--- stable/8/lib/libc/sparc64/fpu/fpu_div.c     Tue Mar 30 19:05:20 2010        
(r205895)
+++ stable/8/lib/libc/sparc64/fpu/fpu_div.c     Tue Mar 30 19:06:31 2010        
(r205896)
@@ -167,14 +167,16 @@ __fpu_div(fe)
         * return it.  Otherwise we have the following cases:
         *
         *      Inf / Inf = NaN, plus NV exception
-        *      Inf / num = Inf [i.e., return x]
-        *      Inf / 0   = Inf [i.e., return x]
-        *      0 / Inf = 0 [i.e., return x]
-        *      0 / num = 0 [i.e., return x]
+        *      Inf / num = Inf [i.e., return x #]
+        *      Inf / 0   = Inf [i.e., return x #]
+        *      0 / Inf = 0 [i.e., return x #]
+        *      0 / num = 0 [i.e., return x #]
         *      0 / 0   = NaN, plus NV exception
-        *      num / Inf = 0
+        *      num / Inf = 0 #
         *      num / num = num (do the divide)
-        *      num / 0   = Inf, plus DZ exception
+        *      num / 0   = Inf #, plus DZ exception
+        *
+        * # Sign of result is XOR of operand signs.
         */
        if (ISNAN(x) || ISNAN(y)) {
                ORDER(x, y);
@@ -183,10 +185,10 @@ __fpu_div(fe)
        if (ISINF(x) || ISZERO(x)) {
                if (x->fp_class == y->fp_class)
                        return (__fpu_newnan(fe));
+               x->fp_sign ^= y->fp_sign;
                return (x);
        }
 
-       /* all results at this point use XOR of operand signs */
        x->fp_sign ^= y->fp_sign;
        if (ISINF(y)) {
                x->fp_class = FPC_ZERO;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to