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)