From 522e13e6825f9dd50ddb7ddc079f0abf5dfd1034 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Thu, 13 May 2021 21:15:20 +0200 Subject: [PATCH] include: Fix denormals handling in _fpclassf inline implementation. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- include/msvcrt/math.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/include/msvcrt/math.h b/include/msvcrt/math.h index 43e82fc3bea..d2977b67c34 100644 --- a/include/msvcrt/math.h +++ b/include/msvcrt/math.h @@ -166,7 +166,20 @@ static inline float fmodf(float x, float y) { return fmod(x, y); } static inline int _finitef(float x) { return _finite(x); } static inline int _isnanf(float x) { return _isnan(x); } -static inline int _fpclassf(float x) { return _fpclass(x); } + +static inline int _fpclassf(float x) +{ + unsigned int ix = *(int*)&x; + double d = x; + + /* construct denormal double */ + if (!(ix >> 23 & 0xff) && (ix << 1)) + { + unsigned __int64 id = (((unsigned __int64)ix >> 31) << 63) | 1; + d = *(double*)&id; + } + return _fpclass(d); +} #endif