aboutsummaryrefslogtreecommitdiff
path: root/celt/vq.c
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2014-01-04 21:06:24 -0500
committerJean-Marc Valin <jmvalin@jmvalin.ca>2014-01-04 21:06:24 -0500
commited01a596dc525801ec9d601da29ded8a82a2ccd6 (patch)
treec420c23b6300f80c074f87245db2ddf74d8da14d /celt/vq.c
parentccec752a384cf6ad110ec141f8bb035d14328eee (diff)
downloadlibopus-ed01a596dc525801ec9d601da29ded8a82a2ccd6.tar.gz
Making exp_rotation1() use MAC16_16(), which saves a few cycles on ARM
Diffstat (limited to 'celt/vq.c')
-rw-r--r--celt/vq.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/celt/vq.c b/celt/vq.c
index 189bf23b..7d922467 100644
--- a/celt/vq.c
+++ b/celt/vq.c
@@ -42,15 +42,17 @@
static void exp_rotation1(celt_norm *X, int len, int stride, opus_val16 c, opus_val16 s)
{
int i;
+ opus_val16 ms;
celt_norm *Xptr;
Xptr = X;
+ ms = NEG16(s);
for (i=0;i<len-stride;i++)
{
celt_norm x1, x2;
x1 = Xptr[0];
x2 = Xptr[stride];
- Xptr[stride] = EXTRACT16(PSHR32(MULT16_16(c,x2) + MULT16_16(s,x1), 15));
- *Xptr++ = EXTRACT16(PSHR32(MULT16_16(c,x1) - MULT16_16(s,x2), 15));
+ Xptr[stride] = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x2), s, x1), 15));
+ *Xptr++ = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x1), ms, x2), 15));
}
Xptr = &X[len-2*stride-1];
for (i=len-2*stride-1;i>=0;i--)
@@ -58,8 +60,8 @@ static void exp_rotation1(celt_norm *X, int len, int stride, opus_val16 c, opus_
celt_norm x1, x2;
x1 = Xptr[0];
x2 = Xptr[stride];
- Xptr[stride] = EXTRACT16(PSHR32(MULT16_16(c,x2) + MULT16_16(s,x1), 15));
- *Xptr-- = EXTRACT16(PSHR32(MULT16_16(c,x1) - MULT16_16(s,x2), 15));
+ Xptr[stride] = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x2), s, x1), 15));
+ *Xptr-- = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x1), ms, x2), 15));
}
}