Module: wine Branch: master Commit: f2c18726605315a93f733b583a61fb5417f4dde0 URL: https://source.winehq.org/git/wine.git/?a=commit;h=f2c18726605315a93f733b583...
Author: Piotr Caban piotr@codeweavers.com Date: Mon May 17 15:38:22 2021 +0200
msvcrt: Import trunc implementation from musl.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
configure | 3 +-- configure.ac | 3 +-- dlls/msvcrt/math.c | 16 +++++++++++++++- dlls/msvcrt/unixlib.c | 13 ------------- dlls/msvcrt/unixlib.h | 1 - include/config.h.in | 3 --- 6 files changed, 17 insertions(+), 22 deletions(-)
diff --git a/configure b/configure index fe54e30321f..7c2e31de5af 100755 --- a/configure +++ b/configure @@ -19643,8 +19643,7 @@ for ac_func in \ remquo \ remquof \ tgamma \ - tgammaf \ - trunc + tgammaf
do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` diff --git a/configure.ac b/configure.ac index fb4ec181ea2..4c98c3e5597 100644 --- a/configure.ac +++ b/configure.ac @@ -2683,8 +2683,7 @@ AC_CHECK_FUNCS(\ remquo \ remquof \ tgamma \ - tgammaf \ - trunc + tgammaf ) LIBS="$ac_save_LIBS"
diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index 246f329ee95..f2caa81712b 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -4981,10 +4981,24 @@ __int64 CDECL llroundf(float x)
/********************************************************************* * trunc (MSVCR120.@) + * + * Copied from musl: src/math/trunc.c */ double CDECL trunc(double x) { - return unix_funcs->trunc(x); + union {double f; UINT64 i;} u = {x}; + int e = (u.i >> 52 & 0x7ff) - 0x3ff + 12; + UINT64 m; + + if (e >= 52 + 12) + return x; + if (e < 12) + e = 1; + m = -1ULL >> e; + if ((u.i & m) == 0) + return x; + u.i &= ~m; + return u.f; }
/********************************************************************* diff --git a/dlls/msvcrt/unixlib.c b/dlls/msvcrt/unixlib.c index e809d7353ff..d7e368d1b37 100644 --- a/dlls/msvcrt/unixlib.c +++ b/dlls/msvcrt/unixlib.c @@ -636,18 +636,6 @@ static double CDECL unix_tgamma(double x) #endif }
-/********************************************************************* - * trunc - */ -static double CDECL unix_trunc(double x) -{ -#ifdef HAVE_TRUNC - return trunc(x); -#else - return (x > 0) ? floor(x) : ceil(x); -#endif -} - /********************************************************************* * tgammaf */ @@ -722,7 +710,6 @@ static const struct unix_funcs funcs = unix_tanhf, unix_tgamma, unix_tgammaf, - unix_trunc, };
NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out ) diff --git a/dlls/msvcrt/unixlib.h b/dlls/msvcrt/unixlib.h index fd279cf5519..b8c18b1e2a5 100644 --- a/dlls/msvcrt/unixlib.h +++ b/dlls/msvcrt/unixlib.h @@ -82,7 +82,6 @@ struct unix_funcs float (CDECL *tanhf)(float x); double (CDECL *tgamma)(double x); float (CDECL *tgammaf)(float x); - double (CDECL *trunc)(double x); };
#endif /* __UNIXLIB_H */ diff --git a/include/config.h.in b/include/config.h.in index 7fe9383a778..bf7fc0d4e9b 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -1010,9 +1010,6 @@ /* Define to 1 if you have the <tiffio.h> header file. */ #undef HAVE_TIFFIO_H
-/* Define to 1 if you have the `trunc' function. */ -#undef HAVE_TRUNC - /* Define to 1 if you have the `udev' library (-ludev). */ #undef HAVE_UDEV