Module Name:    src
Committed By:   riastradh
Date:           Sun Jun  9 14:09:27 UTC 2024

Modified Files:
        src/lib/libm: m.vax.expsym
        src/lib/libm/noieee_src: n_lgamma.c

Log Message:
libm: Define lgamma_r, lgammal, lgammal_r on non-IEEE754.

Missing internal aliases _lgamma_r and _lgammal_r -- TBD.

PR 57881


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/lib/libm/m.vax.expsym
cvs rdiff -u -r1.7 -r1.8 src/lib/libm/noieee_src/n_lgamma.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libm/m.vax.expsym
diff -u src/lib/libm/m.vax.expsym:1.5 src/lib/libm/m.vax.expsym:1.6
--- src/lib/libm/m.vax.expsym:1.5	Sun Jun  9 13:33:36 2024
+++ src/lib/libm/m.vax.expsym	Sun Jun  9 14:09:27 2024
@@ -210,6 +210,9 @@ ldexp
 ldexpf
 ldexpl
 lgamma
+lgamma_r
+lgammal
+lgammal_r
 llrint
 llrintf
 log

Index: src/lib/libm/noieee_src/n_lgamma.c
diff -u src/lib/libm/noieee_src/n_lgamma.c:1.7 src/lib/libm/noieee_src/n_lgamma.c:1.8
--- src/lib/libm/noieee_src/n_lgamma.c:1.7	Mon Feb  4 03:30:20 2019
+++ src/lib/libm/noieee_src/n_lgamma.c	Sun Jun  9 14:09:27 2024
@@ -1,4 +1,4 @@
-/*      $NetBSD: n_lgamma.c,v 1.7 2019/02/04 03:30:20 mrg Exp $ */
+/*      $NetBSD: n_lgamma.c,v 1.8 2024/06/09 14:09:27 riastradh Exp $ */
 /*-
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -81,7 +81,7 @@ static int endian;
 
 static double small_lgam(double);
 static double large_lgam(double);
-static double neg_lgam(double);
+static double neg_lgam(double, int *);
 static const double one = 1.0;
 int signgam;
 
@@ -137,12 +137,22 @@ int signgam;
 #define pb6	 5.69394463439411649408050664078e-03
 #define pb7	-1.44705562421428915453880392761e-02
 
-__pure double
+__weak_alias(lgammal, lgamma)
+__weak_alias(lgammal_r, lgamma_r)
+
+double
 lgamma(double x)
 {
+
+	return lgamma_r(x, &signgam);
+}
+
+double
+lgamma_r(double x, int *signgamp)
+{
 	double r;
 
-	signgam = 1;
+	*signgamp = 1;
 #if _IEEE
 	endian = ((*(int *) &one)) ? 1 : 0;
 #endif
@@ -160,10 +170,10 @@ lgamma(double x)
 		return (small_lgam(x));
 	else if (x > -1e-16) {
 		if (x < 0)
-			signgam = -1, x = -x;
+			*signgamp = -1, x = -x;
 		return (-log(x));
 	} else
-		return (neg_lgam(x));
+		return (neg_lgam(x, signgamp));
 }
 
 static double
@@ -267,7 +277,7 @@ CONTINUE:
 }
 
 static double
-neg_lgam(double x)
+neg_lgam(double x, int *signgamp)
 {
 	int xi;
 	double y, z, zero = 0.0;
@@ -283,7 +293,7 @@ neg_lgam(double x)
 		}
 		y = gamma(x);
 		if (y < 0)
-			y = -y, signgam = -1;
+			y = -y, *signgamp = -1;
 		return (log(y));
 	}
 	z = floor(x + .5);
@@ -295,7 +305,7 @@ neg_lgam(double x)
 	}
 	y = .5*ceil(x);
 	if (y == ceil(y))
-		signgam = -1;
+		*signgamp = -1;
 	x = -x;
 	z = fabs(x + z);	/* 0 < z <= .5 */
 	if (z < .25)

Reply via email to