Module: wine Branch: master Commit: e38b46e7f7250e4e7c8d7979a845cdc1106677be URL: https://source.winehq.org/git/wine.git/?a=commit;h=e38b46e7f7250e4e7c8d7979a...
Author: Martin Storsjo martin@martin.st Date: Thu Aug 1 22:52:26 2019 +0300
msvcrt: Implement the tgamma functions.
Signed-off-by: Martin Storsjo martin@martin.st Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
configure | 2 ++ configure.ac | 2 ++ .../api-ms-win-crt-math-l1-1-0.spec | 6 ++-- dlls/msvcr120/msvcr120.spec | 6 ++-- dlls/msvcr120_app/msvcr120_app.spec | 6 ++-- dlls/msvcrt/math.c | 38 ++++++++++++++++++++++ dlls/ucrtbase/ucrtbase.spec | 6 ++-- include/config.h.in | 6 ++++ 8 files changed, 60 insertions(+), 12 deletions(-)
diff --git a/configure b/configure index ed56167..44e283e 100755 --- a/configure +++ b/configure @@ -19289,6 +19289,8 @@ for ac_func in \ rintf \ round \ roundf \ + tgamma \ + tgammaf \ trunc \ truncf \ y0 \ diff --git a/configure.ac b/configure.ac index 0fe2602..c58d343 100644 --- a/configure.ac +++ b/configure.ac @@ -2676,6 +2676,8 @@ AC_CHECK_FUNCS(\ rintf \ round \ roundf \ + tgamma \ + tgammaf \ trunc \ truncf \ y0 \ diff --git a/dlls/api-ms-win-crt-math-l1-1-0/api-ms-win-crt-math-l1-1-0.spec b/dlls/api-ms-win-crt-math-l1-1-0/api-ms-win-crt-math-l1-1-0.spec index 73967ea..eb7017f 100644 --- a/dlls/api-ms-win-crt-math-l1-1-0/api-ms-win-crt-math-l1-1-0.spec +++ b/dlls/api-ms-win-crt-math-l1-1-0/api-ms-win-crt-math-l1-1-0.spec @@ -333,9 +333,9 @@ @ cdecl -arch=arm,x86_64,arm64 tanf(float) ucrtbase.tanf @ cdecl tanh(double) ucrtbase.tanh @ cdecl -arch=arm,x86_64,arm64 tanhf(float) ucrtbase.tanhf -@ stub tgamma -@ stub tgammaf -@ stub tgammal +@ cdecl tgamma(double) ucrtbase.tgamma +@ cdecl tgammaf(float) ucrtbase.tgammaf +@ cdecl tgammal(double) ucrtbase.tgammal @ cdecl trunc(double) ucrtbase.trunc @ cdecl truncf(float) ucrtbase.truncf @ cdecl truncl(double) ucrtbase.truncl diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index d7c5843..469bc01 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -2405,9 +2405,9 @@ @ cdecl -arch=arm,x86_64,arm64 tanf(float) MSVCRT_tanf @ cdecl tanh(double) MSVCRT_tanh @ cdecl -arch=arm,x86_64,arm64 tanhf(float) MSVCRT_tanhf -@ stub tgamma -@ stub tgammaf -@ stub tgammal +@ cdecl tgamma(double) MSVCR120_tgamma +@ cdecl tgammaf(float) MSVCR120_tgammaf +@ cdecl tgammal(double) MSVCR120_tgamma @ cdecl tmpfile() MSVCRT_tmpfile @ cdecl tmpfile_s(ptr) MSVCRT_tmpfile_s @ cdecl tmpnam(ptr) MSVCRT_tmpnam diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 2dcf191..f9e3a00 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -2067,9 +2067,9 @@ @ cdecl -arch=arm,x86_64,arm64 tanf(float) msvcr120.tanf @ cdecl tanh(double) msvcr120.tanh @ cdecl -arch=arm,x86_64,arm64 tanhf(float) msvcr120.tanhf -@ stub tgamma -@ stub tgammaf -@ stub tgammal +@ cdecl tgamma(double) msvcr120.tgamma +@ cdecl tgammaf(float) msvcr120.tgammaf +@ cdecl tgammal(double) msvcr120.tgammal @ cdecl tmpfile() msvcr120.tmpfile @ cdecl tmpfile_s(ptr) msvcr120.tmpfile_s @ cdecl tmpnam(ptr) msvcr120.tmpnam diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index 841a231..6651df8 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -3405,6 +3405,44 @@ LDOUBLE CDECL MSVCR120_lgammal(LDOUBLE x) }
/********************************************************************* + * tgamma (MSVCR120.@) + */ +double CDECL MSVCR120_tgamma(double x) +{ +#ifdef HAVE_TGAMMA + if(x==0.0) *MSVCRT__errno() = MSVCRT_ERANGE; + if(x<0.0f) { + double integral; + if (modf(x, &integral) == 0) + *MSVCRT__errno() = MSVCRT_EDOM; + } + return tgamma(x); +#else + FIXME( "not implemented\n" ); + return 0.0; +#endif +} + +/********************************************************************* + * tgammaf (MSVCR120.@) + */ +float CDECL MSVCR120_tgammaf(float x) +{ +#ifdef HAVE_TGAMMAF + if(x==0.0f) *MSVCRT__errno() = MSVCRT_ERANGE; + if(x<0.0f) { + float integral; + if (modff(x, &integral) == 0) + *MSVCRT__errno() = MSVCRT_EDOM; + } + return tgammaf(x); +#else + FIXME( "not implemented\n" ); + return 0.0f; +#endif +} + +/********************************************************************* * nan (MSVCR120.@) */ double CDECL MSVCR120_nan(const char *tagp) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index cde137d..2a5fdf2 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -2534,9 +2534,9 @@ @ cdecl tanh(double) MSVCRT_tanh @ cdecl -arch=arm,x86_64,arm64 tanhf(float) MSVCRT_tanhf @ cdecl terminate() MSVCRT_terminate -@ stub tgamma -@ stub tgammaf -@ stub tgammal +@ cdecl tgamma(double) MSVCR120_tgamma +@ cdecl tgammaf(float) MSVCR120_tgammaf +@ cdecl tgammal(double) MSVCR120_tgamma @ cdecl tmpfile() MSVCRT_tmpfile @ cdecl tmpfile_s(ptr) MSVCRT_tmpfile_s @ cdecl tmpnam(ptr) MSVCRT_tmpnam diff --git a/include/config.h.in b/include/config.h.in index ce5c157..29ea6f0 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -1166,6 +1166,12 @@ /* Define to 1 if you have the <termios.h> header file. */ #undef HAVE_TERMIOS_H
+/* Define to 1 if you have the `tgamma' function. */ +#undef HAVE_TGAMMA + +/* Define to 1 if you have the `tgammaf' function. */ +#undef HAVE_TGAMMAF + /* Define to 1 if you have the `thr_kill2' function. */ #undef HAVE_THR_KILL2