include/SDL_bits.h
changeset 6873 f042ae287155
parent 6866 e74a4b282450
child 7004 18d4df6942c2
     1.1 --- a/include/SDL_bits.h	Tue Feb 12 22:23:42 2013 -0800
     1.2 +++ b/include/SDL_bits.h	Wed Feb 13 17:19:21 2013 -0800
     1.3 @@ -65,27 +65,24 @@
     1.4  #else
     1.5      /* Based off of Bit Twiddling Hacks by Sean Eron Anderson
     1.6       * <seander@cs.stanford.edu>, released in the public domain.
     1.7 -     * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogLookup
     1.8 +     * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog
     1.9       */
    1.10 -    static const Sint8 LogTable256[256] =
    1.11 +    const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
    1.12 +    const Uint8  S[] = {1, 2, 4, 8, 16};
    1.13 +
    1.14 +    Uint8 msbIndex = 0;
    1.15 +    int i;
    1.16 +
    1.17 +    for (i = 4; i >= 0; i--)
    1.18      {
    1.19 -    #define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n
    1.20 -        -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
    1.21 -        LT(4), LT(5), LT(5), LT(6), LT(6), LT(6), LT(6),
    1.22 -        LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7)
    1.23 -    #undef LT
    1.24 -    };
    1.25 +        if (x & b[i])
    1.26 +        {
    1.27 +            x >>= S[i];
    1.28 +            msbIndex |= S[i];
    1.29 +        }
    1.30 +    }
    1.31  
    1.32 -    register unsigned int t, tt;
    1.33 -
    1.34 -    if (tt = x >> 16)
    1.35 -    {
    1.36 -      return ((t = tt >> 8) ? 24 + LogTable256[t] : 16 + LogTable256[tt]);
    1.37 -    }
    1.38 -    else
    1.39 -    {
    1.40 -      return ((t = x >> 8) ? 8 + LogTable256[t] : LogTable256[x]);
    1.41 -    }
    1.42 +    return msbIndex;
    1.43  #endif
    1.44  }
    1.45