summaryrefslogtreecommitdiff
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;
125 int32_t *win, 125 int32_t *win,
126 unsigned int nIn); 126 unsigned int nIn);
127#else 127#else
128 #define MULTIPLY_ADD_BLOCK(y1, y2, x, c, k) \
129 y1 += fixmul31(c[k], x[k]); k++; \
130 y2 += fixmul31(c[k], x[k]); k++; \
131 y1 += fixmul31(c[k], x[k]); k++; \
132 y2 += fixmul31(c[k], x[k]); k++; \
133 y1 += fixmul31(c[k], x[k]); k++; \
134 y2 += fixmul31(c[k], x[k]); k++; \
135 y1 += fixmul31(c[k], x[k]); k++; \
136 y2 += fixmul31(c[k], x[k]); k++;
137
128 static inline void 138 static inline void
129 atrac3_iqmf_dewindowing(int32_t *out, 139 atrac3_iqmf_dewindowing(int32_t *out,
130 int32_t *in, 140 int32_t *in,
@@ -133,68 +143,18 @@ static channel_unit channel_units[2] IBSS_ATTR_LARGE_IRAM;
133 { 143 {
134 int32_t i, j, s1, s2; 144 int32_t i, j, s1, s2;
135 145
136 for (j = nIn; j != 0; j--) { 146 for (j = nIn; j != 0; j--, in+=2, out+=2) {
137 i = 0; 147 s1 = s2 = i = 0;
138 /* 0.. 7 */ 148
139 s1 = fixmul31(win[i], in[i]); i++; 149 MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 0.. 7 */
140 s2 = fixmul31(win[i], in[i]); i++; 150 MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 8..15 */
141 s1 += fixmul31(win[i], in[i]); i++; 151 MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 16..23 */
142 s2 += fixmul31(win[i], in[i]); i++; 152 MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 24..31 */
143 s1 += fixmul31(win[i], in[i]); i++; 153 MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 32..39 */
144 s2 += fixmul31(win[i], in[i]); i++; 154 MULTIPLY_ADD_BLOCK(s1, s2, in, win, i); /* 40..47 */
145 s1 += fixmul31(win[i], in[i]); i++;
146 s2 += fixmul31(win[i], in[i]); i++;
147 /* 8..15 */
148 s1 += fixmul31(win[i], in[i]); i++;
149 s2 += fixmul31(win[i], in[i]); i++;
150 s1 += fixmul31(win[i], in[i]); i++;
151 s2 += fixmul31(win[i], in[i]); i++;
152 s1 += fixmul31(win[i], in[i]); i++;
153 s2 += fixmul31(win[i], in[i]); i++;
154 s1 += fixmul31(win[i], in[i]); i++;
155 s2 += fixmul31(win[i], in[i]); i++;
156 /* 16..23 */
157 s1 += fixmul31(win[i], in[i]); i++;
158 s2 += fixmul31(win[i], in[i]); i++;
159 s1 += fixmul31(win[i], in[i]); i++;
160 s2 += fixmul31(win[i], in[i]); i++;
161 s1 += fixmul31(win[i], in[i]); i++;
162 s2 += fixmul31(win[i], in[i]); i++;
163 s1 += fixmul31(win[i], in[i]); i++;
164 s2 += fixmul31(win[i], in[i]); i++;
165 /* 24..31 */
166 s1 += fixmul31(win[i], in[i]); i++;
167 s2 += fixmul31(win[i], in[i]); i++;
168 s1 += fixmul31(win[i], in[i]); i++;
169 s2 += fixmul31(win[i], in[i]); i++;
170 s1 += fixmul31(win[i], in[i]); i++;
171 s2 += fixmul31(win[i], in[i]); i++;
172 s1 += fixmul31(win[i], in[i]); i++;
173 s2 += fixmul31(win[i], in[i]); i++;
174 /* 32..39 */
175 s1 += fixmul31(win[i], in[i]); i++;
176 s2 += fixmul31(win[i], in[i]); i++;
177 s1 += fixmul31(win[i], in[i]); i++;
178 s2 += fixmul31(win[i], in[i]); i++;
179 s1 += fixmul31(win[i], in[i]); i++;
180 s2 += fixmul31(win[i], in[i]); i++;
181 s1 += fixmul31(win[i], in[i]); i++;
182 s2 += fixmul31(win[i], in[i]); i++;
183 /* 40..47 */
184 s1 += fixmul31(win[i], in[i]); i++;
185 s2 += fixmul31(win[i], in[i]); i++;
186 s1 += fixmul31(win[i], in[i]); i++;
187 s2 += fixmul31(win[i], in[i]); i++;
188 s1 += fixmul31(win[i], in[i]); i++;
189 s2 += fixmul31(win[i], in[i]); i++;
190 s1 += fixmul31(win[i], in[i]); i++;
191 s2 += fixmul31(win[i], in[i]);
192 155
193 out[0] = s2; 156 out[0] = s2;
194 out[1] = s1; 157 out[1] = s1;
195
196 in += 2;
197 out += 2;
198 } 158 }
199 } 159 }
200#endif 160#endif