diff --git a/reactos/lib/sdk/crt/math/i386/ldexp.c b/reactos/lib/sdk/crt/math/i386/ldexp.c index 327e72a27b8..adfa85fb0b7 100644 --- a/reactos/lib/sdk/crt/math/i386/ldexp.c +++ b/reactos/lib/sdk/crt/math/i386/ldexp.c @@ -19,11 +19,22 @@ Boston, MA 02110-1301, USA. */ +#include #include +#include double ldexp (double value, int exp) { register double result; + + /* Check for value correctness + * and set errno if required + */ + if (_isnan(value)) + { + errno = EDOM; + } + #ifdef __GNUC__ #if defined(__clang__) asm ("fild %[exp]\n" @@ -33,20 +44,20 @@ double ldexp (double value, int exp) : [value] "0" (value), [exp] "m" (exp)); #else asm ("fscale" - : "=t" (result) + : "=t" (result) : "0" (value), "u" ((double)exp) : "1"); #endif #else /* !__GNUC__ */ - register double __dy = (double)exp; - __asm - { - fld __dy - fld value - fscale - fstp result - } + register double __dy = (double)exp; + __asm + { + fld __dy + fld value + fscale + fstp result + } #endif /* !__GNUC__ */ - return result; + return result; }