diff options
Diffstat (limited to 'newlib/libm/common/s_round.c')
-rw-r--r-- | newlib/libm/common/s_round.c | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/newlib/libm/common/s_round.c b/newlib/libm/common/s_round.c deleted file mode 100644 index 09f19de64..000000000 --- a/newlib/libm/common/s_round.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include "fdlibm.h" - -#ifndef _DOUBLE_IS_32BITS - -#ifdef __STDC__ - double round(double x) -#else - double round(x) - double x; -#endif -{ - /* Most significant word, least significant word. */ - __int32_t msw, exponent_less_1023; - __uint32_t lsw; - - EXTRACT_WORDS(msw, lsw, x); - - /* Extract exponent field. */ - exponent_less_1023 = ((msw & 0x7ff00000) >> 20) - 1023; - - if (exponent_less_1023 < 20) - { - if (exponent_less_1023 < 0) - { - msw &= 0x80000000; - if (exponent_less_1023 == -1) - /* Result is +1.0 or -1.0. */ - msw |= (1023 << 20); - lsw = 0; - } - else - { - __uint32_t exponent_mask = 0x000fffff >> exponent_less_1023; - if ((msw & exponent_mask) == 0 && lsw == 0) - /* x in an integral value. */ - return x; - - msw += 0x00080000 >> exponent_less_1023; - msw &= ~exponent_mask; - lsw = 0; - } - } - else if (exponent_less_1023 > 51) - { - if (exponent_less_1023 == 1024) - /* x is NaN or infinite. */ - return x + x; - else - return x; - } - else - { - __uint32_t exponent_mask = 0xffffffff >> (exponent_less_1023 - 20); - __uint32_t tmp; - - if ((lsw & exponent_mask) == 0) - /* x is an integral value. */ - return x; - - tmp = lsw + (1 << (51 - exponent_less_1023)); - if (tmp < lsw) - msw += 1; - lsw = tmp; - - lsw &= ~exponent_mask; - } - INSERT_WORDS(x, msw, lsw); - - return x; -} - -#endif /* _DOUBLE_IS_32BITS */ |