xref: /aosp_15_r20/external/libxaac/decoder/ixheaacd_fft.c (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker  *                                                                            *
3*15dc779aSAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker  *
5*15dc779aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker  *
9*15dc779aSAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker  *
11*15dc779aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker  * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker  *
17*15dc779aSAndroid Build Coastguard Worker  *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker */
20*15dc779aSAndroid Build Coastguard Worker #include <stdlib.h>
21*15dc779aSAndroid Build Coastguard Worker #include <stdio.h>
22*15dc779aSAndroid Build Coastguard Worker 
23*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_interface.h"
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops32.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops40.h"
28*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_function_selector.h"
29*15dc779aSAndroid Build Coastguard Worker 
30*15dc779aSAndroid Build Coastguard Worker extern const WORD32 ixheaacd_twiddle_table_fft_32x32[514];
31*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaacd_twiddle_table_fft[514];
32*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaacd_twiddle_table_fft_flt[16];
33*15dc779aSAndroid Build Coastguard Worker extern const WORD32 ixheaacd_twiddle_table_3pr[1155];
34*15dc779aSAndroid Build Coastguard Worker extern const WORD32 ixheaacd_twiddle_table_3pi[1155];
35*15dc779aSAndroid Build Coastguard Worker extern const WORD8 ixheaacd_mps_dig_rev[8];
36*15dc779aSAndroid Build Coastguard Worker 
37*15dc779aSAndroid Build Coastguard Worker #define PLATFORM_INLINE __inline
38*15dc779aSAndroid Build Coastguard Worker 
39*15dc779aSAndroid Build Coastguard Worker #define DIG_REV(i, m, j)                                    \
40*15dc779aSAndroid Build Coastguard Worker   do {                                                      \
41*15dc779aSAndroid Build Coastguard Worker     unsigned _ = (i);                                       \
42*15dc779aSAndroid Build Coastguard Worker     _ = ((_ & 0x33333333) << 2) | ((_ & ~0x33333333) >> 2); \
43*15dc779aSAndroid Build Coastguard Worker     _ = ((_ & 0x0F0F0F0F) << 4) | ((_ & ~0x0F0F0F0F) >> 4); \
44*15dc779aSAndroid Build Coastguard Worker     _ = ((_ & 0x00FF00FF) << 8) | ((_ & ~0x00FF00FF) >> 8); \
45*15dc779aSAndroid Build Coastguard Worker     (j) = _ >> (m);                                         \
46*15dc779aSAndroid Build Coastguard Worker   } while (0)
47*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_mult32_sat(WORD32 a,WORD32 b)48*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD32 ixheaacd_mult32_sat(WORD32 a, WORD32 b) {
49*15dc779aSAndroid Build Coastguard Worker   WORD32 result;
50*15dc779aSAndroid Build Coastguard Worker   WORD64 temp_result;
51*15dc779aSAndroid Build Coastguard Worker 
52*15dc779aSAndroid Build Coastguard Worker   temp_result = (WORD64)a * (WORD64)b;
53*15dc779aSAndroid Build Coastguard Worker   result = ixheaac_sat64_32(temp_result >> 31);
54*15dc779aSAndroid Build Coastguard Worker 
55*15dc779aSAndroid Build Coastguard Worker   return (result);
56*15dc779aSAndroid Build Coastguard Worker }
57*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_mac32_sat(WORD32 a,WORD32 b,WORD32 c)58*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD32 ixheaacd_mac32_sat(WORD32 a, WORD32 b, WORD32 c) {
59*15dc779aSAndroid Build Coastguard Worker   WORD32 result;
60*15dc779aSAndroid Build Coastguard Worker 
61*15dc779aSAndroid Build Coastguard Worker   result = ixheaac_add32_sat(a, ixheaacd_mult32_sat(b, c));
62*15dc779aSAndroid Build Coastguard Worker 
63*15dc779aSAndroid Build Coastguard Worker   return (result);
64*15dc779aSAndroid Build Coastguard Worker }
65*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_mult32X32float(FLOAT32 a,FLOAT32 b)66*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE FLOAT32 ixheaacd_mult32X32float(FLOAT32 a, FLOAT32 b) {
67*15dc779aSAndroid Build Coastguard Worker   FLOAT32 result;
68*15dc779aSAndroid Build Coastguard Worker 
69*15dc779aSAndroid Build Coastguard Worker   result = a * b;
70*15dc779aSAndroid Build Coastguard Worker 
71*15dc779aSAndroid Build Coastguard Worker   return result;
72*15dc779aSAndroid Build Coastguard Worker }
73*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_mac32X32float(FLOAT32 a,FLOAT32 b,FLOAT32 c)74*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE FLOAT32 ixheaacd_mac32X32float(FLOAT32 a, FLOAT32 b, FLOAT32 c) {
75*15dc779aSAndroid Build Coastguard Worker   FLOAT32 result;
76*15dc779aSAndroid Build Coastguard Worker 
77*15dc779aSAndroid Build Coastguard Worker   result = a + b * c;
78*15dc779aSAndroid Build Coastguard Worker 
79*15dc779aSAndroid Build Coastguard Worker   return result;
80*15dc779aSAndroid Build Coastguard Worker }
81*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_mps_synth_calc_fft(FLOAT32 * ptr_xr,FLOAT32 * ptr_xi,WORD32 npoints)82*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_mps_synth_calc_fft(FLOAT32 *ptr_xr, FLOAT32 *ptr_xi,
83*15dc779aSAndroid Build Coastguard Worker                                  WORD32 npoints) {
84*15dc779aSAndroid Build Coastguard Worker   WORD32 i, j, k;
85*15dc779aSAndroid Build Coastguard Worker   FLOAT32 y[64], z[64];
86*15dc779aSAndroid Build Coastguard Worker   FLOAT32 *ptr_y = y, *ptr_z = z;
87*15dc779aSAndroid Build Coastguard Worker   const FLOAT32 *ptr_w = ixheaacd_twiddle_table_fft_flt;
88*15dc779aSAndroid Build Coastguard Worker 
89*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < npoints; i += 4) {
90*15dc779aSAndroid Build Coastguard Worker     FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
91*15dc779aSAndroid Build Coastguard Worker     FLOAT32 *inp = ptr_xr;
92*15dc779aSAndroid Build Coastguard Worker     FLOAT32 tmk;
93*15dc779aSAndroid Build Coastguard Worker 
94*15dc779aSAndroid Build Coastguard Worker     WORD32 h2 = ixheaacd_mps_dig_rev[i >> 2];
95*15dc779aSAndroid Build Coastguard Worker 
96*15dc779aSAndroid Build Coastguard Worker     inp += (h2);
97*15dc779aSAndroid Build Coastguard Worker 
98*15dc779aSAndroid Build Coastguard Worker     x0r = *inp;
99*15dc779aSAndroid Build Coastguard Worker     x0i = *(inp + 1);
100*15dc779aSAndroid Build Coastguard Worker     inp += 16;
101*15dc779aSAndroid Build Coastguard Worker 
102*15dc779aSAndroid Build Coastguard Worker     x1r = *inp;
103*15dc779aSAndroid Build Coastguard Worker     x1i = *(inp + 1);
104*15dc779aSAndroid Build Coastguard Worker     inp += 16;
105*15dc779aSAndroid Build Coastguard Worker 
106*15dc779aSAndroid Build Coastguard Worker     x2r = *inp;
107*15dc779aSAndroid Build Coastguard Worker     x2i = *(inp + 1);
108*15dc779aSAndroid Build Coastguard Worker     inp += 16;
109*15dc779aSAndroid Build Coastguard Worker 
110*15dc779aSAndroid Build Coastguard Worker     x3r = *inp;
111*15dc779aSAndroid Build Coastguard Worker     x3i = *(inp + 1);
112*15dc779aSAndroid Build Coastguard Worker 
113*15dc779aSAndroid Build Coastguard Worker     x0r = x0r + x2r;
114*15dc779aSAndroid Build Coastguard Worker     x0i = x0i + x2i;
115*15dc779aSAndroid Build Coastguard Worker 
116*15dc779aSAndroid Build Coastguard Worker     tmk = x0r - x2r;
117*15dc779aSAndroid Build Coastguard Worker     x2r = tmk - x2r;
118*15dc779aSAndroid Build Coastguard Worker     tmk = x0i - x2i;
119*15dc779aSAndroid Build Coastguard Worker     x2i = tmk - x2i;
120*15dc779aSAndroid Build Coastguard Worker 
121*15dc779aSAndroid Build Coastguard Worker     x1r = x1r + x3r;
122*15dc779aSAndroid Build Coastguard Worker     x1i = x1i + x3i;
123*15dc779aSAndroid Build Coastguard Worker 
124*15dc779aSAndroid Build Coastguard Worker     tmk = x1r - x3r;
125*15dc779aSAndroid Build Coastguard Worker     x3r = tmk - x3r;
126*15dc779aSAndroid Build Coastguard Worker     tmk = x1i - x3i;
127*15dc779aSAndroid Build Coastguard Worker     x3i = tmk - x3i;
128*15dc779aSAndroid Build Coastguard Worker 
129*15dc779aSAndroid Build Coastguard Worker     x0r = x0r + x1r;
130*15dc779aSAndroid Build Coastguard Worker     x0i = x0i + x1i;
131*15dc779aSAndroid Build Coastguard Worker 
132*15dc779aSAndroid Build Coastguard Worker     tmk = x0r - x1r;
133*15dc779aSAndroid Build Coastguard Worker     x1r = tmk - x1r;
134*15dc779aSAndroid Build Coastguard Worker     tmk = x0i - x1i;
135*15dc779aSAndroid Build Coastguard Worker     x1i = tmk - x1i;
136*15dc779aSAndroid Build Coastguard Worker 
137*15dc779aSAndroid Build Coastguard Worker     x2r = x2r + x3i;
138*15dc779aSAndroid Build Coastguard Worker     x2i = x2i - x3r;
139*15dc779aSAndroid Build Coastguard Worker 
140*15dc779aSAndroid Build Coastguard Worker     tmk = x2r - x3i;
141*15dc779aSAndroid Build Coastguard Worker     x3i = tmk - x3i;
142*15dc779aSAndroid Build Coastguard Worker     tmk = x2i + x3r;
143*15dc779aSAndroid Build Coastguard Worker     x3r = tmk + x3r;
144*15dc779aSAndroid Build Coastguard Worker 
145*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x0r;
146*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x0i;
147*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x2r;
148*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x2i;
149*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x1r;
150*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x1i;
151*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x3i;
152*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x3r;
153*15dc779aSAndroid Build Coastguard Worker 
154*15dc779aSAndroid Build Coastguard Worker     inp = ptr_xi;
155*15dc779aSAndroid Build Coastguard Worker 
156*15dc779aSAndroid Build Coastguard Worker     inp += (h2);
157*15dc779aSAndroid Build Coastguard Worker 
158*15dc779aSAndroid Build Coastguard Worker     x0r = *inp;
159*15dc779aSAndroid Build Coastguard Worker     x0i = *(inp + 1);
160*15dc779aSAndroid Build Coastguard Worker     inp += 16;
161*15dc779aSAndroid Build Coastguard Worker 
162*15dc779aSAndroid Build Coastguard Worker     x1r = *inp;
163*15dc779aSAndroid Build Coastguard Worker     x1i = *(inp + 1);
164*15dc779aSAndroid Build Coastguard Worker     inp += 16;
165*15dc779aSAndroid Build Coastguard Worker 
166*15dc779aSAndroid Build Coastguard Worker     x2r = *inp;
167*15dc779aSAndroid Build Coastguard Worker     x2i = *(inp + 1);
168*15dc779aSAndroid Build Coastguard Worker     inp += 16;
169*15dc779aSAndroid Build Coastguard Worker 
170*15dc779aSAndroid Build Coastguard Worker     x3r = *inp;
171*15dc779aSAndroid Build Coastguard Worker     x3i = *(inp + 1);
172*15dc779aSAndroid Build Coastguard Worker 
173*15dc779aSAndroid Build Coastguard Worker     x0r = x0r + x2r;
174*15dc779aSAndroid Build Coastguard Worker     x0i = x0i + x2i;
175*15dc779aSAndroid Build Coastguard Worker 
176*15dc779aSAndroid Build Coastguard Worker     tmk = x0r - x2r;
177*15dc779aSAndroid Build Coastguard Worker     x2r = tmk - x2r;
178*15dc779aSAndroid Build Coastguard Worker     tmk = x0i - x2i;
179*15dc779aSAndroid Build Coastguard Worker     x2i = tmk - x2i;
180*15dc779aSAndroid Build Coastguard Worker 
181*15dc779aSAndroid Build Coastguard Worker     x1r = x1r + x3r;
182*15dc779aSAndroid Build Coastguard Worker     x1i = x1i + x3i;
183*15dc779aSAndroid Build Coastguard Worker 
184*15dc779aSAndroid Build Coastguard Worker     tmk = x1r - x3r;
185*15dc779aSAndroid Build Coastguard Worker     x3r = tmk - x3r;
186*15dc779aSAndroid Build Coastguard Worker     tmk = x1i - x3i;
187*15dc779aSAndroid Build Coastguard Worker     x3i = tmk - x3i;
188*15dc779aSAndroid Build Coastguard Worker 
189*15dc779aSAndroid Build Coastguard Worker     x0r = x0r + x1r;
190*15dc779aSAndroid Build Coastguard Worker     x0i = x0i + x1i;
191*15dc779aSAndroid Build Coastguard Worker 
192*15dc779aSAndroid Build Coastguard Worker     tmk = x0r - x1r;
193*15dc779aSAndroid Build Coastguard Worker     x1r = tmk - x1r;
194*15dc779aSAndroid Build Coastguard Worker     tmk = x0i - x1i;
195*15dc779aSAndroid Build Coastguard Worker     x1i = tmk - x1i;
196*15dc779aSAndroid Build Coastguard Worker 
197*15dc779aSAndroid Build Coastguard Worker     x2r = x2r + x3i;
198*15dc779aSAndroid Build Coastguard Worker     x2i = x2i - x3r;
199*15dc779aSAndroid Build Coastguard Worker 
200*15dc779aSAndroid Build Coastguard Worker     tmk = x2r - x3i;
201*15dc779aSAndroid Build Coastguard Worker     x3i = tmk - x3i;
202*15dc779aSAndroid Build Coastguard Worker     tmk = x2i + x3r;
203*15dc779aSAndroid Build Coastguard Worker     x3r = tmk + x3r;
204*15dc779aSAndroid Build Coastguard Worker 
205*15dc779aSAndroid Build Coastguard Worker     *ptr_z++ = x0r;
206*15dc779aSAndroid Build Coastguard Worker     *ptr_z++ = x0i;
207*15dc779aSAndroid Build Coastguard Worker     *ptr_z++ = x2r;
208*15dc779aSAndroid Build Coastguard Worker     *ptr_z++ = x2i;
209*15dc779aSAndroid Build Coastguard Worker     *ptr_z++ = x1r;
210*15dc779aSAndroid Build Coastguard Worker     *ptr_z++ = x1i;
211*15dc779aSAndroid Build Coastguard Worker     *ptr_z++ = x3i;
212*15dc779aSAndroid Build Coastguard Worker     *ptr_z++ = x3r;
213*15dc779aSAndroid Build Coastguard Worker   }
214*15dc779aSAndroid Build Coastguard Worker   ptr_y -= 64;
215*15dc779aSAndroid Build Coastguard Worker   ptr_z -= 64;
216*15dc779aSAndroid Build Coastguard Worker   {
217*15dc779aSAndroid Build Coastguard Worker     FLOAT32 *data_r = ptr_y;
218*15dc779aSAndroid Build Coastguard Worker     FLOAT32 *data_i = ptr_z;
219*15dc779aSAndroid Build Coastguard Worker     for (k = 2; k != 0; k--) {
220*15dc779aSAndroid Build Coastguard Worker       FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
221*15dc779aSAndroid Build Coastguard Worker 
222*15dc779aSAndroid Build Coastguard Worker       x0r = (*data_r);
223*15dc779aSAndroid Build Coastguard Worker       x0i = (*(data_r + 1));
224*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
225*15dc779aSAndroid Build Coastguard Worker 
226*15dc779aSAndroid Build Coastguard Worker       x1r = (*data_r);
227*15dc779aSAndroid Build Coastguard Worker       x1i = (*(data_r + 1));
228*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
229*15dc779aSAndroid Build Coastguard Worker 
230*15dc779aSAndroid Build Coastguard Worker       x2r = (*data_r);
231*15dc779aSAndroid Build Coastguard Worker       x2i = (*(data_r + 1));
232*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
233*15dc779aSAndroid Build Coastguard Worker 
234*15dc779aSAndroid Build Coastguard Worker       x3r = (*data_r);
235*15dc779aSAndroid Build Coastguard Worker       x3i = (*(data_r + 1));
236*15dc779aSAndroid Build Coastguard Worker       data_r -= 24;
237*15dc779aSAndroid Build Coastguard Worker 
238*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + x2r;
239*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + x2i;
240*15dc779aSAndroid Build Coastguard Worker       x2r = x0r - (x2r * 2);
241*15dc779aSAndroid Build Coastguard Worker       x2i = x0i - (x2i * 2);
242*15dc779aSAndroid Build Coastguard Worker       x1r = x1r + x3r;
243*15dc779aSAndroid Build Coastguard Worker       x1i = x1i + x3i;
244*15dc779aSAndroid Build Coastguard Worker       x3r = x1r - (x3r * 2);
245*15dc779aSAndroid Build Coastguard Worker       x3i = x1i - (x3i * 2);
246*15dc779aSAndroid Build Coastguard Worker 
247*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + x1r;
248*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + x1i;
249*15dc779aSAndroid Build Coastguard Worker       x1r = x0r - (x1r * 2);
250*15dc779aSAndroid Build Coastguard Worker       x1i = x0i - (x1i * 2);
251*15dc779aSAndroid Build Coastguard Worker       x2r = x2r + x3i;
252*15dc779aSAndroid Build Coastguard Worker       x2i = x2i - x3r;
253*15dc779aSAndroid Build Coastguard Worker       x3i = x2r - (x3i * 2);
254*15dc779aSAndroid Build Coastguard Worker       x3r = x2i + (x3r * 2);
255*15dc779aSAndroid Build Coastguard Worker 
256*15dc779aSAndroid Build Coastguard Worker       *data_r = x0r;
257*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x0i;
258*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
259*15dc779aSAndroid Build Coastguard Worker 
260*15dc779aSAndroid Build Coastguard Worker       *data_r = x2r;
261*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x2i;
262*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
263*15dc779aSAndroid Build Coastguard Worker 
264*15dc779aSAndroid Build Coastguard Worker       *data_r = x1r;
265*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x1i;
266*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
267*15dc779aSAndroid Build Coastguard Worker 
268*15dc779aSAndroid Build Coastguard Worker       *data_r = x3i;
269*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x3r;
270*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
271*15dc779aSAndroid Build Coastguard Worker 
272*15dc779aSAndroid Build Coastguard Worker       x0r = (*data_i);
273*15dc779aSAndroid Build Coastguard Worker       x0i = (*(data_i + 1));
274*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
275*15dc779aSAndroid Build Coastguard Worker 
276*15dc779aSAndroid Build Coastguard Worker       x1r = (*data_i);
277*15dc779aSAndroid Build Coastguard Worker       x1i = (*(data_i + 1));
278*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
279*15dc779aSAndroid Build Coastguard Worker 
280*15dc779aSAndroid Build Coastguard Worker       x2r = (*data_i);
281*15dc779aSAndroid Build Coastguard Worker       x2i = (*(data_i + 1));
282*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
283*15dc779aSAndroid Build Coastguard Worker 
284*15dc779aSAndroid Build Coastguard Worker       x3r = (*data_i);
285*15dc779aSAndroid Build Coastguard Worker       x3i = (*(data_i + 1));
286*15dc779aSAndroid Build Coastguard Worker       data_i -= 24;
287*15dc779aSAndroid Build Coastguard Worker 
288*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + x2r;
289*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + x2i;
290*15dc779aSAndroid Build Coastguard Worker       x2r = x0r - (x2r * 2);
291*15dc779aSAndroid Build Coastguard Worker       x2i = x0i - (x2i * 2);
292*15dc779aSAndroid Build Coastguard Worker       x1r = x1r + x3r;
293*15dc779aSAndroid Build Coastguard Worker       x1i = x1i + x3i;
294*15dc779aSAndroid Build Coastguard Worker       x3r = x1r - (x3r * 2);
295*15dc779aSAndroid Build Coastguard Worker       x3i = x1i - (x3i * 2);
296*15dc779aSAndroid Build Coastguard Worker 
297*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + x1r;
298*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + x1i;
299*15dc779aSAndroid Build Coastguard Worker       x1r = x0r - (x1r * 2);
300*15dc779aSAndroid Build Coastguard Worker       x1i = x0i - (x1i * 2);
301*15dc779aSAndroid Build Coastguard Worker       x2r = x2r + x3i;
302*15dc779aSAndroid Build Coastguard Worker       x2i = x2i - x3r;
303*15dc779aSAndroid Build Coastguard Worker       x3i = x2r - (x3i * 2);
304*15dc779aSAndroid Build Coastguard Worker       x3r = x2i + (x3r * 2);
305*15dc779aSAndroid Build Coastguard Worker 
306*15dc779aSAndroid Build Coastguard Worker       *data_i = x0r;
307*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x0i;
308*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
309*15dc779aSAndroid Build Coastguard Worker 
310*15dc779aSAndroid Build Coastguard Worker       *data_i = x2r;
311*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x2i;
312*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
313*15dc779aSAndroid Build Coastguard Worker 
314*15dc779aSAndroid Build Coastguard Worker       *data_i = x1r;
315*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x1i;
316*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
317*15dc779aSAndroid Build Coastguard Worker 
318*15dc779aSAndroid Build Coastguard Worker       *data_i = x3i;
319*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x3r;
320*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
321*15dc779aSAndroid Build Coastguard Worker     }
322*15dc779aSAndroid Build Coastguard Worker     data_r = ptr_y + 2;
323*15dc779aSAndroid Build Coastguard Worker     data_i = ptr_z + 2;
324*15dc779aSAndroid Build Coastguard Worker 
325*15dc779aSAndroid Build Coastguard Worker     for (k = 2; k != 0; k--) {
326*15dc779aSAndroid Build Coastguard Worker       FLOAT32 tmp;
327*15dc779aSAndroid Build Coastguard Worker       FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
328*15dc779aSAndroid Build Coastguard Worker 
329*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
330*15dc779aSAndroid Build Coastguard Worker 
331*15dc779aSAndroid Build Coastguard Worker       x1r = *data_r;
332*15dc779aSAndroid Build Coastguard Worker       x1i = *(data_r + 1);
333*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
334*15dc779aSAndroid Build Coastguard Worker 
335*15dc779aSAndroid Build Coastguard Worker       x2r = *data_r;
336*15dc779aSAndroid Build Coastguard Worker       x2i = *(data_r + 1);
337*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
338*15dc779aSAndroid Build Coastguard Worker 
339*15dc779aSAndroid Build Coastguard Worker       x3r = *data_r;
340*15dc779aSAndroid Build Coastguard Worker       x3i = *(data_r + 1);
341*15dc779aSAndroid Build Coastguard Worker       data_r -= 24;
342*15dc779aSAndroid Build Coastguard Worker 
343*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, 0.923880f) -
344*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, -0.382683f));
345*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x1r, -0.382683f),
346*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x1i, 0.923880f);
347*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
348*15dc779aSAndroid Build Coastguard Worker 
349*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x2r, 0.707107f) -
350*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x2i, -0.707107f));
351*15dc779aSAndroid Build Coastguard Worker       x2i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x2r, -0.707107f),
352*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x2i, 0.707107f);
353*15dc779aSAndroid Build Coastguard Worker       x2r = tmp;
354*15dc779aSAndroid Build Coastguard Worker 
355*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x3r, 0.382683f) -
356*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x3i, -0.923880f));
357*15dc779aSAndroid Build Coastguard Worker       x3i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x3r, -0.923880f),
358*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x3i, 0.382683f);
359*15dc779aSAndroid Build Coastguard Worker       x3r = tmp;
360*15dc779aSAndroid Build Coastguard Worker 
361*15dc779aSAndroid Build Coastguard Worker       x0r = (*data_r);
362*15dc779aSAndroid Build Coastguard Worker       x0i = (*(data_r + 1));
363*15dc779aSAndroid Build Coastguard Worker 
364*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x2r);
365*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x2i);
366*15dc779aSAndroid Build Coastguard Worker       x2r = x0r - (x2r * 2);
367*15dc779aSAndroid Build Coastguard Worker       x2i = x0i - (x2i * 2);
368*15dc779aSAndroid Build Coastguard Worker       x1r = x1r + x3r;
369*15dc779aSAndroid Build Coastguard Worker       x1i = x1i + x3i;
370*15dc779aSAndroid Build Coastguard Worker       x3r = x1r - (x3r * 2);
371*15dc779aSAndroid Build Coastguard Worker       x3i = x1i - (x3i * 2);
372*15dc779aSAndroid Build Coastguard Worker 
373*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x1r);
374*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x1i);
375*15dc779aSAndroid Build Coastguard Worker       x1r = x0r - (x1r * 2);
376*15dc779aSAndroid Build Coastguard Worker       x1i = x0i - (x1i * 2);
377*15dc779aSAndroid Build Coastguard Worker       x2r = x2r + (x3i);
378*15dc779aSAndroid Build Coastguard Worker       x2i = x2i - (x3r);
379*15dc779aSAndroid Build Coastguard Worker       x3i = x2r - (x3i * 2);
380*15dc779aSAndroid Build Coastguard Worker       x3r = x2i + (x3r * 2);
381*15dc779aSAndroid Build Coastguard Worker 
382*15dc779aSAndroid Build Coastguard Worker       *data_r = x0r;
383*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x0i;
384*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
385*15dc779aSAndroid Build Coastguard Worker 
386*15dc779aSAndroid Build Coastguard Worker       *data_r = x2r;
387*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x2i;
388*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
389*15dc779aSAndroid Build Coastguard Worker 
390*15dc779aSAndroid Build Coastguard Worker       *data_r = x1r;
391*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x1i;
392*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
393*15dc779aSAndroid Build Coastguard Worker 
394*15dc779aSAndroid Build Coastguard Worker       *data_r = x3i;
395*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x3r;
396*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
397*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
398*15dc779aSAndroid Build Coastguard Worker 
399*15dc779aSAndroid Build Coastguard Worker       x1r = *data_i;
400*15dc779aSAndroid Build Coastguard Worker       x1i = *(data_i + 1);
401*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
402*15dc779aSAndroid Build Coastguard Worker 
403*15dc779aSAndroid Build Coastguard Worker       x2r = *data_i;
404*15dc779aSAndroid Build Coastguard Worker       x2i = *(data_i + 1);
405*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
406*15dc779aSAndroid Build Coastguard Worker 
407*15dc779aSAndroid Build Coastguard Worker       x3r = *data_i;
408*15dc779aSAndroid Build Coastguard Worker       x3i = *(data_i + 1);
409*15dc779aSAndroid Build Coastguard Worker       data_i -= 24;
410*15dc779aSAndroid Build Coastguard Worker 
411*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, 0.923880f) -
412*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, -0.382683f));
413*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x1r, -0.382683f),
414*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x1i, 0.923880f);
415*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
416*15dc779aSAndroid Build Coastguard Worker 
417*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x2r, 0.707107f) -
418*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x2i, -0.707107f));
419*15dc779aSAndroid Build Coastguard Worker       x2i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x2r, -0.707107f),
420*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x2i, 0.707107f);
421*15dc779aSAndroid Build Coastguard Worker       x2r = tmp;
422*15dc779aSAndroid Build Coastguard Worker 
423*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x3r, 0.382683f) -
424*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x3i, -0.923880f));
425*15dc779aSAndroid Build Coastguard Worker       x3i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x3r, -0.923880f),
426*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x3i, 0.382683f);
427*15dc779aSAndroid Build Coastguard Worker       x3r = tmp;
428*15dc779aSAndroid Build Coastguard Worker 
429*15dc779aSAndroid Build Coastguard Worker       x0r = (*data_i);
430*15dc779aSAndroid Build Coastguard Worker       x0i = (*(data_i + 1));
431*15dc779aSAndroid Build Coastguard Worker 
432*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x2r);
433*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x2i);
434*15dc779aSAndroid Build Coastguard Worker       x2r = x0r - (x2r * 2);
435*15dc779aSAndroid Build Coastguard Worker       x2i = x0i - (x2i * 2);
436*15dc779aSAndroid Build Coastguard Worker       x1r = x1r + x3r;
437*15dc779aSAndroid Build Coastguard Worker       x1i = x1i + x3i;
438*15dc779aSAndroid Build Coastguard Worker       x3r = x1r - (x3r * 2);
439*15dc779aSAndroid Build Coastguard Worker       x3i = x1i - (x3i * 2);
440*15dc779aSAndroid Build Coastguard Worker 
441*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x1r);
442*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x1i);
443*15dc779aSAndroid Build Coastguard Worker       x1r = x0r - (x1r * 2);
444*15dc779aSAndroid Build Coastguard Worker       x1i = x0i - (x1i * 2);
445*15dc779aSAndroid Build Coastguard Worker       x2r = x2r + (x3i);
446*15dc779aSAndroid Build Coastguard Worker       x2i = x2i - (x3r);
447*15dc779aSAndroid Build Coastguard Worker       x3i = x2r - (x3i * 2);
448*15dc779aSAndroid Build Coastguard Worker       x3r = x2i + (x3r * 2);
449*15dc779aSAndroid Build Coastguard Worker 
450*15dc779aSAndroid Build Coastguard Worker       *data_i = x0r;
451*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x0i;
452*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
453*15dc779aSAndroid Build Coastguard Worker 
454*15dc779aSAndroid Build Coastguard Worker       *data_i = x2r;
455*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x2i;
456*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
457*15dc779aSAndroid Build Coastguard Worker 
458*15dc779aSAndroid Build Coastguard Worker       *data_i = x1r;
459*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x1i;
460*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
461*15dc779aSAndroid Build Coastguard Worker 
462*15dc779aSAndroid Build Coastguard Worker       *data_i = x3i;
463*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x3r;
464*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
465*15dc779aSAndroid Build Coastguard Worker     }
466*15dc779aSAndroid Build Coastguard Worker     data_r -= 62;
467*15dc779aSAndroid Build Coastguard Worker     data_i -= 62;
468*15dc779aSAndroid Build Coastguard Worker     for (k = 2; k != 0; k--) {
469*15dc779aSAndroid Build Coastguard Worker       FLOAT32 tmp;
470*15dc779aSAndroid Build Coastguard Worker       FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
471*15dc779aSAndroid Build Coastguard Worker 
472*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
473*15dc779aSAndroid Build Coastguard Worker 
474*15dc779aSAndroid Build Coastguard Worker       x1r = *data_r;
475*15dc779aSAndroid Build Coastguard Worker       x1i = *(data_r + 1);
476*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
477*15dc779aSAndroid Build Coastguard Worker 
478*15dc779aSAndroid Build Coastguard Worker       x2r = *data_r;
479*15dc779aSAndroid Build Coastguard Worker       x2i = *(data_r + 1);
480*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
481*15dc779aSAndroid Build Coastguard Worker 
482*15dc779aSAndroid Build Coastguard Worker       x3r = *data_r;
483*15dc779aSAndroid Build Coastguard Worker       x3i = *(data_r + 1);
484*15dc779aSAndroid Build Coastguard Worker       data_r -= 24;
485*15dc779aSAndroid Build Coastguard Worker 
486*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, 0.707107f) -
487*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, -0.707107f));
488*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x1r, -0.707107f),
489*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x1i, 0.707107f);
490*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
491*15dc779aSAndroid Build Coastguard Worker 
492*15dc779aSAndroid Build Coastguard Worker       tmp = x2i;
493*15dc779aSAndroid Build Coastguard Worker       x2i = -x2r;
494*15dc779aSAndroid Build Coastguard Worker       x2r = tmp;
495*15dc779aSAndroid Build Coastguard Worker 
496*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x3r, -0.707107f) +
497*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x3i, 0.707107f));
498*15dc779aSAndroid Build Coastguard Worker       x3i = (FLOAT32)(-ixheaacd_mult32X32float((FLOAT32)x3r, 0.707107f) +
499*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x3i, -0.707107f));
500*15dc779aSAndroid Build Coastguard Worker       x3r = tmp;
501*15dc779aSAndroid Build Coastguard Worker 
502*15dc779aSAndroid Build Coastguard Worker       x0r = (*data_r);
503*15dc779aSAndroid Build Coastguard Worker       x0i = (*(data_r + 1));
504*15dc779aSAndroid Build Coastguard Worker 
505*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x2r);
506*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x2i);
507*15dc779aSAndroid Build Coastguard Worker       x2r = x0r - (x2r * 2);
508*15dc779aSAndroid Build Coastguard Worker       x2i = x0i - (x2i * 2);
509*15dc779aSAndroid Build Coastguard Worker       x1r = x1r + x3r;
510*15dc779aSAndroid Build Coastguard Worker       x1i = x1i + x3i;
511*15dc779aSAndroid Build Coastguard Worker       x3r = x1r - (x3r * 2);
512*15dc779aSAndroid Build Coastguard Worker       x3i = x1i - (x3i * 2);
513*15dc779aSAndroid Build Coastguard Worker 
514*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x1r);
515*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x1i);
516*15dc779aSAndroid Build Coastguard Worker       x1r = x0r - (x1r * 2);
517*15dc779aSAndroid Build Coastguard Worker       x1i = x0i - (x1i * 2);
518*15dc779aSAndroid Build Coastguard Worker       x2r = x2r + (x3i);
519*15dc779aSAndroid Build Coastguard Worker       x2i = x2i - (x3r);
520*15dc779aSAndroid Build Coastguard Worker       x3i = x2r - (x3i * 2);
521*15dc779aSAndroid Build Coastguard Worker       x3r = x2i + (x3r * 2);
522*15dc779aSAndroid Build Coastguard Worker 
523*15dc779aSAndroid Build Coastguard Worker       *data_r = x0r;
524*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x0i;
525*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
526*15dc779aSAndroid Build Coastguard Worker 
527*15dc779aSAndroid Build Coastguard Worker       *data_r = x2r;
528*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x2i;
529*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
530*15dc779aSAndroid Build Coastguard Worker 
531*15dc779aSAndroid Build Coastguard Worker       *data_r = x1r;
532*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x1i;
533*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
534*15dc779aSAndroid Build Coastguard Worker 
535*15dc779aSAndroid Build Coastguard Worker       *data_r = x3i;
536*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x3r;
537*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
538*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
539*15dc779aSAndroid Build Coastguard Worker 
540*15dc779aSAndroid Build Coastguard Worker       x1r = *data_i;
541*15dc779aSAndroid Build Coastguard Worker       x1i = *(data_i + 1);
542*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
543*15dc779aSAndroid Build Coastguard Worker 
544*15dc779aSAndroid Build Coastguard Worker       x2r = *data_i;
545*15dc779aSAndroid Build Coastguard Worker       x2i = *(data_i + 1);
546*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
547*15dc779aSAndroid Build Coastguard Worker 
548*15dc779aSAndroid Build Coastguard Worker       x3r = *data_i;
549*15dc779aSAndroid Build Coastguard Worker       x3i = *(data_i + 1);
550*15dc779aSAndroid Build Coastguard Worker       data_i -= 24;
551*15dc779aSAndroid Build Coastguard Worker 
552*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, 0.707107f) -
553*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, -0.707107f));
554*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x1r, -0.707107f),
555*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x1i, 0.707107f);
556*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
557*15dc779aSAndroid Build Coastguard Worker 
558*15dc779aSAndroid Build Coastguard Worker       tmp = x2i;
559*15dc779aSAndroid Build Coastguard Worker       x2i = -x2r;
560*15dc779aSAndroid Build Coastguard Worker       x2r = tmp;
561*15dc779aSAndroid Build Coastguard Worker 
562*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x3r, -0.707107f) +
563*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x3i, 0.707107f));
564*15dc779aSAndroid Build Coastguard Worker       x3i = (FLOAT32)(-ixheaacd_mult32X32float((FLOAT32)x3r, 0.707107f) +
565*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x3i, -0.707107f));
566*15dc779aSAndroid Build Coastguard Worker       x3r = tmp;
567*15dc779aSAndroid Build Coastguard Worker 
568*15dc779aSAndroid Build Coastguard Worker       x0r = (*data_i);
569*15dc779aSAndroid Build Coastguard Worker       x0i = (*(data_i + 1));
570*15dc779aSAndroid Build Coastguard Worker 
571*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x2r);
572*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x2i);
573*15dc779aSAndroid Build Coastguard Worker       x2r = x0r - (x2r * 2);
574*15dc779aSAndroid Build Coastguard Worker       x2i = x0i - (x2i * 2);
575*15dc779aSAndroid Build Coastguard Worker       x1r = x1r + x3r;
576*15dc779aSAndroid Build Coastguard Worker       x1i = x1i + x3i;
577*15dc779aSAndroid Build Coastguard Worker       x3r = x1r - (x3r * 2);
578*15dc779aSAndroid Build Coastguard Worker       x3i = x1i - (x3i * 2);
579*15dc779aSAndroid Build Coastguard Worker 
580*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x1r);
581*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x1i);
582*15dc779aSAndroid Build Coastguard Worker       x1r = x0r - (x1r * 2);
583*15dc779aSAndroid Build Coastguard Worker       x1i = x0i - (x1i * 2);
584*15dc779aSAndroid Build Coastguard Worker       x2r = x2r + (x3i);
585*15dc779aSAndroid Build Coastguard Worker       x2i = x2i - (x3r);
586*15dc779aSAndroid Build Coastguard Worker       x3i = x2r - (x3i * 2);
587*15dc779aSAndroid Build Coastguard Worker       x3r = x2i + (x3r * 2);
588*15dc779aSAndroid Build Coastguard Worker 
589*15dc779aSAndroid Build Coastguard Worker       *data_i = x0r;
590*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x0i;
591*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
592*15dc779aSAndroid Build Coastguard Worker 
593*15dc779aSAndroid Build Coastguard Worker       *data_i = x2r;
594*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x2i;
595*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
596*15dc779aSAndroid Build Coastguard Worker 
597*15dc779aSAndroid Build Coastguard Worker       *data_i = x1r;
598*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x1i;
599*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
600*15dc779aSAndroid Build Coastguard Worker 
601*15dc779aSAndroid Build Coastguard Worker       *data_i = x3i;
602*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x3r;
603*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
604*15dc779aSAndroid Build Coastguard Worker     }
605*15dc779aSAndroid Build Coastguard Worker     data_r -= 62;
606*15dc779aSAndroid Build Coastguard Worker     data_i -= 62;
607*15dc779aSAndroid Build Coastguard Worker     for (k = 2; k != 0; k--) {
608*15dc779aSAndroid Build Coastguard Worker       FLOAT32 tmp;
609*15dc779aSAndroid Build Coastguard Worker       FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
610*15dc779aSAndroid Build Coastguard Worker 
611*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
612*15dc779aSAndroid Build Coastguard Worker 
613*15dc779aSAndroid Build Coastguard Worker       x1r = *data_r;
614*15dc779aSAndroid Build Coastguard Worker       x1i = *(data_r + 1);
615*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
616*15dc779aSAndroid Build Coastguard Worker 
617*15dc779aSAndroid Build Coastguard Worker       x2r = *data_r;
618*15dc779aSAndroid Build Coastguard Worker       x2i = *(data_r + 1);
619*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
620*15dc779aSAndroid Build Coastguard Worker 
621*15dc779aSAndroid Build Coastguard Worker       x3r = *data_r;
622*15dc779aSAndroid Build Coastguard Worker       x3i = *(data_r + 1);
623*15dc779aSAndroid Build Coastguard Worker       data_r -= 24;
624*15dc779aSAndroid Build Coastguard Worker 
625*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, 0.382683f) -
626*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, -0.923880f));
627*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x1r, -0.923880f),
628*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x1i, 0.382683f);
629*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
630*15dc779aSAndroid Build Coastguard Worker 
631*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x2r, -0.707107f) +
632*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x2i, 0.707107f));
633*15dc779aSAndroid Build Coastguard Worker       x2i = (FLOAT32)(-ixheaacd_mult32X32float((FLOAT32)x2r, 0.707107f) +
634*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x2i, -0.707107f));
635*15dc779aSAndroid Build Coastguard Worker       x2r = tmp;
636*15dc779aSAndroid Build Coastguard Worker 
637*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(-ixheaacd_mult32X32float((FLOAT32)x3r, 0.923880f) +
638*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x3i, -0.382683f));
639*15dc779aSAndroid Build Coastguard Worker       x3i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x3r, -0.382683f),
640*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x3i, 0.923880f);
641*15dc779aSAndroid Build Coastguard Worker       x3r = tmp;
642*15dc779aSAndroid Build Coastguard Worker 
643*15dc779aSAndroid Build Coastguard Worker       x0r = (*data_r);
644*15dc779aSAndroid Build Coastguard Worker       x0i = (*(data_r + 1));
645*15dc779aSAndroid Build Coastguard Worker 
646*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x2r);
647*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x2i);
648*15dc779aSAndroid Build Coastguard Worker       x2r = x0r - (x2r * 2);
649*15dc779aSAndroid Build Coastguard Worker       x2i = x0i - (x2i * 2);
650*15dc779aSAndroid Build Coastguard Worker       x1r = x1r + x3r;
651*15dc779aSAndroid Build Coastguard Worker       x1i = x1i - x3i;
652*15dc779aSAndroid Build Coastguard Worker       x3r = x1r - (x3r * 2);
653*15dc779aSAndroid Build Coastguard Worker       x3i = x1i + (x3i * 2);
654*15dc779aSAndroid Build Coastguard Worker 
655*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x1r);
656*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x1i);
657*15dc779aSAndroid Build Coastguard Worker       x1r = x0r - (x1r * 2);
658*15dc779aSAndroid Build Coastguard Worker       x1i = x0i - (x1i * 2);
659*15dc779aSAndroid Build Coastguard Worker       x2r = x2r + (x3i);
660*15dc779aSAndroid Build Coastguard Worker       x2i = x2i - (x3r);
661*15dc779aSAndroid Build Coastguard Worker       x3i = x2r - (x3i * 2);
662*15dc779aSAndroid Build Coastguard Worker       x3r = x2i + (x3r * 2);
663*15dc779aSAndroid Build Coastguard Worker 
664*15dc779aSAndroid Build Coastguard Worker       *data_r = x0r;
665*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x0i;
666*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
667*15dc779aSAndroid Build Coastguard Worker 
668*15dc779aSAndroid Build Coastguard Worker       *data_r = x2r;
669*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x2i;
670*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
671*15dc779aSAndroid Build Coastguard Worker 
672*15dc779aSAndroid Build Coastguard Worker       *data_r = x1r;
673*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x1i;
674*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
675*15dc779aSAndroid Build Coastguard Worker 
676*15dc779aSAndroid Build Coastguard Worker       *data_r = x3i;
677*15dc779aSAndroid Build Coastguard Worker       *(data_r + 1) = x3r;
678*15dc779aSAndroid Build Coastguard Worker       data_r += 8;
679*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
680*15dc779aSAndroid Build Coastguard Worker 
681*15dc779aSAndroid Build Coastguard Worker       x1r = *data_i;
682*15dc779aSAndroid Build Coastguard Worker       x1i = *(data_i + 1);
683*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
684*15dc779aSAndroid Build Coastguard Worker 
685*15dc779aSAndroid Build Coastguard Worker       x2r = *data_i;
686*15dc779aSAndroid Build Coastguard Worker       x2i = *(data_i + 1);
687*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
688*15dc779aSAndroid Build Coastguard Worker 
689*15dc779aSAndroid Build Coastguard Worker       x3r = *data_i;
690*15dc779aSAndroid Build Coastguard Worker       x3i = *(data_i + 1);
691*15dc779aSAndroid Build Coastguard Worker       data_i -= 24;
692*15dc779aSAndroid Build Coastguard Worker 
693*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, 0.382683f) -
694*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, -0.923880f));
695*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x1r, -0.923880f),
696*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x1i, 0.382683f);
697*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
698*15dc779aSAndroid Build Coastguard Worker 
699*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x2r, -0.707107f) +
700*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x2i, 0.707107f));
701*15dc779aSAndroid Build Coastguard Worker       x2i = (FLOAT32)(-ixheaacd_mult32X32float((FLOAT32)x2r, 0.707107f) +
702*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x2i, -0.707107f));
703*15dc779aSAndroid Build Coastguard Worker       x2r = tmp;
704*15dc779aSAndroid Build Coastguard Worker 
705*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(-ixheaacd_mult32X32float((FLOAT32)x3r, 0.923880f) +
706*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x3i, -0.382683f));
707*15dc779aSAndroid Build Coastguard Worker       x3i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x3r, -0.382683f),
708*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x3i, 0.923880f);
709*15dc779aSAndroid Build Coastguard Worker       x3r = tmp;
710*15dc779aSAndroid Build Coastguard Worker 
711*15dc779aSAndroid Build Coastguard Worker       x0r = (*data_i);
712*15dc779aSAndroid Build Coastguard Worker       x0i = (*(data_i + 1));
713*15dc779aSAndroid Build Coastguard Worker 
714*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x2r);
715*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x2i);
716*15dc779aSAndroid Build Coastguard Worker       x2r = x0r - (x2r * 2);
717*15dc779aSAndroid Build Coastguard Worker       x2i = x0i - (x2i * 2);
718*15dc779aSAndroid Build Coastguard Worker       x1r = x1r + x3r;
719*15dc779aSAndroid Build Coastguard Worker       x1i = x1i - x3i;
720*15dc779aSAndroid Build Coastguard Worker       x3r = x1r - (x3r * 2);
721*15dc779aSAndroid Build Coastguard Worker       x3i = x1i + (x3i * 2);
722*15dc779aSAndroid Build Coastguard Worker 
723*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + (x1r);
724*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + (x1i);
725*15dc779aSAndroid Build Coastguard Worker       x1r = x0r - (x1r * 2);
726*15dc779aSAndroid Build Coastguard Worker       x1i = x0i - (x1i * 2);
727*15dc779aSAndroid Build Coastguard Worker       x2r = x2r + (x3i);
728*15dc779aSAndroid Build Coastguard Worker       x2i = x2i - (x3r);
729*15dc779aSAndroid Build Coastguard Worker       x3i = x2r - (x3i * 2);
730*15dc779aSAndroid Build Coastguard Worker       x3r = x2i + (x3r * 2);
731*15dc779aSAndroid Build Coastguard Worker 
732*15dc779aSAndroid Build Coastguard Worker       *data_i = x0r;
733*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x0i;
734*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
735*15dc779aSAndroid Build Coastguard Worker 
736*15dc779aSAndroid Build Coastguard Worker       *data_i = x2r;
737*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x2i;
738*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
739*15dc779aSAndroid Build Coastguard Worker 
740*15dc779aSAndroid Build Coastguard Worker       *data_i = x1r;
741*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x1i;
742*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
743*15dc779aSAndroid Build Coastguard Worker 
744*15dc779aSAndroid Build Coastguard Worker       *data_i = x3i;
745*15dc779aSAndroid Build Coastguard Worker       *(data_i + 1) = x3r;
746*15dc779aSAndroid Build Coastguard Worker       data_i += 8;
747*15dc779aSAndroid Build Coastguard Worker     }
748*15dc779aSAndroid Build Coastguard Worker     data_r -= 62;
749*15dc779aSAndroid Build Coastguard Worker     data_i -= 62;
750*15dc779aSAndroid Build Coastguard Worker   }
751*15dc779aSAndroid Build Coastguard Worker   {
752*15dc779aSAndroid Build Coastguard Worker     const FLOAT32 *twiddles = ptr_w;
753*15dc779aSAndroid Build Coastguard Worker     FLOAT32 x0r, x0i, x1r, x1i;
754*15dc779aSAndroid Build Coastguard Worker     for (j = 8; j != 0; j--) {
755*15dc779aSAndroid Build Coastguard Worker       FLOAT32 W1 = *twiddles;
756*15dc779aSAndroid Build Coastguard Worker       twiddles++;
757*15dc779aSAndroid Build Coastguard Worker       FLOAT32 W4 = *twiddles;
758*15dc779aSAndroid Build Coastguard Worker       twiddles++;
759*15dc779aSAndroid Build Coastguard Worker       FLOAT32 tmp;
760*15dc779aSAndroid Build Coastguard Worker 
761*15dc779aSAndroid Build Coastguard Worker       x0r = *ptr_y;
762*15dc779aSAndroid Build Coastguard Worker       x0i = *(ptr_y + 1);
763*15dc779aSAndroid Build Coastguard Worker       ptr_y += 32;
764*15dc779aSAndroid Build Coastguard Worker       ptr_xr += 32;
765*15dc779aSAndroid Build Coastguard Worker 
766*15dc779aSAndroid Build Coastguard Worker       x1r = *ptr_y;
767*15dc779aSAndroid Build Coastguard Worker       x1i = *(ptr_y + 1);
768*15dc779aSAndroid Build Coastguard Worker 
769*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, W1) -
770*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, W4));
771*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x1r, W4),
772*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x1i, W1);
773*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
774*15dc779aSAndroid Build Coastguard Worker 
775*15dc779aSAndroid Build Coastguard Worker       *ptr_xr = (x0r) - (x1r);
776*15dc779aSAndroid Build Coastguard Worker       *(ptr_xr + 1) = (x0i) - (x1i);
777*15dc779aSAndroid Build Coastguard Worker       ptr_y -= 32;
778*15dc779aSAndroid Build Coastguard Worker       ptr_xr -= 32;
779*15dc779aSAndroid Build Coastguard Worker 
780*15dc779aSAndroid Build Coastguard Worker       *ptr_xr = (x0r) + (x1r);
781*15dc779aSAndroid Build Coastguard Worker       *(ptr_xr + 1) = (x0i) + (x1i);
782*15dc779aSAndroid Build Coastguard Worker       ptr_y += 2;
783*15dc779aSAndroid Build Coastguard Worker       ptr_xr += 2;
784*15dc779aSAndroid Build Coastguard Worker 
785*15dc779aSAndroid Build Coastguard Worker       x0r = *ptr_z;
786*15dc779aSAndroid Build Coastguard Worker       x0i = *(ptr_z + 1);
787*15dc779aSAndroid Build Coastguard Worker       ptr_z += 32;
788*15dc779aSAndroid Build Coastguard Worker       ptr_xi += 32;
789*15dc779aSAndroid Build Coastguard Worker 
790*15dc779aSAndroid Build Coastguard Worker       x1r = *ptr_z;
791*15dc779aSAndroid Build Coastguard Worker       x1i = *(ptr_z + 1);
792*15dc779aSAndroid Build Coastguard Worker 
793*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, W1) -
794*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, W4));
795*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)ixheaacd_mac32X32float(ixheaacd_mult32X32float((FLOAT32)x1r, W4),
796*15dc779aSAndroid Build Coastguard Worker                                    (FLOAT32)x1i, W1);
797*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
798*15dc779aSAndroid Build Coastguard Worker 
799*15dc779aSAndroid Build Coastguard Worker       *ptr_xi = (x0r) - (x1r);
800*15dc779aSAndroid Build Coastguard Worker       *(ptr_xi + 1) = (x0i) - (x1i);
801*15dc779aSAndroid Build Coastguard Worker       ptr_z -= 32;
802*15dc779aSAndroid Build Coastguard Worker       ptr_xi -= 32;
803*15dc779aSAndroid Build Coastguard Worker 
804*15dc779aSAndroid Build Coastguard Worker       *ptr_xi = (x0r) + (x1r);
805*15dc779aSAndroid Build Coastguard Worker       *(ptr_xi + 1) = (x0i) + (x1i);
806*15dc779aSAndroid Build Coastguard Worker       ptr_z += 2;
807*15dc779aSAndroid Build Coastguard Worker       ptr_xi += 2;
808*15dc779aSAndroid Build Coastguard Worker     }
809*15dc779aSAndroid Build Coastguard Worker     twiddles = ptr_w;
810*15dc779aSAndroid Build Coastguard Worker     for (j = 8; j != 0; j--) {
811*15dc779aSAndroid Build Coastguard Worker       FLOAT32 W1 = *twiddles;
812*15dc779aSAndroid Build Coastguard Worker       twiddles++;
813*15dc779aSAndroid Build Coastguard Worker       FLOAT32 W4 = *twiddles;
814*15dc779aSAndroid Build Coastguard Worker       twiddles++;
815*15dc779aSAndroid Build Coastguard Worker       FLOAT32 tmp;
816*15dc779aSAndroid Build Coastguard Worker 
817*15dc779aSAndroid Build Coastguard Worker       x0r = *ptr_y;
818*15dc779aSAndroid Build Coastguard Worker       x0i = *(ptr_y + 1);
819*15dc779aSAndroid Build Coastguard Worker       ptr_y += 32;
820*15dc779aSAndroid Build Coastguard Worker       ptr_xr += 32;
821*15dc779aSAndroid Build Coastguard Worker 
822*15dc779aSAndroid Build Coastguard Worker       x1r = *ptr_y;
823*15dc779aSAndroid Build Coastguard Worker       x1i = *(ptr_y + 1);
824*15dc779aSAndroid Build Coastguard Worker 
825*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, W4) +
826*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, W1));
827*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)(-ixheaacd_mult32X32float((FLOAT32)x1r, W1) +
828*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, W4));
829*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
830*15dc779aSAndroid Build Coastguard Worker 
831*15dc779aSAndroid Build Coastguard Worker       *ptr_xr = (x0r) - (x1r);
832*15dc779aSAndroid Build Coastguard Worker       *(ptr_xr + 1) = (x0i) - (x1i);
833*15dc779aSAndroid Build Coastguard Worker       ptr_y -= 32;
834*15dc779aSAndroid Build Coastguard Worker       ptr_xr -= 32;
835*15dc779aSAndroid Build Coastguard Worker 
836*15dc779aSAndroid Build Coastguard Worker       *ptr_xr = (x0r) + (x1r);
837*15dc779aSAndroid Build Coastguard Worker       *(ptr_xr + 1) = (x0i) + (x1i);
838*15dc779aSAndroid Build Coastguard Worker       ptr_y += 2;
839*15dc779aSAndroid Build Coastguard Worker       ptr_xr += 2;
840*15dc779aSAndroid Build Coastguard Worker 
841*15dc779aSAndroid Build Coastguard Worker       x0r = *ptr_z;
842*15dc779aSAndroid Build Coastguard Worker       x0i = *(ptr_z + 1);
843*15dc779aSAndroid Build Coastguard Worker       ptr_z += 32;
844*15dc779aSAndroid Build Coastguard Worker       ptr_xi += 32;
845*15dc779aSAndroid Build Coastguard Worker 
846*15dc779aSAndroid Build Coastguard Worker       x1r = *ptr_z;
847*15dc779aSAndroid Build Coastguard Worker       x1i = *(ptr_z + 1);
848*15dc779aSAndroid Build Coastguard Worker 
849*15dc779aSAndroid Build Coastguard Worker       tmp = (FLOAT32)(ixheaacd_mult32X32float((FLOAT32)x1r, W4) +
850*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, W1));
851*15dc779aSAndroid Build Coastguard Worker       x1i = (FLOAT32)(-ixheaacd_mult32X32float((FLOAT32)x1r, W1) +
852*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_mult32X32float((FLOAT32)x1i, W4));
853*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
854*15dc779aSAndroid Build Coastguard Worker 
855*15dc779aSAndroid Build Coastguard Worker       *ptr_xi = (x0r) - (x1r);
856*15dc779aSAndroid Build Coastguard Worker       *(ptr_xi + 1) = (x0i) - (x1i);
857*15dc779aSAndroid Build Coastguard Worker       ptr_z -= 32;
858*15dc779aSAndroid Build Coastguard Worker       ptr_xi -= 32;
859*15dc779aSAndroid Build Coastguard Worker 
860*15dc779aSAndroid Build Coastguard Worker       *ptr_xi = (x0r) + (x1r);
861*15dc779aSAndroid Build Coastguard Worker       *(ptr_xi + 1) = (x0i) + (x1i);
862*15dc779aSAndroid Build Coastguard Worker       ptr_z += 2;
863*15dc779aSAndroid Build Coastguard Worker       ptr_xi += 2;
864*15dc779aSAndroid Build Coastguard Worker     }
865*15dc779aSAndroid Build Coastguard Worker   }
866*15dc779aSAndroid Build Coastguard Worker }
867*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_mps_complex_fft(FLOAT32 * xr,FLOAT32 * xi,WORD32 nlength)868*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_mps_complex_fft(FLOAT32 *xr, FLOAT32 *xi, WORD32 nlength) {
869*15dc779aSAndroid Build Coastguard Worker   WORD32 i, j, k, n_stages, h2;
870*15dc779aSAndroid Build Coastguard Worker   FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
871*15dc779aSAndroid Build Coastguard Worker   WORD32 del, nodespacing, in_loop_cnt;
872*15dc779aSAndroid Build Coastguard Worker   WORD32 dig_rev_shift;
873*15dc779aSAndroid Build Coastguard Worker   WORD32 not_power_4;
874*15dc779aSAndroid Build Coastguard Worker   FLOAT32 ptr_x[256];
875*15dc779aSAndroid Build Coastguard Worker   FLOAT32 y[256];
876*15dc779aSAndroid Build Coastguard Worker   WORD32 npoints = nlength;
877*15dc779aSAndroid Build Coastguard Worker   FLOAT32 *ptr_y = y;
878*15dc779aSAndroid Build Coastguard Worker   const FLOAT32 *ptr_w;
879*15dc779aSAndroid Build Coastguard Worker   dig_rev_shift = ixheaac_norm32(npoints) + 1 - 16;
880*15dc779aSAndroid Build Coastguard Worker   n_stages = 30 - ixheaac_norm32(npoints);
881*15dc779aSAndroid Build Coastguard Worker   not_power_4 = n_stages & 1;
882*15dc779aSAndroid Build Coastguard Worker 
883*15dc779aSAndroid Build Coastguard Worker   n_stages = n_stages >> 1;
884*15dc779aSAndroid Build Coastguard Worker 
885*15dc779aSAndroid Build Coastguard Worker 
886*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i<nlength; i++)
887*15dc779aSAndroid Build Coastguard Worker   {
888*15dc779aSAndroid Build Coastguard Worker     ptr_x[2 * i] = xr[i];
889*15dc779aSAndroid Build Coastguard Worker     ptr_x[2 * i + 1] = xi[i];
890*15dc779aSAndroid Build Coastguard Worker   }
891*15dc779aSAndroid Build Coastguard Worker 
892*15dc779aSAndroid Build Coastguard Worker   ptr_w = ixheaacd_twiddle_table_fft;
893*15dc779aSAndroid Build Coastguard Worker 
894*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i<npoints; i += 4)
895*15dc779aSAndroid Build Coastguard Worker   {
896*15dc779aSAndroid Build Coastguard Worker     FLOAT32 *inp = ptr_x;
897*15dc779aSAndroid Build Coastguard Worker 
898*15dc779aSAndroid Build Coastguard Worker     DIG_REV(i, dig_rev_shift, h2);
899*15dc779aSAndroid Build Coastguard Worker     if (not_power_4)
900*15dc779aSAndroid Build Coastguard Worker     {
901*15dc779aSAndroid Build Coastguard Worker       h2 += 1;
902*15dc779aSAndroid Build Coastguard Worker       h2 &= ~1;
903*15dc779aSAndroid Build Coastguard Worker     }
904*15dc779aSAndroid Build Coastguard Worker     inp += (h2);
905*15dc779aSAndroid Build Coastguard Worker 
906*15dc779aSAndroid Build Coastguard Worker     x0r = *inp;
907*15dc779aSAndroid Build Coastguard Worker     x0i = *(inp + 1);
908*15dc779aSAndroid Build Coastguard Worker     inp += (npoints >> 1);
909*15dc779aSAndroid Build Coastguard Worker 
910*15dc779aSAndroid Build Coastguard Worker     x1r = *inp;
911*15dc779aSAndroid Build Coastguard Worker     x1i = *(inp + 1);
912*15dc779aSAndroid Build Coastguard Worker     inp += (npoints >> 1);
913*15dc779aSAndroid Build Coastguard Worker 
914*15dc779aSAndroid Build Coastguard Worker     x2r = *inp;
915*15dc779aSAndroid Build Coastguard Worker     x2i = *(inp + 1);
916*15dc779aSAndroid Build Coastguard Worker     inp += (npoints >> 1);
917*15dc779aSAndroid Build Coastguard Worker 
918*15dc779aSAndroid Build Coastguard Worker     x3r = *inp;
919*15dc779aSAndroid Build Coastguard Worker     x3i = *(inp + 1);
920*15dc779aSAndroid Build Coastguard Worker 
921*15dc779aSAndroid Build Coastguard Worker     x0r = x0r + x2r;
922*15dc779aSAndroid Build Coastguard Worker     x0i = x0i + x2i;
923*15dc779aSAndroid Build Coastguard Worker     x2r = x0r - (x2r * 2);
924*15dc779aSAndroid Build Coastguard Worker     x2i = x0i - (x2i * 2);
925*15dc779aSAndroid Build Coastguard Worker     x1r = x1r + x3r;
926*15dc779aSAndroid Build Coastguard Worker     x1i = x1i + x3i;
927*15dc779aSAndroid Build Coastguard Worker     x3r = x1r - (x3r * 2);
928*15dc779aSAndroid Build Coastguard Worker     x3i = x1i - (x3i * 2);
929*15dc779aSAndroid Build Coastguard Worker 
930*15dc779aSAndroid Build Coastguard Worker     x0r = x0r + x1r;
931*15dc779aSAndroid Build Coastguard Worker     x0i = x0i + x1i;
932*15dc779aSAndroid Build Coastguard Worker     x1r = x0r - (x1r * 2);
933*15dc779aSAndroid Build Coastguard Worker     x1i = x0i - (x1i * 2);
934*15dc779aSAndroid Build Coastguard Worker     x2r = x2r + x3i;
935*15dc779aSAndroid Build Coastguard Worker     x2i = x2i - x3r;
936*15dc779aSAndroid Build Coastguard Worker     x3i = x2r - (x3i * 2);
937*15dc779aSAndroid Build Coastguard Worker     x3r = x2i + (x3r * 2);
938*15dc779aSAndroid Build Coastguard Worker 
939*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x0r;
940*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x0i;
941*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x2r;
942*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x2i;
943*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x1r;
944*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x1i;
945*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x3i;
946*15dc779aSAndroid Build Coastguard Worker     *ptr_y++ = x3r;
947*15dc779aSAndroid Build Coastguard Worker   }
948*15dc779aSAndroid Build Coastguard Worker   ptr_y -= 2 * npoints;
949*15dc779aSAndroid Build Coastguard Worker   del = 4;
950*15dc779aSAndroid Build Coastguard Worker   nodespacing = 64;
951*15dc779aSAndroid Build Coastguard Worker   in_loop_cnt = npoints >> 4;
952*15dc779aSAndroid Build Coastguard Worker   for (i = n_stages - 1; i>0; i--)
953*15dc779aSAndroid Build Coastguard Worker   {
954*15dc779aSAndroid Build Coastguard Worker     const FLOAT32 *twiddles = ptr_w;
955*15dc779aSAndroid Build Coastguard Worker     FLOAT32 *data = ptr_y;
956*15dc779aSAndroid Build Coastguard Worker     FLOAT32 w1h, w2h, w3h, w1l, w2l, w3l;
957*15dc779aSAndroid Build Coastguard Worker     WORD32 sec_loop_cnt;
958*15dc779aSAndroid Build Coastguard Worker 
959*15dc779aSAndroid Build Coastguard Worker     for (k = in_loop_cnt; k != 0; k--)
960*15dc779aSAndroid Build Coastguard Worker     {
961*15dc779aSAndroid Build Coastguard Worker       x0r = (*data);
962*15dc779aSAndroid Build Coastguard Worker       x0i = (*(data + 1));
963*15dc779aSAndroid Build Coastguard Worker       data += (del << 1);
964*15dc779aSAndroid Build Coastguard Worker 
965*15dc779aSAndroid Build Coastguard Worker       x1r = (*data);
966*15dc779aSAndroid Build Coastguard Worker       x1i = (*(data + 1));
967*15dc779aSAndroid Build Coastguard Worker       data += (del << 1);
968*15dc779aSAndroid Build Coastguard Worker 
969*15dc779aSAndroid Build Coastguard Worker       x2r = (*data);
970*15dc779aSAndroid Build Coastguard Worker       x2i = (*(data + 1));
971*15dc779aSAndroid Build Coastguard Worker       data += (del << 1);
972*15dc779aSAndroid Build Coastguard Worker 
973*15dc779aSAndroid Build Coastguard Worker       x3r = (*data);
974*15dc779aSAndroid Build Coastguard Worker       x3i = (*(data + 1));
975*15dc779aSAndroid Build Coastguard Worker       data -= 3 * (del << 1);
976*15dc779aSAndroid Build Coastguard Worker 
977*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + x2r;
978*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + x2i;
979*15dc779aSAndroid Build Coastguard Worker       x2r = x0r - (x2r * 2);
980*15dc779aSAndroid Build Coastguard Worker       x2i = x0i - (x2i * 2);
981*15dc779aSAndroid Build Coastguard Worker       x1r = x1r + x3r;
982*15dc779aSAndroid Build Coastguard Worker       x1i = x1i + x3i;
983*15dc779aSAndroid Build Coastguard Worker       x3r = x1r - (x3r * 2);
984*15dc779aSAndroid Build Coastguard Worker       x3i = x1i - (x3i * 2);
985*15dc779aSAndroid Build Coastguard Worker 
986*15dc779aSAndroid Build Coastguard Worker       x0r = x0r + x1r;
987*15dc779aSAndroid Build Coastguard Worker       x0i = x0i + x1i;
988*15dc779aSAndroid Build Coastguard Worker       x1r = x0r - (x1r * 2);
989*15dc779aSAndroid Build Coastguard Worker       x1i = x0i - (x1i * 2);
990*15dc779aSAndroid Build Coastguard Worker       x2r = x2r + x3i;
991*15dc779aSAndroid Build Coastguard Worker       x2i = x2i - x3r;
992*15dc779aSAndroid Build Coastguard Worker       x3i = x2r - (x3i * 2);
993*15dc779aSAndroid Build Coastguard Worker       x3r = x2i + (x3r * 2);
994*15dc779aSAndroid Build Coastguard Worker 
995*15dc779aSAndroid Build Coastguard Worker       *data = x0r;
996*15dc779aSAndroid Build Coastguard Worker       *(data + 1) = x0i;
997*15dc779aSAndroid Build Coastguard Worker       data += (del << 1);
998*15dc779aSAndroid Build Coastguard Worker 
999*15dc779aSAndroid Build Coastguard Worker       *data = x2r;
1000*15dc779aSAndroid Build Coastguard Worker       *(data + 1) = x2i;
1001*15dc779aSAndroid Build Coastguard Worker       data += (del << 1);
1002*15dc779aSAndroid Build Coastguard Worker 
1003*15dc779aSAndroid Build Coastguard Worker       *data = x1r;
1004*15dc779aSAndroid Build Coastguard Worker       *(data + 1) = x1i;
1005*15dc779aSAndroid Build Coastguard Worker       data += (del << 1);
1006*15dc779aSAndroid Build Coastguard Worker 
1007*15dc779aSAndroid Build Coastguard Worker       *data = x3i;
1008*15dc779aSAndroid Build Coastguard Worker       *(data + 1) = x3r;
1009*15dc779aSAndroid Build Coastguard Worker       data += (del << 1);
1010*15dc779aSAndroid Build Coastguard Worker     }
1011*15dc779aSAndroid Build Coastguard Worker     data = ptr_y + 2;
1012*15dc779aSAndroid Build Coastguard Worker 
1013*15dc779aSAndroid Build Coastguard Worker     sec_loop_cnt = (nodespacing * del);
1014*15dc779aSAndroid Build Coastguard Worker     sec_loop_cnt = (sec_loop_cnt / 4) + (sec_loop_cnt / 8) - (sec_loop_cnt / 16) \
1015*15dc779aSAndroid Build Coastguard Worker             + (sec_loop_cnt / 32) - (sec_loop_cnt / 64) + (sec_loop_cnt / 128) \
1016*15dc779aSAndroid Build Coastguard Worker             - (sec_loop_cnt / 256);
1017*15dc779aSAndroid Build Coastguard Worker     j = nodespacing;
1018*15dc779aSAndroid Build Coastguard Worker 
1019*15dc779aSAndroid Build Coastguard Worker     for (j = nodespacing; j <= sec_loop_cnt; j += nodespacing)
1020*15dc779aSAndroid Build Coastguard Worker     {
1021*15dc779aSAndroid Build Coastguard Worker       w1h = *(twiddles + 2 * j);
1022*15dc779aSAndroid Build Coastguard Worker       w1l = *(twiddles + 2 * j + 1);
1023*15dc779aSAndroid Build Coastguard Worker       w2h = *(twiddles + 2 * (j << 1));
1024*15dc779aSAndroid Build Coastguard Worker       w2l = *(twiddles + 2 * (j << 1) + 1);
1025*15dc779aSAndroid Build Coastguard Worker       w3h = *(twiddles + 2 * j + 2 * (j << 1));
1026*15dc779aSAndroid Build Coastguard Worker       w3l = *(twiddles + 2 * j + 2 * (j << 1) + 1);
1027*15dc779aSAndroid Build Coastguard Worker 
1028*15dc779aSAndroid Build Coastguard Worker       for (k = in_loop_cnt; k != 0; k--)
1029*15dc779aSAndroid Build Coastguard Worker       {
1030*15dc779aSAndroid Build Coastguard Worker         FLOAT32 tmp;
1031*15dc779aSAndroid Build Coastguard Worker         FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
1032*15dc779aSAndroid Build Coastguard Worker 
1033*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1034*15dc779aSAndroid Build Coastguard Worker 
1035*15dc779aSAndroid Build Coastguard Worker         x1r = *data;
1036*15dc779aSAndroid Build Coastguard Worker         x1i = *(data + 1);
1037*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1038*15dc779aSAndroid Build Coastguard Worker 
1039*15dc779aSAndroid Build Coastguard Worker         x2r = *data;
1040*15dc779aSAndroid Build Coastguard Worker         x2i = *(data + 1);
1041*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1042*15dc779aSAndroid Build Coastguard Worker 
1043*15dc779aSAndroid Build Coastguard Worker         x3r = *data;
1044*15dc779aSAndroid Build Coastguard Worker         x3i = *(data + 1);
1045*15dc779aSAndroid Build Coastguard Worker         data -= 3 * (del << 1);
1046*15dc779aSAndroid Build Coastguard Worker 
1047*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x1r, w1l) - ixheaacd_mult32X32float(x1i, w1h));
1048*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaacd_mac32X32float(ixheaacd_mult32X32float(x1r, w1h), x1i, w1l);
1049*15dc779aSAndroid Build Coastguard Worker         x1r = tmp;
1050*15dc779aSAndroid Build Coastguard Worker 
1051*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x2r, w2l) - ixheaacd_mult32X32float(x2i, w2h));
1052*15dc779aSAndroid Build Coastguard Worker         x2i = ixheaacd_mac32X32float(ixheaacd_mult32X32float(x2r, w2h), x2i, w2l);
1053*15dc779aSAndroid Build Coastguard Worker         x2r = tmp;
1054*15dc779aSAndroid Build Coastguard Worker 
1055*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x3r, w3l) - ixheaacd_mult32X32float(x3i, w3h));
1056*15dc779aSAndroid Build Coastguard Worker         x3i = ixheaacd_mac32X32float(ixheaacd_mult32X32float(x3r, w3h), x3i, w3l);
1057*15dc779aSAndroid Build Coastguard Worker         x3r = tmp;
1058*15dc779aSAndroid Build Coastguard Worker 
1059*15dc779aSAndroid Build Coastguard Worker         x0r = (*data);
1060*15dc779aSAndroid Build Coastguard Worker         x0i = (*(data + 1));
1061*15dc779aSAndroid Build Coastguard Worker 
1062*15dc779aSAndroid Build Coastguard Worker         x0r = x0r + (x2r);
1063*15dc779aSAndroid Build Coastguard Worker         x0i = x0i + (x2i);
1064*15dc779aSAndroid Build Coastguard Worker         x2r = x0r - (x2r * 2);
1065*15dc779aSAndroid Build Coastguard Worker         x2i = x0i - (x2i * 2);
1066*15dc779aSAndroid Build Coastguard Worker         x1r = x1r + x3r;
1067*15dc779aSAndroid Build Coastguard Worker         x1i = x1i + x3i;
1068*15dc779aSAndroid Build Coastguard Worker         x3r = x1r - (x3r * 2);
1069*15dc779aSAndroid Build Coastguard Worker         x3i = x1i - (x3i * 2);
1070*15dc779aSAndroid Build Coastguard Worker 
1071*15dc779aSAndroid Build Coastguard Worker         x0r = x0r + (x1r);
1072*15dc779aSAndroid Build Coastguard Worker         x0i = x0i + (x1i);
1073*15dc779aSAndroid Build Coastguard Worker         x1r = x0r - (x1r * 2);
1074*15dc779aSAndroid Build Coastguard Worker         x1i = x0i - (x1i * 2);
1075*15dc779aSAndroid Build Coastguard Worker         x2r = x2r + (x3i);
1076*15dc779aSAndroid Build Coastguard Worker         x2i = x2i - (x3r);
1077*15dc779aSAndroid Build Coastguard Worker         x3i = x2r - (x3i * 2);
1078*15dc779aSAndroid Build Coastguard Worker         x3r = x2i + (x3r * 2);
1079*15dc779aSAndroid Build Coastguard Worker 
1080*15dc779aSAndroid Build Coastguard Worker         *data = x0r;
1081*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x0i;
1082*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1083*15dc779aSAndroid Build Coastguard Worker 
1084*15dc779aSAndroid Build Coastguard Worker         *data = x2r;
1085*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x2i;
1086*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1087*15dc779aSAndroid Build Coastguard Worker 
1088*15dc779aSAndroid Build Coastguard Worker         *data = x1r;
1089*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x1i;
1090*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1091*15dc779aSAndroid Build Coastguard Worker 
1092*15dc779aSAndroid Build Coastguard Worker         *data = x3i;
1093*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x3r;
1094*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1095*15dc779aSAndroid Build Coastguard Worker       }
1096*15dc779aSAndroid Build Coastguard Worker       data -= 2 * npoints;
1097*15dc779aSAndroid Build Coastguard Worker       data += 2;
1098*15dc779aSAndroid Build Coastguard Worker     }
1099*15dc779aSAndroid Build Coastguard Worker     for (; j <= (nodespacing * del) >> 1; j += nodespacing)
1100*15dc779aSAndroid Build Coastguard Worker     {
1101*15dc779aSAndroid Build Coastguard Worker       w1h = *(twiddles + 2 * j);
1102*15dc779aSAndroid Build Coastguard Worker       w2h = *(twiddles + 2 * (j << 1));
1103*15dc779aSAndroid Build Coastguard Worker       w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512);
1104*15dc779aSAndroid Build Coastguard Worker       w1l = *(twiddles + 2 * j + 1);
1105*15dc779aSAndroid Build Coastguard Worker       w2l = *(twiddles + 2 * (j << 1) + 1);
1106*15dc779aSAndroid Build Coastguard Worker       w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511);
1107*15dc779aSAndroid Build Coastguard Worker 
1108*15dc779aSAndroid Build Coastguard Worker       for (k = in_loop_cnt; k != 0; k--)
1109*15dc779aSAndroid Build Coastguard Worker       {
1110*15dc779aSAndroid Build Coastguard Worker         FLOAT32 tmp;
1111*15dc779aSAndroid Build Coastguard Worker         FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
1112*15dc779aSAndroid Build Coastguard Worker 
1113*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1114*15dc779aSAndroid Build Coastguard Worker 
1115*15dc779aSAndroid Build Coastguard Worker         x1r = *data;
1116*15dc779aSAndroid Build Coastguard Worker         x1i = *(data + 1);
1117*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1118*15dc779aSAndroid Build Coastguard Worker 
1119*15dc779aSAndroid Build Coastguard Worker         x2r = *data;
1120*15dc779aSAndroid Build Coastguard Worker         x2i = *(data + 1);
1121*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1122*15dc779aSAndroid Build Coastguard Worker 
1123*15dc779aSAndroid Build Coastguard Worker         x3r = *data;
1124*15dc779aSAndroid Build Coastguard Worker         x3i = *(data + 1);
1125*15dc779aSAndroid Build Coastguard Worker         data -= 3 * (del << 1);
1126*15dc779aSAndroid Build Coastguard Worker 
1127*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x1r, w1l) - ixheaacd_mult32X32float(x1i, w1h));
1128*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaacd_mac32X32float(ixheaacd_mult32X32float(x1r, w1h), x1i, w1l);
1129*15dc779aSAndroid Build Coastguard Worker         x1r = tmp;
1130*15dc779aSAndroid Build Coastguard Worker 
1131*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x2r, w2l) - ixheaacd_mult32X32float(x2i, w2h));
1132*15dc779aSAndroid Build Coastguard Worker         x2i = ixheaacd_mac32X32float(ixheaacd_mult32X32float(x2r, w2h), x2i, w2l);
1133*15dc779aSAndroid Build Coastguard Worker         x2r = tmp;
1134*15dc779aSAndroid Build Coastguard Worker 
1135*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x3r, w3h) + ixheaacd_mult32X32float(x3i, w3l));
1136*15dc779aSAndroid Build Coastguard Worker         x3i = -ixheaacd_mult32X32float(x3r, w3l) + ixheaacd_mult32X32float(x3i, w3h);
1137*15dc779aSAndroid Build Coastguard Worker         x3r = tmp;
1138*15dc779aSAndroid Build Coastguard Worker 
1139*15dc779aSAndroid Build Coastguard Worker         x0r = (*data);
1140*15dc779aSAndroid Build Coastguard Worker         x0i = (*(data + 1));
1141*15dc779aSAndroid Build Coastguard Worker 
1142*15dc779aSAndroid Build Coastguard Worker         x0r = x0r + (x2r);
1143*15dc779aSAndroid Build Coastguard Worker         x0i = x0i + (x2i);
1144*15dc779aSAndroid Build Coastguard Worker         x2r = x0r - (x2r * 2);
1145*15dc779aSAndroid Build Coastguard Worker         x2i = x0i - (x2i * 2);
1146*15dc779aSAndroid Build Coastguard Worker         x1r = x1r + x3r;
1147*15dc779aSAndroid Build Coastguard Worker         x1i = x1i + x3i;
1148*15dc779aSAndroid Build Coastguard Worker         x3r = x1r - (x3r * 2);
1149*15dc779aSAndroid Build Coastguard Worker         x3i = x1i - (x3i * 2);
1150*15dc779aSAndroid Build Coastguard Worker 
1151*15dc779aSAndroid Build Coastguard Worker         x0r = x0r + (x1r);
1152*15dc779aSAndroid Build Coastguard Worker         x0i = x0i + (x1i);
1153*15dc779aSAndroid Build Coastguard Worker         x1r = x0r - (x1r * 2);
1154*15dc779aSAndroid Build Coastguard Worker         x1i = x0i - (x1i * 2);
1155*15dc779aSAndroid Build Coastguard Worker         x2r = x2r + (x3i);
1156*15dc779aSAndroid Build Coastguard Worker         x2i = x2i - (x3r);
1157*15dc779aSAndroid Build Coastguard Worker         x3i = x2r - (x3i * 2);
1158*15dc779aSAndroid Build Coastguard Worker         x3r = x2i + (x3r * 2);
1159*15dc779aSAndroid Build Coastguard Worker 
1160*15dc779aSAndroid Build Coastguard Worker         *data = x0r;
1161*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x0i;
1162*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1163*15dc779aSAndroid Build Coastguard Worker 
1164*15dc779aSAndroid Build Coastguard Worker         *data = x2r;
1165*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x2i;
1166*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1167*15dc779aSAndroid Build Coastguard Worker 
1168*15dc779aSAndroid Build Coastguard Worker         *data = x1r;
1169*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x1i;
1170*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1171*15dc779aSAndroid Build Coastguard Worker 
1172*15dc779aSAndroid Build Coastguard Worker         *data = x3i;
1173*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x3r;
1174*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1175*15dc779aSAndroid Build Coastguard Worker       }
1176*15dc779aSAndroid Build Coastguard Worker       data -= 2 * npoints;
1177*15dc779aSAndroid Build Coastguard Worker       data += 2;
1178*15dc779aSAndroid Build Coastguard Worker     }
1179*15dc779aSAndroid Build Coastguard Worker     for (; j <= sec_loop_cnt * 2; j += nodespacing)
1180*15dc779aSAndroid Build Coastguard Worker     {
1181*15dc779aSAndroid Build Coastguard Worker       w1h = *(twiddles + 2 * j);
1182*15dc779aSAndroid Build Coastguard Worker       w2h = *(twiddles + 2 * (j << 1) - 512);
1183*15dc779aSAndroid Build Coastguard Worker       w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512);
1184*15dc779aSAndroid Build Coastguard Worker       w1l = *(twiddles + 2 * j + 1);
1185*15dc779aSAndroid Build Coastguard Worker       w2l = *(twiddles + 2 * (j << 1) - 511);
1186*15dc779aSAndroid Build Coastguard Worker       w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511);
1187*15dc779aSAndroid Build Coastguard Worker 
1188*15dc779aSAndroid Build Coastguard Worker       for (k = in_loop_cnt; k != 0; k--)
1189*15dc779aSAndroid Build Coastguard Worker       {
1190*15dc779aSAndroid Build Coastguard Worker         FLOAT32 tmp;
1191*15dc779aSAndroid Build Coastguard Worker         FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
1192*15dc779aSAndroid Build Coastguard Worker 
1193*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1194*15dc779aSAndroid Build Coastguard Worker 
1195*15dc779aSAndroid Build Coastguard Worker         x1r = *data;
1196*15dc779aSAndroid Build Coastguard Worker         x1i = *(data + 1);
1197*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1198*15dc779aSAndroid Build Coastguard Worker 
1199*15dc779aSAndroid Build Coastguard Worker         x2r = *data;
1200*15dc779aSAndroid Build Coastguard Worker         x2i = *(data + 1);
1201*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1202*15dc779aSAndroid Build Coastguard Worker 
1203*15dc779aSAndroid Build Coastguard Worker         x3r = *data;
1204*15dc779aSAndroid Build Coastguard Worker         x3i = *(data + 1);
1205*15dc779aSAndroid Build Coastguard Worker         data -= 3 * (del << 1);
1206*15dc779aSAndroid Build Coastguard Worker 
1207*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x1r, w1l) - ixheaacd_mult32X32float(x1i, w1h));
1208*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaacd_mac32X32float(ixheaacd_mult32X32float(x1r, w1h), x1i, w1l);
1209*15dc779aSAndroid Build Coastguard Worker         x1r = tmp;
1210*15dc779aSAndroid Build Coastguard Worker 
1211*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x2r, w2h) + ixheaacd_mult32X32float(x2i, w2l));
1212*15dc779aSAndroid Build Coastguard Worker         x2i = -ixheaacd_mult32X32float(x2r, w2l) + ixheaacd_mult32X32float(x2i, w2h);
1213*15dc779aSAndroid Build Coastguard Worker         x2r = tmp;
1214*15dc779aSAndroid Build Coastguard Worker 
1215*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x3r, w3h) + ixheaacd_mult32X32float(x3i, w3l));
1216*15dc779aSAndroid Build Coastguard Worker         x3i = -ixheaacd_mult32X32float(x3r, w3l) + ixheaacd_mult32X32float(x3i, w3h);
1217*15dc779aSAndroid Build Coastguard Worker         x3r = tmp;
1218*15dc779aSAndroid Build Coastguard Worker 
1219*15dc779aSAndroid Build Coastguard Worker         x0r = (*data);
1220*15dc779aSAndroid Build Coastguard Worker         x0i = (*(data + 1));
1221*15dc779aSAndroid Build Coastguard Worker 
1222*15dc779aSAndroid Build Coastguard Worker         x0r = x0r + (x2r);
1223*15dc779aSAndroid Build Coastguard Worker         x0i = x0i + (x2i);
1224*15dc779aSAndroid Build Coastguard Worker         x2r = x0r - (x2r * 2);
1225*15dc779aSAndroid Build Coastguard Worker         x2i = x0i - (x2i * 2);
1226*15dc779aSAndroid Build Coastguard Worker         x1r = x1r + x3r;
1227*15dc779aSAndroid Build Coastguard Worker         x1i = x1i + x3i;
1228*15dc779aSAndroid Build Coastguard Worker         x3r = x1r - (x3r * 2);
1229*15dc779aSAndroid Build Coastguard Worker         x3i = x1i - (x3i * 2);
1230*15dc779aSAndroid Build Coastguard Worker 
1231*15dc779aSAndroid Build Coastguard Worker         x0r = x0r + (x1r);
1232*15dc779aSAndroid Build Coastguard Worker         x0i = x0i + (x1i);
1233*15dc779aSAndroid Build Coastguard Worker         x1r = x0r - (x1r * 2);
1234*15dc779aSAndroid Build Coastguard Worker         x1i = x0i - (x1i * 2);
1235*15dc779aSAndroid Build Coastguard Worker         x2r = x2r + (x3i);
1236*15dc779aSAndroid Build Coastguard Worker         x2i = x2i - (x3r);
1237*15dc779aSAndroid Build Coastguard Worker         x3i = x2r - (x3i * 2);
1238*15dc779aSAndroid Build Coastguard Worker         x3r = x2i + (x3r * 2);
1239*15dc779aSAndroid Build Coastguard Worker 
1240*15dc779aSAndroid Build Coastguard Worker         *data = x0r;
1241*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x0i;
1242*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1243*15dc779aSAndroid Build Coastguard Worker 
1244*15dc779aSAndroid Build Coastguard Worker         *data = x2r;
1245*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x2i;
1246*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1247*15dc779aSAndroid Build Coastguard Worker 
1248*15dc779aSAndroid Build Coastguard Worker         *data = x1r;
1249*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x1i;
1250*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1251*15dc779aSAndroid Build Coastguard Worker 
1252*15dc779aSAndroid Build Coastguard Worker         *data = x3i;
1253*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x3r;
1254*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1255*15dc779aSAndroid Build Coastguard Worker       }
1256*15dc779aSAndroid Build Coastguard Worker       data -= 2 * npoints;
1257*15dc779aSAndroid Build Coastguard Worker       data += 2;
1258*15dc779aSAndroid Build Coastguard Worker     }
1259*15dc779aSAndroid Build Coastguard Worker     for (; j<nodespacing * del; j += nodespacing)
1260*15dc779aSAndroid Build Coastguard Worker     {
1261*15dc779aSAndroid Build Coastguard Worker       w1h = *(twiddles + 2 * j);
1262*15dc779aSAndroid Build Coastguard Worker       w2h = *(twiddles + 2 * (j << 1) - 512);
1263*15dc779aSAndroid Build Coastguard Worker       w3h = *(twiddles + 2 * j + 2 * (j << 1) - 1024);
1264*15dc779aSAndroid Build Coastguard Worker       w1l = *(twiddles + 2 * j + 1);
1265*15dc779aSAndroid Build Coastguard Worker       w2l = *(twiddles + 2 * (j << 1) - 511);
1266*15dc779aSAndroid Build Coastguard Worker       w3l = *(twiddles + 2 * j + 2 * (j << 1) - 1023);
1267*15dc779aSAndroid Build Coastguard Worker 
1268*15dc779aSAndroid Build Coastguard Worker       for (k = in_loop_cnt; k != 0; k--)
1269*15dc779aSAndroid Build Coastguard Worker       {
1270*15dc779aSAndroid Build Coastguard Worker         FLOAT32 tmp;
1271*15dc779aSAndroid Build Coastguard Worker         FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
1272*15dc779aSAndroid Build Coastguard Worker 
1273*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1274*15dc779aSAndroid Build Coastguard Worker 
1275*15dc779aSAndroid Build Coastguard Worker         x1r = *data;
1276*15dc779aSAndroid Build Coastguard Worker         x1i = *(data + 1);
1277*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1278*15dc779aSAndroid Build Coastguard Worker 
1279*15dc779aSAndroid Build Coastguard Worker         x2r = *data;
1280*15dc779aSAndroid Build Coastguard Worker         x2i = *(data + 1);
1281*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1282*15dc779aSAndroid Build Coastguard Worker 
1283*15dc779aSAndroid Build Coastguard Worker         x3r = *data;
1284*15dc779aSAndroid Build Coastguard Worker         x3i = *(data + 1);
1285*15dc779aSAndroid Build Coastguard Worker         data -= 3 * (del << 1);
1286*15dc779aSAndroid Build Coastguard Worker 
1287*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x1r, w1l) - ixheaacd_mult32X32float(x1i, w1h));
1288*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaacd_mac32X32float(ixheaacd_mult32X32float(x1r, w1h), x1i, w1l);
1289*15dc779aSAndroid Build Coastguard Worker         x1r = tmp;
1290*15dc779aSAndroid Build Coastguard Worker 
1291*15dc779aSAndroid Build Coastguard Worker         tmp = (ixheaacd_mult32X32float(x2r, w2h) + ixheaacd_mult32X32float(x2i, w2l));
1292*15dc779aSAndroid Build Coastguard Worker         x2i = -ixheaacd_mult32X32float(x2r, w2l) + ixheaacd_mult32X32float(x2i, w2h);
1293*15dc779aSAndroid Build Coastguard Worker         x2r = tmp;
1294*15dc779aSAndroid Build Coastguard Worker 
1295*15dc779aSAndroid Build Coastguard Worker         tmp = (-ixheaacd_mult32X32float(x3r, w3l) + ixheaacd_mult32X32float(x3i, w3h));
1296*15dc779aSAndroid Build Coastguard Worker         x3i = ixheaacd_mac32X32float(ixheaacd_mult32X32float(x3r, w3h), x3i, w3l);
1297*15dc779aSAndroid Build Coastguard Worker         x3r = tmp;
1298*15dc779aSAndroid Build Coastguard Worker 
1299*15dc779aSAndroid Build Coastguard Worker         x0r = (*data);
1300*15dc779aSAndroid Build Coastguard Worker         x0i = (*(data + 1));
1301*15dc779aSAndroid Build Coastguard Worker 
1302*15dc779aSAndroid Build Coastguard Worker         x0r = x0r + (x2r);
1303*15dc779aSAndroid Build Coastguard Worker         x0i = x0i + (x2i);
1304*15dc779aSAndroid Build Coastguard Worker         x2r = x0r - (x2r * 2);
1305*15dc779aSAndroid Build Coastguard Worker         x2i = x0i - (x2i * 2);
1306*15dc779aSAndroid Build Coastguard Worker         x1r = x1r + x3r;
1307*15dc779aSAndroid Build Coastguard Worker         x1i = x1i - x3i;
1308*15dc779aSAndroid Build Coastguard Worker         x3r = x1r - (x3r * 2);
1309*15dc779aSAndroid Build Coastguard Worker         x3i = x1i + (x3i * 2);
1310*15dc779aSAndroid Build Coastguard Worker 
1311*15dc779aSAndroid Build Coastguard Worker         x0r = x0r + (x1r);
1312*15dc779aSAndroid Build Coastguard Worker         x0i = x0i + (x1i);
1313*15dc779aSAndroid Build Coastguard Worker         x1r = x0r - (x1r * 2);
1314*15dc779aSAndroid Build Coastguard Worker         x1i = x0i - (x1i * 2);
1315*15dc779aSAndroid Build Coastguard Worker         x2r = x2r + (x3i);
1316*15dc779aSAndroid Build Coastguard Worker         x2i = x2i - (x3r);
1317*15dc779aSAndroid Build Coastguard Worker         x3i = x2r - (x3i * 2);
1318*15dc779aSAndroid Build Coastguard Worker         x3r = x2i + (x3r * 2);
1319*15dc779aSAndroid Build Coastguard Worker 
1320*15dc779aSAndroid Build Coastguard Worker         *data = x0r;
1321*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x0i;
1322*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1323*15dc779aSAndroid Build Coastguard Worker 
1324*15dc779aSAndroid Build Coastguard Worker         *data = x2r;
1325*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x2i;
1326*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1327*15dc779aSAndroid Build Coastguard Worker 
1328*15dc779aSAndroid Build Coastguard Worker         *data = x1r;
1329*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x1i;
1330*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1331*15dc779aSAndroid Build Coastguard Worker 
1332*15dc779aSAndroid Build Coastguard Worker         *data = x3i;
1333*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x3r;
1334*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1335*15dc779aSAndroid Build Coastguard Worker       }
1336*15dc779aSAndroid Build Coastguard Worker       data -= 2 * npoints;
1337*15dc779aSAndroid Build Coastguard Worker       data += 2;
1338*15dc779aSAndroid Build Coastguard Worker     }
1339*15dc779aSAndroid Build Coastguard Worker     nodespacing >>= 2;
1340*15dc779aSAndroid Build Coastguard Worker     del <<= 2;
1341*15dc779aSAndroid Build Coastguard Worker     in_loop_cnt >>= 2;
1342*15dc779aSAndroid Build Coastguard Worker   }
1343*15dc779aSAndroid Build Coastguard Worker   if (not_power_4)
1344*15dc779aSAndroid Build Coastguard Worker   {
1345*15dc779aSAndroid Build Coastguard Worker     const FLOAT32 *twiddles = ptr_w;
1346*15dc779aSAndroid Build Coastguard Worker     nodespacing <<= 1;
1347*15dc779aSAndroid Build Coastguard Worker 
1348*15dc779aSAndroid Build Coastguard Worker     for (j = del / 2; j != 0; j--)
1349*15dc779aSAndroid Build Coastguard Worker     {
1350*15dc779aSAndroid Build Coastguard Worker       FLOAT32 w1h = *twiddles;
1351*15dc779aSAndroid Build Coastguard Worker       FLOAT32 w1l = *(twiddles + 1);
1352*15dc779aSAndroid Build Coastguard Worker       FLOAT32 tmp;
1353*15dc779aSAndroid Build Coastguard Worker       twiddles += nodespacing * 2;
1354*15dc779aSAndroid Build Coastguard Worker 
1355*15dc779aSAndroid Build Coastguard Worker       x0r = *ptr_y;
1356*15dc779aSAndroid Build Coastguard Worker       x0i = *(ptr_y + 1);
1357*15dc779aSAndroid Build Coastguard Worker       ptr_y += (del << 1);
1358*15dc779aSAndroid Build Coastguard Worker 
1359*15dc779aSAndroid Build Coastguard Worker       x1r = *ptr_y;
1360*15dc779aSAndroid Build Coastguard Worker       x1i = *(ptr_y + 1);
1361*15dc779aSAndroid Build Coastguard Worker 
1362*15dc779aSAndroid Build Coastguard Worker       tmp = (ixheaacd_mult32X32float(x1r, w1l) - ixheaacd_mult32X32float(x1i, w1h));
1363*15dc779aSAndroid Build Coastguard Worker       x1i = ixheaacd_mac32X32float(ixheaacd_mult32X32float(x1r, w1h), x1i, w1l);
1364*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
1365*15dc779aSAndroid Build Coastguard Worker 
1366*15dc779aSAndroid Build Coastguard Worker       *ptr_y = (x0r) - (x1r);
1367*15dc779aSAndroid Build Coastguard Worker       *(ptr_y + 1) = (x0i) - (x1i);
1368*15dc779aSAndroid Build Coastguard Worker       ptr_y -= (del << 1);
1369*15dc779aSAndroid Build Coastguard Worker 
1370*15dc779aSAndroid Build Coastguard Worker       *ptr_y = (x0r) + (x1r);
1371*15dc779aSAndroid Build Coastguard Worker       *(ptr_y + 1) = (x0i) + (x1i);
1372*15dc779aSAndroid Build Coastguard Worker       ptr_y += 2;
1373*15dc779aSAndroid Build Coastguard Worker     }
1374*15dc779aSAndroid Build Coastguard Worker     twiddles = ptr_w;
1375*15dc779aSAndroid Build Coastguard Worker     for (j = del / 2; j != 0; j--)
1376*15dc779aSAndroid Build Coastguard Worker     {
1377*15dc779aSAndroid Build Coastguard Worker       FLOAT32 w1h = *twiddles;
1378*15dc779aSAndroid Build Coastguard Worker       FLOAT32 w1l = *(twiddles + 1);
1379*15dc779aSAndroid Build Coastguard Worker       FLOAT32 tmp;
1380*15dc779aSAndroid Build Coastguard Worker       twiddles += nodespacing * 2;
1381*15dc779aSAndroid Build Coastguard Worker 
1382*15dc779aSAndroid Build Coastguard Worker       x0r = *ptr_y;
1383*15dc779aSAndroid Build Coastguard Worker       x0i = *(ptr_y + 1);
1384*15dc779aSAndroid Build Coastguard Worker       ptr_y += (del << 1);
1385*15dc779aSAndroid Build Coastguard Worker 
1386*15dc779aSAndroid Build Coastguard Worker       x1r = *ptr_y;
1387*15dc779aSAndroid Build Coastguard Worker       x1i = *(ptr_y + 1);
1388*15dc779aSAndroid Build Coastguard Worker 
1389*15dc779aSAndroid Build Coastguard Worker       tmp = (ixheaacd_mult32X32float(x1r, w1h) + ixheaacd_mult32X32float(x1i, w1l));
1390*15dc779aSAndroid Build Coastguard Worker       x1i = -ixheaacd_mult32X32float(x1r, w1l) + ixheaacd_mult32X32float(x1i, w1h);
1391*15dc779aSAndroid Build Coastguard Worker       x1r = tmp;
1392*15dc779aSAndroid Build Coastguard Worker 
1393*15dc779aSAndroid Build Coastguard Worker       *ptr_y = (x0r) - (x1r);
1394*15dc779aSAndroid Build Coastguard Worker       *(ptr_y + 1) = (x0i) - (x1i);
1395*15dc779aSAndroid Build Coastguard Worker       ptr_y -= (del << 1);
1396*15dc779aSAndroid Build Coastguard Worker 
1397*15dc779aSAndroid Build Coastguard Worker       *ptr_y = (x0r) + (x1r);
1398*15dc779aSAndroid Build Coastguard Worker       *(ptr_y + 1) = (x0i) + (x1i);
1399*15dc779aSAndroid Build Coastguard Worker       ptr_y += 2;
1400*15dc779aSAndroid Build Coastguard Worker     }
1401*15dc779aSAndroid Build Coastguard Worker   }
1402*15dc779aSAndroid Build Coastguard Worker 
1403*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i<nlength; i++)
1404*15dc779aSAndroid Build Coastguard Worker   {
1405*15dc779aSAndroid Build Coastguard Worker     xr[i] = y[2 * i];
1406*15dc779aSAndroid Build Coastguard Worker     xi[i] = y[2 * i + 1];
1407*15dc779aSAndroid Build Coastguard Worker   }
1408*15dc779aSAndroid Build Coastguard Worker 
1409*15dc779aSAndroid Build Coastguard Worker   return;
1410*15dc779aSAndroid Build Coastguard Worker }
1411*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_complex_fft_p2_dec(WORD32 * xr,WORD32 * xi,WORD32 nlength,WORD32 fft_mode,WORD32 * preshift)1412*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_complex_fft_p2_dec(WORD32 *xr, WORD32 *xi, WORD32 nlength,
1413*15dc779aSAndroid Build Coastguard Worker                                  WORD32 fft_mode, WORD32 *preshift) {
1414*15dc779aSAndroid Build Coastguard Worker   WORD32 i, j, k, n_stages;
1415*15dc779aSAndroid Build Coastguard Worker   WORD32 h2, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
1416*15dc779aSAndroid Build Coastguard Worker   WORD32 del, nodespacing, in_loop_cnt;
1417*15dc779aSAndroid Build Coastguard Worker   WORD32 not_power_4;
1418*15dc779aSAndroid Build Coastguard Worker   WORD32 npts, shift;
1419*15dc779aSAndroid Build Coastguard Worker   WORD32 dig_rev_shift;
1420*15dc779aSAndroid Build Coastguard Worker   WORD32 ptr_x[1024];
1421*15dc779aSAndroid Build Coastguard Worker   WORD32 y[1024];
1422*15dc779aSAndroid Build Coastguard Worker   WORD32 npoints = nlength;
1423*15dc779aSAndroid Build Coastguard Worker   WORD32 n = 0;
1424*15dc779aSAndroid Build Coastguard Worker   WORD32 *ptr_y = y;
1425*15dc779aSAndroid Build Coastguard Worker   const WORD32 *ptr_w;
1426*15dc779aSAndroid Build Coastguard Worker   dig_rev_shift = ixheaac_norm32(npoints) + 1 - 16;
1427*15dc779aSAndroid Build Coastguard Worker   n_stages = 30 - ixheaac_norm32(npoints);
1428*15dc779aSAndroid Build Coastguard Worker   not_power_4 = n_stages & 1;
1429*15dc779aSAndroid Build Coastguard Worker 
1430*15dc779aSAndroid Build Coastguard Worker   n_stages = n_stages >> 1;
1431*15dc779aSAndroid Build Coastguard Worker 
1432*15dc779aSAndroid Build Coastguard Worker   npts = npoints;
1433*15dc779aSAndroid Build Coastguard Worker   while (npts >> 1) {
1434*15dc779aSAndroid Build Coastguard Worker     n++;
1435*15dc779aSAndroid Build Coastguard Worker     npts = npts >> 1;
1436*15dc779aSAndroid Build Coastguard Worker   }
1437*15dc779aSAndroid Build Coastguard Worker 
1438*15dc779aSAndroid Build Coastguard Worker   if (n % 2 == 0)
1439*15dc779aSAndroid Build Coastguard Worker     shift = ((n + 4)) / 2;
1440*15dc779aSAndroid Build Coastguard Worker   else
1441*15dc779aSAndroid Build Coastguard Worker     shift = ((n + 3) / 2);
1442*15dc779aSAndroid Build Coastguard Worker 
1443*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < nlength; i++) {
1444*15dc779aSAndroid Build Coastguard Worker     ptr_x[2 * i] = (xr[i] / (1 << (shift)));
1445*15dc779aSAndroid Build Coastguard Worker     ptr_x[2 * i + 1] = (xi[i] / (1 << (shift)));
1446*15dc779aSAndroid Build Coastguard Worker   }
1447*15dc779aSAndroid Build Coastguard Worker 
1448*15dc779aSAndroid Build Coastguard Worker   if (fft_mode == -1) {
1449*15dc779aSAndroid Build Coastguard Worker     ptr_w = ixheaacd_twiddle_table_fft_32x32;
1450*15dc779aSAndroid Build Coastguard Worker 
1451*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < npoints; i += 4) {
1452*15dc779aSAndroid Build Coastguard Worker       WORD32 *inp = ptr_x;
1453*15dc779aSAndroid Build Coastguard Worker 
1454*15dc779aSAndroid Build Coastguard Worker       DIG_REV(i, dig_rev_shift, h2);
1455*15dc779aSAndroid Build Coastguard Worker       if (not_power_4) {
1456*15dc779aSAndroid Build Coastguard Worker         h2 += 1;
1457*15dc779aSAndroid Build Coastguard Worker         h2 &= ~1;
1458*15dc779aSAndroid Build Coastguard Worker       }
1459*15dc779aSAndroid Build Coastguard Worker       inp += (h2);
1460*15dc779aSAndroid Build Coastguard Worker 
1461*15dc779aSAndroid Build Coastguard Worker       x0r = *inp;
1462*15dc779aSAndroid Build Coastguard Worker       x0i = *(inp + 1);
1463*15dc779aSAndroid Build Coastguard Worker       inp += (npoints >> 1);
1464*15dc779aSAndroid Build Coastguard Worker 
1465*15dc779aSAndroid Build Coastguard Worker       x1r = *inp;
1466*15dc779aSAndroid Build Coastguard Worker       x1i = *(inp + 1);
1467*15dc779aSAndroid Build Coastguard Worker       inp += (npoints >> 1);
1468*15dc779aSAndroid Build Coastguard Worker 
1469*15dc779aSAndroid Build Coastguard Worker       x2r = *inp;
1470*15dc779aSAndroid Build Coastguard Worker       x2i = *(inp + 1);
1471*15dc779aSAndroid Build Coastguard Worker       inp += (npoints >> 1);
1472*15dc779aSAndroid Build Coastguard Worker 
1473*15dc779aSAndroid Build Coastguard Worker       x3r = *inp;
1474*15dc779aSAndroid Build Coastguard Worker       x3i = *(inp + 1);
1475*15dc779aSAndroid Build Coastguard Worker 
1476*15dc779aSAndroid Build Coastguard Worker       x0r = ixheaac_add32_sat(x0r, x2r);
1477*15dc779aSAndroid Build Coastguard Worker       x0i = ixheaac_add32_sat(x0i, x2i);
1478*15dc779aSAndroid Build Coastguard Worker       x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
1479*15dc779aSAndroid Build Coastguard Worker       x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
1480*15dc779aSAndroid Build Coastguard Worker       x1r = ixheaac_add32_sat(x1r, x3r);
1481*15dc779aSAndroid Build Coastguard Worker       x1i = ixheaac_add32_sat(x1i, x3i);
1482*15dc779aSAndroid Build Coastguard Worker       x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
1483*15dc779aSAndroid Build Coastguard Worker       x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
1484*15dc779aSAndroid Build Coastguard Worker 
1485*15dc779aSAndroid Build Coastguard Worker       x0r = ixheaac_add32_sat(x0r, x1r);
1486*15dc779aSAndroid Build Coastguard Worker       x0i = ixheaac_add32_sat(x0i, x1i);
1487*15dc779aSAndroid Build Coastguard Worker       x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
1488*15dc779aSAndroid Build Coastguard Worker       x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
1489*15dc779aSAndroid Build Coastguard Worker       x2r = ixheaac_add32_sat(x2r, x3i);
1490*15dc779aSAndroid Build Coastguard Worker       x2i = ixheaac_sub32_sat(x2i, x3r);
1491*15dc779aSAndroid Build Coastguard Worker       x3i = ixheaac_sub32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
1492*15dc779aSAndroid Build Coastguard Worker       x3r = ixheaac_add32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
1493*15dc779aSAndroid Build Coastguard Worker 
1494*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x0r;
1495*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x0i;
1496*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x2r;
1497*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x2i;
1498*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x1r;
1499*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x1i;
1500*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x3i;
1501*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x3r;
1502*15dc779aSAndroid Build Coastguard Worker     }
1503*15dc779aSAndroid Build Coastguard Worker     ptr_y -= 2 * npoints;
1504*15dc779aSAndroid Build Coastguard Worker     del = 4;
1505*15dc779aSAndroid Build Coastguard Worker     nodespacing = 64;
1506*15dc779aSAndroid Build Coastguard Worker     in_loop_cnt = npoints >> 4;
1507*15dc779aSAndroid Build Coastguard Worker     for (i = n_stages - 1; i > 0; i--) {
1508*15dc779aSAndroid Build Coastguard Worker       const WORD32 *twiddles = ptr_w;
1509*15dc779aSAndroid Build Coastguard Worker       WORD32 *data = ptr_y;
1510*15dc779aSAndroid Build Coastguard Worker       WORD32 w1h, w2h, w3h, w1l, w2l, w3l;
1511*15dc779aSAndroid Build Coastguard Worker       WORD32 sec_loop_cnt;
1512*15dc779aSAndroid Build Coastguard Worker 
1513*15dc779aSAndroid Build Coastguard Worker       for (k = in_loop_cnt; k != 0; k--) {
1514*15dc779aSAndroid Build Coastguard Worker         x0r = (*data);
1515*15dc779aSAndroid Build Coastguard Worker         x0i = (*(data + 1));
1516*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1517*15dc779aSAndroid Build Coastguard Worker 
1518*15dc779aSAndroid Build Coastguard Worker         x1r = (*data);
1519*15dc779aSAndroid Build Coastguard Worker         x1i = (*(data + 1));
1520*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1521*15dc779aSAndroid Build Coastguard Worker 
1522*15dc779aSAndroid Build Coastguard Worker         x2r = (*data);
1523*15dc779aSAndroid Build Coastguard Worker         x2i = (*(data + 1));
1524*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1525*15dc779aSAndroid Build Coastguard Worker 
1526*15dc779aSAndroid Build Coastguard Worker         x3r = (*data);
1527*15dc779aSAndroid Build Coastguard Worker         x3i = (*(data + 1));
1528*15dc779aSAndroid Build Coastguard Worker         data -= 3 * (del << 1);
1529*15dc779aSAndroid Build Coastguard Worker 
1530*15dc779aSAndroid Build Coastguard Worker         x0r = ixheaac_add32_sat(x0r, x2r);
1531*15dc779aSAndroid Build Coastguard Worker         x0i = ixheaac_add32_sat(x0i, x2i);
1532*15dc779aSAndroid Build Coastguard Worker         x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
1533*15dc779aSAndroid Build Coastguard Worker         x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
1534*15dc779aSAndroid Build Coastguard Worker         x1r = ixheaac_add32_sat(x1r, x3r);
1535*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaac_add32_sat(x1i, x3i);
1536*15dc779aSAndroid Build Coastguard Worker         x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
1537*15dc779aSAndroid Build Coastguard Worker         x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
1538*15dc779aSAndroid Build Coastguard Worker 
1539*15dc779aSAndroid Build Coastguard Worker         x0r = ixheaac_add32_sat(x0r, x1r);
1540*15dc779aSAndroid Build Coastguard Worker         x0i = ixheaac_add32_sat(x0i, x1i);
1541*15dc779aSAndroid Build Coastguard Worker         x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
1542*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
1543*15dc779aSAndroid Build Coastguard Worker         x2r = ixheaac_add32_sat(x2r, x3i);
1544*15dc779aSAndroid Build Coastguard Worker         x2i = ixheaac_sub32_sat(x2i, x3r);
1545*15dc779aSAndroid Build Coastguard Worker         x3i = ixheaac_sub32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
1546*15dc779aSAndroid Build Coastguard Worker         x3r = ixheaac_add32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
1547*15dc779aSAndroid Build Coastguard Worker 
1548*15dc779aSAndroid Build Coastguard Worker         *data = x0r;
1549*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x0i;
1550*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1551*15dc779aSAndroid Build Coastguard Worker 
1552*15dc779aSAndroid Build Coastguard Worker         *data = x2r;
1553*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x2i;
1554*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1555*15dc779aSAndroid Build Coastguard Worker 
1556*15dc779aSAndroid Build Coastguard Worker         *data = x1r;
1557*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x1i;
1558*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1559*15dc779aSAndroid Build Coastguard Worker 
1560*15dc779aSAndroid Build Coastguard Worker         *data = x3i;
1561*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x3r;
1562*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
1563*15dc779aSAndroid Build Coastguard Worker       }
1564*15dc779aSAndroid Build Coastguard Worker       data = ptr_y + 2;
1565*15dc779aSAndroid Build Coastguard Worker 
1566*15dc779aSAndroid Build Coastguard Worker       sec_loop_cnt = (nodespacing * del);
1567*15dc779aSAndroid Build Coastguard Worker       sec_loop_cnt = (sec_loop_cnt / 4) + (sec_loop_cnt / 8) -
1568*15dc779aSAndroid Build Coastguard Worker                      (sec_loop_cnt / 16) + (sec_loop_cnt / 32) -
1569*15dc779aSAndroid Build Coastguard Worker                      (sec_loop_cnt / 64) + (sec_loop_cnt / 128) -
1570*15dc779aSAndroid Build Coastguard Worker                      (sec_loop_cnt / 256);
1571*15dc779aSAndroid Build Coastguard Worker       j = nodespacing;
1572*15dc779aSAndroid Build Coastguard Worker 
1573*15dc779aSAndroid Build Coastguard Worker       for (j = nodespacing; j <= sec_loop_cnt; j += nodespacing) {
1574*15dc779aSAndroid Build Coastguard Worker         w1h = *(twiddles + 2 * j);
1575*15dc779aSAndroid Build Coastguard Worker         w1l = *(twiddles + 2 * j + 1);
1576*15dc779aSAndroid Build Coastguard Worker         w2h = *(twiddles + 2 * (j << 1));
1577*15dc779aSAndroid Build Coastguard Worker         w2l = *(twiddles + 2 * (j << 1) + 1);
1578*15dc779aSAndroid Build Coastguard Worker         w3h = *(twiddles + 2 * j + 2 * (j << 1));
1579*15dc779aSAndroid Build Coastguard Worker         w3l = *(twiddles + 2 * j + 2 * (j << 1) + 1);
1580*15dc779aSAndroid Build Coastguard Worker 
1581*15dc779aSAndroid Build Coastguard Worker         for (k = in_loop_cnt; k != 0; k--) {
1582*15dc779aSAndroid Build Coastguard Worker           WORD32 tmp;
1583*15dc779aSAndroid Build Coastguard Worker           WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
1584*15dc779aSAndroid Build Coastguard Worker 
1585*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1586*15dc779aSAndroid Build Coastguard Worker 
1587*15dc779aSAndroid Build Coastguard Worker           x1r = *data;
1588*15dc779aSAndroid Build Coastguard Worker           x1i = *(data + 1);
1589*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1590*15dc779aSAndroid Build Coastguard Worker 
1591*15dc779aSAndroid Build Coastguard Worker           x2r = *data;
1592*15dc779aSAndroid Build Coastguard Worker           x2i = *(data + 1);
1593*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1594*15dc779aSAndroid Build Coastguard Worker 
1595*15dc779aSAndroid Build Coastguard Worker           x3r = *data;
1596*15dc779aSAndroid Build Coastguard Worker           x3i = *(data + 1);
1597*15dc779aSAndroid Build Coastguard Worker           data -= 3 * (del << 1);
1598*15dc779aSAndroid Build Coastguard Worker 
1599*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x1r, w1l),
1600*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x1i, w1h));
1601*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
1602*15dc779aSAndroid Build Coastguard Worker           x1r = tmp;
1603*15dc779aSAndroid Build Coastguard Worker 
1604*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x2r, w2l),
1605*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2h));
1606*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x2r, w2h), x2i, w2l);
1607*15dc779aSAndroid Build Coastguard Worker           x2r = tmp;
1608*15dc779aSAndroid Build Coastguard Worker 
1609*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x3r, w3l),
1610*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3i, w3h));
1611*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x3r, w3h), x3i, w3l);
1612*15dc779aSAndroid Build Coastguard Worker           x3r = tmp;
1613*15dc779aSAndroid Build Coastguard Worker 
1614*15dc779aSAndroid Build Coastguard Worker           x0r = (*data);
1615*15dc779aSAndroid Build Coastguard Worker           x0i = (*(data + 1));
1616*15dc779aSAndroid Build Coastguard Worker 
1617*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x2r);
1618*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x2i);
1619*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
1620*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
1621*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_add32_sat(x1r, x3r);
1622*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_add32_sat(x1i, x3i);
1623*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
1624*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
1625*15dc779aSAndroid Build Coastguard Worker 
1626*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x1r);
1627*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x1i);
1628*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
1629*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
1630*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_add32_sat(x2r, x3i);
1631*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x2i, x3r);
1632*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
1633*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_add32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
1634*15dc779aSAndroid Build Coastguard Worker 
1635*15dc779aSAndroid Build Coastguard Worker           *data = x0r;
1636*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x0i;
1637*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1638*15dc779aSAndroid Build Coastguard Worker 
1639*15dc779aSAndroid Build Coastguard Worker           *data = x2r;
1640*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x2i;
1641*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1642*15dc779aSAndroid Build Coastguard Worker 
1643*15dc779aSAndroid Build Coastguard Worker           *data = x1r;
1644*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x1i;
1645*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1646*15dc779aSAndroid Build Coastguard Worker 
1647*15dc779aSAndroid Build Coastguard Worker           *data = x3i;
1648*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x3r;
1649*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1650*15dc779aSAndroid Build Coastguard Worker         }
1651*15dc779aSAndroid Build Coastguard Worker         data -= 2 * npoints;
1652*15dc779aSAndroid Build Coastguard Worker         data += 2;
1653*15dc779aSAndroid Build Coastguard Worker       }
1654*15dc779aSAndroid Build Coastguard Worker       for (; j <= (nodespacing * del) >> 1; j += nodespacing) {
1655*15dc779aSAndroid Build Coastguard Worker         w1h = *(twiddles + 2 * j);
1656*15dc779aSAndroid Build Coastguard Worker         w2h = *(twiddles + 2 * (j << 1));
1657*15dc779aSAndroid Build Coastguard Worker         w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512);
1658*15dc779aSAndroid Build Coastguard Worker         w1l = *(twiddles + 2 * j + 1);
1659*15dc779aSAndroid Build Coastguard Worker         w2l = *(twiddles + 2 * (j << 1) + 1);
1660*15dc779aSAndroid Build Coastguard Worker         w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511);
1661*15dc779aSAndroid Build Coastguard Worker 
1662*15dc779aSAndroid Build Coastguard Worker         for (k = in_loop_cnt; k != 0; k--) {
1663*15dc779aSAndroid Build Coastguard Worker           WORD32 tmp;
1664*15dc779aSAndroid Build Coastguard Worker           WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
1665*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1666*15dc779aSAndroid Build Coastguard Worker 
1667*15dc779aSAndroid Build Coastguard Worker           x1r = *data;
1668*15dc779aSAndroid Build Coastguard Worker           x1i = *(data + 1);
1669*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1670*15dc779aSAndroid Build Coastguard Worker 
1671*15dc779aSAndroid Build Coastguard Worker           x2r = *data;
1672*15dc779aSAndroid Build Coastguard Worker           x2i = *(data + 1);
1673*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1674*15dc779aSAndroid Build Coastguard Worker 
1675*15dc779aSAndroid Build Coastguard Worker           x3r = *data;
1676*15dc779aSAndroid Build Coastguard Worker           x3i = *(data + 1);
1677*15dc779aSAndroid Build Coastguard Worker           data -= 3 * (del << 1);
1678*15dc779aSAndroid Build Coastguard Worker 
1679*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x1r, w1l),
1680*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x1i, w1h));
1681*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
1682*15dc779aSAndroid Build Coastguard Worker           x1r = tmp;
1683*15dc779aSAndroid Build Coastguard Worker 
1684*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x2r, w2l),
1685*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2h));
1686*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x2r, w2h), x2i, w2l);
1687*15dc779aSAndroid Build Coastguard Worker           x2r = tmp;
1688*15dc779aSAndroid Build Coastguard Worker 
1689*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x3r, w3h),
1690*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3i, w3l));
1691*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(ixheaacd_mult32_sat(x3i, w3h),
1692*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3r, w3l));
1693*15dc779aSAndroid Build Coastguard Worker           x3r = tmp;
1694*15dc779aSAndroid Build Coastguard Worker 
1695*15dc779aSAndroid Build Coastguard Worker           x0r = (*data);
1696*15dc779aSAndroid Build Coastguard Worker           x0i = (*(data + 1));
1697*15dc779aSAndroid Build Coastguard Worker 
1698*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x2r);
1699*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x2i);
1700*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
1701*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
1702*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_add32_sat(x1r, x3r);
1703*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_add32_sat(x1i, x3i);
1704*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
1705*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
1706*15dc779aSAndroid Build Coastguard Worker 
1707*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x1r);
1708*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x1i);
1709*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
1710*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
1711*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_add32_sat(x2r, x3i);
1712*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x2i, x3r);
1713*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
1714*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_add32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
1715*15dc779aSAndroid Build Coastguard Worker 
1716*15dc779aSAndroid Build Coastguard Worker           *data = x0r;
1717*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x0i;
1718*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1719*15dc779aSAndroid Build Coastguard Worker 
1720*15dc779aSAndroid Build Coastguard Worker           *data = x2r;
1721*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x2i;
1722*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1723*15dc779aSAndroid Build Coastguard Worker 
1724*15dc779aSAndroid Build Coastguard Worker           *data = x1r;
1725*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x1i;
1726*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1727*15dc779aSAndroid Build Coastguard Worker 
1728*15dc779aSAndroid Build Coastguard Worker           *data = x3i;
1729*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x3r;
1730*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1731*15dc779aSAndroid Build Coastguard Worker         }
1732*15dc779aSAndroid Build Coastguard Worker         data -= 2 * npoints;
1733*15dc779aSAndroid Build Coastguard Worker         data += 2;
1734*15dc779aSAndroid Build Coastguard Worker       }
1735*15dc779aSAndroid Build Coastguard Worker       for (; j <= sec_loop_cnt * 2; j += nodespacing) {
1736*15dc779aSAndroid Build Coastguard Worker         w1h = *(twiddles + 2 * j);
1737*15dc779aSAndroid Build Coastguard Worker         w2h = *(twiddles + 2 * (j << 1) - 512);
1738*15dc779aSAndroid Build Coastguard Worker         w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512);
1739*15dc779aSAndroid Build Coastguard Worker         w1l = *(twiddles + 2 * j + 1);
1740*15dc779aSAndroid Build Coastguard Worker         w2l = *(twiddles + 2 * (j << 1) - 511);
1741*15dc779aSAndroid Build Coastguard Worker         w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511);
1742*15dc779aSAndroid Build Coastguard Worker 
1743*15dc779aSAndroid Build Coastguard Worker         for (k = in_loop_cnt; k != 0; k--) {
1744*15dc779aSAndroid Build Coastguard Worker           WORD32 tmp;
1745*15dc779aSAndroid Build Coastguard Worker           WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
1746*15dc779aSAndroid Build Coastguard Worker 
1747*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1748*15dc779aSAndroid Build Coastguard Worker 
1749*15dc779aSAndroid Build Coastguard Worker           x1r = *data;
1750*15dc779aSAndroid Build Coastguard Worker           x1i = *(data + 1);
1751*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1752*15dc779aSAndroid Build Coastguard Worker 
1753*15dc779aSAndroid Build Coastguard Worker           x2r = *data;
1754*15dc779aSAndroid Build Coastguard Worker           x2i = *(data + 1);
1755*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1756*15dc779aSAndroid Build Coastguard Worker 
1757*15dc779aSAndroid Build Coastguard Worker           x3r = *data;
1758*15dc779aSAndroid Build Coastguard Worker           x3i = *(data + 1);
1759*15dc779aSAndroid Build Coastguard Worker           data -= 3 * (del << 1);
1760*15dc779aSAndroid Build Coastguard Worker 
1761*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x1r, w1l),
1762*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x1i, w1h));
1763*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
1764*15dc779aSAndroid Build Coastguard Worker           x1r = tmp;
1765*15dc779aSAndroid Build Coastguard Worker 
1766*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x2r, w2h),
1767*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2l));
1768*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(ixheaacd_mult32_sat(x2i, w2h),
1769*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2r, w2l));
1770*15dc779aSAndroid Build Coastguard Worker           x2r = tmp;
1771*15dc779aSAndroid Build Coastguard Worker 
1772*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x3r, w3h),
1773*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3i, w3l));
1774*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(ixheaacd_mult32_sat(x3i, w3h),
1775*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3r, w3l));
1776*15dc779aSAndroid Build Coastguard Worker           x3r = tmp;
1777*15dc779aSAndroid Build Coastguard Worker 
1778*15dc779aSAndroid Build Coastguard Worker           x0r = (*data);
1779*15dc779aSAndroid Build Coastguard Worker           x0i = (*(data + 1));
1780*15dc779aSAndroid Build Coastguard Worker 
1781*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x2r);
1782*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x2i);
1783*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
1784*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
1785*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_add32_sat(x1r, x3r);
1786*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_add32_sat(x1i, x3i);
1787*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
1788*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
1789*15dc779aSAndroid Build Coastguard Worker 
1790*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x1r);
1791*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x1i);
1792*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
1793*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
1794*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_add32_sat(x2r, x3i);
1795*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x2i, x3r);
1796*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
1797*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_add32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
1798*15dc779aSAndroid Build Coastguard Worker 
1799*15dc779aSAndroid Build Coastguard Worker           *data = x0r;
1800*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x0i;
1801*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1802*15dc779aSAndroid Build Coastguard Worker 
1803*15dc779aSAndroid Build Coastguard Worker           *data = x2r;
1804*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x2i;
1805*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1806*15dc779aSAndroid Build Coastguard Worker 
1807*15dc779aSAndroid Build Coastguard Worker           *data = x1r;
1808*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x1i;
1809*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1810*15dc779aSAndroid Build Coastguard Worker 
1811*15dc779aSAndroid Build Coastguard Worker           *data = x3i;
1812*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x3r;
1813*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1814*15dc779aSAndroid Build Coastguard Worker         }
1815*15dc779aSAndroid Build Coastguard Worker         data -= 2 * npoints;
1816*15dc779aSAndroid Build Coastguard Worker         data += 2;
1817*15dc779aSAndroid Build Coastguard Worker       }
1818*15dc779aSAndroid Build Coastguard Worker       for (; j < nodespacing * del; j += nodespacing) {
1819*15dc779aSAndroid Build Coastguard Worker         w1h = *(twiddles + 2 * j);
1820*15dc779aSAndroid Build Coastguard Worker         w2h = *(twiddles + 2 * (j << 1) - 512);
1821*15dc779aSAndroid Build Coastguard Worker         w3h = *(twiddles + 2 * j + 2 * (j << 1) - 1024);
1822*15dc779aSAndroid Build Coastguard Worker         w1l = *(twiddles + 2 * j + 1);
1823*15dc779aSAndroid Build Coastguard Worker         w2l = *(twiddles + 2 * (j << 1) - 511);
1824*15dc779aSAndroid Build Coastguard Worker         w3l = *(twiddles + 2 * j + 2 * (j << 1) - 1023);
1825*15dc779aSAndroid Build Coastguard Worker 
1826*15dc779aSAndroid Build Coastguard Worker         for (k = in_loop_cnt; k != 0; k--) {
1827*15dc779aSAndroid Build Coastguard Worker           WORD32 tmp;
1828*15dc779aSAndroid Build Coastguard Worker           WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
1829*15dc779aSAndroid Build Coastguard Worker 
1830*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1831*15dc779aSAndroid Build Coastguard Worker 
1832*15dc779aSAndroid Build Coastguard Worker           x1r = *data;
1833*15dc779aSAndroid Build Coastguard Worker           x1i = *(data + 1);
1834*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1835*15dc779aSAndroid Build Coastguard Worker 
1836*15dc779aSAndroid Build Coastguard Worker           x2r = *data;
1837*15dc779aSAndroid Build Coastguard Worker           x2i = *(data + 1);
1838*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1839*15dc779aSAndroid Build Coastguard Worker 
1840*15dc779aSAndroid Build Coastguard Worker           x3r = *data;
1841*15dc779aSAndroid Build Coastguard Worker           x3i = *(data + 1);
1842*15dc779aSAndroid Build Coastguard Worker           data -= 3 * (del << 1);
1843*15dc779aSAndroid Build Coastguard Worker 
1844*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x1r, w1l),
1845*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x1i, w1h));
1846*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
1847*15dc779aSAndroid Build Coastguard Worker           x1r = tmp;
1848*15dc779aSAndroid Build Coastguard Worker 
1849*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x2r, w2h),
1850*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2l));
1851*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(ixheaacd_mult32_sat(x2i, w2h),
1852*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2r, w2l));
1853*15dc779aSAndroid Build Coastguard Worker           x2r = tmp;
1854*15dc779aSAndroid Build Coastguard Worker 
1855*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x3i, w3h),
1856*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3r, w3l));
1857*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x3r, w3h), x3i, w3l);
1858*15dc779aSAndroid Build Coastguard Worker           x3r = tmp;
1859*15dc779aSAndroid Build Coastguard Worker 
1860*15dc779aSAndroid Build Coastguard Worker           x0r = (*data);
1861*15dc779aSAndroid Build Coastguard Worker           x0i = (*(data + 1));
1862*15dc779aSAndroid Build Coastguard Worker 
1863*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x2r);
1864*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x2i);
1865*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
1866*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
1867*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_add32_sat(x1r, x3r);
1868*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x1i, x3i);
1869*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
1870*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_add32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
1871*15dc779aSAndroid Build Coastguard Worker 
1872*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x1r);
1873*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x1i);
1874*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
1875*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
1876*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_add32_sat(x2r, x3i);
1877*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x2i, x3r);
1878*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
1879*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_add32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
1880*15dc779aSAndroid Build Coastguard Worker 
1881*15dc779aSAndroid Build Coastguard Worker           *data = x0r;
1882*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x0i;
1883*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1884*15dc779aSAndroid Build Coastguard Worker 
1885*15dc779aSAndroid Build Coastguard Worker           *data = x2r;
1886*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x2i;
1887*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1888*15dc779aSAndroid Build Coastguard Worker 
1889*15dc779aSAndroid Build Coastguard Worker           *data = x1r;
1890*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x1i;
1891*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1892*15dc779aSAndroid Build Coastguard Worker 
1893*15dc779aSAndroid Build Coastguard Worker           *data = x3i;
1894*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x3r;
1895*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
1896*15dc779aSAndroid Build Coastguard Worker         }
1897*15dc779aSAndroid Build Coastguard Worker         data -= 2 * npoints;
1898*15dc779aSAndroid Build Coastguard Worker         data += 2;
1899*15dc779aSAndroid Build Coastguard Worker       }
1900*15dc779aSAndroid Build Coastguard Worker       nodespacing >>= 2;
1901*15dc779aSAndroid Build Coastguard Worker       del <<= 2;
1902*15dc779aSAndroid Build Coastguard Worker       in_loop_cnt >>= 2;
1903*15dc779aSAndroid Build Coastguard Worker     }
1904*15dc779aSAndroid Build Coastguard Worker     if (not_power_4) {
1905*15dc779aSAndroid Build Coastguard Worker       const WORD32 *twiddles = ptr_w;
1906*15dc779aSAndroid Build Coastguard Worker       nodespacing <<= 1;
1907*15dc779aSAndroid Build Coastguard Worker       shift += 1;
1908*15dc779aSAndroid Build Coastguard Worker 
1909*15dc779aSAndroid Build Coastguard Worker       for (j = del / 2; j != 0; j--) {
1910*15dc779aSAndroid Build Coastguard Worker         WORD32 w1h = *twiddles;
1911*15dc779aSAndroid Build Coastguard Worker         WORD32 w1l = *(twiddles + 1);
1912*15dc779aSAndroid Build Coastguard Worker         WORD32 tmp;
1913*15dc779aSAndroid Build Coastguard Worker         twiddles += nodespacing * 2;
1914*15dc779aSAndroid Build Coastguard Worker 
1915*15dc779aSAndroid Build Coastguard Worker         x0r = *ptr_y;
1916*15dc779aSAndroid Build Coastguard Worker         x0i = *(ptr_y + 1);
1917*15dc779aSAndroid Build Coastguard Worker         ptr_y += (del << 1);
1918*15dc779aSAndroid Build Coastguard Worker 
1919*15dc779aSAndroid Build Coastguard Worker         x1r = *ptr_y;
1920*15dc779aSAndroid Build Coastguard Worker         x1i = *(ptr_y + 1);
1921*15dc779aSAndroid Build Coastguard Worker 
1922*15dc779aSAndroid Build Coastguard Worker         tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x1r, w1l),
1923*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(x1i, w1h));
1924*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
1925*15dc779aSAndroid Build Coastguard Worker         x1r = tmp;
1926*15dc779aSAndroid Build Coastguard Worker 
1927*15dc779aSAndroid Build Coastguard Worker         *ptr_y = (x0r) / 2 - (x1r) / 2;
1928*15dc779aSAndroid Build Coastguard Worker         *(ptr_y + 1) = (x0i) / 2 - (x1i) / 2;
1929*15dc779aSAndroid Build Coastguard Worker         ptr_y -= (del << 1);
1930*15dc779aSAndroid Build Coastguard Worker 
1931*15dc779aSAndroid Build Coastguard Worker         *ptr_y = (x0r) / 2 + (x1r) / 2;
1932*15dc779aSAndroid Build Coastguard Worker         *(ptr_y + 1) = (x0i) / 2 + (x1i) / 2;
1933*15dc779aSAndroid Build Coastguard Worker         ptr_y += 2;
1934*15dc779aSAndroid Build Coastguard Worker       }
1935*15dc779aSAndroid Build Coastguard Worker       twiddles = ptr_w;
1936*15dc779aSAndroid Build Coastguard Worker       for (j = del / 2; j != 0; j--) {
1937*15dc779aSAndroid Build Coastguard Worker         WORD32 w1h = *twiddles;
1938*15dc779aSAndroid Build Coastguard Worker         WORD32 w1l = *(twiddles + 1);
1939*15dc779aSAndroid Build Coastguard Worker         WORD32 tmp;
1940*15dc779aSAndroid Build Coastguard Worker         twiddles += nodespacing * 2;
1941*15dc779aSAndroid Build Coastguard Worker 
1942*15dc779aSAndroid Build Coastguard Worker         x0r = *ptr_y;
1943*15dc779aSAndroid Build Coastguard Worker         x0i = *(ptr_y + 1);
1944*15dc779aSAndroid Build Coastguard Worker         ptr_y += (del << 1);
1945*15dc779aSAndroid Build Coastguard Worker 
1946*15dc779aSAndroid Build Coastguard Worker         x1r = *ptr_y;
1947*15dc779aSAndroid Build Coastguard Worker         x1i = *(ptr_y + 1);
1948*15dc779aSAndroid Build Coastguard Worker 
1949*15dc779aSAndroid Build Coastguard Worker         tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x1r, w1h),
1950*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(x1i, w1l));
1951*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaac_sub32_sat(ixheaacd_mult32_sat(x1i, w1h),
1952*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(x1r, w1l));
1953*15dc779aSAndroid Build Coastguard Worker         x1r = tmp;
1954*15dc779aSAndroid Build Coastguard Worker 
1955*15dc779aSAndroid Build Coastguard Worker         *ptr_y = (x0r) / 2 - (x1r) / 2;
1956*15dc779aSAndroid Build Coastguard Worker         *(ptr_y + 1) = (x0i) / 2 - (x1i) / 2;
1957*15dc779aSAndroid Build Coastguard Worker         ptr_y -= (del << 1);
1958*15dc779aSAndroid Build Coastguard Worker 
1959*15dc779aSAndroid Build Coastguard Worker         *ptr_y = (x0r) / 2 + (x1r) / 2;
1960*15dc779aSAndroid Build Coastguard Worker         *(ptr_y + 1) = (x0i) / 2 + (x1i) / 2;
1961*15dc779aSAndroid Build Coastguard Worker         ptr_y += 2;
1962*15dc779aSAndroid Build Coastguard Worker       }
1963*15dc779aSAndroid Build Coastguard Worker     }
1964*15dc779aSAndroid Build Coastguard Worker   }
1965*15dc779aSAndroid Build Coastguard Worker 
1966*15dc779aSAndroid Build Coastguard Worker   else {
1967*15dc779aSAndroid Build Coastguard Worker     ptr_w = ixheaacd_twiddle_table_fft_32x32;
1968*15dc779aSAndroid Build Coastguard Worker 
1969*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < npoints; i += 4) {
1970*15dc779aSAndroid Build Coastguard Worker       WORD32 *inp = ptr_x;
1971*15dc779aSAndroid Build Coastguard Worker 
1972*15dc779aSAndroid Build Coastguard Worker       DIG_REV(i, dig_rev_shift, h2);
1973*15dc779aSAndroid Build Coastguard Worker       if (not_power_4) {
1974*15dc779aSAndroid Build Coastguard Worker         h2 += 1;
1975*15dc779aSAndroid Build Coastguard Worker         h2 &= ~1;
1976*15dc779aSAndroid Build Coastguard Worker       }
1977*15dc779aSAndroid Build Coastguard Worker       inp += (h2);
1978*15dc779aSAndroid Build Coastguard Worker 
1979*15dc779aSAndroid Build Coastguard Worker       x0r = *inp;
1980*15dc779aSAndroid Build Coastguard Worker       x0i = *(inp + 1);
1981*15dc779aSAndroid Build Coastguard Worker       inp += (npoints >> 1);
1982*15dc779aSAndroid Build Coastguard Worker 
1983*15dc779aSAndroid Build Coastguard Worker       x1r = *inp;
1984*15dc779aSAndroid Build Coastguard Worker       x1i = *(inp + 1);
1985*15dc779aSAndroid Build Coastguard Worker       inp += (npoints >> 1);
1986*15dc779aSAndroid Build Coastguard Worker 
1987*15dc779aSAndroid Build Coastguard Worker       x2r = *inp;
1988*15dc779aSAndroid Build Coastguard Worker       x2i = *(inp + 1);
1989*15dc779aSAndroid Build Coastguard Worker       inp += (npoints >> 1);
1990*15dc779aSAndroid Build Coastguard Worker 
1991*15dc779aSAndroid Build Coastguard Worker       x3r = *inp;
1992*15dc779aSAndroid Build Coastguard Worker       x3i = *(inp + 1);
1993*15dc779aSAndroid Build Coastguard Worker 
1994*15dc779aSAndroid Build Coastguard Worker       x0r = ixheaac_add32_sat(x0r, x2r);
1995*15dc779aSAndroid Build Coastguard Worker       x0i = ixheaac_add32_sat(x0i, x2i);
1996*15dc779aSAndroid Build Coastguard Worker       x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
1997*15dc779aSAndroid Build Coastguard Worker       x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
1998*15dc779aSAndroid Build Coastguard Worker       x1r = ixheaac_add32_sat(x1r, x3r);
1999*15dc779aSAndroid Build Coastguard Worker       x1i = ixheaac_add32_sat(x1i, x3i);
2000*15dc779aSAndroid Build Coastguard Worker       x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
2001*15dc779aSAndroid Build Coastguard Worker       x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
2002*15dc779aSAndroid Build Coastguard Worker 
2003*15dc779aSAndroid Build Coastguard Worker       x0r = ixheaac_add32_sat(x0r, x1r);
2004*15dc779aSAndroid Build Coastguard Worker       x0i = ixheaac_add32_sat(x0i, x1i);
2005*15dc779aSAndroid Build Coastguard Worker       x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
2006*15dc779aSAndroid Build Coastguard Worker       x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
2007*15dc779aSAndroid Build Coastguard Worker       x2r = ixheaac_sub32_sat(x2r, x3i);
2008*15dc779aSAndroid Build Coastguard Worker       x2i = ixheaac_add32_sat(x2i, x3r);
2009*15dc779aSAndroid Build Coastguard Worker       x3i = ixheaac_add32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
2010*15dc779aSAndroid Build Coastguard Worker       x3r = ixheaac_sub32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
2011*15dc779aSAndroid Build Coastguard Worker 
2012*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x0r;
2013*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x0i;
2014*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x2r;
2015*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x2i;
2016*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x1r;
2017*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x1i;
2018*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x3i;
2019*15dc779aSAndroid Build Coastguard Worker       *ptr_y++ = x3r;
2020*15dc779aSAndroid Build Coastguard Worker     }
2021*15dc779aSAndroid Build Coastguard Worker     ptr_y -= 2 * npoints;
2022*15dc779aSAndroid Build Coastguard Worker     del = 4;
2023*15dc779aSAndroid Build Coastguard Worker     nodespacing = 64;
2024*15dc779aSAndroid Build Coastguard Worker     in_loop_cnt = npoints >> 4;
2025*15dc779aSAndroid Build Coastguard Worker     for (i = n_stages - 1; i > 0; i--) {
2026*15dc779aSAndroid Build Coastguard Worker       const WORD32 *twiddles = ptr_w;
2027*15dc779aSAndroid Build Coastguard Worker       WORD32 *data = ptr_y;
2028*15dc779aSAndroid Build Coastguard Worker       WORD32 w1h, w2h, w3h, w1l, w2l, w3l;
2029*15dc779aSAndroid Build Coastguard Worker       WORD32 sec_loop_cnt;
2030*15dc779aSAndroid Build Coastguard Worker 
2031*15dc779aSAndroid Build Coastguard Worker       for (k = in_loop_cnt; k != 0; k--) {
2032*15dc779aSAndroid Build Coastguard Worker         x0r = (*data);
2033*15dc779aSAndroid Build Coastguard Worker         x0i = (*(data + 1));
2034*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
2035*15dc779aSAndroid Build Coastguard Worker 
2036*15dc779aSAndroid Build Coastguard Worker         x1r = (*data);
2037*15dc779aSAndroid Build Coastguard Worker         x1i = (*(data + 1));
2038*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
2039*15dc779aSAndroid Build Coastguard Worker 
2040*15dc779aSAndroid Build Coastguard Worker         x2r = (*data);
2041*15dc779aSAndroid Build Coastguard Worker         x2i = (*(data + 1));
2042*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
2043*15dc779aSAndroid Build Coastguard Worker 
2044*15dc779aSAndroid Build Coastguard Worker         x3r = (*data);
2045*15dc779aSAndroid Build Coastguard Worker         x3i = (*(data + 1));
2046*15dc779aSAndroid Build Coastguard Worker         data -= 3 * (del << 1);
2047*15dc779aSAndroid Build Coastguard Worker 
2048*15dc779aSAndroid Build Coastguard Worker         x0r = ixheaac_add32_sat(x0r, x2r);
2049*15dc779aSAndroid Build Coastguard Worker         x0i = ixheaac_add32_sat(x0i, x2i);
2050*15dc779aSAndroid Build Coastguard Worker         x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
2051*15dc779aSAndroid Build Coastguard Worker         x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
2052*15dc779aSAndroid Build Coastguard Worker         x1r = ixheaac_add32_sat(x1r, x3r);
2053*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaac_add32_sat(x1i, x3i);
2054*15dc779aSAndroid Build Coastguard Worker         x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
2055*15dc779aSAndroid Build Coastguard Worker         x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
2056*15dc779aSAndroid Build Coastguard Worker 
2057*15dc779aSAndroid Build Coastguard Worker         x0r = ixheaac_add32_sat(x0r, x1r);
2058*15dc779aSAndroid Build Coastguard Worker         x0i = ixheaac_add32_sat(x0i, x1i);
2059*15dc779aSAndroid Build Coastguard Worker         x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
2060*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
2061*15dc779aSAndroid Build Coastguard Worker         x2r = ixheaac_sub32_sat(x2r, x3i);
2062*15dc779aSAndroid Build Coastguard Worker         x2i = ixheaac_add32_sat(x2i, x3r);
2063*15dc779aSAndroid Build Coastguard Worker         x3i = ixheaac_add32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
2064*15dc779aSAndroid Build Coastguard Worker         x3r = ixheaac_sub32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
2065*15dc779aSAndroid Build Coastguard Worker 
2066*15dc779aSAndroid Build Coastguard Worker         *data = x0r;
2067*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x0i;
2068*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
2069*15dc779aSAndroid Build Coastguard Worker 
2070*15dc779aSAndroid Build Coastguard Worker         *data = x2r;
2071*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x2i;
2072*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
2073*15dc779aSAndroid Build Coastguard Worker 
2074*15dc779aSAndroid Build Coastguard Worker         *data = x1r;
2075*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x1i;
2076*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
2077*15dc779aSAndroid Build Coastguard Worker 
2078*15dc779aSAndroid Build Coastguard Worker         *data = x3i;
2079*15dc779aSAndroid Build Coastguard Worker         *(data + 1) = x3r;
2080*15dc779aSAndroid Build Coastguard Worker         data += (del << 1);
2081*15dc779aSAndroid Build Coastguard Worker       }
2082*15dc779aSAndroid Build Coastguard Worker       data = ptr_y + 2;
2083*15dc779aSAndroid Build Coastguard Worker 
2084*15dc779aSAndroid Build Coastguard Worker       sec_loop_cnt = (nodespacing * del);
2085*15dc779aSAndroid Build Coastguard Worker       sec_loop_cnt = (sec_loop_cnt / 4) + (sec_loop_cnt / 8) -
2086*15dc779aSAndroid Build Coastguard Worker                      (sec_loop_cnt / 16) + (sec_loop_cnt / 32) -
2087*15dc779aSAndroid Build Coastguard Worker                      (sec_loop_cnt / 64) + (sec_loop_cnt / 128) -
2088*15dc779aSAndroid Build Coastguard Worker                      (sec_loop_cnt / 256);
2089*15dc779aSAndroid Build Coastguard Worker       j = nodespacing;
2090*15dc779aSAndroid Build Coastguard Worker 
2091*15dc779aSAndroid Build Coastguard Worker       for (j = nodespacing; j <= sec_loop_cnt; j += nodespacing) {
2092*15dc779aSAndroid Build Coastguard Worker         w1h = *(twiddles + 2 * j);
2093*15dc779aSAndroid Build Coastguard Worker         w2h = *(twiddles + 2 * (j << 1));
2094*15dc779aSAndroid Build Coastguard Worker         w3h = *(twiddles + 2 * j + 2 * (j << 1));
2095*15dc779aSAndroid Build Coastguard Worker         w1l = *(twiddles + 2 * j + 1);
2096*15dc779aSAndroid Build Coastguard Worker         w2l = *(twiddles + 2 * (j << 1) + 1);
2097*15dc779aSAndroid Build Coastguard Worker         w3l = *(twiddles + 2 * j + 2 * (j << 1) + 1);
2098*15dc779aSAndroid Build Coastguard Worker 
2099*15dc779aSAndroid Build Coastguard Worker         for (k = in_loop_cnt; k != 0; k--) {
2100*15dc779aSAndroid Build Coastguard Worker           WORD32 tmp;
2101*15dc779aSAndroid Build Coastguard Worker           WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
2102*15dc779aSAndroid Build Coastguard Worker 
2103*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2104*15dc779aSAndroid Build Coastguard Worker 
2105*15dc779aSAndroid Build Coastguard Worker           x1r = *data;
2106*15dc779aSAndroid Build Coastguard Worker           x1i = *(data + 1);
2107*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2108*15dc779aSAndroid Build Coastguard Worker 
2109*15dc779aSAndroid Build Coastguard Worker           x2r = *data;
2110*15dc779aSAndroid Build Coastguard Worker           x2i = *(data + 1);
2111*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2112*15dc779aSAndroid Build Coastguard Worker 
2113*15dc779aSAndroid Build Coastguard Worker           x3r = *data;
2114*15dc779aSAndroid Build Coastguard Worker           x3i = *(data + 1);
2115*15dc779aSAndroid Build Coastguard Worker           data -= 3 * (del << 1);
2116*15dc779aSAndroid Build Coastguard Worker 
2117*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x1r, w1l),
2118*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x1i, w1h));
2119*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaacd_mac32_sat(-ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
2120*15dc779aSAndroid Build Coastguard Worker           x1r = tmp;
2121*15dc779aSAndroid Build Coastguard Worker 
2122*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x2r, w2l),
2123*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2h));
2124*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaacd_mac32_sat(-ixheaacd_mult32_sat(x2r, w2h), x2i, w2l);
2125*15dc779aSAndroid Build Coastguard Worker           x2r = tmp;
2126*15dc779aSAndroid Build Coastguard Worker 
2127*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x3r, w3l),
2128*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3i, w3h));
2129*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaacd_mac32_sat(-ixheaacd_mult32_sat(x3r, w3h), x3i, w3l);
2130*15dc779aSAndroid Build Coastguard Worker           x3r = tmp;
2131*15dc779aSAndroid Build Coastguard Worker 
2132*15dc779aSAndroid Build Coastguard Worker           x0r = (*data);
2133*15dc779aSAndroid Build Coastguard Worker           x0i = (*(data + 1));
2134*15dc779aSAndroid Build Coastguard Worker 
2135*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x2r);
2136*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x2i);
2137*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
2138*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
2139*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_add32_sat(x1r, x3r);
2140*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_add32_sat(x1i, x3i);
2141*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
2142*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
2143*15dc779aSAndroid Build Coastguard Worker 
2144*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x1r);
2145*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x1i);
2146*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
2147*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
2148*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x2r, x3i);
2149*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_add32_sat(x2i, x3r);
2150*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_add32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
2151*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
2152*15dc779aSAndroid Build Coastguard Worker 
2153*15dc779aSAndroid Build Coastguard Worker           *data = x0r;
2154*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x0i;
2155*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2156*15dc779aSAndroid Build Coastguard Worker 
2157*15dc779aSAndroid Build Coastguard Worker           *data = x2r;
2158*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x2i;
2159*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2160*15dc779aSAndroid Build Coastguard Worker 
2161*15dc779aSAndroid Build Coastguard Worker           *data = x1r;
2162*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x1i;
2163*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2164*15dc779aSAndroid Build Coastguard Worker 
2165*15dc779aSAndroid Build Coastguard Worker           *data = x3i;
2166*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x3r;
2167*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2168*15dc779aSAndroid Build Coastguard Worker         }
2169*15dc779aSAndroid Build Coastguard Worker         data -= 2 * npoints;
2170*15dc779aSAndroid Build Coastguard Worker         data += 2;
2171*15dc779aSAndroid Build Coastguard Worker       }
2172*15dc779aSAndroid Build Coastguard Worker       for (; j <= (nodespacing * del) >> 1; j += nodespacing) {
2173*15dc779aSAndroid Build Coastguard Worker         w1h = *(twiddles + 2 * j);
2174*15dc779aSAndroid Build Coastguard Worker         w2h = *(twiddles + 2 * (j << 1));
2175*15dc779aSAndroid Build Coastguard Worker         w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512);
2176*15dc779aSAndroid Build Coastguard Worker         w1l = *(twiddles + 2 * j + 1);
2177*15dc779aSAndroid Build Coastguard Worker         w2l = *(twiddles + 2 * (j << 1) + 1);
2178*15dc779aSAndroid Build Coastguard Worker         w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511);
2179*15dc779aSAndroid Build Coastguard Worker 
2180*15dc779aSAndroid Build Coastguard Worker         for (k = in_loop_cnt; k != 0; k--) {
2181*15dc779aSAndroid Build Coastguard Worker           WORD32 tmp;
2182*15dc779aSAndroid Build Coastguard Worker           WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
2183*15dc779aSAndroid Build Coastguard Worker 
2184*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2185*15dc779aSAndroid Build Coastguard Worker 
2186*15dc779aSAndroid Build Coastguard Worker           x1r = *data;
2187*15dc779aSAndroid Build Coastguard Worker           x1i = *(data + 1);
2188*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2189*15dc779aSAndroid Build Coastguard Worker 
2190*15dc779aSAndroid Build Coastguard Worker           x2r = *data;
2191*15dc779aSAndroid Build Coastguard Worker           x2i = *(data + 1);
2192*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2193*15dc779aSAndroid Build Coastguard Worker 
2194*15dc779aSAndroid Build Coastguard Worker           x3r = *data;
2195*15dc779aSAndroid Build Coastguard Worker           x3i = *(data + 1);
2196*15dc779aSAndroid Build Coastguard Worker           data -= 3 * (del << 1);
2197*15dc779aSAndroid Build Coastguard Worker 
2198*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x1r, w1l),
2199*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x1i, w1h));
2200*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaacd_mac32_sat(-ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
2201*15dc779aSAndroid Build Coastguard Worker           x1r = tmp;
2202*15dc779aSAndroid Build Coastguard Worker 
2203*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x2r, w2l),
2204*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2h));
2205*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaacd_mac32_sat(-ixheaacd_mult32_sat(x2r, w2h), x2i, w2l);
2206*15dc779aSAndroid Build Coastguard Worker           x2r = tmp;
2207*15dc779aSAndroid Build Coastguard Worker 
2208*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x3r, w3h),
2209*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3i, w3l));
2210*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_add32_sat(ixheaacd_mult32_sat(x3r, w3l),
2211*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3i, w3h));
2212*15dc779aSAndroid Build Coastguard Worker           x3r = tmp;
2213*15dc779aSAndroid Build Coastguard Worker 
2214*15dc779aSAndroid Build Coastguard Worker           x0r = (*data);
2215*15dc779aSAndroid Build Coastguard Worker           x0i = (*(data + 1));
2216*15dc779aSAndroid Build Coastguard Worker 
2217*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x2r);
2218*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x2i);
2219*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
2220*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
2221*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_add32_sat(x1r, x3r);
2222*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_add32_sat(x1i, x3i);
2223*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
2224*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
2225*15dc779aSAndroid Build Coastguard Worker 
2226*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x1r);
2227*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x1i);
2228*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
2229*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
2230*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x2r, x3i);
2231*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_add32_sat(x2i, x3r);
2232*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_add32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
2233*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
2234*15dc779aSAndroid Build Coastguard Worker 
2235*15dc779aSAndroid Build Coastguard Worker           *data = x0r;
2236*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x0i;
2237*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2238*15dc779aSAndroid Build Coastguard Worker 
2239*15dc779aSAndroid Build Coastguard Worker           *data = x2r;
2240*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x2i;
2241*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2242*15dc779aSAndroid Build Coastguard Worker 
2243*15dc779aSAndroid Build Coastguard Worker           *data = x1r;
2244*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x1i;
2245*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2246*15dc779aSAndroid Build Coastguard Worker 
2247*15dc779aSAndroid Build Coastguard Worker           *data = x3i;
2248*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x3r;
2249*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2250*15dc779aSAndroid Build Coastguard Worker         }
2251*15dc779aSAndroid Build Coastguard Worker         data -= 2 * npoints;
2252*15dc779aSAndroid Build Coastguard Worker         data += 2;
2253*15dc779aSAndroid Build Coastguard Worker       }
2254*15dc779aSAndroid Build Coastguard Worker       for (; j <= sec_loop_cnt * 2; j += nodespacing) {
2255*15dc779aSAndroid Build Coastguard Worker         w1h = *(twiddles + 2 * j);
2256*15dc779aSAndroid Build Coastguard Worker         w2h = *(twiddles + 2 * (j << 1) - 512);
2257*15dc779aSAndroid Build Coastguard Worker         w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512);
2258*15dc779aSAndroid Build Coastguard Worker         w1l = *(twiddles + 2 * j + 1);
2259*15dc779aSAndroid Build Coastguard Worker         w2l = *(twiddles + 2 * (j << 1) - 511);
2260*15dc779aSAndroid Build Coastguard Worker         w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511);
2261*15dc779aSAndroid Build Coastguard Worker 
2262*15dc779aSAndroid Build Coastguard Worker         for (k = in_loop_cnt; k != 0; k--) {
2263*15dc779aSAndroid Build Coastguard Worker           WORD32 tmp;
2264*15dc779aSAndroid Build Coastguard Worker           WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
2265*15dc779aSAndroid Build Coastguard Worker 
2266*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2267*15dc779aSAndroid Build Coastguard Worker 
2268*15dc779aSAndroid Build Coastguard Worker           x1r = *data;
2269*15dc779aSAndroid Build Coastguard Worker           x1i = *(data + 1);
2270*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2271*15dc779aSAndroid Build Coastguard Worker 
2272*15dc779aSAndroid Build Coastguard Worker           x2r = *data;
2273*15dc779aSAndroid Build Coastguard Worker           x2i = *(data + 1);
2274*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2275*15dc779aSAndroid Build Coastguard Worker 
2276*15dc779aSAndroid Build Coastguard Worker           x3r = *data;
2277*15dc779aSAndroid Build Coastguard Worker           x3i = *(data + 1);
2278*15dc779aSAndroid Build Coastguard Worker           data -= 3 * (del << 1);
2279*15dc779aSAndroid Build Coastguard Worker 
2280*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x1r, w1l),
2281*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x1i, w1h));
2282*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaacd_mac32_sat(-ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
2283*15dc779aSAndroid Build Coastguard Worker           x1r = tmp;
2284*15dc779aSAndroid Build Coastguard Worker 
2285*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x2r, w2h),
2286*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2l));
2287*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_add32_sat(ixheaacd_mult32_sat(x2r, w2l),
2288*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2h));
2289*15dc779aSAndroid Build Coastguard Worker           x2r = tmp;
2290*15dc779aSAndroid Build Coastguard Worker 
2291*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x3r, w3h),
2292*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3i, w3l));
2293*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_add32_sat(ixheaacd_mult32_sat(x3r, w3l),
2294*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x3i, w3h));
2295*15dc779aSAndroid Build Coastguard Worker           x3r = tmp;
2296*15dc779aSAndroid Build Coastguard Worker 
2297*15dc779aSAndroid Build Coastguard Worker           x0r = (*data);
2298*15dc779aSAndroid Build Coastguard Worker           x0i = (*(data + 1));
2299*15dc779aSAndroid Build Coastguard Worker 
2300*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x2r);
2301*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x2i);
2302*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
2303*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
2304*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_add32_sat(x1r, x3r);
2305*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_add32_sat(x1i, x3i);
2306*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
2307*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_sub32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
2308*15dc779aSAndroid Build Coastguard Worker 
2309*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x1r);
2310*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x1i);
2311*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
2312*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
2313*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x2r, x3i);
2314*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_add32_sat(x2i, x3r);
2315*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_add32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
2316*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
2317*15dc779aSAndroid Build Coastguard Worker 
2318*15dc779aSAndroid Build Coastguard Worker           *data = x0r;
2319*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x0i;
2320*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2321*15dc779aSAndroid Build Coastguard Worker 
2322*15dc779aSAndroid Build Coastguard Worker           *data = x2r;
2323*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x2i;
2324*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2325*15dc779aSAndroid Build Coastguard Worker 
2326*15dc779aSAndroid Build Coastguard Worker           *data = x1r;
2327*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x1i;
2328*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2329*15dc779aSAndroid Build Coastguard Worker 
2330*15dc779aSAndroid Build Coastguard Worker           *data = x3i;
2331*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x3r;
2332*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2333*15dc779aSAndroid Build Coastguard Worker         }
2334*15dc779aSAndroid Build Coastguard Worker         data -= 2 * npoints;
2335*15dc779aSAndroid Build Coastguard Worker         data += 2;
2336*15dc779aSAndroid Build Coastguard Worker       }
2337*15dc779aSAndroid Build Coastguard Worker       for (; j < nodespacing * del; j += nodespacing) {
2338*15dc779aSAndroid Build Coastguard Worker         w1h = *(twiddles + 2 * j);
2339*15dc779aSAndroid Build Coastguard Worker         w2h = *(twiddles + 2 * (j << 1) - 512);
2340*15dc779aSAndroid Build Coastguard Worker         w3h = *(twiddles + 2 * j + 2 * (j << 1) - 1024);
2341*15dc779aSAndroid Build Coastguard Worker         w1l = *(twiddles + 2 * j + 1);
2342*15dc779aSAndroid Build Coastguard Worker         w2l = *(twiddles + 2 * (j << 1) - 511);
2343*15dc779aSAndroid Build Coastguard Worker         w3l = *(twiddles + 2 * j + 2 * (j << 1) - 1023);
2344*15dc779aSAndroid Build Coastguard Worker 
2345*15dc779aSAndroid Build Coastguard Worker         for (k = in_loop_cnt; k != 0; k--) {
2346*15dc779aSAndroid Build Coastguard Worker           WORD32 tmp;
2347*15dc779aSAndroid Build Coastguard Worker           WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
2348*15dc779aSAndroid Build Coastguard Worker 
2349*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2350*15dc779aSAndroid Build Coastguard Worker 
2351*15dc779aSAndroid Build Coastguard Worker           x1r = *data;
2352*15dc779aSAndroid Build Coastguard Worker           x1i = *(data + 1);
2353*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2354*15dc779aSAndroid Build Coastguard Worker 
2355*15dc779aSAndroid Build Coastguard Worker           x2r = *data;
2356*15dc779aSAndroid Build Coastguard Worker           x2i = *(data + 1);
2357*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2358*15dc779aSAndroid Build Coastguard Worker 
2359*15dc779aSAndroid Build Coastguard Worker           x3r = *data;
2360*15dc779aSAndroid Build Coastguard Worker           x3i = *(data + 1);
2361*15dc779aSAndroid Build Coastguard Worker           data -= 3 * (del << 1);
2362*15dc779aSAndroid Build Coastguard Worker 
2363*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x1r, w1l),
2364*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x1i, w1h));
2365*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaacd_mac32_sat(-ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
2366*15dc779aSAndroid Build Coastguard Worker           x1r = tmp;
2367*15dc779aSAndroid Build Coastguard Worker 
2368*15dc779aSAndroid Build Coastguard Worker           tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x2r, w2h),
2369*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2l));
2370*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_add32_sat(ixheaacd_mult32_sat(x2r, w2l),
2371*15dc779aSAndroid Build Coastguard Worker                                    ixheaacd_mult32_sat(x2i, w2h));
2372*15dc779aSAndroid Build Coastguard Worker           x2r = tmp;
2373*15dc779aSAndroid Build Coastguard Worker 
2374*15dc779aSAndroid Build Coastguard Worker           tmp = -ixheaac_add32_sat(ixheaacd_mult32_sat(x3r, w3l),
2375*15dc779aSAndroid Build Coastguard Worker                                     ixheaacd_mult32_sat(x3i, w3h));
2376*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaacd_mac32_sat(-ixheaacd_mult32_sat(x3r, w3h), x3i, w3l);
2377*15dc779aSAndroid Build Coastguard Worker           x3r = tmp;
2378*15dc779aSAndroid Build Coastguard Worker 
2379*15dc779aSAndroid Build Coastguard Worker           x0r = (*data);
2380*15dc779aSAndroid Build Coastguard Worker           x0i = (*(data + 1));
2381*15dc779aSAndroid Build Coastguard Worker 
2382*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x2r);
2383*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x2i);
2384*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x2r, 1));
2385*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x2i, 1));
2386*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_add32_sat(x1r, x3r);
2387*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x1i, x3i);
2388*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x1r, ixheaac_shl32_sat(x3r, 1));
2389*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_add32_sat(x1i, ixheaac_shl32_sat(x3i, 1));
2390*15dc779aSAndroid Build Coastguard Worker 
2391*15dc779aSAndroid Build Coastguard Worker           x0r = ixheaac_add32_sat(x0r, x1r);
2392*15dc779aSAndroid Build Coastguard Worker           x0i = ixheaac_add32_sat(x0i, x1i);
2393*15dc779aSAndroid Build Coastguard Worker           x1r = ixheaac_sub32_sat(x0r, ixheaac_shl32_sat(x1r, 1));
2394*15dc779aSAndroid Build Coastguard Worker           x1i = ixheaac_sub32_sat(x0i, ixheaac_shl32_sat(x1i, 1));
2395*15dc779aSAndroid Build Coastguard Worker           x2r = ixheaac_sub32_sat(x2r, x3i);
2396*15dc779aSAndroid Build Coastguard Worker           x2i = ixheaac_add32_sat(x2i, x3r);
2397*15dc779aSAndroid Build Coastguard Worker           x3i = ixheaac_add32_sat(x2r, ixheaac_shl32_sat(x3i, 1));
2398*15dc779aSAndroid Build Coastguard Worker           x3r = ixheaac_sub32_sat(x2i, ixheaac_shl32_sat(x3r, 1));
2399*15dc779aSAndroid Build Coastguard Worker 
2400*15dc779aSAndroid Build Coastguard Worker           *data = x0r;
2401*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x0i;
2402*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2403*15dc779aSAndroid Build Coastguard Worker 
2404*15dc779aSAndroid Build Coastguard Worker           *data = x2r;
2405*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x2i;
2406*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2407*15dc779aSAndroid Build Coastguard Worker 
2408*15dc779aSAndroid Build Coastguard Worker           *data = x1r;
2409*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x1i;
2410*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2411*15dc779aSAndroid Build Coastguard Worker 
2412*15dc779aSAndroid Build Coastguard Worker           *data = x3i;
2413*15dc779aSAndroid Build Coastguard Worker           *(data + 1) = x3r;
2414*15dc779aSAndroid Build Coastguard Worker           data += (del << 1);
2415*15dc779aSAndroid Build Coastguard Worker         }
2416*15dc779aSAndroid Build Coastguard Worker         data -= 2 * npoints;
2417*15dc779aSAndroid Build Coastguard Worker         data += 2;
2418*15dc779aSAndroid Build Coastguard Worker       }
2419*15dc779aSAndroid Build Coastguard Worker       nodespacing >>= 2;
2420*15dc779aSAndroid Build Coastguard Worker       del <<= 2;
2421*15dc779aSAndroid Build Coastguard Worker       in_loop_cnt >>= 2;
2422*15dc779aSAndroid Build Coastguard Worker     }
2423*15dc779aSAndroid Build Coastguard Worker     if (not_power_4) {
2424*15dc779aSAndroid Build Coastguard Worker       const WORD32 *twiddles = ptr_w;
2425*15dc779aSAndroid Build Coastguard Worker       nodespacing <<= 1;
2426*15dc779aSAndroid Build Coastguard Worker       shift += 1;
2427*15dc779aSAndroid Build Coastguard Worker       for (j = del / 2; j != 0; j--) {
2428*15dc779aSAndroid Build Coastguard Worker         WORD32 w1h = *twiddles;
2429*15dc779aSAndroid Build Coastguard Worker         WORD32 w1l = *(twiddles + 1);
2430*15dc779aSAndroid Build Coastguard Worker 
2431*15dc779aSAndroid Build Coastguard Worker         WORD32 tmp;
2432*15dc779aSAndroid Build Coastguard Worker         twiddles += nodespacing * 2;
2433*15dc779aSAndroid Build Coastguard Worker 
2434*15dc779aSAndroid Build Coastguard Worker         x0r = *ptr_y;
2435*15dc779aSAndroid Build Coastguard Worker         x0i = *(ptr_y + 1);
2436*15dc779aSAndroid Build Coastguard Worker         ptr_y += (del << 1);
2437*15dc779aSAndroid Build Coastguard Worker 
2438*15dc779aSAndroid Build Coastguard Worker         x1r = *ptr_y;
2439*15dc779aSAndroid Build Coastguard Worker         x1i = *(ptr_y + 1);
2440*15dc779aSAndroid Build Coastguard Worker 
2441*15dc779aSAndroid Build Coastguard Worker         tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(x1r, w1l),
2442*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(x1i, w1h));
2443*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaacd_mac32_sat(-ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
2444*15dc779aSAndroid Build Coastguard Worker         x1r = tmp;
2445*15dc779aSAndroid Build Coastguard Worker 
2446*15dc779aSAndroid Build Coastguard Worker         *ptr_y = (x0r) / 2 - (x1r) / 2;
2447*15dc779aSAndroid Build Coastguard Worker         *(ptr_y + 1) = (x0i) / 2 - (x1i) / 2;
2448*15dc779aSAndroid Build Coastguard Worker         ptr_y -= (del << 1);
2449*15dc779aSAndroid Build Coastguard Worker 
2450*15dc779aSAndroid Build Coastguard Worker         *ptr_y = (x0r) / 2 + (x1r) / 2;
2451*15dc779aSAndroid Build Coastguard Worker         *(ptr_y + 1) = (x0i) / 2 + (x1i) / 2;
2452*15dc779aSAndroid Build Coastguard Worker         ptr_y += 2;
2453*15dc779aSAndroid Build Coastguard Worker       }
2454*15dc779aSAndroid Build Coastguard Worker       twiddles = ptr_w;
2455*15dc779aSAndroid Build Coastguard Worker       for (j = del / 2; j != 0; j--) {
2456*15dc779aSAndroid Build Coastguard Worker         WORD32 w1h = *twiddles;
2457*15dc779aSAndroid Build Coastguard Worker         WORD32 w1l = *(twiddles + 1);
2458*15dc779aSAndroid Build Coastguard Worker         WORD32 tmp;
2459*15dc779aSAndroid Build Coastguard Worker         twiddles += nodespacing * 2;
2460*15dc779aSAndroid Build Coastguard Worker 
2461*15dc779aSAndroid Build Coastguard Worker         x0r = *ptr_y;
2462*15dc779aSAndroid Build Coastguard Worker         x0i = *(ptr_y + 1);
2463*15dc779aSAndroid Build Coastguard Worker         ptr_y += (del << 1);
2464*15dc779aSAndroid Build Coastguard Worker 
2465*15dc779aSAndroid Build Coastguard Worker         x1r = *ptr_y;
2466*15dc779aSAndroid Build Coastguard Worker         x1i = *(ptr_y + 1);
2467*15dc779aSAndroid Build Coastguard Worker 
2468*15dc779aSAndroid Build Coastguard Worker         tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(x1r, w1h),
2469*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(x1i, w1l));
2470*15dc779aSAndroid Build Coastguard Worker         x1i = ixheaac_add32_sat(ixheaacd_mult32_sat(x1r, w1l),
2471*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(x1i, w1h));
2472*15dc779aSAndroid Build Coastguard Worker         x1r = tmp;
2473*15dc779aSAndroid Build Coastguard Worker 
2474*15dc779aSAndroid Build Coastguard Worker         *ptr_y = (x0r) / 2 - (x1r) / 2;
2475*15dc779aSAndroid Build Coastguard Worker         *(ptr_y + 1) = (x0i) / 2 - (x1i) / 2;
2476*15dc779aSAndroid Build Coastguard Worker         ptr_y -= (del << 1);
2477*15dc779aSAndroid Build Coastguard Worker 
2478*15dc779aSAndroid Build Coastguard Worker         *ptr_y = (x0r) / 2 + (x1r) / 2;
2479*15dc779aSAndroid Build Coastguard Worker         *(ptr_y + 1) = (x0i) / 2 + (x1i) / 2;
2480*15dc779aSAndroid Build Coastguard Worker         ptr_y += 2;
2481*15dc779aSAndroid Build Coastguard Worker       }
2482*15dc779aSAndroid Build Coastguard Worker     }
2483*15dc779aSAndroid Build Coastguard Worker   }
2484*15dc779aSAndroid Build Coastguard Worker 
2485*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < nlength; i++) {
2486*15dc779aSAndroid Build Coastguard Worker     xr[i] = y[2 * i];
2487*15dc779aSAndroid Build Coastguard Worker     xi[i] = y[2 * i + 1];
2488*15dc779aSAndroid Build Coastguard Worker   }
2489*15dc779aSAndroid Build Coastguard Worker 
2490*15dc779aSAndroid Build Coastguard Worker   *preshift = shift - *preshift;
2491*15dc779aSAndroid Build Coastguard Worker   return;
2492*15dc779aSAndroid Build Coastguard Worker }
2493*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_complex_3point_fft(WORD32 * inp,WORD32 * op,WORD32 sign_dir)2494*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE void ixheaacd_complex_3point_fft(WORD32 *inp, WORD32 *op,
2495*15dc779aSAndroid Build Coastguard Worker                                                         WORD32 sign_dir) {
2496*15dc779aSAndroid Build Coastguard Worker   WORD32 add_r, sub_r;
2497*15dc779aSAndroid Build Coastguard Worker   WORD32 add_i, sub_i;
2498*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_real, temp_imag, temp;
2499*15dc779aSAndroid Build Coastguard Worker 
2500*15dc779aSAndroid Build Coastguard Worker   WORD32 p1, p2, p3, p4;
2501*15dc779aSAndroid Build Coastguard Worker 
2502*15dc779aSAndroid Build Coastguard Worker   WORD32 sinmu;
2503*15dc779aSAndroid Build Coastguard Worker   sinmu = -1859775393 * sign_dir;
2504*15dc779aSAndroid Build Coastguard Worker 
2505*15dc779aSAndroid Build Coastguard Worker   temp_real = ixheaac_add32_sat(inp[0], inp[2]);
2506*15dc779aSAndroid Build Coastguard Worker   temp_imag = ixheaac_add32_sat(inp[1], inp[3]);
2507*15dc779aSAndroid Build Coastguard Worker 
2508*15dc779aSAndroid Build Coastguard Worker   add_r = ixheaac_add32_sat(inp[2], inp[4]);
2509*15dc779aSAndroid Build Coastguard Worker   add_i = ixheaac_add32_sat(inp[3], inp[5]);
2510*15dc779aSAndroid Build Coastguard Worker 
2511*15dc779aSAndroid Build Coastguard Worker   sub_r = ixheaac_sub32_sat(inp[2], inp[4]);
2512*15dc779aSAndroid Build Coastguard Worker   sub_i = ixheaac_sub32_sat(inp[3], inp[5]);
2513*15dc779aSAndroid Build Coastguard Worker 
2514*15dc779aSAndroid Build Coastguard Worker   p1 = add_r >> 1;
2515*15dc779aSAndroid Build Coastguard Worker   p4 = add_i >> 1;
2516*15dc779aSAndroid Build Coastguard Worker   p2 = ixheaac_mult32_shl(sub_i, sinmu);
2517*15dc779aSAndroid Build Coastguard Worker   p3 = ixheaac_mult32_shl(sub_r, sinmu);
2518*15dc779aSAndroid Build Coastguard Worker 
2519*15dc779aSAndroid Build Coastguard Worker   temp = ixheaac_sub32(inp[0], p1);
2520*15dc779aSAndroid Build Coastguard Worker 
2521*15dc779aSAndroid Build Coastguard Worker   op[0] = ixheaac_add32_sat(temp_real, inp[4]);
2522*15dc779aSAndroid Build Coastguard Worker   op[1] = ixheaac_add32_sat(temp_imag, inp[5]);
2523*15dc779aSAndroid Build Coastguard Worker   op[2] = ixheaac_add32_sat(temp, p2);
2524*15dc779aSAndroid Build Coastguard Worker   op[3] = ixheaac_sub32_sat(ixheaac_sub32_sat(inp[1], p3), p4);
2525*15dc779aSAndroid Build Coastguard Worker   op[4] = ixheaac_sub32_sat(temp, p2);
2526*15dc779aSAndroid Build Coastguard Worker   op[5] = ixheaac_sub32_sat(ixheaac_add32_sat(inp[1], p3), p4);
2527*15dc779aSAndroid Build Coastguard Worker 
2528*15dc779aSAndroid Build Coastguard Worker   return;
2529*15dc779aSAndroid Build Coastguard Worker }
2530*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_complex_fft_p3(WORD32 * xr,WORD32 * xi,WORD32 nlength,WORD32 fft_mode,WORD32 * preshift)2531*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_complex_fft_p3(WORD32 *xr, WORD32 *xi, WORD32 nlength,
2532*15dc779aSAndroid Build Coastguard Worker                              WORD32 fft_mode, WORD32 *preshift) {
2533*15dc779aSAndroid Build Coastguard Worker   WORD32 i, j;
2534*15dc779aSAndroid Build Coastguard Worker   WORD32 shift = 0;
2535*15dc779aSAndroid Build Coastguard Worker   WORD32 xr_3[384];
2536*15dc779aSAndroid Build Coastguard Worker   WORD32 xi_3[384];
2537*15dc779aSAndroid Build Coastguard Worker   WORD32 x[1024];
2538*15dc779aSAndroid Build Coastguard Worker   WORD32 y[1024];
2539*15dc779aSAndroid Build Coastguard Worker   WORD32 cnfac, npts;
2540*15dc779aSAndroid Build Coastguard Worker   WORD32 mpass = nlength;
2541*15dc779aSAndroid Build Coastguard Worker   WORD32 n = 0;
2542*15dc779aSAndroid Build Coastguard Worker   WORD32 *ptr_x = x;
2543*15dc779aSAndroid Build Coastguard Worker   WORD32 *ptr_y = y;
2544*15dc779aSAndroid Build Coastguard Worker 
2545*15dc779aSAndroid Build Coastguard Worker   cnfac = 0;
2546*15dc779aSAndroid Build Coastguard Worker   while (mpass % 3 == 0) {
2547*15dc779aSAndroid Build Coastguard Worker     mpass /= 3;
2548*15dc779aSAndroid Build Coastguard Worker     cnfac++;
2549*15dc779aSAndroid Build Coastguard Worker   }
2550*15dc779aSAndroid Build Coastguard Worker   npts = mpass;
2551*15dc779aSAndroid Build Coastguard Worker 
2552*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < 3 * cnfac; i++) {
2553*15dc779aSAndroid Build Coastguard Worker     for (j = 0; j < mpass; j++) {
2554*15dc779aSAndroid Build Coastguard Worker       xr_3[j] = xr[3 * j + i];
2555*15dc779aSAndroid Build Coastguard Worker       xi_3[j] = xi[3 * j + i];
2556*15dc779aSAndroid Build Coastguard Worker     }
2557*15dc779aSAndroid Build Coastguard Worker 
2558*15dc779aSAndroid Build Coastguard Worker     (*ixheaacd_complex_fft_p2)(xr_3, xi_3, mpass, fft_mode, &shift);
2559*15dc779aSAndroid Build Coastguard Worker 
2560*15dc779aSAndroid Build Coastguard Worker     for (j = 0; j < mpass; j++) {
2561*15dc779aSAndroid Build Coastguard Worker       xr[3 * j + i] = xr_3[j];
2562*15dc779aSAndroid Build Coastguard Worker       xi[3 * j + i] = xi_3[j];
2563*15dc779aSAndroid Build Coastguard Worker     }
2564*15dc779aSAndroid Build Coastguard Worker   }
2565*15dc779aSAndroid Build Coastguard Worker 
2566*15dc779aSAndroid Build Coastguard Worker   while (npts >> 1) {
2567*15dc779aSAndroid Build Coastguard Worker     n++;
2568*15dc779aSAndroid Build Coastguard Worker     npts = npts >> 1;
2569*15dc779aSAndroid Build Coastguard Worker   }
2570*15dc779aSAndroid Build Coastguard Worker 
2571*15dc779aSAndroid Build Coastguard Worker   if (n % 2 == 0)
2572*15dc779aSAndroid Build Coastguard Worker     shift = ((n + 4)) / 2;
2573*15dc779aSAndroid Build Coastguard Worker   else
2574*15dc779aSAndroid Build Coastguard Worker     shift = ((n + 5) / 2);
2575*15dc779aSAndroid Build Coastguard Worker 
2576*15dc779aSAndroid Build Coastguard Worker   *preshift = shift - *preshift + 1;
2577*15dc779aSAndroid Build Coastguard Worker 
2578*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < nlength; i++) {
2579*15dc779aSAndroid Build Coastguard Worker     ptr_x[2 * i] = (xr[i] >> 1);
2580*15dc779aSAndroid Build Coastguard Worker     ptr_x[2 * i + 1] = (xi[i] >> 1);
2581*15dc779aSAndroid Build Coastguard Worker   }
2582*15dc779aSAndroid Build Coastguard Worker 
2583*15dc779aSAndroid Build Coastguard Worker   {
2584*15dc779aSAndroid Build Coastguard Worker     const WORD32 *w1r, *w1i;
2585*15dc779aSAndroid Build Coastguard Worker     WORD32 tmp;
2586*15dc779aSAndroid Build Coastguard Worker     w1r = ixheaacd_twiddle_table_3pr;
2587*15dc779aSAndroid Build Coastguard Worker     w1i = ixheaacd_twiddle_table_3pi;
2588*15dc779aSAndroid Build Coastguard Worker 
2589*15dc779aSAndroid Build Coastguard Worker     if (fft_mode < 0) {
2590*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < nlength; i += 3) {
2591*15dc779aSAndroid Build Coastguard Worker         w1r++;
2592*15dc779aSAndroid Build Coastguard Worker         w1i++;
2593*15dc779aSAndroid Build Coastguard Worker 
2594*15dc779aSAndroid Build Coastguard Worker         tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(ptr_x[2 * i + 2], (*w1r)),
2595*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(ptr_x[2 * i + 3], (*w1i)));
2596*15dc779aSAndroid Build Coastguard Worker         ptr_x[2 * i + 3] =
2597*15dc779aSAndroid Build Coastguard Worker             ixheaac_add32_sat(ixheaacd_mult32_sat(ptr_x[2 * i + 2], (*w1i)),
2598*15dc779aSAndroid Build Coastguard Worker                                ixheaacd_mult32_sat(ptr_x[2 * i + 3], (*w1r)));
2599*15dc779aSAndroid Build Coastguard Worker         ptr_x[2 * i + 2] = tmp;
2600*15dc779aSAndroid Build Coastguard Worker 
2601*15dc779aSAndroid Build Coastguard Worker         w1r++;
2602*15dc779aSAndroid Build Coastguard Worker         w1i++;
2603*15dc779aSAndroid Build Coastguard Worker 
2604*15dc779aSAndroid Build Coastguard Worker         tmp = ixheaac_sub32_sat(ixheaacd_mult32_sat(ptr_x[2 * i + 4], (*w1r)),
2605*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(ptr_x[2 * i + 5], (*w1i)));
2606*15dc779aSAndroid Build Coastguard Worker         ptr_x[2 * i + 5] =
2607*15dc779aSAndroid Build Coastguard Worker             ixheaac_add32_sat(ixheaacd_mult32_sat(ptr_x[2 * i + 4], (*w1i)),
2608*15dc779aSAndroid Build Coastguard Worker                                ixheaacd_mult32_sat(ptr_x[2 * i + 5], (*w1r)));
2609*15dc779aSAndroid Build Coastguard Worker         ptr_x[2 * i + 4] = tmp;
2610*15dc779aSAndroid Build Coastguard Worker 
2611*15dc779aSAndroid Build Coastguard Worker         w1r += 3 * (128 / mpass - 1) + 1;
2612*15dc779aSAndroid Build Coastguard Worker         w1i += 3 * (128 / mpass - 1) + 1;
2613*15dc779aSAndroid Build Coastguard Worker       }
2614*15dc779aSAndroid Build Coastguard Worker     }
2615*15dc779aSAndroid Build Coastguard Worker 
2616*15dc779aSAndroid Build Coastguard Worker     else {
2617*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < nlength; i += 3) {
2618*15dc779aSAndroid Build Coastguard Worker         w1r++;
2619*15dc779aSAndroid Build Coastguard Worker         w1i++;
2620*15dc779aSAndroid Build Coastguard Worker 
2621*15dc779aSAndroid Build Coastguard Worker         tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(ptr_x[2 * i + 2], (*w1r)),
2622*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(ptr_x[2 * i + 3], (*w1i)));
2623*15dc779aSAndroid Build Coastguard Worker         ptr_x[2 * i + 3] =
2624*15dc779aSAndroid Build Coastguard Worker             ixheaac_sub32_sat(ixheaacd_mult32_sat(ptr_x[2 * i + 3], (*w1r)),
2625*15dc779aSAndroid Build Coastguard Worker                                ixheaacd_mult32_sat(ptr_x[2 * i + 2], (*w1i)));
2626*15dc779aSAndroid Build Coastguard Worker         ptr_x[2 * i + 2] = tmp;
2627*15dc779aSAndroid Build Coastguard Worker 
2628*15dc779aSAndroid Build Coastguard Worker         w1r++;
2629*15dc779aSAndroid Build Coastguard Worker         w1i++;
2630*15dc779aSAndroid Build Coastguard Worker 
2631*15dc779aSAndroid Build Coastguard Worker         tmp = ixheaac_add32_sat(ixheaacd_mult32_sat(ptr_x[2 * i + 4], (*w1r)),
2632*15dc779aSAndroid Build Coastguard Worker                                  ixheaacd_mult32_sat(ptr_x[2 * i + 5], (*w1i)));
2633*15dc779aSAndroid Build Coastguard Worker         ptr_x[2 * i + 5] =
2634*15dc779aSAndroid Build Coastguard Worker             ixheaac_sub32_sat(ixheaacd_mult32_sat(ptr_x[2 * i + 5], (*w1r)),
2635*15dc779aSAndroid Build Coastguard Worker                                ixheaacd_mult32_sat(ptr_x[2 * i + 4], (*w1i)));
2636*15dc779aSAndroid Build Coastguard Worker         ptr_x[2 * i + 4] = tmp;
2637*15dc779aSAndroid Build Coastguard Worker 
2638*15dc779aSAndroid Build Coastguard Worker         w1r += 3 * (128 / mpass - 1) + 1;
2639*15dc779aSAndroid Build Coastguard Worker         w1i += 3 * (128 / mpass - 1) + 1;
2640*15dc779aSAndroid Build Coastguard Worker       }
2641*15dc779aSAndroid Build Coastguard Worker     }
2642*15dc779aSAndroid Build Coastguard Worker   }
2643*15dc779aSAndroid Build Coastguard Worker 
2644*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < mpass; i++) {
2645*15dc779aSAndroid Build Coastguard Worker     ixheaacd_complex_3point_fft(ptr_x, ptr_y, fft_mode);
2646*15dc779aSAndroid Build Coastguard Worker 
2647*15dc779aSAndroid Build Coastguard Worker     ptr_x = ptr_x + 6;
2648*15dc779aSAndroid Build Coastguard Worker     ptr_y = ptr_y + 6;
2649*15dc779aSAndroid Build Coastguard Worker   }
2650*15dc779aSAndroid Build Coastguard Worker 
2651*15dc779aSAndroid Build Coastguard Worker   ptr_y = y;
2652*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < mpass; i++) {
2653*15dc779aSAndroid Build Coastguard Worker     xr[i] = *ptr_y++;
2654*15dc779aSAndroid Build Coastguard Worker     xi[i] = *ptr_y++;
2655*15dc779aSAndroid Build Coastguard Worker     xr[mpass + i] = *ptr_y++;
2656*15dc779aSAndroid Build Coastguard Worker     xi[mpass + i] = *ptr_y++;
2657*15dc779aSAndroid Build Coastguard Worker     xr[2 * mpass + i] = *ptr_y++;
2658*15dc779aSAndroid Build Coastguard Worker     xi[2 * mpass + i] = *ptr_y++;
2659*15dc779aSAndroid Build Coastguard Worker   }
2660*15dc779aSAndroid Build Coastguard Worker 
2661*15dc779aSAndroid Build Coastguard Worker   return;
2662*15dc779aSAndroid Build Coastguard Worker }
2663*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_complex_fft(WORD32 * data_r,WORD32 * data_i,WORD32 nlength,WORD32 fft_mode,WORD32 * preshift)2664*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_complex_fft(WORD32 *data_r, WORD32 *data_i, WORD32 nlength, WORD32 fft_mode,
2665*15dc779aSAndroid Build Coastguard Worker                           WORD32 *preshift) {
2666*15dc779aSAndroid Build Coastguard Worker   if (nlength & (nlength - 1)) {
2667*15dc779aSAndroid Build Coastguard Worker     ixheaacd_complex_fft_p3(data_r, data_i, nlength, fft_mode, preshift);
2668*15dc779aSAndroid Build Coastguard Worker   } else
2669*15dc779aSAndroid Build Coastguard Worker     (*ixheaacd_complex_fft_p2)(data_r, data_i, nlength, fft_mode, preshift);
2670*15dc779aSAndroid Build Coastguard Worker 
2671*15dc779aSAndroid Build Coastguard Worker   return;
2672*15dc779aSAndroid Build Coastguard Worker }
2673