include: Fix denormals handling in _fpclassf inline implementation.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Piotr Caban 2021-05-13 21:15:20 +02:00 committed by Alexandre Julliard
parent 04cf91ed1d
commit 522e13e682
1 changed files with 14 additions and 1 deletions

View File

@ -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