From: Alexandre Julliard julliard@winehq.org
--- dlls/crtdll/crtdll.spec | 2 +- dlls/msvcr100/msvcr100.spec | 4 ++-- dlls/msvcr110/msvcr110.spec | 4 ++-- dlls/msvcr120/msvcr120.spec | 10 +++++----- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 4 ++-- dlls/msvcr90/msvcr90.spec | 4 ++-- dlls/msvcrt/math.c | 32 +------------------------------- dlls/msvcrt/msvcrt.spec | 4 ++-- dlls/msvcrtd/msvcrtd.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 20 ++++++++++---------- libs/musl/src/internal/libm.h | 2 ++ libs/musl/src/math/logb.c | 2 +- libs/musl/src/math/logbf.c | 5 ++++- 15 files changed, 37 insertions(+), 62 deletions(-)
diff --git a/dlls/crtdll/crtdll.spec b/dlls/crtdll/crtdll.spec index c66cea5bade..3a90ad7ef74 100644 --- a/dlls/crtdll/crtdll.spec +++ b/dlls/crtdll/crtdll.spec @@ -179,7 +179,7 @@ @ cdecl _loaddll(str) @ cdecl -arch=i386 _local_unwind2(ptr long) @ cdecl _locking(long long long) -@ cdecl _logb(double) +@ cdecl _logb(double) logb @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr @ cdecl _lsearch(ptr ptr ptr long ptr) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index a42fe349cf5..1b9abbfdec2 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1052,8 +1052,8 @@ @ cdecl _lock(long) @ cdecl _lock_file(ptr) @ cdecl _locking(long long long) -@ cdecl _logb(double) -@ cdecl -arch=!i386 _logbf(float) +@ cdecl _logb(double) logb +@ cdecl -arch=!i386 _logbf(float) logbf @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 2bccd8c6fe9..bba1222a44e 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1409,8 +1409,8 @@ @ cdecl _lock(long) @ cdecl _lock_file(ptr) @ cdecl _locking(long long long) -@ cdecl _logb(double) -@ cdecl -arch=!i386 _logbf(float) +@ cdecl _logb(double) logb +@ cdecl -arch=!i386 _logbf(float) logbf @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index ed0f69b49bc..654fb4071f8 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1420,8 +1420,8 @@ @ cdecl _lock(long) @ cdecl _lock_file(ptr) @ cdecl _locking(long long long) -@ cdecl _logb(double) -@ cdecl -arch=!i386 _logbf(float) +@ cdecl _logb(double) logb +@ cdecl -arch=!i386 _logbf(float) logbf @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr @@ -2266,9 +2266,9 @@ @ cdecl log2(double) @ cdecl log2f(float) @ cdecl log2l(double) log2 -@ cdecl logb(double) _logb -@ cdecl logbf(float) _logbf -@ cdecl logbl(double) _logb +@ cdecl logb(double) +@ cdecl logbf(float) +@ cdecl logbl(double) logb @ cdecl -arch=i386,x86_64,arm,arm64 longjmp(ptr long) MSVCRT_longjmp @ cdecl lrint(double) @ cdecl lrintf(float) diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index cb3a92cf395..1e02dc95d2d 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -408,7 +408,7 @@ @ cdecl _localtime64(ptr) @ cdecl _lock(long) @ cdecl _locking(long long long) -@ cdecl _logb(double) +@ cdecl _logb(double) logb @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index a559b5cc376..1a075986ddd 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -403,7 +403,7 @@ @ cdecl _localtime64(ptr) @ cdecl _lock(long) @ cdecl _locking(long long long) -@ cdecl _logb(double) +@ cdecl _logb(double) logb @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 06d0bdf82cd..2ea91c0ce8a 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -724,8 +724,8 @@ @ cdecl _lock(long) @ cdecl _lock_file(ptr) @ cdecl _locking(long long long) -@ cdecl _logb(double) -@ cdecl -arch=!i386 _logbf(float) +@ cdecl _logb(double) logb +@ cdecl -arch=!i386 _logbf(float) logbf @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index d020de98a02..fb274878d39 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -702,8 +702,8 @@ @ cdecl _lock(long) @ cdecl _lock_file(ptr) @ cdecl _locking(long long long) -@ cdecl _logb(double) -@ cdecl -arch=!i386 _logbf(float) +@ cdecl _logb(double) logb +@ cdecl -arch=!i386 _logbf(float) logbf @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index a000d9196df..94da43ec3f6 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -131,7 +131,7 @@ int CDECL _matherr(struct _exception *e) }
-static double math_error(int type, const char *name, double arg1, double arg2, double retval) +double math_error(int type, const char *name, double arg1, double arg2, double retval) { struct _exception exception = {type, (char *)name, arg1, arg2, retval};
@@ -259,22 +259,6 @@ float CDECL _nextafterf( float x, float y ) return y; }
-/********************************************************************* - * _logbf (MSVCRT.@) - * - * Copied from musl: src/math/logbf.c - */ -float CDECL _logbf(float x) -{ - if (!isfinite(x)) - return x * x; - if (x == 0) { - *_errno() = ERANGE; - return -1 / (x * x); - } - return ilogbf(x); -} - #endif
/* Copied from musl: src/math/__rem_pio2_large.c */ @@ -4504,20 +4488,6 @@ __int64 CDECL _abs64( __int64 n ) return n >= 0 ? n : -n; }
-/********************************************************************* - * _logb (MSVCRT.@) - * - * Copied from musl: src/math/logb.c - */ -double CDECL _logb(double x) -{ - if (!isfinite(x)) - return x * x; - if (x == 0) - return math_error(_SING, "_logb", x, 0, -1 / (x * x)); - return ilogb(x); -} - /********************************************************************* * ceil (MSVCRT.@) * diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 43259d7abad..f339757438f 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -670,8 +670,8 @@ @ cdecl _lock(long) @ cdecl _lock_file(ptr) @ cdecl _locking(long long long) -@ cdecl _logb(double) -@ cdecl -arch=!i386 _logbf(float) +@ cdecl _logb(double) logb +@ cdecl -arch=!i386 _logbf(float) logbf @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr diff --git a/dlls/msvcrtd/msvcrtd.spec b/dlls/msvcrtd/msvcrtd.spec index 5cb09d92c74..68fa80d532f 100644 --- a/dlls/msvcrtd/msvcrtd.spec +++ b/dlls/msvcrtd/msvcrtd.spec @@ -385,7 +385,7 @@ @ cdecl -arch=i386 _local_unwind2(ptr long) @ cdecl _lock(long) @ cdecl _locking(long long long) -@ cdecl _logb(double) +@ cdecl _logb(double) logb @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 87a266198bd..51137681f14 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -568,8 +568,8 @@ @ cdecl _lock_file(ptr) @ cdecl _lock_locales() @ cdecl _locking(long long long) -@ cdecl _logb(double) -@ cdecl -arch=!i386 _logbf(float) +@ cdecl _logb(double) logb +@ cdecl -arch=!i386 _logbf(float) logbf @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp @ cdecl _lrotl(long long) MSVCRT__lrotl @ cdecl _lrotr(long long) MSVCRT__lrotr @@ -1142,8 +1142,8 @@ @ cdecl _o__localtime64_s(ptr ptr) _localtime64_s @ cdecl _o__lock_file(ptr) _lock_file @ cdecl _o__locking(long long long) _locking -@ cdecl _o__logb(double) _logb -@ cdecl -arch=!i386 _o__logbf(float) _logbf +@ cdecl _o__logb(double) logb +@ cdecl -arch=!i386 _o__logbf(float) logbf @ cdecl _o__lsearch(ptr ptr ptr long ptr) _lsearch @ stub _o__lsearch_s @ cdecl _o__lseek(long long long) _lseek @@ -1699,9 +1699,9 @@ @ cdecl _o_log2(double) log2 @ cdecl _o_log2f(float) log2f @ cdecl _o_log2l(double) log2 -@ cdecl _o_logb(double) _logb -@ cdecl _o_logbf(float) _logbf -@ cdecl _o_logbl(double) _logb +@ cdecl _o_logb(double) logb +@ cdecl _o_logbf(float) logbf +@ cdecl _o_logbl(double) logb @ cdecl -arch=!i386 _o_logf(float) logf @ cdecl _o_lrint(double) lrint @ cdecl _o_lrintf(float) lrintf @@ -2401,9 +2401,9 @@ @ cdecl log2(double) @ cdecl log2f(float) @ cdecl log2l(double) log2 -@ cdecl logb(double) _logb -@ cdecl logbf(float) _logbf -@ cdecl logbl(double) _logb +@ cdecl logb(double) +@ cdecl logbf(float) +@ cdecl logbl(double) logb @ cdecl -arch=!i386 logf(float) @ cdecl -arch=i386,x86_64,arm,arm64 longjmp(ptr long) MSVCRT_longjmp @ cdecl lrint(double) diff --git a/libs/musl/src/internal/libm.h b/libs/musl/src/internal/libm.h index 39233282750..a1e9bc08716 100644 --- a/libs/musl/src/internal/libm.h +++ b/libs/musl/src/internal/libm.h @@ -10,6 +10,8 @@ typedef float float_t; typedef double double_t;
+hidden double math_error(int type, const char *name, double arg1, double arg2, double retval); + #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 #elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && __BYTE_ORDER == __LITTLE_ENDIAN union ldshape { diff --git a/libs/musl/src/math/logb.c b/libs/musl/src/math/logb.c index 7c0423fb6c0..ce496e6bf18 100644 --- a/libs/musl/src/math/logb.c +++ b/libs/musl/src/math/logb.c @@ -13,6 +13,6 @@ double __cdecl logb(double x) if (!isfinite(x)) return x * x; if (x == 0) - return -1/(x*x); + return math_error(_SING, "_logb", x, 0, -1 / (x * x)); return ilogb(x); } diff --git a/libs/musl/src/math/logbf.c b/libs/musl/src/math/logbf.c index 743af679ab0..9f1728fc118 100644 --- a/libs/musl/src/math/logbf.c +++ b/libs/musl/src/math/logbf.c @@ -1,10 +1,13 @@ #include <math.h> +#include "libm.h"
float __cdecl logbf(float x) { if (!isfinite(x)) return x * x; - if (x == 0) + if (x == 0) { + errno = ERANGE; return -1/(x*x); + } return ilogbf(x); }