Adds many syntactically unnecessary casts to silence MSVC C4244; fix an MDCT encoder...
[opus.git] / libcelt / cwrs.c
index 055c2eb..e5cd08d 100644 (file)
@@ -32,8 +32,6 @@
 #endif
 
 #include "os_support.h"
-#include <stdlib.h>
-#include <string.h>
 #include "cwrs.h"
 #include "mathops.h"
 #include "arch.h"
@@ -120,12 +118,12 @@ static inline opus_uint32 imusdiv32even(opus_uint32 _a,opus_uint32 _b,
   celt_assert(_d>0);
   celt_assert(_d<=54);
   shift=EC_ILOG(_d^_d-1);
-  inv=INV_TABLE[_d-1>>shift];
+  inv=INV_TABLE[(_d-1)>>shift];
   shift--;
   one=1<<shift;
   mask=one-1;
   return (_a*(_b>>shift)-(_c>>shift)+
-   (_a*(_b&mask)+one-(_c&mask)>>shift)-1)*inv&MASK32;
+   ((_a*(_b&mask)+one-(_c&mask))>>shift)-1)*inv&MASK32;
 }
 
 #endif /* SMALL_FOOTPRINT */
@@ -253,33 +251,39 @@ static inline opus_uint32 imusdiv32even(opus_uint32 _a,opus_uint32 _b,
 /*Compute U(2,_k).
   Note that this may be called with _k=32768 (maxK[2]+1).*/
 static inline unsigned ucwrs2(unsigned _k){
-  return _k?_k+(_k-1):0;
+  celt_assert(_k>0);
+  return _k+(_k-1);
 }
 
 /*Compute V(2,_k).*/
 static inline opus_uint32 ncwrs2(int _k){
-  return _k?4*(opus_uint32)_k:1;
+  celt_assert(_k>0);
+  return 4*(opus_uint32)_k;
 }
 
 /*Compute U(3,_k).
   Note that this may be called with _k=32768 (maxK[3]+1).*/
 static inline opus_uint32 ucwrs3(unsigned _k){
-  return _k?(2*(opus_uint32)_k-2)*_k+1:0;
+  celt_assert(_k>0);
+  return (2*(opus_uint32)_k-2)*_k+1;
 }
 
 /*Compute V(3,_k).*/
 static inline opus_uint32 ncwrs3(int _k){
-  return _k?2*(2*(unsigned)_k*(opus_uint32)_k+1):1;
+  celt_assert(_k>0);
+  return 2*(2*(unsigned)_k*(opus_uint32)_k+1);
 }
 
 /*Compute U(4,_k).*/
 static inline opus_uint32 ucwrs4(int _k){
-  return _k?imusdiv32odd(2*_k,(2*_k-3)*(opus_uint32)_k+4,3,1):0;
+  celt_assert(_k>0);
+  return imusdiv32odd(2*_k,(2*_k-3)*(opus_uint32)_k+4,3,1);
 }
 
 /*Compute V(4,_k).*/
 static inline opus_uint32 ncwrs4(int _k){
-  return _k?((_k*(opus_uint32)_k+2)*_k)/3<<3:1;
+  celt_assert(_k>0);
+  return ((_k*(opus_uint32)_k+2)*_k)/3<<3;
 }
 
 #endif /* SMALL_FOOTPRINT */
@@ -352,7 +356,7 @@ static opus_uint32 ncwrs_urow(unsigned _n,unsigned _k,opus_uint32 *_u){
       /*U(N,K) = ((2*N-1)*U(N,K-1)-U(N,K-2))/(K-1) + U(N,K-2)*/
       _u[k]=um2=imusdiv32even(n2m1,um1,um2,k-1)+um2;
       if(++k>=len)break;
-      _u[k]=um1=imusdiv32odd(n2m1,um2,um1,k-1>>1)+um1;
+      _u[k]=um1=imusdiv32odd(n2m1,um2,um1,(k-1)>>1)+um1;
     }
   }
 #endif /* SMALL_FOOTPRINT */
@@ -381,8 +385,8 @@ static inline void cwrsi2(int _k,opus_uint32 _i,int *_y){
   s=-(_i>=p);
   _i-=p&s;
   yj=_k;
-  _k=_i+1>>1;
-  p=ucwrs2(_k);
+  _k=(_i+1)>>1;
+  p=_k?ucwrs2(_k):0;
   _i-=p;
   yj-=_k;
   _y[0]=yj+s^s;
@@ -402,8 +406,8 @@ static void cwrsi3(int _k,opus_uint32 _i,int *_y){
   yj=_k;
   /*Finds the maximum _k such that ucwrs3(_k)<=_i (tested for all
      _i<2147418113=U(3,32768)).*/
-  _k=_i>0?isqrt32(2*_i-1)+1>>1:0;
-  p=ucwrs3(_k);
+  _k=_i>0?(isqrt32(2*_i-1)+1)>>1:0;
+  p=_k?ucwrs3(_k):0;
   _i-=p;
   yj-=_k;
   _y[0]=yj+s^s;
@@ -429,8 +433,8 @@ static void cwrsi4(int _k,opus_uint32 _i,int *_y){
   kl=0;
   kr=_k;
   for(;;){
-    _k=kl+kr>>1;
-    p=ucwrs4(_k);
+    _k=(kl+kr)>>1;
+    p=_k?ucwrs4(_k):0;
     if(p<_i){
       if(_k>=kr)break;
       kl=_k+1;
@@ -492,7 +496,7 @@ static inline opus_uint32 icwrs2(const int *_y,int *_k){
   opus_uint32 i;
   int           k;
   i=icwrs1(_y+1,&k);
-  i+=ucwrs2(k);
+  i+=k?ucwrs2(k):0;
   k+=abs(_y[0]);
   if(_y[0]<0)i+=ucwrs2(k+1U);
   *_k=k;
@@ -507,7 +511,7 @@ static inline opus_uint32 icwrs3(const int *_y,int *_k){
   opus_uint32 i;
   int           k;
   i=icwrs2(_y+1,&k);
-  i+=ucwrs3(k);
+  i+=k?ucwrs3(k):0;
   k+=abs(_y[0]);
   if(_y[0]<0)i+=ucwrs3(k+1U);
   *_k=k;
@@ -522,7 +526,7 @@ static inline opus_uint32 icwrs4(const int *_y,int *_k){
   opus_uint32 i;
   int           k;
   i=icwrs3(_y+1,&k);
-  i+=ucwrs4(k);
+  i+=k?ucwrs4(k):0;
   k+=abs(_y[0]);
   if(_y[0]<0)i+=ucwrs4(k+1);
   *_k=k;
@@ -584,6 +588,7 @@ void get_required_bits(opus_int16 *_bits,int _n,int _maxk,int _frac){
 
 void encode_pulses(const int *_y,int _n,int _k,ec_enc *_enc){
   opus_uint32 i;
+  celt_assert(_k>0);
 #ifndef SMALL_FOOTPRINT
   switch(_n){
     case 2:{
@@ -609,19 +614,21 @@ void encode_pulses(const int *_y,int _n,int _k,ec_enc *_enc){
       ec_enc_uint(_enc,i,nc);
       RESTORE_STACK;
 #ifndef SMALL_FOOTPRINT
-    };
+    }
+    break;
   }
 #endif
 }
 
 void decode_pulses(int *_y,int _n,int _k,ec_dec *_dec)
 {
+  celt_assert(_k>0);
 #ifndef SMALL_FOOTPRINT
    switch(_n){
     case 2:cwrsi2(_k,ec_dec_uint(_dec,ncwrs2(_k)),_y);break;
     case 3:cwrsi3(_k,ec_dec_uint(_dec,ncwrs3(_k)),_y);break;
     case 4:cwrsi4(_k,ec_dec_uint(_dec,ncwrs4(_k)),_y);break;
-      default:
+    default:
     {
 #endif
       VARDECL(opus_uint32,u);
@@ -631,6 +638,7 @@ void decode_pulses(int *_y,int _n,int _k,ec_dec *_dec)
       RESTORE_STACK;
 #ifndef SMALL_FOOTPRINT
     }
+    break;
   }
 #endif
 }