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)