Piotr Caban : msvcrt: Import y1 implementation from musl.
Alexandre Julliard
julliard at winehq.org
Thu Apr 29 16:38:32 CDT 2021
Module: wine
Branch: master
Commit: e10bd6f46f6ae174cfe9ea4550dc367877f1581e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=e10bd6f46f6ae174cfe9ea4550dc367877f1581e
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Apr 29 17:06:19 2021 +0200
msvcrt: Import y1 implementation from musl.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
configure | 1 -
configure.ac | 1 -
dlls/msvcrt/math.c | 46 ++++++++++++++++++++++++++++++++++++----------
dlls/msvcrt/unixlib.c | 14 --------------
dlls/msvcrt/unixlib.h | 1 -
include/config.h.in | 3 ---
6 files changed, 36 insertions(+), 30 deletions(-)
diff --git a/configure b/configure
index cdc0342b066..3c12aa85227 100755
--- a/configure
+++ b/configure
@@ -19662,7 +19662,6 @@ for ac_func in \
tgammaf \
trunc \
truncf \
- y1 \
yn
do :
diff --git a/configure.ac b/configure.ac
index 03915d384f2..65661d89263 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2705,7 +2705,6 @@ AC_CHECK_FUNCS(\
tgammaf \
trunc \
truncf \
- y1 \
yn
)
LIBS="$ac_save_LIBS"
diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c
index 0ebe7b91cb7..aa5f4b1af7b 100644
--- a/dlls/msvcrt/math.c
+++ b/dlls/msvcrt/math.c
@@ -2971,18 +2971,44 @@ double CDECL _y0(double x)
/*********************************************************************
* _y1 (MSVCRT.@)
*/
-double CDECL _y1(double num)
+double CDECL _y1(double x)
{
- double retval;
+ static const double tpi = 6.36619772367581382433e-01,
+ u00 = -1.96057090646238940668e-01,
+ u01 = 5.04438716639811282616e-02,
+ u02 = -1.91256895875763547298e-03,
+ u03 = 2.35252600561610495928e-05,
+ u04 = -9.19099158039878874504e-08,
+ v00 = 1.99167318236649903973e-02,
+ v01 = 2.02552581025135171496e-04,
+ v02 = 1.35608801097516229404e-06,
+ v03 = 6.22741452364621501295e-09,
+ v04 = 1.66559246207992079114e-11;
- if (!isfinite(num)) *_errno() = EDOM;
- retval = unix_funcs->y1( num );
- if (_fpclass(retval) == _FPCLASS_NINF)
- {
- *_errno() = EDOM;
- retval = NAN;
- }
- return retval;
+ double z, u, v;
+ unsigned int ix, lx;
+
+ ix = *(ULONGLONG*)&x >> 32;
+ lx = *(ULONGLONG*)&x;
+
+ /* y1(nan)=nan, y1(<0)=nan, y1(0)=-inf, y1(inf)=0 */
+ if ((ix << 1 | lx) == 0)
+ return math_error(_OVERFLOW, "_y1", x, 0, -INFINITY);
+ if (isnan(x))
+ return x;
+ if (ix >> 31)
+ return math_error(_DOMAIN, "_y1", x, 0, 0 / (x - x));
+ if (ix >= 0x7ff00000)
+ return 1 / x;
+
+ if (ix >= 0x40000000) /* x >= 2 */
+ return j1_y1_approx(ix, x, TRUE, 0);
+ if (ix < 0x3c900000) /* x < 2**-54 */
+ return -tpi / x;
+ z = x * x;
+ u = u00 + z * (u01 + z * (u02 + z * (u03 + z * u04)));
+ v = 1 + z * (v00 + z * (v01 + z * (v02 + z * (v03 + z * v04))));
+ return x * (u / v) + tpi * (j1(x) * log(x) - 1 / x);
}
/*********************************************************************
diff --git a/dlls/msvcrt/unixlib.c b/dlls/msvcrt/unixlib.c
index 6b33eed223a..597d0ed7f64 100644
--- a/dlls/msvcrt/unixlib.c
+++ b/dlls/msvcrt/unixlib.c
@@ -952,19 +952,6 @@ static float CDECL unix_tgammaf(float x)
#endif
}
-/*********************************************************************
- * y1
- */
-static double CDECL unix_y1(double num)
-{
-#ifdef HAVE_Y1
- return y1(num);
-#else
- FIXME("not implemented\n");
- return 0;
-#endif
-}
-
/*********************************************************************
* yn
*/
@@ -1066,7 +1053,6 @@ static const struct unix_funcs funcs =
unix_tgammaf,
unix_trunc,
unix_truncf,
- unix_y1,
unix_yn
};
diff --git a/dlls/msvcrt/unixlib.h b/dlls/msvcrt/unixlib.h
index d7b1827e08e..21caa036498 100644
--- a/dlls/msvcrt/unixlib.h
+++ b/dlls/msvcrt/unixlib.h
@@ -109,7 +109,6 @@ struct unix_funcs
float (CDECL *tgammaf)(float x);
double (CDECL *trunc)(double x);
float (CDECL *truncf)(float x);
- double (CDECL *y1)(double num);
double (CDECL *yn)(int order, double num);
};
diff --git a/include/config.h.in b/include/config.h.in
index 8985cf6b474..266d8cec8d9 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -1169,9 +1169,6 @@
/* Define if Xrandr has the XRRGetProviderResources function */
#undef HAVE_XRRGETPROVIDERRESOURCES
-/* Define to 1 if you have the `y1' function. */
-#undef HAVE_Y1
-
/* Define to 1 if you have the `yn' function. */
#undef HAVE_YN
More information about the wine-cvs
mailing list