svn commit: r271719 - in head/lib/msun: ld128 ld80 src

Steve Kargl kargl at FreeBSD.org
Wed Sep 17 19:01:24 UTC 2014


Author: kargl
Date: Wed Sep 17 19:01:22 2014
New Revision: 271719
URL: http://svnweb.freebsd.org/changeset/base/271719

Log:
  For targets that have a signed zero, lgamma_r(-0, &signgamp) should
  set signgamp = -1.
  
  Submitted by:	enh at google dot com (e_lgamma[f]_r.c)

Modified:
  head/lib/msun/ld128/e_lgammal_r.c
  head/lib/msun/ld80/e_lgammal_r.c
  head/lib/msun/src/e_lgamma_r.c
  head/lib/msun/src/e_lgammaf_r.c

Modified: head/lib/msun/ld128/e_lgammal_r.c
==============================================================================
--- head/lib/msun/ld128/e_lgammal_r.c	Wed Sep 17 18:59:25 2014	(r271718)
+++ head/lib/msun/ld128/e_lgammal_r.c	Wed Sep 17 19:01:22 2014	(r271719)
@@ -241,7 +241,11 @@ lgammal_r(long double x, int *signgamp)
 	*signgamp = 1;
 	if((hx & 0x7fff) == 0x7fff)	/* x is +-Inf or NaN */
 		return x*x;
-	if((hx==0||hx==0x8000)&&lx==0) return one/vzero;
+	if((hx==0||hx==0x8000)&&lx==0) {
+	    if (hx&0x8000)
+		*signgamp = -1;
+	    return one/vzero;
+	}
 
    /* purge off tiny and negative arguments */
 	if(fabsl(x)<0x1p-119L) {

Modified: head/lib/msun/ld80/e_lgammal_r.c
==============================================================================
--- head/lib/msun/ld80/e_lgammal_r.c	Wed Sep 17 18:59:25 2014	(r271718)
+++ head/lib/msun/ld80/e_lgammal_r.c	Wed Sep 17 19:01:22 2014	(r271719)
@@ -261,7 +261,11 @@ lgammal_r(long double x, int *signgamp)
 	*signgamp = 1;
 	if((hx & 0x7fff) == 0x7fff)	/* x is +-Inf or NaN */
 		return x*x;
-	if((hx==0||hx==0x8000)&&lx==0) return one/vzero;
+	if((hx==0||hx==0x8000)&&lx==0) {
+	    if (hx&0x8000)
+		*signgamp = -1;
+	    return one/vzero;
+	}
 
 	ENTERI();
 

Modified: head/lib/msun/src/e_lgamma_r.c
==============================================================================
--- head/lib/msun/src/e_lgamma_r.c	Wed Sep 17 18:59:25 2014	(r271718)
+++ head/lib/msun/src/e_lgamma_r.c	Wed Sep 17 19:01:22 2014	(r271719)
@@ -214,7 +214,11 @@ __ieee754_lgamma_r(double x, int *signga
 	*signgamp = 1;
 	ix = hx&0x7fffffff;
 	if(ix>=0x7ff00000) return x*x;
-	if((ix|lx)==0) return one/vzero;
+	if((ix|lx)==0) {
+	   if(hx<0)
+		*signgamp = -1;
+	    return one/vzero;
+	}
 	if(ix<0x3b900000) {	/* |x|<2**-70, return -log(|x|) */
 	    if(hx<0) {
 	        *signgamp = -1;

Modified: head/lib/msun/src/e_lgammaf_r.c
==============================================================================
--- head/lib/msun/src/e_lgammaf_r.c	Wed Sep 17 18:59:25 2014	(r271718)
+++ head/lib/msun/src/e_lgammaf_r.c	Wed Sep 17 19:01:22 2014	(r271719)
@@ -132,7 +132,11 @@ __ieee754_lgammaf_r(float x, int *signga
 	*signgamp = 1;
 	ix = hx&0x7fffffff;
 	if(ix>=0x7f800000) return x*x;
-	if(ix==0) return one/vzero;
+	if(ix==0) {
+	    if(hx<0)
+		*signgamp = -1;
+	    return one/vzero;
+	}
 	if(ix<0x35000000) {	/* |x|<2**-21, return -log(|x|) */
 	    if(hx<0) {
 	        *signgamp = -1;


More information about the svn-src-all mailing list