svn commit: r205898 - stable/6/lib/libc/sparc64/fpu

Marius Strobl marius at FreeBSD.org
Tue Mar 30 19:06:39 UTC 2010


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

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/6/lib/libc/sparc64/fpu/fpu_div.c
Directory Properties:
  stable/6/lib/libc/   (props changed)

Modified: stable/6/lib/libc/sparc64/fpu/fpu_div.c
==============================================================================
--- stable/6/lib/libc/sparc64/fpu/fpu_div.c	Tue Mar 30 19:06:33 2010	(r205897)
+++ stable/6/lib/libc/sparc64/fpu/fpu_div.c	Tue Mar 30 19:06:37 2010	(r205898)
@@ -171,14 +171,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);
@@ -187,10 +189,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;


More information about the svn-src-stable mailing list