Piotr Caban : msvcp90: Add std:_XLgamma implementation.
Alexandre Julliard
julliard at winehq.org
Fri Mar 27 16:14:39 CDT 2020
Module: wine
Branch: master
Commit: 70c3e08d32407c0d8ee751b124c438fc5910fc8d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=70c3e08d32407c0d8ee751b124c438fc5910fc8d
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri Mar 27 16:33:44 2020 +0100
msvcp90: Add std:_XLgamma implementation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48806
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcp100/msvcp100.spec | 6 +++---
dlls/msvcp110/msvcp110.spec | 6 +++---
dlls/msvcp120/msvcp120.spec | 6 +++---
dlls/msvcp120_app/msvcp120_app.spec | 6 +++---
dlls/msvcp140/msvcp140.spec | 6 +++---
dlls/msvcp90/math.c | 33 +++++++++++++++++++++++++++++++++
dlls/msvcp90/msvcp90.spec | 6 +++---
7 files changed, 51 insertions(+), 18 deletions(-)
diff --git a/dlls/msvcp100/msvcp100.spec b/dlls/msvcp100/msvcp100.spec
index 4ca8d5b277..897b46fe90 100644
--- a/dlls/msvcp100/msvcp100.spec
+++ b/dlls/msvcp100/msvcp100.spec
@@ -1260,9 +1260,9 @@
@ cdecl -arch=win64 ?_Unlock@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@UEAAXXZ(ptr) basic_streambuf_wchar__Unlock
@ thiscall -arch=win32 ?_Unlock at _Mutex@std@@QAEXXZ(ptr) mutex_unlock
@ cdecl -arch=win64 ?_Unlock at _Mutex@std@@QEAAXXZ(ptr) mutex_unlock
-@ stub ?_XLgamma at tr1@std@@YAMM at Z
-@ stub ?_XLgamma at tr1@std@@YANN at Z
-@ stub ?_XLgamma at tr1@std@@YAOO at Z
+@ cdecl ?_XLgamma at tr1@std@@YAMM at Z(float) std__XLgamma_float
+@ cdecl ?_XLgamma at tr1@std@@YANN at Z(double) std__XLgamma_double
+@ cdecl ?_XLgamma at tr1@std@@YAOO at Z(double) std__XLgamma_double
@ stub ?_Xbad at tr1@std@@YAXW4error_type at regex_constants@12@@Z
@ stub ?_Xfunc at tr1@std@@YAXXZ
@ cdecl -arch=win32 ?_Xinvalid_argument at std@@YAXPBD at Z(str) _Xinvalid_argument
diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec
index eebc430b1e..8d79f8c9a8 100644
--- a/dlls/msvcp110/msvcp110.spec
+++ b/dlls/msvcp110/msvcp110.spec
@@ -1829,9 +1829,9 @@
@ stub -arch=win64 ?_W_Gettnames at _Locinfo@std@@QEBA?AV_Timevec at 2@XZ
@ stub -arch=win32 ?_Winerror_map at std@@YAPBDH at Z
@ stub -arch=win64 ?_Winerror_map at std@@YAPEBDH at Z
-@ stub ?_XLgamma at std@@YAMM at Z
-@ stub ?_XLgamma at std@@YANN at Z
-@ stub ?_XLgamma at std@@YAOO at Z
+@ cdecl ?_XLgamma at std@@YAMM at Z(float) std__XLgamma_float
+@ cdecl ?_XLgamma at std@@YANN at Z(double) std__XLgamma_double
+@ cdecl ?_XLgamma at std@@YAOO at Z(double) std__XLgamma_double
@ cdecl ?_Xbad_alloc at std@@YAXXZ() _Xmem
@ stub ?_Xbad_function_call at std@@YAXXZ
@ cdecl -arch=win32 ?_Xinvalid_argument at std@@YAXPBD at Z(str) _Xinvalid_argument
diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec
index e131d41ecc..6308c57b29 100644
--- a/dlls/msvcp120/msvcp120.spec
+++ b/dlls/msvcp120/msvcp120.spec
@@ -1790,9 +1790,9 @@
@ stub -arch=win64 ?_W_Gettnames at _Locinfo@std@@QEBA?AV_Timevec at 2@XZ
@ stub -arch=win32 ?_Winerror_map at std@@YAPBDH at Z
@ stub -arch=win64 ?_Winerror_map at std@@YAPEBDH at Z
-@ stub ?_XLgamma at std@@YAMM at Z
-@ stub ?_XLgamma at std@@YANN at Z
-@ stub ?_XLgamma at std@@YAOO at Z
+@ cdecl ?_XLgamma at std@@YAMM at Z(float) std__XLgamma_float
+@ cdecl ?_XLgamma at std@@YANN at Z(double) std__XLgamma_double
+@ cdecl ?_XLgamma at std@@YAOO at Z(double) std__XLgamma_double
@ cdecl ?_Xbad_alloc at std@@YAXXZ() _Xmem
@ stub ?_Xbad_function_call at std@@YAXXZ
@ cdecl -arch=win32 ?_Xinvalid_argument at std@@YAXPBD at Z(str) _Xinvalid_argument
diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec
index a76149071c..a44c89fdc8 100644
--- a/dlls/msvcp120_app/msvcp120_app.spec
+++ b/dlls/msvcp120_app/msvcp120_app.spec
@@ -1790,9 +1790,9 @@
@ stub -arch=win64 ?_W_Gettnames at _Locinfo@std@@QEBA?AV_Timevec at 2@XZ
@ stub -arch=win32 ?_Winerror_map at std@@YAPBDH at Z
@ stub -arch=win64 ?_Winerror_map at std@@YAPEBDH at Z
-@ stub ?_XLgamma at std@@YAMM at Z
-@ stub ?_XLgamma at std@@YANN at Z
-@ stub ?_XLgamma at std@@YAOO at Z
+@ cdecl ?_XLgamma at std@@YAMM at Z(float) msvcp120.?_XLgamma at std@@YAMM at Z
+@ cdecl ?_XLgamma at std@@YANN at Z(double) msvcp120.?_XLgamma at std@@YANN at Z
+@ cdecl ?_XLgamma at std@@YAOO at Z(double) msvcp120.?_XLgamma at std@@YAOO at Z
@ cdecl ?_Xbad_alloc at std@@YAXXZ() msvcp120.?_Xbad_alloc at std@@YAXXZ
@ stub ?_Xbad_function_call at std@@YAXXZ
@ cdecl -arch=win32 ?_Xinvalid_argument at std@@YAXPBD at Z(str) msvcp120.?_Xinvalid_argument at std@@YAXPBD at Z
diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec
index 70caad8dba..2563c7bfa7 100644
--- a/dlls/msvcp140/msvcp140.spec
+++ b/dlls/msvcp140/msvcp140.spec
@@ -1673,9 +1673,9 @@
@ cdecl -arch=win32 ?_Winerror_message at std@@YAKKPADK at Z(long ptr long) _Winerror_message
@ cdecl -arch=win64 ?_Winerror_message at std@@YAKKPEADK at Z(long ptr long) _Winerror_message
@ stub ?_XGetLastError at std@@YAXXZ
-@ stub ?_XLgamma at std@@YAMM at Z
-@ stub ?_XLgamma at std@@YANN at Z
-@ stub ?_XLgamma at std@@YAOO at Z
+@ cdecl ?_XLgamma at std@@YAMM at Z(float) std__XLgamma_float
+@ cdecl ?_XLgamma at std@@YANN at Z(double) std__XLgamma_double
+@ cdecl ?_XLgamma at std@@YAOO at Z(double) std__XLgamma_double
@ cdecl ?_Xbad_alloc at std@@YAXXZ() _Xmem
@ stub ?_Xbad_function_call at std@@YAXXZ
@ cdecl -arch=win32 ?_Xinvalid_argument at std@@YAXPBD at Z(str) _Xinvalid_argument
diff --git a/dlls/msvcp90/math.c b/dlls/msvcp90/math.c
index 9bc7c0867d..4ebf8baaee 100644
--- a/dlls/msvcp90/math.c
+++ b/dlls/msvcp90/math.c
@@ -2362,3 +2362,36 @@ short __cdecl _FExp(float *x, float y, short scale)
return dclass(*x);
}
+
+/* ?_XLgamma at std@@YANN at Z */
+double __cdecl std__XLgamma_double(double z)
+{
+ /* Lanczos coefficients g=5, n=6 */
+ static const double lc[] = {
+ 1.000000000190015,
+ 76.18009172947146,
+ -86.50532032941677,
+ 24.01409824083091,
+ -1.231739572450155,
+ 0.1208650973866179e-2,
+ -0.5395239384953e-5
+ };
+ static const double log_sqrt_2pi = 0.91893853320467274178;
+
+ double base = z + 4.5, sum = 0;
+ int i;
+
+ if (z < 0.5) return log(M_PI / sin(M_PI * z)) - std__XLgamma_double(1 - z);
+
+ z--;
+ for(i = ARRAY_SIZE(lc) - 1; i >= 1; i--)
+ sum += lc[i] / (z + i);
+ sum += lc[0];
+ return log_sqrt_2pi + log(sum) - base + log(base) * (z + 0.5);
+}
+
+/* ?_XLgamma at tr1@std@@YAMM at Z */
+float __cdecl std__XLgamma_float(float z)
+{
+ return std__XLgamma_double(z);
+}
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index 6a5a9a20a4..c38dd041af 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -3185,9 +3185,9 @@
@ cdecl -arch=win64 ?_Widen_s@?$ctype at G@std@@QEBAPEBDPEBD0PEAG_K at Z(ptr ptr ptr ptr long) ctype_wchar__Widen_s
@ thiscall -arch=win32 ?_Widen_s@?$ctype at _W@std@@QBEPBDPBD0PA_WI at Z(ptr ptr ptr ptr long) ctype_wchar__Widen_s
@ cdecl -arch=win64 ?_Widen_s@?$ctype at _W@std@@QEBAPEBDPEBD0PEA_W_K at Z(ptr ptr ptr ptr long) ctype_wchar__Widen_s
-@ stub ?_XLgamma at tr1@std@@YAMM at Z
-@ stub ?_XLgamma at tr1@std@@YANN at Z
-@ stub ?_XLgamma at tr1@std@@YAOO at Z
+@ cdecl ?_XLgamma at tr1@std@@YAMM at Z(float) std__XLgamma_float
+@ cdecl ?_XLgamma at tr1@std@@YANN at Z(double) std__XLgamma_double
+@ cdecl ?_XLgamma at tr1@std@@YAOO at Z(double) std__XLgamma_double
@ stub ?_Xbad at tr1@std@@YAXW4error_type at regex_constants@12@@Z
@ stub -arch=win32 ?_Xfsopen at std@@YAPAU_iobuf@@PB_W0H at Z
@ stub -arch=win64 ?_Xfsopen at std@@YAPEAU_iobuf@@PEB_W0H at Z
More information about the wine-cvs
mailing list