1 /* s_logbl.c -- long double version of s_logb.c.
2  */
3 
4 /*
5  * ====================================================
6  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
7  *
8  * Developed at SunPro, a Sun Microsystems, Inc. business.
9  * Permission to use, copy, modify, and distribute this
10  * software is freely granted, provided that this notice
11  * is preserved.
12  * ====================================================
13  */
14 
15 /*
16  * long double logbl(x)
17  * IEEE 754 logb. Included to pass IEEE test suite. Not recommend.
18  * Use ilogb instead.
19  */
20 
21 #include <math.h>
22 #include <math_private.h>
23 
24 long double
__logbl(long double x)25 __logbl (long double x)
26 {
27   int32_t es, lx, ix;
28 
29   GET_LDOUBLE_WORDS (es, ix, lx, x);
30   es &= 0x7fff;			/* exponent */
31   if ((es | ix | lx) == 0)
32     return -1.0 / fabsl (x);
33   if (es == 0x7fff)
34     return x * x;
35   if (es == 0)			/* IEEE 754 logb */
36     {
37       /* POSIX specifies that denormal number is treated as
38          though it were normalized.  */
39       if (ix == 0)
40 	es = -(__builtin_clz (lx) + 32);
41       else
42 	es = -__builtin_clz (ix);
43     }
44   return (long double) (es - 16383);
45 }
46 
47 weak_alias (__logbl, logbl)
48