summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2010-07-23 22:06:45 +0000
committerAndree Buschmann <AndreeBuschmann@t-online.de>2010-07-23 22:06:45 +0000
commit7c33e1b4fecfe461c8d4c3d819517158a8e93fcc (patch)
tree6d6918172b736f913579d30fb366be46d023ac85
parent5297db990412a34dee96de5bf61258ae31f3b4f9 (diff)
downloadrockbox-7c33e1b4fecfe461c8d4c3d819517158a8e93fcc.tar.gz
rockbox-7c33e1b4fecfe461c8d4c3d819517158a8e93fcc.zip
Introduce macros for identical multiply-add blocks.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27535 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/libatrac/atrac3.c78
1 files changed, 19 insertions, 59 deletions
diff --git a/apps/codecs/libatrac/atrac3.c b/apps/codecs/libatrac/atrac3.c
index c746886199..7e05a8b0e2 100644
--- a/apps/codecs/libatrac/atrac3.c
+++ b/apps/codecs/libatrac/atrac3.c
@@ -125,6 +125,16 @@ static channel_unit channel_units[2] IBSS_ATTR_LARGE_IRAM;
int32_t *win,
unsigned int nIn);
#else
+ #define MULTIPLY_ADD_BLOCK(y1, y2, x, c, k) \
+ y1 += fixmul31(c[k], x[k]); k++; \
+ y2 += fixmul31(c[k], x[k]); k++; \
+ y1 += fixmul31(c[k], x[k]); k++; \
+ y2 += fixmul31(c[k], x[k]); k++; \
+ y1 += fixmul31(c[k], x[k]); k++; \
+ y2 += fixmul31(c[k], x[k]); k++; \
+ y1 += fixmul31(c[k], x[k]); k++; \
+ y2 += fixmul31(c[k], x[k]); k++;
+
static inline void
atrac3_iqmf_dewindowing(int32_t *out,
int32_t *in,
@@ -133,68 +143,18 @@ static channel_unit channel_units[2] IBSS_ATTR_LARGE_IRAM;
{
int32_t i, j, s1, s2;
- for (j = nIn; j != 0; j--) {
- i = 0;
- /* 0.. 7 */
- s1 = fixmul31(win[i], in[i]); i++;
- s2 = fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- /* 8..15 */
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- /* 16..23 */
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- /* 24..31 */
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- /* 32..39 */
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- /* 40..47 */
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]); i++;
- s1 += fixmul31(win[i], in[i]); i++;
- s2 += fixmul31(win[i], in[i]);
+ for (j = nIn; j != 0; j--, in+=2, out+=2) {
+ s1 = s2 = i = 0;
+
+ MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 0.. 7 */
+ MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 8..15 */
+ MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 16..23 */
+ MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 24..31 */
+ MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 32..39 */
+ MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 40..47 */
out[0] = s2;
out[1] = s1;
-
- in += 2;
- out += 2;
}
}
#endif