Print this page
11210 libm should be cstyle(1ONBLD) clean

*** 20,29 **** --- 20,30 ---- */ /* * Copyright 2011 Nexenta Systems, Inc. All rights reserved. */ + /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */
*** 40,54 **** #include "libm.h" #include <fenv.h> double ! __nearbyint(double x) { union { unsigned i[2]; double d; } xx; unsigned hx, sx, i, frac; int rm, j; xx.d = x; sx = xx.i[HIWORD] & 0x80000000; --- 41,57 ---- #include "libm.h" #include <fenv.h> double ! __nearbyint(double x) ! { union { unsigned i[2]; double d; } xx; + unsigned hx, sx, i, frac; int rm, j; xx.d = x; sx = xx.i[HIWORD] & 0x80000000;
*** 57,119 **** /* handle trivial cases */ if (hx >= 0x43300000) { /* x is nan, inf, or already integral */ if (hx >= 0x7ff00000) /* x is inf or nan */ #if defined(FPADD_TRAPS_INCOMPLETE_ON_NAN) return (hx >= 0x7ff80000 ? x : x + x); /* assumes sparc-like QNaN */ #else return (x + x); #endif return (x); ! } else if ((hx | xx.i[LOWORD]) == 0) /* x is zero */ return (x); /* get the rounding mode */ rm = fegetround(); /* flip the sense of directed roundings if x is negative */ if (sx && (rm == FE_UPWARD || rm == FE_DOWNWARD)) rm = (FE_UPWARD + FE_DOWNWARD) - rm; /* handle |x| < 1 */ if (hx < 0x3ff00000) { ! if (rm == FE_UPWARD || (rm == FE_TONEAREST && ! (hx >= 0x3fe00000 && ((hx & 0xfffff) | xx.i[LOWORD])))) xx.i[HIWORD] = sx | 0x3ff00000; else xx.i[HIWORD] = sx; xx.i[LOWORD] = 0; return (xx.d); } /* round x at the integer bit */ j = 0x433 - (hx >> 20); if (j >= 32) { i = 1 << (j - 32); ! frac = ((xx.i[HIWORD] << 1) << (63 - j)) | ! (xx.i[LOWORD] >> (j - 32)); if (xx.i[LOWORD] & (i - 1)) frac |= 1; if (!frac) return (x); xx.i[LOWORD] = 0; xx.i[HIWORD] &= ~(i - 1); ! if ((rm == FE_UPWARD) || ((rm == FE_TONEAREST) && ! ((frac > 0x80000000u) || ((frac == 0x80000000) && ! (xx.i[HIWORD] & i))))) xx.i[HIWORD] += i; } else { i = 1 << j; frac = (xx.i[LOWORD] << 1) << (31 - j); if (!frac) return (x); xx.i[LOWORD] &= ~(i - 1); ! if ((rm == FE_UPWARD) || ((rm == FE_TONEAREST) && ! (frac > 0x80000000u || ((frac == 0x80000000) && ! (xx.i[LOWORD] & i))))) { xx.i[LOWORD] += i; if (xx.i[LOWORD] == 0) xx.i[HIWORD]++; } } return (xx.d); } --- 60,135 ---- /* handle trivial cases */ if (hx >= 0x43300000) { /* x is nan, inf, or already integral */ if (hx >= 0x7ff00000) /* x is inf or nan */ #if defined(FPADD_TRAPS_INCOMPLETE_ON_NAN) return (hx >= 0x7ff80000 ? x : x + x); + /* assumes sparc-like QNaN */ #else return (x + x); #endif return (x); ! } else if ((hx | xx.i[LOWORD]) == 0) { /* x is zero */ return (x); + } /* get the rounding mode */ rm = fegetround(); /* flip the sense of directed roundings if x is negative */ if (sx && (rm == FE_UPWARD || rm == FE_DOWNWARD)) rm = (FE_UPWARD + FE_DOWNWARD) - rm; /* handle |x| < 1 */ if (hx < 0x3ff00000) { ! if (rm == FE_UPWARD || (rm == FE_TONEAREST && (hx >= ! 0x3fe00000 && ((hx & 0xfffff) | xx.i[LOWORD])))) xx.i[HIWORD] = sx | 0x3ff00000; else xx.i[HIWORD] = sx; + xx.i[LOWORD] = 0; return (xx.d); } /* round x at the integer bit */ j = 0x433 - (hx >> 20); + if (j >= 32) { i = 1 << (j - 32); ! frac = ((xx.i[HIWORD] << 1) << (63 - j)) | (xx.i[LOWORD] >> (j - ! 32)); ! if (xx.i[LOWORD] & (i - 1)) frac |= 1; + if (!frac) return (x); + xx.i[LOWORD] = 0; xx.i[HIWORD] &= ~(i - 1); ! ! if ((rm == FE_UPWARD) || ((rm == FE_TONEAREST) && ((frac > ! 0x80000000u) || ((frac == 0x80000000) && (xx.i[HIWORD] & ! i))))) xx.i[HIWORD] += i; } else { i = 1 << j; frac = (xx.i[LOWORD] << 1) << (31 - j); + if (!frac) return (x); + xx.i[LOWORD] &= ~(i - 1); ! ! if ((rm == FE_UPWARD) || ((rm == FE_TONEAREST) && (frac > ! 0x80000000u || ((frac == 0x80000000) && (xx.i[LOWORD] & ! i))))) { xx.i[LOWORD] += i; + if (xx.i[LOWORD] == 0) xx.i[HIWORD]++; } } + return (xx.d); }