OSDN Git Service

Merge branch 'master' of git://github.com/monaka/binutils
[pf3gnuchains/pf3gnuchains3x.git] / newlib / libm / common / s_fpclassify.c
1 /* Copyright (C) 2002, 2007 by  Red Hat, Incorporated. All rights reserved.
2  *
3  * Permission to use, copy, modify, and distribute this software
4  * is freely granted, provided that this notice is preserved.
5  */
6
7 #include "fdlibm.h"
8
9 int
10 __fpclassifyd (double x)
11 {
12   __uint32_t msw, lsw;
13
14   EXTRACT_WORDS(msw,lsw,x);
15
16   if ((msw == 0x00000000 && lsw == 0x00000000) ||
17       (msw == 0x80000000 && lsw == 0x00000000))
18     return FP_ZERO;
19   else if ((msw >= 0x00100000 && msw <= 0x7fefffff) ||
20            (msw >= 0x80100000 && msw <= 0xffefffff))
21     return FP_NORMAL;
22   else if ((msw >= 0x00000000 && msw <= 0x000fffff) ||
23            (msw >= 0x80000000 && msw <= 0x800fffff))
24     /* zero is already handled above */
25     return FP_SUBNORMAL;
26   else if ((msw == 0x7ff00000 && lsw == 0x00000000) ||
27            (msw == 0xfff00000 && lsw == 0x00000000))
28     return FP_INFINITE;
29   else
30     return FP_NAN;
31 }