| /** |
| * This file has no copyright assigned and is placed in the Public Domain. |
| * This file is part of the w64 mingw-runtime package. |
| * No warranty is given; refer to the file DISCLAIMER within this package. |
| */ |
| #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){ |
| unsigned short sw; |
| __asm__ ( |
| "fxam; fstsw %%ax;" |
| : "=a" (sw) |
| : "t" (_x) |
| ); |
| return sw & (FP_NAN | FP_NORMAL | FP_ZERO ); |
| } |