summaryrefslogtreecommitdiff
path: root/celt/vq.c
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2014-06-19 00:24:14 -0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2014-06-19 00:24:14 -0400
commit9618b5cb6308961861ffffdf3794fc0d07bea2f3 (patch)
tree5ddbb6b85af75a83f8bd8e48986484f354be9fab /celt/vq.c
parenta88d8365d42e5369777afa496b43ea88a1aa9106 (diff)
downloadopus-exp_mips_alt_jun03.tar.gz
C equivalent of the MIPS codeexp_mips_alt_jun03
Diffstat (limited to 'celt/vq.c')
-rw-r--r--celt/vq.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/celt/vq.c b/celt/vq.c
index 6bf9b2b0..3c10ec27 100644
--- a/celt/vq.c
+++ b/celt/vq.c
@@ -349,11 +349,32 @@ void renormalise_vector(celt_norm *X, int N, opus_val16 gain)
#ifdef FIXED_POINT
int k;
#endif
- opus_val32 E;
+ opus_val32 E = EPSILON;
opus_val16 g;
opus_val32 t;
- celt_norm *xptr;
- E = EPSILON + celt_inner_prod(X, X, N);
+ celt_norm *xptr = X;
+
+ int X0, X2, X3, X1;
+ {
+ long long ac1 = ((long long)E);
+ /*if(N %4)
+ printf("error");*/
+ for (i=0;i<N-2;i+=2)
+ {
+ X0 = (int)*xptr++;
+ ac1 += ( ((long long)X0) * ((long long)X0) );
+
+ X1 = (int)*xptr++;
+ ac1 += ( ((long long)X1) * ((long long)X1) );
+ }
+ for (;i<N;i++)
+ {
+ X0 = (int)*xptr++;
+ ac1 += ( ((long long)X0) * ((long long)X0) );
+ }
+ E = ac1;
+ }
+
#ifdef FIXED_POINT
k = celt_ilog2(E)>>1;
#endif