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. */
*** 33,76 **** static union { unsigned i; float f; } C[] = { ! 0x00800000, ! 0x7f000000, ! 0x7fffffff }; #define tiny C[0].f #define huge C[1].f #define qnan C[2].f #if defined(__sparc) - enum fcc_type { ! fcc_equal = 0, ! fcc_less = 1, ! fcc_greater = 2, ! fcc_unordered = 3 }; #ifdef __sparcv9 #define _Q_cmp _Qp_cmp #endif extern enum fcc_type _Q_cmp(const long double *, const long double *); float ! __nexttowardf(float x, long double y) { union { unsigned i; float f; } xx; union { unsigned i[4]; long double q; } yy; long double lx; unsigned hx; volatile float dummy; enum fcc_type rel; --- 34,73 ---- static union { unsigned i; float f; } C[] = { ! 0x00800000, 0x7f000000, 0x7fffffff }; #define tiny C[0].f #define huge C[1].f #define qnan C[2].f #if defined(__sparc) enum fcc_type { ! fcc_equal = 0, fcc_less = 1, fcc_greater = 2, fcc_unordered = 3 }; #ifdef __sparcv9 #define _Q_cmp _Qp_cmp #endif extern enum fcc_type _Q_cmp(const long double *, const long double *); float ! __nexttowardf(float x, long double y) ! { union { unsigned i; float f; } xx; union { unsigned i[4]; long double q; } yy; + long double lx; unsigned hx; volatile float dummy; enum fcc_type rel;
*** 84,183 **** lx = xx.f = x; hx = xx.i & ~0x80000000; /* check for each of four possible orderings */ rel = _Q_cmp(&lx, &y); if (rel == fcc_unordered) return (qnan); if (rel == fcc_equal) { if (hx == 0) { /* x is zero; return zero with y's sign */ yy.q = y; xx.i = yy.i[0]; return (xx.f); } return (x); } if (rel == fcc_less) { if (hx == 0) /* x is zero */ xx.i = 0x00000001; ! else if ((int) xx.i >= 0) /* x is positive */ xx.i++; else xx.i--; } else { if (hx == 0) /* x is zero */ xx.i = 0x80000001; ! else if ((int) xx.i >= 0) /* x is positive */ xx.i--; else xx.i++; } /* raise exceptions as needed */ hx = xx.i & ~0x80000000; if (hx == 0x7f800000) { dummy = huge; dummy *= huge; } else if (hx < 0x00800000) { dummy = tiny; dummy *= tiny; } return (xx.f); } - #elif defined(__x86) - float ! __nexttowardf(float x, long double y) { union { unsigned i; float f; } xx; unsigned hx; long double lx; volatile float dummy; lx = xx.f = x; hx = xx.i & ~0x80000000; /* check for each of four possible orderings */ if (isunordered(lx, y)) ! return ((float) (lx + y)); if (lx == y) ! return ((float) y); if (lx < y) { if (hx == 0) /* x is zero */ xx.i = 0x00000001; ! else if ((int) xx.i >= 0) /* x is positive */ xx.i++; else xx.i--; } else { if (hx == 0) /* x is zero */ xx.i = 0x80000001; ! else if ((int) xx.i >= 0) /* x is positive */ xx.i--; else xx.i++; } /* raise exceptions as needed */ hx = xx.i & ~0x80000000; if (hx == 0x7f800000) { dummy = huge; dummy *= huge; } else if (hx < 0x00800000) { dummy = tiny; dummy *= tiny; } return (xx.f); } - #else #error Unknown architecture #endif --- 81,183 ---- lx = xx.f = x; hx = xx.i & ~0x80000000; /* check for each of four possible orderings */ rel = _Q_cmp(&lx, &y); + if (rel == fcc_unordered) return (qnan); if (rel == fcc_equal) { if (hx == 0) { /* x is zero; return zero with y's sign */ yy.q = y; xx.i = yy.i[0]; return (xx.f); } + return (x); } if (rel == fcc_less) { if (hx == 0) /* x is zero */ xx.i = 0x00000001; ! else if ((int)xx.i >= 0) /* x is positive */ xx.i++; else xx.i--; } else { if (hx == 0) /* x is zero */ xx.i = 0x80000001; ! else if ((int)xx.i >= 0) /* x is positive */ xx.i--; else xx.i++; } /* raise exceptions as needed */ hx = xx.i & ~0x80000000; + if (hx == 0x7f800000) { dummy = huge; dummy *= huge; } else if (hx < 0x00800000) { dummy = tiny; dummy *= tiny; } return (xx.f); } #elif defined(__x86) float ! __nexttowardf(float x, long double y) ! { union { unsigned i; float f; } xx; + unsigned hx; long double lx; volatile float dummy; lx = xx.f = x; hx = xx.i & ~0x80000000; /* check for each of four possible orderings */ if (isunordered(lx, y)) ! return ((float)(lx + y)); if (lx == y) ! return ((float)y); if (lx < y) { if (hx == 0) /* x is zero */ xx.i = 0x00000001; ! else if ((int)xx.i >= 0) /* x is positive */ xx.i++; else xx.i--; } else { if (hx == 0) /* x is zero */ xx.i = 0x80000001; ! else if ((int)xx.i >= 0) /* x is positive */ xx.i--; else xx.i++; } /* raise exceptions as needed */ hx = xx.i & ~0x80000000; + if (hx == 0x7f800000) { dummy = huge; dummy *= huge; } else if (hx < 0x00800000) { dummy = tiny; dummy *= tiny; } return (xx.f); } #else #error Unknown architecture #endif