mirror of
https://github.com/reactos/reactos.git
synced 2025-06-06 01:40:36 +00:00
[CRT]
Check for NaN and set error accordingly svn path=/trunk/; revision=54447
This commit is contained in:
parent
ada492283a
commit
7d1620fa34
1 changed files with 21 additions and 10 deletions
|
@ -19,11 +19,22 @@
|
|||
Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <precomp.h>
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue