openbmc/build/tmp/deploy/sdk/witherspoon-2019-08-08/sysroots/armv6-openbmc-linux-gnueabi/usr/src/debug/glibc/2.29-r0/git/sysdeps/ieee754/flt-32/e_powf.c
static inline double_t log2_inline(uint32_t ix)
{
    /* double_t for better performance on targets with FLT_EVAL_METHOD==2.  */
    double_t z, r, r2, r4, p, q, y, y0, invc, logc;
    uint32_t iz, top, tmp;
    int k, i;

    /* x = 2^k z; where z is in range [OFF,2*OFF] and exact.
       The range is split into N subintervals.
       The ith subinterval contains z and c is near its center.  */
    tmp = ix - OFF;
    i = (tmp >> (23 - POWF_LOG2_TABLE_BITS)) % N;
    top = tmp & 0xff800000;
    iz = ix - top;
    k = (int32_t)top >> (23 - POWF_SCALE_BITS); /* arithmetic shift */
    invc = T[i].invc;
    logc = T[i].logc;
    z = (double_t)asfloat(iz);

    /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */
    r = z * invc - 1;
    y0 = logc + (double_t)k;

    /* Pipelined polynomial evaluation to approximate log1p(r)/ln2.  */
    r2 = r * r;
    y = A[0] * r + A[1];
    p = A[2] * r + A[3];
    r4 = r2 * r2;
    q = A[4] * r + y0;
    q = p * r2 + q;
    y = y * r4 + q;
    return y;
}
/* Subnormal input is normalized so ix has negative biased exponent.
   Output is multiplied by N (POWF_SCALE) if TOINT_INTRINICS is set.  */
Subnormal input is normalized so ix has negative biased exponent.
Output is multiplied by N (POWF_SCALE) if TOINT_INTRINICS is set.
Subnormal input is normalized so ix has negative biased exponent . Output is multiplied by N ( POWF_SCALE ) if TOINT_INTRINICS is set .
static inline double_t log2_inline(uint32_t ix)
{
    double_t z, r, r2, r4, p, q, y, y0, invc, logc;
    uint32_t iz, top, tmp;
    int k, i;
    tmp = ix - OFF;
    i = (tmp >> (23 - POWF_LOG2_TABLE_BITS)) % N;
    top = tmp & 0xff800000;
    iz = ix - top;
    k = (int32_t)top >> (23 - POWF_SCALE_BITS); 
    invc = T[i].invc;
    logc = T[i].logc;
    z = (double_t)asfloat(iz);
    r = z * invc - 1;
    y0 = logc + (double_t)k;
    r2 = r * r;
    y = A[0] * r + A[1];
    p = A[2] * r + A[3];
    r4 = r2 * r2;
    q = A[4] * r + y0;
    q = p * r2 + q;
    y = y * r4 + q;
    return y;
}
static inline double_t log2_inline ( uint32_t ix ) { double_t z , r , r2 , r4 , p , q , y , y0 , invc , logc ; uint32_t iz , top , tmp ; int k , i ; tmp = ix - OFF ; i = ( tmp >> ( 23 - POWF_LOG2_TABLE_BITS ) ) % N ; top = tmp & 0xff800000 ; iz = ix - top ; k = ( int32_t ) top >> ( 23 - POWF_SCALE_BITS ) ; invc = T [ i ] . invc ; logc = T [ i ] . logc ; z = ( double_t ) asfloat ( iz ) ; r = z * invc - 1 ; y0 = logc + ( double_t ) k ; r2 = r * r ; y = A [ 0 ] * r + A [ 1 ] ; p = A [ 2 ] * r + A [ 3 ] ; r4 = r2 * r2 ; q = A [ 4 ] * r + y0 ; q = p * r2 + q ; y = y * r4 + q ; return y ; }
Subnormal input is normalized so ix has negative biased exponent.
Subnormal input is normalized so ix has negative biased exponent .
/* double_t for better performance on targets with FLT_EVAL_METHOD==2.  */ /* x = 2^k z; where z is in range [OFF,2*OFF] and exact.
       The range is split into N subintervals.
       The ith subinterval contains z and c is near its center.  */ /* arithmetic shift */ /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ /* Pipelined polynomial evaluation to approximate log1p(r)/ln2.  */