Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Sep 2014 19:01:22 +0000 (UTC)
From:      Steve Kargl <kargl@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r271719 - in head/lib/msun: ld128 ld80 src
Message-ID:  <201409171901.s8HJ1M8u013286@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201409171901.s8HJ1M8u013286>