Print this page
5261 libm should stop using synonyms.h
5298 fabs is 0-sized, confuses dis(1) and others
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Approved by: Gordon Ross <gwr@nexenta.com>
5262 libm needs to be carefully unifdef'd
5268 libm doesn't need to hide symbols which are already local
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com>
Reviewed by: Gordon Ross <gwr@nexenta.com>
Approved by: Gordon Ross <gwr@nexenta.com>

@@ -24,86 +24,17 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma weak sqrtf = __sqrtf
+#pragma weak __sqrtf = sqrtf
 
 #include "libm.h"
 
-#ifdef __INLINE
 
 extern float __inline_sqrtf(float);
 
 float
 sqrtf(float x) {
         return (__inline_sqrtf(x));
 }
 
-#else   /* defined(__INLINE) */
-
-static const float huge = 1.0e35F, tiny = 1.0e-35F, zero = 0.0f;
-
-float
-sqrtf(float x) {
-        float   dz, w;
-        int     *pw = (int *)&w;
-        int     ix, j, r, q, m, n, s, t;
-
-        w = x;
-        ix = pw[0];
-        if (ix <= 0) {
-                /* x is <= 0 or nan */
-                j = ix & 0x7fffffff;
-                if (j == 0)
-                        return (w);
-                return ((w * zero) / zero);
-        }
-
-        if ((ix & 0x7f800000) == 0x7f800000) {
-                /* x is +inf or nan */
-                return (w * w);
-        }
-
-        m = ir_ilogb_(&w);
-        n = -m;
-        w = r_scalbn_(&w, (int *)&n);
-        ix = (pw[0] & 0x007fffff) | 0x00800000;
-        n = m / 2;
-        if ((n + n) != m) {
-                ix = ix + ix;
-                m -= 1;
-                n = m / 2;
-        }
-
-        /* generate sqrt(x) bit by bit */
-        ix <<= 1;
-        q = s = 0;
-        r = 0x01000000;
-        for (j = 1; j <= 25; j++) {
-                t = s + r;
-                if (t <= ix) {
-                        s = t + r;
-                        ix -= t;
-                        q += r;
-                }
-                ix <<= 1;
-                r >>= 1;
-        }
-        if (ix == 0)
-                goto done;
-
-        /* raise inexact and determine the ambient rounding mode */
-        dz = huge - tiny;
-        if (dz < huge)
-                goto done;
-        dz = huge + tiny;
-        if (dz > huge)
-                q += 1;
-        q += (q & 1);
-
-done:
-        pw[0] = (q >> 1) + 0x3f000000;
-        return (r_scalbn_(&w, (int *)&n));
-}
-
-#endif  /* defined(__INLINE) */