1 /******************************************************************************
2  *
3  *  Copyright (C) 1999-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  This file contains the code that performs Analysis of the input audio
22  *  stream.
23  *
24  ******************************************************************************/
25 #include <string.h>
26 #include "sbc_enc_func_declare.h"
27 #include "sbc_encoder.h"
28 /*#include <math.h>*/
29 
30 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
31 #define WIND_4_SUBBANDS_0_1                                              \
32   (int32_t)0x01659F45 /* gas32CoeffFor4SBs[8] = -gas32CoeffFor4SBs[32] = \
33                          0x01659F45 */
34 #define WIND_4_SUBBANDS_0_2                                               \
35   (int32_t)0x115B1ED2 /* gas32CoeffFor4SBs[16] = -gas32CoeffFor4SBs[24] = \
36                          0x115B1ED2 */
37 #define WIND_4_SUBBANDS_1_0 \
38   (int32_t)0x001194E6 /* gas32CoeffFor4SBs[1 et 39] = 0x001194E6 */
39 #define WIND_4_SUBBANDS_1_1 \
40   (int32_t)0x029DBAA3 /* gas32CoeffFor4SBs[9 et 31] = 0x029DBAA3 */
41 #define WIND_4_SUBBANDS_1_2 \
42   (int32_t)0x18F55C90 /* gas32CoeffFor4SBs[17 et 23] = 0x18F55C90 */
43 #define WIND_4_SUBBANDS_1_3 \
44   (int32_t)0xF60FAF37 /* gas32CoeffFor4SBs[15 et 25] = 0xF60FAF37 */
45 #define WIND_4_SUBBANDS_1_4 \
46   (int32_t)0xFF9BB9D5 /* gas32CoeffFor4SBs[7 et 33] = 0xFF9BB9D5 */
47 #define WIND_4_SUBBANDS_2_0 \
48   (int32_t)0x0030E2D3 /* gas32CoeffFor4SBs[2 et 38] = 0x0030E2D3 */
49 #define WIND_4_SUBBANDS_2_1 \
50   (int32_t)0x03B23341 /* gas32CoeffFor4SBs[10 et 30] = 0x03B23341 */
51 #define WIND_4_SUBBANDS_2_2 \
52   (int32_t)0x1F91CA46 /* gas32CoeffFor4SBs[18 et 22] = 0x1F91CA46 */
53 #define WIND_4_SUBBANDS_2_3 \
54   (int32_t)0xFC4F91D4 /* gas32CoeffFor4SBs[14 et 26] = 0xFC4F91D4 */
55 #define WIND_4_SUBBANDS_2_4 \
56   (int32_t)0x003D239B /* gas32CoeffFor4SBs[6 et 34] = 0x003D239B */
57 #define WIND_4_SUBBANDS_3_0 \
58   (int32_t)0x00599403 /* gas32CoeffFor4SBs[3 et 37] = 0x00599403 */
59 #define WIND_4_SUBBANDS_3_1 \
60   (int32_t)0x041EEE40 /* gas32CoeffFor4SBs[11 et 29] = 0x041EEE40 */
61 #define WIND_4_SUBBANDS_3_2 \
62   (int32_t)0x2412F251 /* gas32CoeffFor4SBs[19 et 21] = 0x2412F251 */
63 #define WIND_4_SUBBANDS_3_3 \
64   (int32_t)0x00C8F2BC /* gas32CoeffFor4SBs[13 et 27] = 0x00C8F2BC */
65 #define WIND_4_SUBBANDS_3_4 \
66   (int32_t)0x007F88E4 /* gas32CoeffFor4SBs[5 et 35] = 0x007F88E4 */
67 #define WIND_4_SUBBANDS_4_0 \
68   (int32_t)0x007DBCC8 /* gas32CoeffFor4SBs[4 et 36] = 0x007DBCC8 */
69 #define WIND_4_SUBBANDS_4_1 \
70   (int32_t)0x034FEE2C /* gas32CoeffFor4SBs[12 et 28] = 0x034FEE2C */
71 #define WIND_4_SUBBANDS_4_2 \
72   (int32_t)0x25AC1FF2 /* gas32CoeffFor4SBs[20] = 0x25AC1FF2 */
73 
74 #define WIND_8_SUBBANDS_0_1 (int32_t)0x00B97348 /* 16 0x00B97348 */
75 #define WIND_8_SUBBANDS_0_2 (int32_t)0x08B4307A /* 32 0x08B4307A */
76 #define WIND_8_SUBBANDS_1_0 (int32_t)0x00052173 /* 1 et 79 = 0x00052173 */
77 #define WIND_8_SUBBANDS_1_1 (int32_t)0x01071B96 /* 17 et 63 = 0x01071B96 */
78 #define WIND_8_SUBBANDS_1_2 (int32_t)0x0A9F3E9A /* 33 et 47 = 0x0A9F3E9A*/
79 #define WIND_8_SUBBANDS_1_3 (int32_t)0xF9312891 /* 31 et 49 = 0xF9312891 */
80 #define WIND_8_SUBBANDS_1_4 (int32_t)0xFF8D6793 /* 15 et 65 = 0xFF8D6793 */
81 #define WIND_8_SUBBANDS_2_0 (int32_t)0x000B3F71 /* 2 et 78 = 0x000B3F71 */
82 #define WIND_8_SUBBANDS_2_1 (int32_t)0x0156B3CA /* 18 et 62 = 0x0156B3CA */
83 #define WIND_8_SUBBANDS_2_2 (int32_t)0x0C7D59B6 /* 34 et 46 = 0x0C7D59B6 */
84 #define WIND_8_SUBBANDS_2_3 (int32_t)0xFAFF95FC /* 30 et 50 = 0xFAFF95FC */
85 #define WIND_8_SUBBANDS_2_4 (int32_t)0xFFC9F10E /* 14 et 66 = 0xFFC9F10E */
86 #define WIND_8_SUBBANDS_3_0 (int32_t)0x00122C7D /* 3 et 77 = 0x00122C7D*/
87 #define WIND_8_SUBBANDS_3_1 (int32_t)0x01A1B38B /* 19 et 61 = 0x01A1B38B */
88 #define WIND_8_SUBBANDS_3_2 (int32_t)0x0E3BB16F /* 35 et 45 = 0x0E3BB16F */
89 #define WIND_8_SUBBANDS_3_3 (int32_t)0xFCA86E7E /* 29 et 51 = 0xFCA86E7E */
90 #define WIND_8_SUBBANDS_3_4 (int32_t)0xFFFA2413 /* 13 et 67 = 0xFFFA2413 */
91 #define WIND_8_SUBBANDS_4_0 (int32_t)0x001AFF89 /* 4 et 66 = 0x001AFF89 */
92 #define WIND_8_SUBBANDS_4_1 (int32_t)0x01E0224C /* 20 et 60 = 0x01E0224C */
93 #define WIND_8_SUBBANDS_4_2 (int32_t)0x0FC721F9 /* 36 et 44 = 0x0FC721F9 */
94 #define WIND_8_SUBBANDS_4_3 (int32_t)0xFE20435D /* 28 et 52 = 0xFE20435D */
95 #define WIND_8_SUBBANDS_4_4 (int32_t)0x001D8FD2 /* 12 et 68 = 0x001D8FD2 */
96 #define WIND_8_SUBBANDS_5_0 (int32_t)0x00255A62 /* 5 et 75 = 0x00255A62 */
97 #define WIND_8_SUBBANDS_5_1 (int32_t)0x0209291F /* 21 et 59 = 0x0209291F */
98 #define WIND_8_SUBBANDS_5_2 (int32_t)0x110ECEF0 /* 37 et 43 = 0x110ECEF0 */
99 #define WIND_8_SUBBANDS_5_3 (int32_t)0xFF5EEB73 /* 27 et  53 = 0xFF5EEB73 */
100 #define WIND_8_SUBBANDS_5_4 (int32_t)0x0034F8B6 /* 11 et 69 = 0x0034F8B6 */
101 #define WIND_8_SUBBANDS_6_0 (int32_t)0x003060F4 /* 6 et 74 = 0x003060F4 */
102 #define WIND_8_SUBBANDS_6_1 (int32_t)0x02138653 /* 22 et 58 = 0x02138653 */
103 #define WIND_8_SUBBANDS_6_2 (int32_t)0x120435FA /* 38 et 42 = 0x120435FA */
104 #define WIND_8_SUBBANDS_6_3 (int32_t)0x005FD0FF /* 26 et 54 = 0x005FD0FF */
105 #define WIND_8_SUBBANDS_6_4 (int32_t)0x00415B75 /* 10 et 70 = 0x00415B75 */
106 #define WIND_8_SUBBANDS_7_0 (int32_t)0x003A72E7 /* 7 et 73 = 0x003A72E7 */
107 #define WIND_8_SUBBANDS_7_1 (int32_t)0x01F5F424 /* 23 et 57 = 0x01F5F424 */
108 #define WIND_8_SUBBANDS_7_2 (int32_t)0x129C226F /* 39 et 41 = 0x129C226F */
109 #define WIND_8_SUBBANDS_7_3 (int32_t)0x01223EBA /* 25 et 55 = 0x01223EBA */
110 #define WIND_8_SUBBANDS_7_4 (int32_t)0x0044EF48 /* 9 et 71 = 0x0044EF48 */
111 #define WIND_8_SUBBANDS_8_0 (int32_t)0x0041EC6A /* 8 et 72 = 0x0041EC6A */
112 #define WIND_8_SUBBANDS_8_1 (int32_t)0x01A7ECEF /* 24 et 56 = 0x01A7ECEF */
113 #define WIND_8_SUBBANDS_8_2 (int32_t)0x12CF6C75 /* 40 = 0x12CF6C75 */
114 #else
115 #define WIND_4_SUBBANDS_0_1                                          \
116   (int16_t)0x0166 /* gas32CoeffFor4SBs[8] = -gas32CoeffFor4SBs[32] = \
117                      0x01659F45 */
118 #define WIND_4_SUBBANDS_0_2                                           \
119   (int16_t)0x115B /* gas32CoeffFor4SBs[16] = -gas32CoeffFor4SBs[24] = \
120                      0x115B1ED2 */
121 #define WIND_4_SUBBANDS_1_0 \
122   (int16_t)0x0012 /* gas32CoeffFor4SBs[1 et 39] = 0x001194E6 */
123 #define WIND_4_SUBBANDS_1_1 \
124   (int16_t)0x029E /* gas32CoeffFor4SBs[9 et 31] = 0x029DBAA3 */
125 #define WIND_4_SUBBANDS_1_2 \
126   (int16_t)0x18F5 /* gas32CoeffFor4SBs[17 et 23] = 0x18F55C90 */
127 #define WIND_4_SUBBANDS_1_3 \
128   (int16_t)0xF610 /* gas32CoeffFor4SBs[15 et 25] = 0xF60FAF37 */
129 #define WIND_4_SUBBANDS_1_4 \
130   (int16_t)0xFF9C /* gas32CoeffFor4SBs[7 et 33] = 0xFF9BB9D5 */
131 #define WIND_4_SUBBANDS_2_0 \
132   (int16_t)0x0031 /* gas32CoeffFor4SBs[2 et 38] = 0x0030E2D3 */
133 #define WIND_4_SUBBANDS_2_1 \
134   (int16_t)0x03B2 /* gas32CoeffFor4SBs[10 et 30] = 0x03B23341 */
135 #define WIND_4_SUBBANDS_2_2 \
136   (int16_t)0x1F91 /* gas32CoeffFor4SBs[18 et 22] = 0x1F91CA46 */
137 #define WIND_4_SUBBANDS_2_3 \
138   (int16_t)0xFC50 /* gas32CoeffFor4SBs[14 et 26] = 0xFC4F91D4 */
139 #define WIND_4_SUBBANDS_2_4 \
140   (int16_t)0x003D /* gas32CoeffFor4SBs[6 et 34] = 0x003D239B */
141 #define WIND_4_SUBBANDS_3_0 \
142   (int16_t)0x005A /* gas32CoeffFor4SBs[3 et 37] = 0x00599403 */
143 #define WIND_4_SUBBANDS_3_1 \
144   (int16_t)0x041F /* gas32CoeffFor4SBs[11 et 29] = 0x041EEE40 */
145 #define WIND_4_SUBBANDS_3_2 \
146   (int16_t)0x2413 /* gas32CoeffFor4SBs[19 et 21] = 0x2412F251 */
147 #define WIND_4_SUBBANDS_3_3 \
148   (int16_t)0x00C9 /* gas32CoeffFor4SBs[13 et 27] = 0x00C8F2BC */
149 #define WIND_4_SUBBANDS_3_4 \
150   (int16_t)0x0080 /* gas32CoeffFor4SBs[5 et 35] = 0x007F88E4 */
151 #define WIND_4_SUBBANDS_4_0 \
152   (int16_t)0x007E /* gas32CoeffFor4SBs[4 et 36] = 0x007DBCC8 */
153 #define WIND_4_SUBBANDS_4_1 \
154   (int16_t)0x0350 /* gas32CoeffFor4SBs[12 et 28] = 0x034FEE2C */
155 #define WIND_4_SUBBANDS_4_2 \
156   (int16_t)0x25AC /* gas32CoeffFor4SBs[20] = 25AC1FF2 */
157 
158 #define WIND_8_SUBBANDS_0_1 (int16_t)0x00B9 /* 16 0x12CF6C75 */
159 #define WIND_8_SUBBANDS_0_2 (int16_t)0x08B4 /* 32 0x08B4307A */
160 #define WIND_8_SUBBANDS_1_0 (int16_t)0x0005 /* 1 et 79 = 0x00052173 */
161 #define WIND_8_SUBBANDS_1_1 (int16_t)0x0107 /* 17 et 63 = 0x01071B96 */
162 #define WIND_8_SUBBANDS_1_2 (int16_t)0x0A9F /* 33 et 47 = 0x0A9F3E9A*/
163 #define WIND_8_SUBBANDS_1_3 (int16_t)0xF931 /* 31 et 49 = 0xF9312891 */
164 #define WIND_8_SUBBANDS_1_4 (int16_t)0xFF8D /* 15 et 65 = 0xFF8D6793 */
165 #define WIND_8_SUBBANDS_2_0 (int16_t)0x000B /* 2 et 78 = 0x000B3F71 */
166 #define WIND_8_SUBBANDS_2_1 (int16_t)0x0157 /* 18 et 62 = 0x0156B3CA */
167 #define WIND_8_SUBBANDS_2_2 (int16_t)0x0C7D /* 34 et 46 = 0x0C7D59B6 */
168 #define WIND_8_SUBBANDS_2_3 (int16_t)0xFB00 /* 30 et 50 = 0xFAFF95FC */
169 #define WIND_8_SUBBANDS_2_4 (int16_t)0xFFCA /* 14 et 66 = 0xFFC9F10E */
170 #define WIND_8_SUBBANDS_3_0 (int16_t)0x0012 /* 3 et 77 = 0x00122C7D*/
171 #define WIND_8_SUBBANDS_3_1 (int16_t)0x01A2 /* 19 et 61 = 0x01A1B38B */
172 #define WIND_8_SUBBANDS_3_2 (int16_t)0x0E3C /* 35 et 45 = 0x0E3BB16F */
173 #define WIND_8_SUBBANDS_3_3 (int16_t)0xFCA8 /* 29 et 51 = 0xFCA86E7E */
174 #define WIND_8_SUBBANDS_3_4 (int16_t)0xFFFA /* 13 et 67 = 0xFFFA2413 */
175 #define WIND_8_SUBBANDS_4_0 (int16_t)0x001B /* 4 et 66 = 0x001AFF89 */
176 #define WIND_8_SUBBANDS_4_1 (int16_t)0x01E0 /* 20 et 60 = 0x01E0224C */
177 #define WIND_8_SUBBANDS_4_2 (int16_t)0x0FC7 /* 36 et 44 = 0x0FC721F9 */
178 #define WIND_8_SUBBANDS_4_3 (int16_t)0xFE20 /* 28 et 52 = 0xFE20435D */
179 #define WIND_8_SUBBANDS_4_4 (int16_t)0x001E /* 12 et 68 = 0x001D8FD2 */
180 #define WIND_8_SUBBANDS_5_0 (int16_t)0x0025 /* 5 et 75 = 0x00255A62 */
181 #define WIND_8_SUBBANDS_5_1 (int16_t)0x0209 /* 21 et 59 = 0x0209291F */
182 #define WIND_8_SUBBANDS_5_2 (int16_t)0x110F /* 37 et 43 = 0x110ECEF0 */
183 #define WIND_8_SUBBANDS_5_3 (int16_t)0xFF5F /* 27 et  53 = 0xFF5EEB73 */
184 #define WIND_8_SUBBANDS_5_4 (int16_t)0x0035 /* 11 et 69 = 0x0034F8B6 */
185 #define WIND_8_SUBBANDS_6_0 (int16_t)0x0030 /* 6 et 74 = 0x003060F4 */
186 #define WIND_8_SUBBANDS_6_1 (int16_t)0x0214 /* 22 et 58 = 0x02138653 */
187 #define WIND_8_SUBBANDS_6_2 (int16_t)0x1204 /* 38 et 42 = 0x120435FA */
188 #define WIND_8_SUBBANDS_6_3 (int16_t)0x0060 /* 26 et 54 = 0x005FD0FF */
189 #define WIND_8_SUBBANDS_6_4 (int16_t)0x0041 /* 10 et 70 = 0x00415B75 */
190 #define WIND_8_SUBBANDS_7_0 (int16_t)0x003A /* 7 et 73 = 0x003A72E7 */
191 #define WIND_8_SUBBANDS_7_1 (int16_t)0x01F6 /* 23 et 57 = 0x01F5F424 */
192 #define WIND_8_SUBBANDS_7_2 (int16_t)0x129C /* 39 et 41 = 0x129C226F */
193 #define WIND_8_SUBBANDS_7_3 (int16_t)0x0122 /* 25 et 55 = 0x01223EBA */
194 #define WIND_8_SUBBANDS_7_4 (int16_t)0x0045 /* 9 et 71 = 0x0044EF48 */
195 #define WIND_8_SUBBANDS_8_0 (int16_t)0x0042 /* 8 et 72 = 0x0041EC6A */
196 #define WIND_8_SUBBANDS_8_1 (int16_t)0x01A8 /* 24 et 56 = 0x01A7ECEF */
197 #define WIND_8_SUBBANDS_8_2 (int16_t)0x12CF /* 40 = 0x12CF6C75 */
198 #endif
199 
200 #if (SBC_USE_ARM_PRAGMA == TRUE)
201 #pragma arm section zidata = "sbc_s32_analysis_section"
202 #endif
203 static int32_t s32DCTY[16] = {0};
204 static int32_t s32X[ENC_VX_BUFFER_SIZE / 2];
205 static int16_t* s16X =
206     (int16_t*)s32X; /* s16X must be 32 bits aligned cf  SHIFTUP_X8_2*/
207 #if (SBC_USE_ARM_PRAGMA == TRUE)
208 #pragma arm section zidata
209 #endif
210 
211 /* This macro is for 4 subbands */
212 #define SHIFTUP_X4                                      \
213   {                                                     \
214     ps32X = (int32_t*)(s16X + EncMaxShiftCounter + 38); \
215     for (i = 0; i < 9; i++) {                           \
216       *ps32X = *(ps32X - 2 - (ShiftCounter >> 1));      \
217       ps32X--;                                          \
218       *ps32X = *(ps32X - 2 - (ShiftCounter >> 1));      \
219       ps32X--;                                          \
220     }                                                   \
221   }
222 #define SHIFTUP_X4_2                                            \
223   {                                                             \
224     ps32X = (int32_t*)(s16X + EncMaxShiftCounter + 38);         \
225     ps32X2 = (int32_t*)(s16X + (EncMaxShiftCounter << 1) + 78); \
226     for (i = 0; i < 9; i++) {                                   \
227       *ps32X = *(ps32X - 2 - (ShiftCounter >> 1));              \
228       *(ps32X2) = *(ps32X2 - 2 - (ShiftCounter >> 1));          \
229       ps32X--;                                                  \
230       ps32X2--;                                                 \
231       *ps32X = *(ps32X - 2 - (ShiftCounter >> 1));              \
232       *(ps32X2) = *(ps32X2 - 2 - (ShiftCounter >> 1));          \
233       ps32X--;                                                  \
234       ps32X2--;                                                 \
235     }                                                           \
236   }
237 
238 /* This macro is for 8 subbands */
239 #define SHIFTUP_X8                                      \
240   {                                                     \
241     ps32X = (int32_t*)(s16X + EncMaxShiftCounter + 78); \
242     for (i = 0; i < 9; i++) {                           \
243       *ps32X = *(ps32X - 4 - (ShiftCounter >> 1));      \
244       ps32X--;                                          \
245       *ps32X = *(ps32X - 4 - (ShiftCounter >> 1));      \
246       ps32X--;                                          \
247       *ps32X = *(ps32X - 4 - (ShiftCounter >> 1));      \
248       ps32X--;                                          \
249       *ps32X = *(ps32X - 4 - (ShiftCounter >> 1));      \
250       ps32X--;                                          \
251     }                                                   \
252   }
253 #define SHIFTUP_X8_2                                             \
254   {                                                              \
255     ps32X = (int32_t*)(s16X + EncMaxShiftCounter + 78);          \
256     ps32X2 = (int32_t*)(s16X + (EncMaxShiftCounter << 1) + 158); \
257     for (i = 0; i < 9; i++) {                                    \
258       *ps32X = *(ps32X - 4 - (ShiftCounter >> 1));               \
259       *(ps32X2) = *(ps32X2 - 4 - (ShiftCounter >> 1));           \
260       ps32X--;                                                   \
261       ps32X2--;                                                  \
262       *ps32X = *(ps32X - 4 - (ShiftCounter >> 1));               \
263       *(ps32X2) = *(ps32X2 - 4 - (ShiftCounter >> 1));           \
264       ps32X--;                                                   \
265       ps32X2--;                                                  \
266       *ps32X = *(ps32X - 4 - (ShiftCounter >> 1));               \
267       *(ps32X2) = *(ps32X2 - 4 - (ShiftCounter >> 1));           \
268       ps32X--;                                                   \
269       ps32X2--;                                                  \
270       *ps32X = *(ps32X - 4 - (ShiftCounter >> 1));               \
271       *(ps32X2) = *(ps32X2 - 4 - (ShiftCounter >> 1));           \
272       ps32X--;                                                   \
273       ps32X2--;                                                  \
274     }                                                            \
275   }
276 
277 #if (SBC_ARM_ASM_OPT == TRUE)
278 #define WINDOW_ACCU_8_0                                                                                                                                                                                      \
279   {                                                                                                                                                                                                          \
280     __asm {\
281         MUL s32Hi,WIND_8_SUBBANDS_0_1,(s16X[ChOffset+16]-s16X[ChOffset+64]);\
282         MLA s32Hi,WIND_8_SUBBANDS_0_2,(s16X[ChOffset+32]-s16X[ChOffset+48]),s32Hi;\
283         MOV s32DCTY[0],s32Hi; \
284     }                                                                                                                                                                                                        \
285   }
286 #define WINDOW_ACCU_8_1_15                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \
287   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         \
288     __asm {\
289         MUL s32Hi,WIND_8_SUBBANDS_1_0,s16X[ChOffset+1];\
290         MUL s32Hi2,WIND_8_SUBBANDS_1_0,s16X[ChOffset+64+15];\
291         MLA s32Hi,WIND_8_SUBBANDS_1_1,s16X[ChOffset+16+1],s32Hi;\
292         MLA s32Hi2,WIND_8_SUBBANDS_1_1,s16X[ChOffset+48+15],s32Hi2;\
293         MLA s32Hi,WIND_8_SUBBANDS_1_2,s16X[ChOffset+32+1],s32Hi;\
294         MLA s32Hi2,WIND_8_SUBBANDS_1_2,s16X[ChOffset+32+15],s32Hi2;\
295         MLA s32Hi,WIND_8_SUBBANDS_1_3,s16X[ChOffset+48+1],s32Hi;\
296         MLA s32Hi2,WIND_8_SUBBANDS_1_3,s16X[ChOffset+16+15],s32Hi2;\
297         MLA s32Hi,WIND_8_SUBBANDS_1_4,s16X[ChOffset+64+1],s32Hi;\
298         MLA s32Hi2,WIND_8_SUBBANDS_1_4,s16X[ChOffset+15],s32Hi2;\
299         MOV s32DCTY[1],s32Hi;\
300         MOV s32DCTY[15],s32Hi2; \
301     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \
302   }
303 #define WINDOW_ACCU_8_2_14                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \
304   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         \
305     __asm {\
306         MUL s32Hi,WIND_8_SUBBANDS_2_0,s16X[ChOffset+2];\
307         MUL s32Hi2,WIND_8_SUBBANDS_2_0,s16X[ChOffset+64+14];\
308         MLA s32Hi,WIND_8_SUBBANDS_2_1,s16X[ChOffset+16+2],s32Hi;\
309         MLA s32Hi2,WIND_8_SUBBANDS_2_1,s16X[ChOffset+48+14],s32Hi2;\
310         MLA s32Hi,WIND_8_SUBBANDS_2_2,s16X[ChOffset+32+2],s32Hi;\
311         MLA s32Hi2,WIND_8_SUBBANDS_2_2,s16X[ChOffset+32+14],s32Hi2;\
312         MLA s32Hi,WIND_8_SUBBANDS_2_3,s16X[ChOffset+48+2],s32Hi;\
313         MLA s32Hi2,WIND_8_SUBBANDS_2_3,s16X[ChOffset+16+14],s32Hi2;\
314         MLA s32Hi,WIND_8_SUBBANDS_2_4,s16X[ChOffset+64+2],s32Hi;\
315         MLA s32Hi2,WIND_8_SUBBANDS_2_4,s16X[ChOffset+14],s32Hi2;\
316         MOV s32DCTY[2],s32Hi;\
317         MOV s32DCTY[14],s32Hi2; \
318     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \
319   }
320 #define WINDOW_ACCU_8_3_13                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \
321   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         \
322     __asm {\
323         MUL s32Hi,WIND_8_SUBBANDS_3_0,s16X[ChOffset+3];\
324         MUL s32Hi2,WIND_8_SUBBANDS_3_0,s16X[ChOffset+64+13];\
325         MLA s32Hi,WIND_8_SUBBANDS_3_1,s16X[ChOffset+16+3],s32Hi;\
326         MLA s32Hi2,WIND_8_SUBBANDS_3_1,s16X[ChOffset+48+13],s32Hi2;\
327         MLA s32Hi,WIND_8_SUBBANDS_3_2,s16X[ChOffset+32+3],s32Hi;\
328         MLA s32Hi2,WIND_8_SUBBANDS_3_2,s16X[ChOffset+32+13],s32Hi2;\
329         MLA s32Hi,WIND_8_SUBBANDS_3_3,s16X[ChOffset+48+3],s32Hi;\
330         MLA s32Hi2,WIND_8_SUBBANDS_3_3,s16X[ChOffset+16+13],s32Hi2;\
331         MLA s32Hi,WIND_8_SUBBANDS_3_4,s16X[ChOffset+64+3],s32Hi;\
332         MLA s32Hi2,WIND_8_SUBBANDS_3_4,s16X[ChOffset+13],s32Hi2;\
333         MOV s32DCTY[3],s32Hi;\
334         MOV s32DCTY[13],s32Hi2; \
335     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \
336   }
337 #define WINDOW_ACCU_8_4_12                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \
338   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         \
339     __asm {\
340         MUL s32Hi,WIND_8_SUBBANDS_4_0,s16X[ChOffset+4];\
341         MUL s32Hi2,WIND_8_SUBBANDS_4_0,s16X[ChOffset+64+12];\
342         MLA s32Hi,WIND_8_SUBBANDS_4_1,s16X[ChOffset+16+4],s32Hi;\
343         MLA s32Hi2,WIND_8_SUBBANDS_4_1,s16X[ChOffset+48+12],s32Hi2;\
344         MLA s32Hi,WIND_8_SUBBANDS_4_2,s16X[ChOffset+32+4],s32Hi;\
345         MLA s32Hi2,WIND_8_SUBBANDS_4_2,s16X[ChOffset+32+12],s32Hi2;\
346         MLA s32Hi,WIND_8_SUBBANDS_4_3,s16X[ChOffset+48+4],s32Hi;\
347         MLA s32Hi2,WIND_8_SUBBANDS_4_3,s16X[ChOffset+16+12],s32Hi2;\
348         MLA s32Hi,WIND_8_SUBBANDS_4_4,s16X[ChOffset+64+4],s32Hi;\
349         MLA s32Hi2,WIND_8_SUBBANDS_4_4,s16X[ChOffset+12],s32Hi2;\
350         MOV s32DCTY[4],s32Hi;\
351         MOV s32DCTY[12],s32Hi2; \
352     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \
353   }
354 #define WINDOW_ACCU_8_5_11                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \
355   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         \
356     __asm {\
357         MUL s32Hi,WIND_8_SUBBANDS_5_0,s16X[ChOffset+5];\
358         MUL s32Hi2,WIND_8_SUBBANDS_5_0,s16X[ChOffset+64+11];\
359         MLA s32Hi,WIND_8_SUBBANDS_5_1,s16X[ChOffset+16+5],s32Hi;\
360         MLA s32Hi2,WIND_8_SUBBANDS_5_1,s16X[ChOffset+48+11],s32Hi2;\
361         MLA s32Hi,WIND_8_SUBBANDS_5_2,s16X[ChOffset+32+5],s32Hi;\
362         MLA s32Hi2,WIND_8_SUBBANDS_5_2,s16X[ChOffset+32+11],s32Hi2;\
363         MLA s32Hi,WIND_8_SUBBANDS_5_3,s16X[ChOffset+48+5],s32Hi;\
364         MLA s32Hi2,WIND_8_SUBBANDS_5_3,s16X[ChOffset+16+11],s32Hi2;\
365         MLA s32Hi,WIND_8_SUBBANDS_5_4,s16X[ChOffset+64+5],s32Hi;\
366         MLA s32Hi2,WIND_8_SUBBANDS_5_4,s16X[ChOffset+11],s32Hi2;\
367         MOV s32DCTY[5],s32Hi;\
368         MOV s32DCTY[11],s32Hi2; \
369     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \
370   }
371 #define WINDOW_ACCU_8_6_10                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \
372   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         \
373     __asm {\
374         MUL s32Hi,WIND_8_SUBBANDS_6_0,s16X[ChOffset+6];\
375         MUL s32Hi2,WIND_8_SUBBANDS_6_0,s16X[ChOffset+64+10];\
376         MLA s32Hi,WIND_8_SUBBANDS_6_1,s16X[ChOffset+16+6],s32Hi;\
377         MLA s32Hi2,WIND_8_SUBBANDS_6_1,s16X[ChOffset+48+10],s32Hi2;\
378         MLA s32Hi,WIND_8_SUBBANDS_6_2,s16X[ChOffset+32+6],s32Hi;\
379         MLA s32Hi2,WIND_8_SUBBANDS_6_2,s16X[ChOffset+32+10],s32Hi2;\
380         MLA s32Hi,WIND_8_SUBBANDS_6_3,s16X[ChOffset+48+6],s32Hi;\
381         MLA s32Hi2,WIND_8_SUBBANDS_6_3,s16X[ChOffset+16+10],s32Hi2;\
382         MLA s32Hi,WIND_8_SUBBANDS_6_4,s16X[ChOffset+64+6],s32Hi;\
383         MLA s32Hi2,WIND_8_SUBBANDS_6_4,s16X[ChOffset+10],s32Hi2;\
384         MOV s32DCTY[6],s32Hi;\
385         MOV s32DCTY[10],s32Hi2; \
386     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \
387   }
388 #define WINDOW_ACCU_8_7_9                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             \
389   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   \
390     __asm {\
391         MUL s32Hi,WIND_8_SUBBANDS_7_0,s16X[ChOffset+7];\
392         MUL s32Hi2,WIND_8_SUBBANDS_7_0,s16X[ChOffset+64+9];\
393         MLA s32Hi,WIND_8_SUBBANDS_7_1,s16X[ChOffset+16+7],s32Hi;\
394         MLA s32Hi2,WIND_8_SUBBANDS_7_1,s16X[ChOffset+48+9],s32Hi2;\
395         MLA s32Hi,WIND_8_SUBBANDS_7_2,s16X[ChOffset+32+7],s32Hi;\
396         MLA s32Hi2,WIND_8_SUBBANDS_7_2,s16X[ChOffset+32+9],s32Hi2;\
397         MLA s32Hi,WIND_8_SUBBANDS_7_3,s16X[ChOffset+48+7],s32Hi;\
398         MLA s32Hi2,WIND_8_SUBBANDS_7_3,s16X[ChOffset+16+9],s32Hi2;\
399         MLA s32Hi,WIND_8_SUBBANDS_7_4,s16X[ChOffset+64+7],s32Hi;\
400         MLA s32Hi2,WIND_8_SUBBANDS_7_4,s16X[ChOffset+9],s32Hi2;\
401         MOV s32DCTY[7],s32Hi;\
402         MOV s32DCTY[9],s32Hi2; \
403     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 \
404   }
405 #define WINDOW_ACCU_8_8                                                                                                                                                                                                                                                             \
406   {                                                                                                                                                                                                                                                                                 \
407     __asm {\
408         MUL s32Hi,WIND_8_SUBBANDS_8_0,(s16X[ChOffset+8]+s16X[ChOffset+8+64]);\
409         MLA s32Hi,WIND_8_SUBBANDS_8_1,(s16X[ChOffset+8+16]+s16X[ChOffset+8+64]),s32Hi;\
410         MLA s32Hi,WIND_8_SUBBANDS_8_2,s16X[ChOffset+8+32],s32Hi;\
411         MOV s32DCTY[8],s32Hi; \
412     }                                                                                                                                                                                                                                                                               \
413   }
414 #define WINDOW_ACCU_4_0                                                                                                                                                                                     \
415   {                                                                                                                                                                                                         \
416     __asm {\
417         MUL s32Hi,WIND_4_SUBBANDS_0_1,(s16X[ChOffset+8]-s16X[ChOffset+32]);\
418         MLA s32Hi,WIND_4_SUBBANDS_0_2,(s16X[ChOffset+16]-s16X[ChOffset+24]),s32Hi;\
419         MOV s32DCTY[0],s32Hi; \
420     }                                                                                                                                                                                                       \
421   }
422 #define WINDOW_ACCU_4_1_7                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           \
423   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 \
424     __asm {\
425         MUL s32Hi,WIND_4_SUBBANDS_1_0,s16X[ChOffset+1];\
426         MUL s32Hi2,WIND_4_SUBBANDS_1_0,s16X[ChOffset+32+7];\
427         MLA s32Hi,WIND_4_SUBBANDS_1_1,s16X[ChOffset+8+1],s32Hi;\
428         MLA s32Hi2,WIND_4_SUBBANDS_1_1,s16X[ChOffset+24+7],s32Hi2;\
429         MLA s32Hi,WIND_4_SUBBANDS_1_2,s16X[ChOffset+16+1],s32Hi;\
430         MLA s32Hi2,WIND_4_SUBBANDS_1_2,s16X[ChOffset+16+7],s32Hi2;\
431         MLA s32Hi,WIND_4_SUBBANDS_1_3,s16X[ChOffset+24+1],s32Hi;\
432         MLA s32Hi2,WIND_4_SUBBANDS_1_3,s16X[ChOffset+8+7],s32Hi2;\
433         MLA s32Hi,WIND_4_SUBBANDS_1_4,s16X[ChOffset+32+1],s32Hi;\
434         MLA s32Hi2,WIND_4_SUBBANDS_1_4,s16X[ChOffset+7],s32Hi2;\
435         MOV s32DCTY[1],s32Hi;\
436         MOV s32DCTY[7],s32Hi2; \
437     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               \
438   }
439 #define WINDOW_ACCU_4_2_6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           \
440   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 \
441     __asm {\
442         MUL s32Hi,WIND_4_SUBBANDS_2_0,s16X[ChOffset+2];\
443         MUL s32Hi2,WIND_4_SUBBANDS_2_0,s16X[ChOffset+32+6];\
444         MLA s32Hi,WIND_4_SUBBANDS_2_1,s16X[ChOffset+8+2],s32Hi;\
445         MLA s32Hi2,WIND_4_SUBBANDS_2_1,s16X[ChOffset+24+6],s32Hi2;\
446         MLA s32Hi,WIND_4_SUBBANDS_2_2,s16X[ChOffset+16+2],s32Hi;\
447         MLA s32Hi2,WIND_4_SUBBANDS_2_2,s16X[ChOffset+16+6],s32Hi2;\
448         MLA s32Hi,WIND_4_SUBBANDS_2_3,s16X[ChOffset+24+2],s32Hi;\
449         MLA s32Hi2,WIND_4_SUBBANDS_2_3,s16X[ChOffset+8+6],s32Hi2;\
450         MLA s32Hi,WIND_4_SUBBANDS_2_4,s16X[ChOffset+32+2],s32Hi;\
451         MLA s32Hi2,WIND_4_SUBBANDS_2_4,s16X[ChOffset+6],s32Hi2;\
452         MOV s32DCTY[2],s32Hi;\
453         MOV s32DCTY[6],s32Hi2; \
454     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               \
455   }
456 #define WINDOW_ACCU_4_3_5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           \
457   {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 \
458     __asm {\
459         MUL s32Hi,WIND_4_SUBBANDS_3_0,s16X[ChOffset+3];\
460         MUL s32Hi2,WIND_4_SUBBANDS_3_0,s16X[ChOffset+32+5];\
461         MLA s32Hi,WIND_4_SUBBANDS_3_1,s16X[ChOffset+8+3],s32Hi;\
462         MLA s32Hi2,WIND_4_SUBBANDS_3_1,s16X[ChOffset+24+5],s32Hi2;\
463         MLA s32Hi,WIND_4_SUBBANDS_3_2,s16X[ChOffset+16+3],s32Hi;\
464         MLA s32Hi2,WIND_4_SUBBANDS_3_2,s16X[ChOffset+16+5],s32Hi2;\
465         MLA s32Hi,WIND_4_SUBBANDS_3_3,s16X[ChOffset+24+3],s32Hi;\
466         MLA s32Hi2,WIND_4_SUBBANDS_3_3,s16X[ChOffset+8+5],s32Hi2;\
467         MLA s32Hi,WIND_4_SUBBANDS_3_4,s16X[ChOffset+32+3],s32Hi;\
468         MLA s32Hi2,WIND_4_SUBBANDS_3_4,s16X[ChOffset+5],s32Hi2;\
469         MOV s32DCTY[3],s32Hi;\
470         MOV s32DCTY[5],s32Hi2; \
471     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               \
472   }
473 #define WINDOW_ACCU_4_4                                                                                                                                                                                                                                                            \
474   {                                                                                                                                                                                                                                                                                \
475     __asm {\
476         MUL s32Hi,WIND_4_SUBBANDS_4_0,(s16X[ChOffset+4]+s16X[ChOffset+4+32]);\
477         MLA s32Hi,WIND_4_SUBBANDS_4_1,(s16X[ChOffset+4+8]+s16X[ChOffset+4+24]),s32Hi;\
478         MLA s32Hi,WIND_4_SUBBANDS_4_2,s16X[ChOffset+4+16],s32Hi;\
479         MOV s32DCTY[4],s32Hi; \
480     }                                                                                                                                                                                                                                                                              \
481   }
482 
483 #define WINDOW_PARTIAL_4 \
484   {                      \
485     WINDOW_ACCU_4_0;     \
486     WINDOW_ACCU_4_1_7;   \
487     WINDOW_ACCU_4_2_6;   \
488     WINDOW_ACCU_4_3_5;   \
489     WINDOW_ACCU_4_4;     \
490   }
491 
492 #define WINDOW_PARTIAL_8 \
493   {                      \
494     WINDOW_ACCU_8_0;     \
495     WINDOW_ACCU_8_1_15;  \
496     WINDOW_ACCU_8_2_14;  \
497     WINDOW_ACCU_8_3_13;  \
498     WINDOW_ACCU_8_4_12;  \
499     WINDOW_ACCU_8_5_11;  \
500     WINDOW_ACCU_8_6_10;  \
501     WINDOW_ACCU_8_7_9;   \
502     WINDOW_ACCU_8_8;     \
503   }
504 
505 #else
506 #if (SBC_IPAQ_OPT == TRUE)
507 
508 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
509 #define WINDOW_ACCU_8_0                                              \
510   {                                                                  \
511     s64Temp = (int64_t)WIND_8_SUBBANDS_0_1 *                         \
512               (int64_t)(s16X[ChOffset + 16] - s16X[ChOffset + 64]);  \
513     s64Temp += (int64_t)WIND_8_SUBBANDS_0_2 *                        \
514                (int64_t)(s16X[ChOffset + 32] - s16X[ChOffset + 48]); \
515     s32DCTY[0] = (int32_t)(s64Temp >> 16);                           \
516   }
517 #define WINDOW_ACCU_8_1_15                                                   \
518   {                                                                          \
519     s64Temp = (int64_t)WIND_8_SUBBANDS_1_0 * (int64_t)s16X[ChOffset + 1];    \
520     s64Temp2 =                                                               \
521         (int64_t)WIND_8_SUBBANDS_1_0 * (int64_t)s16X[ChOffset + 64 + 15];    \
522     s64Temp +=                                                               \
523         (int64_t)WIND_8_SUBBANDS_1_1 * (int64_t)s16X[ChOffset + 16 + 1];     \
524     s64Temp2 +=                                                              \
525         (int64_t)WIND_8_SUBBANDS_1_1 * (int64_t)s16X[ChOffset + 48 + 15];    \
526     s64Temp +=                                                               \
527         (int64_t)WIND_8_SUBBANDS_1_2 * (int64_t)s16X[ChOffset + 32 + 1];     \
528     s64Temp2 +=                                                              \
529         (int64_t)WIND_8_SUBBANDS_1_2 * (int64_t)s16X[ChOffset + 32 + 15];    \
530     s64Temp +=                                                               \
531         (int64_t)WIND_8_SUBBANDS_1_3 * (int64_t)s16X[ChOffset + 48 + 1];     \
532     s64Temp2 +=                                                              \
533         (int64_t)WIND_8_SUBBANDS_1_3 * (int64_t)s16X[ChOffset + 16 + 15];    \
534     s64Temp +=                                                               \
535         (int64_t)WIND_8_SUBBANDS_1_4 * (int64_t)s16X[ChOffset + 64 + 1];     \
536     s64Temp2 += (int64_t)WIND_8_SUBBANDS_1_4 * (int64_t)s16X[ChOffset + 15]; \
537     s32DCTY[1] = (int32_t)(s64Temp >> 16);                                   \
538     s32DCTY[15] = (int32_t)(s64Temp2 >> 16);                                 \
539   }
540 #define WINDOW_ACCU_8_2_14                                                   \
541   {                                                                          \
542     s64Temp = (int64_t)WIND_8_SUBBANDS_2_0 * (int64_t)s16X[ChOffset + 2];    \
543     s64Temp2 =                                                               \
544         (int64_t)WIND_8_SUBBANDS_2_0 * (int64_t)s16X[ChOffset + 64 + 14];    \
545     s64Temp +=                                                               \
546         (int64_t)WIND_8_SUBBANDS_2_1 * (int64_t)s16X[ChOffset + 16 + 2];     \
547     s64Temp2 +=                                                              \
548         (int64_t)WIND_8_SUBBANDS_2_1 * (int64_t)s16X[ChOffset + 48 + 14];    \
549     s64Temp +=                                                               \
550         (int64_t)WIND_8_SUBBANDS_2_2 * (int64_t)s16X[ChOffset + 32 + 2];     \
551     s64Temp2 +=                                                              \
552         (int64_t)WIND_8_SUBBANDS_2_2 * (int64_t)s16X[ChOffset + 32 + 14];    \
553     s64Temp +=                                                               \
554         (int64_t)WIND_8_SUBBANDS_2_3 * (int64_t)s16X[ChOffset + 48 + 2];     \
555     s64Temp2 +=                                                              \
556         (int64_t)WIND_8_SUBBANDS_2_3 * (int64_t)s16X[ChOffset + 16 + 14];    \
557     s64Temp +=                                                               \
558         (int64_t)WIND_8_SUBBANDS_2_4 * (int64_t)s16X[ChOffset + 64 + 2];     \
559     s64Temp2 += (int64_t)WIND_8_SUBBANDS_2_4 * (int64_t)s16X[ChOffset + 14]; \
560     s32DCTY[2] = (int32_t)(s64Temp >> 16);                                   \
561     s32DCTY[14] = (int32_t)(s64Temp2 >> 16);                                 \
562   }
563 #define WINDOW_ACCU_8_3_13                                                   \
564   {                                                                          \
565     s64Temp = (int64_t)WIND_8_SUBBANDS_3_0 * (int64_t)s16X[ChOffset + 3];    \
566     s64Temp2 =                                                               \
567         (int64_t)WIND_8_SUBBANDS_3_0 * (int64_t)s16X[ChOffset + 64 + 13];    \
568     s64Temp +=                                                               \
569         (int64_t)WIND_8_SUBBANDS_3_1 * (int64_t)s16X[ChOffset + 16 + 3];     \
570     s64Temp2 +=                                                              \
571         (int64_t)WIND_8_SUBBANDS_3_1 * (int64_t)s16X[ChOffset + 48 + 13];    \
572     s64Temp +=                                                               \
573         (int64_t)WIND_8_SUBBANDS_3_2 * (int64_t)s16X[ChOffset + 32 + 3];     \
574     s64Temp2 +=                                                              \
575         (int64_t)WIND_8_SUBBANDS_3_2 * (int64_t)s16X[ChOffset + 32 + 13];    \
576     s64Temp +=                                                               \
577         (int64_t)WIND_8_SUBBANDS_3_3 * (int64_t)s16X[ChOffset + 48 + 3];     \
578     s64Temp2 +=                                                              \
579         (int64_t)WIND_8_SUBBANDS_3_3 * (int64_t)s16X[ChOffset + 16 + 13];    \
580     s64Temp +=                                                               \
581         (int64_t)WIND_8_SUBBANDS_3_4 * (int64_t)s16X[ChOffset + 64 + 3];     \
582     s64Temp2 += (int64_t)WIND_8_SUBBANDS_3_4 * (int64_t)s16X[ChOffset + 13]; \
583     s32DCTY[3] = (int32_t)(s64Temp >> 16);                                   \
584     s32DCTY[13] = (int32_t)(s64Temp2 >> 16);                                 \
585   }
586 #define WINDOW_ACCU_8_4_12                                                   \
587   {                                                                          \
588     s64Temp = (int64_t)WIND_8_SUBBANDS_4_0 * (int64_t)s16X[ChOffset + 4];    \
589     s64Temp2 =                                                               \
590         (int64_t)WIND_8_SUBBANDS_4_0 * (int64_t)s16X[ChOffset + 64 + 12];    \
591     s64Temp +=                                                               \
592         (int64_t)WIND_8_SUBBANDS_4_1 * (int64_t)s16X[ChOffset + 16 + 4];     \
593     s64Temp2 +=                                                              \
594         (int64_t)WIND_8_SUBBANDS_4_1 * (int64_t)s16X[ChOffset + 48 + 12];    \
595     s64Temp +=                                                               \
596         (int64_t)WIND_8_SUBBANDS_4_2 * (int64_t)s16X[ChOffset + 32 + 4];     \
597     s64Temp2 +=                                                              \
598         (int64_t)WIND_8_SUBBANDS_4_2 * (int64_t)s16X[ChOffset + 32 + 12];    \
599     s64Temp +=                                                               \
600         (int64_t)WIND_8_SUBBANDS_4_3 * (int64_t)s16X[ChOffset + 48 + 4];     \
601     s64Temp2 +=                                                              \
602         (int64_t)WIND_8_SUBBANDS_4_3 * (int64_t)s16X[ChOffset + 16 + 12];    \
603     s64Temp +=                                                               \
604         (int64_t)WIND_8_SUBBANDS_4_4 * (int64_t)s16X[ChOffset + 64 + 4];     \
605     s64Temp2 += (int64_t)WIND_8_SUBBANDS_4_4 * (int64_t)s16X[ChOffset + 12]; \
606     s32DCTY[4] = (int32_t)(s64Temp >> 16);                                   \
607     s32DCTY[12] = (int32_t)(s64Temp2 >> 16);                                 \
608   }
609 #define WINDOW_ACCU_8_5_11                                                   \
610   {                                                                          \
611     s64Temp = (int64_t)WIND_8_SUBBANDS_5_0 * (int64_t)s16X[ChOffset + 5];    \
612     s64Temp2 =                                                               \
613         (int64_t)WIND_8_SUBBANDS_5_0 * (int64_t)s16X[ChOffset + 64 + 11];    \
614     s64Temp +=                                                               \
615         (int64_t)WIND_8_SUBBANDS_5_1 * (int64_t)s16X[ChOffset + 16 + 5];     \
616     s64Temp2 +=                                                              \
617         (int64_t)WIND_8_SUBBANDS_5_1 * (int64_t)s16X[ChOffset + 48 + 11];    \
618     s64Temp +=                                                               \
619         (int64_t)WIND_8_SUBBANDS_5_2 * (int64_t)s16X[ChOffset + 32 + 5];     \
620     s64Temp2 +=                                                              \
621         (int64_t)WIND_8_SUBBANDS_5_2 * (int64_t)s16X[ChOffset + 32 + 11];    \
622     s64Temp +=                                                               \
623         (int64_t)WIND_8_SUBBANDS_5_3 * (int64_t)s16X[ChOffset + 48 + 5];     \
624     s64Temp2 +=                                                              \
625         (int64_t)WIND_8_SUBBANDS_5_3 * (int64_t)s16X[ChOffset + 16 + 11];    \
626     s64Temp +=                                                               \
627         (int64_t)WIND_8_SUBBANDS_5_4 * (int64_t)s16X[ChOffset + 64 + 5];     \
628     s64Temp2 += (int64_t)WIND_8_SUBBANDS_5_4 * (int64_t)s16X[ChOffset + 11]; \
629     s32DCTY[5] = (int32_t)(s64Temp >> 16);                                   \
630     s32DCTY[11] = (int32_t)(s64Temp2 >> 16);                                 \
631   }
632 #define WINDOW_ACCU_8_6_10                                                   \
633   {                                                                          \
634     s64Temp = (int64_t)WIND_8_SUBBANDS_6_0 * (int64_t)s16X[ChOffset + 6];    \
635     s64Temp2 =                                                               \
636         (int64_t)WIND_8_SUBBANDS_6_0 * (int64_t)s16X[ChOffset + 64 + 10];    \
637     s64Temp +=                                                               \
638         (int64_t)WIND_8_SUBBANDS_6_1 * (int64_t)s16X[ChOffset + 16 + 6];     \
639     s64Temp2 +=                                                              \
640         (int64_t)WIND_8_SUBBANDS_6_1 * (int64_t)s16X[ChOffset + 48 + 10];    \
641     s64Temp +=                                                               \
642         (int64_t)WIND_8_SUBBANDS_6_2 * (int64_t)s16X[ChOffset + 32 + 6];     \
643     s64Temp2 +=                                                              \
644         (int64_t)WIND_8_SUBBANDS_6_2 * (int64_t)s16X[ChOffset + 32 + 10];    \
645     s64Temp +=                                                               \
646         (int64_t)WIND_8_SUBBANDS_6_3 * (int64_t)s16X[ChOffset + 48 + 6];     \
647     s64Temp2 +=                                                              \
648         (int64_t)WIND_8_SUBBANDS_6_3 * (int64_t)s16X[ChOffset + 16 + 10];    \
649     s64Temp +=                                                               \
650         (int64_t)WIND_8_SUBBANDS_6_4 * (int64_t)s16X[ChOffset + 64 + 6];     \
651     s64Temp2 += (int64_t)WIND_8_SUBBANDS_6_4 * (int64_t)s16X[ChOffset + 10]; \
652     s32DCTY[6] = (int32_t)(s64Temp >> 16);                                   \
653     s32DCTY[10] = (int32_t)(s64Temp2 >> 16);                                 \
654   }
655 #define WINDOW_ACCU_8_7_9                                                   \
656   {                                                                         \
657     s64Temp = (int64_t)WIND_8_SUBBANDS_7_0 * (int64_t)s16X[ChOffset + 7];   \
658     s64Temp2 =                                                              \
659         (int64_t)WIND_8_SUBBANDS_7_0 * (int64_t)s16X[ChOffset + 64 + 9];    \
660     s64Temp +=                                                              \
661         (int64_t)WIND_8_SUBBANDS_7_1 * (int64_t)s16X[ChOffset + 16 + 7];    \
662     s64Temp2 +=                                                             \
663         (int64_t)WIND_8_SUBBANDS_7_1 * (int64_t)s16X[ChOffset + 48 + 9];    \
664     s64Temp +=                                                              \
665         (int64_t)WIND_8_SUBBANDS_7_2 * (int64_t)s16X[ChOffset + 32 + 7];    \
666     s64Temp2 +=                                                             \
667         (int64_t)WIND_8_SUBBANDS_7_2 * (int64_t)s16X[ChOffset + 32 + 9];    \
668     s64Temp +=                                                              \
669         (int64_t)WIND_8_SUBBANDS_7_3 * (int64_t)s16X[ChOffset + 48 + 7];    \
670     s64Temp2 +=                                                             \
671         (int64_t)WIND_8_SUBBANDS_7_3 * (int64_t)s16X[ChOffset + 16 + 9];    \
672     s64Temp +=                                                              \
673         (int64_t)WIND_8_SUBBANDS_7_4 * (int64_t)s16X[ChOffset + 64 + 7];    \
674     s64Temp2 += (int64_t)WIND_8_SUBBANDS_7_4 * (int64_t)s16X[ChOffset + 9]; \
675     s32DCTY[7] = (int32_t)(s64Temp >> 16);                                  \
676     s32DCTY[9] = (int32_t)(s64Temp2 >> 16);                                 \
677   }
678 #define WINDOW_ACCU_8_8                                                      \
679   {                                                                          \
680     s64Temp = (int64_t)WIND_8_SUBBANDS_8_0 *                                 \
681               (int64_t)(s16X[ChOffset + 8] + s16X[ChOffset + 64 + 8]);       \
682     s64Temp += (int64_t)WIND_8_SUBBANDS_8_1 *                                \
683                (int64_t)(s16X[ChOffset + 16 + 8] + s16X[ChOffset + 48 + 8]); \
684     s64Temp +=                                                               \
685         (int64_t)WIND_8_SUBBANDS_8_2 * (int64_t)s16X[ChOffset + 32 + 8];     \
686     s32DCTY[8] = (int32_t)(s64Temp >> 16);                                   \
687   }
688 #define WINDOW_ACCU_4_0                                              \
689   {                                                                  \
690     s64Temp = (int64_t)WIND_4_SUBBANDS_0_1 *                         \
691               (int64_t)(s16X[ChOffset + 8] - s16X[ChOffset + 32]);   \
692     s64Temp += (int64_t)WIND_4_SUBBANDS_0_2 *                        \
693                (int64_t)(s16X[ChOffset + 16] - s16X[ChOffset + 24]); \
694     s32DCTY[0] = (int32_t)(s64Temp >> 16);                           \
695   }
696 #define WINDOW_ACCU_4_1_7                                                      \
697   {                                                                            \
698     s64Temp = (int64_t)WIND_4_SUBBANDS_1_0 * (int64_t)s16X[ChOffset + 1];      \
699     s64Temp2 =                                                                 \
700         (int64_t)WIND_4_SUBBANDS_1_0 * (int64_t)s16X[ChOffset + 32 + 7];       \
701     s64Temp += (int64_t)WIND_4_SUBBANDS_1_1 * (int64_t)s16X[ChOffset + 8 + 1]; \
702     s64Temp2 +=                                                                \
703         (int64_t)WIND_4_SUBBANDS_1_1 * (int64_t)s16X[ChOffset + 24 + 7];       \
704     s64Temp +=                                                                 \
705         (int64_t)WIND_4_SUBBANDS_1_2 * (int64_t)s16X[ChOffset + 16 + 1];       \
706     s64Temp2 +=                                                                \
707         (int64_t)WIND_4_SUBBANDS_1_2 * (int64_t)s16X[ChOffset + 16 + 7];       \
708     s64Temp +=                                                                 \
709         (int64_t)WIND_4_SUBBANDS_1_3 * (int64_t)s16X[ChOffset + 24 + 1];       \
710     s64Temp2 +=                                                                \
711         (int64_t)WIND_4_SUBBANDS_1_3 * (int64_t)s16X[ChOffset + 8 + 7];        \
712     s64Temp +=                                                                 \
713         (int64_t)WIND_4_SUBBANDS_1_4 * (int64_t)s16X[ChOffset + 32 + 1];       \
714     s64Temp2 += (int64_t)WIND_4_SUBBANDS_1_4 * (int64_t)s16X[ChOffset + 7];    \
715     s32DCTY[1] = (int32_t)(s64Temp >> 16);                                     \
716     s32DCTY[7] = (int32_t)(s64Temp2 >> 16);                                    \
717   }
718 #define WINDOW_ACCU_4_2_6                                                      \
719   {                                                                            \
720     s64Temp = (int64_t)WIND_4_SUBBANDS_2_0 * (int64_t)s16X[ChOffset + 2];      \
721     s64Temp2 =                                                                 \
722         (int64_t)WIND_4_SUBBANDS_2_0 * (int64_t)s16X[ChOffset + 32 + 6];       \
723     s64Temp += (int64_t)WIND_4_SUBBANDS_2_1 * (int64_t)s16X[ChOffset + 8 + 2]; \
724     s64Temp2 +=                                                                \
725         (int64_t)WIND_4_SUBBANDS_2_1 * (int64_t)s16X[ChOffset + 24 + 6];       \
726     s64Temp +=                                                                 \
727         (int64_t)WIND_4_SUBBANDS_2_2 * (int64_t)s16X[ChOffset + 16 + 2];       \
728     s64Temp2 +=                                                                \
729         (int64_t)WIND_4_SUBBANDS_2_2 * (int64_t)s16X[ChOffset + 16 + 6];       \
730     s64Temp +=                                                                 \
731         (int64_t)WIND_4_SUBBANDS_2_3 * (int64_t)s16X[ChOffset + 24 + 2];       \
732     s64Temp2 +=                                                                \
733         (int64_t)WIND_4_SUBBANDS_2_3 * (int64_t)s16X[ChOffset + 8 + 6];        \
734     s64Temp +=                                                                 \
735         (int64_t)WIND_4_SUBBANDS_2_4 * (int64_t)s16X[ChOffset + 32 + 2];       \
736     s64Temp2 += (int64_t)WIND_4_SUBBANDS_2_4 * (int64_t)s16X[ChOffset + 6];    \
737     s32DCTY[2] = (int32_t)(s64Temp >> 16);                                     \
738     s32DCTY[6] = (int32_t)(s64Temp2 >> 16);                                    \
739   }
740 #define WINDOW_ACCU_4_3_5                                                      \
741   {                                                                            \
742     s64Temp = (int64_t)WIND_4_SUBBANDS_3_0 * (int64_t)s16X[ChOffset + 3];      \
743     s64Temp2 =                                                                 \
744         (int64_t)WIND_4_SUBBANDS_3_0 * (int64_t)s16X[ChOffset + 32 + 5];       \
745     s64Temp += (int64_t)WIND_4_SUBBANDS_3_1 * (int64_t)s16X[ChOffset + 8 + 3]; \
746     s64Temp2 +=                                                                \
747         (int64_t)WIND_4_SUBBANDS_3_1 * (int64_t)s16X[ChOffset + 24 + 5];       \
748     s64Temp +=                                                                 \
749         (int64_t)WIND_4_SUBBANDS_3_2 * (int64_t)s16X[ChOffset + 16 + 3];       \
750     s64Temp2 +=                                                                \
751         (int64_t)WIND_4_SUBBANDS_3_2 * (int64_t)s16X[ChOffset + 16 + 5];       \
752     s64Temp +=                                                                 \
753         (int64_t)WIND_4_SUBBANDS_3_3 * (int64_t)s16X[ChOffset + 24 + 3];       \
754     s64Temp2 +=                                                                \
755         (int64_t)WIND_4_SUBBANDS_3_3 * (int64_t)s16X[ChOffset + 8 + 5];        \
756     s64Temp +=                                                                 \
757         (int64_t)WIND_4_SUBBANDS_3_4 * (int64_t)s16X[ChOffset + 32 + 3];       \
758     s64Temp2 += (int64_t)WIND_4_SUBBANDS_3_4 * (int64_t)s16X[ChOffset + 5];    \
759     s32DCTY[3] = (int32_t)(s64Temp >> 16);                                     \
760     s32DCTY[5] = (int32_t)(s64Temp2 >> 16);                                    \
761   }
762 
763 #define WINDOW_ACCU_4_4                                                     \
764   {                                                                         \
765     s64Temp = (int64_t)WIND_4_SUBBANDS_4_0 *                                \
766               (int64_t)(s16X[ChOffset + 4] + s16X[ChOffset + 4 + 32]);      \
767     s64Temp += (int64_t)WIND_4_SUBBANDS_4_1 *                               \
768                (int64_t)(s16X[ChOffset + 4 + 8] + s16X[ChOffset + 4 + 24]); \
769     s64Temp +=                                                              \
770         (int64_t)WIND_4_SUBBANDS_4_2 * (int64_t)s16X[ChOffset + 4 + 16];    \
771     s32DCTY[4] = (int32_t)(s64Temp >> 16);                                  \
772   }
773 #else /* SBC_IS_64_MULT_IN_WINDOW_ACCU == FALSE */
774 #define WINDOW_ACCU_8_0                                              \
775   {                                                                  \
776     s32Temp = (int32_t)WIND_8_SUBBANDS_0_1 *                         \
777               (int32_t)(s16X[ChOffset + 16] - s16X[ChOffset + 64]);  \
778     s32Temp += (int32_t)WIND_8_SUBBANDS_0_2 *                        \
779                (int32_t)(s16X[ChOffset + 32] - s16X[ChOffset + 48]); \
780     s32DCTY[0] = (int32_t)s32Temp;                                   \
781   }
782 #define WINDOW_ACCU_8_1_15                                                   \
783   {                                                                          \
784     s32Temp = (int32_t)WIND_8_SUBBANDS_1_0 * (int32_t)s16X[ChOffset + 1];    \
785     s32Temp2 =                                                               \
786         (int32_t)WIND_8_SUBBANDS_1_0 * (int32_t)s16X[ChOffset + 64 + 15];    \
787     s32Temp +=                                                               \
788         (int32_t)WIND_8_SUBBANDS_1_1 * (int32_t)s16X[ChOffset + 16 + 1];     \
789     s32Temp2 +=                                                              \
790         (int32_t)WIND_8_SUBBANDS_1_1 * (int32_t)s16X[ChOffset + 48 + 15];    \
791     s32Temp +=                                                               \
792         (int32_t)WIND_8_SUBBANDS_1_2 * (int32_t)s16X[ChOffset + 32 + 1];     \
793     s32Temp2 +=                                                              \
794         (int32_t)WIND_8_SUBBANDS_1_2 * (int32_t)s16X[ChOffset + 32 + 15];    \
795     s32Temp +=                                                               \
796         (int32_t)WIND_8_SUBBANDS_1_3 * (int32_t)s16X[ChOffset + 48 + 1];     \
797     s32Temp2 +=                                                              \
798         (int32_t)WIND_8_SUBBANDS_1_3 * (int32_t)s16X[ChOffset + 16 + 15];    \
799     s32Temp +=                                                               \
800         (int32_t)WIND_8_SUBBANDS_1_4 * (int32_t)s16X[ChOffset + 64 + 1];     \
801     s32Temp2 += (int32_t)WIND_8_SUBBANDS_1_4 * (int32_t)s16X[ChOffset + 15]; \
802     s32DCTY[1] = (int32_t)s32Temp;                                           \
803     s32DCTY[15] = (int32_t)s32Temp2;                                         \
804   }
805 #define WINDOW_ACCU_8_2_14                                                   \
806   {                                                                          \
807     s32Temp = (int32_t)WIND_8_SUBBANDS_2_0 * (int32_t)s16X[ChOffset + 2];    \
808     s32Temp2 =                                                               \
809         (int32_t)WIND_8_SUBBANDS_2_0 * (int32_t)s16X[ChOffset + 64 + 14];    \
810     s32Temp +=                                                               \
811         (int32_t)WIND_8_SUBBANDS_2_1 * (int32_t)s16X[ChOffset + 16 + 2];     \
812     s32Temp2 +=                                                              \
813         (int32_t)WIND_8_SUBBANDS_2_1 * (int32_t)s16X[ChOffset + 48 + 14];    \
814     s32Temp +=                                                               \
815         (int32_t)WIND_8_SUBBANDS_2_2 * (int32_t)s16X[ChOffset + 32 + 2];     \
816     s32Temp2 +=                                                              \
817         (int32_t)WIND_8_SUBBANDS_2_2 * (int32_t)s16X[ChOffset + 32 + 14];    \
818     s32Temp +=                                                               \
819         (int32_t)WIND_8_SUBBANDS_2_3 * (int32_t)s16X[ChOffset + 48 + 2];     \
820     s32Temp2 +=                                                              \
821         (int32_t)WIND_8_SUBBANDS_2_3 * (int32_t)s16X[ChOffset + 16 + 14];    \
822     s32Temp +=                                                               \
823         (int32_t)WIND_8_SUBBANDS_2_4 * (int32_t)s16X[ChOffset + 64 + 2];     \
824     s32Temp2 += (int32_t)WIND_8_SUBBANDS_2_4 * (int32_t)s16X[ChOffset + 14]; \
825     s32DCTY[2] = (int32_t)s32Temp;                                           \
826     s32DCTY[14] = (int32_t)s32Temp2;                                         \
827   }
828 #define WINDOW_ACCU_8_3_13                                                   \
829   {                                                                          \
830     s32Temp = (int32_t)WIND_8_SUBBANDS_3_0 * (int32_t)s16X[ChOffset + 3];    \
831     s32Temp2 =                                                               \
832         (int32_t)WIND_8_SUBBANDS_3_0 * (int32_t)s16X[ChOffset + 64 + 13];    \
833     s32Temp +=                                                               \
834         (int32_t)WIND_8_SUBBANDS_3_1 * (int32_t)s16X[ChOffset + 16 + 3];     \
835     s32Temp2 +=                                                              \
836         (int32_t)WIND_8_SUBBANDS_3_1 * (int32_t)s16X[ChOffset + 48 + 13];    \
837     s32Temp +=                                                               \
838         (int32_t)WIND_8_SUBBANDS_3_2 * (int32_t)s16X[ChOffset + 32 + 3];     \
839     s32Temp2 +=                                                              \
840         (int32_t)WIND_8_SUBBANDS_3_2 * (int32_t)s16X[ChOffset + 32 + 13];    \
841     s32Temp +=                                                               \
842         (int32_t)WIND_8_SUBBANDS_3_3 * (int32_t)s16X[ChOffset + 48 + 3];     \
843     s32Temp2 +=                                                              \
844         (int32_t)WIND_8_SUBBANDS_3_3 * (int32_t)s16X[ChOffset + 16 + 13];    \
845     s32Temp +=                                                               \
846         (int32_t)WIND_8_SUBBANDS_3_4 * (int32_t)s16X[ChOffset + 64 + 3];     \
847     s32Temp2 += (int32_t)WIND_8_SUBBANDS_3_4 * (int32_t)s16X[ChOffset + 13]; \
848     s32DCTY[3] = (int32_t)s32Temp;                                           \
849     s32DCTY[13] = (int32_t)s32Temp2;                                         \
850   }
851 #define WINDOW_ACCU_8_4_12                                                   \
852   {                                                                          \
853     s32Temp = (int32_t)WIND_8_SUBBANDS_4_0 * (int32_t)s16X[ChOffset + 4];    \
854     s32Temp2 =                                                               \
855         (int32_t)WIND_8_SUBBANDS_4_0 * (int32_t)s16X[ChOffset + 64 + 12];    \
856     s32Temp +=                                                               \
857         (int32_t)WIND_8_SUBBANDS_4_1 * (int32_t)s16X[ChOffset + 16 + 4];     \
858     s32Temp2 +=                                                              \
859         (int32_t)WIND_8_SUBBANDS_4_1 * (int32_t)s16X[ChOffset + 48 + 12];    \
860     s32Temp +=                                                               \
861         (int32_t)WIND_8_SUBBANDS_4_2 * (int32_t)s16X[ChOffset + 32 + 4];     \
862     s32Temp2 +=                                                              \
863         (int32_t)WIND_8_SUBBANDS_4_2 * (int32_t)s16X[ChOffset + 32 + 12];    \
864     s32Temp +=                                                               \
865         (int32_t)WIND_8_SUBBANDS_4_3 * (int32_t)s16X[ChOffset + 48 + 4];     \
866     s32Temp2 +=                                                              \
867         (int32_t)WIND_8_SUBBANDS_4_3 * (int32_t)s16X[ChOffset + 16 + 12];    \
868     s32Temp +=                                                               \
869         (int32_t)WIND_8_SUBBANDS_4_4 * (int32_t)s16X[ChOffset + 64 + 4];     \
870     s32Temp2 += (int32_t)WIND_8_SUBBANDS_4_4 * (int32_t)s16X[ChOffset + 12]; \
871     s32DCTY[4] = (int32_t)s32Temp;                                           \
872     s32DCTY[12] = (int32_t)s32Temp2;                                         \
873   }
874 #define WINDOW_ACCU_8_5_11                                                   \
875   {                                                                          \
876     s32Temp = (int32_t)WIND_8_SUBBANDS_5_0 * (int32_t)s16X[ChOffset + 5];    \
877     s32Temp2 =                                                               \
878         (int32_t)WIND_8_SUBBANDS_5_0 * (int32_t)s16X[ChOffset + 64 + 11];    \
879     s32Temp +=                                                               \
880         (int32_t)WIND_8_SUBBANDS_5_1 * (int32_t)s16X[ChOffset + 16 + 5];     \
881     s32Temp2 +=                                                              \
882         (int32_t)WIND_8_SUBBANDS_5_1 * (int32_t)s16X[ChOffset + 48 + 11];    \
883     s32Temp +=                                                               \
884         (int32_t)WIND_8_SUBBANDS_5_2 * (int32_t)s16X[ChOffset + 32 + 5];     \
885     s32Temp2 +=                                                              \
886         (int32_t)WIND_8_SUBBANDS_5_2 * (int32_t)s16X[ChOffset + 32 + 11];    \
887     s32Temp +=                                                               \
888         (int32_t)WIND_8_SUBBANDS_5_3 * (int32_t)s16X[ChOffset + 48 + 5];     \
889     s32Temp2 +=                                                              \
890         (int32_t)WIND_8_SUBBANDS_5_3 * (int32_t)s16X[ChOffset + 16 + 11];    \
891     s32Temp +=                                                               \
892         (int32_t)WIND_8_SUBBANDS_5_4 * (int32_t)s16X[ChOffset + 64 + 5];     \
893     s32Temp2 += (int32_t)WIND_8_SUBBANDS_5_4 * (int32_t)s16X[ChOffset + 11]; \
894     s32DCTY[5] = (int32_t)s32Temp;                                           \
895     s32DCTY[11] = (int32_t)s32Temp2;                                         \
896   }
897 #define WINDOW_ACCU_8_6_10                                                   \
898   {                                                                          \
899     s32Temp = (int32_t)WIND_8_SUBBANDS_6_0 * (int32_t)s16X[ChOffset + 6];    \
900     s32Temp2 =                                                               \
901         (int32_t)WIND_8_SUBBANDS_6_0 * (int32_t)s16X[ChOffset + 64 + 10];    \
902     s32Temp +=                                                               \
903         (int32_t)WIND_8_SUBBANDS_6_1 * (int32_t)s16X[ChOffset + 16 + 6];     \
904     s32Temp2 +=                                                              \
905         (int32_t)WIND_8_SUBBANDS_6_1 * (int32_t)s16X[ChOffset + 48 + 10];    \
906     s32Temp +=                                                               \
907         (int32_t)WIND_8_SUBBANDS_6_2 * (int32_t)s16X[ChOffset + 32 + 6];     \
908     s32Temp2 +=                                                              \
909         (int32_t)WIND_8_SUBBANDS_6_2 * (int32_t)s16X[ChOffset + 32 + 10];    \
910     s32Temp +=                                                               \
911         (int32_t)WIND_8_SUBBANDS_6_3 * (int32_t)s16X[ChOffset + 48 + 6];     \
912     s32Temp2 +=                                                              \
913         (int32_t)WIND_8_SUBBANDS_6_3 * (int32_t)s16X[ChOffset + 16 + 10];    \
914     s32Temp +=                                                               \
915         (int32_t)WIND_8_SUBBANDS_6_4 * (int32_t)s16X[ChOffset + 64 + 6];     \
916     s32Temp2 += (int32_t)WIND_8_SUBBANDS_6_4 * (int32_t)s16X[ChOffset + 10]; \
917     s32DCTY[6] = (int32_t)s32Temp;                                           \
918     s32DCTY[10] = (int32_t)s32Temp2;                                         \
919   }
920 #define WINDOW_ACCU_8_7_9                                                   \
921   {                                                                         \
922     s32Temp = (int32_t)WIND_8_SUBBANDS_7_0 * (int32_t)s16X[ChOffset + 7];   \
923     s32Temp2 =                                                              \
924         (int32_t)WIND_8_SUBBANDS_7_0 * (int32_t)s16X[ChOffset + 64 + 9];    \
925     s32Temp +=                                                              \
926         (int32_t)WIND_8_SUBBANDS_7_1 * (int32_t)s16X[ChOffset + 16 + 7];    \
927     s32Temp2 +=                                                             \
928         (int32_t)WIND_8_SUBBANDS_7_1 * (int32_t)s16X[ChOffset + 48 + 9];    \
929     s32Temp +=                                                              \
930         (int32_t)WIND_8_SUBBANDS_7_2 * (int32_t)s16X[ChOffset + 32 + 7];    \
931     s32Temp2 +=                                                             \
932         (int32_t)WIND_8_SUBBANDS_7_2 * (int32_t)s16X[ChOffset + 32 + 9];    \
933     s32Temp +=                                                              \
934         (int32_t)WIND_8_SUBBANDS_7_3 * (int32_t)s16X[ChOffset + 48 + 7];    \
935     s32Temp2 +=                                                             \
936         (int32_t)WIND_8_SUBBANDS_7_3 * (int32_t)s16X[ChOffset + 16 + 9];    \
937     s32Temp +=                                                              \
938         (int32_t)WIND_8_SUBBANDS_7_4 * (int32_t)s16X[ChOffset + 64 + 7];    \
939     s32Temp2 += (int32_t)WIND_8_SUBBANDS_7_4 * (int32_t)s16X[ChOffset + 9]; \
940     s32DCTY[7] = (int32_t)s32Temp;                                          \
941     s32DCTY[9] = (int32_t)s32Temp2;                                         \
942   }
943 #define WINDOW_ACCU_8_8                                                      \
944   {                                                                          \
945     s32Temp = (int32_t)WIND_8_SUBBANDS_8_0 *                                 \
946               (int32_t)(s16X[ChOffset + 8] + s16X[ChOffset + 64 + 8]);       \
947     s32Temp += (int32_t)WIND_8_SUBBANDS_8_1 *                                \
948                (int32_t)(s16X[ChOffset + 16 + 8] + s16X[ChOffset + 48 + 8]); \
949     s32Temp +=                                                               \
950         (int32_t)WIND_8_SUBBANDS_8_2 * (int32_t)s16X[ChOffset + 32 + 8];     \
951     s32DCTY[8] = (int32_t)s32Temp;                                           \
952   }
953 #define WINDOW_ACCU_4_0                                              \
954   {                                                                  \
955     s32Temp = (int32_t)WIND_4_SUBBANDS_0_1 *                         \
956               (int32_t)(s16X[ChOffset + 8] - s16X[ChOffset + 32]);   \
957     s32Temp += (int32_t)WIND_4_SUBBANDS_0_2 *                        \
958                (int32_t)(s16X[ChOffset + 16] - s16X[ChOffset + 24]); \
959     s32DCTY[0] = (int32_t)(s32Temp);                                 \
960   }
961 #define WINDOW_ACCU_4_1_7                                                      \
962   {                                                                            \
963     s32Temp = (int32_t)WIND_4_SUBBANDS_1_0 * (int32_t)s16X[ChOffset + 1];      \
964     s32Temp2 =                                                                 \
965         (int32_t)WIND_4_SUBBANDS_1_0 * (int32_t)s16X[ChOffset + 32 + 7];       \
966     s32Temp += (int32_t)WIND_4_SUBBANDS_1_1 * (int32_t)s16X[ChOffset + 8 + 1]; \
967     s32Temp2 +=                                                                \
968         (int32_t)WIND_4_SUBBANDS_1_1 * (int32_t)s16X[ChOffset + 24 + 7];       \
969     s32Temp +=                                                                 \
970         (int32_t)WIND_4_SUBBANDS_1_2 * (int32_t)s16X[ChOffset + 16 + 1];       \
971     s32Temp2 +=                                                                \
972         (int32_t)WIND_4_SUBBANDS_1_2 * (int32_t)s16X[ChOffset + 16 + 7];       \
973     s32Temp +=                                                                 \
974         (int32_t)WIND_4_SUBBANDS_1_3 * (int32_t)s16X[ChOffset + 24 + 1];       \
975     s32Temp2 +=                                                                \
976         (int32_t)WIND_4_SUBBANDS_1_3 * (int32_t)s16X[ChOffset + 8 + 7];        \
977     s32Temp +=                                                                 \
978         (int32_t)WIND_4_SUBBANDS_1_4 * (int32_t)s16X[ChOffset + 32 + 1];       \
979     s32Temp2 += (int32_t)WIND_4_SUBBANDS_1_4 * (int32_t)s16X[ChOffset + 7];    \
980     s32DCTY[1] = (int32_t)(s32Temp);                                           \
981     s32DCTY[7] = (int32_t)(s32Temp2);                                          \
982   }
983 #define WINDOW_ACCU_4_2_6                                                      \
984   {                                                                            \
985     s32Temp = (int32_t)WIND_4_SUBBANDS_2_0 * (int32_t)s16X[ChOffset + 2];      \
986     s32Temp2 =                                                                 \
987         (int32_t)WIND_4_SUBBANDS_2_0 * (int32_t)s16X[ChOffset + 32 + 6];       \
988     s32Temp += (int32_t)WIND_4_SUBBANDS_2_1 * (int32_t)s16X[ChOffset + 8 + 2]; \
989     s32Temp2 +=                                                                \
990         (int32_t)WIND_4_SUBBANDS_2_1 * (int32_t)s16X[ChOffset + 24 + 6];       \
991     s32Temp +=                                                                 \
992         (int32_t)WIND_4_SUBBANDS_2_2 * (int32_t)s16X[ChOffset + 16 + 2];       \
993     s32Temp2 +=                                                                \
994         (int32_t)WIND_4_SUBBANDS_2_2 * (int32_t)s16X[ChOffset + 16 + 6];       \
995     s32Temp +=                                                                 \
996         (int32_t)WIND_4_SUBBANDS_2_3 * (int32_t)s16X[ChOffset + 24 + 2];       \
997     s32Temp2 +=                                                                \
998         (int32_t)WIND_4_SUBBANDS_2_3 * (int32_t)s16X[ChOffset + 8 + 6];        \
999     s32Temp +=                                                                 \
1000         (int32_t)WIND_4_SUBBANDS_2_4 * (int32_t)s16X[ChOffset + 32 + 2];       \
1001     s32Temp2 += (int32_t)WIND_4_SUBBANDS_2_4 * (int32_t)s16X[ChOffset + 6];    \
1002     s32DCTY[2] = (int32_t)(s32Temp);                                           \
1003     s32DCTY[6] = (int32_t)(s32Temp2);                                          \
1004   }
1005 #define WINDOW_ACCU_4_3_5                                                      \
1006   {                                                                            \
1007     s32Temp = (int32_t)WIND_4_SUBBANDS_3_0 * (int32_t)s16X[ChOffset + 3];      \
1008     s32Temp2 =                                                                 \
1009         (int32_t)WIND_4_SUBBANDS_3_0 * (int32_t)s16X[ChOffset + 32 + 5];       \
1010     s32Temp += (int32_t)WIND_4_SUBBANDS_3_1 * (int32_t)s16X[ChOffset + 8 + 3]; \
1011     s32Temp2 +=                                                                \
1012         (int32_t)WIND_4_SUBBANDS_3_1 * (int32_t)s16X[ChOffset + 24 + 5];       \
1013     s32Temp +=                                                                 \
1014         (int32_t)WIND_4_SUBBANDS_3_2 * (int32_t)s16X[ChOffset + 16 + 3];       \
1015     s32Temp2 +=                                                                \
1016         (int32_t)WIND_4_SUBBANDS_3_2 * (int32_t)s16X[ChOffset + 16 + 5];       \
1017     s32Temp +=                                                                 \
1018         (int32_t)WIND_4_SUBBANDS_3_3 * (int32_t)s16X[ChOffset + 24 + 3];       \
1019     s32Temp2 +=                                                                \
1020         (int32_t)WIND_4_SUBBANDS_3_3 * (int32_t)s16X[ChOffset + 8 + 5];        \
1021     s32Temp +=                                                                 \
1022         (int32_t)WIND_4_SUBBANDS_3_4 * (int32_t)s16X[ChOffset + 32 + 3];       \
1023     s32Temp2 += (int32_t)WIND_4_SUBBANDS_3_4 * (int32_t)s16X[ChOffset + 5];    \
1024     s32DCTY[3] = (int32_t)(s32Temp);                                           \
1025     s32DCTY[5] = (int32_t)(s32Temp2);                                          \
1026   }
1027 
1028 #define WINDOW_ACCU_4_4                                                     \
1029   {                                                                         \
1030     s32Temp = (int32_t)WIND_4_SUBBANDS_4_0 *                                \
1031               (int32_t)(s16X[ChOffset + 4] + s16X[ChOffset + 4 + 32]);      \
1032     s32Temp += (int32_t)WIND_4_SUBBANDS_4_1 *                               \
1033                (int32_t)(s16X[ChOffset + 4 + 8] + s16X[ChOffset + 4 + 24]); \
1034     s32Temp +=                                                              \
1035         (int32_t)WIND_4_SUBBANDS_4_2 * (int32_t)s16X[ChOffset + 4 + 16];    \
1036     s32DCTY[4] = (int32_t)(s32Temp);                                        \
1037   }
1038 #endif
1039 #define WINDOW_PARTIAL_4 \
1040   {                      \
1041     WINDOW_ACCU_4_0;     \
1042     WINDOW_ACCU_4_1_7;   \
1043     WINDOW_ACCU_4_2_6;   \
1044     WINDOW_ACCU_4_3_5;   \
1045     WINDOW_ACCU_4_4;     \
1046   }
1047 
1048 #define WINDOW_PARTIAL_8 \
1049   {                      \
1050     WINDOW_ACCU_8_0;     \
1051     WINDOW_ACCU_8_1_15;  \
1052     WINDOW_ACCU_8_2_14;  \
1053     WINDOW_ACCU_8_3_13;  \
1054     WINDOW_ACCU_8_4_12;  \
1055     WINDOW_ACCU_8_5_11;  \
1056     WINDOW_ACCU_8_6_10;  \
1057     WINDOW_ACCU_8_7_9;   \
1058     WINDOW_ACCU_8_8;     \
1059   }
1060 #else
1061 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
1062 #define WINDOW_ACCU_4(i)                                                     \
1063   {                                                                          \
1064     s64Temp = ((int64_t)gas32CoeffFor4SBs[i] * (int64_t)s16X[ChOffset + i]); \
1065     s64Temp += ((int64_t)gas32CoeffFor4SBs[(i + 8)] *                        \
1066                 (int64_t)s16X[ChOffset + i + 8]);                            \
1067     s64Temp += ((int64_t)gas32CoeffFor4SBs[(i + 16)] *                       \
1068                 (int64_t)s16X[ChOffset + i + 16]);                           \
1069     s64Temp += ((int64_t)gas32CoeffFor4SBs[(i + 24)] *                       \
1070                 (int64_t)s16X[ChOffset + i + 24]);                           \
1071     s64Temp += ((int64_t)gas32CoeffFor4SBs[(i + 32)] *                       \
1072                 (int64_t)s16X[ChOffset + i + 32]);                           \
1073     s32DCTY[i] = (int32_t)(s64Temp >> 16);                                   \
1074     /*printf("s32DCTY4: 0x%x \n", s32DCTY[i]);*/                             \
1075   }
1076 #else
1077 #define WINDOW_ACCU_4(i)                                                 \
1078   {                                                                      \
1079     s32DCTY[i] = (gas32CoeffFor4SBs[i * 2] * s16X[ChOffset + i]) +       \
1080                  (((int32_t)(uint16_t)(gas32CoeffFor4SBs[(i * 2) + 1]) * \
1081                    s16X[ChOffset + i]) >>                                \
1082                   16);                                                   \
1083     s32DCTY[i] +=                                                        \
1084         (gas32CoeffFor4SBs[(i + 8) * 2] * s16X[ChOffset + i + 8]) +      \
1085         (((int32_t)(uint16_t)(gas32CoeffFor4SBs[((i + 8) * 2) + 1]) *    \
1086           s16X[ChOffset + i + 8]) >>                                     \
1087          16);                                                            \
1088     s32DCTY[i] +=                                                        \
1089         (gas32CoeffFor4SBs[(i + 16) * 2] * s16X[ChOffset + i + 16]) +    \
1090         (((int32_t)(uint16_t)(gas32CoeffFor4SBs[((i + 16) * 2) + 1]) *   \
1091           s16X[ChOffset + i + 16]) >>                                    \
1092          16);                                                            \
1093     s32DCTY[i] +=                                                        \
1094         (gas32CoeffFor4SBs[(i + 24) * 2] * s16X[ChOffset + i + 24]) +    \
1095         (((int32_t)(uint16_t)(gas32CoeffFor4SBs[((i + 24) * 2) + 1]) *   \
1096           s16X[ChOffset + i + 24]) >>                                    \
1097          16);                                                            \
1098     s32DCTY[i] +=                                                        \
1099         (gas32CoeffFor4SBs[(i + 32) * 2] * s16X[ChOffset + i + 32]) +    \
1100         (((int32_t)(uint16_t)(gas32CoeffFor4SBs[((i + 32) * 2) + 1]) *   \
1101           s16X[ChOffset + i + 32]) >>                                    \
1102          16);                                                            \
1103   }
1104 #endif
1105 #define WINDOW_PARTIAL_4 \
1106   {                      \
1107     WINDOW_ACCU_4(0);    \
1108     WINDOW_ACCU_4(1);    \
1109     WINDOW_ACCU_4(2);    \
1110     WINDOW_ACCU_4(3);    \
1111     WINDOW_ACCU_4(4);    \
1112     WINDOW_ACCU_4(5);    \
1113     WINDOW_ACCU_4(6);    \
1114     WINDOW_ACCU_4(7);    \
1115   }
1116 
1117 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
1118 #define WINDOW_ACCU_8(i)                                                    \
1119   {                                                                         \
1120     s64Temp =                                                               \
1121         ((((int64_t)gas32CoeffFor8SBs[i] * (int64_t)s16X[ChOffset + i])));  \
1122     s64Temp += ((((int64_t)gas32CoeffFor8SBs[(i + 16)] *                    \
1123                   (int64_t)s16X[ChOffset + i + 16])));                      \
1124     s64Temp += ((((int64_t)gas32CoeffFor8SBs[(i + 32)] *                    \
1125                   (int64_t)s16X[ChOffset + i + 32])));                      \
1126     s64Temp += ((((int64_t)gas32CoeffFor8SBs[(i + 48)] *                    \
1127                   (int64_t)s16X[ChOffset + i + 48])));                      \
1128     s64Temp += ((((int64_t)gas32CoeffFor8SBs[(i + 64)] *                    \
1129                   (int64_t)s16X[ChOffset + i + 64])));                      \
1130     /*printf("s32DCTY8: %d= 0x%x * %d\n", s32DCTY[i], gas32CoeffFor8SBs[i], \
1131      * s16X[ChOffset+i]);*/                                                 \
1132     s32DCTY[i] = (int32_t)(s64Temp >> 16);                                  \
1133   }
1134 #else
1135 #define WINDOW_ACCU_8(i)                                                       \
1136   {                                                                            \
1137     s32DCTY[i] = (gas32CoeffFor8SBs[i * 2] * s16X[ChOffset + i]) +             \
1138                  (((int32_t)(uint16_t)(gas32CoeffFor8SBs[(i * 2) + 1]) *       \
1139                    s16X[ChOffset + i]) >>                                      \
1140                   16);                                                         \
1141     s32DCTY[i] +=                                                              \
1142         (gas32CoeffFor8SBs[(i + 16) * 2] * s16X[ChOffset + i + 16]) +          \
1143         (((int32_t)(uint16_t)(gas32CoeffFor8SBs[((i + 16) * 2) + 1]) *         \
1144           s16X[ChOffset + i + 16]) >>                                          \
1145          16);                                                                  \
1146     s32DCTY[i] +=                                                              \
1147         (gas32CoeffFor8SBs[(i + 32) * 2] * s16X[ChOffset + i + 32]) +          \
1148         (((int32_t)(uint16_t)(gas32CoeffFor8SBs[((i + 32) * 2) + 1]) *         \
1149           s16X[ChOffset + i + 32]) >>                                          \
1150          16);                                                                  \
1151     s32DCTY[i] +=                                                              \
1152         (gas32CoeffFor8SBs[(i + 48) * 2] * s16X[ChOffset + i + 48]) +          \
1153         (((int32_t)(uint16_t)(gas32CoeffFor8SBs[((i + 48) * 2) + 1]) *         \
1154           s16X[ChOffset + i + 48]) >>                                          \
1155          16);                                                                  \
1156     s32DCTY[i] +=                                                              \
1157         (gas32CoeffFor8SBs[(i + 64) * 2] * s16X[ChOffset + i + 64]) +          \
1158         (((int32_t)(uint16_t)(gas32CoeffFor8SBs[((i + 64) * 2) + 1]) *         \
1159           s16X[ChOffset + i + 64]) >>                                          \
1160          16);                                                                  \
1161     /*printf("s32DCTY8: %d = 0x%4x%4x * %d\n", s32DCTY[i], gas32CoeffFor8SBs[i \
1162      * * 2], (gas32CoeffFor8SBs[(i * 2) + 1]), s16X[ChOffset+i]);*/            \
1163     /*s32DCTY[i]=(int32_t)(s64Temp>>16);*/                                     \
1164   }
1165 #endif
1166 #define WINDOW_PARTIAL_8 \
1167   {                      \
1168     WINDOW_ACCU_8(0);    \
1169     WINDOW_ACCU_8(1);    \
1170     WINDOW_ACCU_8(2);    \
1171     WINDOW_ACCU_8(3);    \
1172     WINDOW_ACCU_8(4);    \
1173     WINDOW_ACCU_8(5);    \
1174     WINDOW_ACCU_8(6);    \
1175     WINDOW_ACCU_8(7);    \
1176     WINDOW_ACCU_8(8);    \
1177     WINDOW_ACCU_8(9);    \
1178     WINDOW_ACCU_8(10);   \
1179     WINDOW_ACCU_8(11);   \
1180     WINDOW_ACCU_8(12);   \
1181     WINDOW_ACCU_8(13);   \
1182     WINDOW_ACCU_8(14);   \
1183     WINDOW_ACCU_8(15);   \
1184   }
1185 #endif
1186 #endif
1187 
1188 static int16_t ShiftCounter = 0;
1189 extern int16_t EncMaxShiftCounter;
1190 /****************************************************************************
1191 * SbcAnalysisFilter - performs Analysis of the input audio stream
1192 *
1193 * RETURNS : N/A
1194 */
SbcAnalysisFilter4(SBC_ENC_PARAMS * pstrEncParams,int16_t * input)1195 void SbcAnalysisFilter4(SBC_ENC_PARAMS* pstrEncParams, int16_t* input) {
1196   int16_t* ps16PcmBuf;
1197   int32_t* ps32SbBuf;
1198   int32_t s32Blk, s32Ch;
1199   int32_t s32NumOfChannels, s32NumOfBlocks;
1200   int32_t i, *ps32X, *ps32X2;
1201   int32_t Offset, Offset2, ChOffset;
1202 #if (SBC_ARM_ASM_OPT == TRUE)
1203   register int32_t s32Hi, s32Hi2;
1204 #else
1205 #if (SBC_IPAQ_OPT == TRUE)
1206 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
1207   register int64_t s64Temp, s64Temp2;
1208 #else
1209   register int32_t s32Temp, s32Temp2;
1210 #endif
1211 #else
1212 
1213 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
1214   int64_t s64Temp;
1215 #endif
1216 
1217 #endif
1218 #endif
1219 
1220   s32NumOfChannels = pstrEncParams->s16NumOfChannels;
1221   s32NumOfBlocks = pstrEncParams->s16NumOfBlocks;
1222 
1223   ps16PcmBuf = input;
1224 
1225   ps32SbBuf = pstrEncParams->s32SbBuffer;
1226   Offset2 = (int32_t)(EncMaxShiftCounter + 40);
1227   for (s32Blk = 0; s32Blk < s32NumOfBlocks; s32Blk++) {
1228     Offset = (int32_t)(EncMaxShiftCounter - ShiftCounter);
1229     /* Store new samples */
1230     if (s32NumOfChannels == 1) {
1231       s16X[3 + Offset] = *ps16PcmBuf;
1232       ps16PcmBuf++;
1233       s16X[2 + Offset] = *ps16PcmBuf;
1234       ps16PcmBuf++;
1235       s16X[1 + Offset] = *ps16PcmBuf;
1236       ps16PcmBuf++;
1237       s16X[0 + Offset] = *ps16PcmBuf;
1238       ps16PcmBuf++;
1239     } else {
1240       s16X[3 + Offset] = *ps16PcmBuf;
1241       ps16PcmBuf++;
1242       s16X[Offset2 + 3 + Offset] = *ps16PcmBuf;
1243       ps16PcmBuf++;
1244       s16X[2 + Offset] = *ps16PcmBuf;
1245       ps16PcmBuf++;
1246       s16X[Offset2 + 2 + Offset] = *ps16PcmBuf;
1247       ps16PcmBuf++;
1248       s16X[1 + Offset] = *ps16PcmBuf;
1249       ps16PcmBuf++;
1250       s16X[Offset2 + 1 + Offset] = *ps16PcmBuf;
1251       ps16PcmBuf++;
1252       s16X[0 + Offset] = *ps16PcmBuf;
1253       ps16PcmBuf++;
1254       s16X[Offset2 + 0 + Offset] = *ps16PcmBuf;
1255       ps16PcmBuf++;
1256     }
1257     for (s32Ch = 0; s32Ch < s32NumOfChannels; s32Ch++) {
1258       ChOffset = s32Ch * Offset2 + Offset;
1259 
1260       WINDOW_PARTIAL_4
1261 
1262       SBC_FastIDCT4(s32DCTY, ps32SbBuf);
1263 
1264       ps32SbBuf += SUB_BANDS_4;
1265     }
1266     if (s32NumOfChannels == 1) {
1267       if (ShiftCounter >= EncMaxShiftCounter) {
1268         SHIFTUP_X4;
1269         ShiftCounter = 0;
1270       } else {
1271         ShiftCounter += SUB_BANDS_4;
1272       }
1273     } else {
1274       if (ShiftCounter >= EncMaxShiftCounter) {
1275         SHIFTUP_X4_2;
1276         ShiftCounter = 0;
1277       } else {
1278         ShiftCounter += SUB_BANDS_4;
1279       }
1280     }
1281   }
1282 }
1283 
1284 /* ////////////////////////////////////////////////////////////////////////// */
SbcAnalysisFilter8(SBC_ENC_PARAMS * pstrEncParams,int16_t * input)1285 void SbcAnalysisFilter8(SBC_ENC_PARAMS* pstrEncParams, int16_t* input) {
1286   int16_t* ps16PcmBuf;
1287   int32_t* ps32SbBuf;
1288   int32_t s32Blk, s32Ch; /* counter for block*/
1289   int32_t Offset, Offset2;
1290   int32_t s32NumOfChannels, s32NumOfBlocks;
1291   int32_t i, *ps32X, *ps32X2;
1292   int32_t ChOffset;
1293 #if (SBC_ARM_ASM_OPT == TRUE)
1294   register int32_t s32Hi, s32Hi2;
1295 #else
1296 #if (SBC_IPAQ_OPT == TRUE)
1297 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
1298   register int64_t s64Temp, s64Temp2;
1299 #else
1300   register int32_t s32Temp, s32Temp2;
1301 #endif
1302 #else
1303 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
1304   int64_t s64Temp;
1305 #endif
1306 #endif
1307 #endif
1308 
1309   s32NumOfChannels = pstrEncParams->s16NumOfChannels;
1310   s32NumOfBlocks = pstrEncParams->s16NumOfBlocks;
1311 
1312   ps16PcmBuf = input;
1313 
1314   ps32SbBuf = pstrEncParams->s32SbBuffer;
1315   Offset2 = (int32_t)(EncMaxShiftCounter + 80);
1316   for (s32Blk = 0; s32Blk < s32NumOfBlocks; s32Blk++) {
1317     Offset = (int32_t)(EncMaxShiftCounter - ShiftCounter);
1318     /* Store new samples */
1319     if (s32NumOfChannels == 1) {
1320       s16X[7 + Offset] = *ps16PcmBuf;
1321       ps16PcmBuf++;
1322       s16X[6 + Offset] = *ps16PcmBuf;
1323       ps16PcmBuf++;
1324       s16X[5 + Offset] = *ps16PcmBuf;
1325       ps16PcmBuf++;
1326       s16X[4 + Offset] = *ps16PcmBuf;
1327       ps16PcmBuf++;
1328       s16X[3 + Offset] = *ps16PcmBuf;
1329       ps16PcmBuf++;
1330       s16X[2 + Offset] = *ps16PcmBuf;
1331       ps16PcmBuf++;
1332       s16X[1 + Offset] = *ps16PcmBuf;
1333       ps16PcmBuf++;
1334       s16X[0 + Offset] = *ps16PcmBuf;
1335       ps16PcmBuf++;
1336     } else {
1337       s16X[7 + Offset] = *ps16PcmBuf;
1338       ps16PcmBuf++;
1339       s16X[Offset2 + 7 + Offset] = *ps16PcmBuf;
1340       ps16PcmBuf++;
1341       s16X[6 + Offset] = *ps16PcmBuf;
1342       ps16PcmBuf++;
1343       s16X[Offset2 + 6 + Offset] = *ps16PcmBuf;
1344       ps16PcmBuf++;
1345       s16X[5 + Offset] = *ps16PcmBuf;
1346       ps16PcmBuf++;
1347       s16X[Offset2 + 5 + Offset] = *ps16PcmBuf;
1348       ps16PcmBuf++;
1349       s16X[4 + Offset] = *ps16PcmBuf;
1350       ps16PcmBuf++;
1351       s16X[Offset2 + 4 + Offset] = *ps16PcmBuf;
1352       ps16PcmBuf++;
1353       s16X[3 + Offset] = *ps16PcmBuf;
1354       ps16PcmBuf++;
1355       s16X[Offset2 + 3 + Offset] = *ps16PcmBuf;
1356       ps16PcmBuf++;
1357       s16X[2 + Offset] = *ps16PcmBuf;
1358       ps16PcmBuf++;
1359       s16X[Offset2 + 2 + Offset] = *ps16PcmBuf;
1360       ps16PcmBuf++;
1361       s16X[1 + Offset] = *ps16PcmBuf;
1362       ps16PcmBuf++;
1363       s16X[Offset2 + 1 + Offset] = *ps16PcmBuf;
1364       ps16PcmBuf++;
1365       s16X[0 + Offset] = *ps16PcmBuf;
1366       ps16PcmBuf++;
1367       s16X[Offset2 + 0 + Offset] = *ps16PcmBuf;
1368       ps16PcmBuf++;
1369     }
1370     for (s32Ch = 0; s32Ch < s32NumOfChannels; s32Ch++) {
1371       ChOffset = s32Ch * Offset2 + Offset;
1372 
1373       WINDOW_PARTIAL_8
1374 
1375       SBC_FastIDCT8(s32DCTY, ps32SbBuf);
1376 
1377       ps32SbBuf += SUB_BANDS_8;
1378     }
1379     if (s32NumOfChannels == 1) {
1380       if (ShiftCounter >= EncMaxShiftCounter) {
1381         SHIFTUP_X8;
1382         ShiftCounter = 0;
1383       } else {
1384         ShiftCounter += SUB_BANDS_8;
1385       }
1386     } else {
1387       if (ShiftCounter >= EncMaxShiftCounter) {
1388         SHIFTUP_X8_2;
1389         ShiftCounter = 0;
1390       } else {
1391         ShiftCounter += SUB_BANDS_8;
1392       }
1393     }
1394   }
1395 }
1396 
SbcAnalysisInit(void)1397 void SbcAnalysisInit(void) {
1398   memset(s16X, 0, ENC_VX_BUFFER_SIZE * sizeof(int16_t));
1399   ShiftCounter = 0;
1400 }
1401