shithub: opus

Download patch

ref: 66d429ab5367b0111b936473e43a2bf9a3232d09
parent: b0c120b2141bd9ec6ec4bd39e8b1a2ba75ae2a9a
author: Gregory Maxwell <[email protected]>
date: Tue Jul 24 13:51:25 EDT 2012

log2_frac optimization from Simon Hosie back in Aug 2011.

--- a/celt/cwrs.c
+++ b/celt/cwrs.c
@@ -48,8 +48,9 @@
   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)<<frac;
     /*Note that we always need one iteration, since the rounding up above means