Commit b94e56ea authored by Mathis Rosenhauer's avatar Mathis Rosenhauer

Increase code sharing between CLZ implementations.

parent b9f9312b
...@@ -271,10 +271,10 @@ static inline uint32_t direct_get_fs(struct aec_stream *strm) ...@@ -271,10 +271,10 @@ static inline uint32_t direct_get_fs(struct aec_stream *strm)
*/ */
uint32_t fs = 0; uint32_t fs = 0;
#if HAVE_DECL___BUILTIN_CLZLL #if HAVE_BSR64
int lz; unsigned long i;
#elif HAVE_BSR64 #else
unsigned long lz; int i;
#endif #endif
struct internal_state *state = strm->state; struct internal_state *state = strm->state;
...@@ -290,20 +290,16 @@ static inline uint32_t direct_get_fs(struct aec_stream *strm) ...@@ -290,20 +290,16 @@ static inline uint32_t direct_get_fs(struct aec_stream *strm)
} }
#if HAVE_DECL___BUILTIN_CLZLL #if HAVE_DECL___BUILTIN_CLZLL
lz = __builtin_clzll(state->acc); i = 63 - __builtin_clzll(state->acc);
fs += lz + state->bitp - 64;
state->bitp = 63 - lz;
#elif HAVE_BSR64 #elif HAVE_BSR64
_BitScanReverse64(&lz, state->acc); _BitScanReverse64(&i, state->acc);
fs += state->bitp - 1 - lz;
state->bitp = lz;
#else #else
state->bitp--; i = state->bitp - 1;
while ((state->acc & (UINT64_C(1) << state->bitp)) == 0) { while ((state->acc & (UINT64_C(1) << i)) == 0)
state->bitp--; i--;
fs++;
}
#endif #endif
fs += state->bitp - i - 1;
state->bitp = i;
return fs; return fs;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment