35 lines
823 B
C
35 lines
823 B
C
/**
|
|
* This file has no copyright assigned and is placed in the Public Domain.
|
|
* This file is part of the mingw-w64 runtime package.
|
|
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
|
*/
|
|
#define __CRT__NO_INLINE
|
|
#include <math.h>
|
|
|
|
/* 'fxam' sets FPU flags C3,C2,C0 'fstsw' stores:
|
|
FP_NAN 001 0x0100
|
|
FP_NORMAL 010 0x0400
|
|
FP_INFINITE 011 0x0500
|
|
FP_ZERO 100 0x4000
|
|
FP_SUBNORMAL 110 0x4400
|
|
|
|
and sets C1 flag (signbit) if neg */
|
|
|
|
int __fpclassify (double _x)
|
|
{
|
|
__mingw_dbl_type_t hlp;
|
|
unsigned int l, h;
|
|
|
|
hlp.x = _x;
|
|
h = hlp.lh.high;
|
|
l = hlp.lh.low | (h & 0xfffff);
|
|
h &= 0x7ff00000;
|
|
if ((h | l) == 0)
|
|
return FP_ZERO;
|
|
if (!h)
|
|
return FP_SUBNORMAL;
|
|
if (h == 0x7ff00000)
|
|
return (l ? FP_NAN : FP_INFINITE);
|
|
return FP_NORMAL;
|
|
}
|