MCPcopy Create free account
hub / github.com/RavEngine/RavEngine / SDL_MostSignificantBitIndex32

Function SDL_MostSignificantBitIndex32

deps/SDL2/include/SDL_bits.h:60–102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

58#endif
59
60SDL_FORCE_INLINE int
61SDL_MostSignificantBitIndex32(Uint32 x)
62{
63#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
64 /* Count Leading Zeroes builtin in GCC.
65 * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html
66 */
67 if (x == 0) {
68 return -1;
69 }
70 return 31 - __builtin_clz(x);
71#elif defined(__WATCOMC__) && defined(__386__)
72 if (x == 0) {
73 return -1;
74 }
75 return 31 - _SDL_clz_watcom(x);
76#else
77 /* Based off of Bit Twiddling Hacks by Sean Eron Anderson
78 * <seander@cs.stanford.edu>, released in the public domain.
79 * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog
80 */
81 const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
82 const int S[] = {1, 2, 4, 8, 16};
83
84 int msbIndex = 0;
85 int i;
86
87 if (x == 0) {
88 return -1;
89 }
90
91 for (i = 4; i >= 0; i--)
92 {
93 if (x & b[i])
94 {
95 x >>= S[i];
96 msbIndex |= S[i];
97 }
98 }
99
100 return msbIndex;
101#endif
102}
103
104SDL_FORCE_INLINE SDL_bool
105SDL_HasExactlyOneBitSet32(Uint32 x)

Calls

no outgoing calls

Tested by

no test coverage detected