diff --git a/dlls/msvcp100/msvcp100.spec b/dlls/msvcp100/msvcp100.spec index 64466425b52..345b6cea22d 100644 --- a/dlls/msvcp100/msvcp100.spec +++ b/dlls/msvcp100/msvcp100.spec @@ -2788,24 +2788,24 @@ @ stub -arch=win32 ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE_JPB_W_J@Z @ stub -arch=win64 ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z @ stub _Cosh -# extern _Denorm +@ extern _Denorm msvcp90._Denorm @ stub _Dnorm @ stub _Dscale @ stub _Dtest -# extern _Eps +@ extern _Eps msvcp90._Eps @ stub _Exp @ stub _FCosh -# extern _FDenorm +@ extern _FDenorm msvcp90._FDenorm @ stub _FDnorm @ stub _FDscale @ stub _FDtest -# extern _FEps +@ extern _FEps msvcp90._FEps @ stub _FExp -# extern _FInf -# extern _FNan +@ extern _FInf msvcp90._FInf +@ extern _FNan msvcp90._FNan # extern _FRteps @ stub _FSinh -# extern _FSnan +@ extern _FSnan msvcp90._FSnan # extern _FXbig @ stub _GetLocaleForCP @ stub _Getcoll @@ -2814,33 +2814,33 @@ @ stub _Getdateorder @ stub _Getwctype @ stub _Getwctypes -# extern _Hugeval -# extern _Inf +@ extern _Hugeval msvcp90._Hugeval +@ extern _Inf msvcp90._Inf @ stub _LCosh -# extern _LDenorm +@ extern _LDenorm msvcp90._LDenorm @ stub _LDscale @ stub _LDtest -# extern _LEps +@ extern _LEps msvcp90._LEps @ stub _LExp -# extern _LInf -# extern _LNan +@ extern _LInf msvcp90._LInf +@ extern _LNan msvcp90._LNan @ stub _LPoly # extern _LRteps @ stub _LSinh -# extern _LSnan +@ extern _LSnan msvcp90._LSnan # extern _LXbig -# extern _LZero +@ extern _LZero msvcp90._LZero @ stub _Mbrtowc @ stub _Mtxdst @ stub _Mtxinit @ stub _Mtxlock @ stub _Mtxunlock -# extern _Nan +@ extern _Nan msvcp90._Nan @ stub _Once @ stub _Poly # extern _Rteps @ stub _Sinh -# extern _Snan +@ extern _Snan msvcp90._Snan @ stub _Stod @ stub _Stodx @ stub _Stof diff --git a/dlls/msvcp60/msvcp60.spec b/dlls/msvcp60/msvcp60.spec index 003e965276a..13f8d6ac804 100644 --- a/dlls/msvcp60/msvcp60.spec +++ b/dlls/msvcp60/msvcp60.spec @@ -4255,49 +4255,49 @@ @ stub -arch=win32 ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPBGH@Z @ stub -arch=win64 ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEBG_J@Z @ stub _Cosh -# extern _Denorm +@ extern _Denorm msvcp90._Denorm @ stub _Dnorm @ stub _Dscale @ stub _Dtest -# extern _Eps +@ extern _Eps msvcp90._Eps @ stub _Exp @ stub _FCosh -# extern _FDenorm +@ extern _FDenorm msvcp90._FDenorm @ stub _FDnorm @ stub _FDscale @ stub _FDtest -# extern _FEps +@ extern _FEps msvcp90._FEps @ stub _FExp -# extern _FInf -# extern _FNan +@ extern _FInf msvcp90._FInf +@ extern _FNan msvcp90._FNan # extern _FRteps @ stub _FSinh -# extern _FSnan +@ extern _FSnan msvcp90._FSnan # extern _FXbig @ stub _Getcoll @ stub _Getctype @ stub _Getcvt -# extern _Hugeval -# extern _Inf +@ extern _Hugeval msvcp90._Hugeval +@ extern _Inf msvcp90._Inf @ stub _LCosh -# extern _LDenorm +@ extern _LDenorm msvcp90._LDenorm @ stub _LDscale @ stub _LDtest -# extern _LEps +@ extern _LEps msvcp90._LEps @ stub _LExp -# extern _LInf -# extern _LNan +@ extern _LInf msvcp90._LInf +@ extern _LNan msvcp90._LNan @ stub _LPoly # extern _LRteps @ stub _LSinh -# extern _LSnan +@ extern _LSnan msvcp90._LSnan # extern _LXbig @ stub _Mbrtowc -# extern _Nan +@ extern _Nan msvcp90._Nan @ stub _Poly # extern _Rteps @ stub _Sinh -# extern _Snan +@ extern _Snan msvcp90._Snan @ stub _Stod @ stub _Stof @ stub _Stold diff --git a/dlls/msvcp70/msvcp70.spec b/dlls/msvcp70/msvcp70.spec index 8941d3575bd..f3c95835f7b 100644 --- a/dlls/msvcp70/msvcp70.spec +++ b/dlls/msvcp70/msvcp70.spec @@ -5041,51 +5041,51 @@ @ stub -arch=win32 ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPB_WH@Z @ stub -arch=win64 ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z @ stub _Cosh -# extern _Denorm +@ extern _Denorm msvcp90._Denorm @ stub _Dnorm @ stub _Dscale @ stub _Dtest -# extern _Eps +@ extern _Eps msvcp90._Eps @ stub _Exp @ stub _FCosh -# extern _FDenorm +@ extern _FDenorm msvcp90._FDenorm @ stub _FDnorm @ stub _FDscale @ stub _FDtest -# extern _FEps +@ extern _FEps msvcp90._FEps @ stub _FExp -# extern _FInf -# extern _FNan +@ extern _FInf msvcp90._FInf +@ extern _FNan msvcp90._FNan # extern _FRteps @ stub _FSinh -# extern _FSnan +@ extern _FSnan msvcp90._FSnan # extern _FXbig # extern _FZero @ stub _Getcoll @ stub _Getctype @ stub _Getcvt -# extern _Hugeval -# extern _Inf +@ extern _Hugeval msvcp90._Hugeval +@ extern _Inf msvcp90._Inf @ stub _LCosh -# extern _LDenorm +@ extern _LDenorm msvcp90._LDenorm @ stub _LDscale @ stub _LDtest -# extern _LEps +@ extern _LEps msvcp90._LEps @ stub _LExp -# extern _LInf -# extern _LNan +@ extern _LInf msvcp90._LInf +@ extern _LNan msvcp90._LNan @ stub _LPoly # extern _LRteps @ stub _LSinh -# extern _LSnan +@ extern _LSnan msvcp90._LSnan # extern _LXbig -# extern _LZero +@ extern _LZero msvcp90._LZero @ stub _Mbrtowc -# extern _Nan +@ extern _Nan msvcp90._Nan @ stub _Poly # extern _Rteps @ stub _Sinh -# extern _Snan +@ extern _Snan msvcp90._Snan @ stub _Stod @ stub _Stof @ stub _Stold diff --git a/dlls/msvcp71/msvcp71.spec b/dlls/msvcp71/msvcp71.spec index 74d4178bdfe..f13563c2e02 100644 --- a/dlls/msvcp71/msvcp71.spec +++ b/dlls/msvcp71/msvcp71.spec @@ -5095,24 +5095,24 @@ @ stub -arch=win64 ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z @ stub _Atexit @ stub _Cosh -# extern _Denorm +@ extern _Denorm msvcp90._Denorm @ stub _Dnorm @ stub _Dscale @ stub _Dtest -# extern _Eps +@ extern _Eps msvcp90._Eps @ stub _Exp @ stub _FCosh -# extern _FDenorm +@ extern _FDenorm msvcp90._FDenorm @ stub _FDnorm @ stub _FDscale @ stub _FDtest -# extern _FEps +@ extern _FEps msvcp90._FEps @ stub _FExp -# extern _FInf -# extern _FNan +@ extern _FInf msvcp90._FInf +@ extern _FNan msvcp90._FNan # extern _FRteps @ stub _FSinh -# extern _FSnan +@ extern _FSnan msvcp90._FSnan # extern _FXbig # extern _FZero @ stub _Getcoll @@ -5120,28 +5120,28 @@ @ stub _Getcvt @ stub _Getwctype @ stub _Getwctypes -# extern _Hugeval -# extern _Inf +@ extern _Hugeval msvcp90._Hugeval +@ extern _Inf msvcp90._Inf @ stub _LCosh -# extern _LDenorm +@ extern _LDenorm msvcp90._LDenorm @ stub _LDscale @ stub _LDtest -# extern _LEps +@ extern _LEps msvcp90._LEps @ stub _LExp -# extern _LInf -# extern _LNan +@ extern _LInf msvcp90._LInf +@ extern _LNan msvcp90._LNan @ stub _LPoly # extern _LRteps @ stub _LSinh -# extern _LSnan +@ extern _LSnan msvcp90._LSnan # extern _LXbig -# extern _LZero +@ extern _LZero msvcp90._LZero @ stub _Mbrtowc -# extern _Nan +@ extern _Nan msvcp90._Nan @ stub _Poly # extern _Rteps @ stub _Sinh -# extern _Snan +@ extern _Snan msvcp90._Snan @ stub _Stod @ stub _Stof @ stub _Stold diff --git a/dlls/msvcp80/msvcp80.spec b/dlls/msvcp80/msvcp80.spec index f5edd8c588a..8f05370e9f4 100644 --- a/dlls/msvcp80/msvcp80.spec +++ b/dlls/msvcp80/msvcp80.spec @@ -5701,28 +5701,28 @@ @ stub -arch=win32 ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPB_WH@Z @ stub -arch=win64 ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z @ stub _Cosh -# extern _Denorm +@ extern _Denorm msvcp90._Denorm @ stub _Dnorm @ stub _Dscale @ stub _Dtentox @ stub _Dtest @ stub _Dunscale -# extern _Eps +@ extern _Eps msvcp90._Eps @ stub _Exp @ stub _FCosh -# extern _FDenorm +@ extern _FDenorm msvcp90._FDenorm @ stub _FDnorm @ stub _FDscale @ stub _FDtentox @ stub _FDtest @ stub _FDunscale -# extern _FEps +@ extern _FEps msvcp90._FEps @ stub _FExp -# extern _FInf -# extern _FNan +@ extern _FInf msvcp90._FInf +@ extern _FNan msvcp90._FNan # extern _FRteps @ stub _FSinh -# extern _FSnan +@ extern _FSnan msvcp90._FSnan # extern _FXbig @ stub _Getcoll @ stub _Getctype @@ -5730,35 +5730,35 @@ @ stub _Getdateorder @ stub _Getwctype @ stub _Getwctypes -# extern _Hugeval -# extern _Inf +@ extern _Hugeval msvcp90._Hugeval +@ extern _Inf msvcp90._Inf @ stub _LCosh -# extern _LDenorm +@ extern _LDenorm msvcp90._LDenorm @ stub _LDscale @ stub _LDtentox @ stub _LDtest @ stub _LDunscale -# extern _LEps +@ extern _LEps msvcp90._LEps @ stub _LExp -# extern _LInf -# extern _LNan +@ extern _LInf msvcp90._LInf +@ extern _LNan msvcp90._LNan @ stub _LPoly # extern _LRteps @ stub _LSinh -# extern _LSnan +@ extern _LSnan msvcp90._LSnan # extern _LXbig -# extern _LZero +@ extern _LZero msvcp90._LZero @ stub _Mbrtowc @ stub _Mtxdst @ stub _Mtxinit @ stub _Mtxlock @ stub _Mtxunlock -# extern _Nan +@ extern _Nan msvcp90._Nan @ stub _Once @ stub _Poly # extern _Rteps @ stub _Sinh -# extern _Snan +@ extern _Snan msvcp90._Snan @ stub _Stod @ stub _Stodx @ stub _Stof diff --git a/dlls/msvcp90/math.c b/dlls/msvcp90/math.c index 238fcfd6fde..0320940c8b6 100644 --- a/dlls/msvcp90/math.c +++ b/dlls/msvcp90/math.c @@ -48,6 +48,26 @@ enum std_float_round_style round_toward_neg_infinity = 3 }; +/* these are defined as integers but the bit patterns are then interpreted as floats/doubles */ +const DWORD _FDenorm = 1; +const ULONGLONG _Denorm = 1; +const ULONGLONG _LDenorm = 1; +const DWORD _FInf = 0x7f800000; +const ULONGLONG _Inf = (ULONGLONG)0x7ff00000 << 32; +const ULONGLONG _LInf = (ULONGLONG)0x7ff00000 << 32; +const DWORD _FNan = 0x7fc00000; +const ULONGLONG _Nan = (ULONGLONG)0x7ff80000 << 32; +const ULONGLONG _LNan = (ULONGLONG)0x7ff80000 << 32; +const DWORD _FSnan = 0x7f800001; +const ULONGLONG _Snan = ((ULONGLONG)0x7ff00000 << 32) + 1; +const ULONGLONG _LSnan = ((ULONGLONG)0x7ff00000 << 32) + 1; +const ULONGLONG _LZero = 0; +const ULONGLONG _Hugeval = (ULONGLONG)0x7ff00000 << 32; + +const float _FEps = FLT_EPSILON; +const double _Eps = DBL_EPSILON; +const LDOUBLE _LEps = LDBL_EPSILON; + /* ?digits10@?$numeric_limits@C@std@@2HB -> public: static int const std::numeric_limits::digits10 */ const int std_numeric_limits_signed_char_digits10 = 2; @@ -426,13 +446,13 @@ LONG __cdecl std_numeric_limits_long_denorm_min(void) { return 0; } ULONG __cdecl std_numeric_limits_unsigned_long_denorm_min(void) { return 0; } /* ?denorm_min@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits::denorm_min(void) */ -float __cdecl std_numeric_limits_float_denorm_min(void) { static const DWORD dmin = 1; return *(float *)&dmin; } +float __cdecl std_numeric_limits_float_denorm_min(void) { return *(float *)&_FDenorm; } /* ?denorm_min@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits::denorm_min(void) */ -double __cdecl std_numeric_limits_double_denorm_min(void) { static const ULONGLONG dmin = 1; return *(double *)&dmin; } +double __cdecl std_numeric_limits_double_denorm_min(void) { return *(double *)&_Denorm; } /* ?denorm_min@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits::denorm_min(void) */ -LDOUBLE __cdecl std_numeric_limits_long_double_denorm_min(void) { static const ULONGLONG dmin = 1; return *(LDOUBLE *)&dmin; } +LDOUBLE __cdecl std_numeric_limits_long_double_denorm_min(void) { return *(LDOUBLE *)&_LDenorm; } /* ?denorm_min@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::denorm_min(void) */ __int64 __cdecl std_numeric_limits_int64_denorm_min(void) { return 0; } @@ -474,13 +494,13 @@ LONG __cdecl std_numeric_limits_long_epsilon(void) { return 0; } ULONG __cdecl std_numeric_limits_unsigned_long_epsilon(void) { return 0; } /* ?epsilon@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits::epsilon(void) */ -float __cdecl std_numeric_limits_float_epsilon(void) { return FLT_EPSILON; } +float __cdecl std_numeric_limits_float_epsilon(void) { return _FEps; } /* ?epsilon@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits::epsilon(void) */ -double __cdecl std_numeric_limits_double_epsilon(void) { return DBL_EPSILON; } +double __cdecl std_numeric_limits_double_epsilon(void) { return _Eps; } /* ?epsilon@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits::epsilon(void) */ -LDOUBLE __cdecl std_numeric_limits_long_double_epsilon(void) { return LDBL_EPSILON; } +LDOUBLE __cdecl std_numeric_limits_long_double_epsilon(void) { return _LEps; } /* ?epsilon@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::epsilon(void) */ __int64 __cdecl std_numeric_limits_int64_epsilon(void) { return 0; } @@ -522,13 +542,13 @@ LONG __cdecl std_numeric_limits_long_infinity(void) { return 0; } ULONG __cdecl std_numeric_limits_unsigned_long_infinity(void) { return 0; } /* ?infinity@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits::infinity(void) */ -float __cdecl std_numeric_limits_float_infinity(void) { static const DWORD inf = 0x7f800000; return *(float *)&inf; } +float __cdecl std_numeric_limits_float_infinity(void) { return *(float *)&_FInf; } /* ?infinity@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits::infinity(void) */ -double __cdecl std_numeric_limits_double_infinity(void) { static const ULONGLONG inf = (ULONGLONG)0x7ff00000 << 32; return *(double *)&inf; } +double __cdecl std_numeric_limits_double_infinity(void) { return *(double *)&_Inf; } /* ?infinity@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits::infinity(void) */ -LDOUBLE __cdecl std_numeric_limits_long_double_infinity(void) { static const ULONGLONG inf = (ULONGLONG)0x7ff00000 << 32; return *(LDOUBLE *)&inf; } +LDOUBLE __cdecl std_numeric_limits_long_double_infinity(void) { return *(LDOUBLE *)&_LInf; } /* ?infinity@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::infinity(void) */ __int64 __cdecl std_numeric_limits_int64_infinity(void) { return 0; } @@ -666,13 +686,13 @@ LONG __cdecl std_numeric_limits_long_quiet_NaN(void) { return 0; } ULONG __cdecl std_numeric_limits_unsigned_long_quiet_NaN(void) { return 0; } /* ?quiet_NaN@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits::quiet_NaN(void) */ -float __cdecl std_numeric_limits_float_quiet_NaN(void) { static const DWORD qnan = 0x7fc00000; return *(float *)&qnan; } +float __cdecl std_numeric_limits_float_quiet_NaN(void) { return *(float *)&_FNan; } /* ?quiet_NaN@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits::quiet_NaN(void) */ -double __cdecl std_numeric_limits_double_quiet_NaN(void) { static const ULONGLONG qnan = (ULONGLONG)0x7ff80000 << 32; return *(double *)&qnan; } +double __cdecl std_numeric_limits_double_quiet_NaN(void) { return *(double *)&_Nan; } /* ?quiet_NaN@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits::quiet_NaN(void) */ -LDOUBLE __cdecl std_numeric_limits_long_double_quiet_NaN(void) { static const ULONGLONG qnan = (ULONGLONG)0x7ff80000 << 32; return *(LDOUBLE *)&qnan; } +LDOUBLE __cdecl std_numeric_limits_long_double_quiet_NaN(void) { return *(LDOUBLE *)&_LNan; } /* ?quiet_NaN@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::quiet_NaN(void) */ __int64 __cdecl std_numeric_limits_int64_quiet_NaN(void) { return 0; } @@ -762,13 +782,13 @@ LONG __cdecl std_numeric_limits_long_signaling_NaN(void) { return 0; } ULONG __cdecl std_numeric_limits_unsigned_long_signaling_NaN(void) { return 0; } /* ?signaling_NaN@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits::signaling_NaN(void) */ -float __cdecl std_numeric_limits_float_signaling_NaN(void) { static const DWORD snan = 0x7f800001; return *(float *)&snan; } +float __cdecl std_numeric_limits_float_signaling_NaN(void) { return *(float *)&_FSnan; } /* ?signaling_NaN@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits::signaling_NaN(void) */ -double __cdecl std_numeric_limits_double_signaling_NaN(void) { static const ULONGLONG snan = ((ULONGLONG)0x7ff00000 << 32) + 1; return *(double *)&snan; } +double __cdecl std_numeric_limits_double_signaling_NaN(void) { return *(double *)&_Snan; } /* ?signaling_NaN@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits::signaling_NaN(void) */ -LDOUBLE __cdecl std_numeric_limits_long_double_signaling_NaN(void) { static const ULONGLONG snan = ((ULONGLONG)0x7ff00000 << 32) + 1; return *(LDOUBLE *)&snan; } +LDOUBLE __cdecl std_numeric_limits_long_double_signaling_NaN(void) { return *(LDOUBLE *)&_LSnan; } /* ?signaling_NaN@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::signaling_NaN(void) */ __int64 __cdecl std_numeric_limits_int64_signaling_NaN(void) { return 0; } diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index d917cea55a7..dc564b0f20a 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -5731,24 +5731,24 @@ @ stub -arch=win32 ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPB_WH@Z @ stub -arch=win64 ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z @ stub _Cosh -# extern _Denorm +@ extern _Denorm @ stub _Dnorm @ stub _Dscale @ stub _Dtest -# extern _Eps +@ extern _Eps @ stub _Exp @ stub _FCosh -# extern _FDenorm +@ extern _FDenorm @ stub _FDnorm @ stub _FDscale @ stub _FDtest -# extern _FEps +@ extern _FEps @ stub _FExp -# extern _FInf -# extern _FNan +@ extern _FInf +@ extern _FNan # extern _FRteps @ stub _FSinh -# extern _FSnan +@ extern _FSnan # extern _FXbig @ stub _Getcoll @ stub _Getctype @@ -5756,33 +5756,33 @@ @ stub _Getdateorder @ stub _Getwctype @ stub _Getwctypes -# extern _Hugeval -# extern _Inf +@ extern _Hugeval +@ extern _Inf @ stub _LCosh -# extern _LDenorm +@ extern _LDenorm @ stub _LDscale @ stub _LDtest -# extern _LEps +@ extern _LEps @ stub _LExp -# extern _LInf -# extern _LNan +@ extern _LInf +@ extern _LNan @ stub _LPoly # extern _LRteps @ stub _LSinh -# extern _LSnan +@ extern _LSnan # extern _LXbig -# extern _LZero +@ extern _LZero @ stub _Mbrtowc @ stub _Mtxdst @ stub _Mtxinit @ stub _Mtxlock @ stub _Mtxunlock -# extern _Nan +@ extern _Nan @ stub _Once @ stub _Poly # extern _Rteps @ stub _Sinh -# extern _Snan +@ extern _Snan @ stub _Stod @ stub _Stodx @ stub _Stof