3 * This file is part of libmpeg3
5 * libmpeg3 is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
10 * libmpeg3 is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with GNU Make; see the file COPYING. If not, write to
17 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22 * Discrete Cosine Tansform (DCT) for subband synthesis
23 * optimized for machines with no auto-increment.
24 * The performance is highly compiler dependend. Maybe
25 * the dct64.c version for 'normal' processor may be faster
26 * even for Intel processors.
29 #include "../libzmpeg3.h"
31 int zaudio_decoder_layer_t::
32 dct64_1(float *out0, float *out1, float *b1, float *b2, float *samples)
34 float *costab = pnts[0];
36 b1[0x00] = samples[0x00] + samples[0x1F];
37 b1[0x01] = samples[0x01] + samples[0x1E];
38 b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0];
39 b1[0x1E] = (samples[0x01] - samples[0x1E]) * costab[0x1];
41 b1[0x02] = samples[0x02] + samples[0x1D];
42 b1[0x03] = samples[0x03] + samples[0x1C];
43 b1[0x1D] = (samples[0x02] - samples[0x1D]) * costab[0x2];
44 b1[0x1C] = (samples[0x03] - samples[0x1C]) * costab[0x3];
46 b1[0x04] = samples[0x04] + samples[0x1B];
47 b1[0x05] = samples[0x05] + samples[0x1A];
48 b1[0x1B] = (samples[0x04] - samples[0x1B]) * costab[0x4];
49 b1[0x1A] = (samples[0x05] - samples[0x1A]) * costab[0x5];
51 b1[0x06] = samples[0x06] + samples[0x19];
52 b1[0x07] = samples[0x07] + samples[0x18];
53 b1[0x19] = (samples[0x06] - samples[0x19]) * costab[0x6];
54 b1[0x18] = (samples[0x07] - samples[0x18]) * costab[0x7];
56 b1[0x08] = samples[0x08] + samples[0x17];
57 b1[0x09] = samples[0x09] + samples[0x16];
58 b1[0x17] = (samples[0x08] - samples[0x17]) * costab[0x8];
59 b1[0x16] = (samples[0x09] - samples[0x16]) * costab[0x9];
61 b1[0x0A] = samples[0x0A] + samples[0x15];
62 b1[0x0B] = samples[0x0B] + samples[0x14];
63 b1[0x15] = (samples[0x0A] - samples[0x15]) * costab[0xA];
64 b1[0x14] = (samples[0x0B] - samples[0x14]) * costab[0xB];
66 b1[0x0C] = samples[0x0C] + samples[0x13];
67 b1[0x0D] = samples[0x0D] + samples[0x12];
68 b1[0x13] = (samples[0x0C] - samples[0x13]) * costab[0xC];
69 b1[0x12] = (samples[0x0D] - samples[0x12]) * costab[0xD];
71 b1[0x0E] = samples[0x0E] + samples[0x11];
72 b1[0x0F] = samples[0x0F] + samples[0x10];
73 b1[0x11] = (samples[0x0E] - samples[0x11]) * costab[0xE];
74 b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF];
78 b2[0x00] = b1[0x00] + b1[0x0F];
79 b2[0x01] = b1[0x01] + b1[0x0E];
80 b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0];
81 b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1];
83 b2[0x02] = b1[0x02] + b1[0x0D];
84 b2[0x03] = b1[0x03] + b1[0x0C];
85 b2[0x0D] = (b1[0x02] - b1[0x0D]) * costab[2];
86 b2[0x0C] = (b1[0x03] - b1[0x0C]) * costab[3];
88 b2[0x04] = b1[0x04] + b1[0x0B];
89 b2[0x05] = b1[0x05] + b1[0x0A];
90 b2[0x0B] = (b1[0x04] - b1[0x0B]) * costab[4];
91 b2[0x0A] = (b1[0x05] - b1[0x0A]) * costab[5];
93 b2[0x06] = b1[0x06] + b1[0x09];
94 b2[0x07] = b1[0x07] + b1[0x08];
95 b2[0x09] = (b1[0x06] - b1[0x09]) * costab[6];
96 b2[0x08] = (b1[0x07] - b1[0x08]) * costab[7];
100 b2[0x10] = b1[0x10] + b1[0x1F];
101 b2[0x11] = b1[0x11] + b1[0x1E];
102 b2[0x1F] = (b1[0x1F] - b1[0x10]) * costab[0];
103 b2[0x1E] = (b1[0x1E] - b1[0x11]) * costab[1];
105 b2[0x12] = b1[0x12] + b1[0x1D];
106 b2[0x13] = b1[0x13] + b1[0x1C];
107 b2[0x1D] = (b1[0x1D] - b1[0x12]) * costab[2];
108 b2[0x1C] = (b1[0x1C] - b1[0x13]) * costab[3];
110 b2[0x14] = b1[0x14] + b1[0x1B];
111 b2[0x15] = b1[0x15] + b1[0x1A];
112 b2[0x1B] = (b1[0x1B] - b1[0x14]) * costab[4];
113 b2[0x1A] = (b1[0x1A] - b1[0x15]) * costab[5];
115 b2[0x16] = b1[0x16] + b1[0x19];
116 b2[0x17] = b1[0x17] + b1[0x18];
117 b2[0x19] = (b1[0x19] - b1[0x16]) * costab[6];
118 b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7];
122 b1[0x00] = b2[0x00] + b2[0x07];
123 b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0];
124 b1[0x01] = b2[0x01] + b2[0x06];
125 b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1];
126 b1[0x02] = b2[0x02] + b2[0x05];
127 b1[0x05] = (b2[0x02] - b2[0x05]) * costab[2];
128 b1[0x03] = b2[0x03] + b2[0x04];
129 b1[0x04] = (b2[0x03] - b2[0x04]) * costab[3];
131 b1[0x08] = b2[0x08] + b2[0x0F];
132 b1[0x0F] = (b2[0x0F] - b2[0x08]) * costab[0];
133 b1[0x09] = b2[0x09] + b2[0x0E];
134 b1[0x0E] = (b2[0x0E] - b2[0x09]) * costab[1];
135 b1[0x0A] = b2[0x0A] + b2[0x0D];
136 b1[0x0D] = (b2[0x0D] - b2[0x0A]) * costab[2];
137 b1[0x0B] = b2[0x0B] + b2[0x0C];
138 b1[0x0C] = (b2[0x0C] - b2[0x0B]) * costab[3];
140 b1[0x10] = b2[0x10] + b2[0x17];
141 b1[0x17] = (b2[0x10] - b2[0x17]) * costab[0];
142 b1[0x11] = b2[0x11] + b2[0x16];
143 b1[0x16] = (b2[0x11] - b2[0x16]) * costab[1];
144 b1[0x12] = b2[0x12] + b2[0x15];
145 b1[0x15] = (b2[0x12] - b2[0x15]) * costab[2];
146 b1[0x13] = b2[0x13] + b2[0x14];
147 b1[0x14] = (b2[0x13] - b2[0x14]) * costab[3];
149 b1[0x18] = b2[0x18] + b2[0x1F];
150 b1[0x1F] = (b2[0x1F] - b2[0x18]) * costab[0];
151 b1[0x19] = b2[0x19] + b2[0x1E];
152 b1[0x1E] = (b2[0x1E] - b2[0x19]) * costab[1];
153 b1[0x1A] = b2[0x1A] + b2[0x1D];
154 b1[0x1D] = (b2[0x1D] - b2[0x1A]) * costab[2];
155 b1[0x1B] = b2[0x1B] + b2[0x1C];
156 b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3];
159 float const cos0 = pnts[3][0];
160 float const cos1 = pnts[3][1];
162 b2[0x00] = b1[0x00] + b1[0x03];
163 b2[0x03] = (b1[0x00] - b1[0x03]) * cos0;
164 b2[0x01] = b1[0x01] + b1[0x02];
165 b2[0x02] = (b1[0x01] - b1[0x02]) * cos1;
167 b2[0x04] = b1[0x04] + b1[0x07];
168 b2[0x07] = (b1[0x07] - b1[0x04]) * cos0;
169 b2[0x05] = b1[0x05] + b1[0x06];
170 b2[0x06] = (b1[0x06] - b1[0x05]) * cos1;
172 b2[0x08] = b1[0x08] + b1[0x0B];
173 b2[0x0B] = (b1[0x08] - b1[0x0B]) * cos0;
174 b2[0x09] = b1[0x09] + b1[0x0A];
175 b2[0x0A] = (b1[0x09] - b1[0x0A]) * cos1;
177 b2[0x0C] = b1[0x0C] + b1[0x0F];
178 b2[0x0F] = (b1[0x0F] - b1[0x0C]) * cos0;
179 b2[0x0D] = b1[0x0D] + b1[0x0E];
180 b2[0x0E] = (b1[0x0E] - b1[0x0D]) * cos1;
182 b2[0x10] = b1[0x10] + b1[0x13];
183 b2[0x13] = (b1[0x10] - b1[0x13]) * cos0;
184 b2[0x11] = b1[0x11] + b1[0x12];
185 b2[0x12] = (b1[0x11] - b1[0x12]) * cos1;
187 b2[0x14] = b1[0x14] + b1[0x17];
188 b2[0x17] = (b1[0x17] - b1[0x14]) * cos0;
189 b2[0x15] = b1[0x15] + b1[0x16];
190 b2[0x16] = (b1[0x16] - b1[0x15]) * cos1;
192 b2[0x18] = b1[0x18] + b1[0x1B];
193 b2[0x1B] = (b1[0x18] - b1[0x1B]) * cos0;
194 b2[0x19] = b1[0x19] + b1[0x1A];
195 b2[0x1A] = (b1[0x19] - b1[0x1A]) * cos1;
197 b2[0x1C] = b1[0x1C] + b1[0x1F];
198 b2[0x1F] = (b1[0x1F] - b1[0x1C]) * cos0;
199 b2[0x1D] = b1[0x1D] + b1[0x1E];
200 b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1;
204 float const cos0 = pnts[4][0];
206 b1[0x00] = b2[0x00] + b2[0x01];
207 b1[0x01] = (b2[0x00] - b2[0x01]) * cos0;
208 b1[0x02] = b2[0x02] + b2[0x03];
209 b1[0x03] = (b2[0x03] - b2[0x02]) * cos0;
210 b1[0x02] += b1[0x03];
212 b1[0x04] = b2[0x04] + b2[0x05];
213 b1[0x05] = (b2[0x04] - b2[0x05]) * cos0;
214 b1[0x06] = b2[0x06] + b2[0x07];
215 b1[0x07] = (b2[0x07] - b2[0x06]) * cos0;
216 b1[0x06] += b1[0x07];
217 b1[0x04] += b1[0x06];
218 b1[0x06] += b1[0x05];
219 b1[0x05] += b1[0x07];
221 b1[0x08] = b2[0x08] + b2[0x09];
222 b1[0x09] = (b2[0x08] - b2[0x09]) * cos0;
223 b1[0x0A] = b2[0x0A] + b2[0x0B];
224 b1[0x0B] = (b2[0x0B] - b2[0x0A]) * cos0;
225 b1[0x0A] += b1[0x0B];
227 b1[0x0C] = b2[0x0C] + b2[0x0D];
228 b1[0x0D] = (b2[0x0C] - b2[0x0D]) * cos0;
229 b1[0x0E] = b2[0x0E] + b2[0x0F];
230 b1[0x0F] = (b2[0x0F] - b2[0x0E]) * cos0;
231 b1[0x0E] += b1[0x0F];
232 b1[0x0C] += b1[0x0E];
233 b1[0x0E] += b1[0x0D];
234 b1[0x0D] += b1[0x0F];
236 b1[0x10] = b2[0x10] + b2[0x11];
237 b1[0x11] = (b2[0x10] - b2[0x11]) * cos0;
238 b1[0x12] = b2[0x12] + b2[0x13];
239 b1[0x13] = (b2[0x13] - b2[0x12]) * cos0;
240 b1[0x12] += b1[0x13];
242 b1[0x14] = b2[0x14] + b2[0x15];
243 b1[0x15] = (b2[0x14] - b2[0x15]) * cos0;
244 b1[0x16] = b2[0x16] + b2[0x17];
245 b1[0x17] = (b2[0x17] - b2[0x16]) * cos0;
246 b1[0x16] += b1[0x17];
247 b1[0x14] += b1[0x16];
248 b1[0x16] += b1[0x15];
249 b1[0x15] += b1[0x17];
251 b1[0x18] = b2[0x18] + b2[0x19];
252 b1[0x19] = (b2[0x18] - b2[0x19]) * cos0;
253 b1[0x1A] = b2[0x1A] + b2[0x1B];
254 b1[0x1B] = (b2[0x1B] - b2[0x1A]) * cos0;
255 b1[0x1A] += b1[0x1B];
257 b1[0x1C] = b2[0x1C] + b2[0x1D];
258 b1[0x1D] = (b2[0x1C] - b2[0x1D]) * cos0;
259 b1[0x1E] = b2[0x1E] + b2[0x1F];
260 b1[0x1F] = (b2[0x1F] - b2[0x1E]) * cos0;
261 b1[0x1E] += b1[0x1F];
262 b1[0x1C] += b1[0x1E];
263 b1[0x1E] += b1[0x1D];
264 b1[0x1D] += b1[0x1F];
267 out0[0x10*16] = b1[0x00];
268 out0[0x10*12] = b1[0x04];
269 out0[0x10* 8] = b1[0x02];
270 out0[0x10* 4] = b1[0x06];
271 out0[0x10* 0] = b1[0x01];
272 out1[0x10* 0] = b1[0x01];
273 out1[0x10* 4] = b1[0x05];
274 out1[0x10* 8] = b1[0x03];
275 out1[0x10*12] = b1[0x07];
277 out0[0x10*14] = b1[0x08] + b1[0x0C];
278 out0[0x10*10] = b1[0x0C] + b1[0x0a];
279 out0[0x10* 6] = b1[0x0A] + b1[0x0E];
280 out0[0x10* 2] = b1[0x0E] + b1[0x09];
281 out1[0x10* 2] = b1[0x09] + b1[0x0D];
282 out1[0x10* 6] = b1[0x0D] + b1[0x0B];
283 out1[0x10*10] = b1[0x0B] + b1[0x0F];
284 out1[0x10*14] = b1[0x0F];
288 tmp = b1[0x18] + b1[0x1C];
289 out0[0x10*15] = tmp + b1[0x10];
290 out0[0x10*13] = tmp + b1[0x14];
291 tmp = b1[0x1C] + b1[0x1A];
292 out0[0x10*11] = tmp + b1[0x14];
293 out0[0x10* 9] = tmp + b1[0x12];
294 tmp = b1[0x1A] + b1[0x1E];
295 out0[0x10* 7] = tmp + b1[0x12];
296 out0[0x10* 5] = tmp + b1[0x16];
297 tmp = b1[0x1E] + b1[0x19];
298 out0[0x10* 3] = tmp + b1[0x16];
299 out0[0x10* 1] = tmp + b1[0x11];
300 tmp = b1[0x19] + b1[0x1D];
301 out1[0x10* 1] = tmp + b1[0x11];
302 out1[0x10* 3] = tmp + b1[0x15];
303 tmp = b1[0x1D] + b1[0x1B];
304 out1[0x10* 5] = tmp + b1[0x15];
305 out1[0x10* 7] = tmp + b1[0x13];
306 tmp = b1[0x1B] + b1[0x1F];
307 out1[0x10* 9] = tmp + b1[0x13];
308 out1[0x10*11] = tmp + b1[0x17];
309 out1[0x10*13] = b1[0x17] + b1[0x1F];
310 out1[0x10*15] = b1[0x1F];
316 * the call via dct64 is a trick to force GCC to use
317 * (new) registers for the b1,b2 pointer to the bufs[xx] field
319 int zaudio_decoder_layer_t::
320 dct64(float *a, float *b, float *c)
323 return dct64_1(a, b, bufs, bufs + 0x20, c);
326 /*//////////////////////////////////////////////////////////////// */
328 /* 9 Point Inverse Discrete Cosine Transform */
330 /* This piece of code is Copyright 1997 Mikko Tommila and is freely usable */
331 /* by anybody. The algorithm itself is of course in the public domain. */
333 /* Again derived heuristically from the 9-point WFTA. */
335 /* The algorithm is optimized (?) for speed, not for small rounding errors or */
336 /* good readability. */
338 /* 36 additions, 11 multiplications */
340 /* Again this is very likely sub-optimal. */
342 /* The code is optimized to use a minimum number of temporary variables, */
343 /* so it should compile quite well even on 8-register Intel x86 processors. */
344 /* This makes the code quite obfuscated and very difficult to understand. */
347 /* [1] S. Winograd: "On Computing the Discrete Fourier Transform", */
348 /* Mathematics of Computation, Volume 32, Number 141, January 1978, */
352 /*------------------------------------------------------------------*/
354 /* Function: Calculation of the inverse MDCT */
356 /*------------------------------------------------------------------*/
358 int zaudio_decoder_layer_t::
359 dct36(float *inbuf, float *o1, float *o2, float *wintab, float *tsbuf)
366 in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14];
367 in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11];
368 in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8];
369 in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5];
370 in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2];
371 in[2] +=in[1]; in[1] +=in[0];
373 in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9];
374 in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1];
380 float t0 = COS6_2 * (in[8] + in[16] - in[4]);
381 float t1 = COS6_2 * in[12];
382 float t2 = (t3 = in[0]) - t1 - t1;
383 tmp[1] = tmp[7] = t2 - t0;
384 tmp[4] = t2 + t0 + t0;
385 t2 = COS6_1 * (in[10] + in[14] - in[2]);
391 float t0 = cos9[0] * (in[4] + in[8] );
392 float t1 = cos9[1] * (in[8] - in[16]);
393 float t2 = cos9[2] * (in[4] + in[16]);
394 tmp[2] = tmp[6] = t3 - t0 - t2;
395 tmp[0] = tmp[8] = t3 + t0 + t1;
396 tmp[3] = tmp[5] = t3 - t1 + t2;
400 float t1 = cos18[0] * (in[2] + in[10]);
401 float t2 = cos18[1] * (in[10] - in[14]);
402 float t3 = COS6_1 * in[6];
404 float t0 = t1 + t2 + t3;
411 t3 = cos18[2] * (in[2] + in[14]);
423 float t1 = COS6_2 * in[13];
424 float t2 = COS6_2 * (in[9] + in[17] - in[5]);
425 float t3 = in[1] + t1;
426 float t4 = in[1] - t1 - t1;
428 float t0 = cos9[0] * (in[5] + in[9]);
429 t1 = cos9[1] * (in[9] - in[17]);
430 tmp[13] = (t4 + t2 + t2) * tfcos36[17-13];
431 t2 = cos9[2] * (in[5] + in[17]);
432 float t6 = t3 - t0 - t2;
435 t2 = cos18[0] * (in[3] + in[11]);
436 t4 = cos18[1] * (in[11] - in[15]);
437 float t7 = COS6_1 * in[7];
440 tmp[17] = (t0 + t1) * tfcos36[17-17];
441 tmp[9] = (t0 - t1) * tfcos36[17-9];
442 t1 = cos18[2] * (in[3] + in[15]);
445 tmp[14] = (t3 + t2) * tfcos36[17-14];
446 t0 = COS6_1 * (in[11] + in[15] - in[3]);
447 tmp[12] = (t3 - t2) * tfcos36[17-12];
451 tmp[16] = (t5 - t0) * tfcos36[17-16];
452 tmp[10] = (t5 + t0) * tfcos36[17-10];
453 tmp[15] = (t6 + t4) * tfcos36[17-15];
454 tmp[11] = (t6 - t4) * tfcos36[17-11];
456 #define MACRO(v) { float tmpval; \
457 tmpval = tmp[(v)] + tmp[17-(v)]; \
458 out2[9+(v)] = tmpval * w[27+(v)]; \
459 out2[8-(v)] = tmpval * w[26-(v)]; \
460 tmpval = tmp[(v)] - tmp[17-(v)]; \
461 ts[SBLIMIT*(8-(v))] = out1[8-(v)] + tmpval * w[8-(v)]; \
462 ts[SBLIMIT*(9+(v))] = out1[9+(v)] + tmpval * w[9+(v)]; \
487 int zaudio_decoder_layer_t::
488 dct12(float *in,float *rawout1,float *rawout2,float *wi,float *ts)
490 #define DCT12_PART1 \
492 in5 += (in4 = in[4*3]); \
493 in4 += (in3 = in[3*3]); \
494 in3 += (in2 = in[2*3]); \
495 in2 += (in1 = in[1*3]); \
496 in1 += (in0 = in[0*3]); \
497 in5 += in3; in3 += in1; \
501 #define DCT12_PART2 \
502 in0 += in4 * COS6_2; \
505 in1 += in5 * COS6_2; \
506 in5 = (in1 + in3) * tfcos12[0]; \
507 in1 = (in1 - in3) * tfcos12[2]; \
514 float in0,in1,in2,in3,in4,in5;
515 float *out1 = rawout1;
516 ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2];
517 ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5];
521 float tmp0,tmp1 = (in0 - in4);
523 float tmp2 = (in1 - in5) * tfcos12[1];
527 ts[(17-1)*SBLIMIT] = out1[17-1] + tmp0 * wi[11-1];
528 ts[(12+1)*SBLIMIT] = out1[12+1] + tmp0 * wi[6+1];
529 ts[(6 +1)*SBLIMIT] = out1[6 +1] + tmp1 * wi[1];
530 ts[(11-1)*SBLIMIT] = out1[11-1] + tmp1 * wi[5-1];
535 ts[(17-0)*SBLIMIT] = out1[17-0] + in2 * wi[11-0];
536 ts[(12+0)*SBLIMIT] = out1[12+0] + in2 * wi[6+0];
537 ts[(12+2)*SBLIMIT] = out1[12+2] + in3 * wi[6+2];
538 ts[(17-2)*SBLIMIT] = out1[17-2] + in3 * wi[11-2];
540 ts[(6+0)*SBLIMIT] = out1[6+0] + in0 * wi[0];
541 ts[(11-0)*SBLIMIT] = out1[11-0] + in0 * wi[5-0];
542 ts[(6+2)*SBLIMIT] = out1[6+2] + in4 * wi[2];
543 ts[(11-2)*SBLIMIT] = out1[11-2] + in4 * wi[5-2];
549 float in0,in1,in2,in3,in4,in5;
550 float *out2 = rawout2;
555 float tmp0,tmp1 = (in0 - in4);
557 float tmp2 = (in1 - in5) * tfcos12[1];
561 out2[5-1] = tmp0 * wi[11-1];
562 out2[0+1] = tmp0 * wi[6+1];
563 ts[(12+1)*SBLIMIT] += tmp1 * wi[1];
564 ts[(17-1)*SBLIMIT] += tmp1 * wi[5-1];
569 out2[5-0] = in2 * wi[11-0];
570 out2[0+0] = in2 * wi[6+0];
571 out2[0+2] = in3 * wi[6+2];
572 out2[5-2] = in3 * wi[11-2];
574 ts[(12+0)*SBLIMIT] += in0 * wi[0];
575 ts[(17-0)*SBLIMIT] += in0 * wi[5-0];
576 ts[(12+2)*SBLIMIT] += in4 * wi[2];
577 ts[(17-2)*SBLIMIT] += in4 * wi[5-2];
583 float in0,in1,in2,in3,in4,in5;
584 float *out2 = rawout2;
585 out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0;
590 float tmp0,tmp1 = (in0 - in4);
592 float tmp2 = (in1 - in5) * tfcos12[1];
596 out2[11-1] = tmp0 * wi[11-1];
597 out2[6 +1] = tmp0 * wi[6+1];
598 out2[0+1] += tmp1 * wi[1];
599 out2[5-1] += tmp1 * wi[5-1];
604 out2[11-0] = in2 * wi[11-0];
605 out2[6 +0] = in2 * wi[6+0];
606 out2[6 +2] = in3 * wi[6+2];
607 out2[11-2] = in3 * wi[11-2];
609 out2[0+0] += in0 * wi[0];
610 out2[5-0] += in0 * wi[5-0];
611 out2[0+2] += in4 * wi[2];
612 out2[5-2] += in4 * wi[5-2];