From 66d429ab5367b0111b936473e43a2bf9a3232d09 Mon Sep 17 00:00:00 2001 From: Gregory Maxwell Date: Tue, 24 Jul 2012 17:51:25 -0400 Subject: [PATCH] log2_frac optimization from Simon Hosie back in Aug 2011. --- celt/cwrs.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/celt/cwrs.c b/celt/cwrs.c index 2c31d6fe..ac81a7eb 100644 --- a/celt/cwrs.c +++ b/celt/cwrs.c @@ -48,8 +48,9 @@ int log2_frac(opus_uint32 val, int frac) l=EC_ILOG(val); if(val&(val-1)){ /*This is (val>>l-16), but guaranteed to round up, even if adding a bias - before the shift would cause overflow (e.g., for 0xFFFFxxxx).*/ - if(l>16)val=(val>>(l-16))+(((val&((1<<(l-16))-1))+(1<<(l-16))-1)>>(l-16)); + before the shift would cause overflow (e.g., for 0xFFFFxxxx). + Doesn't work for val=0, but that case fails the test above.*/ + if(l>16)val=((val-1)>>(l-16))+1; else val<<=16-l; l=(l-1)<