(root)/
glibc-2.38/
sysdeps/
m68k/
m680x0/
fpu/
s_logbl.c
       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
      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)