Retro68/gcc/newlib/libm/common/s_fpclassify.c
2012-03-27 01:51:53 +02:00

32 lines
897 B
C

/* 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;
}