On 07/09/2011 09:45 PM, Måns Rullgård wrote: > Justin Ruggles <[email protected]> writes: > >> This is about 75% faster on Athlon64. >> --- >> libavcodec/ac3dsp.c | 8 ++++++++ >> 1 files changed, 8 insertions(+), 0 deletions(-) >> >> diff --git a/libavcodec/ac3dsp.c b/libavcodec/ac3dsp.c >> index 98c7357..883a723 100644 >> --- a/libavcodec/ac3dsp.c >> +++ b/libavcodec/ac3dsp.c >> @@ -20,6 +20,7 @@ >> */ >> >> #include "libavutil/avassert.h" >> +#include "libavutil/intreadwrite.h" >> #include "avcodec.h" >> #include "ac3.h" >> #include "ac3dsp.h" >> @@ -164,8 +165,15 @@ static void ac3_extract_exponents_c(uint8_t *exp, >> int32_t *coef, int nb_coefs) >> int i; >> >> for (i = 0; i < nb_coefs; i++) { >> +#if HAVE_FAST_CLZ >> int v = abs(coef[i]); >> exp[i] = v ? 23 - av_log2(v) : 24; >> +#else >> + /* av_log2() is slow without fast clz, so get exponent from float >> instead */ >> + av_alias32 c; >> + c.f32 = (abs(coef[i]) << 1) | 0x1; >> + exp[i] = 151 - (c.u32 >> 23); >> +#endif >> } >> } >> >> -- > > This is only good if floating-point is faster than the table-based av_log(). > In a soft-float implementation, that is almost certainly not the case.
Ah, true. And since it's not as beneficial as I first thought, patch dropped. Thanks, Justin _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
