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 "ixheaacd_sbr_common.h"
21*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
22*15dc779aSAndroid Build Coastguard Worker
23*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops32.h"
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops16.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops40.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops.h"
28*15dc779aSAndroid Build Coastguard Worker
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_defines.h"
30*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_common_rom.h"
31*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_basic_funcs.h"
32*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_aac_rom.h"
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_aac_imdct.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_intrinsics.h"
35*15dc779aSAndroid Build Coastguard Worker
36*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_op.h"
37*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_function_selector.h"
38*15dc779aSAndroid Build Coastguard Worker
39*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_audioobjtypes.h"
40*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_tns.h"
41*15dc779aSAndroid Build Coastguard Worker
42*15dc779aSAndroid Build Coastguard Worker #define DIG_REV(i, m, j) \
43*15dc779aSAndroid Build Coastguard Worker do { \
44*15dc779aSAndroid Build Coastguard Worker unsigned _ = (i); \
45*15dc779aSAndroid Build Coastguard Worker _ = ((_ & 0x33333333) << 2) | ((_ & ~0x33333333) >> 2); \
46*15dc779aSAndroid Build Coastguard Worker _ = ((_ & 0x0F0F0F0F) << 4) | ((_ & ~0x0F0F0F0F) >> 4); \
47*15dc779aSAndroid Build Coastguard Worker _ = ((_ & 0x00FF00FF) << 8) | ((_ & ~0x00FF00FF) >> 8); \
48*15dc779aSAndroid Build Coastguard Worker _ = ((_ & 0x0000FFFF) << 16) | ((_ & ~0x0000FFFF) >> 16); \
49*15dc779aSAndroid Build Coastguard Worker (j) = _ >> (m); \
50*15dc779aSAndroid Build Coastguard Worker } while (0)
51*15dc779aSAndroid Build Coastguard Worker
52*15dc779aSAndroid Build Coastguard Worker #define MPYHIRC(x, y) \
53*15dc779aSAndroid Build Coastguard Worker \
54*15dc779aSAndroid Build Coastguard Worker (((WORD32)((WORD16)(x >> 16) * (UWORD16)(y & 0x0000FFFF) + 0x4000) >> \
55*15dc779aSAndroid Build Coastguard Worker 15) + \
56*15dc779aSAndroid Build Coastguard Worker ((WORD32)((WORD16)(x >> 16) * (WORD16)((y) >> 16)) << 1))
57*15dc779aSAndroid Build Coastguard Worker
58*15dc779aSAndroid Build Coastguard Worker #define MPYLUHS(x, y) \
59*15dc779aSAndroid Build Coastguard Worker ((WORD32)((UWORD16)(x & 0x0000FFFF) * (WORD16)(y >> 16)))
60*15dc779aSAndroid Build Coastguard Worker
61*15dc779aSAndroid Build Coastguard Worker #define MPYLIRC(x, y) \
62*15dc779aSAndroid Build Coastguard Worker (((WORD32)((WORD16)(x) * (UWORD16)(y & 0x0000FFFF) + 0x4000) >> 15)+ \
63*15dc779aSAndroid Build Coastguard Worker ((WORD32)((WORD16)(x) * (WORD16)((y) >> 16)) << 1))
64*15dc779aSAndroid Build Coastguard Worker
65*15dc779aSAndroid Build Coastguard Worker WORD32 rev_dig[] = { 0, 8, 2, 10 };
66*15dc779aSAndroid Build Coastguard Worker
67*15dc779aSAndroid Build Coastguard Worker #define MDCT_LEN 480
68*15dc779aSAndroid Build Coastguard Worker #define FFT15X2 30
69*15dc779aSAndroid Build Coastguard Worker #define MDCT_LEN_BY2 240
70*15dc779aSAndroid Build Coastguard Worker #define FFT5 5
71*15dc779aSAndroid Build Coastguard Worker #define FFT16 16
72*15dc779aSAndroid Build Coastguard Worker #define FFT4 4
73*15dc779aSAndroid Build Coastguard Worker #define FFT3 3
74*15dc779aSAndroid Build Coastguard Worker #define FFT15 15
75*15dc779aSAndroid Build Coastguard Worker #define FFT16X2 32
76*15dc779aSAndroid Build Coastguard Worker #define MDCT_LEN_960 960
77*15dc779aSAndroid Build Coastguard Worker
78*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_fft5out[FFT15X2];
79*15dc779aSAndroid Build Coastguard Worker
ixheaacd_mult32x16lin32(WORD32 a,WORD32 b)80*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD32 ixheaacd_mult32x16lin32(WORD32 a, WORD32 b) {
81*15dc779aSAndroid Build Coastguard Worker WORD32 result;
82*15dc779aSAndroid Build Coastguard Worker WORD64 temp_result;
83*15dc779aSAndroid Build Coastguard Worker temp_result = (WORD64)a * (WORD64)(((b & 0xFFFF) << 16) >> 16);
84*15dc779aSAndroid Build Coastguard Worker result = (WORD32)(temp_result >> 16);
85*15dc779aSAndroid Build Coastguard Worker return (result);
86*15dc779aSAndroid Build Coastguard Worker }
87*15dc779aSAndroid Build Coastguard Worker
ixheaacd_mac32x16lin32(WORD32 a,WORD32 b,WORD32 c)88*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD32 ixheaacd_mac32x16lin32(WORD32 a, WORD32 b,
89*15dc779aSAndroid Build Coastguard Worker WORD32 c) {
90*15dc779aSAndroid Build Coastguard Worker WORD32 result;
91*15dc779aSAndroid Build Coastguard Worker result = a + ixheaacd_mult32x16lin32(b, c);
92*15dc779aSAndroid Build Coastguard Worker return (result);
93*15dc779aSAndroid Build Coastguard Worker }
94*15dc779aSAndroid Build Coastguard Worker
ixheaacd_mult32x16lin32_sat(WORD32 a,WORD32 b)95*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD32 ixheaacd_mult32x16lin32_sat(WORD32 a, WORD32 b) {
96*15dc779aSAndroid Build Coastguard Worker WORD32 result;
97*15dc779aSAndroid Build Coastguard Worker WORD64 temp_result;
98*15dc779aSAndroid Build Coastguard Worker temp_result = (WORD64)a * (WORD64)(((b & 0xFFFF) << 16) >> 16);
99*15dc779aSAndroid Build Coastguard Worker if (temp_result < (WORD64)MIN_32)
100*15dc779aSAndroid Build Coastguard Worker result = MIN_32;
101*15dc779aSAndroid Build Coastguard Worker else if (temp_result > (WORD64)MAX_32)
102*15dc779aSAndroid Build Coastguard Worker result = MAX_32;
103*15dc779aSAndroid Build Coastguard Worker else
104*15dc779aSAndroid Build Coastguard Worker result = (WORD32)(temp_result);
105*15dc779aSAndroid Build Coastguard Worker return (result);
106*15dc779aSAndroid Build Coastguard Worker }
107*15dc779aSAndroid Build Coastguard Worker
ixheaacd_neg_expo_inc_dec(WORD16 neg_expo)108*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_neg_expo_inc_dec(WORD16 neg_expo) { return (neg_expo + 2); }
109*15dc779aSAndroid Build Coastguard Worker
ixheaacd_neg_expo_inc_arm(WORD16 neg_expo)110*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_neg_expo_inc_arm(WORD16 neg_expo) { return (neg_expo + 3); }
111*15dc779aSAndroid Build Coastguard Worker
ixheaacd_pretwiddle_compute_960_dec(WORD32 * spec_data1,WORD32 * spec_data2,WORD32 * out_ptr,ia_aac_dec_imdct_tables_struct * ptr_imdct_tables,WORD npoints4,WORD32 neg_expo)112*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pretwiddle_compute_960_dec(
113*15dc779aSAndroid Build Coastguard Worker WORD32 *spec_data1, WORD32 *spec_data2, WORD32 *out_ptr,
114*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints4,
115*15dc779aSAndroid Build Coastguard Worker WORD32 neg_expo) {
116*15dc779aSAndroid Build Coastguard Worker
117*15dc779aSAndroid Build Coastguard Worker WORD32 i;
118*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi;
119*15dc779aSAndroid Build Coastguard Worker
120*15dc779aSAndroid Build Coastguard Worker WORD16 c, c1, s, s1;
121*15dc779aSAndroid Build Coastguard Worker WORD32 *out_ptr1 = out_ptr + ((npoints4 << 2) - 1);
122*15dc779aSAndroid Build Coastguard Worker const WORD16 *cos_sin_ptr = ptr_imdct_tables->cosine_array_240;
123*15dc779aSAndroid Build Coastguard Worker
124*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < npoints4; i++) {
125*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
126*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
127*15dc779aSAndroid Build Coastguard Worker
128*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data1++;
129*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data2--;
130*15dc779aSAndroid Build Coastguard Worker
131*15dc779aSAndroid Build Coastguard Worker *out_ptr =
132*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, c), tempi, s);
133*15dc779aSAndroid Build Coastguard Worker
134*15dc779aSAndroid Build Coastguard Worker
135*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shl32(*out_ptr, neg_expo);
136*15dc779aSAndroid Build Coastguard Worker out_ptr++;
137*15dc779aSAndroid Build Coastguard Worker
138*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_sub32(ixheaac_mult32x16in32(tempi, c),
139*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr, s));
140*15dc779aSAndroid Build Coastguard Worker
141*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shl32(*out_ptr, neg_expo);
142*15dc779aSAndroid Build Coastguard Worker out_ptr++;
143*15dc779aSAndroid Build Coastguard Worker
144*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
145*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
146*15dc779aSAndroid Build Coastguard Worker
147*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data1++;
148*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data2--;
149*15dc779aSAndroid Build Coastguard Worker
150*15dc779aSAndroid Build Coastguard Worker
151*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_sub32(ixheaac_mult32x16in32(tempi, c1),
152*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr, s1));
153*15dc779aSAndroid Build Coastguard Worker
154*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shl32(*out_ptr1, neg_expo);
155*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
156*15dc779aSAndroid Build Coastguard Worker
157*15dc779aSAndroid Build Coastguard Worker *out_ptr1 =
158*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, c1), tempi, s1);
159*15dc779aSAndroid Build Coastguard Worker
160*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shl32(*out_ptr1, neg_expo);
161*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
162*15dc779aSAndroid Build Coastguard Worker }
163*15dc779aSAndroid Build Coastguard Worker }
164*15dc779aSAndroid Build Coastguard Worker
ixheaacd_pretwiddle_compute_dec(WORD32 * spec_data1,WORD32 * spec_data2,WORD32 * out_ptr,ia_aac_dec_imdct_tables_struct * ptr_imdct_tables,WORD npoints4,WORD32 neg_expo)165*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pretwiddle_compute_dec(
166*15dc779aSAndroid Build Coastguard Worker WORD32 *spec_data1, WORD32 *spec_data2, WORD32 *out_ptr,
167*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints4,
168*15dc779aSAndroid Build Coastguard Worker WORD32 neg_expo) {
169*15dc779aSAndroid Build Coastguard Worker WORD32 i;
170*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi;
171*15dc779aSAndroid Build Coastguard Worker WORD32 tempr1, tempi1;
172*15dc779aSAndroid Build Coastguard Worker WORD32 npoints2 = npoints4 * 2;
173*15dc779aSAndroid Build Coastguard Worker WORD32 *out_ptr1 = out_ptr + (npoints2 << 1) - 1;
174*15dc779aSAndroid Build Coastguard Worker const WORD16 *cos_sin_ptr = ptr_imdct_tables->cosine_array_2048_256;
175*15dc779aSAndroid Build Coastguard Worker
176*15dc779aSAndroid Build Coastguard Worker WORD16 cos = 0, cos1 = 0, sin = 0, sin1 = 0;
177*15dc779aSAndroid Build Coastguard Worker if (neg_expo < 0) {
178*15dc779aSAndroid Build Coastguard Worker neg_expo = -neg_expo;
179*15dc779aSAndroid Build Coastguard Worker if (npoints4 == 256) {
180*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
181*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
182*15dc779aSAndroid Build Coastguard Worker } else if (npoints4 == 32) {
183*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
184*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr;
185*15dc779aSAndroid Build Coastguard Worker cos_sin_ptr += 15;
186*15dc779aSAndroid Build Coastguard Worker }
187*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data1++;
188*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data2--;
189*15dc779aSAndroid Build Coastguard Worker
190*15dc779aSAndroid Build Coastguard Worker *out_ptr =
191*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, cos), tempi, sin);
192*15dc779aSAndroid Build Coastguard Worker
193*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shl32(*out_ptr, neg_expo);
194*15dc779aSAndroid Build Coastguard Worker out_ptr++;
195*15dc779aSAndroid Build Coastguard Worker
196*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_sub32(ixheaac_mult32x16in32(tempi, cos),
197*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr, sin));
198*15dc779aSAndroid Build Coastguard Worker
199*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shl32(*out_ptr, neg_expo);
200*15dc779aSAndroid Build Coastguard Worker out_ptr++;
201*15dc779aSAndroid Build Coastguard Worker
202*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < npoints4 - 1; i++) {
203*15dc779aSAndroid Build Coastguard Worker if (npoints4 == 256) {
204*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
205*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
206*15dc779aSAndroid Build Coastguard Worker } else if (npoints4 == 32) {
207*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
208*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr;
209*15dc779aSAndroid Build Coastguard Worker cos_sin_ptr += 15;
210*15dc779aSAndroid Build Coastguard Worker }
211*15dc779aSAndroid Build Coastguard Worker
212*15dc779aSAndroid Build Coastguard Worker tempi1 = *spec_data1++;
213*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data1++;
214*15dc779aSAndroid Build Coastguard Worker tempr1 = *spec_data2--;
215*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data2--;
216*15dc779aSAndroid Build Coastguard Worker
217*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_sub32(ixheaac_mult32x16in32(tempi1, cos),
218*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr1, sin));
219*15dc779aSAndroid Build Coastguard Worker
220*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shl32(*out_ptr1, neg_expo);
221*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
222*15dc779aSAndroid Build Coastguard Worker
223*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr1, cos),
224*15dc779aSAndroid Build Coastguard Worker tempi1, sin);
225*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shl32(*out_ptr1, neg_expo);
226*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
227*15dc779aSAndroid Build Coastguard Worker
228*15dc779aSAndroid Build Coastguard Worker *out_ptr =
229*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, sin), tempi, cos);
230*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shl32(*out_ptr, neg_expo);
231*15dc779aSAndroid Build Coastguard Worker out_ptr++;
232*15dc779aSAndroid Build Coastguard Worker
233*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_sub32(ixheaac_mult32x16in32(tempi, sin),
234*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr, cos));
235*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shl32(*out_ptr, neg_expo);
236*15dc779aSAndroid Build Coastguard Worker out_ptr++;
237*15dc779aSAndroid Build Coastguard Worker }
238*15dc779aSAndroid Build Coastguard Worker cos1 = *cos_sin_ptr++;
239*15dc779aSAndroid Build Coastguard Worker sin1 = *cos_sin_ptr;
240*15dc779aSAndroid Build Coastguard Worker
241*15dc779aSAndroid Build Coastguard Worker tempr1 = *spec_data2;
242*15dc779aSAndroid Build Coastguard Worker tempi1 = *spec_data1;
243*15dc779aSAndroid Build Coastguard Worker
244*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_sub32(ixheaac_mult32x16in32(tempi1, cos1),
245*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr1, sin1));
246*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shl32(*out_ptr1, neg_expo);
247*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
248*15dc779aSAndroid Build Coastguard Worker
249*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr1, cos1),
250*15dc779aSAndroid Build Coastguard Worker tempi1, sin1);
251*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shl32(*out_ptr1, neg_expo);
252*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
253*15dc779aSAndroid Build Coastguard Worker
254*15dc779aSAndroid Build Coastguard Worker } else {
255*15dc779aSAndroid Build Coastguard Worker if (npoints4 == 256) {
256*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
257*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
258*15dc779aSAndroid Build Coastguard Worker
259*15dc779aSAndroid Build Coastguard Worker } else if (npoints4 == 32) {
260*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
261*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr;
262*15dc779aSAndroid Build Coastguard Worker cos_sin_ptr += 15;
263*15dc779aSAndroid Build Coastguard Worker }
264*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data1++;
265*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data2--;
266*15dc779aSAndroid Build Coastguard Worker
267*15dc779aSAndroid Build Coastguard Worker *out_ptr =
268*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, cos), tempi, sin);
269*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shr32(*out_ptr, neg_expo);
270*15dc779aSAndroid Build Coastguard Worker out_ptr++;
271*15dc779aSAndroid Build Coastguard Worker
272*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_sub32(ixheaac_mult32x16in32(tempi, cos),
273*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr, sin));
274*15dc779aSAndroid Build Coastguard Worker
275*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shr32(*out_ptr, neg_expo);
276*15dc779aSAndroid Build Coastguard Worker out_ptr++;
277*15dc779aSAndroid Build Coastguard Worker
278*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < npoints4 - 1; i++) {
279*15dc779aSAndroid Build Coastguard Worker if (npoints4 == 256) {
280*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
281*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
282*15dc779aSAndroid Build Coastguard Worker } else if (npoints4 == 32) {
283*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
284*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr;
285*15dc779aSAndroid Build Coastguard Worker cos_sin_ptr += 15;
286*15dc779aSAndroid Build Coastguard Worker }
287*15dc779aSAndroid Build Coastguard Worker
288*15dc779aSAndroid Build Coastguard Worker tempi1 = *spec_data1++;
289*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data1++;
290*15dc779aSAndroid Build Coastguard Worker tempr1 = *spec_data2--;
291*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data2--;
292*15dc779aSAndroid Build Coastguard Worker
293*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_sub32(ixheaac_mult32x16in32(tempi1, cos),
294*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr1, sin));
295*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shr32(*out_ptr1, neg_expo);
296*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
297*15dc779aSAndroid Build Coastguard Worker
298*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr1, cos),
299*15dc779aSAndroid Build Coastguard Worker tempi1, sin);
300*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shr32(*out_ptr1, neg_expo);
301*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
302*15dc779aSAndroid Build Coastguard Worker
303*15dc779aSAndroid Build Coastguard Worker *out_ptr =
304*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, sin), tempi, cos);
305*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shr32(*out_ptr, neg_expo);
306*15dc779aSAndroid Build Coastguard Worker out_ptr++;
307*15dc779aSAndroid Build Coastguard Worker
308*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_sub32(ixheaac_mult32x16in32(tempi, sin),
309*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr, cos));
310*15dc779aSAndroid Build Coastguard Worker *out_ptr = ixheaac_shr32(*out_ptr, neg_expo);
311*15dc779aSAndroid Build Coastguard Worker out_ptr++;
312*15dc779aSAndroid Build Coastguard Worker }
313*15dc779aSAndroid Build Coastguard Worker cos1 = *cos_sin_ptr++;
314*15dc779aSAndroid Build Coastguard Worker sin1 = *cos_sin_ptr;
315*15dc779aSAndroid Build Coastguard Worker
316*15dc779aSAndroid Build Coastguard Worker tempr1 = *spec_data2;
317*15dc779aSAndroid Build Coastguard Worker tempi1 = *spec_data1;
318*15dc779aSAndroid Build Coastguard Worker
319*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_sub32(ixheaac_mult32x16in32(tempi1, cos1),
320*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr1, sin1));
321*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shr32(*out_ptr1, neg_expo);
322*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
323*15dc779aSAndroid Build Coastguard Worker
324*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr1, cos1),
325*15dc779aSAndroid Build Coastguard Worker tempi1, sin1);
326*15dc779aSAndroid Build Coastguard Worker *out_ptr1 = ixheaac_shr32(*out_ptr1, neg_expo);
327*15dc779aSAndroid Build Coastguard Worker out_ptr1--;
328*15dc779aSAndroid Build Coastguard Worker }
329*15dc779aSAndroid Build Coastguard Worker }
330*15dc779aSAndroid Build Coastguard Worker
ixheaacd_post_twiddle_dec(WORD32 out_ptr[],WORD32 spec_data[],ia_aac_dec_imdct_tables_struct * ptr_imdct_tables,WORD npoints)331*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_dec(WORD32 out_ptr[], WORD32 spec_data[],
332*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables,
333*15dc779aSAndroid Build Coastguard Worker WORD npoints) {
334*15dc779aSAndroid Build Coastguard Worker WORD i;
335*15dc779aSAndroid Build Coastguard Worker WORD16 cos, cos1, sin, sin1;
336*15dc779aSAndroid Build Coastguard Worker WORD32 *spec_data1 = spec_data + npoints - 1;
337*15dc779aSAndroid Build Coastguard Worker WORD32 *out_ptr1 = out_ptr + npoints - 1;
338*15dc779aSAndroid Build Coastguard Worker WORD16 adjust = 50, adjust1 = -50;
339*15dc779aSAndroid Build Coastguard Worker const WORD16 *cos_sin_ptr = ptr_imdct_tables->cosine_array_2048_256;
340*15dc779aSAndroid Build Coastguard Worker
341*15dc779aSAndroid Build Coastguard Worker if (npoints == 1024) {
342*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi, outi, outr, temp1, temp2;
343*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data++;
344*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data++;
345*15dc779aSAndroid Build Coastguard Worker
346*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr;
347*15dc779aSAndroid Build Coastguard Worker cos_sin_ptr++;
348*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr;
349*15dc779aSAndroid Build Coastguard Worker cos_sin_ptr++;
350*15dc779aSAndroid Build Coastguard Worker
351*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin),
352*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
353*15dc779aSAndroid Build Coastguard Worker outr =
354*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, cos), tempi, sin);
355*15dc779aSAndroid Build Coastguard Worker
356*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
357*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
358*15dc779aSAndroid Build Coastguard Worker
359*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
360*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
361*15dc779aSAndroid Build Coastguard Worker *out_ptr1-- = outi;
362*15dc779aSAndroid Build Coastguard Worker *out_ptr++ = outr;
363*15dc779aSAndroid Build Coastguard Worker
364*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < (npoints / 2 - 2); i++) {
365*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
366*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
367*15dc779aSAndroid Build Coastguard Worker
368*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data1--;
369*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data1--;
370*15dc779aSAndroid Build Coastguard Worker
371*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin),
372*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
373*15dc779aSAndroid Build Coastguard Worker outr =
374*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, cos), tempi, sin);
375*15dc779aSAndroid Build Coastguard Worker
376*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
377*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
378*15dc779aSAndroid Build Coastguard Worker
379*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
380*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
381*15dc779aSAndroid Build Coastguard Worker
382*15dc779aSAndroid Build Coastguard Worker *out_ptr++ = outi;
383*15dc779aSAndroid Build Coastguard Worker *out_ptr1-- = outr;
384*15dc779aSAndroid Build Coastguard Worker
385*15dc779aSAndroid Build Coastguard Worker i++;
386*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data++;
387*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data++;
388*15dc779aSAndroid Build Coastguard Worker
389*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, cos),
390*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin));
391*15dc779aSAndroid Build Coastguard Worker outr =
392*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, sin), tempi, cos);
393*15dc779aSAndroid Build Coastguard Worker
394*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
395*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
396*15dc779aSAndroid Build Coastguard Worker
397*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
398*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
399*15dc779aSAndroid Build Coastguard Worker
400*15dc779aSAndroid Build Coastguard Worker *out_ptr1-- = outi;
401*15dc779aSAndroid Build Coastguard Worker *out_ptr++ = outr;
402*15dc779aSAndroid Build Coastguard Worker }
403*15dc779aSAndroid Build Coastguard Worker cos1 = *cos_sin_ptr++;
404*15dc779aSAndroid Build Coastguard Worker sin1 = *cos_sin_ptr;
405*15dc779aSAndroid Build Coastguard Worker
406*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data1--;
407*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data1--;
408*15dc779aSAndroid Build Coastguard Worker
409*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin1),
410*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos1));
411*15dc779aSAndroid Build Coastguard Worker outr =
412*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, cos1), tempi, sin1);
413*15dc779aSAndroid Build Coastguard Worker
414*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
415*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
416*15dc779aSAndroid Build Coastguard Worker
417*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
418*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
419*15dc779aSAndroid Build Coastguard Worker
420*15dc779aSAndroid Build Coastguard Worker *out_ptr++ = outi;
421*15dc779aSAndroid Build Coastguard Worker *out_ptr1-- = outr;
422*15dc779aSAndroid Build Coastguard Worker } else if (npoints == 128) {
423*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi, outi, outr, temp1, temp2;
424*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data++;
425*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data++;
426*15dc779aSAndroid Build Coastguard Worker
427*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
428*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr;
429*15dc779aSAndroid Build Coastguard Worker cos_sin_ptr += 15;
430*15dc779aSAndroid Build Coastguard Worker
431*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin),
432*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
433*15dc779aSAndroid Build Coastguard Worker outr =
434*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, cos), tempi, sin);
435*15dc779aSAndroid Build Coastguard Worker
436*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, -(201 << 1));
437*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, 201 << 1);
438*15dc779aSAndroid Build Coastguard Worker
439*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
440*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
441*15dc779aSAndroid Build Coastguard Worker *out_ptr1-- = outi;
442*15dc779aSAndroid Build Coastguard Worker *out_ptr++ = outr;
443*15dc779aSAndroid Build Coastguard Worker
444*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < (npoints / 2 - 2); i++) {
445*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
446*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr;
447*15dc779aSAndroid Build Coastguard Worker cos_sin_ptr += 15;
448*15dc779aSAndroid Build Coastguard Worker
449*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data1--;
450*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data1--;
451*15dc779aSAndroid Build Coastguard Worker
452*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin),
453*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
454*15dc779aSAndroid Build Coastguard Worker outr =
455*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, cos), tempi, sin);
456*15dc779aSAndroid Build Coastguard Worker
457*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, -(201 << 1));
458*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, 201 << 1);
459*15dc779aSAndroid Build Coastguard Worker
460*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
461*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
462*15dc779aSAndroid Build Coastguard Worker
463*15dc779aSAndroid Build Coastguard Worker *out_ptr++ = outi;
464*15dc779aSAndroid Build Coastguard Worker *out_ptr1-- = outr;
465*15dc779aSAndroid Build Coastguard Worker
466*15dc779aSAndroid Build Coastguard Worker i++;
467*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data++;
468*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data++;
469*15dc779aSAndroid Build Coastguard Worker
470*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, cos),
471*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin));
472*15dc779aSAndroid Build Coastguard Worker outr =
473*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, sin), tempi, cos);
474*15dc779aSAndroid Build Coastguard Worker
475*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, -(201 << 1));
476*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, 201 << 1);
477*15dc779aSAndroid Build Coastguard Worker
478*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
479*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
480*15dc779aSAndroid Build Coastguard Worker
481*15dc779aSAndroid Build Coastguard Worker *out_ptr1-- = outi;
482*15dc779aSAndroid Build Coastguard Worker *out_ptr++ = outr;
483*15dc779aSAndroid Build Coastguard Worker }
484*15dc779aSAndroid Build Coastguard Worker cos1 = *cos_sin_ptr++;
485*15dc779aSAndroid Build Coastguard Worker sin1 = *cos_sin_ptr;
486*15dc779aSAndroid Build Coastguard Worker
487*15dc779aSAndroid Build Coastguard Worker tempi = *spec_data1--;
488*15dc779aSAndroid Build Coastguard Worker tempr = *spec_data1--;
489*15dc779aSAndroid Build Coastguard Worker
490*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin1),
491*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos1));
492*15dc779aSAndroid Build Coastguard Worker outr =
493*15dc779aSAndroid Build Coastguard Worker ixheaac_mac32x16in32(ixheaac_mult32x16in32(tempr, cos1), tempi, sin1);
494*15dc779aSAndroid Build Coastguard Worker
495*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, -(201 << 1));
496*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, 201 << 1);
497*15dc779aSAndroid Build Coastguard Worker
498*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
499*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
500*15dc779aSAndroid Build Coastguard Worker
501*15dc779aSAndroid Build Coastguard Worker *out_ptr++ = outi;
502*15dc779aSAndroid Build Coastguard Worker *out_ptr1-- = outr;
503*15dc779aSAndroid Build Coastguard Worker }
504*15dc779aSAndroid Build Coastguard Worker }
505*15dc779aSAndroid Build Coastguard Worker
ixheaacd_post_twid_overlap_add_dec(WORD32 pcm_out[],WORD32 spec_data[],ia_aac_dec_imdct_tables_struct * ptr_imdct_tables,WORD npoints,WORD32 * ptr_overlap_buf,WORD16 q_shift,const WORD16 * window,WORD16 ch_fac)506*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twid_overlap_add_dec(
507*15dc779aSAndroid Build Coastguard Worker WORD32 pcm_out[], WORD32 spec_data[],
508*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
509*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
510*15dc779aSAndroid Build Coastguard Worker WORD16 ch_fac) {
511*15dc779aSAndroid Build Coastguard Worker WORD i;
512*15dc779aSAndroid Build Coastguard Worker WORD16 cos, cos1, sin, sin1;
513*15dc779aSAndroid Build Coastguard Worker WORD32 size = npoints / 2;
514*15dc779aSAndroid Build Coastguard Worker WORD32 *pcmout1 = pcm_out + (ch_fac * size);
515*15dc779aSAndroid Build Coastguard Worker const WORD16 *cos_sin_ptr = ptr_imdct_tables->cosine_array_2048_256;
516*15dc779aSAndroid Build Coastguard Worker
517*15dc779aSAndroid Build Coastguard Worker pcm_out = pcmout1 - ch_fac;
518*15dc779aSAndroid Build Coastguard Worker spec_data += size;
519*15dc779aSAndroid Build Coastguard Worker
520*15dc779aSAndroid Build Coastguard Worker if (q_shift > 0) {
521*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi, outr, outi, win1, accu, temp1, temp2;
522*15dc779aSAndroid Build Coastguard Worker WORD16 adjust, adjust1;
523*15dc779aSAndroid Build Coastguard Worker WORD32 overlap_data;
524*15dc779aSAndroid Build Coastguard Worker
525*15dc779aSAndroid Build Coastguard Worker tempr = *(spec_data - size);
526*15dc779aSAndroid Build Coastguard Worker tempi = *(spec_data - size + 1);
527*15dc779aSAndroid Build Coastguard Worker adjust = 50;
528*15dc779aSAndroid Build Coastguard Worker adjust1 = -50;
529*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
530*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
531*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin),
532*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
533*15dc779aSAndroid Build Coastguard Worker outr = ixheaac_add32(ixheaac_mult32x16in32(tempr, cos),
534*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin));
535*15dc779aSAndroid Build Coastguard Worker
536*15dc779aSAndroid Build Coastguard Worker overlap_data = *ptr_overlap_buf;
537*15dc779aSAndroid Build Coastguard Worker
538*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
539*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
540*15dc779aSAndroid Build Coastguard Worker
541*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
542*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
543*15dc779aSAndroid Build Coastguard Worker
544*15dc779aSAndroid Build Coastguard Worker *ptr_overlap_buf++ = ixheaac_shr32_sat(outr, 16 - q_shift);
545*15dc779aSAndroid Build Coastguard Worker
546*15dc779aSAndroid Build Coastguard Worker win1 = *((WORD32 *)window + size - 1);
547*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
548*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32_sat(ixheaacd_mult32x16lin32(outi, win1), q_shift),
549*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1 >> 16)));
550*15dc779aSAndroid Build Coastguard Worker
551*15dc779aSAndroid Build Coastguard Worker *pcm_out = accu;
552*15dc779aSAndroid Build Coastguard Worker
553*15dc779aSAndroid Build Coastguard Worker pcm_out -= ch_fac;
554*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
555*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32_sat(
556*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(ixheaac_negate32_sat(outi), win1),
557*15dc779aSAndroid Build Coastguard Worker q_shift),
558*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1)));
559*15dc779aSAndroid Build Coastguard Worker
560*15dc779aSAndroid Build Coastguard Worker *pcmout1 = accu;
561*15dc779aSAndroid Build Coastguard Worker
562*15dc779aSAndroid Build Coastguard Worker pcmout1 += ch_fac;
563*15dc779aSAndroid Build Coastguard Worker
564*15dc779aSAndroid Build Coastguard Worker for (i = size - 2; i != 0;) {
565*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
566*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
567*15dc779aSAndroid Build Coastguard Worker
568*15dc779aSAndroid Build Coastguard Worker tempr = *(spec_data + i);
569*15dc779aSAndroid Build Coastguard Worker tempi = *(spec_data + i + 1);
570*15dc779aSAndroid Build Coastguard Worker
571*15dc779aSAndroid Build Coastguard Worker outr = ixheaac_add32(ixheaac_mult32x16in32(tempr, cos),
572*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin));
573*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin),
574*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
575*15dc779aSAndroid Build Coastguard Worker
576*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
577*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
578*15dc779aSAndroid Build Coastguard Worker
579*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
580*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
581*15dc779aSAndroid Build Coastguard Worker
582*15dc779aSAndroid Build Coastguard Worker overlap_data = *ptr_overlap_buf;
583*15dc779aSAndroid Build Coastguard Worker
584*15dc779aSAndroid Build Coastguard Worker *ptr_overlap_buf++ = ixheaac_shr32_sat(outi, 16 - q_shift);
585*15dc779aSAndroid Build Coastguard Worker
586*15dc779aSAndroid Build Coastguard Worker win1 = *((WORD32 *)window + i);
587*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
588*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32_sat(ixheaacd_mult32x16lin32(outr, win1), q_shift),
589*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1 >> 16)));
590*15dc779aSAndroid Build Coastguard Worker
591*15dc779aSAndroid Build Coastguard Worker *pcm_out = accu;
592*15dc779aSAndroid Build Coastguard Worker pcm_out -= ch_fac;
593*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
594*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32_sat(
595*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(ixheaac_negate32_sat(outr), win1),
596*15dc779aSAndroid Build Coastguard Worker q_shift),
597*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)win1));
598*15dc779aSAndroid Build Coastguard Worker
599*15dc779aSAndroid Build Coastguard Worker *pcmout1 = accu;
600*15dc779aSAndroid Build Coastguard Worker pcmout1 += ch_fac;
601*15dc779aSAndroid Build Coastguard Worker
602*15dc779aSAndroid Build Coastguard Worker tempr = *(spec_data - i);
603*15dc779aSAndroid Build Coastguard Worker tempi = *(spec_data - i + 1);
604*15dc779aSAndroid Build Coastguard Worker
605*15dc779aSAndroid Build Coastguard Worker i -= 2;
606*15dc779aSAndroid Build Coastguard Worker
607*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, cos),
608*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin));
609*15dc779aSAndroid Build Coastguard Worker outr = ixheaac_add32(ixheaac_mult32x16in32(tempr, sin),
610*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
611*15dc779aSAndroid Build Coastguard Worker
612*15dc779aSAndroid Build Coastguard Worker overlap_data = *ptr_overlap_buf;
613*15dc779aSAndroid Build Coastguard Worker
614*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
615*15dc779aSAndroid Build Coastguard Worker
616*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
617*15dc779aSAndroid Build Coastguard Worker
618*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
619*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
620*15dc779aSAndroid Build Coastguard Worker
621*15dc779aSAndroid Build Coastguard Worker *ptr_overlap_buf++ = ixheaac_shr32_sat(outr, 16 - q_shift);
622*15dc779aSAndroid Build Coastguard Worker
623*15dc779aSAndroid Build Coastguard Worker win1 = *((WORD32 *)window + i + 1);
624*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
625*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32_sat(ixheaacd_mult32x16lin32(outi, win1), q_shift),
626*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1 >> 16)));
627*15dc779aSAndroid Build Coastguard Worker
628*15dc779aSAndroid Build Coastguard Worker *pcm_out = accu;
629*15dc779aSAndroid Build Coastguard Worker pcm_out -= ch_fac;
630*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
631*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32_sat(
632*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(ixheaac_negate32_sat(outi), win1),
633*15dc779aSAndroid Build Coastguard Worker q_shift),
634*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1)));
635*15dc779aSAndroid Build Coastguard Worker *pcmout1 = accu;
636*15dc779aSAndroid Build Coastguard Worker pcmout1 += ch_fac;
637*15dc779aSAndroid Build Coastguard Worker }
638*15dc779aSAndroid Build Coastguard Worker cos1 = *cos_sin_ptr++;
639*15dc779aSAndroid Build Coastguard Worker sin1 = *cos_sin_ptr;
640*15dc779aSAndroid Build Coastguard Worker
641*15dc779aSAndroid Build Coastguard Worker tempr = *(spec_data + i);
642*15dc779aSAndroid Build Coastguard Worker tempi = *(spec_data + i + 1);
643*15dc779aSAndroid Build Coastguard Worker
644*15dc779aSAndroid Build Coastguard Worker outr = ixheaac_add32(ixheaac_mult32x16in32(tempr, cos1),
645*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin1));
646*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin1),
647*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos1));
648*15dc779aSAndroid Build Coastguard Worker
649*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
650*15dc779aSAndroid Build Coastguard Worker
651*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
652*15dc779aSAndroid Build Coastguard Worker
653*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
654*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
655*15dc779aSAndroid Build Coastguard Worker
656*15dc779aSAndroid Build Coastguard Worker overlap_data = *ptr_overlap_buf;
657*15dc779aSAndroid Build Coastguard Worker
658*15dc779aSAndroid Build Coastguard Worker *ptr_overlap_buf++ = ixheaac_shr32_sat(outi, 16 - q_shift);
659*15dc779aSAndroid Build Coastguard Worker win1 = *((WORD32 *)window + i);
660*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
661*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32_sat(ixheaacd_mult32x16lin32(outr, win1), q_shift),
662*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1 >> 16)));
663*15dc779aSAndroid Build Coastguard Worker
664*15dc779aSAndroid Build Coastguard Worker *pcm_out = accu;
665*15dc779aSAndroid Build Coastguard Worker pcm_out -= ch_fac;
666*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
667*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32_sat(
668*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(ixheaac_negate32_sat(outr), win1),
669*15dc779aSAndroid Build Coastguard Worker q_shift),
670*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)win1));
671*15dc779aSAndroid Build Coastguard Worker
672*15dc779aSAndroid Build Coastguard Worker *pcmout1 = accu;
673*15dc779aSAndroid Build Coastguard Worker pcmout1 += ch_fac;
674*15dc779aSAndroid Build Coastguard Worker } else {
675*15dc779aSAndroid Build Coastguard Worker q_shift = -q_shift;
676*15dc779aSAndroid Build Coastguard Worker {
677*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi, temp1, temp2, outr, outi, win1, accu;
678*15dc779aSAndroid Build Coastguard Worker WORD16 adjust, adjust1;
679*15dc779aSAndroid Build Coastguard Worker WORD16 overlap_data;
680*15dc779aSAndroid Build Coastguard Worker tempr = *(spec_data - size);
681*15dc779aSAndroid Build Coastguard Worker tempi = *(spec_data - size + 1);
682*15dc779aSAndroid Build Coastguard Worker
683*15dc779aSAndroid Build Coastguard Worker adjust = 50;
684*15dc779aSAndroid Build Coastguard Worker adjust1 = -50;
685*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
686*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
687*15dc779aSAndroid Build Coastguard Worker
688*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin),
689*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
690*15dc779aSAndroid Build Coastguard Worker outr = ixheaac_add32(ixheaac_mult32x16in32(tempr, cos),
691*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin));
692*15dc779aSAndroid Build Coastguard Worker
693*15dc779aSAndroid Build Coastguard Worker overlap_data = *ptr_overlap_buf;
694*15dc779aSAndroid Build Coastguard Worker
695*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
696*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
697*15dc779aSAndroid Build Coastguard Worker
698*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
699*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
700*15dc779aSAndroid Build Coastguard Worker
701*15dc779aSAndroid Build Coastguard Worker *ptr_overlap_buf++ = ixheaac_shr32_sat(outr, 16 + q_shift);
702*15dc779aSAndroid Build Coastguard Worker
703*15dc779aSAndroid Build Coastguard Worker win1 = *((WORD32 *)window + size - 1);
704*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
705*15dc779aSAndroid Build Coastguard Worker ixheaac_shr32(ixheaacd_mult32x16lin32(outi, win1), q_shift),
706*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1 >> 16)));
707*15dc779aSAndroid Build Coastguard Worker
708*15dc779aSAndroid Build Coastguard Worker *pcm_out = accu;
709*15dc779aSAndroid Build Coastguard Worker
710*15dc779aSAndroid Build Coastguard Worker pcm_out -= ch_fac;
711*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
712*15dc779aSAndroid Build Coastguard Worker ixheaac_shr32(
713*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(ixheaac_negate32_sat(outi), win1),
714*15dc779aSAndroid Build Coastguard Worker q_shift),
715*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1)));
716*15dc779aSAndroid Build Coastguard Worker
717*15dc779aSAndroid Build Coastguard Worker *pcmout1 = accu;
718*15dc779aSAndroid Build Coastguard Worker pcmout1 += ch_fac;
719*15dc779aSAndroid Build Coastguard Worker
720*15dc779aSAndroid Build Coastguard Worker for (i = size - 2; i != 0;) {
721*15dc779aSAndroid Build Coastguard Worker sin = *cos_sin_ptr++;
722*15dc779aSAndroid Build Coastguard Worker cos = *cos_sin_ptr++;
723*15dc779aSAndroid Build Coastguard Worker
724*15dc779aSAndroid Build Coastguard Worker tempr = *(spec_data + i);
725*15dc779aSAndroid Build Coastguard Worker tempi = *(spec_data + i + 1);
726*15dc779aSAndroid Build Coastguard Worker
727*15dc779aSAndroid Build Coastguard Worker outr = ixheaac_add32(ixheaac_mult32x16in32(tempr, cos),
728*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin));
729*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin),
730*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
731*15dc779aSAndroid Build Coastguard Worker
732*15dc779aSAndroid Build Coastguard Worker overlap_data = *ptr_overlap_buf;
733*15dc779aSAndroid Build Coastguard Worker
734*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
735*15dc779aSAndroid Build Coastguard Worker
736*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
737*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
738*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
739*15dc779aSAndroid Build Coastguard Worker *ptr_overlap_buf++ = ixheaac_shr32_sat(outi, 16 + q_shift);
740*15dc779aSAndroid Build Coastguard Worker
741*15dc779aSAndroid Build Coastguard Worker win1 = *((WORD32 *)window + i);
742*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
743*15dc779aSAndroid Build Coastguard Worker ixheaac_shr32(ixheaacd_mult32x16lin32(outr, win1), q_shift),
744*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1 >> 16)));
745*15dc779aSAndroid Build Coastguard Worker
746*15dc779aSAndroid Build Coastguard Worker *pcm_out = accu;
747*15dc779aSAndroid Build Coastguard Worker pcm_out -= ch_fac;
748*15dc779aSAndroid Build Coastguard Worker
749*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
750*15dc779aSAndroid Build Coastguard Worker ixheaac_shr32(
751*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(ixheaac_negate32_sat(outr), win1),
752*15dc779aSAndroid Build Coastguard Worker q_shift),
753*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)win1));
754*15dc779aSAndroid Build Coastguard Worker
755*15dc779aSAndroid Build Coastguard Worker *pcmout1 = accu;
756*15dc779aSAndroid Build Coastguard Worker pcmout1 += ch_fac;
757*15dc779aSAndroid Build Coastguard Worker
758*15dc779aSAndroid Build Coastguard Worker tempr = *(spec_data - i);
759*15dc779aSAndroid Build Coastguard Worker tempi = *(spec_data - i + 1);
760*15dc779aSAndroid Build Coastguard Worker i -= 2;
761*15dc779aSAndroid Build Coastguard Worker
762*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, cos),
763*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin));
764*15dc779aSAndroid Build Coastguard Worker outr = ixheaac_add32(ixheaac_mult32x16in32(tempr, sin),
765*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos));
766*15dc779aSAndroid Build Coastguard Worker
767*15dc779aSAndroid Build Coastguard Worker overlap_data = *ptr_overlap_buf;
768*15dc779aSAndroid Build Coastguard Worker
769*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
770*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
771*15dc779aSAndroid Build Coastguard Worker
772*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
773*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
774*15dc779aSAndroid Build Coastguard Worker
775*15dc779aSAndroid Build Coastguard Worker *ptr_overlap_buf++ = ixheaac_shr32_sat(outr, 16 + q_shift);
776*15dc779aSAndroid Build Coastguard Worker
777*15dc779aSAndroid Build Coastguard Worker win1 = *((WORD32 *)window + i + 1);
778*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
779*15dc779aSAndroid Build Coastguard Worker ixheaac_shr32(ixheaacd_mult32x16lin32(outi, win1), q_shift),
780*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1 >> 16)));
781*15dc779aSAndroid Build Coastguard Worker
782*15dc779aSAndroid Build Coastguard Worker *pcm_out = accu;
783*15dc779aSAndroid Build Coastguard Worker pcm_out -= ch_fac;
784*15dc779aSAndroid Build Coastguard Worker
785*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
786*15dc779aSAndroid Build Coastguard Worker ixheaac_shr32(
787*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(ixheaac_negate32_sat(outi), win1),
788*15dc779aSAndroid Build Coastguard Worker q_shift),
789*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1)));
790*15dc779aSAndroid Build Coastguard Worker
791*15dc779aSAndroid Build Coastguard Worker *pcmout1 = accu;
792*15dc779aSAndroid Build Coastguard Worker pcmout1 += ch_fac;
793*15dc779aSAndroid Build Coastguard Worker }
794*15dc779aSAndroid Build Coastguard Worker cos1 = *cos_sin_ptr++;
795*15dc779aSAndroid Build Coastguard Worker sin1 = *cos_sin_ptr++;
796*15dc779aSAndroid Build Coastguard Worker
797*15dc779aSAndroid Build Coastguard Worker tempr = *(spec_data + i);
798*15dc779aSAndroid Build Coastguard Worker tempi = *(spec_data + i + 1);
799*15dc779aSAndroid Build Coastguard Worker
800*15dc779aSAndroid Build Coastguard Worker outr = ixheaac_add32(ixheaac_mult32x16in32(tempr, cos1),
801*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, sin1));
802*15dc779aSAndroid Build Coastguard Worker outi = ixheaac_sub32(ixheaac_mult32x16in32(tempr, sin1),
803*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, cos1));
804*15dc779aSAndroid Build Coastguard Worker
805*15dc779aSAndroid Build Coastguard Worker overlap_data = *ptr_overlap_buf;
806*15dc779aSAndroid Build Coastguard Worker
807*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_mult32x16in32(outi, adjust1);
808*15dc779aSAndroid Build Coastguard Worker
809*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_mult32x16in32(outr, adjust);
810*15dc779aSAndroid Build Coastguard Worker
811*15dc779aSAndroid Build Coastguard Worker outr = outr + temp1;
812*15dc779aSAndroid Build Coastguard Worker outi = outi + temp2;
813*15dc779aSAndroid Build Coastguard Worker
814*15dc779aSAndroid Build Coastguard Worker *ptr_overlap_buf++ = ixheaac_shr32_sat(outi, 16 + q_shift);
815*15dc779aSAndroid Build Coastguard Worker
816*15dc779aSAndroid Build Coastguard Worker win1 = *((WORD32 *)window + i);
817*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
818*15dc779aSAndroid Build Coastguard Worker ixheaac_shr32(ixheaacd_mult32x16lin32(outr, win1), q_shift),
819*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)(win1 >> 16)));
820*15dc779aSAndroid Build Coastguard Worker
821*15dc779aSAndroid Build Coastguard Worker *pcm_out = accu;
822*15dc779aSAndroid Build Coastguard Worker pcm_out -= ch_fac;
823*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_sub32_sat(
824*15dc779aSAndroid Build Coastguard Worker ixheaac_shr32(
825*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(ixheaac_negate32_sat(outr), win1),
826*15dc779aSAndroid Build Coastguard Worker q_shift),
827*15dc779aSAndroid Build Coastguard Worker ixheaacd_mult32x16lin32_sat(overlap_data, (WORD16)win1));
828*15dc779aSAndroid Build Coastguard Worker *pcmout1 = accu;
829*15dc779aSAndroid Build Coastguard Worker pcmout1 += ch_fac;
830*15dc779aSAndroid Build Coastguard Worker }
831*15dc779aSAndroid Build Coastguard Worker }
832*15dc779aSAndroid Build Coastguard Worker }
833*15dc779aSAndroid Build Coastguard Worker
ixheaacd_imdct_using_fft_dec(ia_aac_dec_imdct_tables_struct * ptr_imdct_tables,WORD32 npoints,WORD32 * ptr_x,WORD32 * ptr_y)834*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_imdct_using_fft_dec(
835*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 npoints,
836*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_x, WORD32 *ptr_y)
837*15dc779aSAndroid Build Coastguard Worker
838*15dc779aSAndroid Build Coastguard Worker {
839*15dc779aSAndroid Build Coastguard Worker WORD32 i, j, k, k1, n_stages;
840*15dc779aSAndroid Build Coastguard Worker WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, x5r, x5i, x6r, x6i,
841*15dc779aSAndroid Build Coastguard Worker x7r, x7i;
842*15dc779aSAndroid Build Coastguard Worker WORD32 del, nodespacing, in_loop_cnt, tmp, twiddle_val, *ptr_tmp;
843*15dc779aSAndroid Build Coastguard Worker const WORD32 *ptr_twiddle;
844*15dc779aSAndroid Build Coastguard Worker WORD8 *ptr_dig_rev_table;
845*15dc779aSAndroid Build Coastguard Worker n_stages = ixheaac_norm32(npoints);
846*15dc779aSAndroid Build Coastguard Worker
847*15dc779aSAndroid Build Coastguard Worker n_stages = (30 - n_stages) / 3;
848*15dc779aSAndroid Build Coastguard Worker
849*15dc779aSAndroid Build Coastguard Worker ptr_tmp = ptr_y;
850*15dc779aSAndroid Build Coastguard Worker
851*15dc779aSAndroid Build Coastguard Worker ptr_twiddle = ptr_imdct_tables->fft_twiddle;
852*15dc779aSAndroid Build Coastguard Worker ptr_dig_rev_table = ((npoints << 1) == 1024)
853*15dc779aSAndroid Build Coastguard Worker ? ptr_imdct_tables->dig_rev_table8_long
854*15dc779aSAndroid Build Coastguard Worker : ptr_imdct_tables->dig_rev_table8_short;
855*15dc779aSAndroid Build Coastguard Worker
856*15dc779aSAndroid Build Coastguard Worker for (i = npoints; i != 0; i -= 8) {
857*15dc779aSAndroid Build Coastguard Worker WORD32 *data = ptr_x;
858*15dc779aSAndroid Build Coastguard Worker data = data + (*ptr_dig_rev_table++ << 1);
859*15dc779aSAndroid Build Coastguard Worker
860*15dc779aSAndroid Build Coastguard Worker x0r = *data;
861*15dc779aSAndroid Build Coastguard Worker x0i = *(data + 1);
862*15dc779aSAndroid Build Coastguard Worker data += (npoints >> 1);
863*15dc779aSAndroid Build Coastguard Worker
864*15dc779aSAndroid Build Coastguard Worker x2r = *data;
865*15dc779aSAndroid Build Coastguard Worker x2i = *(data + 1);
866*15dc779aSAndroid Build Coastguard Worker data += (npoints >> 1);
867*15dc779aSAndroid Build Coastguard Worker
868*15dc779aSAndroid Build Coastguard Worker x4r = *data;
869*15dc779aSAndroid Build Coastguard Worker x4i = *(data + 1);
870*15dc779aSAndroid Build Coastguard Worker data += (npoints >> 1);
871*15dc779aSAndroid Build Coastguard Worker
872*15dc779aSAndroid Build Coastguard Worker x6r = *data;
873*15dc779aSAndroid Build Coastguard Worker x6i = *(data + 1);
874*15dc779aSAndroid Build Coastguard Worker data -= 5 * (npoints >> 2);
875*15dc779aSAndroid Build Coastguard Worker
876*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x4r;
877*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x4i;
878*15dc779aSAndroid Build Coastguard Worker x4r = x0r - (x4r << 1);
879*15dc779aSAndroid Build Coastguard Worker x4i = x0i - (x4i << 1);
880*15dc779aSAndroid Build Coastguard Worker
881*15dc779aSAndroid Build Coastguard Worker x2r = x2r + x6r;
882*15dc779aSAndroid Build Coastguard Worker x2i = x2i + x6i;
883*15dc779aSAndroid Build Coastguard Worker x6r = x2r - (x6r << 1);
884*15dc779aSAndroid Build Coastguard Worker x6i = x2i - (x6i << 1);
885*15dc779aSAndroid Build Coastguard Worker
886*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x2r;
887*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x2i;
888*15dc779aSAndroid Build Coastguard Worker x2r = x0r - (x2r << 1);
889*15dc779aSAndroid Build Coastguard Worker x2i = x0i - (x2i << 1);
890*15dc779aSAndroid Build Coastguard Worker
891*15dc779aSAndroid Build Coastguard Worker x4r = x4r + x6i;
892*15dc779aSAndroid Build Coastguard Worker x4i = x4i - x6r;
893*15dc779aSAndroid Build Coastguard Worker tmp = x6r;
894*15dc779aSAndroid Build Coastguard Worker x6r = x4r - (x6i << 1);
895*15dc779aSAndroid Build Coastguard Worker x6i = x4i + (tmp << 1);
896*15dc779aSAndroid Build Coastguard Worker
897*15dc779aSAndroid Build Coastguard Worker x1r = *data;
898*15dc779aSAndroid Build Coastguard Worker x1i = *(data + 1);
899*15dc779aSAndroid Build Coastguard Worker data += (npoints >> 1);
900*15dc779aSAndroid Build Coastguard Worker
901*15dc779aSAndroid Build Coastguard Worker x3r = *data;
902*15dc779aSAndroid Build Coastguard Worker x3i = *(data + 1);
903*15dc779aSAndroid Build Coastguard Worker data += (npoints >> 1);
904*15dc779aSAndroid Build Coastguard Worker
905*15dc779aSAndroid Build Coastguard Worker x5r = *data;
906*15dc779aSAndroid Build Coastguard Worker x5i = *(data + 1);
907*15dc779aSAndroid Build Coastguard Worker data += (npoints >> 1);
908*15dc779aSAndroid Build Coastguard Worker
909*15dc779aSAndroid Build Coastguard Worker x7r = *data;
910*15dc779aSAndroid Build Coastguard Worker x7i = *(data + 1);
911*15dc779aSAndroid Build Coastguard Worker data -= 7 * (npoints >> 2);
912*15dc779aSAndroid Build Coastguard Worker
913*15dc779aSAndroid Build Coastguard Worker x1r = x1r + x5r;
914*15dc779aSAndroid Build Coastguard Worker x1i = x1i + x5i;
915*15dc779aSAndroid Build Coastguard Worker x5r = x1r - (x5r << 1);
916*15dc779aSAndroid Build Coastguard Worker x5i = x1i - (x5i << 1);
917*15dc779aSAndroid Build Coastguard Worker
918*15dc779aSAndroid Build Coastguard Worker x3r = x3r + x7r;
919*15dc779aSAndroid Build Coastguard Worker x3i = x3i + x7i;
920*15dc779aSAndroid Build Coastguard Worker x7r = x3r - (x7r << 1);
921*15dc779aSAndroid Build Coastguard Worker x7i = x3i - (x7i << 1);
922*15dc779aSAndroid Build Coastguard Worker
923*15dc779aSAndroid Build Coastguard Worker x1r = x1r + x3r;
924*15dc779aSAndroid Build Coastguard Worker x1i = x1i + x3i;
925*15dc779aSAndroid Build Coastguard Worker x3r = x1r - (x3r << 1);
926*15dc779aSAndroid Build Coastguard Worker x3i = x1i - (x3i << 1);
927*15dc779aSAndroid Build Coastguard Worker
928*15dc779aSAndroid Build Coastguard Worker x5r = x5r + x5i;
929*15dc779aSAndroid Build Coastguard Worker x5i = x5r - (x5i << 1);
930*15dc779aSAndroid Build Coastguard Worker
931*15dc779aSAndroid Build Coastguard Worker x7r = x7r + x7i;
932*15dc779aSAndroid Build Coastguard Worker x7i = x7r - (x7i << 1);
933*15dc779aSAndroid Build Coastguard Worker
934*15dc779aSAndroid Build Coastguard Worker x7i = x5r - x7i;
935*15dc779aSAndroid Build Coastguard Worker x5r = x7i - (x5r << 1);
936*15dc779aSAndroid Build Coastguard Worker
937*15dc779aSAndroid Build Coastguard Worker x5i = x7r - x5i;
938*15dc779aSAndroid Build Coastguard Worker x7r = x5i - (x7r << 1);
939*15dc779aSAndroid Build Coastguard Worker
940*15dc779aSAndroid Build Coastguard Worker x7i = x7i << 1;
941*15dc779aSAndroid Build Coastguard Worker x5r = x5r << 1;
942*15dc779aSAndroid Build Coastguard Worker x5i = x5i << 1;
943*15dc779aSAndroid Build Coastguard Worker x7r = x7r << 1;
944*15dc779aSAndroid Build Coastguard Worker
945*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x1r;
946*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x1i;
947*15dc779aSAndroid Build Coastguard Worker x1r = x0r - (x1r << 1);
948*15dc779aSAndroid Build Coastguard Worker x1i = x0i - (x1i << 1);
949*15dc779aSAndroid Build Coastguard Worker
950*15dc779aSAndroid Build Coastguard Worker x2r = x2r + x3i;
951*15dc779aSAndroid Build Coastguard Worker tmp = x2r - (x3i << 1);
952*15dc779aSAndroid Build Coastguard Worker x2i = x2i - x3r;
953*15dc779aSAndroid Build Coastguard Worker x3i = x2i + (x3r << 1);
954*15dc779aSAndroid Build Coastguard Worker
955*15dc779aSAndroid Build Coastguard Worker *ptr_tmp = x0r;
956*15dc779aSAndroid Build Coastguard Worker *(ptr_tmp + 1) = x0i;
957*15dc779aSAndroid Build Coastguard Worker ptr_tmp += 4;
958*15dc779aSAndroid Build Coastguard Worker
959*15dc779aSAndroid Build Coastguard Worker *ptr_tmp = x2r;
960*15dc779aSAndroid Build Coastguard Worker *(ptr_tmp + 1) = x2i;
961*15dc779aSAndroid Build Coastguard Worker ptr_tmp += 4;
962*15dc779aSAndroid Build Coastguard Worker
963*15dc779aSAndroid Build Coastguard Worker *ptr_tmp = x1r;
964*15dc779aSAndroid Build Coastguard Worker *(ptr_tmp + 1) = x1i;
965*15dc779aSAndroid Build Coastguard Worker ptr_tmp += 4;
966*15dc779aSAndroid Build Coastguard Worker
967*15dc779aSAndroid Build Coastguard Worker *ptr_tmp = tmp;
968*15dc779aSAndroid Build Coastguard Worker *(ptr_tmp + 1) = x3i;
969*15dc779aSAndroid Build Coastguard Worker ptr_tmp -= 10;
970*15dc779aSAndroid Build Coastguard Worker
971*15dc779aSAndroid Build Coastguard Worker tmp = 0x5A82;
972*15dc779aSAndroid Build Coastguard Worker
973*15dc779aSAndroid Build Coastguard Worker x7i = x4r + (ixheaacd_mult32x16lin32(x7i, tmp));
974*15dc779aSAndroid Build Coastguard Worker x4r = x7i - (x4r << 1);
975*15dc779aSAndroid Build Coastguard Worker
976*15dc779aSAndroid Build Coastguard Worker x7r = x4i + (ixheaacd_mult32x16lin32(x7r, tmp));
977*15dc779aSAndroid Build Coastguard Worker x4i = x7r - (x4i << 1);
978*15dc779aSAndroid Build Coastguard Worker
979*15dc779aSAndroid Build Coastguard Worker x5i = x6r + (ixheaacd_mult32x16lin32(x5i, tmp));
980*15dc779aSAndroid Build Coastguard Worker x6r = x5i - (x6r << 1);
981*15dc779aSAndroid Build Coastguard Worker
982*15dc779aSAndroid Build Coastguard Worker x5r = x6i + (ixheaacd_mult32x16lin32(x5r, tmp));
983*15dc779aSAndroid Build Coastguard Worker x6i = x5r - (x6i << 1);
984*15dc779aSAndroid Build Coastguard Worker
985*15dc779aSAndroid Build Coastguard Worker *ptr_tmp = x7i;
986*15dc779aSAndroid Build Coastguard Worker *(ptr_tmp + 1) = x7r;
987*15dc779aSAndroid Build Coastguard Worker ptr_tmp += 4;
988*15dc779aSAndroid Build Coastguard Worker
989*15dc779aSAndroid Build Coastguard Worker *ptr_tmp = x5i;
990*15dc779aSAndroid Build Coastguard Worker *(ptr_tmp + 1) = x5r;
991*15dc779aSAndroid Build Coastguard Worker ptr_tmp += 4;
992*15dc779aSAndroid Build Coastguard Worker
993*15dc779aSAndroid Build Coastguard Worker *ptr_tmp = -x4r;
994*15dc779aSAndroid Build Coastguard Worker *(ptr_tmp + 1) = -x4i;
995*15dc779aSAndroid Build Coastguard Worker ptr_tmp += 4;
996*15dc779aSAndroid Build Coastguard Worker
997*15dc779aSAndroid Build Coastguard Worker *ptr_tmp = -x6r;
998*15dc779aSAndroid Build Coastguard Worker *(ptr_tmp + 1) = -x6i;
999*15dc779aSAndroid Build Coastguard Worker ptr_tmp += 2;
1000*15dc779aSAndroid Build Coastguard Worker }
1001*15dc779aSAndroid Build Coastguard Worker
1002*15dc779aSAndroid Build Coastguard Worker del = 8;
1003*15dc779aSAndroid Build Coastguard Worker
1004*15dc779aSAndroid Build Coastguard Worker nodespacing = 64;
1005*15dc779aSAndroid Build Coastguard Worker in_loop_cnt = npoints >> 6;
1006*15dc779aSAndroid Build Coastguard Worker
1007*15dc779aSAndroid Build Coastguard Worker for (k1 = n_stages - 2; k1 > 0; k1--) {
1008*15dc779aSAndroid Build Coastguard Worker WORD32 *data = ptr_y;
1009*15dc779aSAndroid Build Coastguard Worker const WORD32 *twiddles;
1010*15dc779aSAndroid Build Coastguard Worker
1011*15dc779aSAndroid Build Coastguard Worker for (i = 0; i != npoints; i += 8 * del) {
1012*15dc779aSAndroid Build Coastguard Worker data = ptr_y + (i << 1);
1013*15dc779aSAndroid Build Coastguard Worker x0r = *data;
1014*15dc779aSAndroid Build Coastguard Worker x0i = *(data + 1);
1015*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1016*15dc779aSAndroid Build Coastguard Worker
1017*15dc779aSAndroid Build Coastguard Worker x2r = *data;
1018*15dc779aSAndroid Build Coastguard Worker x2i = *(data + 1);
1019*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1020*15dc779aSAndroid Build Coastguard Worker
1021*15dc779aSAndroid Build Coastguard Worker x4r = *data;
1022*15dc779aSAndroid Build Coastguard Worker x4i = *(data + 1);
1023*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1024*15dc779aSAndroid Build Coastguard Worker
1025*15dc779aSAndroid Build Coastguard Worker x6r = *data;
1026*15dc779aSAndroid Build Coastguard Worker x6i = *(data + 1);
1027*15dc779aSAndroid Build Coastguard Worker data -= 5 * (del << 1);
1028*15dc779aSAndroid Build Coastguard Worker
1029*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x4r;
1030*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x4i;
1031*15dc779aSAndroid Build Coastguard Worker x4r = x0r - (x4r << 1);
1032*15dc779aSAndroid Build Coastguard Worker x4i = x0i - (x4i << 1);
1033*15dc779aSAndroid Build Coastguard Worker
1034*15dc779aSAndroid Build Coastguard Worker x2r = x2r + x6r;
1035*15dc779aSAndroid Build Coastguard Worker x2i = x2i + x6i;
1036*15dc779aSAndroid Build Coastguard Worker x6r = x2r - (x6r << 1);
1037*15dc779aSAndroid Build Coastguard Worker x6i = x2i - (x6i << 1);
1038*15dc779aSAndroid Build Coastguard Worker
1039*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x2r;
1040*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x2i;
1041*15dc779aSAndroid Build Coastguard Worker x2r = x0r - (x2r << 1);
1042*15dc779aSAndroid Build Coastguard Worker x2i = x0i - (x2i << 1);
1043*15dc779aSAndroid Build Coastguard Worker
1044*15dc779aSAndroid Build Coastguard Worker x4r = x4r + x6i;
1045*15dc779aSAndroid Build Coastguard Worker x4i = x4i - x6r;
1046*15dc779aSAndroid Build Coastguard Worker tmp = x6r;
1047*15dc779aSAndroid Build Coastguard Worker x6r = x4r - (x6i << 1);
1048*15dc779aSAndroid Build Coastguard Worker x6i = x4i + (tmp << 1);
1049*15dc779aSAndroid Build Coastguard Worker
1050*15dc779aSAndroid Build Coastguard Worker x1r = *data;
1051*15dc779aSAndroid Build Coastguard Worker x1i = *(data + 1);
1052*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1053*15dc779aSAndroid Build Coastguard Worker
1054*15dc779aSAndroid Build Coastguard Worker x3r = *data;
1055*15dc779aSAndroid Build Coastguard Worker x3i = *(data + 1);
1056*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1057*15dc779aSAndroid Build Coastguard Worker
1058*15dc779aSAndroid Build Coastguard Worker x5r = *data;
1059*15dc779aSAndroid Build Coastguard Worker x5i = *(data + 1);
1060*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1061*15dc779aSAndroid Build Coastguard Worker
1062*15dc779aSAndroid Build Coastguard Worker x7r = *data;
1063*15dc779aSAndroid Build Coastguard Worker x7i = *(data + 1);
1064*15dc779aSAndroid Build Coastguard Worker data -= 7 * (del << 1);
1065*15dc779aSAndroid Build Coastguard Worker
1066*15dc779aSAndroid Build Coastguard Worker x1r = x1r + x5r;
1067*15dc779aSAndroid Build Coastguard Worker x1i = x1i + x5i;
1068*15dc779aSAndroid Build Coastguard Worker x5r = x1r - (x5r << 1);
1069*15dc779aSAndroid Build Coastguard Worker x5i = x1i - (x5i << 1);
1070*15dc779aSAndroid Build Coastguard Worker
1071*15dc779aSAndroid Build Coastguard Worker x3r = x3r + x7r;
1072*15dc779aSAndroid Build Coastguard Worker x3i = x3i + x7i;
1073*15dc779aSAndroid Build Coastguard Worker x7r = x3r - (x7r << 1);
1074*15dc779aSAndroid Build Coastguard Worker x7i = x3i - (x7i << 1);
1075*15dc779aSAndroid Build Coastguard Worker
1076*15dc779aSAndroid Build Coastguard Worker x1r = x1r + x3r;
1077*15dc779aSAndroid Build Coastguard Worker x1i = x1i + x3i;
1078*15dc779aSAndroid Build Coastguard Worker x3r = x1r - (x3r << 1);
1079*15dc779aSAndroid Build Coastguard Worker x3i = x1i - (x3i << 1);
1080*15dc779aSAndroid Build Coastguard Worker
1081*15dc779aSAndroid Build Coastguard Worker x5r = x5r + x5i;
1082*15dc779aSAndroid Build Coastguard Worker x5i = x5r - (x5i << 1);
1083*15dc779aSAndroid Build Coastguard Worker
1084*15dc779aSAndroid Build Coastguard Worker x7r = x7r + x7i;
1085*15dc779aSAndroid Build Coastguard Worker x7i = x7r - (x7i << 1);
1086*15dc779aSAndroid Build Coastguard Worker
1087*15dc779aSAndroid Build Coastguard Worker x7i = x5r - x7i;
1088*15dc779aSAndroid Build Coastguard Worker x5r = x7i - (x5r << 1);
1089*15dc779aSAndroid Build Coastguard Worker
1090*15dc779aSAndroid Build Coastguard Worker x5i = x7r - x5i;
1091*15dc779aSAndroid Build Coastguard Worker x7r = x5i - (x7r << 1);
1092*15dc779aSAndroid Build Coastguard Worker
1093*15dc779aSAndroid Build Coastguard Worker x7i = x7i << 1;
1094*15dc779aSAndroid Build Coastguard Worker x5r = x5r << 1;
1095*15dc779aSAndroid Build Coastguard Worker x5i = x5i << 1;
1096*15dc779aSAndroid Build Coastguard Worker x7r = x7r << 1;
1097*15dc779aSAndroid Build Coastguard Worker
1098*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x1r;
1099*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x1i;
1100*15dc779aSAndroid Build Coastguard Worker x1r = x0r - (x1r << 1);
1101*15dc779aSAndroid Build Coastguard Worker x1i = x0i - (x1i << 1);
1102*15dc779aSAndroid Build Coastguard Worker
1103*15dc779aSAndroid Build Coastguard Worker x2r = x2r + x3i;
1104*15dc779aSAndroid Build Coastguard Worker tmp = x2r - (x3i << 1);
1105*15dc779aSAndroid Build Coastguard Worker x2i = x2i - x3r;
1106*15dc779aSAndroid Build Coastguard Worker x3i = x2i + (x3r << 1);
1107*15dc779aSAndroid Build Coastguard Worker
1108*15dc779aSAndroid Build Coastguard Worker *data = x0r;
1109*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x0i;
1110*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1111*15dc779aSAndroid Build Coastguard Worker
1112*15dc779aSAndroid Build Coastguard Worker *data = x2r;
1113*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x2i;
1114*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1115*15dc779aSAndroid Build Coastguard Worker
1116*15dc779aSAndroid Build Coastguard Worker *data = x1r;
1117*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x1i;
1118*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1119*15dc779aSAndroid Build Coastguard Worker
1120*15dc779aSAndroid Build Coastguard Worker *data = tmp;
1121*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x3i;
1122*15dc779aSAndroid Build Coastguard Worker data -= 5 * (del << 1);
1123*15dc779aSAndroid Build Coastguard Worker
1124*15dc779aSAndroid Build Coastguard Worker tmp = 0x5A82;
1125*15dc779aSAndroid Build Coastguard Worker
1126*15dc779aSAndroid Build Coastguard Worker x7i = x4r + (ixheaacd_mult32x16lin32(x7i, tmp));
1127*15dc779aSAndroid Build Coastguard Worker x4r = x7i - (x4r << 1);
1128*15dc779aSAndroid Build Coastguard Worker x7r = x4i + (ixheaacd_mult32x16lin32(x7r, tmp));
1129*15dc779aSAndroid Build Coastguard Worker x4i = x7r - (x4i << 1);
1130*15dc779aSAndroid Build Coastguard Worker
1131*15dc779aSAndroid Build Coastguard Worker x5i = x6r + (ixheaacd_mult32x16lin32(x5i, tmp));
1132*15dc779aSAndroid Build Coastguard Worker x6r = x5i - (x6r << 1);
1133*15dc779aSAndroid Build Coastguard Worker x5r = x6i + (ixheaacd_mult32x16lin32(x5r, tmp));
1134*15dc779aSAndroid Build Coastguard Worker x6i = x5r - (x6i << 1);
1135*15dc779aSAndroid Build Coastguard Worker
1136*15dc779aSAndroid Build Coastguard Worker *data = x7i;
1137*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x7r;
1138*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1139*15dc779aSAndroid Build Coastguard Worker
1140*15dc779aSAndroid Build Coastguard Worker *data = x5i;
1141*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x5r;
1142*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1143*15dc779aSAndroid Build Coastguard Worker
1144*15dc779aSAndroid Build Coastguard Worker *data = -x4r;
1145*15dc779aSAndroid Build Coastguard Worker *(data + 1) = -x4i;
1146*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1147*15dc779aSAndroid Build Coastguard Worker
1148*15dc779aSAndroid Build Coastguard Worker *data = -x6r;
1149*15dc779aSAndroid Build Coastguard Worker *(data + 1) = -x6i;
1150*15dc779aSAndroid Build Coastguard Worker
1151*15dc779aSAndroid Build Coastguard Worker data -= 7 * (del << 1);
1152*15dc779aSAndroid Build Coastguard Worker }
1153*15dc779aSAndroid Build Coastguard Worker
1154*15dc779aSAndroid Build Coastguard Worker twiddles = ptr_twiddle;
1155*15dc779aSAndroid Build Coastguard Worker data = ptr_y;
1156*15dc779aSAndroid Build Coastguard Worker
1157*15dc779aSAndroid Build Coastguard Worker for (j = nodespacing; j < nodespacing * del; j += nodespacing) {
1158*15dc779aSAndroid Build Coastguard Worker data = data + 2;
1159*15dc779aSAndroid Build Coastguard Worker
1160*15dc779aSAndroid Build Coastguard Worker for (k = in_loop_cnt; k != 0; k--) {
1161*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1162*15dc779aSAndroid Build Coastguard Worker x2r = *data;
1163*15dc779aSAndroid Build Coastguard Worker x2i = *(data + 1);
1164*15dc779aSAndroid Build Coastguard Worker
1165*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1166*15dc779aSAndroid Build Coastguard Worker x4r = *data;
1167*15dc779aSAndroid Build Coastguard Worker x4i = *(data + 1);
1168*15dc779aSAndroid Build Coastguard Worker
1169*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1170*15dc779aSAndroid Build Coastguard Worker x6r = *data;
1171*15dc779aSAndroid Build Coastguard Worker x6i = *(data + 1);
1172*15dc779aSAndroid Build Coastguard Worker
1173*15dc779aSAndroid Build Coastguard Worker data -= 6 * (del << 1);
1174*15dc779aSAndroid Build Coastguard Worker
1175*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1176*15dc779aSAndroid Build Coastguard Worker
1177*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1178*15dc779aSAndroid Build Coastguard Worker
1179*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x2r, twiddle_val) -
1180*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x2i, twiddle_val));
1181*15dc779aSAndroid Build Coastguard Worker x2i = (ixheaacd_mac32x16lin32(
1182*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x2r, twiddle_val), x2i,
1183*15dc779aSAndroid Build Coastguard Worker twiddle_val))
1184*15dc779aSAndroid Build Coastguard Worker << 1;
1185*15dc779aSAndroid Build Coastguard Worker x2r = tmp << 1;
1186*15dc779aSAndroid Build Coastguard Worker
1187*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1188*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1189*15dc779aSAndroid Build Coastguard Worker
1190*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x4r, twiddle_val) -
1191*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x4i, twiddle_val));
1192*15dc779aSAndroid Build Coastguard Worker x4i = (ixheaacd_mac32x16lin32(
1193*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x4r, twiddle_val), x4i,
1194*15dc779aSAndroid Build Coastguard Worker twiddle_val))
1195*15dc779aSAndroid Build Coastguard Worker << 1;
1196*15dc779aSAndroid Build Coastguard Worker x4r = tmp << 1;
1197*15dc779aSAndroid Build Coastguard Worker
1198*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1199*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1200*15dc779aSAndroid Build Coastguard Worker
1201*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x6r, twiddle_val) -
1202*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x6i, twiddle_val));
1203*15dc779aSAndroid Build Coastguard Worker x6i = (ixheaacd_mac32x16lin32(
1204*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x6r, twiddle_val), x6i,
1205*15dc779aSAndroid Build Coastguard Worker twiddle_val))
1206*15dc779aSAndroid Build Coastguard Worker << 1;
1207*15dc779aSAndroid Build Coastguard Worker x6r = tmp << 1;
1208*15dc779aSAndroid Build Coastguard Worker
1209*15dc779aSAndroid Build Coastguard Worker x0r = *data;
1210*15dc779aSAndroid Build Coastguard Worker x0i = *(data + 1);
1211*15dc779aSAndroid Build Coastguard Worker data += (del << 1);
1212*15dc779aSAndroid Build Coastguard Worker
1213*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x4r;
1214*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x4i;
1215*15dc779aSAndroid Build Coastguard Worker x4r = x0r - (x4r << 1);
1216*15dc779aSAndroid Build Coastguard Worker x4i = x0i - (x4i << 1);
1217*15dc779aSAndroid Build Coastguard Worker
1218*15dc779aSAndroid Build Coastguard Worker x2r = x2r + x6r;
1219*15dc779aSAndroid Build Coastguard Worker x2i = x2i + x6i;
1220*15dc779aSAndroid Build Coastguard Worker x6r = x2r - (x6r << 1);
1221*15dc779aSAndroid Build Coastguard Worker x6i = x2i - (x6i << 1);
1222*15dc779aSAndroid Build Coastguard Worker
1223*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x2r;
1224*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x2i;
1225*15dc779aSAndroid Build Coastguard Worker x2r = x0r - (x2r << 1);
1226*15dc779aSAndroid Build Coastguard Worker x2i = x0i - (x2i << 1);
1227*15dc779aSAndroid Build Coastguard Worker
1228*15dc779aSAndroid Build Coastguard Worker x4r = x4r + x6i;
1229*15dc779aSAndroid Build Coastguard Worker x4i = x4i - x6r;
1230*15dc779aSAndroid Build Coastguard Worker tmp = x6r;
1231*15dc779aSAndroid Build Coastguard Worker x6r = x4r - (x6i << 1);
1232*15dc779aSAndroid Build Coastguard Worker x6i = x4i + (tmp << 1);
1233*15dc779aSAndroid Build Coastguard Worker
1234*15dc779aSAndroid Build Coastguard Worker x1r = *data;
1235*15dc779aSAndroid Build Coastguard Worker x1i = *(data + 1);
1236*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1237*15dc779aSAndroid Build Coastguard Worker
1238*15dc779aSAndroid Build Coastguard Worker twiddles -= 5 * (j >> 3);
1239*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1240*15dc779aSAndroid Build Coastguard Worker
1241*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x1r, twiddle_val) -
1242*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x1i, twiddle_val));
1243*15dc779aSAndroid Build Coastguard Worker x1i = (ixheaacd_mac32x16lin32(
1244*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x1r, twiddle_val), x1i,
1245*15dc779aSAndroid Build Coastguard Worker twiddle_val))
1246*15dc779aSAndroid Build Coastguard Worker << 1;
1247*15dc779aSAndroid Build Coastguard Worker x1r = tmp << 1;
1248*15dc779aSAndroid Build Coastguard Worker
1249*15dc779aSAndroid Build Coastguard Worker x3r = *data;
1250*15dc779aSAndroid Build Coastguard Worker x3i = *(data + 1);
1251*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1252*15dc779aSAndroid Build Coastguard Worker
1253*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1254*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1255*15dc779aSAndroid Build Coastguard Worker
1256*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x3r, twiddle_val) -
1257*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x3i, twiddle_val));
1258*15dc779aSAndroid Build Coastguard Worker x3i = (ixheaacd_mac32x16lin32(
1259*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x3r, twiddle_val), x3i, twiddle_val));
1260*15dc779aSAndroid Build Coastguard Worker x3r = tmp;
1261*15dc779aSAndroid Build Coastguard Worker
1262*15dc779aSAndroid Build Coastguard Worker x5r = *data;
1263*15dc779aSAndroid Build Coastguard Worker x5i = *(data + 1);
1264*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1265*15dc779aSAndroid Build Coastguard Worker
1266*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1267*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1268*15dc779aSAndroid Build Coastguard Worker
1269*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x5r, twiddle_val) -
1270*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x5i, twiddle_val));
1271*15dc779aSAndroid Build Coastguard Worker x5i = (ixheaacd_mac32x16lin32(
1272*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x5r, twiddle_val), x5i, twiddle_val));
1273*15dc779aSAndroid Build Coastguard Worker x5r = tmp;
1274*15dc779aSAndroid Build Coastguard Worker
1275*15dc779aSAndroid Build Coastguard Worker x7r = *data;
1276*15dc779aSAndroid Build Coastguard Worker x7i = *(data + 1);
1277*15dc779aSAndroid Build Coastguard Worker data -= 7 * (del << 1);
1278*15dc779aSAndroid Build Coastguard Worker
1279*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1280*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1281*15dc779aSAndroid Build Coastguard Worker twiddles -= 7 * (j >> 3);
1282*15dc779aSAndroid Build Coastguard Worker
1283*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x7r, twiddle_val) -
1284*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x7i, twiddle_val));
1285*15dc779aSAndroid Build Coastguard Worker x7i = (ixheaacd_mac32x16lin32(
1286*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x7r, twiddle_val), x7i, twiddle_val));
1287*15dc779aSAndroid Build Coastguard Worker x7r = tmp;
1288*15dc779aSAndroid Build Coastguard Worker
1289*15dc779aSAndroid Build Coastguard Worker x1r = x1r + (x5r << 1);
1290*15dc779aSAndroid Build Coastguard Worker x1i = x1i + (x5i << 1);
1291*15dc779aSAndroid Build Coastguard Worker x5r = x1r - (x5r << 2);
1292*15dc779aSAndroid Build Coastguard Worker x5i = x1i - (x5i << 2);
1293*15dc779aSAndroid Build Coastguard Worker
1294*15dc779aSAndroid Build Coastguard Worker x3r = x3r + x7r;
1295*15dc779aSAndroid Build Coastguard Worker x3i = x3i + x7i;
1296*15dc779aSAndroid Build Coastguard Worker x7r = x3r - (x7r << 1);
1297*15dc779aSAndroid Build Coastguard Worker x7i = x3i - (x7i << 1);
1298*15dc779aSAndroid Build Coastguard Worker
1299*15dc779aSAndroid Build Coastguard Worker x1r = x1r + (x3r << 1);
1300*15dc779aSAndroid Build Coastguard Worker x1i = x1i + (x3i << 1);
1301*15dc779aSAndroid Build Coastguard Worker x3r = x1r - (x3r << 2);
1302*15dc779aSAndroid Build Coastguard Worker x3i = x1i - (x3i << 2);
1303*15dc779aSAndroid Build Coastguard Worker
1304*15dc779aSAndroid Build Coastguard Worker x5r = x5r + x5i;
1305*15dc779aSAndroid Build Coastguard Worker x5i = x5r - (x5i << 1);
1306*15dc779aSAndroid Build Coastguard Worker
1307*15dc779aSAndroid Build Coastguard Worker x7r = x7r + x7i;
1308*15dc779aSAndroid Build Coastguard Worker x7i = x7r - (x7i << 1);
1309*15dc779aSAndroid Build Coastguard Worker
1310*15dc779aSAndroid Build Coastguard Worker x7i = x5r - (x7i << 1);
1311*15dc779aSAndroid Build Coastguard Worker x5r = x7i - (x5r << 1);
1312*15dc779aSAndroid Build Coastguard Worker
1313*15dc779aSAndroid Build Coastguard Worker x5i = (x7r << 1) - x5i;
1314*15dc779aSAndroid Build Coastguard Worker x7r = x5i - (x7r << 2);
1315*15dc779aSAndroid Build Coastguard Worker
1316*15dc779aSAndroid Build Coastguard Worker x7i = x7i << 1;
1317*15dc779aSAndroid Build Coastguard Worker x5r = x5r << 1;
1318*15dc779aSAndroid Build Coastguard Worker x5i = x5i << 1;
1319*15dc779aSAndroid Build Coastguard Worker x7r = x7r << 1;
1320*15dc779aSAndroid Build Coastguard Worker
1321*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x1r;
1322*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x1i;
1323*15dc779aSAndroid Build Coastguard Worker x1r = x0r - (x1r << 1);
1324*15dc779aSAndroid Build Coastguard Worker x1i = x0i - (x1i << 1);
1325*15dc779aSAndroid Build Coastguard Worker
1326*15dc779aSAndroid Build Coastguard Worker x2r = x2r + x3i;
1327*15dc779aSAndroid Build Coastguard Worker tmp = x2r - (x3i << 1);
1328*15dc779aSAndroid Build Coastguard Worker x2i = x2i - x3r;
1329*15dc779aSAndroid Build Coastguard Worker x3i = x2i + (x3r << 1);
1330*15dc779aSAndroid Build Coastguard Worker
1331*15dc779aSAndroid Build Coastguard Worker *data = x0r;
1332*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x0i;
1333*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1334*15dc779aSAndroid Build Coastguard Worker
1335*15dc779aSAndroid Build Coastguard Worker *data = x2r;
1336*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x2i;
1337*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1338*15dc779aSAndroid Build Coastguard Worker
1339*15dc779aSAndroid Build Coastguard Worker *data = x1r;
1340*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x1i;
1341*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1342*15dc779aSAndroid Build Coastguard Worker
1343*15dc779aSAndroid Build Coastguard Worker *data = tmp;
1344*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x3i;
1345*15dc779aSAndroid Build Coastguard Worker data -= 5 * (del << 1);
1346*15dc779aSAndroid Build Coastguard Worker
1347*15dc779aSAndroid Build Coastguard Worker tmp = 0x5A82;
1348*15dc779aSAndroid Build Coastguard Worker
1349*15dc779aSAndroid Build Coastguard Worker x7i = x4r + (ixheaacd_mult32x16lin32(x7i, tmp));
1350*15dc779aSAndroid Build Coastguard Worker x4r = x7i - (x4r << 1);
1351*15dc779aSAndroid Build Coastguard Worker
1352*15dc779aSAndroid Build Coastguard Worker x7r = x4i + (ixheaacd_mult32x16lin32(x7r, tmp));
1353*15dc779aSAndroid Build Coastguard Worker x4i = x7r - (x4i << 1);
1354*15dc779aSAndroid Build Coastguard Worker
1355*15dc779aSAndroid Build Coastguard Worker x5i = x6r + (ixheaacd_mult32x16lin32(x5i, tmp));
1356*15dc779aSAndroid Build Coastguard Worker x6r = x5i - (x6r << 1);
1357*15dc779aSAndroid Build Coastguard Worker
1358*15dc779aSAndroid Build Coastguard Worker x5r = x6i + (ixheaacd_mult32x16lin32(x5r, tmp));
1359*15dc779aSAndroid Build Coastguard Worker x6i = x5r - (x6i << 1);
1360*15dc779aSAndroid Build Coastguard Worker
1361*15dc779aSAndroid Build Coastguard Worker *data = x7i;
1362*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x7r;
1363*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1364*15dc779aSAndroid Build Coastguard Worker
1365*15dc779aSAndroid Build Coastguard Worker *data = x5i;
1366*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x5r;
1367*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1368*15dc779aSAndroid Build Coastguard Worker
1369*15dc779aSAndroid Build Coastguard Worker *data = -x4r;
1370*15dc779aSAndroid Build Coastguard Worker *(data + 1) = -x4i;
1371*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1372*15dc779aSAndroid Build Coastguard Worker
1373*15dc779aSAndroid Build Coastguard Worker *data = -x6r;
1374*15dc779aSAndroid Build Coastguard Worker *(data + 1) = -x6i;
1375*15dc779aSAndroid Build Coastguard Worker
1376*15dc779aSAndroid Build Coastguard Worker data -= 7 * (del << 1);
1377*15dc779aSAndroid Build Coastguard Worker data += (del << 4);
1378*15dc779aSAndroid Build Coastguard Worker }
1379*15dc779aSAndroid Build Coastguard Worker data -= npoints << 1;
1380*15dc779aSAndroid Build Coastguard Worker }
1381*15dc779aSAndroid Build Coastguard Worker nodespacing >>= 3;
1382*15dc779aSAndroid Build Coastguard Worker del <<= 3;
1383*15dc779aSAndroid Build Coastguard Worker in_loop_cnt >>= 3;
1384*15dc779aSAndroid Build Coastguard Worker }
1385*15dc779aSAndroid Build Coastguard Worker
1386*15dc779aSAndroid Build Coastguard Worker {
1387*15dc779aSAndroid Build Coastguard Worker WORD32 *data = ptr_y;
1388*15dc779aSAndroid Build Coastguard Worker const WORD32 *twiddles;
1389*15dc779aSAndroid Build Coastguard Worker twiddles = ptr_twiddle;
1390*15dc779aSAndroid Build Coastguard Worker data = ptr_y;
1391*15dc779aSAndroid Build Coastguard Worker data = data - 2;
1392*15dc779aSAndroid Build Coastguard Worker
1393*15dc779aSAndroid Build Coastguard Worker for (j = 0; j < nodespacing * del; j += nodespacing) {
1394*15dc779aSAndroid Build Coastguard Worker data = data + 2;
1395*15dc779aSAndroid Build Coastguard Worker
1396*15dc779aSAndroid Build Coastguard Worker {
1397*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1398*15dc779aSAndroid Build Coastguard Worker x2r = *data;
1399*15dc779aSAndroid Build Coastguard Worker x2i = *(data + 1);
1400*15dc779aSAndroid Build Coastguard Worker
1401*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1402*15dc779aSAndroid Build Coastguard Worker x4r = *data;
1403*15dc779aSAndroid Build Coastguard Worker x4i = *(data + 1);
1404*15dc779aSAndroid Build Coastguard Worker
1405*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1406*15dc779aSAndroid Build Coastguard Worker x6r = *data;
1407*15dc779aSAndroid Build Coastguard Worker x6i = *(data + 1);
1408*15dc779aSAndroid Build Coastguard Worker
1409*15dc779aSAndroid Build Coastguard Worker data -= 6 * (del << 1);
1410*15dc779aSAndroid Build Coastguard Worker
1411*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1412*15dc779aSAndroid Build Coastguard Worker
1413*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1414*15dc779aSAndroid Build Coastguard Worker
1415*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x2r, twiddle_val) -
1416*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x2i, twiddle_val));
1417*15dc779aSAndroid Build Coastguard Worker x2i = (ixheaacd_mac32x16lin32(
1418*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x2r, twiddle_val), x2i,
1419*15dc779aSAndroid Build Coastguard Worker twiddle_val))
1420*15dc779aSAndroid Build Coastguard Worker << 1;
1421*15dc779aSAndroid Build Coastguard Worker x2r = tmp << 1;
1422*15dc779aSAndroid Build Coastguard Worker
1423*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1424*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1425*15dc779aSAndroid Build Coastguard Worker
1426*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x4r, twiddle_val) -
1427*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x4i, twiddle_val));
1428*15dc779aSAndroid Build Coastguard Worker x4i = (ixheaacd_mac32x16lin32(
1429*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x4r, twiddle_val), x4i,
1430*15dc779aSAndroid Build Coastguard Worker twiddle_val))
1431*15dc779aSAndroid Build Coastguard Worker << 1;
1432*15dc779aSAndroid Build Coastguard Worker x4r = tmp << 1;
1433*15dc779aSAndroid Build Coastguard Worker
1434*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1435*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1436*15dc779aSAndroid Build Coastguard Worker
1437*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x6r, twiddle_val) -
1438*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x6i, twiddle_val));
1439*15dc779aSAndroid Build Coastguard Worker x6i = (ixheaacd_mac32x16lin32(
1440*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x6r, twiddle_val), x6i,
1441*15dc779aSAndroid Build Coastguard Worker twiddle_val))
1442*15dc779aSAndroid Build Coastguard Worker << 1;
1443*15dc779aSAndroid Build Coastguard Worker x6r = tmp << 1;
1444*15dc779aSAndroid Build Coastguard Worker
1445*15dc779aSAndroid Build Coastguard Worker x0r = *data;
1446*15dc779aSAndroid Build Coastguard Worker x0i = *(data + 1);
1447*15dc779aSAndroid Build Coastguard Worker data += (del << 1);
1448*15dc779aSAndroid Build Coastguard Worker
1449*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x4r;
1450*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x4i;
1451*15dc779aSAndroid Build Coastguard Worker x4r = x0r - (x4r << 1);
1452*15dc779aSAndroid Build Coastguard Worker x4i = x0i - (x4i << 1);
1453*15dc779aSAndroid Build Coastguard Worker
1454*15dc779aSAndroid Build Coastguard Worker x2r = x2r + x6r;
1455*15dc779aSAndroid Build Coastguard Worker x2i = x2i + x6i;
1456*15dc779aSAndroid Build Coastguard Worker x6r = x2r - (x6r << 1);
1457*15dc779aSAndroid Build Coastguard Worker x6i = x2i - (x6i << 1);
1458*15dc779aSAndroid Build Coastguard Worker
1459*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x2r;
1460*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x2i;
1461*15dc779aSAndroid Build Coastguard Worker x2r = x0r - (x2r << 1);
1462*15dc779aSAndroid Build Coastguard Worker x2i = x0i - (x2i << 1);
1463*15dc779aSAndroid Build Coastguard Worker
1464*15dc779aSAndroid Build Coastguard Worker x4r = x4r + x6i;
1465*15dc779aSAndroid Build Coastguard Worker x4i = x4i - x6r;
1466*15dc779aSAndroid Build Coastguard Worker tmp = x6r;
1467*15dc779aSAndroid Build Coastguard Worker x6r = x4r - (x6i << 1);
1468*15dc779aSAndroid Build Coastguard Worker x6i = x4i + (tmp << 1);
1469*15dc779aSAndroid Build Coastguard Worker
1470*15dc779aSAndroid Build Coastguard Worker x1r = *data;
1471*15dc779aSAndroid Build Coastguard Worker x1i = *(data + 1);
1472*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1473*15dc779aSAndroid Build Coastguard Worker
1474*15dc779aSAndroid Build Coastguard Worker twiddles -= 5 * (j >> 3);
1475*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1476*15dc779aSAndroid Build Coastguard Worker
1477*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x1r, twiddle_val) -
1478*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x1i, twiddle_val));
1479*15dc779aSAndroid Build Coastguard Worker x1i = (ixheaacd_mac32x16lin32(
1480*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x1r, twiddle_val), x1i,
1481*15dc779aSAndroid Build Coastguard Worker twiddle_val))
1482*15dc779aSAndroid Build Coastguard Worker << 1;
1483*15dc779aSAndroid Build Coastguard Worker x1r = tmp << 1;
1484*15dc779aSAndroid Build Coastguard Worker
1485*15dc779aSAndroid Build Coastguard Worker x3r = *data;
1486*15dc779aSAndroid Build Coastguard Worker x3i = *(data + 1);
1487*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1488*15dc779aSAndroid Build Coastguard Worker
1489*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1490*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1491*15dc779aSAndroid Build Coastguard Worker
1492*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x3r, twiddle_val) -
1493*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x3i, twiddle_val));
1494*15dc779aSAndroid Build Coastguard Worker x3i = (ixheaacd_mac32x16lin32(
1495*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x3r, twiddle_val), x3i, twiddle_val));
1496*15dc779aSAndroid Build Coastguard Worker x3r = tmp;
1497*15dc779aSAndroid Build Coastguard Worker
1498*15dc779aSAndroid Build Coastguard Worker x5r = *data;
1499*15dc779aSAndroid Build Coastguard Worker x5i = *(data + 1);
1500*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1501*15dc779aSAndroid Build Coastguard Worker
1502*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1503*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1504*15dc779aSAndroid Build Coastguard Worker
1505*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x5r, twiddle_val) -
1506*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x5i, twiddle_val));
1507*15dc779aSAndroid Build Coastguard Worker x5i = (ixheaacd_mac32x16lin32(
1508*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x5r, twiddle_val), x5i, twiddle_val));
1509*15dc779aSAndroid Build Coastguard Worker x5r = tmp;
1510*15dc779aSAndroid Build Coastguard Worker
1511*15dc779aSAndroid Build Coastguard Worker x7r = *data;
1512*15dc779aSAndroid Build Coastguard Worker x7i = *(data + 1);
1513*15dc779aSAndroid Build Coastguard Worker data -= 7 * (del << 1);
1514*15dc779aSAndroid Build Coastguard Worker
1515*15dc779aSAndroid Build Coastguard Worker twiddles += (j >> 2);
1516*15dc779aSAndroid Build Coastguard Worker twiddle_val = *(twiddles);
1517*15dc779aSAndroid Build Coastguard Worker twiddles -= 7 * (j >> 3);
1518*15dc779aSAndroid Build Coastguard Worker
1519*15dc779aSAndroid Build Coastguard Worker tmp = (ixheaacd_mult32x16lin32(x7r, twiddle_val) -
1520*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x7i, twiddle_val));
1521*15dc779aSAndroid Build Coastguard Worker x7i = (ixheaacd_mac32x16lin32(
1522*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16hin32(x7r, twiddle_val), x7i, twiddle_val));
1523*15dc779aSAndroid Build Coastguard Worker x7r = tmp;
1524*15dc779aSAndroid Build Coastguard Worker
1525*15dc779aSAndroid Build Coastguard Worker x1r = x1r + (x5r << 1);
1526*15dc779aSAndroid Build Coastguard Worker x1i = x1i + (x5i << 1);
1527*15dc779aSAndroid Build Coastguard Worker x5r = x1r - (x5r << 2);
1528*15dc779aSAndroid Build Coastguard Worker x5i = x1i - (x5i << 2);
1529*15dc779aSAndroid Build Coastguard Worker
1530*15dc779aSAndroid Build Coastguard Worker x3r = x3r + x7r;
1531*15dc779aSAndroid Build Coastguard Worker x3i = x3i + x7i;
1532*15dc779aSAndroid Build Coastguard Worker x7r = x3r - (x7r << 1);
1533*15dc779aSAndroid Build Coastguard Worker x7i = x3i - (x7i << 1);
1534*15dc779aSAndroid Build Coastguard Worker
1535*15dc779aSAndroid Build Coastguard Worker x1r = x1r + (x3r << 1);
1536*15dc779aSAndroid Build Coastguard Worker x1i = x1i + (x3i << 1);
1537*15dc779aSAndroid Build Coastguard Worker x3r = x1r - (x3r << 2);
1538*15dc779aSAndroid Build Coastguard Worker x3i = x1i - (x3i << 2);
1539*15dc779aSAndroid Build Coastguard Worker
1540*15dc779aSAndroid Build Coastguard Worker x5r = x5r + x5i;
1541*15dc779aSAndroid Build Coastguard Worker x5i = x5r - (x5i << 1);
1542*15dc779aSAndroid Build Coastguard Worker
1543*15dc779aSAndroid Build Coastguard Worker x7r = x7r + x7i;
1544*15dc779aSAndroid Build Coastguard Worker x7i = x7r - (x7i << 1);
1545*15dc779aSAndroid Build Coastguard Worker
1546*15dc779aSAndroid Build Coastguard Worker x7i = x5r - (x7i << 1);
1547*15dc779aSAndroid Build Coastguard Worker x5r = x7i - (x5r << 1);
1548*15dc779aSAndroid Build Coastguard Worker
1549*15dc779aSAndroid Build Coastguard Worker x5i = (x7r << 1) - x5i;
1550*15dc779aSAndroid Build Coastguard Worker x7r = x5i - (x7r << 2);
1551*15dc779aSAndroid Build Coastguard Worker
1552*15dc779aSAndroid Build Coastguard Worker x7i = x7i << 1;
1553*15dc779aSAndroid Build Coastguard Worker x5r = x5r << 1;
1554*15dc779aSAndroid Build Coastguard Worker x5i = x5i << 1;
1555*15dc779aSAndroid Build Coastguard Worker x7r = x7r << 1;
1556*15dc779aSAndroid Build Coastguard Worker
1557*15dc779aSAndroid Build Coastguard Worker x0r = x0r + x1r;
1558*15dc779aSAndroid Build Coastguard Worker x0i = x0i + x1i;
1559*15dc779aSAndroid Build Coastguard Worker x1r = x0r - (x1r << 1);
1560*15dc779aSAndroid Build Coastguard Worker x1i = x0i - (x1i << 1);
1561*15dc779aSAndroid Build Coastguard Worker
1562*15dc779aSAndroid Build Coastguard Worker x2r = x2r + x3i;
1563*15dc779aSAndroid Build Coastguard Worker tmp = x2r - (x3i << 1);
1564*15dc779aSAndroid Build Coastguard Worker x2i = x2i - x3r;
1565*15dc779aSAndroid Build Coastguard Worker x3i = x2i + (x3r << 1);
1566*15dc779aSAndroid Build Coastguard Worker
1567*15dc779aSAndroid Build Coastguard Worker *data = x0r;
1568*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x0i;
1569*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1570*15dc779aSAndroid Build Coastguard Worker
1571*15dc779aSAndroid Build Coastguard Worker *data = x2r;
1572*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x2i;
1573*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1574*15dc779aSAndroid Build Coastguard Worker
1575*15dc779aSAndroid Build Coastguard Worker *data = x1r;
1576*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x1i;
1577*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1578*15dc779aSAndroid Build Coastguard Worker
1579*15dc779aSAndroid Build Coastguard Worker *data = tmp;
1580*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x3i;
1581*15dc779aSAndroid Build Coastguard Worker data -= 5 * (del << 1);
1582*15dc779aSAndroid Build Coastguard Worker
1583*15dc779aSAndroid Build Coastguard Worker tmp = 0x5A82;
1584*15dc779aSAndroid Build Coastguard Worker
1585*15dc779aSAndroid Build Coastguard Worker x7i = x4r + (ixheaacd_mult32x16lin32(x7i, tmp));
1586*15dc779aSAndroid Build Coastguard Worker x4r = x7i - (x4r << 1);
1587*15dc779aSAndroid Build Coastguard Worker
1588*15dc779aSAndroid Build Coastguard Worker x7r = x4i + (ixheaacd_mult32x16lin32(x7r, tmp));
1589*15dc779aSAndroid Build Coastguard Worker x4i = x7r - (x4i << 1);
1590*15dc779aSAndroid Build Coastguard Worker
1591*15dc779aSAndroid Build Coastguard Worker x5i = x6r + (ixheaacd_mult32x16lin32(x5i, tmp));
1592*15dc779aSAndroid Build Coastguard Worker x6r = x5i - (x6r << 1);
1593*15dc779aSAndroid Build Coastguard Worker
1594*15dc779aSAndroid Build Coastguard Worker x5r = x6i + (ixheaacd_mult32x16lin32(x5r, tmp));
1595*15dc779aSAndroid Build Coastguard Worker x6i = x5r - (x6i << 1);
1596*15dc779aSAndroid Build Coastguard Worker
1597*15dc779aSAndroid Build Coastguard Worker *data = x7i;
1598*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x7r;
1599*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1600*15dc779aSAndroid Build Coastguard Worker
1601*15dc779aSAndroid Build Coastguard Worker *data = x5i;
1602*15dc779aSAndroid Build Coastguard Worker *(data + 1) = x5r;
1603*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1604*15dc779aSAndroid Build Coastguard Worker
1605*15dc779aSAndroid Build Coastguard Worker *data = -x4r;
1606*15dc779aSAndroid Build Coastguard Worker *(data + 1) = -x4i;
1607*15dc779aSAndroid Build Coastguard Worker data += (del << 2);
1608*15dc779aSAndroid Build Coastguard Worker
1609*15dc779aSAndroid Build Coastguard Worker *data = -x6r;
1610*15dc779aSAndroid Build Coastguard Worker *(data + 1) = -x6i;
1611*15dc779aSAndroid Build Coastguard Worker
1612*15dc779aSAndroid Build Coastguard Worker data -= 7 * (del << 1);
1613*15dc779aSAndroid Build Coastguard Worker data += (del << 4);
1614*15dc779aSAndroid Build Coastguard Worker }
1615*15dc779aSAndroid Build Coastguard Worker data -= npoints << 1;
1616*15dc779aSAndroid Build Coastguard Worker }
1617*15dc779aSAndroid Build Coastguard Worker
1618*15dc779aSAndroid Build Coastguard Worker nodespacing >>= 3;
1619*15dc779aSAndroid Build Coastguard Worker del <<= 3;
1620*15dc779aSAndroid Build Coastguard Worker in_loop_cnt >>= 3;
1621*15dc779aSAndroid Build Coastguard Worker }
1622*15dc779aSAndroid Build Coastguard Worker }
1623*15dc779aSAndroid Build Coastguard Worker
ixheaacd_inverse_transform_960(WORD32 spec_data[],WORD32 scratch[],ia_aac_dec_imdct_tables_struct * ptr_imdct_tables,WORD32 expo,WORD32 * imdct_scale)1624*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_inverse_transform_960(
1625*15dc779aSAndroid Build Coastguard Worker WORD32 spec_data[], WORD32 scratch[],
1626*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 expo,
1627*15dc779aSAndroid Build Coastguard Worker WORD32 *imdct_scale) {
1628*15dc779aSAndroid Build Coastguard Worker
1629*15dc779aSAndroid Build Coastguard Worker WORD32 n;
1630*15dc779aSAndroid Build Coastguard Worker WORD32 Nd2;
1631*15dc779aSAndroid Build Coastguard Worker WORD16 const_mltfac;
1632*15dc779aSAndroid Build Coastguard Worker WORD32 neg_expo;
1633*15dc779aSAndroid Build Coastguard Worker
1634*15dc779aSAndroid Build Coastguard Worker WORD32 i;
1635*15dc779aSAndroid Build Coastguard Worker
1636*15dc779aSAndroid Build Coastguard Worker n = 120;
1637*15dc779aSAndroid Build Coastguard Worker Nd2 = n >> 1;
1638*15dc779aSAndroid Build Coastguard Worker neg_expo = 4;
1639*15dc779aSAndroid Build Coastguard Worker
1640*15dc779aSAndroid Build Coastguard Worker ixheaacd_pre_twiddle_120(spec_data, scratch, n, ptr_imdct_tables->cosine_array_240,
1641*15dc779aSAndroid Build Coastguard Worker neg_expo - expo);
1642*15dc779aSAndroid Build Coastguard Worker
1643*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft_120(ptr_imdct_tables, Nd2, spec_data, scratch);
1644*15dc779aSAndroid Build Coastguard Worker
1645*15dc779aSAndroid Build Coastguard Worker neg_expo += 2;
1646*15dc779aSAndroid Build Coastguard Worker *imdct_scale = neg_expo + 1;
1647*15dc779aSAndroid Build Coastguard Worker
1648*15dc779aSAndroid Build Coastguard Worker ixheaacd_post_twiddle_120(spec_data, scratch, ptr_imdct_tables->cosine_array_240,
1649*15dc779aSAndroid Build Coastguard Worker n);
1650*15dc779aSAndroid Build Coastguard Worker const_mltfac = 17476;
1651*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < 120; i++)
1652*15dc779aSAndroid Build Coastguard Worker {
1653*15dc779aSAndroid Build Coastguard Worker spec_data[i] = ixheaac_mult32x16in32_shl(spec_data[i], const_mltfac);
1654*15dc779aSAndroid Build Coastguard Worker }
1655*15dc779aSAndroid Build Coastguard Worker }
1656*15dc779aSAndroid Build Coastguard Worker
ixheaacd_inverse_transform(WORD32 spec_data[],WORD32 scratch[],ia_aac_dec_imdct_tables_struct * ptr_imdct_tables,WORD32 expo,WORD32 npoints)1657*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_inverse_transform(
1658*15dc779aSAndroid Build Coastguard Worker WORD32 spec_data[], WORD32 scratch[],
1659*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 expo,
1660*15dc779aSAndroid Build Coastguard Worker WORD32 npoints) {
1661*15dc779aSAndroid Build Coastguard Worker (*ixheaacd_pretwiddle_compute)(spec_data, spec_data + npoints - 1, scratch,
1662*15dc779aSAndroid Build Coastguard Worker ptr_imdct_tables, (npoints >> 2), expo);
1663*15dc779aSAndroid Build Coastguard Worker
1664*15dc779aSAndroid Build Coastguard Worker (*ixheaacd_imdct_using_fft)(ptr_imdct_tables, npoints >> 1, scratch,
1665*15dc779aSAndroid Build Coastguard Worker spec_data);
1666*15dc779aSAndroid Build Coastguard Worker
1667*15dc779aSAndroid Build Coastguard Worker expo += 2;
1668*15dc779aSAndroid Build Coastguard Worker
1669*15dc779aSAndroid Build Coastguard Worker return expo;
1670*15dc779aSAndroid Build Coastguard Worker }
1671*15dc779aSAndroid Build Coastguard Worker
ixheaacd_mdct_960(WORD32 * inp,WORD32 * scratch,WORD32 * mdct_scale,WORD32 mdct_flag,ia_aac_dec_imdct_tables_struct * imdct_tables_ptr)1672*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_mdct_960(WORD32 *inp, WORD32 *scratch, WORD32 *mdct_scale,
1673*15dc779aSAndroid Build Coastguard Worker WORD32 mdct_flag,
1674*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr) {
1675*15dc779aSAndroid Build Coastguard Worker WORD32 expo, neg_expo = 0, k;
1676*15dc779aSAndroid Build Coastguard Worker
1677*15dc779aSAndroid Build Coastguard Worker WORD16 const_mltfac = 17476;
1678*15dc779aSAndroid Build Coastguard Worker
1679*15dc779aSAndroid Build Coastguard Worker expo = (*ixheaacd_calc_max_spectral_line)(inp, MDCT_LEN_960) - 1;
1680*15dc779aSAndroid Build Coastguard Worker ;
1681*15dc779aSAndroid Build Coastguard Worker
1682*15dc779aSAndroid Build Coastguard Worker memcpy(scratch, inp, sizeof(WORD32) * MDCT_LEN_960);
1683*15dc779aSAndroid Build Coastguard Worker
1684*15dc779aSAndroid Build Coastguard Worker neg_expo = 7 - expo;
1685*15dc779aSAndroid Build Coastguard Worker
1686*15dc779aSAndroid Build Coastguard Worker ixheaacd_pre_twiddle_960(inp, scratch, MDCT_LEN_960, imdct_tables_ptr->cosine_array_1920,
1687*15dc779aSAndroid Build Coastguard Worker neg_expo);
1688*15dc779aSAndroid Build Coastguard Worker
1689*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft_960(inp, scratch, imdct_tables_ptr);
1690*15dc779aSAndroid Build Coastguard Worker
1691*15dc779aSAndroid Build Coastguard Worker ixheaacd_post_twiddle_960(inp, scratch, imdct_tables_ptr->cosine_array_1920,
1692*15dc779aSAndroid Build Coastguard Worker MDCT_LEN_960);
1693*15dc779aSAndroid Build Coastguard Worker
1694*15dc779aSAndroid Build Coastguard Worker if (0 == mdct_flag) {
1695*15dc779aSAndroid Build Coastguard Worker WORD32 *data = inp;
1696*15dc779aSAndroid Build Coastguard Worker
1697*15dc779aSAndroid Build Coastguard Worker for (k = MDCT_LEN_960 - 1; k >= 0; k -= 2) {
1698*15dc779aSAndroid Build Coastguard Worker *data = ixheaac_mult32x16in32_shl(*data, const_mltfac);
1699*15dc779aSAndroid Build Coastguard Worker data++;
1700*15dc779aSAndroid Build Coastguard Worker *data = ixheaac_mult32x16in32_shl(*data, const_mltfac);
1701*15dc779aSAndroid Build Coastguard Worker data++;
1702*15dc779aSAndroid Build Coastguard Worker }
1703*15dc779aSAndroid Build Coastguard Worker }
1704*15dc779aSAndroid Build Coastguard Worker *mdct_scale = neg_expo + 1 + 1 + 1;
1705*15dc779aSAndroid Build Coastguard Worker }
1706*15dc779aSAndroid Build Coastguard Worker
ixheaacd_mdct_480_ld(WORD32 * inp,WORD32 * scratch,WORD32 * mdct_scale,WORD32 mdct_flag,ia_aac_dec_imdct_tables_struct * imdct_tables_ptr,WORD32 object_type)1707*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_mdct_480_ld(WORD32 *inp, WORD32 *scratch, WORD32 *mdct_scale,
1708*15dc779aSAndroid Build Coastguard Worker WORD32 mdct_flag,
1709*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr,
1710*15dc779aSAndroid Build Coastguard Worker WORD32 object_type) {
1711*15dc779aSAndroid Build Coastguard Worker WORD32 expo, neg_expo = 0, k;
1712*15dc779aSAndroid Build Coastguard Worker
1713*15dc779aSAndroid Build Coastguard Worker WORD32 const_mltfac = 1145324612;
1714*15dc779aSAndroid Build Coastguard Worker
1715*15dc779aSAndroid Build Coastguard Worker expo = (*ixheaacd_calc_max_spectral_line)(inp, MDCT_LEN) - 1;
1716*15dc779aSAndroid Build Coastguard Worker ;
1717*15dc779aSAndroid Build Coastguard Worker
1718*15dc779aSAndroid Build Coastguard Worker memcpy(scratch, inp, sizeof(WORD32) * MDCT_LEN);
1719*15dc779aSAndroid Build Coastguard Worker
1720*15dc779aSAndroid Build Coastguard Worker neg_expo = 7 - expo;
1721*15dc779aSAndroid Build Coastguard Worker
1722*15dc779aSAndroid Build Coastguard Worker ixheaacd_pre_twiddle(inp, scratch, 480, imdct_tables_ptr->cosine_array_960,
1723*15dc779aSAndroid Build Coastguard Worker neg_expo);
1724*15dc779aSAndroid Build Coastguard Worker
1725*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft_480_ld(inp, scratch, imdct_tables_ptr);
1726*15dc779aSAndroid Build Coastguard Worker
1727*15dc779aSAndroid Build Coastguard Worker if (object_type == AOT_ER_AAC_LD) {
1728*15dc779aSAndroid Build Coastguard Worker ixheaacd_post_twiddle_ld(inp, scratch, imdct_tables_ptr->cosine_array_960,
1729*15dc779aSAndroid Build Coastguard Worker 480);
1730*15dc779aSAndroid Build Coastguard Worker } else if (object_type == AOT_ER_AAC_ELD) {
1731*15dc779aSAndroid Build Coastguard Worker ixheaacd_post_twiddle_eld(inp + (480), scratch,
1732*15dc779aSAndroid Build Coastguard Worker imdct_tables_ptr->cosine_array_960, 480);
1733*15dc779aSAndroid Build Coastguard Worker }
1734*15dc779aSAndroid Build Coastguard Worker
1735*15dc779aSAndroid Build Coastguard Worker if (0 == mdct_flag) {
1736*15dc779aSAndroid Build Coastguard Worker WORD32 *data = inp;
1737*15dc779aSAndroid Build Coastguard Worker
1738*15dc779aSAndroid Build Coastguard Worker if (object_type != AOT_ER_AAC_ELD) {
1739*15dc779aSAndroid Build Coastguard Worker for (k = MDCT_LEN - 1; k >= 0; k -= 2) {
1740*15dc779aSAndroid Build Coastguard Worker *data = ixheaac_mult32_shl(*data, const_mltfac);
1741*15dc779aSAndroid Build Coastguard Worker data++;
1742*15dc779aSAndroid Build Coastguard Worker *data = ixheaac_mult32_shl(*data, const_mltfac);
1743*15dc779aSAndroid Build Coastguard Worker data++;
1744*15dc779aSAndroid Build Coastguard Worker }
1745*15dc779aSAndroid Build Coastguard Worker neg_expo += 1;
1746*15dc779aSAndroid Build Coastguard Worker } else {
1747*15dc779aSAndroid Build Coastguard Worker data = inp + 480;
1748*15dc779aSAndroid Build Coastguard Worker for (k = (MDCT_LEN << 1) - 1; k >= 0; k -= 2) {
1749*15dc779aSAndroid Build Coastguard Worker *data = ixheaac_mult32_shl(*data, const_mltfac);
1750*15dc779aSAndroid Build Coastguard Worker data++;
1751*15dc779aSAndroid Build Coastguard Worker *data = ixheaac_mult32_shl(*data, const_mltfac);
1752*15dc779aSAndroid Build Coastguard Worker data++;
1753*15dc779aSAndroid Build Coastguard Worker }
1754*15dc779aSAndroid Build Coastguard Worker neg_expo += 1;
1755*15dc779aSAndroid Build Coastguard Worker }
1756*15dc779aSAndroid Build Coastguard Worker }
1757*15dc779aSAndroid Build Coastguard Worker
1758*15dc779aSAndroid Build Coastguard Worker *mdct_scale = neg_expo + 3;
1759*15dc779aSAndroid Build Coastguard Worker }
1760*15dc779aSAndroid Build Coastguard Worker
ixheaacd_inverse_transform_512(WORD32 data[],WORD32 temp[],WORD32 * imdct_scale,WORD32 * cos_sin_ptr,ia_aac_dec_imdct_tables_struct * imdct_tables_ptr,WORD32 object_type)1761*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_inverse_transform_512(
1762*15dc779aSAndroid Build Coastguard Worker WORD32 data[], WORD32 temp[], WORD32 *imdct_scale, WORD32 *cos_sin_ptr,
1763*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 object_type) {
1764*15dc779aSAndroid Build Coastguard Worker WORD32 n;
1765*15dc779aSAndroid Build Coastguard Worker WORD32 npoints_2;
1766*15dc779aSAndroid Build Coastguard Worker WORD16 expo, neg_expo;
1767*15dc779aSAndroid Build Coastguard Worker
1768*15dc779aSAndroid Build Coastguard Worker n = 512;
1769*15dc779aSAndroid Build Coastguard Worker
1770*15dc779aSAndroid Build Coastguard Worker npoints_2 = n >> 1;
1771*15dc779aSAndroid Build Coastguard Worker
1772*15dc779aSAndroid Build Coastguard Worker expo = (*ixheaacd_calc_max_spectral_line)(data, n) - 1;
1773*15dc779aSAndroid Build Coastguard Worker
1774*15dc779aSAndroid Build Coastguard Worker memcpy(temp, data, sizeof(WORD32) * n);
1775*15dc779aSAndroid Build Coastguard Worker
1776*15dc779aSAndroid Build Coastguard Worker neg_expo = 7 - expo;
1777*15dc779aSAndroid Build Coastguard Worker
1778*15dc779aSAndroid Build Coastguard Worker ixheaacd_pre_twiddle(data, temp, n, cos_sin_ptr, neg_expo);
1779*15dc779aSAndroid Build Coastguard Worker
1780*15dc779aSAndroid Build Coastguard Worker (*ixheaacd_fft32x32_ld)(imdct_tables_ptr, npoints_2, data, temp);
1781*15dc779aSAndroid Build Coastguard Worker
1782*15dc779aSAndroid Build Coastguard Worker neg_expo = (*ixheaacd_neg_expo_inc)(neg_expo);
1783*15dc779aSAndroid Build Coastguard Worker
1784*15dc779aSAndroid Build Coastguard Worker *imdct_scale = neg_expo + 1;
1785*15dc779aSAndroid Build Coastguard Worker
1786*15dc779aSAndroid Build Coastguard Worker if (object_type == AOT_ER_AAC_ELD)
1787*15dc779aSAndroid Build Coastguard Worker ixheaacd_post_twiddle_eld((data + n), temp, cos_sin_ptr, n);
1788*15dc779aSAndroid Build Coastguard Worker else
1789*15dc779aSAndroid Build Coastguard Worker ixheaacd_post_twiddle_ld((data), temp, cos_sin_ptr, n);
1790*15dc779aSAndroid Build Coastguard Worker }
1791*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft_960(WORD32 * inp,WORD32 * op,ia_aac_dec_imdct_tables_struct * imdct_tables_ptr)1792*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_960(WORD32 *inp, WORD32 *op,
1793*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr) {
1794*15dc779aSAndroid Build Coastguard Worker WORD32 i;
1795*15dc779aSAndroid Build Coastguard Worker WORD32 *buf1, *buf2;
1796*15dc779aSAndroid Build Coastguard Worker WORD16 *re_arr_tab_sml_480_ptr;
1797*15dc779aSAndroid Build Coastguard Worker
1798*15dc779aSAndroid Build Coastguard Worker (*ixheaacd_aac_ld_dec_rearrange_960)(inp, op, 480,
1799*15dc779aSAndroid Build Coastguard Worker imdct_tables_ptr->re_arr_tab_32);
1800*15dc779aSAndroid Build Coastguard Worker
1801*15dc779aSAndroid Build Coastguard Worker buf1 = op;
1802*15dc779aSAndroid Build Coastguard Worker buf2 = inp;
1803*15dc779aSAndroid Build Coastguard Worker
1804*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT15; i++) {
1805*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft_32_points(imdct_tables_ptr->w_32,
1806*15dc779aSAndroid Build Coastguard Worker 32, buf1, buf2);
1807*15dc779aSAndroid Build Coastguard Worker
1808*15dc779aSAndroid Build Coastguard Worker buf1 += (FFT16X2 * 2);
1809*15dc779aSAndroid Build Coastguard Worker buf2 += (FFT16X2 * 2);
1810*15dc779aSAndroid Build Coastguard Worker }
1811*15dc779aSAndroid Build Coastguard Worker
1812*15dc779aSAndroid Build Coastguard Worker re_arr_tab_sml_480_ptr = imdct_tables_ptr->re_arr_tab_sml_480;
1813*15dc779aSAndroid Build Coastguard Worker buf1 = inp;
1814*15dc779aSAndroid Build Coastguard Worker
1815*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT16 * 2; i++) {
1816*15dc779aSAndroid Build Coastguard Worker ixheaacd_ld_dec_fft_15_opt(buf1, op,
1817*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft5out, re_arr_tab_sml_480_ptr);
1818*15dc779aSAndroid Build Coastguard Worker buf1 += 2;
1819*15dc779aSAndroid Build Coastguard Worker re_arr_tab_sml_480_ptr += FFT15;
1820*15dc779aSAndroid Build Coastguard Worker }
1821*15dc779aSAndroid Build Coastguard Worker }
1822*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft_32_points(WORD16 * ptr_w,WORD32 npoints,WORD32 * ptr_x,WORD32 * ptr_y)1823*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_32_points(WORD16 *ptr_w, WORD32 npoints,
1824*15dc779aSAndroid Build Coastguard Worker WORD32* ptr_x, WORD32* ptr_y) {
1825*15dc779aSAndroid Build Coastguard Worker WORD32 i, j, l1, l2, h2, predj, tw_offset, stride, fft_jmp;
1826*15dc779aSAndroid Build Coastguard Worker WORD32 xt0_0, yt0_0, xt1_0, yt1_0, xt2_0, yt2_0;
1827*15dc779aSAndroid Build Coastguard Worker WORD32 xh0_0, xh1_0, xh20_0, xh21_0, xl0_0, xl1_0, xl20_0, xl21_0;
1828*15dc779aSAndroid Build Coastguard Worker WORD32 x_0, x_1, x_l1_0, x_l1_1, x_l2_0, x_l2_1;
1829*15dc779aSAndroid Build Coastguard Worker WORD32 x_h2_0, x_h2_1;
1830*15dc779aSAndroid Build Coastguard Worker WORD16 si10, si20, si30, co10, co20, co30;
1831*15dc779aSAndroid Build Coastguard Worker WORD16 *w;
1832*15dc779aSAndroid Build Coastguard Worker WORD32 *x, *x2, *x0;
1833*15dc779aSAndroid Build Coastguard Worker WORD32 *y0, *y1, *y2, *y3;
1834*15dc779aSAndroid Build Coastguard Worker WORD32 n0, j0;
1835*15dc779aSAndroid Build Coastguard Worker WORD32 radix;
1836*15dc779aSAndroid Build Coastguard Worker WORD32 norm;
1837*15dc779aSAndroid Build Coastguard Worker
1838*15dc779aSAndroid Build Coastguard Worker radix = 2;
1839*15dc779aSAndroid Build Coastguard Worker norm = 25;
1840*15dc779aSAndroid Build Coastguard Worker
1841*15dc779aSAndroid Build Coastguard Worker stride = 32;
1842*15dc779aSAndroid Build Coastguard Worker tw_offset = 0;
1843*15dc779aSAndroid Build Coastguard Worker fft_jmp = 192;
1844*15dc779aSAndroid Build Coastguard Worker
1845*15dc779aSAndroid Build Coastguard Worker while (stride > radix) {
1846*15dc779aSAndroid Build Coastguard Worker j = 0;
1847*15dc779aSAndroid Build Coastguard Worker fft_jmp >>= 2;
1848*15dc779aSAndroid Build Coastguard Worker
1849*15dc779aSAndroid Build Coastguard Worker h2 = stride >> 1;
1850*15dc779aSAndroid Build Coastguard Worker l1 = stride;
1851*15dc779aSAndroid Build Coastguard Worker l2 = stride + (stride >> 1);
1852*15dc779aSAndroid Build Coastguard Worker
1853*15dc779aSAndroid Build Coastguard Worker x = ptr_x;
1854*15dc779aSAndroid Build Coastguard Worker w = ptr_w + tw_offset;
1855*15dc779aSAndroid Build Coastguard Worker tw_offset += fft_jmp;
1856*15dc779aSAndroid Build Coastguard Worker
1857*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < npoints; i += 4) {
1858*15dc779aSAndroid Build Coastguard Worker co10 = w[j + 1]; si10 = w[j + 0];
1859*15dc779aSAndroid Build Coastguard Worker co20 = w[j + 3]; si20 = w[j + 2];
1860*15dc779aSAndroid Build Coastguard Worker co30 = w[j + 5]; si30 = w[j + 4];
1861*15dc779aSAndroid Build Coastguard Worker
1862*15dc779aSAndroid Build Coastguard Worker x_0 = x[0]; x_1 = x[1];
1863*15dc779aSAndroid Build Coastguard Worker x_l1_0 = x[l1]; x_l1_1 = x[l1 + 1];
1864*15dc779aSAndroid Build Coastguard Worker x_l2_0 = x[l2]; x_l2_1 = x[l2 + 1];
1865*15dc779aSAndroid Build Coastguard Worker x_h2_0 = x[h2]; x_h2_1 = x[h2 + 1];
1866*15dc779aSAndroid Build Coastguard Worker
1867*15dc779aSAndroid Build Coastguard Worker xh0_0 = ixheaac_add32_sat(x_0, x_l1_0);
1868*15dc779aSAndroid Build Coastguard Worker xh1_0 = ixheaac_add32_sat(x_1, x_l1_1);
1869*15dc779aSAndroid Build Coastguard Worker xl0_0 = ixheaac_sub32_sat(x_0, x_l1_0);
1870*15dc779aSAndroid Build Coastguard Worker xl1_0 = ixheaac_sub32_sat(x_1, x_l1_1);
1871*15dc779aSAndroid Build Coastguard Worker xh20_0 = ixheaac_add32_sat(x_h2_0, x_l2_0);
1872*15dc779aSAndroid Build Coastguard Worker xh21_0 = ixheaac_add32_sat(x_h2_1, x_l2_1);
1873*15dc779aSAndroid Build Coastguard Worker xl20_0 = ixheaac_sub32_sat(x_h2_0, x_l2_0);
1874*15dc779aSAndroid Build Coastguard Worker xl21_0 = ixheaac_sub32_sat(x_h2_1, x_l2_1);
1875*15dc779aSAndroid Build Coastguard Worker
1876*15dc779aSAndroid Build Coastguard Worker x0 = x;
1877*15dc779aSAndroid Build Coastguard Worker x2 = x0;
1878*15dc779aSAndroid Build Coastguard Worker
1879*15dc779aSAndroid Build Coastguard Worker j += 6;
1880*15dc779aSAndroid Build Coastguard Worker x += 2;
1881*15dc779aSAndroid Build Coastguard Worker predj = (j - fft_jmp);
1882*15dc779aSAndroid Build Coastguard Worker if (!predj) x += fft_jmp;
1883*15dc779aSAndroid Build Coastguard Worker if (!predj) j = 0;
1884*15dc779aSAndroid Build Coastguard Worker
1885*15dc779aSAndroid Build Coastguard Worker x0[0] = ixheaac_add32_sat(xh0_0, xh20_0);
1886*15dc779aSAndroid Build Coastguard Worker x0[1] = ixheaac_add32_sat(xh1_0, xh21_0);
1887*15dc779aSAndroid Build Coastguard Worker xt0_0 = ixheaac_sub32_sat(xh0_0, xh20_0);
1888*15dc779aSAndroid Build Coastguard Worker yt0_0 = ixheaac_sub32_sat(xh1_0, xh21_0);
1889*15dc779aSAndroid Build Coastguard Worker xt1_0 = ixheaac_add32_sat(xl0_0, xl21_0);
1890*15dc779aSAndroid Build Coastguard Worker yt2_0 = ixheaac_add32_sat(xl1_0, xl20_0);
1891*15dc779aSAndroid Build Coastguard Worker xt2_0 = ixheaac_sub32_sat(xl0_0, xl21_0);
1892*15dc779aSAndroid Build Coastguard Worker yt1_0 = ixheaac_sub32_sat(xl1_0, xl20_0);
1893*15dc779aSAndroid Build Coastguard Worker
1894*15dc779aSAndroid Build Coastguard Worker x2[h2] = ixheaac_add32_sat(MPYLIRC(si10, yt1_0), MPYLIRC(co10, xt1_0));
1895*15dc779aSAndroid Build Coastguard Worker
1896*15dc779aSAndroid Build Coastguard Worker x2[h2 + 1] = ixheaac_sub32_sat(MPYLIRC(co10, yt1_0), MPYLIRC(si10, xt1_0));
1897*15dc779aSAndroid Build Coastguard Worker
1898*15dc779aSAndroid Build Coastguard Worker x2[l1] = ixheaac_add32_sat(MPYLIRC(si20, yt0_0), MPYLIRC(co20, xt0_0));
1899*15dc779aSAndroid Build Coastguard Worker
1900*15dc779aSAndroid Build Coastguard Worker x2[l1 + 1] = ixheaac_sub32_sat(MPYLIRC(co20, yt0_0), MPYLIRC(si20, xt0_0));
1901*15dc779aSAndroid Build Coastguard Worker yt0_0 = MPYLIRC(si20, yt0_0);
1902*15dc779aSAndroid Build Coastguard Worker
1903*15dc779aSAndroid Build Coastguard Worker x2[l2] = ixheaac_add32_sat(MPYLIRC(si30, yt2_0), MPYLIRC(co30, xt2_0));
1904*15dc779aSAndroid Build Coastguard Worker
1905*15dc779aSAndroid Build Coastguard Worker x2[l2 + 1] = ixheaac_sub32_sat(MPYLIRC(co30, yt2_0), MPYLIRC(si30, xt2_0));
1906*15dc779aSAndroid Build Coastguard Worker yt2_0 = MPYLIRC(si30, yt2_0);
1907*15dc779aSAndroid Build Coastguard Worker
1908*15dc779aSAndroid Build Coastguard Worker }
1909*15dc779aSAndroid Build Coastguard Worker stride >>= 2;
1910*15dc779aSAndroid Build Coastguard Worker }
1911*15dc779aSAndroid Build Coastguard Worker
1912*15dc779aSAndroid Build Coastguard Worker y0 = ptr_y;
1913*15dc779aSAndroid Build Coastguard Worker y2 = ptr_y + (int)npoints;
1914*15dc779aSAndroid Build Coastguard Worker x0 = ptr_x;
1915*15dc779aSAndroid Build Coastguard Worker x2 = ptr_x + (int)(npoints >> 1);
1916*15dc779aSAndroid Build Coastguard Worker
1917*15dc779aSAndroid Build Coastguard Worker y1 = y0 + (int)(npoints >> 2);
1918*15dc779aSAndroid Build Coastguard Worker y3 = y2 + (int)(npoints >> 2);
1919*15dc779aSAndroid Build Coastguard Worker l1 = norm + 1;
1920*15dc779aSAndroid Build Coastguard Worker j0 = 8;
1921*15dc779aSAndroid Build Coastguard Worker n0 = npoints >> 1;
1922*15dc779aSAndroid Build Coastguard Worker
1923*15dc779aSAndroid Build Coastguard Worker j = 0;
1924*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
1925*15dc779aSAndroid Build Coastguard Worker int t1, t2;
1926*15dc779aSAndroid Build Coastguard Worker h2 = rev_dig[i];
1927*15dc779aSAndroid Build Coastguard Worker
1928*15dc779aSAndroid Build Coastguard Worker t1 = h2 << 1;
1929*15dc779aSAndroid Build Coastguard Worker t2 = t1 + 1;
1930*15dc779aSAndroid Build Coastguard Worker
1931*15dc779aSAndroid Build Coastguard Worker y0[t1] = ixheaac_add32_sat(x0[0], x0[2]);
1932*15dc779aSAndroid Build Coastguard Worker y2[t1] = ixheaac_sub32_sat(x0[0], x0[2]);
1933*15dc779aSAndroid Build Coastguard Worker y0[t2] = ixheaac_add32_sat(x0[1], x0[3]);
1934*15dc779aSAndroid Build Coastguard Worker y2[t2] = ixheaac_sub32_sat(x0[1], x0[3]);
1935*15dc779aSAndroid Build Coastguard Worker y1[t1] = ixheaac_add32_sat(x0[4], x0[6]);
1936*15dc779aSAndroid Build Coastguard Worker y3[t1] = ixheaac_sub32_sat(x0[4], x0[6]);
1937*15dc779aSAndroid Build Coastguard Worker y1[t2] = ixheaac_add32_sat(x0[5], x0[7]);
1938*15dc779aSAndroid Build Coastguard Worker y3[t2] = ixheaac_sub32_sat(x0[5], x0[7]);
1939*15dc779aSAndroid Build Coastguard Worker x0 += 8;
1940*15dc779aSAndroid Build Coastguard Worker
1941*15dc779aSAndroid Build Coastguard Worker t1 += 2;
1942*15dc779aSAndroid Build Coastguard Worker t2 += 2;
1943*15dc779aSAndroid Build Coastguard Worker
1944*15dc779aSAndroid Build Coastguard Worker y0[t1] = ixheaac_add32_sat(x2[0], x2[2]);
1945*15dc779aSAndroid Build Coastguard Worker y2[t1] = ixheaac_sub32_sat(x2[0], x2[2]);
1946*15dc779aSAndroid Build Coastguard Worker y0[t2] = ixheaac_add32_sat(x2[1], x2[3]);
1947*15dc779aSAndroid Build Coastguard Worker y2[t2] = ixheaac_sub32_sat(x2[1], x2[3]);
1948*15dc779aSAndroid Build Coastguard Worker y1[t1] = ixheaac_add32_sat(x2[4], x2[6]);
1949*15dc779aSAndroid Build Coastguard Worker y3[t1] = ixheaac_sub32_sat(x2[4], x2[6]);
1950*15dc779aSAndroid Build Coastguard Worker y1[t2] = ixheaac_add32_sat(x2[5], x2[7]);
1951*15dc779aSAndroid Build Coastguard Worker y3[t2] = ixheaac_sub32_sat(x2[5], x2[7]);
1952*15dc779aSAndroid Build Coastguard Worker x2 += 8;
1953*15dc779aSAndroid Build Coastguard Worker
1954*15dc779aSAndroid Build Coastguard Worker j += j0;
1955*15dc779aSAndroid Build Coastguard Worker
1956*15dc779aSAndroid Build Coastguard Worker if (j == n0)
1957*15dc779aSAndroid Build Coastguard Worker {
1958*15dc779aSAndroid Build Coastguard Worker j += n0;
1959*15dc779aSAndroid Build Coastguard Worker x0 += (int)npoints >> 1;
1960*15dc779aSAndroid Build Coastguard Worker x2 += (int)npoints >> 1;
1961*15dc779aSAndroid Build Coastguard Worker }
1962*15dc779aSAndroid Build Coastguard Worker }
1963*15dc779aSAndroid Build Coastguard Worker }
1964*15dc779aSAndroid Build Coastguard Worker
ixheaacd_dec_rearrange_short(WORD32 * ip,WORD32 * op,WORD32 mdct_len_2,WORD16 * re_arr_tab)1965*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_dec_rearrange_short(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2, WORD16 *re_arr_tab) {
1966*15dc779aSAndroid Build Coastguard Worker WORD32 n, i = 0;
1967*15dc779aSAndroid Build Coastguard Worker
1968*15dc779aSAndroid Build Coastguard Worker for (n = 0; n < mdct_len_2; n++) {
1969*15dc779aSAndroid Build Coastguard Worker WORD32 idx = re_arr_tab[n] << 1;
1970*15dc779aSAndroid Build Coastguard Worker op[i++] = ip[idx];
1971*15dc779aSAndroid Build Coastguard Worker op[i++] = ip[idx + 1];
1972*15dc779aSAndroid Build Coastguard Worker }
1973*15dc779aSAndroid Build Coastguard Worker }
1974*15dc779aSAndroid Build Coastguard Worker
ixheaacd_ld_dec_fft_15_opt(WORD32 * inp,WORD32 * op,WORD32 * fft3out,WORD16 * ptr_re_arr_tab_sml_240)1975*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_ld_dec_fft_15_opt(WORD32 *inp, WORD32 *op, WORD32 *fft3out,
1976*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_re_arr_tab_sml_240) {
1977*15dc779aSAndroid Build Coastguard Worker WORD32 i, n, idx;
1978*15dc779aSAndroid Build Coastguard Worker WORD32 *buf1, *buf2, *buf1a;
1979*15dc779aSAndroid Build Coastguard Worker WORD32 add_r, sub_r;
1980*15dc779aSAndroid Build Coastguard Worker WORD32 add_i, sub_i;
1981*15dc779aSAndroid Build Coastguard Worker WORD32 x_01_r, x_01_i, temp;
1982*15dc779aSAndroid Build Coastguard Worker WORD32 p1, p2, p3, p4;
1983*15dc779aSAndroid Build Coastguard Worker
1984*15dc779aSAndroid Build Coastguard Worker WORD32 sinmu = 1859775393;
1985*15dc779aSAndroid Build Coastguard Worker WORD32 c_51 = 2042378317;
1986*15dc779aSAndroid Build Coastguard Worker WORD32 c_52 = -1652318768;
1987*15dc779aSAndroid Build Coastguard Worker WORD32 c_53 = -780119100;
1988*15dc779aSAndroid Build Coastguard Worker WORD32 c_54 = 1200479854;
1989*15dc779aSAndroid Build Coastguard Worker WORD32 c_55 = -1342177280;
1990*15dc779aSAndroid Build Coastguard Worker
1991*15dc779aSAndroid Build Coastguard Worker WORD32 r1, r2, r3, r4;
1992*15dc779aSAndroid Build Coastguard Worker WORD32 s1, s2, s3, s4, t, temp1, temp2;
1993*15dc779aSAndroid Build Coastguard Worker WORD32 *fft3outptr = fft3out;
1994*15dc779aSAndroid Build Coastguard Worker
1995*15dc779aSAndroid Build Coastguard Worker WORD32 xr_0, xr_1, xr_2;
1996*15dc779aSAndroid Build Coastguard Worker WORD32 xi_0, xi_1, xi_2;
1997*15dc779aSAndroid Build Coastguard Worker
1998*15dc779aSAndroid Build Coastguard Worker buf2 = fft3out;
1999*15dc779aSAndroid Build Coastguard Worker buf1 = buf1a = fft3out;
2000*15dc779aSAndroid Build Coastguard Worker n = 0;
2001*15dc779aSAndroid Build Coastguard Worker
2002*15dc779aSAndroid Build Coastguard Worker {
2003*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[0];
2004*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[1];
2005*15dc779aSAndroid Build Coastguard Worker
2006*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[192];
2007*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[193];
2008*15dc779aSAndroid Build Coastguard Worker
2009*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[384];
2010*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[385];
2011*15dc779aSAndroid Build Coastguard Worker
2012*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[576];
2013*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[577];
2014*15dc779aSAndroid Build Coastguard Worker
2015*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[768];
2016*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[769];
2017*15dc779aSAndroid Build Coastguard Worker
2018*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(buf1a[2], buf1a[8]);
2019*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_sub32_sat(buf1a[2], buf1a[8]);
2020*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_add32_sat(buf1a[4], buf1a[6]);
2021*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_sub32_sat(buf1a[4], buf1a[6]);
2022*15dc779aSAndroid Build Coastguard Worker
2023*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(r1, r3), c_54);
2024*15dc779aSAndroid Build Coastguard Worker
2025*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, r3);
2026*15dc779aSAndroid Build Coastguard Worker
2027*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_add32_sat(buf1a[0], r1);
2028*15dc779aSAndroid Build Coastguard Worker
2029*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(temp1, (ixheaac_mult32_shl(r1, c_55) << 1));
2030*15dc779aSAndroid Build Coastguard Worker
2031*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_sub32_sat(r1, t);
2032*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, t);
2033*15dc779aSAndroid Build Coastguard Worker
2034*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(r4, r2), c_51);
2035*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(r4, c_52) << 1));
2036*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_add32_sat(t, ixheaac_mult32_shl(r2, c_53));
2037*15dc779aSAndroid Build Coastguard Worker
2038*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(buf1a[3], buf1a[9]);
2039*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_sub32_sat(buf1a[3], buf1a[9]);
2040*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_add32_sat(buf1a[5], buf1a[7]);
2041*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_sub32_sat(buf1a[5], buf1a[7]);
2042*15dc779aSAndroid Build Coastguard Worker
2043*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(s1, s3), c_54);
2044*15dc779aSAndroid Build Coastguard Worker
2045*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, s3);
2046*15dc779aSAndroid Build Coastguard Worker
2047*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_add32_sat(buf1a[1], s1);
2048*15dc779aSAndroid Build Coastguard Worker
2049*15dc779aSAndroid Build Coastguard Worker
2050*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(temp2, (ixheaac_mult32_shl(s1, c_55) << 1));
2051*15dc779aSAndroid Build Coastguard Worker
2052*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_sub32_sat(s1, t);
2053*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, t);
2054*15dc779aSAndroid Build Coastguard Worker
2055*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(s4, s2), c_51);
2056*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(s4, c_52) << 1));
2057*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(s2, c_53)));
2058*15dc779aSAndroid Build Coastguard Worker
2059*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp1;
2060*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp2;
2061*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r1, s2);
2062*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s1, r2);
2063*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r3, s4);
2064*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s3, r4);
2065*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r3, s4);
2066*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s3, r4);
2067*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r1, s2);
2068*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s1, r2);
2069*15dc779aSAndroid Build Coastguard Worker buf1a = buf1;
2070*15dc779aSAndroid Build Coastguard Worker
2071*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[320];
2072*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[321];
2073*15dc779aSAndroid Build Coastguard Worker
2074*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[512];
2075*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[513];
2076*15dc779aSAndroid Build Coastguard Worker
2077*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[704];
2078*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[705];
2079*15dc779aSAndroid Build Coastguard Worker
2080*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[896];
2081*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[897];
2082*15dc779aSAndroid Build Coastguard Worker
2083*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[128];
2084*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[129];
2085*15dc779aSAndroid Build Coastguard Worker
2086*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(buf1a[2], buf1a[8]);
2087*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_sub32_sat(buf1a[2], buf1a[8]);
2088*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_add32_sat(buf1a[4], buf1a[6]);
2089*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_sub32_sat(buf1a[4], buf1a[6]);
2090*15dc779aSAndroid Build Coastguard Worker
2091*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(r1, r3), c_54);
2092*15dc779aSAndroid Build Coastguard Worker
2093*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, r3);
2094*15dc779aSAndroid Build Coastguard Worker
2095*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_add32_sat(buf1a[0], r1);
2096*15dc779aSAndroid Build Coastguard Worker
2097*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(temp1, (ixheaac_mult32_shl(r1, c_55) << 1));
2098*15dc779aSAndroid Build Coastguard Worker
2099*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_sub32_sat(r1, t);
2100*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, t);
2101*15dc779aSAndroid Build Coastguard Worker
2102*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(r4, r2), c_51);
2103*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(r4, c_52) << 1));
2104*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_add32_sat(t, ixheaac_mult32_shl(r2, c_53));
2105*15dc779aSAndroid Build Coastguard Worker
2106*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(buf1a[3], buf1a[9]);
2107*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_sub32_sat(buf1a[3], buf1a[9]);
2108*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_add32_sat(buf1a[5], buf1a[7]);
2109*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_sub32_sat(buf1a[5], buf1a[7]);
2110*15dc779aSAndroid Build Coastguard Worker
2111*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(s1, s3), c_54);
2112*15dc779aSAndroid Build Coastguard Worker
2113*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, s3);
2114*15dc779aSAndroid Build Coastguard Worker
2115*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_add32_sat(buf1a[1], s1);
2116*15dc779aSAndroid Build Coastguard Worker
2117*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(temp2, (ixheaac_mult32_shl(s1, c_55) << 1));
2118*15dc779aSAndroid Build Coastguard Worker
2119*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_sub32_sat(s1, t);
2120*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, t);
2121*15dc779aSAndroid Build Coastguard Worker
2122*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(s4, s2), c_51);
2123*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(s4, c_52) << 1));
2124*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_add32_sat(t, ixheaac_mult32_shl(s2, c_53));
2125*15dc779aSAndroid Build Coastguard Worker
2126*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp1;
2127*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp2;
2128*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r1, s2);
2129*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s1, r2);
2130*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r3, s4);
2131*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s3, r4);
2132*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r3, s4);
2133*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s3, r4);
2134*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r1, s2);
2135*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s1, r2);
2136*15dc779aSAndroid Build Coastguard Worker buf1a = buf1;
2137*15dc779aSAndroid Build Coastguard Worker
2138*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[640];
2139*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[641];
2140*15dc779aSAndroid Build Coastguard Worker
2141*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[832];
2142*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[833];
2143*15dc779aSAndroid Build Coastguard Worker
2144*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[64];
2145*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[65];
2146*15dc779aSAndroid Build Coastguard Worker
2147*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[256];
2148*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[257];
2149*15dc779aSAndroid Build Coastguard Worker
2150*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[448];
2151*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[449];
2152*15dc779aSAndroid Build Coastguard Worker
2153*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(buf1a[2], buf1a[8]);
2154*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_sub32_sat(buf1a[2], buf1a[8]);
2155*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_add32_sat(buf1a[4], buf1a[6]);
2156*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_sub32_sat(buf1a[4], buf1a[6]);
2157*15dc779aSAndroid Build Coastguard Worker
2158*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(r1, r3), c_54);
2159*15dc779aSAndroid Build Coastguard Worker
2160*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, r3);
2161*15dc779aSAndroid Build Coastguard Worker
2162*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_add32_sat(buf1a[0], r1);
2163*15dc779aSAndroid Build Coastguard Worker
2164*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(temp1, (ixheaac_mult32_shl(r1, c_55) << 1));
2165*15dc779aSAndroid Build Coastguard Worker
2166*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_sub32_sat(r1, t);
2167*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, t);
2168*15dc779aSAndroid Build Coastguard Worker
2169*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(r4, r2), c_51);
2170*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_add32_sat(t, ixheaac_mult32_shl(r4, c_52) << 1);
2171*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_add32_sat(t, ixheaac_mult32_shl(r2, c_53));
2172*15dc779aSAndroid Build Coastguard Worker
2173*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(buf1a[3], buf1a[9]);
2174*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_sub32_sat(buf1a[3], buf1a[9]);
2175*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_add32_sat(buf1a[5], buf1a[7]);
2176*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_sub32_sat(buf1a[5], buf1a[7]);
2177*15dc779aSAndroid Build Coastguard Worker
2178*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(s1, s3), c_54);
2179*15dc779aSAndroid Build Coastguard Worker
2180*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, s3);
2181*15dc779aSAndroid Build Coastguard Worker
2182*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_add32_sat(buf1a[1], s1);
2183*15dc779aSAndroid Build Coastguard Worker
2184*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(temp2, (ixheaac_mult32_shl(s1, c_55) << 1));
2185*15dc779aSAndroid Build Coastguard Worker
2186*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_sub32_sat(s1, t);
2187*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, t);
2188*15dc779aSAndroid Build Coastguard Worker
2189*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(s4, s2), c_51);
2190*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(s4, c_52) << 1));
2191*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_add32_sat(t, ixheaac_mult32_shl(s2, c_53));
2192*15dc779aSAndroid Build Coastguard Worker
2193*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp1;
2194*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp2;
2195*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r1, s2);
2196*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s1, r2);
2197*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r3, s4);
2198*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s3, r4);
2199*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r3, s4);
2200*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s3, r4);
2201*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r1, s2);
2202*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s1, r2);
2203*15dc779aSAndroid Build Coastguard Worker buf1a = buf1;
2204*15dc779aSAndroid Build Coastguard Worker }
2205*15dc779aSAndroid Build Coastguard Worker
2206*15dc779aSAndroid Build Coastguard Worker n = 0;
2207*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT5; i++) {
2208*15dc779aSAndroid Build Coastguard Worker xr_0 = fft3outptr[0];
2209*15dc779aSAndroid Build Coastguard Worker xi_0 = fft3outptr[1];
2210*15dc779aSAndroid Build Coastguard Worker
2211*15dc779aSAndroid Build Coastguard Worker xr_1 = fft3outptr[10];
2212*15dc779aSAndroid Build Coastguard Worker xi_1 = fft3outptr[11];
2213*15dc779aSAndroid Build Coastguard Worker
2214*15dc779aSAndroid Build Coastguard Worker xr_2 = fft3outptr[20];
2215*15dc779aSAndroid Build Coastguard Worker xi_2 = fft3outptr[21];
2216*15dc779aSAndroid Build Coastguard Worker
2217*15dc779aSAndroid Build Coastguard Worker x_01_r = ixheaac_add32_sat(xr_0, xr_1);
2218*15dc779aSAndroid Build Coastguard Worker x_01_i = ixheaac_add32_sat(xi_0, xi_1);
2219*15dc779aSAndroid Build Coastguard Worker
2220*15dc779aSAndroid Build Coastguard Worker add_r = ixheaac_add32_sat(xr_1, xr_2);
2221*15dc779aSAndroid Build Coastguard Worker add_i = ixheaac_add32_sat(xi_1, xi_2);
2222*15dc779aSAndroid Build Coastguard Worker
2223*15dc779aSAndroid Build Coastguard Worker sub_r = ixheaac_sub32_sat(xr_1, xr_2);
2224*15dc779aSAndroid Build Coastguard Worker sub_i = ixheaac_sub32_sat(xi_1, xi_2);
2225*15dc779aSAndroid Build Coastguard Worker
2226*15dc779aSAndroid Build Coastguard Worker p1 = add_r >> 1;
2227*15dc779aSAndroid Build Coastguard Worker
2228*15dc779aSAndroid Build Coastguard Worker p2 = ixheaac_mult32_shl(sub_i, sinmu);
2229*15dc779aSAndroid Build Coastguard Worker p3 = ixheaac_mult32_shl(sub_r, sinmu);
2230*15dc779aSAndroid Build Coastguard Worker
2231*15dc779aSAndroid Build Coastguard Worker p4 = add_i >> 1;
2232*15dc779aSAndroid Build Coastguard Worker
2233*15dc779aSAndroid Build Coastguard Worker temp = ixheaac_sub32_sat(xr_0, p1);
2234*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_add32_sat(xi_0, p3);
2235*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_sub32_sat(xi_0, p3);
2236*15dc779aSAndroid Build Coastguard Worker
2237*15dc779aSAndroid Build Coastguard Worker idx = ptr_re_arr_tab_sml_240[n++] << 1;
2238*15dc779aSAndroid Build Coastguard Worker op[idx] = ixheaac_add32_sat(x_01_r, xr_2);
2239*15dc779aSAndroid Build Coastguard Worker op[idx + 1] = ixheaac_add32_sat(x_01_i, xi_2);
2240*15dc779aSAndroid Build Coastguard Worker
2241*15dc779aSAndroid Build Coastguard Worker idx = ptr_re_arr_tab_sml_240[n++] << 1;
2242*15dc779aSAndroid Build Coastguard Worker op[idx] = ixheaac_add32_sat(temp, p2);
2243*15dc779aSAndroid Build Coastguard Worker op[idx + 1] = ixheaac_sub32_sat(temp2, p4);
2244*15dc779aSAndroid Build Coastguard Worker
2245*15dc779aSAndroid Build Coastguard Worker idx = ptr_re_arr_tab_sml_240[n++] << 1;
2246*15dc779aSAndroid Build Coastguard Worker op[idx] = ixheaac_sub32_sat(temp, p2);
2247*15dc779aSAndroid Build Coastguard Worker op[idx + 1] = ixheaac_sub32_sat(temp1, p4);
2248*15dc779aSAndroid Build Coastguard Worker fft3outptr += 2;
2249*15dc779aSAndroid Build Coastguard Worker }
2250*15dc779aSAndroid Build Coastguard Worker return;
2251*15dc779aSAndroid Build Coastguard Worker }
2252*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft_120(ia_aac_dec_imdct_tables_struct * imdct_tables_ptr,WORD32 npoints,WORD32 * ptr_x,WORD32 * ptr_y)2253*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_120(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr,
2254*15dc779aSAndroid Build Coastguard Worker WORD32 npoints, WORD32* ptr_x, WORD32* ptr_y) {
2255*15dc779aSAndroid Build Coastguard Worker WORD32 i;
2256*15dc779aSAndroid Build Coastguard Worker WORD32 *buf1, *buf2;
2257*15dc779aSAndroid Build Coastguard Worker WORD32 *inp, *op;
2258*15dc779aSAndroid Build Coastguard Worker
2259*15dc779aSAndroid Build Coastguard Worker inp = ptr_x;
2260*15dc779aSAndroid Build Coastguard Worker op = ptr_y;
2261*15dc779aSAndroid Build Coastguard Worker
2262*15dc779aSAndroid Build Coastguard Worker ixheaacd_dec_rearrange_short(inp, op, 60, imdct_tables_ptr->re_arr_tab_4);
2263*15dc779aSAndroid Build Coastguard Worker buf1 = op;
2264*15dc779aSAndroid Build Coastguard Worker buf2 = inp;
2265*15dc779aSAndroid Build Coastguard Worker
2266*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT15; i++) {
2267*15dc779aSAndroid Build Coastguard Worker {
2268*15dc779aSAndroid Build Coastguard Worker WORD32 x_0, x_1, x_2, x_3, x_4, x_5, x_6, x_7;
2269*15dc779aSAndroid Build Coastguard Worker WORD32 *y0, *y1, *y2, *y3;
2270*15dc779aSAndroid Build Coastguard Worker WORD32 *x0;
2271*15dc779aSAndroid Build Coastguard Worker WORD32 xh0_0, xh1_0, xh0_1, xh1_1, xl0_0, xl1_0, xl0_1, xl1_1;
2272*15dc779aSAndroid Build Coastguard Worker WORD32 h2;
2273*15dc779aSAndroid Build Coastguard Worker WORD32 n00, n01, n10, n11, n20, n21, n30, n31;
2274*15dc779aSAndroid Build Coastguard Worker
2275*15dc779aSAndroid Build Coastguard Worker ptr_x = buf1;
2276*15dc779aSAndroid Build Coastguard Worker ptr_y = buf2;
2277*15dc779aSAndroid Build Coastguard Worker npoints = 4;
2278*15dc779aSAndroid Build Coastguard Worker h2 = 0;
2279*15dc779aSAndroid Build Coastguard Worker
2280*15dc779aSAndroid Build Coastguard Worker y0 = ptr_y;
2281*15dc779aSAndroid Build Coastguard Worker y2 = ptr_y + (WORD32)npoints;
2282*15dc779aSAndroid Build Coastguard Worker x0 = ptr_x;
2283*15dc779aSAndroid Build Coastguard Worker
2284*15dc779aSAndroid Build Coastguard Worker y1 = y0 + (WORD32)(npoints >> 1);
2285*15dc779aSAndroid Build Coastguard Worker y3 = y2 + (WORD32)(npoints >> 1);
2286*15dc779aSAndroid Build Coastguard Worker
2287*15dc779aSAndroid Build Coastguard Worker x_0 = x0[0]; x_1 = x0[1];
2288*15dc779aSAndroid Build Coastguard Worker x_2 = x0[2]; x_3 = x0[3];
2289*15dc779aSAndroid Build Coastguard Worker x_4 = x0[4]; x_5 = x0[5];
2290*15dc779aSAndroid Build Coastguard Worker x_6 = x0[6]; x_7 = x0[7];
2291*15dc779aSAndroid Build Coastguard Worker x0 += 8;
2292*15dc779aSAndroid Build Coastguard Worker
2293*15dc779aSAndroid Build Coastguard Worker xh0_0 = ixheaac_add32_sat(x_0, x_4);
2294*15dc779aSAndroid Build Coastguard Worker xh1_0 = ixheaac_add32_sat(x_1, x_5);
2295*15dc779aSAndroid Build Coastguard Worker xl0_0 = ixheaac_sub32_sat(x_0, x_4);
2296*15dc779aSAndroid Build Coastguard Worker xl1_0 = ixheaac_sub32_sat(x_1, x_5);
2297*15dc779aSAndroid Build Coastguard Worker xh0_1 = ixheaac_add32_sat(x_2, x_6);
2298*15dc779aSAndroid Build Coastguard Worker xh1_1 = ixheaac_add32_sat(x_3, x_7);
2299*15dc779aSAndroid Build Coastguard Worker xl0_1 = ixheaac_sub32_sat(x_2, x_6);
2300*15dc779aSAndroid Build Coastguard Worker xl1_1 = ixheaac_sub32_sat(x_3, x_7);
2301*15dc779aSAndroid Build Coastguard Worker
2302*15dc779aSAndroid Build Coastguard Worker n00 = ixheaac_add32_sat(xh0_0, xh0_1);
2303*15dc779aSAndroid Build Coastguard Worker n01 = ixheaac_add32_sat(xh1_0, xh1_1);
2304*15dc779aSAndroid Build Coastguard Worker n10 = ixheaac_add32_sat(xl0_0, xl1_1);
2305*15dc779aSAndroid Build Coastguard Worker n11 = ixheaac_sub32_sat(xl1_0, xl0_1);
2306*15dc779aSAndroid Build Coastguard Worker n20 = ixheaac_sub32_sat(xh0_0, xh0_1);
2307*15dc779aSAndroid Build Coastguard Worker n21 = ixheaac_sub32_sat(xh1_0, xh1_1);
2308*15dc779aSAndroid Build Coastguard Worker n30 = ixheaac_sub32_sat(xl0_0, xl1_1);
2309*15dc779aSAndroid Build Coastguard Worker n31 = ixheaac_add32_sat(xl1_0, xl0_1);
2310*15dc779aSAndroid Build Coastguard Worker
2311*15dc779aSAndroid Build Coastguard Worker y0[2 * h2] = n00; y0[2 * h2 + 1] = n01;
2312*15dc779aSAndroid Build Coastguard Worker y1[2 * h2] = n10; y1[2 * h2 + 1] = n11;
2313*15dc779aSAndroid Build Coastguard Worker y2[2 * h2] = n20; y2[2 * h2 + 1] = n21;
2314*15dc779aSAndroid Build Coastguard Worker y3[2 * h2] = n30; y3[2 * h2 + 1] = n31;
2315*15dc779aSAndroid Build Coastguard Worker }
2316*15dc779aSAndroid Build Coastguard Worker buf1 += (FFT4 * 2);
2317*15dc779aSAndroid Build Coastguard Worker buf2 += (FFT4 * 2);
2318*15dc779aSAndroid Build Coastguard Worker }
2319*15dc779aSAndroid Build Coastguard Worker
2320*15dc779aSAndroid Build Coastguard Worker ixheaacd_dec_rearrange_short(inp, op, 60, imdct_tables_ptr->re_arr_tab_15_4);
2321*15dc779aSAndroid Build Coastguard Worker
2322*15dc779aSAndroid Build Coastguard Worker buf1 = op;
2323*15dc779aSAndroid Build Coastguard Worker buf2 = inp;
2324*15dc779aSAndroid Build Coastguard Worker
2325*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT4; i++) {
2326*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft_960_15(buf1, buf2, imdct_tables_ptr);
2327*15dc779aSAndroid Build Coastguard Worker buf1 += (FFT15 * 2);
2328*15dc779aSAndroid Build Coastguard Worker buf2 += (FFT15 * 2);
2329*15dc779aSAndroid Build Coastguard Worker }
2330*15dc779aSAndroid Build Coastguard Worker
2331*15dc779aSAndroid Build Coastguard Worker ixheaacd_dec_rearrange_short(inp, op, 60, imdct_tables_ptr->re_arr_tab_120);
2332*15dc779aSAndroid Build Coastguard Worker }
2333*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft_960_15(WORD32 * inp,WORD32 * op,ia_aac_dec_imdct_tables_struct * imdct_tables_ptr)2334*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_960_15(WORD32 *inp, WORD32 *op,
2335*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr) {
2336*15dc779aSAndroid Build Coastguard Worker WORD32 i;
2337*15dc779aSAndroid Build Coastguard Worker WORD32 *buf1, *buf2;
2338*15dc779aSAndroid Build Coastguard Worker
2339*15dc779aSAndroid Build Coastguard Worker ixheaacd_dec_rearrange_short(inp, op, FFT15, imdct_tables_ptr->re_arr_tab_5);
2340*15dc779aSAndroid Build Coastguard Worker
2341*15dc779aSAndroid Build Coastguard Worker buf1 = op;
2342*15dc779aSAndroid Build Coastguard Worker buf2 = inp;
2343*15dc779aSAndroid Build Coastguard Worker
2344*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT3; i++) {
2345*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft_5(buf1, buf2);
2346*15dc779aSAndroid Build Coastguard Worker
2347*15dc779aSAndroid Build Coastguard Worker buf1 += (FFT5 * 2);
2348*15dc779aSAndroid Build Coastguard Worker buf2 += (FFT5 * 2);
2349*15dc779aSAndroid Build Coastguard Worker }
2350*15dc779aSAndroid Build Coastguard Worker
2351*15dc779aSAndroid Build Coastguard Worker ixheaacd_dec_rearrange_short(inp, op, FFT15, imdct_tables_ptr->re_arr_tab_3);
2352*15dc779aSAndroid Build Coastguard Worker
2353*15dc779aSAndroid Build Coastguard Worker buf1 = op;
2354*15dc779aSAndroid Build Coastguard Worker buf2 = inp;
2355*15dc779aSAndroid Build Coastguard Worker
2356*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT5; i++) {
2357*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft_3(buf1, buf2);
2358*15dc779aSAndroid Build Coastguard Worker
2359*15dc779aSAndroid Build Coastguard Worker buf1 += (FFT3 * 2);
2360*15dc779aSAndroid Build Coastguard Worker buf2 += (FFT3 * 2);
2361*15dc779aSAndroid Build Coastguard Worker }
2362*15dc779aSAndroid Build Coastguard Worker
2363*15dc779aSAndroid Build Coastguard Worker ixheaacd_dec_rearrange_short(inp, op, FFT15, imdct_tables_ptr->re_arr_tab_sml);
2364*15dc779aSAndroid Build Coastguard Worker }
2365*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft_3(WORD32 * inp,WORD32 * op)2366*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_3(WORD32 *inp, WORD32 *op) {
2367*15dc779aSAndroid Build Coastguard Worker WORD32 add_r, sub_r;
2368*15dc779aSAndroid Build Coastguard Worker WORD32 add_i, sub_i;
2369*15dc779aSAndroid Build Coastguard Worker WORD32 x_01_r, x_01_i, temp;
2370*15dc779aSAndroid Build Coastguard Worker
2371*15dc779aSAndroid Build Coastguard Worker WORD32 p1, p2, p3, p4;
2372*15dc779aSAndroid Build Coastguard Worker WORD32 sinmu = 1859775393;
2373*15dc779aSAndroid Build Coastguard Worker
2374*15dc779aSAndroid Build Coastguard Worker x_01_r = ixheaac_add32_sat(inp[0], inp[2]);
2375*15dc779aSAndroid Build Coastguard Worker x_01_i = ixheaac_add32_sat(inp[1], inp[3]);
2376*15dc779aSAndroid Build Coastguard Worker
2377*15dc779aSAndroid Build Coastguard Worker add_r = ixheaac_add32_sat(inp[2], inp[4]);
2378*15dc779aSAndroid Build Coastguard Worker add_i = ixheaac_add32_sat(inp[3], inp[5]);
2379*15dc779aSAndroid Build Coastguard Worker
2380*15dc779aSAndroid Build Coastguard Worker sub_r = ixheaac_sub32_sat(inp[2], inp[4]);
2381*15dc779aSAndroid Build Coastguard Worker sub_i = ixheaac_sub32_sat(inp[3], inp[5]);
2382*15dc779aSAndroid Build Coastguard Worker
2383*15dc779aSAndroid Build Coastguard Worker p1 = add_r >> 1;
2384*15dc779aSAndroid Build Coastguard Worker p2 = ixheaac_mult32_shl(sub_i, sinmu);
2385*15dc779aSAndroid Build Coastguard Worker p3 = ixheaac_mult32_shl(sub_r, sinmu);
2386*15dc779aSAndroid Build Coastguard Worker p4 = add_i >> 1;
2387*15dc779aSAndroid Build Coastguard Worker
2388*15dc779aSAndroid Build Coastguard Worker temp = ixheaac_sub32_sat(inp[0], p1);
2389*15dc779aSAndroid Build Coastguard Worker
2390*15dc779aSAndroid Build Coastguard Worker op[0] = ixheaac_add32_sat(x_01_r, inp[4]);
2391*15dc779aSAndroid Build Coastguard Worker op[1] = ixheaac_add32_sat(x_01_i, inp[5]);
2392*15dc779aSAndroid Build Coastguard Worker op[2] = ixheaac_add32_sat(temp, p2);
2393*15dc779aSAndroid Build Coastguard Worker op[3] = ixheaac_sub32_sat(ixheaac_sub32_sat(inp[1], p3), p4);
2394*15dc779aSAndroid Build Coastguard Worker op[4] = ixheaac_sub32_sat(temp, p2);
2395*15dc779aSAndroid Build Coastguard Worker op[5] = ixheaac_sub32_sat(ixheaac_add32_sat(inp[1], p3), p4);
2396*15dc779aSAndroid Build Coastguard Worker }
2397*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft_5(WORD32 * inp,WORD32 * op)2398*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_5(WORD32 *inp, WORD32 *op) {
2399*15dc779aSAndroid Build Coastguard Worker WORD32 c_51 = 2042378317;
2400*15dc779aSAndroid Build Coastguard Worker WORD32 c_52 = -1652318768;
2401*15dc779aSAndroid Build Coastguard Worker WORD32 c_53 = -780119100;
2402*15dc779aSAndroid Build Coastguard Worker WORD32 c_54 = 1200479854;
2403*15dc779aSAndroid Build Coastguard Worker WORD32 c_55 = -1342177280;
2404*15dc779aSAndroid Build Coastguard Worker
2405*15dc779aSAndroid Build Coastguard Worker WORD32 r1, r2, r3, r4;
2406*15dc779aSAndroid Build Coastguard Worker WORD32 s1, s2, s3, s4, t, temp1, temp2;
2407*15dc779aSAndroid Build Coastguard Worker
2408*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(inp[2], inp[8]);
2409*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_sub32_sat(inp[2], inp[8]);
2410*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_add32_sat(inp[4], inp[6]);
2411*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_sub32_sat(inp[4], inp[6]);
2412*15dc779aSAndroid Build Coastguard Worker
2413*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(r1, r3), c_54);
2414*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, r3);
2415*15dc779aSAndroid Build Coastguard Worker
2416*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_add32_sat(inp[0], r1);
2417*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(
2418*15dc779aSAndroid Build Coastguard Worker temp1, ixheaac_shl32_sat((ixheaac_mult32_shl(r1, c_55)), 1));
2419*15dc779aSAndroid Build Coastguard Worker
2420*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_sub32_sat(r1, t);
2421*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, t);
2422*15dc779aSAndroid Build Coastguard Worker
2423*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(r4, r2), c_51);
2424*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_add32_sat(
2425*15dc779aSAndroid Build Coastguard Worker t, ixheaac_shl32_sat(ixheaac_mult32_shl(r4, c_52), 1));
2426*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_add32_sat(t, ixheaac_mult32_shl(r2, c_53));
2427*15dc779aSAndroid Build Coastguard Worker
2428*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(inp[3], inp[9]);
2429*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_sub32_sat(inp[3], inp[9]);
2430*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_add32_sat(inp[5], inp[7]);
2431*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_sub32_sat(inp[5], inp[7]);
2432*15dc779aSAndroid Build Coastguard Worker
2433*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(s1, s3), c_54);
2434*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, s3);
2435*15dc779aSAndroid Build Coastguard Worker
2436*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_add32_sat(inp[1], s1);
2437*15dc779aSAndroid Build Coastguard Worker
2438*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(
2439*15dc779aSAndroid Build Coastguard Worker temp2, ixheaac_shl32_sat((ixheaac_mult32_shl(s1, c_55)), 1));
2440*15dc779aSAndroid Build Coastguard Worker
2441*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_sub32_sat(s1, t);
2442*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, t);
2443*15dc779aSAndroid Build Coastguard Worker
2444*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(s4, s2), c_51);
2445*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_add32_sat(
2446*15dc779aSAndroid Build Coastguard Worker t, ixheaac_shl32_sat((ixheaac_mult32_shl(s4, c_52)), 1));
2447*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(s2, c_53)));
2448*15dc779aSAndroid Build Coastguard Worker
2449*15dc779aSAndroid Build Coastguard Worker op[0] = temp1;
2450*15dc779aSAndroid Build Coastguard Worker op[1] = temp2;
2451*15dc779aSAndroid Build Coastguard Worker op[2] = ixheaac_add32_sat(r1, s2);
2452*15dc779aSAndroid Build Coastguard Worker op[3] = ixheaac_sub32_sat(s1, r2);
2453*15dc779aSAndroid Build Coastguard Worker op[4] = ixheaac_sub32_sat(r3, s4);
2454*15dc779aSAndroid Build Coastguard Worker op[5] = ixheaac_add32_sat(s3, r4);
2455*15dc779aSAndroid Build Coastguard Worker op[6] = ixheaac_add32_sat(r3, s4);
2456*15dc779aSAndroid Build Coastguard Worker op[7] = ixheaac_sub32_sat(s3, r4);
2457*15dc779aSAndroid Build Coastguard Worker op[8] = ixheaac_sub32_sat(r1, s2);
2458*15dc779aSAndroid Build Coastguard Worker op[9] = ixheaac_add32_sat(s1, r2);
2459*15dc779aSAndroid Build Coastguard Worker }
2460*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft_480_ld(WORD32 * inp,WORD32 * op,ia_aac_dec_imdct_tables_struct * imdct_tables_ptr)2461*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_480_ld(WORD32 *inp, WORD32 *op,
2462*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr) {
2463*15dc779aSAndroid Build Coastguard Worker WORD32 i;
2464*15dc779aSAndroid Build Coastguard Worker WORD32 *buf1, *buf2;
2465*15dc779aSAndroid Build Coastguard Worker UWORD8 *re_arr_tab_sml_240_ptr;
2466*15dc779aSAndroid Build Coastguard Worker
2467*15dc779aSAndroid Build Coastguard Worker (*ixheaacd_aac_ld_dec_rearrange)(inp, op, MDCT_LEN_BY2,
2468*15dc779aSAndroid Build Coastguard Worker imdct_tables_ptr->re_arr_tab_16);
2469*15dc779aSAndroid Build Coastguard Worker
2470*15dc779aSAndroid Build Coastguard Worker buf1 = op;
2471*15dc779aSAndroid Build Coastguard Worker buf2 = inp;
2472*15dc779aSAndroid Build Coastguard Worker
2473*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT15; i++) {
2474*15dc779aSAndroid Build Coastguard Worker (*ixheaacd_fft32x32_ld2)(imdct_tables_ptr, 16, buf1, buf2);
2475*15dc779aSAndroid Build Coastguard Worker
2476*15dc779aSAndroid Build Coastguard Worker buf1 += (FFT16X2);
2477*15dc779aSAndroid Build Coastguard Worker buf2 += (FFT16X2);
2478*15dc779aSAndroid Build Coastguard Worker }
2479*15dc779aSAndroid Build Coastguard Worker re_arr_tab_sml_240_ptr = imdct_tables_ptr->re_arr_tab_sml_240;
2480*15dc779aSAndroid Build Coastguard Worker buf1 = inp;
2481*15dc779aSAndroid Build Coastguard Worker
2482*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT16; i++) {
2483*15dc779aSAndroid Build Coastguard Worker (*ixheaacd_fft_15_ld)(buf1, op, ixheaacd_fft5out, re_arr_tab_sml_240_ptr);
2484*15dc779aSAndroid Build Coastguard Worker re_arr_tab_sml_240_ptr += FFT15;
2485*15dc779aSAndroid Build Coastguard Worker buf1 += 2;
2486*15dc779aSAndroid Build Coastguard Worker }
2487*15dc779aSAndroid Build Coastguard Worker }
2488*15dc779aSAndroid Build Coastguard Worker
ixheaacd_pre_twiddle_960(WORD32 * xptr,WORD32 * data,WORD32 n,WORD32 * cos_sin_ptr,WORD32 neg_expo)2489*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pre_twiddle_960(WORD32 *xptr, WORD32 *data, WORD32 n,
2490*15dc779aSAndroid Build Coastguard Worker WORD32 *cos_sin_ptr, WORD32 neg_expo) {
2491*15dc779aSAndroid Build Coastguard Worker WORD npoints_4, i;
2492*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi, temp;
2493*15dc779aSAndroid Build Coastguard Worker WORD32 c, c1, s, s1;
2494*15dc779aSAndroid Build Coastguard Worker WORD32 *in_ptr1, *in_ptr2;
2495*15dc779aSAndroid Build Coastguard Worker WORD32 *xprt1 = xptr + (n - 1);
2496*15dc779aSAndroid Build Coastguard Worker
2497*15dc779aSAndroid Build Coastguard Worker npoints_4 = n >> 2;
2498*15dc779aSAndroid Build Coastguard Worker
2499*15dc779aSAndroid Build Coastguard Worker in_ptr1 = data;
2500*15dc779aSAndroid Build Coastguard Worker in_ptr2 = data + n - 1;
2501*15dc779aSAndroid Build Coastguard Worker
2502*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < npoints_4; i++) {
2503*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
2504*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
2505*15dc779aSAndroid Build Coastguard Worker
2506*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr1++;
2507*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr2--;
2508*15dc779aSAndroid Build Coastguard Worker
2509*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32(ixheaac_mult32x32in32(tempr, c),
2510*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x32in32(tempi, s));
2511*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shr32_dir_sat(temp, neg_expo);
2512*15dc779aSAndroid Build Coastguard Worker
2513*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_sub32(ixheaac_mult32x32in32(tempi, c),
2514*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x32in32(tempr, s));
2515*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shr32_dir_sat(temp, neg_expo);
2516*15dc779aSAndroid Build Coastguard Worker
2517*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
2518*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
2519*15dc779aSAndroid Build Coastguard Worker
2520*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr1++;
2521*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr2--;
2522*15dc779aSAndroid Build Coastguard Worker
2523*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_sub32(ixheaac_mult32x32in32(tempi, c1),
2524*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x32in32(tempr, s1));
2525*15dc779aSAndroid Build Coastguard Worker *xprt1-- = ixheaac_shr32_dir_sat(temp, neg_expo);
2526*15dc779aSAndroid Build Coastguard Worker
2527*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32(ixheaac_mult32x32in32(tempr, c1),
2528*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x32in32(tempi, s1));
2529*15dc779aSAndroid Build Coastguard Worker *xprt1-- = ixheaac_shr32_dir_sat(temp, neg_expo);
2530*15dc779aSAndroid Build Coastguard Worker }
2531*15dc779aSAndroid Build Coastguard Worker }
2532*15dc779aSAndroid Build Coastguard Worker
ixheaacd_pre_twiddle_120(WORD32 * xptr,WORD32 * data,WORD32 n,WORD16 * cos_sin_ptr,WORD32 neg_expo)2533*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pre_twiddle_120(WORD32 *xptr, WORD32 *data, WORD32 n,
2534*15dc779aSAndroid Build Coastguard Worker WORD16 *cos_sin_ptr, WORD32 neg_expo) {
2535*15dc779aSAndroid Build Coastguard Worker WORD npoints_4, i;
2536*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi, temp;
2537*15dc779aSAndroid Build Coastguard Worker WORD16 c, c1, s, s1;
2538*15dc779aSAndroid Build Coastguard Worker WORD32 *in_ptr1, *in_ptr2;
2539*15dc779aSAndroid Build Coastguard Worker WORD32 *xprt1 = xptr + (n - 1);
2540*15dc779aSAndroid Build Coastguard Worker
2541*15dc779aSAndroid Build Coastguard Worker npoints_4 = n >> 2;
2542*15dc779aSAndroid Build Coastguard Worker
2543*15dc779aSAndroid Build Coastguard Worker in_ptr1 = data;
2544*15dc779aSAndroid Build Coastguard Worker in_ptr2 = data + n - 1;
2545*15dc779aSAndroid Build Coastguard Worker
2546*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < npoints_4; i++) {
2547*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
2548*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
2549*15dc779aSAndroid Build Coastguard Worker
2550*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr1++;
2551*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr2--;
2552*15dc779aSAndroid Build Coastguard Worker
2553*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32(ixheaac_mult32x16in32(tempr, c),
2554*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, s));
2555*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shr32_dir_sat(temp, neg_expo);
2556*15dc779aSAndroid Build Coastguard Worker
2557*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_sub32(ixheaac_mult32x16in32(tempi, c),
2558*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr, s));
2559*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shr32_dir_sat(temp, neg_expo);
2560*15dc779aSAndroid Build Coastguard Worker
2561*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
2562*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
2563*15dc779aSAndroid Build Coastguard Worker
2564*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr1++;
2565*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr2--;
2566*15dc779aSAndroid Build Coastguard Worker
2567*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_sub32(ixheaac_mult32x16in32(tempi, c1),
2568*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempr, s1));
2569*15dc779aSAndroid Build Coastguard Worker *xprt1-- = ixheaac_shr32_dir_sat(temp, neg_expo);
2570*15dc779aSAndroid Build Coastguard Worker
2571*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32(ixheaac_mult32x16in32(tempr, c1),
2572*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, s1));
2573*15dc779aSAndroid Build Coastguard Worker *xprt1-- = ixheaac_shr32_dir_sat(temp, neg_expo);
2574*15dc779aSAndroid Build Coastguard Worker }
2575*15dc779aSAndroid Build Coastguard Worker }
2576*15dc779aSAndroid Build Coastguard Worker
ixheaacd_pre_twiddle(WORD32 * xptr,WORD32 * data,WORD32 n,WORD32 * cos_sin_ptr,WORD32 neg_expo)2577*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pre_twiddle(WORD32 *xptr, WORD32 *data, WORD32 n,
2578*15dc779aSAndroid Build Coastguard Worker WORD32 *cos_sin_ptr, WORD32 neg_expo) {
2579*15dc779aSAndroid Build Coastguard Worker WORD npoints_4, i;
2580*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi, temp;
2581*15dc779aSAndroid Build Coastguard Worker WORD32 c, c1, s, s1;
2582*15dc779aSAndroid Build Coastguard Worker WORD32 *in_ptr1, *in_ptr2;
2583*15dc779aSAndroid Build Coastguard Worker
2584*15dc779aSAndroid Build Coastguard Worker npoints_4 = n >> 2;
2585*15dc779aSAndroid Build Coastguard Worker
2586*15dc779aSAndroid Build Coastguard Worker in_ptr1 = data;
2587*15dc779aSAndroid Build Coastguard Worker in_ptr2 = data + n - 1;
2588*15dc779aSAndroid Build Coastguard Worker
2589*15dc779aSAndroid Build Coastguard Worker if (neg_expo >= 0) {
2590*15dc779aSAndroid Build Coastguard Worker for (i = npoints_4 - 1; i >= 0; i--) {
2591*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
2592*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
2593*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
2594*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
2595*15dc779aSAndroid Build Coastguard Worker
2596*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr1;
2597*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr2;
2598*15dc779aSAndroid Build Coastguard Worker
2599*15dc779aSAndroid Build Coastguard Worker in_ptr1 += 2;
2600*15dc779aSAndroid Build Coastguard Worker in_ptr2 -= 2;
2601*15dc779aSAndroid Build Coastguard Worker
2602*15dc779aSAndroid Build Coastguard Worker temp =
2603*15dc779aSAndroid Build Coastguard Worker -ixheaac_add32(ixheaac_mult32(tempr, c), ixheaac_mult32(tempi, s));
2604*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shr32(temp, neg_expo);
2605*15dc779aSAndroid Build Coastguard Worker
2606*15dc779aSAndroid Build Coastguard Worker temp =
2607*15dc779aSAndroid Build Coastguard Worker ixheaac_sub32(ixheaac_mult32(tempr, s), ixheaac_mult32(tempi, c));
2608*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shr32(temp, neg_expo);
2609*15dc779aSAndroid Build Coastguard Worker
2610*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr1;
2611*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr2;
2612*15dc779aSAndroid Build Coastguard Worker
2613*15dc779aSAndroid Build Coastguard Worker in_ptr1 += 2;
2614*15dc779aSAndroid Build Coastguard Worker in_ptr2 -= 2;
2615*15dc779aSAndroid Build Coastguard Worker
2616*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32(ixheaac_mult32(tempr, c1),
2617*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32(tempi, s1));
2618*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shr32(temp, neg_expo);
2619*15dc779aSAndroid Build Coastguard Worker
2620*15dc779aSAndroid Build Coastguard Worker temp = ixheaac_sub32(ixheaac_mult32(tempr, s1),
2621*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32(tempi, c1));
2622*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shr32(temp, neg_expo);
2623*15dc779aSAndroid Build Coastguard Worker }
2624*15dc779aSAndroid Build Coastguard Worker } else {
2625*15dc779aSAndroid Build Coastguard Worker neg_expo = -neg_expo;
2626*15dc779aSAndroid Build Coastguard Worker
2627*15dc779aSAndroid Build Coastguard Worker for (i = npoints_4 - 1; i >= 0; i--) {
2628*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
2629*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
2630*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
2631*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
2632*15dc779aSAndroid Build Coastguard Worker
2633*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr1;
2634*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr2;
2635*15dc779aSAndroid Build Coastguard Worker
2636*15dc779aSAndroid Build Coastguard Worker in_ptr1 += 2;
2637*15dc779aSAndroid Build Coastguard Worker in_ptr2 -= 2;
2638*15dc779aSAndroid Build Coastguard Worker
2639*15dc779aSAndroid Build Coastguard Worker temp =
2640*15dc779aSAndroid Build Coastguard Worker -ixheaac_add32(ixheaac_mult32(tempr, c), ixheaac_mult32(tempi, s));
2641*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shl32(temp, neg_expo);
2642*15dc779aSAndroid Build Coastguard Worker
2643*15dc779aSAndroid Build Coastguard Worker temp =
2644*15dc779aSAndroid Build Coastguard Worker ixheaac_sub32(ixheaac_mult32(tempr, s), ixheaac_mult32(tempi, c));
2645*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shl32(temp, neg_expo);
2646*15dc779aSAndroid Build Coastguard Worker
2647*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr1;
2648*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr2;
2649*15dc779aSAndroid Build Coastguard Worker
2650*15dc779aSAndroid Build Coastguard Worker in_ptr1 += 2;
2651*15dc779aSAndroid Build Coastguard Worker in_ptr2 -= 2;
2652*15dc779aSAndroid Build Coastguard Worker
2653*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32(ixheaac_mult32(tempr, c1),
2654*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32(tempi, s1));
2655*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shl32(temp, neg_expo);
2656*15dc779aSAndroid Build Coastguard Worker
2657*15dc779aSAndroid Build Coastguard Worker temp = ixheaac_sub32(ixheaac_mult32(tempr, s1),
2658*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32(tempi, c1));
2659*15dc779aSAndroid Build Coastguard Worker *xptr++ = ixheaac_shl32(temp, neg_expo);
2660*15dc779aSAndroid Build Coastguard Worker }
2661*15dc779aSAndroid Build Coastguard Worker }
2662*15dc779aSAndroid Build Coastguard Worker }
2663*15dc779aSAndroid Build Coastguard Worker
ixheaacd_post_twiddle_120(WORD32 out[],WORD32 x[],const WORD16 * cos_sin_ptr,WORD m)2664*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_120(WORD32 out[], WORD32 x[],
2665*15dc779aSAndroid Build Coastguard Worker const WORD16 *cos_sin_ptr, WORD m) {
2666*15dc779aSAndroid Build Coastguard Worker WORD i;
2667*15dc779aSAndroid Build Coastguard Worker WORD16 c, c1, s, s1;
2668*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi, temp;
2669*15dc779aSAndroid Build Coastguard Worker WORD32 *in_ptr2 = x + (m - 1);
2670*15dc779aSAndroid Build Coastguard Worker WORD32 *in_ptr1 = x;
2671*15dc779aSAndroid Build Coastguard Worker WORD32 *xptr = out;
2672*15dc779aSAndroid Build Coastguard Worker WORD32 *xptr1 = out + (m - 1);
2673*15dc779aSAndroid Build Coastguard Worker
2674*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < m; i += 4) {
2675*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
2676*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
2677*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
2678*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
2679*15dc779aSAndroid Build Coastguard Worker
2680*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr1++;
2681*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr1++;
2682*15dc779aSAndroid Build Coastguard Worker
2683*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_sub32_sat(ixheaac_mult32x16in32(tempr, s),
2684*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, c));
2685*15dc779aSAndroid Build Coastguard Worker *xptr1-- = temp;
2686*15dc779aSAndroid Build Coastguard Worker
2687*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32_sat(ixheaac_mult32x16in32(tempr, c),
2688*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, s));
2689*15dc779aSAndroid Build Coastguard Worker *xptr++ = temp;
2690*15dc779aSAndroid Build Coastguard Worker
2691*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr2--;
2692*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr2--;
2693*15dc779aSAndroid Build Coastguard Worker
2694*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_sub32_sat(ixheaac_mult32x16in32(tempr, s1),
2695*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, c1));
2696*15dc779aSAndroid Build Coastguard Worker *xptr++ = temp;
2697*15dc779aSAndroid Build Coastguard Worker
2698*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32_sat(ixheaac_mult32x16in32(tempr, c1),
2699*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(tempi, s1));
2700*15dc779aSAndroid Build Coastguard Worker *xptr1-- = temp;
2701*15dc779aSAndroid Build Coastguard Worker }
2702*15dc779aSAndroid Build Coastguard Worker }
2703*15dc779aSAndroid Build Coastguard Worker
ixheaacd_post_twiddle_960(WORD32 out[],WORD32 x[],const WORD32 * cos_sin_ptr,WORD m)2704*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_960(WORD32 out[], WORD32 x[],
2705*15dc779aSAndroid Build Coastguard Worker const WORD32 *cos_sin_ptr, WORD m) {
2706*15dc779aSAndroid Build Coastguard Worker WORD i;
2707*15dc779aSAndroid Build Coastguard Worker WORD32 c, c1, s, s1;
2708*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi, temp;
2709*15dc779aSAndroid Build Coastguard Worker WORD32 *in_ptr2 = x + (m - 1);
2710*15dc779aSAndroid Build Coastguard Worker WORD32 *in_ptr1 = x;
2711*15dc779aSAndroid Build Coastguard Worker WORD32 *xptr = out;
2712*15dc779aSAndroid Build Coastguard Worker WORD32 *xptr1 = out + (m - 1);
2713*15dc779aSAndroid Build Coastguard Worker
2714*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < m; i += 4) {
2715*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
2716*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
2717*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
2718*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
2719*15dc779aSAndroid Build Coastguard Worker
2720*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr1++;
2721*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr1++;
2722*15dc779aSAndroid Build Coastguard Worker
2723*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_sub32_sat(ixheaac_mult32x32in32(tempr, s),
2724*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x32in32(tempi, c));
2725*15dc779aSAndroid Build Coastguard Worker *xptr1-- = temp;
2726*15dc779aSAndroid Build Coastguard Worker
2727*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32_sat(ixheaac_mult32x32in32(tempr, c),
2728*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x32in32(tempi, s));
2729*15dc779aSAndroid Build Coastguard Worker *xptr++ = temp;
2730*15dc779aSAndroid Build Coastguard Worker
2731*15dc779aSAndroid Build Coastguard Worker tempi = *in_ptr2--;
2732*15dc779aSAndroid Build Coastguard Worker tempr = *in_ptr2--;
2733*15dc779aSAndroid Build Coastguard Worker
2734*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_sub32_sat(ixheaac_mult32x32in32(tempr, s1),
2735*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x32in32(tempi, c1));
2736*15dc779aSAndroid Build Coastguard Worker *xptr++ = temp;
2737*15dc779aSAndroid Build Coastguard Worker
2738*15dc779aSAndroid Build Coastguard Worker temp = -ixheaac_add32_sat(ixheaac_mult32x32in32(tempr, c1),
2739*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x32in32(tempi, s1));
2740*15dc779aSAndroid Build Coastguard Worker *xptr1-- = temp;
2741*15dc779aSAndroid Build Coastguard Worker }
2742*15dc779aSAndroid Build Coastguard Worker }
2743*15dc779aSAndroid Build Coastguard Worker
ixheaacd_post_twiddle_ld(WORD32 out[],WORD32 x[],const WORD32 * cos_sin_ptr,WORD m)2744*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_ld(WORD32 out[], WORD32 x[],
2745*15dc779aSAndroid Build Coastguard Worker const WORD32 *cos_sin_ptr, WORD m) {
2746*15dc779aSAndroid Build Coastguard Worker WORD i;
2747*15dc779aSAndroid Build Coastguard Worker
2748*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_x = &x[0];
2749*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_out, *ptr_out1;
2750*15dc779aSAndroid Build Coastguard Worker
2751*15dc779aSAndroid Build Coastguard Worker ptr_out = &out[0];
2752*15dc779aSAndroid Build Coastguard Worker ptr_out1 = &out[m - 1];
2753*15dc779aSAndroid Build Coastguard Worker
2754*15dc779aSAndroid Build Coastguard Worker for (i = (m >> 2) - 1; i >= 0; i--) {
2755*15dc779aSAndroid Build Coastguard Worker WORD32 c, c1, s, s1;
2756*15dc779aSAndroid Build Coastguard Worker WORD32 re, im;
2757*15dc779aSAndroid Build Coastguard Worker
2758*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
2759*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
2760*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
2761*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
2762*15dc779aSAndroid Build Coastguard Worker
2763*15dc779aSAndroid Build Coastguard Worker re = *ptr_x++;
2764*15dc779aSAndroid Build Coastguard Worker im = *ptr_x++;
2765*15dc779aSAndroid Build Coastguard Worker
2766*15dc779aSAndroid Build Coastguard Worker *ptr_out1 = ixheaac_sub32(ixheaac_mult32(im, c), ixheaac_mult32(re, s));
2767*15dc779aSAndroid Build Coastguard Worker
2768*15dc779aSAndroid Build Coastguard Worker *ptr_out = -ixheaac_add32(ixheaac_mult32(re, c), ixheaac_mult32(im, s));
2769*15dc779aSAndroid Build Coastguard Worker
2770*15dc779aSAndroid Build Coastguard Worker ptr_out += 2;
2771*15dc779aSAndroid Build Coastguard Worker ptr_out1 -= 2;
2772*15dc779aSAndroid Build Coastguard Worker
2773*15dc779aSAndroid Build Coastguard Worker re = *ptr_x++;
2774*15dc779aSAndroid Build Coastguard Worker im = *ptr_x++;
2775*15dc779aSAndroid Build Coastguard Worker
2776*15dc779aSAndroid Build Coastguard Worker *ptr_out1 =
2777*15dc779aSAndroid Build Coastguard Worker ixheaac_sub32(ixheaac_mult32(im, c1), ixheaac_mult32(re, s1));
2778*15dc779aSAndroid Build Coastguard Worker *ptr_out =
2779*15dc779aSAndroid Build Coastguard Worker -ixheaac_add32(ixheaac_mult32(re, c1), ixheaac_mult32(im, s1));
2780*15dc779aSAndroid Build Coastguard Worker
2781*15dc779aSAndroid Build Coastguard Worker ptr_out += 2;
2782*15dc779aSAndroid Build Coastguard Worker ptr_out1 -= 2;
2783*15dc779aSAndroid Build Coastguard Worker }
2784*15dc779aSAndroid Build Coastguard Worker }
2785*15dc779aSAndroid Build Coastguard Worker
ixheaacd_post_twiddle_eld(WORD32 out[],WORD32 x[],const WORD32 * cos_sin_ptr,WORD m)2786*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_eld(WORD32 out[], WORD32 x[],
2787*15dc779aSAndroid Build Coastguard Worker const WORD32 *cos_sin_ptr, WORD m) {
2788*15dc779aSAndroid Build Coastguard Worker WORD i = 0;
2789*15dc779aSAndroid Build Coastguard Worker
2790*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_x = &x[0];
2791*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_out_767, *ptr_out_256;
2792*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_out_768, *ptr_out_255;
2793*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_out_0, *ptr_out_1279;
2794*15dc779aSAndroid Build Coastguard Worker WORD32 tempr, tempi;
2795*15dc779aSAndroid Build Coastguard Worker
2796*15dc779aSAndroid Build Coastguard Worker ptr_out_767 = &out[m + (m >> 1) - 1 - 2 * i];
2797*15dc779aSAndroid Build Coastguard Worker ptr_out_256 = &out[(m >> 1) + 2 * i];
2798*15dc779aSAndroid Build Coastguard Worker
2799*15dc779aSAndroid Build Coastguard Worker ptr_out_768 = &out[m + (m >> 1) + 2 * i];
2800*15dc779aSAndroid Build Coastguard Worker ptr_out_255 = &out[(m >> 1) - 1 - 2 * i];
2801*15dc779aSAndroid Build Coastguard Worker
2802*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < (m >> 3); i++) {
2803*15dc779aSAndroid Build Coastguard Worker WORD32 c, c1, s, s1;
2804*15dc779aSAndroid Build Coastguard Worker WORD32 re, im;
2805*15dc779aSAndroid Build Coastguard Worker
2806*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
2807*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
2808*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
2809*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
2810*15dc779aSAndroid Build Coastguard Worker
2811*15dc779aSAndroid Build Coastguard Worker re = *ptr_x++;
2812*15dc779aSAndroid Build Coastguard Worker im = *ptr_x++;
2813*15dc779aSAndroid Build Coastguard Worker
2814*15dc779aSAndroid Build Coastguard Worker tempi = ixheaac_sub32(ixheaac_mult32(im, c), ixheaac_mult32(re, s));
2815*15dc779aSAndroid Build Coastguard Worker tempr = -ixheaac_add32(ixheaac_mult32(re, c), ixheaac_mult32(im, s));
2816*15dc779aSAndroid Build Coastguard Worker
2817*15dc779aSAndroid Build Coastguard Worker *ptr_out_767 = tempr;
2818*15dc779aSAndroid Build Coastguard Worker *ptr_out_256 = tempi;
2819*15dc779aSAndroid Build Coastguard Worker
2820*15dc779aSAndroid Build Coastguard Worker *ptr_out_768 = *ptr_out_767;
2821*15dc779aSAndroid Build Coastguard Worker *ptr_out_255 = -*ptr_out_256;
2822*15dc779aSAndroid Build Coastguard Worker
2823*15dc779aSAndroid Build Coastguard Worker ptr_out_256 += 2;
2824*15dc779aSAndroid Build Coastguard Worker ptr_out_767 -= 2;
2825*15dc779aSAndroid Build Coastguard Worker ptr_out_768 += 2;
2826*15dc779aSAndroid Build Coastguard Worker ptr_out_255 -= 2;
2827*15dc779aSAndroid Build Coastguard Worker
2828*15dc779aSAndroid Build Coastguard Worker re = *ptr_x++;
2829*15dc779aSAndroid Build Coastguard Worker im = *ptr_x++;
2830*15dc779aSAndroid Build Coastguard Worker
2831*15dc779aSAndroid Build Coastguard Worker tempi = ixheaac_sub32(ixheaac_mult32(im, c1), ixheaac_mult32(re, s1));
2832*15dc779aSAndroid Build Coastguard Worker tempr = -ixheaac_add32(ixheaac_mult32(re, c1), ixheaac_mult32(im, s1));
2833*15dc779aSAndroid Build Coastguard Worker
2834*15dc779aSAndroid Build Coastguard Worker *ptr_out_767 = tempr;
2835*15dc779aSAndroid Build Coastguard Worker *ptr_out_256 = tempi;
2836*15dc779aSAndroid Build Coastguard Worker
2837*15dc779aSAndroid Build Coastguard Worker *ptr_out_768 = *ptr_out_767;
2838*15dc779aSAndroid Build Coastguard Worker *ptr_out_255 = -*ptr_out_256;
2839*15dc779aSAndroid Build Coastguard Worker
2840*15dc779aSAndroid Build Coastguard Worker ptr_out_256 += 2;
2841*15dc779aSAndroid Build Coastguard Worker ptr_out_767 -= 2;
2842*15dc779aSAndroid Build Coastguard Worker ptr_out_768 += 2;
2843*15dc779aSAndroid Build Coastguard Worker ptr_out_255 -= 2;
2844*15dc779aSAndroid Build Coastguard Worker }
2845*15dc779aSAndroid Build Coastguard Worker
2846*15dc779aSAndroid Build Coastguard Worker ptr_out_0 = &out[2 * 2 * i - (m >> 1)];
2847*15dc779aSAndroid Build Coastguard Worker ptr_out_1279 = &out[m + m + (m >> 1) - 1 - 2 * 2 * i];
2848*15dc779aSAndroid Build Coastguard Worker
2849*15dc779aSAndroid Build Coastguard Worker for (; i < (m >> 2); i++) {
2850*15dc779aSAndroid Build Coastguard Worker WORD32 c, c1, s, s1;
2851*15dc779aSAndroid Build Coastguard Worker WORD32 re, im;
2852*15dc779aSAndroid Build Coastguard Worker
2853*15dc779aSAndroid Build Coastguard Worker c = *cos_sin_ptr++;
2854*15dc779aSAndroid Build Coastguard Worker c1 = *cos_sin_ptr++;
2855*15dc779aSAndroid Build Coastguard Worker s = *cos_sin_ptr++;
2856*15dc779aSAndroid Build Coastguard Worker s1 = *cos_sin_ptr++;
2857*15dc779aSAndroid Build Coastguard Worker
2858*15dc779aSAndroid Build Coastguard Worker re = *ptr_x++;
2859*15dc779aSAndroid Build Coastguard Worker im = *ptr_x++;
2860*15dc779aSAndroid Build Coastguard Worker
2861*15dc779aSAndroid Build Coastguard Worker tempi = ixheaac_sub32(ixheaac_mult32(im, c), ixheaac_mult32(re, s));
2862*15dc779aSAndroid Build Coastguard Worker tempr = -ixheaac_add32(ixheaac_mult32(re, c), ixheaac_mult32(im, s));
2863*15dc779aSAndroid Build Coastguard Worker
2864*15dc779aSAndroid Build Coastguard Worker *ptr_out_767 = tempr;
2865*15dc779aSAndroid Build Coastguard Worker *ptr_out_256 = tempi;
2866*15dc779aSAndroid Build Coastguard Worker
2867*15dc779aSAndroid Build Coastguard Worker *ptr_out_0 = -*ptr_out_767;
2868*15dc779aSAndroid Build Coastguard Worker *ptr_out_1279 = *ptr_out_256;
2869*15dc779aSAndroid Build Coastguard Worker
2870*15dc779aSAndroid Build Coastguard Worker ptr_out_256 += 2;
2871*15dc779aSAndroid Build Coastguard Worker ptr_out_767 -= 2;
2872*15dc779aSAndroid Build Coastguard Worker ptr_out_0 += 2;
2873*15dc779aSAndroid Build Coastguard Worker ptr_out_1279 -= 2;
2874*15dc779aSAndroid Build Coastguard Worker
2875*15dc779aSAndroid Build Coastguard Worker re = *ptr_x++;
2876*15dc779aSAndroid Build Coastguard Worker im = *ptr_x++;
2877*15dc779aSAndroid Build Coastguard Worker
2878*15dc779aSAndroid Build Coastguard Worker tempi = ixheaac_sub32(ixheaac_mult32(im, c1), ixheaac_mult32(re, s1));
2879*15dc779aSAndroid Build Coastguard Worker tempr = -ixheaac_add32(ixheaac_mult32(re, c1), ixheaac_mult32(im, s1));
2880*15dc779aSAndroid Build Coastguard Worker
2881*15dc779aSAndroid Build Coastguard Worker *ptr_out_767 = tempr;
2882*15dc779aSAndroid Build Coastguard Worker *ptr_out_256 = tempi;
2883*15dc779aSAndroid Build Coastguard Worker
2884*15dc779aSAndroid Build Coastguard Worker *ptr_out_0 = -*ptr_out_767;
2885*15dc779aSAndroid Build Coastguard Worker *ptr_out_1279 = *ptr_out_256;
2886*15dc779aSAndroid Build Coastguard Worker
2887*15dc779aSAndroid Build Coastguard Worker ptr_out_256 += 2;
2888*15dc779aSAndroid Build Coastguard Worker ptr_out_767 -= 2;
2889*15dc779aSAndroid Build Coastguard Worker ptr_out_0 += 2;
2890*15dc779aSAndroid Build Coastguard Worker ptr_out_1279 -= 2;
2891*15dc779aSAndroid Build Coastguard Worker }
2892*15dc779aSAndroid Build Coastguard Worker }
2893*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft32x32_ld_dec(ia_aac_dec_imdct_tables_struct * imdct_tables_ptr,WORD32 npoints,WORD32 * ptr_x,WORD32 * ptr_y)2894*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft32x32_ld_dec(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr,
2895*15dc779aSAndroid Build Coastguard Worker WORD32 npoints, WORD32 *ptr_x, WORD32 *ptr_y) {
2896*15dc779aSAndroid Build Coastguard Worker WORD32 i, j, l1, l2, h2, predj, tw_offset, stride, fft_jmp, k;
2897*15dc779aSAndroid Build Coastguard Worker WORD32 xt0_0, yt0_0, xt1_0, yt1_0, xt2_0, yt2_0;
2898*15dc779aSAndroid Build Coastguard Worker WORD32 xh0_0, xh1_0, xh20_0, xh21_0, xl0_0, xl1_0, xl20_0, xl21_0;
2899*15dc779aSAndroid Build Coastguard Worker WORD32 xh0_1, xh1_1, xl0_1, xl1_1;
2900*15dc779aSAndroid Build Coastguard Worker WORD32 x_0, x_1, x_2, x_3, x_l1_0, x_l1_1, x_l2_0, x_l2_1;
2901*15dc779aSAndroid Build Coastguard Worker WORD32 xh0_2, xh1_2, xl0_2, xl1_2, xh0_3, xh1_3, xl0_3, xl1_3;
2902*15dc779aSAndroid Build Coastguard Worker WORD32 x_4, x_5, x_6, x_7, x_h2_0, x_h2_1;
2903*15dc779aSAndroid Build Coastguard Worker WORD32 x_8, x_9, x_a, x_b, x_c, x_d, x_e, x_f;
2904*15dc779aSAndroid Build Coastguard Worker WORD32 si10, si20, si30, co10, co20, co30;
2905*15dc779aSAndroid Build Coastguard Worker WORD32 *w;
2906*15dc779aSAndroid Build Coastguard Worker WORD32 *x, *x2, *x0;
2907*15dc779aSAndroid Build Coastguard Worker WORD32 *y0, *y1, *y2, *y3;
2908*15dc779aSAndroid Build Coastguard Worker WORD32 n00, n10, n20, n30, n01, n11, n21, n31;
2909*15dc779aSAndroid Build Coastguard Worker WORD32 n02, n12, n22, n32, n03, n13, n23, n33;
2910*15dc779aSAndroid Build Coastguard Worker WORD32 n0, j0;
2911*15dc779aSAndroid Build Coastguard Worker WORD32 radix;
2912*15dc779aSAndroid Build Coastguard Worker WORD32 norm;
2913*15dc779aSAndroid Build Coastguard Worker WORD32 m;
2914*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_w;
2915*15dc779aSAndroid Build Coastguard Worker
2916*15dc779aSAndroid Build Coastguard Worker if (npoints == 256)
2917*15dc779aSAndroid Build Coastguard Worker ptr_w = imdct_tables_ptr->w_256;
2918*15dc779aSAndroid Build Coastguard Worker else if (npoints == 32)
2919*15dc779aSAndroid Build Coastguard Worker ptr_w = (WORD32*)imdct_tables_ptr->w_32;
2920*15dc779aSAndroid Build Coastguard Worker else
2921*15dc779aSAndroid Build Coastguard Worker ptr_w = imdct_tables_ptr->w_16;
2922*15dc779aSAndroid Build Coastguard Worker
2923*15dc779aSAndroid Build Coastguard Worker for (i = 31, m = 1; (npoints & (1 << i)) == 0; i--, m++)
2924*15dc779aSAndroid Build Coastguard Worker ;
2925*15dc779aSAndroid Build Coastguard Worker radix = m & 1 ? 2 : 4;
2926*15dc779aSAndroid Build Coastguard Worker norm = m - 2;
2927*15dc779aSAndroid Build Coastguard Worker
2928*15dc779aSAndroid Build Coastguard Worker stride = npoints;
2929*15dc779aSAndroid Build Coastguard Worker tw_offset = 0;
2930*15dc779aSAndroid Build Coastguard Worker fft_jmp = 6 * stride;
2931*15dc779aSAndroid Build Coastguard Worker
2932*15dc779aSAndroid Build Coastguard Worker while (stride > radix) {
2933*15dc779aSAndroid Build Coastguard Worker j = 0;
2934*15dc779aSAndroid Build Coastguard Worker fft_jmp >>= 2;
2935*15dc779aSAndroid Build Coastguard Worker
2936*15dc779aSAndroid Build Coastguard Worker h2 = stride >> 1;
2937*15dc779aSAndroid Build Coastguard Worker l1 = stride;
2938*15dc779aSAndroid Build Coastguard Worker l2 = stride + (stride >> 1);
2939*15dc779aSAndroid Build Coastguard Worker
2940*15dc779aSAndroid Build Coastguard Worker x = ptr_x;
2941*15dc779aSAndroid Build Coastguard Worker w = ptr_w + tw_offset;
2942*15dc779aSAndroid Build Coastguard Worker tw_offset += fft_jmp;
2943*15dc779aSAndroid Build Coastguard Worker
2944*15dc779aSAndroid Build Coastguard Worker stride >>= 2;
2945*15dc779aSAndroid Build Coastguard Worker
2946*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < npoints; i += 4) {
2947*15dc779aSAndroid Build Coastguard Worker co10 = w[j + 1];
2948*15dc779aSAndroid Build Coastguard Worker si10 = w[j + 0];
2949*15dc779aSAndroid Build Coastguard Worker co20 = w[j + 3];
2950*15dc779aSAndroid Build Coastguard Worker si20 = w[j + 2];
2951*15dc779aSAndroid Build Coastguard Worker co30 = w[j + 5];
2952*15dc779aSAndroid Build Coastguard Worker si30 = w[j + 4];
2953*15dc779aSAndroid Build Coastguard Worker
2954*15dc779aSAndroid Build Coastguard Worker x_0 = x[0];
2955*15dc779aSAndroid Build Coastguard Worker x_1 = x[1];
2956*15dc779aSAndroid Build Coastguard Worker x_l1_0 = x[l1];
2957*15dc779aSAndroid Build Coastguard Worker x_l1_1 = x[l1 + 1];
2958*15dc779aSAndroid Build Coastguard Worker x_l2_0 = x[l2];
2959*15dc779aSAndroid Build Coastguard Worker x_l2_1 = x[l2 + 1];
2960*15dc779aSAndroid Build Coastguard Worker x_h2_0 = x[h2];
2961*15dc779aSAndroid Build Coastguard Worker x_h2_1 = x[h2 + 1];
2962*15dc779aSAndroid Build Coastguard Worker
2963*15dc779aSAndroid Build Coastguard Worker xh0_0 = ixheaac_add32_sat(x_0, x_l1_0);
2964*15dc779aSAndroid Build Coastguard Worker xh1_0 = ixheaac_add32_sat(x_1, x_l1_1);
2965*15dc779aSAndroid Build Coastguard Worker xl0_0 = ixheaac_sub32_sat(x_0, x_l1_0);
2966*15dc779aSAndroid Build Coastguard Worker xl1_0 = ixheaac_sub32_sat(x_1, x_l1_1);
2967*15dc779aSAndroid Build Coastguard Worker xh20_0 = ixheaac_add32_sat(x_h2_0, x_l2_0);
2968*15dc779aSAndroid Build Coastguard Worker xh21_0 = ixheaac_add32_sat(x_h2_1, x_l2_1);
2969*15dc779aSAndroid Build Coastguard Worker xl20_0 = ixheaac_sub32_sat(x_h2_0, x_l2_0);
2970*15dc779aSAndroid Build Coastguard Worker xl21_0 = ixheaac_sub32_sat(x_h2_1, x_l2_1);
2971*15dc779aSAndroid Build Coastguard Worker
2972*15dc779aSAndroid Build Coastguard Worker x0 = x;
2973*15dc779aSAndroid Build Coastguard Worker x2 = x0;
2974*15dc779aSAndroid Build Coastguard Worker
2975*15dc779aSAndroid Build Coastguard Worker j += 6;
2976*15dc779aSAndroid Build Coastguard Worker x += 2;
2977*15dc779aSAndroid Build Coastguard Worker predj = (j - fft_jmp);
2978*15dc779aSAndroid Build Coastguard Worker if (!predj) x += fft_jmp;
2979*15dc779aSAndroid Build Coastguard Worker if (!predj) j = 0;
2980*15dc779aSAndroid Build Coastguard Worker
2981*15dc779aSAndroid Build Coastguard Worker x0[0] = ixheaac_add32_sat(xh0_0, xh20_0);
2982*15dc779aSAndroid Build Coastguard Worker x0[1] = ixheaac_add32_sat(xh1_0, xh21_0);
2983*15dc779aSAndroid Build Coastguard Worker xt0_0 = ixheaac_sub32_sat(xh0_0, xh20_0);
2984*15dc779aSAndroid Build Coastguard Worker yt0_0 = ixheaac_sub32_sat(xh1_0, xh21_0);
2985*15dc779aSAndroid Build Coastguard Worker xt1_0 = ixheaac_add32_sat(xl0_0, xl21_0);
2986*15dc779aSAndroid Build Coastguard Worker yt2_0 = ixheaac_add32_sat(xl1_0, xl20_0);
2987*15dc779aSAndroid Build Coastguard Worker xt2_0 = ixheaac_sub32_sat(xl0_0, xl21_0);
2988*15dc779aSAndroid Build Coastguard Worker yt1_0 = ixheaac_sub32_sat(xl1_0, xl20_0);
2989*15dc779aSAndroid Build Coastguard Worker
2990*15dc779aSAndroid Build Coastguard Worker x2[h2] =
2991*15dc779aSAndroid Build Coastguard Worker MPYHIRC(si10, yt1_0) + MPYHIRC(co10, xt1_0) +
2992*15dc779aSAndroid Build Coastguard Worker (((MPYLUHS(si10, yt1_0) + MPYLUHS(co10, xt1_0) + 0x8000) >> 16) << 1);
2993*15dc779aSAndroid Build Coastguard Worker
2994*15dc779aSAndroid Build Coastguard Worker x2[h2 + 1] =
2995*15dc779aSAndroid Build Coastguard Worker MPYHIRC(co10, yt1_0) - MPYHIRC(si10, xt1_0) +
2996*15dc779aSAndroid Build Coastguard Worker (((MPYLUHS(co10, yt1_0) - MPYLUHS(si10, xt1_0) + 0x8000) >> 16) << 1);
2997*15dc779aSAndroid Build Coastguard Worker
2998*15dc779aSAndroid Build Coastguard Worker x2[l1] =
2999*15dc779aSAndroid Build Coastguard Worker MPYHIRC(si20, yt0_0) + MPYHIRC(co20, xt0_0) +
3000*15dc779aSAndroid Build Coastguard Worker (((MPYLUHS(si20, yt0_0) + MPYLUHS(co20, xt0_0) + 0x8000) >> 16) << 1);
3001*15dc779aSAndroid Build Coastguard Worker
3002*15dc779aSAndroid Build Coastguard Worker x2[l1 + 1] =
3003*15dc779aSAndroid Build Coastguard Worker MPYHIRC(co20, yt0_0) - MPYHIRC(si20, xt0_0) +
3004*15dc779aSAndroid Build Coastguard Worker (((MPYLUHS(co20, yt0_0) - MPYLUHS(si20, xt0_0) + 0x8000) >> 16) << 1);
3005*15dc779aSAndroid Build Coastguard Worker
3006*15dc779aSAndroid Build Coastguard Worker x2[l2] =
3007*15dc779aSAndroid Build Coastguard Worker MPYHIRC(si30, yt2_0) + MPYHIRC(co30, xt2_0) +
3008*15dc779aSAndroid Build Coastguard Worker (((MPYLUHS(si30, yt2_0) + MPYLUHS(co30, xt2_0) + 0x8000) >> 16) << 1);
3009*15dc779aSAndroid Build Coastguard Worker
3010*15dc779aSAndroid Build Coastguard Worker x2[l2 + 1] =
3011*15dc779aSAndroid Build Coastguard Worker MPYHIRC(co30, yt2_0) - MPYHIRC(si30, xt2_0) +
3012*15dc779aSAndroid Build Coastguard Worker (((MPYLUHS(co30, yt2_0) - MPYLUHS(si30, xt2_0) + 0x8000) >> 16) << 1);
3013*15dc779aSAndroid Build Coastguard Worker }
3014*15dc779aSAndroid Build Coastguard Worker }
3015*15dc779aSAndroid Build Coastguard Worker
3016*15dc779aSAndroid Build Coastguard Worker y0 = ptr_y;
3017*15dc779aSAndroid Build Coastguard Worker y2 = ptr_y + (WORD32)npoints;
3018*15dc779aSAndroid Build Coastguard Worker x0 = ptr_x;
3019*15dc779aSAndroid Build Coastguard Worker x2 = ptr_x + (WORD32)(npoints >> 1);
3020*15dc779aSAndroid Build Coastguard Worker
3021*15dc779aSAndroid Build Coastguard Worker if (radix == 2) {
3022*15dc779aSAndroid Build Coastguard Worker y1 = y0 + (WORD32)(npoints >> 2);
3023*15dc779aSAndroid Build Coastguard Worker y3 = y2 + (WORD32)(npoints >> 2);
3024*15dc779aSAndroid Build Coastguard Worker l1 = norm + 1;
3025*15dc779aSAndroid Build Coastguard Worker j0 = 8;
3026*15dc779aSAndroid Build Coastguard Worker n0 = npoints >> 1;
3027*15dc779aSAndroid Build Coastguard Worker } else {
3028*15dc779aSAndroid Build Coastguard Worker y1 = y0 + (WORD32)(npoints >> 1);
3029*15dc779aSAndroid Build Coastguard Worker y3 = y2 + (WORD32)(npoints >> 1);
3030*15dc779aSAndroid Build Coastguard Worker l1 = norm + 2;
3031*15dc779aSAndroid Build Coastguard Worker j0 = 4;
3032*15dc779aSAndroid Build Coastguard Worker n0 = npoints >> 2;
3033*15dc779aSAndroid Build Coastguard Worker }
3034*15dc779aSAndroid Build Coastguard Worker
3035*15dc779aSAndroid Build Coastguard Worker j = 0;
3036*15dc779aSAndroid Build Coastguard Worker k = 0;
3037*15dc779aSAndroid Build Coastguard Worker
3038*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < npoints; i += 8) {
3039*15dc779aSAndroid Build Coastguard Worker if (npoints == 32)
3040*15dc779aSAndroid Build Coastguard Worker h2 = rev_dig[k++];
3041*15dc779aSAndroid Build Coastguard Worker else
3042*15dc779aSAndroid Build Coastguard Worker DIG_REV(j, l1, h2);
3043*15dc779aSAndroid Build Coastguard Worker
3044*15dc779aSAndroid Build Coastguard Worker x_0 = x0[0];
3045*15dc779aSAndroid Build Coastguard Worker x_1 = x0[1];
3046*15dc779aSAndroid Build Coastguard Worker x_2 = x0[2];
3047*15dc779aSAndroid Build Coastguard Worker x_3 = x0[3];
3048*15dc779aSAndroid Build Coastguard Worker x_4 = x0[4];
3049*15dc779aSAndroid Build Coastguard Worker x_5 = x0[5];
3050*15dc779aSAndroid Build Coastguard Worker x_6 = x0[6];
3051*15dc779aSAndroid Build Coastguard Worker x_7 = x0[7];
3052*15dc779aSAndroid Build Coastguard Worker x0 += 8;
3053*15dc779aSAndroid Build Coastguard Worker
3054*15dc779aSAndroid Build Coastguard Worker xh0_0 = ixheaac_add32_sat(x_0, x_4);
3055*15dc779aSAndroid Build Coastguard Worker xh1_0 = ixheaac_add32_sat(x_1, x_5);
3056*15dc779aSAndroid Build Coastguard Worker xl0_0 = ixheaac_sub32_sat(x_0, x_4);
3057*15dc779aSAndroid Build Coastguard Worker xl1_0 = ixheaac_sub32_sat(x_1, x_5);
3058*15dc779aSAndroid Build Coastguard Worker xh0_1 = ixheaac_add32_sat(x_2, x_6);
3059*15dc779aSAndroid Build Coastguard Worker xh1_1 = ixheaac_add32_sat(x_3, x_7);
3060*15dc779aSAndroid Build Coastguard Worker xl0_1 = ixheaac_sub32_sat(x_2, x_6);
3061*15dc779aSAndroid Build Coastguard Worker xl1_1 = ixheaac_sub32_sat(x_3, x_7);
3062*15dc779aSAndroid Build Coastguard Worker
3063*15dc779aSAndroid Build Coastguard Worker n00 = ixheaac_add32_sat(xh0_0, xh0_1);
3064*15dc779aSAndroid Build Coastguard Worker n01 = ixheaac_add32_sat(xh1_0, xh1_1);
3065*15dc779aSAndroid Build Coastguard Worker n10 = ixheaac_add32_sat(xl0_0, xl1_1);
3066*15dc779aSAndroid Build Coastguard Worker n11 = ixheaac_sub32_sat(xl1_0, xl0_1);
3067*15dc779aSAndroid Build Coastguard Worker n20 = ixheaac_sub32_sat(xh0_0, xh0_1);
3068*15dc779aSAndroid Build Coastguard Worker n21 = ixheaac_sub32_sat(xh1_0, xh1_1);
3069*15dc779aSAndroid Build Coastguard Worker n30 = ixheaac_sub32_sat(xl0_0, xl1_1);
3070*15dc779aSAndroid Build Coastguard Worker n31 = ixheaac_add32_sat(xl1_0, xl0_1);
3071*15dc779aSAndroid Build Coastguard Worker
3072*15dc779aSAndroid Build Coastguard Worker if (radix == 2) {
3073*15dc779aSAndroid Build Coastguard Worker n00 = ixheaac_add32_sat(x_0, x_2);
3074*15dc779aSAndroid Build Coastguard Worker n01 = ixheaac_add32_sat(x_1, x_3);
3075*15dc779aSAndroid Build Coastguard Worker n20 = ixheaac_sub32_sat(x_0, x_2);
3076*15dc779aSAndroid Build Coastguard Worker n21 = ixheaac_sub32_sat(x_1, x_3);
3077*15dc779aSAndroid Build Coastguard Worker n10 = ixheaac_add32_sat(x_4, x_6);
3078*15dc779aSAndroid Build Coastguard Worker n11 = ixheaac_add32_sat(x_5, x_7);
3079*15dc779aSAndroid Build Coastguard Worker n30 = ixheaac_sub32_sat(x_4, x_6);
3080*15dc779aSAndroid Build Coastguard Worker n31 = ixheaac_sub32_sat(x_5, x_7);
3081*15dc779aSAndroid Build Coastguard Worker }
3082*15dc779aSAndroid Build Coastguard Worker
3083*15dc779aSAndroid Build Coastguard Worker y0[2 * h2] = n00;
3084*15dc779aSAndroid Build Coastguard Worker y0[2 * h2 + 1] = n01;
3085*15dc779aSAndroid Build Coastguard Worker y1[2 * h2] = n10;
3086*15dc779aSAndroid Build Coastguard Worker y1[2 * h2 + 1] = n11;
3087*15dc779aSAndroid Build Coastguard Worker y2[2 * h2] = n20;
3088*15dc779aSAndroid Build Coastguard Worker y2[2 * h2 + 1] = n21;
3089*15dc779aSAndroid Build Coastguard Worker y3[2 * h2] = n30;
3090*15dc779aSAndroid Build Coastguard Worker y3[2 * h2 + 1] = n31;
3091*15dc779aSAndroid Build Coastguard Worker
3092*15dc779aSAndroid Build Coastguard Worker x_8 = x2[0];
3093*15dc779aSAndroid Build Coastguard Worker x_9 = x2[1];
3094*15dc779aSAndroid Build Coastguard Worker x_a = x2[2];
3095*15dc779aSAndroid Build Coastguard Worker x_b = x2[3];
3096*15dc779aSAndroid Build Coastguard Worker x_c = x2[4];
3097*15dc779aSAndroid Build Coastguard Worker x_d = x2[5];
3098*15dc779aSAndroid Build Coastguard Worker x_e = x2[6];
3099*15dc779aSAndroid Build Coastguard Worker x_f = x2[7];
3100*15dc779aSAndroid Build Coastguard Worker x2 += 8;
3101*15dc779aSAndroid Build Coastguard Worker
3102*15dc779aSAndroid Build Coastguard Worker xh0_2 = ixheaac_add32_sat(x_8, x_c);
3103*15dc779aSAndroid Build Coastguard Worker xh1_2 = ixheaac_add32_sat(x_9, x_d);
3104*15dc779aSAndroid Build Coastguard Worker xl0_2 = ixheaac_sub32_sat(x_8, x_c);
3105*15dc779aSAndroid Build Coastguard Worker xl1_2 = ixheaac_sub32_sat(x_9, x_d);
3106*15dc779aSAndroid Build Coastguard Worker xh0_3 = ixheaac_add32_sat(x_a, x_e);
3107*15dc779aSAndroid Build Coastguard Worker xh1_3 = ixheaac_add32_sat(x_b, x_f);
3108*15dc779aSAndroid Build Coastguard Worker xl0_3 = ixheaac_sub32_sat(x_a, x_e);
3109*15dc779aSAndroid Build Coastguard Worker xl1_3 = ixheaac_sub32_sat(x_b, x_f);
3110*15dc779aSAndroid Build Coastguard Worker
3111*15dc779aSAndroid Build Coastguard Worker n02 = ixheaac_add32_sat(xh0_2, xh0_3);
3112*15dc779aSAndroid Build Coastguard Worker n03 = ixheaac_add32_sat(xh1_2, xh1_3);
3113*15dc779aSAndroid Build Coastguard Worker n12 = ixheaac_add32_sat(xl0_2, xl1_3);
3114*15dc779aSAndroid Build Coastguard Worker n13 = ixheaac_sub32_sat(xl1_2, xl0_3);
3115*15dc779aSAndroid Build Coastguard Worker n22 = ixheaac_sub32_sat(xh0_2, xh0_3);
3116*15dc779aSAndroid Build Coastguard Worker n23 = ixheaac_sub32_sat(xh1_2, xh1_3);
3117*15dc779aSAndroid Build Coastguard Worker n32 = ixheaac_sub32_sat(xl0_2, xl1_3);
3118*15dc779aSAndroid Build Coastguard Worker n33 = ixheaac_add32_sat(xl1_2, xl0_3);
3119*15dc779aSAndroid Build Coastguard Worker
3120*15dc779aSAndroid Build Coastguard Worker if (radix == 2) {
3121*15dc779aSAndroid Build Coastguard Worker n02 = ixheaac_add32_sat(x_8, x_a);
3122*15dc779aSAndroid Build Coastguard Worker n03 = ixheaac_add32_sat(x_9, x_b);
3123*15dc779aSAndroid Build Coastguard Worker n22 = ixheaac_sub32_sat(x_8, x_a);
3124*15dc779aSAndroid Build Coastguard Worker n23 = ixheaac_sub32_sat(x_9, x_b);
3125*15dc779aSAndroid Build Coastguard Worker n12 = ixheaac_add32_sat(x_c, x_e);
3126*15dc779aSAndroid Build Coastguard Worker n13 = ixheaac_add32_sat(x_d, x_f);
3127*15dc779aSAndroid Build Coastguard Worker n32 = ixheaac_sub32_sat(x_c, x_e);
3128*15dc779aSAndroid Build Coastguard Worker n33 = ixheaac_sub32_sat(x_d, x_f);
3129*15dc779aSAndroid Build Coastguard Worker }
3130*15dc779aSAndroid Build Coastguard Worker
3131*15dc779aSAndroid Build Coastguard Worker y0[2 * h2 + 2] = n02;
3132*15dc779aSAndroid Build Coastguard Worker y0[2 * h2 + 3] = n03;
3133*15dc779aSAndroid Build Coastguard Worker y1[2 * h2 + 2] = n12;
3134*15dc779aSAndroid Build Coastguard Worker y1[2 * h2 + 3] = n13;
3135*15dc779aSAndroid Build Coastguard Worker y2[2 * h2 + 2] = n22;
3136*15dc779aSAndroid Build Coastguard Worker y2[2 * h2 + 3] = n23;
3137*15dc779aSAndroid Build Coastguard Worker y3[2 * h2 + 2] = n32;
3138*15dc779aSAndroid Build Coastguard Worker y3[2 * h2 + 3] = n33;
3139*15dc779aSAndroid Build Coastguard Worker
3140*15dc779aSAndroid Build Coastguard Worker j += j0;
3141*15dc779aSAndroid Build Coastguard Worker
3142*15dc779aSAndroid Build Coastguard Worker if (j == n0) {
3143*15dc779aSAndroid Build Coastguard Worker j += n0;
3144*15dc779aSAndroid Build Coastguard Worker x0 += (WORD32)npoints >> 1;
3145*15dc779aSAndroid Build Coastguard Worker x2 += (WORD32)npoints >> 1;
3146*15dc779aSAndroid Build Coastguard Worker }
3147*15dc779aSAndroid Build Coastguard Worker }
3148*15dc779aSAndroid Build Coastguard Worker }
3149*15dc779aSAndroid Build Coastguard Worker
ixheaacd_rearrange_dec(WORD32 * ip,WORD32 * op,WORD32 mdct_len_2,UWORD8 * re_arr_tab)3150*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_rearrange_dec(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2,
3151*15dc779aSAndroid Build Coastguard Worker UWORD8 *re_arr_tab) {
3152*15dc779aSAndroid Build Coastguard Worker WORD32 n, i = 0;
3153*15dc779aSAndroid Build Coastguard Worker
3154*15dc779aSAndroid Build Coastguard Worker for (n = 0; n < mdct_len_2; n++) {
3155*15dc779aSAndroid Build Coastguard Worker WORD32 idx = re_arr_tab[n] << 1;
3156*15dc779aSAndroid Build Coastguard Worker
3157*15dc779aSAndroid Build Coastguard Worker op[i++] = ip[idx];
3158*15dc779aSAndroid Build Coastguard Worker op[i++] = ip[idx + 1];
3159*15dc779aSAndroid Build Coastguard Worker }
3160*15dc779aSAndroid Build Coastguard Worker }
3161*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft_15_ld_dec(WORD32 * inp,WORD32 * op,WORD32 * fft3out,UWORD8 * re_arr_tab_sml_240_ptr)3162*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_15_ld_dec(WORD32 *inp, WORD32 *op, WORD32 *fft3out,
3163*15dc779aSAndroid Build Coastguard Worker UWORD8 *re_arr_tab_sml_240_ptr) {
3164*15dc779aSAndroid Build Coastguard Worker WORD32 i, n, idx;
3165*15dc779aSAndroid Build Coastguard Worker WORD32 *buf1, *buf2, *buf1a;
3166*15dc779aSAndroid Build Coastguard Worker WORD32 add_r, sub_r;
3167*15dc779aSAndroid Build Coastguard Worker WORD32 add_i, sub_i;
3168*15dc779aSAndroid Build Coastguard Worker WORD32 x01_real, x_01_imag, temp;
3169*15dc779aSAndroid Build Coastguard Worker WORD32 p1, p2, p3, p4;
3170*15dc779aSAndroid Build Coastguard Worker
3171*15dc779aSAndroid Build Coastguard Worker WORD32 sinmu = 1859775393;
3172*15dc779aSAndroid Build Coastguard Worker WORD32 cos_51 = 2042378317;
3173*15dc779aSAndroid Build Coastguard Worker WORD32 cos_52 = -1652318768;
3174*15dc779aSAndroid Build Coastguard Worker WORD32 cos_53 = -780119100;
3175*15dc779aSAndroid Build Coastguard Worker WORD32 cos_54 = 1200479854;
3176*15dc779aSAndroid Build Coastguard Worker WORD32 cos_55 = -1342177280;
3177*15dc779aSAndroid Build Coastguard Worker
3178*15dc779aSAndroid Build Coastguard Worker WORD32 r1, r2, r3, r4;
3179*15dc779aSAndroid Build Coastguard Worker WORD32 s1, s2, s3, s4, t, temp1, temp2;
3180*15dc779aSAndroid Build Coastguard Worker WORD32 *fft3outptr = fft3out;
3181*15dc779aSAndroid Build Coastguard Worker
3182*15dc779aSAndroid Build Coastguard Worker WORD32 xr_0, xr_1, xr_2;
3183*15dc779aSAndroid Build Coastguard Worker WORD32 xi_0, xi_1, xi_2;
3184*15dc779aSAndroid Build Coastguard Worker
3185*15dc779aSAndroid Build Coastguard Worker buf2 = fft3out;
3186*15dc779aSAndroid Build Coastguard Worker buf1 = buf1a = fft3out;
3187*15dc779aSAndroid Build Coastguard Worker n = 0;
3188*15dc779aSAndroid Build Coastguard Worker
3189*15dc779aSAndroid Build Coastguard Worker {
3190*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[0];
3191*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[1];
3192*15dc779aSAndroid Build Coastguard Worker
3193*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[96];
3194*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[97];
3195*15dc779aSAndroid Build Coastguard Worker
3196*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[192];
3197*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[193];
3198*15dc779aSAndroid Build Coastguard Worker
3199*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[288];
3200*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[289];
3201*15dc779aSAndroid Build Coastguard Worker
3202*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[384];
3203*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[385];
3204*15dc779aSAndroid Build Coastguard Worker
3205*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(buf1a[2], buf1a[8]);
3206*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_sub32_sat(buf1a[2], buf1a[8]);
3207*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_add32_sat(buf1a[4], buf1a[6]);
3208*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_sub32_sat(buf1a[4], buf1a[6]);
3209*15dc779aSAndroid Build Coastguard Worker
3210*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(r1, r3), cos_54);
3211*15dc779aSAndroid Build Coastguard Worker
3212*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, r3);
3213*15dc779aSAndroid Build Coastguard Worker
3214*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_add32_sat(buf1a[0], r1);
3215*15dc779aSAndroid Build Coastguard Worker
3216*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(
3217*15dc779aSAndroid Build Coastguard Worker temp1, ixheaac_shl32_sat((ixheaac_mult32_shl(r1, cos_55)), 1));
3218*15dc779aSAndroid Build Coastguard Worker
3219*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_sub32_sat(r1, t);
3220*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, t);
3221*15dc779aSAndroid Build Coastguard Worker
3222*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(r4, r2), cos_51);
3223*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_add32_sat(
3224*15dc779aSAndroid Build Coastguard Worker t, ixheaac_shl32_sat(ixheaac_mult32_shl(r4, cos_52), 1));
3225*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_add32_sat(t, ixheaac_mult32_shl(r2, cos_53));
3226*15dc779aSAndroid Build Coastguard Worker
3227*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(buf1a[3], buf1a[9]);
3228*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_sub32_sat(buf1a[3], buf1a[9]);
3229*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_add32_sat(buf1a[5], buf1a[7]);
3230*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_sub32_sat(buf1a[5], buf1a[7]);
3231*15dc779aSAndroid Build Coastguard Worker
3232*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(s1, s3), cos_54);
3233*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, s3);
3234*15dc779aSAndroid Build Coastguard Worker
3235*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_add32_sat(buf1a[1], s1);
3236*15dc779aSAndroid Build Coastguard Worker
3237*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(
3238*15dc779aSAndroid Build Coastguard Worker temp2, ixheaac_shl32_sat((ixheaac_mult32_shl(s1, cos_55)), 1));
3239*15dc779aSAndroid Build Coastguard Worker
3240*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_sub32_sat(s1, t);
3241*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, t);
3242*15dc779aSAndroid Build Coastguard Worker
3243*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(s4, s2), cos_51);
3244*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_add32_sat(
3245*15dc779aSAndroid Build Coastguard Worker t, ixheaac_shl32_sat((ixheaac_mult32_shl(s4, cos_52)), 1));
3246*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(s2, cos_53)));
3247*15dc779aSAndroid Build Coastguard Worker
3248*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp1;
3249*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp2;
3250*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r1, s2);
3251*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s1, r2);
3252*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r3, s4);
3253*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s3, r4);
3254*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r3, s4);
3255*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s3, r4);
3256*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r1, s2);
3257*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s1, r2);
3258*15dc779aSAndroid Build Coastguard Worker buf1a = buf1;
3259*15dc779aSAndroid Build Coastguard Worker
3260*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[160];
3261*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[161];
3262*15dc779aSAndroid Build Coastguard Worker
3263*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[256];
3264*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[257];
3265*15dc779aSAndroid Build Coastguard Worker
3266*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[352];
3267*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[353];
3268*15dc779aSAndroid Build Coastguard Worker
3269*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[448];
3270*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[449];
3271*15dc779aSAndroid Build Coastguard Worker
3272*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[64];
3273*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[65];
3274*15dc779aSAndroid Build Coastguard Worker
3275*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(buf1a[2], buf1a[8]);
3276*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_sub32_sat(buf1a[2], buf1a[8]);
3277*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_add32_sat(buf1a[4], buf1a[6]);
3278*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_sub32_sat(buf1a[4], buf1a[6]);
3279*15dc779aSAndroid Build Coastguard Worker
3280*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(r1, r3), cos_54);
3281*15dc779aSAndroid Build Coastguard Worker
3282*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, r3);
3283*15dc779aSAndroid Build Coastguard Worker
3284*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_add32_sat(buf1a[0], r1);
3285*15dc779aSAndroid Build Coastguard Worker
3286*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(
3287*15dc779aSAndroid Build Coastguard Worker temp1, ixheaac_shl32_sat((ixheaac_mult32_shl(r1, cos_55)), 1));
3288*15dc779aSAndroid Build Coastguard Worker
3289*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_sub32_sat(r1, t);
3290*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, t);
3291*15dc779aSAndroid Build Coastguard Worker
3292*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(r4, r2), cos_51);
3293*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_add32_sat(
3294*15dc779aSAndroid Build Coastguard Worker t, ixheaac_shl32_sat(ixheaac_mult32_shl(r4, cos_52), 1));
3295*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_add32_sat(t, ixheaac_mult32_shl(r2, cos_53));
3296*15dc779aSAndroid Build Coastguard Worker
3297*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(buf1a[3], buf1a[9]);
3298*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_sub32_sat(buf1a[3], buf1a[9]);
3299*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_add32_sat(buf1a[5], buf1a[7]);
3300*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_sub32_sat(buf1a[5], buf1a[7]);
3301*15dc779aSAndroid Build Coastguard Worker
3302*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(s1, s3), cos_54);
3303*15dc779aSAndroid Build Coastguard Worker
3304*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, s3);
3305*15dc779aSAndroid Build Coastguard Worker
3306*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_add32_sat(buf1a[1], s1);
3307*15dc779aSAndroid Build Coastguard Worker
3308*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(
3309*15dc779aSAndroid Build Coastguard Worker temp2, ixheaac_shl32_sat((ixheaac_mult32_shl(s1, cos_55)), 1));
3310*15dc779aSAndroid Build Coastguard Worker
3311*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_sub32_sat(s1, t);
3312*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, t);
3313*15dc779aSAndroid Build Coastguard Worker
3314*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(s4, s2), cos_51);
3315*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_add32_sat(
3316*15dc779aSAndroid Build Coastguard Worker t, ixheaac_shl32_sat((ixheaac_mult32_shl(s4, cos_52)), 1));
3317*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(s2, cos_53)));
3318*15dc779aSAndroid Build Coastguard Worker
3319*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp1;
3320*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp2;
3321*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r1, s2);
3322*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s1, r2);
3323*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r3, s4);
3324*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s3, r4);
3325*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r3, s4);
3326*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s3, r4);
3327*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r1, s2);
3328*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s1, r2);
3329*15dc779aSAndroid Build Coastguard Worker buf1a = buf1;
3330*15dc779aSAndroid Build Coastguard Worker ;
3331*15dc779aSAndroid Build Coastguard Worker
3332*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[320];
3333*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[321];
3334*15dc779aSAndroid Build Coastguard Worker
3335*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[416];
3336*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[417];
3337*15dc779aSAndroid Build Coastguard Worker
3338*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[32];
3339*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[33];
3340*15dc779aSAndroid Build Coastguard Worker
3341*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[128];
3342*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[129];
3343*15dc779aSAndroid Build Coastguard Worker
3344*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[224];
3345*15dc779aSAndroid Build Coastguard Worker *buf1++ = inp[225];
3346*15dc779aSAndroid Build Coastguard Worker
3347*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(buf1a[2], buf1a[8]);
3348*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_sub32_sat(buf1a[2], buf1a[8]);
3349*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_add32_sat(buf1a[4], buf1a[6]);
3350*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_sub32_sat(buf1a[4], buf1a[6]);
3351*15dc779aSAndroid Build Coastguard Worker
3352*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(r1, r3), cos_54);
3353*15dc779aSAndroid Build Coastguard Worker
3354*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, r3);
3355*15dc779aSAndroid Build Coastguard Worker
3356*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_add32_sat(buf1a[0], r1);
3357*15dc779aSAndroid Build Coastguard Worker
3358*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(
3359*15dc779aSAndroid Build Coastguard Worker temp1, ixheaac_shl32_sat((ixheaac_mult32_shl(r1, cos_55)), 1));
3360*15dc779aSAndroid Build Coastguard Worker
3361*15dc779aSAndroid Build Coastguard Worker r3 = ixheaac_sub32_sat(r1, t);
3362*15dc779aSAndroid Build Coastguard Worker r1 = ixheaac_add32_sat(r1, t);
3363*15dc779aSAndroid Build Coastguard Worker
3364*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(r4, r2), cos_51);
3365*15dc779aSAndroid Build Coastguard Worker r4 = ixheaac_add32_sat(
3366*15dc779aSAndroid Build Coastguard Worker t, ixheaac_shl32_sat(ixheaac_mult32_shl(r4, cos_52), 1));
3367*15dc779aSAndroid Build Coastguard Worker r2 = ixheaac_add32_sat(t, ixheaac_mult32_shl(r2, cos_53));
3368*15dc779aSAndroid Build Coastguard Worker
3369*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(buf1a[3], buf1a[9]);
3370*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_sub32_sat(buf1a[3], buf1a[9]);
3371*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_add32_sat(buf1a[5], buf1a[7]);
3372*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_sub32_sat(buf1a[5], buf1a[7]);
3373*15dc779aSAndroid Build Coastguard Worker
3374*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_sub32_sat(s1, s3), cos_54);
3375*15dc779aSAndroid Build Coastguard Worker
3376*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, s3);
3377*15dc779aSAndroid Build Coastguard Worker
3378*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_add32_sat(buf1a[1], s1);
3379*15dc779aSAndroid Build Coastguard Worker
3380*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(
3381*15dc779aSAndroid Build Coastguard Worker temp2, ixheaac_shl32_sat((ixheaac_mult32_shl(s1, cos_55)), 1));
3382*15dc779aSAndroid Build Coastguard Worker
3383*15dc779aSAndroid Build Coastguard Worker s3 = ixheaac_sub32_sat(s1, t);
3384*15dc779aSAndroid Build Coastguard Worker s1 = ixheaac_add32_sat(s1, t);
3385*15dc779aSAndroid Build Coastguard Worker
3386*15dc779aSAndroid Build Coastguard Worker t = ixheaac_mult32_shl(ixheaac_add32_sat(s4, s2), cos_51);
3387*15dc779aSAndroid Build Coastguard Worker s4 = ixheaac_add32_sat(
3388*15dc779aSAndroid Build Coastguard Worker t, ixheaac_shl32_sat((ixheaac_mult32_shl(s4, cos_52)), 1));
3389*15dc779aSAndroid Build Coastguard Worker s2 = ixheaac_add32_sat(t, (ixheaac_mult32_shl(s2, cos_53)));
3390*15dc779aSAndroid Build Coastguard Worker
3391*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp1;
3392*15dc779aSAndroid Build Coastguard Worker *buf2++ = temp2;
3393*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r1, s2);
3394*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s1, r2);
3395*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r3, s4);
3396*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s3, r4);
3397*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(r3, s4);
3398*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(s3, r4);
3399*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_sub32_sat(r1, s2);
3400*15dc779aSAndroid Build Coastguard Worker *buf2++ = ixheaac_add32_sat(s1, r2);
3401*15dc779aSAndroid Build Coastguard Worker buf1a = buf1;
3402*15dc779aSAndroid Build Coastguard Worker ;
3403*15dc779aSAndroid Build Coastguard Worker }
3404*15dc779aSAndroid Build Coastguard Worker
3405*15dc779aSAndroid Build Coastguard Worker n = 0;
3406*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < FFT5; i++) {
3407*15dc779aSAndroid Build Coastguard Worker xr_0 = fft3outptr[0];
3408*15dc779aSAndroid Build Coastguard Worker xi_0 = fft3outptr[1];
3409*15dc779aSAndroid Build Coastguard Worker
3410*15dc779aSAndroid Build Coastguard Worker xr_1 = fft3outptr[10];
3411*15dc779aSAndroid Build Coastguard Worker xi_1 = fft3outptr[11];
3412*15dc779aSAndroid Build Coastguard Worker
3413*15dc779aSAndroid Build Coastguard Worker xr_2 = fft3outptr[20];
3414*15dc779aSAndroid Build Coastguard Worker xi_2 = fft3outptr[21];
3415*15dc779aSAndroid Build Coastguard Worker
3416*15dc779aSAndroid Build Coastguard Worker x01_real = ixheaac_add32_sat(xr_0, xr_1);
3417*15dc779aSAndroid Build Coastguard Worker x_01_imag = ixheaac_add32_sat(xi_0, xi_1);
3418*15dc779aSAndroid Build Coastguard Worker
3419*15dc779aSAndroid Build Coastguard Worker add_r = ixheaac_add32_sat(xr_1, xr_2);
3420*15dc779aSAndroid Build Coastguard Worker add_i = ixheaac_add32_sat(xi_1, xi_2);
3421*15dc779aSAndroid Build Coastguard Worker
3422*15dc779aSAndroid Build Coastguard Worker sub_r = ixheaac_sub32_sat(xr_1, xr_2);
3423*15dc779aSAndroid Build Coastguard Worker sub_i = ixheaac_sub32_sat(xi_1, xi_2);
3424*15dc779aSAndroid Build Coastguard Worker
3425*15dc779aSAndroid Build Coastguard Worker p1 = add_r >> 1;
3426*15dc779aSAndroid Build Coastguard Worker
3427*15dc779aSAndroid Build Coastguard Worker p2 = ixheaac_mult32_shl(sub_i, sinmu);
3428*15dc779aSAndroid Build Coastguard Worker p3 = ixheaac_mult32_shl(sub_r, sinmu);
3429*15dc779aSAndroid Build Coastguard Worker
3430*15dc779aSAndroid Build Coastguard Worker p4 = add_i >> 1;
3431*15dc779aSAndroid Build Coastguard Worker
3432*15dc779aSAndroid Build Coastguard Worker temp = ixheaac_sub32_sat(xr_0, p1);
3433*15dc779aSAndroid Build Coastguard Worker temp1 = ixheaac_add32_sat(xi_0, p3);
3434*15dc779aSAndroid Build Coastguard Worker temp2 = ixheaac_sub32_sat(xi_0, p3);
3435*15dc779aSAndroid Build Coastguard Worker
3436*15dc779aSAndroid Build Coastguard Worker idx = re_arr_tab_sml_240_ptr[n++] << 1;
3437*15dc779aSAndroid Build Coastguard Worker op[idx] = ixheaac_add32_sat(x01_real, xr_2);
3438*15dc779aSAndroid Build Coastguard Worker op[idx + 1] = ixheaac_add32_sat(x_01_imag, xi_2);
3439*15dc779aSAndroid Build Coastguard Worker
3440*15dc779aSAndroid Build Coastguard Worker idx = re_arr_tab_sml_240_ptr[n++] << 1;
3441*15dc779aSAndroid Build Coastguard Worker op[idx] = ixheaac_add32_sat(temp, p2);
3442*15dc779aSAndroid Build Coastguard Worker op[idx + 1] = ixheaac_sub32_sat(temp2, p4);
3443*15dc779aSAndroid Build Coastguard Worker
3444*15dc779aSAndroid Build Coastguard Worker idx = re_arr_tab_sml_240_ptr[n++] << 1;
3445*15dc779aSAndroid Build Coastguard Worker op[idx] = ixheaac_sub32_sat(temp, p2);
3446*15dc779aSAndroid Build Coastguard Worker op[idx + 1] = ixheaac_sub32_sat(temp1, p4);
3447*15dc779aSAndroid Build Coastguard Worker fft3outptr += 2;
3448*15dc779aSAndroid Build Coastguard Worker }
3449*15dc779aSAndroid Build Coastguard Worker }