| /* Copyright (C) 2002, 2007 by Red Hat, Incorporated. All rights reserved. |
| * |
| * Permission to use, copy, modify, and distribute this software |
| * is freely granted, provided that this notice is preserved. |
| */ |
| |
| #include "fdlibm.h" |
| |
| int |
| __fpclassifyd (double x) |
| { |
| __uint32_t msw, lsw; |
| |
| EXTRACT_WORDS(msw,lsw,x); |
| |
| if ((msw == 0x00000000 && lsw == 0x00000000) || |
| (msw == 0x80000000 && lsw == 0x00000000)) |
| return FP_ZERO; |
| else if ((msw >= 0x00100000 && msw <= 0x7fefffff) || |
| (msw >= 0x80100000 && msw <= 0xffefffff)) |
| return FP_NORMAL; |
| else if ((msw >= 0x00000000 && msw <= 0x000fffff) || |
| (msw >= 0x80000000 && msw <= 0x800fffff)) |
| /* zero is already handled above */ |
| return FP_SUBNORMAL; |
| else if ((msw == 0x7ff00000 && lsw == 0x00000000) || |
| (msw == 0xfff00000 && lsw == 0x00000000)) |
| return FP_INFINITE; |
| else |
| return FP_NAN; |
| } |