Home | History | Annotate | Download | only in srce
      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_encoder.h"
     27 #include "sbc_enc_func_declare.h"
     28 /*#include <math.h>*/
     29 
     30 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
     31 #define WIND_4_SUBBANDS_0_1 (SINT32)0x01659F45  /* gas32CoeffFor4SBs[8] = -gas32CoeffFor4SBs[32] = 0x01659F45 */
     32 #define WIND_4_SUBBANDS_0_2 (SINT32)0x115B1ED2  /* gas32CoeffFor4SBs[16] = -gas32CoeffFor4SBs[24] = 0x115B1ED2 */
     33 #define WIND_4_SUBBANDS_1_0 (SINT32)0x001194E6  /* gas32CoeffFor4SBs[1 et 39] = 0x001194E6 */
     34 #define WIND_4_SUBBANDS_1_1 (SINT32)0x029DBAA3  /* gas32CoeffFor4SBs[9 et 31] = 0x029DBAA3 */
     35 #define WIND_4_SUBBANDS_1_2 (SINT32)0x18F55C90  /* gas32CoeffFor4SBs[17 et 23] = 0x18F55C90 */
     36 #define WIND_4_SUBBANDS_1_3 (SINT32)0xF60FAF37  /* gas32CoeffFor4SBs[15 et 25] = 0xF60FAF37 */
     37 #define WIND_4_SUBBANDS_1_4 (SINT32)0xFF9BB9D5  /* gas32CoeffFor4SBs[7 et 33] = 0xFF9BB9D5 */
     38 #define WIND_4_SUBBANDS_2_0 (SINT32)0x0030E2D3  /* gas32CoeffFor4SBs[2 et 38] = 0x0030E2D3 */
     39 #define WIND_4_SUBBANDS_2_1 (SINT32)0x03B23341  /* gas32CoeffFor4SBs[10 et 30] = 0x03B23341 */
     40 #define WIND_4_SUBBANDS_2_2 (SINT32)0x1F91CA46  /* gas32CoeffFor4SBs[18 et 22] = 0x1F91CA46 */
     41 #define WIND_4_SUBBANDS_2_3 (SINT32)0xFC4F91D4  /* gas32CoeffFor4SBs[14 et 26] = 0xFC4F91D4 */
     42 #define WIND_4_SUBBANDS_2_4 (SINT32)0x003D239B  /* gas32CoeffFor4SBs[6 et 34] = 0x003D239B */
     43 #define WIND_4_SUBBANDS_3_0 (SINT32)0x00599403  /* gas32CoeffFor4SBs[3 et 37] = 0x00599403 */
     44 #define WIND_4_SUBBANDS_3_1 (SINT32)0x041EEE40  /* gas32CoeffFor4SBs[11 et 29] = 0x041EEE40 */
     45 #define WIND_4_SUBBANDS_3_2 (SINT32)0x2412F251  /* gas32CoeffFor4SBs[19 et 21] = 0x2412F251 */
     46 #define WIND_4_SUBBANDS_3_3 (SINT32)0x00C8F2BC  /* gas32CoeffFor4SBs[13 et 27] = 0x00C8F2BC */
     47 #define WIND_4_SUBBANDS_3_4 (SINT32)0x007F88E4  /* gas32CoeffFor4SBs[5 et 35] = 0x007F88E4 */
     48 #define WIND_4_SUBBANDS_4_0 (SINT32)0x007DBCC8  /* gas32CoeffFor4SBs[4 et 36] = 0x007DBCC8 */
     49 #define WIND_4_SUBBANDS_4_1 (SINT32)0x034FEE2C  /* gas32CoeffFor4SBs[12 et 28] = 0x034FEE2C */
     50 #define WIND_4_SUBBANDS_4_2 (SINT32)0x25AC1FF2  /* gas32CoeffFor4SBs[20] = 0x25AC1FF2 */
     51 
     52 #define WIND_8_SUBBANDS_0_1 (SINT32)0x00B97348  /* 16 0x00B97348 */
     53 #define WIND_8_SUBBANDS_0_2 (SINT32)0x08B4307A  /* 32 0x08B4307A */
     54 #define WIND_8_SUBBANDS_1_0 (SINT32)0x00052173  /* 1 et 79 = 0x00052173 */
     55 #define WIND_8_SUBBANDS_1_1 (SINT32)0x01071B96  /* 17 et 63 = 0x01071B96 */
     56 #define WIND_8_SUBBANDS_1_2 (SINT32)0x0A9F3E9A  /* 33 et 47 = 0x0A9F3E9A*/
     57 #define WIND_8_SUBBANDS_1_3 (SINT32)0xF9312891  /* 31 et 49 = 0xF9312891 */
     58 #define WIND_8_SUBBANDS_1_4 (SINT32)0xFF8D6793  /* 15 et 65 = 0xFF8D6793 */
     59 #define WIND_8_SUBBANDS_2_0 (SINT32)0x000B3F71  /* 2 et 78 = 0x000B3F71 */
     60 #define WIND_8_SUBBANDS_2_1 (SINT32)0x0156B3CA  /* 18 et 62 = 0x0156B3CA */
     61 #define WIND_8_SUBBANDS_2_2 (SINT32)0x0C7D59B6  /* 34 et 46 = 0x0C7D59B6 */
     62 #define WIND_8_SUBBANDS_2_3 (SINT32)0xFAFF95FC  /* 30 et 50 = 0xFAFF95FC */
     63 #define WIND_8_SUBBANDS_2_4 (SINT32)0xFFC9F10E  /* 14 et 66 = 0xFFC9F10E */
     64 #define WIND_8_SUBBANDS_3_0 (SINT32)0x00122C7D  /* 3 et 77 = 0x00122C7D*/
     65 #define WIND_8_SUBBANDS_3_1 (SINT32)0x01A1B38B  /* 19 et 61 = 0x01A1B38B */
     66 #define WIND_8_SUBBANDS_3_2 (SINT32)0x0E3BB16F  /* 35 et 45 = 0x0E3BB16F */
     67 #define WIND_8_SUBBANDS_3_3 (SINT32)0xFCA86E7E  /* 29 et 51 = 0xFCA86E7E */
     68 #define WIND_8_SUBBANDS_3_4 (SINT32)0xFFFA2413  /* 13 et 67 = 0xFFFA2413 */
     69 #define WIND_8_SUBBANDS_4_0 (SINT32)0x001AFF89  /* 4 et 66 = 0x001AFF89 */
     70 #define WIND_8_SUBBANDS_4_1 (SINT32)0x01E0224C  /* 20 et 60 = 0x01E0224C */
     71 #define WIND_8_SUBBANDS_4_2 (SINT32)0x0FC721F9  /* 36 et 44 = 0x0FC721F9 */
     72 #define WIND_8_SUBBANDS_4_3 (SINT32)0xFE20435D  /* 28 et 52 = 0xFE20435D */
     73 #define WIND_8_SUBBANDS_4_4 (SINT32)0x001D8FD2  /* 12 et 68 = 0x001D8FD2 */
     74 #define WIND_8_SUBBANDS_5_0 (SINT32)0x00255A62  /* 5 et 75 = 0x00255A62 */
     75 #define WIND_8_SUBBANDS_5_1 (SINT32)0x0209291F  /* 21 et 59 = 0x0209291F */
     76 #define WIND_8_SUBBANDS_5_2 (SINT32)0x110ECEF0  /* 37 et 43 = 0x110ECEF0 */
     77 #define WIND_8_SUBBANDS_5_3 (SINT32)0xFF5EEB73  /* 27 et  53 = 0xFF5EEB73 */
     78 #define WIND_8_SUBBANDS_5_4 (SINT32)0x0034F8B6  /* 11 et 69 = 0x0034F8B6 */
     79 #define WIND_8_SUBBANDS_6_0 (SINT32)0x003060F4  /* 6 et 74 = 0x003060F4 */
     80 #define WIND_8_SUBBANDS_6_1 (SINT32)0x02138653  /* 22 et 58 = 0x02138653 */
     81 #define WIND_8_SUBBANDS_6_2 (SINT32)0x120435FA  /* 38 et 42 = 0x120435FA */
     82 #define WIND_8_SUBBANDS_6_3 (SINT32)0x005FD0FF  /* 26 et 54 = 0x005FD0FF */
     83 #define WIND_8_SUBBANDS_6_4 (SINT32)0x00415B75  /* 10 et 70 = 0x00415B75 */
     84 #define WIND_8_SUBBANDS_7_0 (SINT32)0x003A72E7  /* 7 et 73 = 0x003A72E7 */
     85 #define WIND_8_SUBBANDS_7_1 (SINT32)0x01F5F424  /* 23 et 57 = 0x01F5F424 */
     86 #define WIND_8_SUBBANDS_7_2 (SINT32)0x129C226F  /* 39 et 41 = 0x129C226F */
     87 #define WIND_8_SUBBANDS_7_3 (SINT32)0x01223EBA  /* 25 et 55 = 0x01223EBA */
     88 #define WIND_8_SUBBANDS_7_4 (SINT32)0x0044EF48  /* 9 et 71 = 0x0044EF48 */
     89 #define WIND_8_SUBBANDS_8_0 (SINT32)0x0041EC6A  /* 8 et 72 = 0x0041EC6A */
     90 #define WIND_8_SUBBANDS_8_1 (SINT32)0x01A7ECEF  /* 24 et 56 = 0x01A7ECEF */
     91 #define WIND_8_SUBBANDS_8_2 (SINT32)0x12CF6C75  /* 40 = 0x12CF6C75 */
     92 #else
     93 #define WIND_4_SUBBANDS_0_1 (SINT16)0x0166  /* gas32CoeffFor4SBs[8] = -gas32CoeffFor4SBs[32] = 0x01659F45 */
     94 #define WIND_4_SUBBANDS_0_2 (SINT16)0x115B  /* gas32CoeffFor4SBs[16] = -gas32CoeffFor4SBs[24] = 0x115B1ED2 */
     95 #define WIND_4_SUBBANDS_1_0 (SINT16)0x0012  /* gas32CoeffFor4SBs[1 et 39] = 0x001194E6 */
     96 #define WIND_4_SUBBANDS_1_1 (SINT16)0x029E  /* gas32CoeffFor4SBs[9 et 31] = 0x029DBAA3 */
     97 #define WIND_4_SUBBANDS_1_2 (SINT16)0x18F5  /* gas32CoeffFor4SBs[17 et 23] = 0x18F55C90 */
     98 #define WIND_4_SUBBANDS_1_3 (SINT16)0xF610  /* gas32CoeffFor4SBs[15 et 25] = 0xF60FAF37 */
     99 #define WIND_4_SUBBANDS_1_4 (SINT16)0xFF9C  /* gas32CoeffFor4SBs[7 et 33] = 0xFF9BB9D5 */
    100 #define WIND_4_SUBBANDS_2_0 (SINT16)0x0031  /* gas32CoeffFor4SBs[2 et 38] = 0x0030E2D3 */
    101 #define WIND_4_SUBBANDS_2_1 (SINT16)0x03B2  /* gas32CoeffFor4SBs[10 et 30] = 0x03B23341 */
    102 #define WIND_4_SUBBANDS_2_2 (SINT16)0x1F91  /* gas32CoeffFor4SBs[18 et 22] = 0x1F91CA46 */
    103 #define WIND_4_SUBBANDS_2_3 (SINT16)0xFC50  /* gas32CoeffFor4SBs[14 et 26] = 0xFC4F91D4 */
    104 #define WIND_4_SUBBANDS_2_4 (SINT16)0x003D  /* gas32CoeffFor4SBs[6 et 34] = 0x003D239B */
    105 #define WIND_4_SUBBANDS_3_0 (SINT16)0x005A  /* gas32CoeffFor4SBs[3 et 37] = 0x00599403 */
    106 #define WIND_4_SUBBANDS_3_1 (SINT16)0x041F  /* gas32CoeffFor4SBs[11 et 29] = 0x041EEE40 */
    107 #define WIND_4_SUBBANDS_3_2 (SINT16)0x2413  /* gas32CoeffFor4SBs[19 et 21] = 0x2412F251 */
    108 #define WIND_4_SUBBANDS_3_3 (SINT16)0x00C9  /* gas32CoeffFor4SBs[13 et 27] = 0x00C8F2BC */
    109 #define WIND_4_SUBBANDS_3_4 (SINT16)0x0080  /* gas32CoeffFor4SBs[5 et 35] = 0x007F88E4 */
    110 #define WIND_4_SUBBANDS_4_0 (SINT16)0x007E  /* gas32CoeffFor4SBs[4 et 36] = 0x007DBCC8 */
    111 #define WIND_4_SUBBANDS_4_1 (SINT16)0x0350  /* gas32CoeffFor4SBs[12 et 28] = 0x034FEE2C */
    112 #define WIND_4_SUBBANDS_4_2 (SINT16)0x25AC  /* gas32CoeffFor4SBs[20] = 25AC1FF2 */
    113 
    114 #define WIND_8_SUBBANDS_0_1 (SINT16)0x00B9  /* 16 0x12CF6C75 */
    115 #define WIND_8_SUBBANDS_0_2 (SINT16)0x08B4  /* 32 0x08B4307A */
    116 #define WIND_8_SUBBANDS_1_0 (SINT16)0x0005  /* 1 et 79 = 0x00052173 */
    117 #define WIND_8_SUBBANDS_1_1 (SINT16)0x0107  /* 17 et 63 = 0x01071B96 */
    118 #define WIND_8_SUBBANDS_1_2 (SINT16)0x0A9F  /* 33 et 47 = 0x0A9F3E9A*/
    119 #define WIND_8_SUBBANDS_1_3 (SINT16)0xF931  /* 31 et 49 = 0xF9312891 */
    120 #define WIND_8_SUBBANDS_1_4 (SINT16)0xFF8D  /* 15 et 65 = 0xFF8D6793 */
    121 #define WIND_8_SUBBANDS_2_0 (SINT16)0x000B  /* 2 et 78 = 0x000B3F71 */
    122 #define WIND_8_SUBBANDS_2_1 (SINT16)0x0157  /* 18 et 62 = 0x0156B3CA */
    123 #define WIND_8_SUBBANDS_2_2 (SINT16)0x0C7D  /* 34 et 46 = 0x0C7D59B6 */
    124 #define WIND_8_SUBBANDS_2_3 (SINT16)0xFB00  /* 30 et 50 = 0xFAFF95FC */
    125 #define WIND_8_SUBBANDS_2_4 (SINT16)0xFFCA  /* 14 et 66 = 0xFFC9F10E */
    126 #define WIND_8_SUBBANDS_3_0 (SINT16)0x0012  /* 3 et 77 = 0x00122C7D*/
    127 #define WIND_8_SUBBANDS_3_1 (SINT16)0x01A2  /* 19 et 61 = 0x01A1B38B */
    128 #define WIND_8_SUBBANDS_3_2 (SINT16)0x0E3C  /* 35 et 45 = 0x0E3BB16F */
    129 #define WIND_8_SUBBANDS_3_3 (SINT16)0xFCA8  /* 29 et 51 = 0xFCA86E7E */
    130 #define WIND_8_SUBBANDS_3_4 (SINT16)0xFFFA  /* 13 et 67 = 0xFFFA2413 */
    131 #define WIND_8_SUBBANDS_4_0 (SINT16)0x001B  /* 4 et 66 = 0x001AFF89 */
    132 #define WIND_8_SUBBANDS_4_1 (SINT16)0x01E0  /* 20 et 60 = 0x01E0224C */
    133 #define WIND_8_SUBBANDS_4_2 (SINT16)0x0FC7  /* 36 et 44 = 0x0FC721F9 */
    134 #define WIND_8_SUBBANDS_4_3 (SINT16)0xFE20  /* 28 et 52 = 0xFE20435D */
    135 #define WIND_8_SUBBANDS_4_4 (SINT16)0x001E  /* 12 et 68 = 0x001D8FD2 */
    136 #define WIND_8_SUBBANDS_5_0 (SINT16)0x0025  /* 5 et 75 = 0x00255A62 */
    137 #define WIND_8_SUBBANDS_5_1 (SINT16)0x0209  /* 21 et 59 = 0x0209291F */
    138 #define WIND_8_SUBBANDS_5_2 (SINT16)0x110F  /* 37 et 43 = 0x110ECEF0 */
    139 #define WIND_8_SUBBANDS_5_3 (SINT16)0xFF5F  /* 27 et  53 = 0xFF5EEB73 */
    140 #define WIND_8_SUBBANDS_5_4 (SINT16)0x0035  /* 11 et 69 = 0x0034F8B6 */
    141 #define WIND_8_SUBBANDS_6_0 (SINT16)0x0030  /* 6 et 74 = 0x003060F4 */
    142 #define WIND_8_SUBBANDS_6_1 (SINT16)0x0214  /* 22 et 58 = 0x02138653 */
    143 #define WIND_8_SUBBANDS_6_2 (SINT16)0x1204  /* 38 et 42 = 0x120435FA */
    144 #define WIND_8_SUBBANDS_6_3 (SINT16)0x0060  /* 26 et 54 = 0x005FD0FF */
    145 #define WIND_8_SUBBANDS_6_4 (SINT16)0x0041  /* 10 et 70 = 0x00415B75 */
    146 #define WIND_8_SUBBANDS_7_0 (SINT16)0x003A  /* 7 et 73 = 0x003A72E7 */
    147 #define WIND_8_SUBBANDS_7_1 (SINT16)0x01F6  /* 23 et 57 = 0x01F5F424 */
    148 #define WIND_8_SUBBANDS_7_2 (SINT16)0x129C  /* 39 et 41 = 0x129C226F */
    149 #define WIND_8_SUBBANDS_7_3 (SINT16)0x0122  /* 25 et 55 = 0x01223EBA */
    150 #define WIND_8_SUBBANDS_7_4 (SINT16)0x0045  /* 9 et 71 = 0x0044EF48 */
    151 #define WIND_8_SUBBANDS_8_0 (SINT16)0x0042  /* 8 et 72 = 0x0041EC6A */
    152 #define WIND_8_SUBBANDS_8_1 (SINT16)0x01A8  /* 24 et 56 = 0x01A7ECEF */
    153 #define WIND_8_SUBBANDS_8_2 (SINT16)0x12CF  /* 40 = 0x12CF6C75 */
    154 #endif
    155 
    156 #if (SBC_USE_ARM_PRAGMA==TRUE)
    157 #pragma arm section zidata = "sbc_s32_analysis_section"
    158 #endif
    159 static SINT32   s32DCTY[16]  = {0};
    160 static SINT32   s32X[ENC_VX_BUFFER_SIZE/2];
    161 static SINT16   *s16X=(SINT16*) s32X;      /* s16X must be 32 bits aligned cf  SHIFTUP_X8_2*/
    162 #if (SBC_USE_ARM_PRAGMA==TRUE)
    163 #pragma arm section zidata
    164 #endif
    165 
    166 /* This macro is for 4 subbands */
    167 #define SHIFTUP_X4                                                               \
    168 {                                                                                   \
    169     ps32X=(SINT32 *)(s16X+EncMaxShiftCounter+38);                                 \
    170     for (i=0;i<9;i++)                                                               \
    171     {                                                                               \
    172         *ps32X=*(ps32X-2-(ShiftCounter>>1));  ps32X--;                                 \
    173         *ps32X=*(ps32X-2-(ShiftCounter>>1));  ps32X--;                                 \
    174     }                                                                               \
    175 }
    176 #define SHIFTUP_X4_2                                                              \
    177 {                                                                                   \
    178     ps32X=(SINT32 *)(s16X+EncMaxShiftCounter+38);                                   \
    179     ps32X2=(SINT32 *)(s16X+(EncMaxShiftCounter<<1)+78);                             \
    180     for (i=0;i<9;i++)                                                               \
    181     {                                                                               \
    182         *ps32X=*(ps32X-2-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-2-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
    183         *ps32X=*(ps32X-2-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-2-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
    184     }                                                                               \
    185 }
    186 
    187 /* This macro is for 8 subbands */
    188 #define SHIFTUP_X8                                                               \
    189 {                                                                                   \
    190     ps32X=(SINT32 *)(s16X+EncMaxShiftCounter+78);                                 \
    191     for (i=0;i<9;i++)                                                               \
    192     {                                                                               \
    193         *ps32X=*(ps32X-4-(ShiftCounter>>1));  ps32X--;                                 \
    194         *ps32X=*(ps32X-4-(ShiftCounter>>1));  ps32X--;                                 \
    195         *ps32X=*(ps32X-4-(ShiftCounter>>1));  ps32X--;                                 \
    196         *ps32X=*(ps32X-4-(ShiftCounter>>1));  ps32X--;                                 \
    197     }                                                                               \
    198 }
    199 #define SHIFTUP_X8_2                                                               \
    200 {                                                                                   \
    201     ps32X=(SINT32 *)(s16X+EncMaxShiftCounter+78);                                   \
    202     ps32X2=(SINT32 *)(s16X+(EncMaxShiftCounter<<1)+158);                             \
    203     for (i=0;i<9;i++)                                                               \
    204     {                                                                               \
    205         *ps32X=*(ps32X-4-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-4-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
    206         *ps32X=*(ps32X-4-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-4-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
    207         *ps32X=*(ps32X-4-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-4-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
    208         *ps32X=*(ps32X-4-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-4-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
    209     }                                                                               \
    210 }
    211 
    212 #if (SBC_ARM_ASM_OPT==TRUE)
    213 #define WINDOW_ACCU_8_0 \
    214 {\
    215     __asm\
    216     {\
    217         MUL s32Hi,WIND_8_SUBBANDS_0_1,(s16X[ChOffset+16]-s16X[ChOffset+64]);\
    218         MLA s32Hi,WIND_8_SUBBANDS_0_2,(s16X[ChOffset+32]-s16X[ChOffset+48]),s32Hi;\
    219         MOV s32DCTY[0],s32Hi;\
    220     }\
    221 }
    222 #define WINDOW_ACCU_8_1_15 \
    223 {\
    224     __asm\
    225     {\
    226         MUL s32Hi,WIND_8_SUBBANDS_1_0,s16X[ChOffset+1];\
    227         MUL s32Hi2,WIND_8_SUBBANDS_1_0,s16X[ChOffset+64+15];\
    228         MLA s32Hi,WIND_8_SUBBANDS_1_1,s16X[ChOffset+16+1],s32Hi;\
    229         MLA s32Hi2,WIND_8_SUBBANDS_1_1,s16X[ChOffset+48+15],s32Hi2;\
    230         MLA s32Hi,WIND_8_SUBBANDS_1_2,s16X[ChOffset+32+1],s32Hi;\
    231         MLA s32Hi2,WIND_8_SUBBANDS_1_2,s16X[ChOffset+32+15],s32Hi2;\
    232         MLA s32Hi,WIND_8_SUBBANDS_1_3,s16X[ChOffset+48+1],s32Hi;\
    233         MLA s32Hi2,WIND_8_SUBBANDS_1_3,s16X[ChOffset+16+15],s32Hi2;\
    234         MLA s32Hi,WIND_8_SUBBANDS_1_4,s16X[ChOffset+64+1],s32Hi;\
    235         MLA s32Hi2,WIND_8_SUBBANDS_1_4,s16X[ChOffset+15],s32Hi2;\
    236         MOV s32DCTY[1],s32Hi;\
    237         MOV s32DCTY[15],s32Hi2;\
    238     }\
    239 }
    240 #define WINDOW_ACCU_8_2_14 \
    241 {\
    242     __asm\
    243     {\
    244         MUL s32Hi,WIND_8_SUBBANDS_2_0,s16X[ChOffset+2];\
    245         MUL s32Hi2,WIND_8_SUBBANDS_2_0,s16X[ChOffset+64+14];\
    246         MLA s32Hi,WIND_8_SUBBANDS_2_1,s16X[ChOffset+16+2],s32Hi;\
    247         MLA s32Hi2,WIND_8_SUBBANDS_2_1,s16X[ChOffset+48+14],s32Hi2;\
    248         MLA s32Hi,WIND_8_SUBBANDS_2_2,s16X[ChOffset+32+2],s32Hi;\
    249         MLA s32Hi2,WIND_8_SUBBANDS_2_2,s16X[ChOffset+32+14],s32Hi2;\
    250         MLA s32Hi,WIND_8_SUBBANDS_2_3,s16X[ChOffset+48+2],s32Hi;\
    251         MLA s32Hi2,WIND_8_SUBBANDS_2_3,s16X[ChOffset+16+14],s32Hi2;\
    252         MLA s32Hi,WIND_8_SUBBANDS_2_4,s16X[ChOffset+64+2],s32Hi;\
    253         MLA s32Hi2,WIND_8_SUBBANDS_2_4,s16X[ChOffset+14],s32Hi2;\
    254         MOV s32DCTY[2],s32Hi;\
    255         MOV s32DCTY[14],s32Hi2;\
    256     }\
    257 }
    258 #define WINDOW_ACCU_8_3_13 \
    259 {\
    260     __asm\
    261     {\
    262         MUL s32Hi,WIND_8_SUBBANDS_3_0,s16X[ChOffset+3];\
    263         MUL s32Hi2,WIND_8_SUBBANDS_3_0,s16X[ChOffset+64+13];\
    264         MLA s32Hi,WIND_8_SUBBANDS_3_1,s16X[ChOffset+16+3],s32Hi;\
    265         MLA s32Hi2,WIND_8_SUBBANDS_3_1,s16X[ChOffset+48+13],s32Hi2;\
    266         MLA s32Hi,WIND_8_SUBBANDS_3_2,s16X[ChOffset+32+3],s32Hi;\
    267         MLA s32Hi2,WIND_8_SUBBANDS_3_2,s16X[ChOffset+32+13],s32Hi2;\
    268         MLA s32Hi,WIND_8_SUBBANDS_3_3,s16X[ChOffset+48+3],s32Hi;\
    269         MLA s32Hi2,WIND_8_SUBBANDS_3_3,s16X[ChOffset+16+13],s32Hi2;\
    270         MLA s32Hi,WIND_8_SUBBANDS_3_4,s16X[ChOffset+64+3],s32Hi;\
    271         MLA s32Hi2,WIND_8_SUBBANDS_3_4,s16X[ChOffset+13],s32Hi2;\
    272         MOV s32DCTY[3],s32Hi;\
    273         MOV s32DCTY[13],s32Hi2;\
    274     }\
    275 }
    276 #define WINDOW_ACCU_8_4_12 \
    277 {\
    278     __asm\
    279     {\
    280         MUL s32Hi,WIND_8_SUBBANDS_4_0,s16X[ChOffset+4];\
    281         MUL s32Hi2,WIND_8_SUBBANDS_4_0,s16X[ChOffset+64+12];\
    282         MLA s32Hi,WIND_8_SUBBANDS_4_1,s16X[ChOffset+16+4],s32Hi;\
    283         MLA s32Hi2,WIND_8_SUBBANDS_4_1,s16X[ChOffset+48+12],s32Hi2;\
    284         MLA s32Hi,WIND_8_SUBBANDS_4_2,s16X[ChOffset+32+4],s32Hi;\
    285         MLA s32Hi2,WIND_8_SUBBANDS_4_2,s16X[ChOffset+32+12],s32Hi2;\
    286         MLA s32Hi,WIND_8_SUBBANDS_4_3,s16X[ChOffset+48+4],s32Hi;\
    287         MLA s32Hi2,WIND_8_SUBBANDS_4_3,s16X[ChOffset+16+12],s32Hi2;\
    288         MLA s32Hi,WIND_8_SUBBANDS_4_4,s16X[ChOffset+64+4],s32Hi;\
    289         MLA s32Hi2,WIND_8_SUBBANDS_4_4,s16X[ChOffset+12],s32Hi2;\
    290         MOV s32DCTY[4],s32Hi;\
    291         MOV s32DCTY[12],s32Hi2;\
    292     }\
    293 }
    294 #define WINDOW_ACCU_8_5_11 \
    295 {\
    296     __asm\
    297     {\
    298         MUL s32Hi,WIND_8_SUBBANDS_5_0,s16X[ChOffset+5];\
    299         MUL s32Hi2,WIND_8_SUBBANDS_5_0,s16X[ChOffset+64+11];\
    300         MLA s32Hi,WIND_8_SUBBANDS_5_1,s16X[ChOffset+16+5],s32Hi;\
    301         MLA s32Hi2,WIND_8_SUBBANDS_5_1,s16X[ChOffset+48+11],s32Hi2;\
    302         MLA s32Hi,WIND_8_SUBBANDS_5_2,s16X[ChOffset+32+5],s32Hi;\
    303         MLA s32Hi2,WIND_8_SUBBANDS_5_2,s16X[ChOffset+32+11],s32Hi2;\
    304         MLA s32Hi,WIND_8_SUBBANDS_5_3,s16X[ChOffset+48+5],s32Hi;\
    305         MLA s32Hi2,WIND_8_SUBBANDS_5_3,s16X[ChOffset+16+11],s32Hi2;\
    306         MLA s32Hi,WIND_8_SUBBANDS_5_4,s16X[ChOffset+64+5],s32Hi;\
    307         MLA s32Hi2,WIND_8_SUBBANDS_5_4,s16X[ChOffset+11],s32Hi2;\
    308         MOV s32DCTY[5],s32Hi;\
    309         MOV s32DCTY[11],s32Hi2;\
    310     }\
    311 }
    312 #define WINDOW_ACCU_8_6_10 \
    313 {\
    314     __asm\
    315     {\
    316         MUL s32Hi,WIND_8_SUBBANDS_6_0,s16X[ChOffset+6];\
    317         MUL s32Hi2,WIND_8_SUBBANDS_6_0,s16X[ChOffset+64+10];\
    318         MLA s32Hi,WIND_8_SUBBANDS_6_1,s16X[ChOffset+16+6],s32Hi;\
    319         MLA s32Hi2,WIND_8_SUBBANDS_6_1,s16X[ChOffset+48+10],s32Hi2;\
    320         MLA s32Hi,WIND_8_SUBBANDS_6_2,s16X[ChOffset+32+6],s32Hi;\
    321         MLA s32Hi2,WIND_8_SUBBANDS_6_2,s16X[ChOffset+32+10],s32Hi2;\
    322         MLA s32Hi,WIND_8_SUBBANDS_6_3,s16X[ChOffset+48+6],s32Hi;\
    323         MLA s32Hi2,WIND_8_SUBBANDS_6_3,s16X[ChOffset+16+10],s32Hi2;\
    324         MLA s32Hi,WIND_8_SUBBANDS_6_4,s16X[ChOffset+64+6],s32Hi;\
    325         MLA s32Hi2,WIND_8_SUBBANDS_6_4,s16X[ChOffset+10],s32Hi2;\
    326         MOV s32DCTY[6],s32Hi;\
    327         MOV s32DCTY[10],s32Hi2;\
    328     }\
    329 }
    330 #define WINDOW_ACCU_8_7_9 \
    331 {\
    332     __asm\
    333     {\
    334         MUL s32Hi,WIND_8_SUBBANDS_7_0,s16X[ChOffset+7];\
    335         MUL s32Hi2,WIND_8_SUBBANDS_7_0,s16X[ChOffset+64+9];\
    336         MLA s32Hi,WIND_8_SUBBANDS_7_1,s16X[ChOffset+16+7],s32Hi;\
    337         MLA s32Hi2,WIND_8_SUBBANDS_7_1,s16X[ChOffset+48+9],s32Hi2;\
    338         MLA s32Hi,WIND_8_SUBBANDS_7_2,s16X[ChOffset+32+7],s32Hi;\
    339         MLA s32Hi2,WIND_8_SUBBANDS_7_2,s16X[ChOffset+32+9],s32Hi2;\
    340         MLA s32Hi,WIND_8_SUBBANDS_7_3,s16X[ChOffset+48+7],s32Hi;\
    341         MLA s32Hi2,WIND_8_SUBBANDS_7_3,s16X[ChOffset+16+9],s32Hi2;\
    342         MLA s32Hi,WIND_8_SUBBANDS_7_4,s16X[ChOffset+64+7],s32Hi;\
    343         MLA s32Hi2,WIND_8_SUBBANDS_7_4,s16X[ChOffset+9],s32Hi2;\
    344         MOV s32DCTY[7],s32Hi;\
    345         MOV s32DCTY[9],s32Hi2;\
    346     }\
    347 }
    348 #define WINDOW_ACCU_8_8 \
    349 {\
    350     __asm\
    351     {\
    352         MUL s32Hi,WIND_8_SUBBANDS_8_0,(s16X[ChOffset+8]+s16X[ChOffset+8+64]);\
    353         MLA s32Hi,WIND_8_SUBBANDS_8_1,(s16X[ChOffset+8+16]+s16X[ChOffset+8+64]),s32Hi;\
    354         MLA s32Hi,WIND_8_SUBBANDS_8_2,s16X[ChOffset+8+32],s32Hi;\
    355         MOV s32DCTY[8],s32Hi;\
    356     }\
    357 }
    358 #define WINDOW_ACCU_4_0 \
    359 {\
    360     __asm\
    361     {\
    362         MUL s32Hi,WIND_4_SUBBANDS_0_1,(s16X[ChOffset+8]-s16X[ChOffset+32]);\
    363         MLA s32Hi,WIND_4_SUBBANDS_0_2,(s16X[ChOffset+16]-s16X[ChOffset+24]),s32Hi;\
    364         MOV s32DCTY[0],s32Hi;\
    365     }\
    366 }
    367 #define WINDOW_ACCU_4_1_7 \
    368 {\
    369     __asm\
    370     {\
    371         MUL s32Hi,WIND_4_SUBBANDS_1_0,s16X[ChOffset+1];\
    372         MUL s32Hi2,WIND_4_SUBBANDS_1_0,s16X[ChOffset+32+7];\
    373         MLA s32Hi,WIND_4_SUBBANDS_1_1,s16X[ChOffset+8+1],s32Hi;\
    374         MLA s32Hi2,WIND_4_SUBBANDS_1_1,s16X[ChOffset+24+7],s32Hi2;\
    375         MLA s32Hi,WIND_4_SUBBANDS_1_2,s16X[ChOffset+16+1],s32Hi;\
    376         MLA s32Hi2,WIND_4_SUBBANDS_1_2,s16X[ChOffset+16+7],s32Hi2;\
    377         MLA s32Hi,WIND_4_SUBBANDS_1_3,s16X[ChOffset+24+1],s32Hi;\
    378         MLA s32Hi2,WIND_4_SUBBANDS_1_3,s16X[ChOffset+8+7],s32Hi2;\
    379         MLA s32Hi,WIND_4_SUBBANDS_1_4,s16X[ChOffset+32+1],s32Hi;\
    380         MLA s32Hi2,WIND_4_SUBBANDS_1_4,s16X[ChOffset+7],s32Hi2;\
    381         MOV s32DCTY[1],s32Hi;\
    382         MOV s32DCTY[7],s32Hi2;\
    383     }\
    384 }
    385 #define WINDOW_ACCU_4_2_6 \
    386 {\
    387     __asm\
    388     {\
    389         MUL s32Hi,WIND_4_SUBBANDS_2_0,s16X[ChOffset+2];\
    390         MUL s32Hi2,WIND_4_SUBBANDS_2_0,s16X[ChOffset+32+6];\
    391         MLA s32Hi,WIND_4_SUBBANDS_2_1,s16X[ChOffset+8+2],s32Hi;\
    392         MLA s32Hi2,WIND_4_SUBBANDS_2_1,s16X[ChOffset+24+6],s32Hi2;\
    393         MLA s32Hi,WIND_4_SUBBANDS_2_2,s16X[ChOffset+16+2],s32Hi;\
    394         MLA s32Hi2,WIND_4_SUBBANDS_2_2,s16X[ChOffset+16+6],s32Hi2;\
    395         MLA s32Hi,WIND_4_SUBBANDS_2_3,s16X[ChOffset+24+2],s32Hi;\
    396         MLA s32Hi2,WIND_4_SUBBANDS_2_3,s16X[ChOffset+8+6],s32Hi2;\
    397         MLA s32Hi,WIND_4_SUBBANDS_2_4,s16X[ChOffset+32+2],s32Hi;\
    398         MLA s32Hi2,WIND_4_SUBBANDS_2_4,s16X[ChOffset+6],s32Hi2;\
    399         MOV s32DCTY[2],s32Hi;\
    400         MOV s32DCTY[6],s32Hi2;\
    401     }\
    402 }
    403 #define WINDOW_ACCU_4_3_5 \
    404 {\
    405     __asm\
    406     {\
    407         MUL s32Hi,WIND_4_SUBBANDS_3_0,s16X[ChOffset+3];\
    408         MUL s32Hi2,WIND_4_SUBBANDS_3_0,s16X[ChOffset+32+5];\
    409         MLA s32Hi,WIND_4_SUBBANDS_3_1,s16X[ChOffset+8+3],s32Hi;\
    410         MLA s32Hi2,WIND_4_SUBBANDS_3_1,s16X[ChOffset+24+5],s32Hi2;\
    411         MLA s32Hi,WIND_4_SUBBANDS_3_2,s16X[ChOffset+16+3],s32Hi;\
    412         MLA s32Hi2,WIND_4_SUBBANDS_3_2,s16X[ChOffset+16+5],s32Hi2;\
    413         MLA s32Hi,WIND_4_SUBBANDS_3_3,s16X[ChOffset+24+3],s32Hi;\
    414         MLA s32Hi2,WIND_4_SUBBANDS_3_3,s16X[ChOffset+8+5],s32Hi2;\
    415         MLA s32Hi,WIND_4_SUBBANDS_3_4,s16X[ChOffset+32+3],s32Hi;\
    416         MLA s32Hi2,WIND_4_SUBBANDS_3_4,s16X[ChOffset+5],s32Hi2;\
    417         MOV s32DCTY[3],s32Hi;\
    418         MOV s32DCTY[5],s32Hi2;\
    419     }\
    420 }
    421 #define WINDOW_ACCU_4_4 \
    422 {\
    423     __asm\
    424     {\
    425         MUL s32Hi,WIND_4_SUBBANDS_4_0,(s16X[ChOffset+4]+s16X[ChOffset+4+32]);\
    426         MLA s32Hi,WIND_4_SUBBANDS_4_1,(s16X[ChOffset+4+8]+s16X[ChOffset+4+24]),s32Hi;\
    427         MLA s32Hi,WIND_4_SUBBANDS_4_2,s16X[ChOffset+4+16],s32Hi;\
    428         MOV s32DCTY[4],s32Hi;\
    429     }\
    430 }
    431 
    432 #define WINDOW_PARTIAL_4 \
    433 {\
    434     WINDOW_ACCU_4_0;     WINDOW_ACCU_4_1_7;\
    435     WINDOW_ACCU_4_2_6;   WINDOW_ACCU_4_3_5;\
    436     WINDOW_ACCU_4_4;\
    437 }
    438 
    439 #define WINDOW_PARTIAL_8 \
    440 {\
    441     WINDOW_ACCU_8_0;     WINDOW_ACCU_8_1_15;\
    442     WINDOW_ACCU_8_2_14;  WINDOW_ACCU_8_3_13;\
    443     WINDOW_ACCU_8_4_12;  WINDOW_ACCU_8_5_11;\
    444     WINDOW_ACCU_8_6_10;  WINDOW_ACCU_8_7_9;\
    445     WINDOW_ACCU_8_8;\
    446 }
    447 
    448 #else
    449 #if (SBC_IPAQ_OPT==TRUE)
    450 
    451 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
    452 #define WINDOW_ACCU_8_0 \
    453 {\
    454     s64Temp=(SINT64)WIND_8_SUBBANDS_0_1*(SINT64)(s16X[ChOffset+16]-s16X[ChOffset+64]);\
    455     s64Temp+=(SINT64)WIND_8_SUBBANDS_0_2*(SINT64)(s16X[ChOffset+32]-s16X[ChOffset+48]);\
    456     s32DCTY[0]=(SINT32)(s64Temp>>16);\
    457 }
    458 #define WINDOW_ACCU_8_1_15 \
    459 {\
    460     s64Temp=(SINT64)WIND_8_SUBBANDS_1_0*(SINT64)s16X[ChOffset+1];\
    461     s64Temp2=(SINT64)WIND_8_SUBBANDS_1_0*(SINT64)s16X[ChOffset+64+15];\
    462     s64Temp+=(SINT64)WIND_8_SUBBANDS_1_1*(SINT64)s16X[ChOffset+16+1];\
    463     s64Temp2+=(SINT64)WIND_8_SUBBANDS_1_1*(SINT64)s16X[ChOffset+48+15];\
    464     s64Temp+=(SINT64)WIND_8_SUBBANDS_1_2*(SINT64)s16X[ChOffset+32+1];\
    465     s64Temp2+=(SINT64)WIND_8_SUBBANDS_1_2*(SINT64)s16X[ChOffset+32+15];\
    466     s64Temp+=(SINT64)WIND_8_SUBBANDS_1_3*(SINT64)s16X[ChOffset+48+1];\
    467     s64Temp2+=(SINT64)WIND_8_SUBBANDS_1_3*(SINT64)s16X[ChOffset+16+15];\
    468     s64Temp+=(SINT64)WIND_8_SUBBANDS_1_4*(SINT64)s16X[ChOffset+64+1];\
    469     s64Temp2+=(SINT64)WIND_8_SUBBANDS_1_4*(SINT64)s16X[ChOffset+15];\
    470     s32DCTY[1]=(SINT32)(s64Temp>>16);\
    471     s32DCTY[15]=(SINT32)(s64Temp2>>16);\
    472 }
    473 #define WINDOW_ACCU_8_2_14 \
    474 {\
    475     s64Temp=(SINT64)WIND_8_SUBBANDS_2_0*(SINT64)s16X[ChOffset+2];\
    476     s64Temp2=(SINT64)WIND_8_SUBBANDS_2_0*(SINT64)s16X[ChOffset+64+14];\
    477     s64Temp+=(SINT64)WIND_8_SUBBANDS_2_1*(SINT64)s16X[ChOffset+16+2];\
    478     s64Temp2+=(SINT64)WIND_8_SUBBANDS_2_1*(SINT64)s16X[ChOffset+48+14];\
    479     s64Temp+=(SINT64)WIND_8_SUBBANDS_2_2*(SINT64)s16X[ChOffset+32+2];\
    480     s64Temp2+=(SINT64)WIND_8_SUBBANDS_2_2*(SINT64)s16X[ChOffset+32+14];\
    481     s64Temp+=(SINT64)WIND_8_SUBBANDS_2_3*(SINT64)s16X[ChOffset+48+2];\
    482     s64Temp2+=(SINT64)WIND_8_SUBBANDS_2_3*(SINT64)s16X[ChOffset+16+14];\
    483     s64Temp+=(SINT64)WIND_8_SUBBANDS_2_4*(SINT64)s16X[ChOffset+64+2];\
    484     s64Temp2+=(SINT64)WIND_8_SUBBANDS_2_4*(SINT64)s16X[ChOffset+14];\
    485     s32DCTY[2]=(SINT32)(s64Temp>>16);\
    486     s32DCTY[14]=(SINT32)(s64Temp2>>16);\
    487 }
    488 #define WINDOW_ACCU_8_3_13 \
    489 {\
    490     s64Temp=(SINT64)WIND_8_SUBBANDS_3_0*(SINT64)s16X[ChOffset+3];\
    491     s64Temp2=(SINT64)WIND_8_SUBBANDS_3_0*(SINT64)s16X[ChOffset+64+13];\
    492     s64Temp+=(SINT64)WIND_8_SUBBANDS_3_1*(SINT64)s16X[ChOffset+16+3];\
    493     s64Temp2+=(SINT64)WIND_8_SUBBANDS_3_1*(SINT64)s16X[ChOffset+48+13];\
    494     s64Temp+=(SINT64)WIND_8_SUBBANDS_3_2*(SINT64)s16X[ChOffset+32+3];\
    495     s64Temp2+=(SINT64)WIND_8_SUBBANDS_3_2*(SINT64)s16X[ChOffset+32+13];\
    496     s64Temp+=(SINT64)WIND_8_SUBBANDS_3_3*(SINT64)s16X[ChOffset+48+3];\
    497     s64Temp2+=(SINT64)WIND_8_SUBBANDS_3_3*(SINT64)s16X[ChOffset+16+13];\
    498     s64Temp+=(SINT64)WIND_8_SUBBANDS_3_4*(SINT64)s16X[ChOffset+64+3];\
    499     s64Temp2+=(SINT64)WIND_8_SUBBANDS_3_4*(SINT64)s16X[ChOffset+13];\
    500     s32DCTY[3]=(SINT32)(s64Temp>>16);\
    501     s32DCTY[13]=(SINT32)(s64Temp2>>16);\
    502 }
    503 #define WINDOW_ACCU_8_4_12 \
    504 {\
    505     s64Temp=(SINT64)WIND_8_SUBBANDS_4_0*(SINT64)s16X[ChOffset+4];\
    506     s64Temp2=(SINT64)WIND_8_SUBBANDS_4_0*(SINT64)s16X[ChOffset+64+12];\
    507     s64Temp+=(SINT64)WIND_8_SUBBANDS_4_1*(SINT64)s16X[ChOffset+16+4];\
    508     s64Temp2+=(SINT64)WIND_8_SUBBANDS_4_1*(SINT64)s16X[ChOffset+48+12];\
    509     s64Temp+=(SINT64)WIND_8_SUBBANDS_4_2*(SINT64)s16X[ChOffset+32+4];\
    510     s64Temp2+=(SINT64)WIND_8_SUBBANDS_4_2*(SINT64)s16X[ChOffset+32+12];\
    511     s64Temp+=(SINT64)WIND_8_SUBBANDS_4_3*(SINT64)s16X[ChOffset+48+4];\
    512     s64Temp2+=(SINT64)WIND_8_SUBBANDS_4_3*(SINT64)s16X[ChOffset+16+12];\
    513     s64Temp+=(SINT64)WIND_8_SUBBANDS_4_4*(SINT64)s16X[ChOffset+64+4];\
    514     s64Temp2+=(SINT64)WIND_8_SUBBANDS_4_4*(SINT64)s16X[ChOffset+12];\
    515     s32DCTY[4]=(SINT32)(s64Temp>>16);\
    516     s32DCTY[12]=(SINT32)(s64Temp2>>16);\
    517 }
    518 #define WINDOW_ACCU_8_5_11 \
    519 {\
    520     s64Temp=(SINT64)WIND_8_SUBBANDS_5_0*(SINT64)s16X[ChOffset+5];\
    521     s64Temp2=(SINT64)WIND_8_SUBBANDS_5_0*(SINT64)s16X[ChOffset+64+11];\
    522     s64Temp+=(SINT64)WIND_8_SUBBANDS_5_1*(SINT64)s16X[ChOffset+16+5];\
    523     s64Temp2+=(SINT64)WIND_8_SUBBANDS_5_1*(SINT64)s16X[ChOffset+48+11];\
    524     s64Temp+=(SINT64)WIND_8_SUBBANDS_5_2*(SINT64)s16X[ChOffset+32+5];\
    525     s64Temp2+=(SINT64)WIND_8_SUBBANDS_5_2*(SINT64)s16X[ChOffset+32+11];\
    526     s64Temp+=(SINT64)WIND_8_SUBBANDS_5_3*(SINT64)s16X[ChOffset+48+5];\
    527     s64Temp2+=(SINT64)WIND_8_SUBBANDS_5_3*(SINT64)s16X[ChOffset+16+11];\
    528     s64Temp+=(SINT64)WIND_8_SUBBANDS_5_4*(SINT64)s16X[ChOffset+64+5];\
    529     s64Temp2+=(SINT64)WIND_8_SUBBANDS_5_4*(SINT64)s16X[ChOffset+11];\
    530     s32DCTY[5]=(SINT32)(s64Temp>>16);\
    531     s32DCTY[11]=(SINT32)(s64Temp2>>16);\
    532 }
    533 #define WINDOW_ACCU_8_6_10 \
    534 {\
    535     s64Temp=(SINT64)WIND_8_SUBBANDS_6_0*(SINT64)s16X[ChOffset+6];\
    536     s64Temp2=(SINT64)WIND_8_SUBBANDS_6_0*(SINT64)s16X[ChOffset+64+10];\
    537     s64Temp+=(SINT64)WIND_8_SUBBANDS_6_1*(SINT64)s16X[ChOffset+16+6];\
    538     s64Temp2+=(SINT64)WIND_8_SUBBANDS_6_1*(SINT64)s16X[ChOffset+48+10];\
    539     s64Temp+=(SINT64)WIND_8_SUBBANDS_6_2*(SINT64)s16X[ChOffset+32+6];\
    540     s64Temp2+=(SINT64)WIND_8_SUBBANDS_6_2*(SINT64)s16X[ChOffset+32+10];\
    541     s64Temp+=(SINT64)WIND_8_SUBBANDS_6_3*(SINT64)s16X[ChOffset+48+6];\
    542     s64Temp2+=(SINT64)WIND_8_SUBBANDS_6_3*(SINT64)s16X[ChOffset+16+10];\
    543     s64Temp+=(SINT64)WIND_8_SUBBANDS_6_4*(SINT64)s16X[ChOffset+64+6];\
    544     s64Temp2+=(SINT64)WIND_8_SUBBANDS_6_4*(SINT64)s16X[ChOffset+10];\
    545     s32DCTY[6]=(SINT32)(s64Temp>>16);\
    546     s32DCTY[10]=(SINT32)(s64Temp2>>16);\
    547 }
    548 #define WINDOW_ACCU_8_7_9 \
    549 {\
    550     s64Temp=(SINT64)WIND_8_SUBBANDS_7_0*(SINT64)s16X[ChOffset+7];\
    551     s64Temp2=(SINT64)WIND_8_SUBBANDS_7_0*(SINT64)s16X[ChOffset+64+9];\
    552     s64Temp+=(SINT64)WIND_8_SUBBANDS_7_1*(SINT64)s16X[ChOffset+16+7];\
    553     s64Temp2+=(SINT64)WIND_8_SUBBANDS_7_1*(SINT64)s16X[ChOffset+48+9];\
    554     s64Temp+=(SINT64)WIND_8_SUBBANDS_7_2*(SINT64)s16X[ChOffset+32+7];\
    555     s64Temp2+=(SINT64)WIND_8_SUBBANDS_7_2*(SINT64)s16X[ChOffset+32+9];\
    556     s64Temp+=(SINT64)WIND_8_SUBBANDS_7_3*(SINT64)s16X[ChOffset+48+7];\
    557     s64Temp2+=(SINT64)WIND_8_SUBBANDS_7_3*(SINT64)s16X[ChOffset+16+9];\
    558     s64Temp+=(SINT64)WIND_8_SUBBANDS_7_4*(SINT64)s16X[ChOffset+64+7];\
    559     s64Temp2+=(SINT64)WIND_8_SUBBANDS_7_4*(SINT64)s16X[ChOffset+9];\
    560     s32DCTY[7]=(SINT32)(s64Temp>>16);\
    561     s32DCTY[9]=(SINT32)(s64Temp2>>16);\
    562 }
    563 #define WINDOW_ACCU_8_8 \
    564 {\
    565     s64Temp=(SINT64)WIND_8_SUBBANDS_8_0*(SINT64)(s16X[ChOffset+8]+s16X[ChOffset+64+8]);\
    566     s64Temp+=(SINT64)WIND_8_SUBBANDS_8_1*(SINT64)(s16X[ChOffset+16+8]+s16X[ChOffset+48+8]);\
    567     s64Temp+=(SINT64)WIND_8_SUBBANDS_8_2*(SINT64)s16X[ChOffset+32+8];\
    568     s32DCTY[8]=(SINT32)(s64Temp>>16);\
    569 }
    570 #define WINDOW_ACCU_4_0 \
    571 {\
    572     s64Temp=(SINT64)WIND_4_SUBBANDS_0_1*(SINT64)(s16X[ChOffset+8]-s16X[ChOffset+32]);\
    573     s64Temp+=(SINT64)WIND_4_SUBBANDS_0_2*(SINT64)(s16X[ChOffset+16]-s16X[ChOffset+24]);\
    574     s32DCTY[0]=(SINT32)(s64Temp>>16);\
    575 }
    576 #define WINDOW_ACCU_4_1_7 \
    577 {\
    578     s64Temp=(SINT64)WIND_4_SUBBANDS_1_0*(SINT64)s16X[ChOffset+1];\
    579     s64Temp2=(SINT64)WIND_4_SUBBANDS_1_0*(SINT64)s16X[ChOffset+32+7];\
    580     s64Temp+=(SINT64)WIND_4_SUBBANDS_1_1*(SINT64)s16X[ChOffset+8+1];\
    581     s64Temp2+=(SINT64)WIND_4_SUBBANDS_1_1*(SINT64)s16X[ChOffset+24+7];\
    582     s64Temp+=(SINT64)WIND_4_SUBBANDS_1_2*(SINT64)s16X[ChOffset+16+1];\
    583     s64Temp2+=(SINT64)WIND_4_SUBBANDS_1_2*(SINT64)s16X[ChOffset+16+7];\
    584     s64Temp+=(SINT64)WIND_4_SUBBANDS_1_3*(SINT64)s16X[ChOffset+24+1];\
    585     s64Temp2+=(SINT64)WIND_4_SUBBANDS_1_3*(SINT64)s16X[ChOffset+8+7];\
    586     s64Temp+=(SINT64)WIND_4_SUBBANDS_1_4*(SINT64)s16X[ChOffset+32+1];\
    587     s64Temp2+=(SINT64)WIND_4_SUBBANDS_1_4*(SINT64)s16X[ChOffset+7];\
    588     s32DCTY[1]=(SINT32)(s64Temp>>16);\
    589     s32DCTY[7]=(SINT32)(s64Temp2>>16);\
    590 }
    591 #define WINDOW_ACCU_4_2_6 \
    592 {\
    593     s64Temp=(SINT64)WIND_4_SUBBANDS_2_0*(SINT64)s16X[ChOffset+2];\
    594     s64Temp2=(SINT64)WIND_4_SUBBANDS_2_0*(SINT64)s16X[ChOffset+32+6];\
    595     s64Temp+=(SINT64)WIND_4_SUBBANDS_2_1*(SINT64)s16X[ChOffset+8+2];\
    596     s64Temp2+=(SINT64)WIND_4_SUBBANDS_2_1*(SINT64)s16X[ChOffset+24+6];\
    597     s64Temp+=(SINT64)WIND_4_SUBBANDS_2_2*(SINT64)s16X[ChOffset+16+2];\
    598     s64Temp2+=(SINT64)WIND_4_SUBBANDS_2_2*(SINT64)s16X[ChOffset+16+6];\
    599     s64Temp+=(SINT64)WIND_4_SUBBANDS_2_3*(SINT64)s16X[ChOffset+24+2];\
    600     s64Temp2+=(SINT64)WIND_4_SUBBANDS_2_3*(SINT64)s16X[ChOffset+8+6];\
    601     s64Temp+=(SINT64)WIND_4_SUBBANDS_2_4*(SINT64)s16X[ChOffset+32+2];\
    602     s64Temp2+=(SINT64)WIND_4_SUBBANDS_2_4*(SINT64)s16X[ChOffset+6];\
    603     s32DCTY[2]=(SINT32)(s64Temp>>16);\
    604     s32DCTY[6]=(SINT32)(s64Temp2>>16);\
    605 }
    606 #define WINDOW_ACCU_4_3_5 \
    607 {\
    608     s64Temp=(SINT64)WIND_4_SUBBANDS_3_0*(SINT64)s16X[ChOffset+3];\
    609     s64Temp2=(SINT64)WIND_4_SUBBANDS_3_0*(SINT64)s16X[ChOffset+32+5];\
    610     s64Temp+=(SINT64)WIND_4_SUBBANDS_3_1*(SINT64)s16X[ChOffset+8+3];\
    611     s64Temp2+=(SINT64)WIND_4_SUBBANDS_3_1*(SINT64)s16X[ChOffset+24+5];\
    612     s64Temp+=(SINT64)WIND_4_SUBBANDS_3_2*(SINT64)s16X[ChOffset+16+3];\
    613     s64Temp2+=(SINT64)WIND_4_SUBBANDS_3_2*(SINT64)s16X[ChOffset+16+5];\
    614     s64Temp+=(SINT64)WIND_4_SUBBANDS_3_3*(SINT64)s16X[ChOffset+24+3];\
    615     s64Temp2+=(SINT64)WIND_4_SUBBANDS_3_3*(SINT64)s16X[ChOffset+8+5];\
    616     s64Temp+=(SINT64)WIND_4_SUBBANDS_3_4*(SINT64)s16X[ChOffset+32+3];\
    617     s64Temp2+=(SINT64)WIND_4_SUBBANDS_3_4*(SINT64)s16X[ChOffset+5];\
    618     s32DCTY[3]=(SINT32)(s64Temp>>16);\
    619     s32DCTY[5]=(SINT32)(s64Temp2>>16);\
    620 }
    621 
    622 #define WINDOW_ACCU_4_4 \
    623 {\
    624     s64Temp=(SINT64)WIND_4_SUBBANDS_4_0*(SINT64)(s16X[ChOffset+4]+s16X[ChOffset+4+32]);\
    625     s64Temp+=(SINT64)WIND_4_SUBBANDS_4_1*(SINT64)(s16X[ChOffset+4+8]+s16X[ChOffset+4+24]);\
    626     s64Temp+=(SINT64)WIND_4_SUBBANDS_4_2*(SINT64)s16X[ChOffset+4+16];\
    627     s32DCTY[4]=(SINT32)(s64Temp>>16);\
    628 }
    629 #else /* SBC_IS_64_MULT_IN_WINDOW_ACCU == FALSE */
    630 #define WINDOW_ACCU_8_0 \
    631 {\
    632     s32Temp=(SINT32)WIND_8_SUBBANDS_0_1*(SINT32)(s16X[ChOffset+16]-s16X[ChOffset+64]);\
    633     s32Temp+=(SINT32)WIND_8_SUBBANDS_0_2*(SINT32)(s16X[ChOffset+32]-s16X[ChOffset+48]);\
    634     s32DCTY[0]=(SINT32)s32Temp;\
    635 }
    636 #define WINDOW_ACCU_8_1_15 \
    637 {\
    638     s32Temp=(SINT32)WIND_8_SUBBANDS_1_0*(SINT32)s16X[ChOffset+1];\
    639     s32Temp2=(SINT32)WIND_8_SUBBANDS_1_0*(SINT32)s16X[ChOffset+64+15];\
    640     s32Temp+=(SINT32)WIND_8_SUBBANDS_1_1*(SINT32)s16X[ChOffset+16+1];\
    641     s32Temp2+=(SINT32)WIND_8_SUBBANDS_1_1*(SINT32)s16X[ChOffset+48+15];\
    642     s32Temp+=(SINT32)WIND_8_SUBBANDS_1_2*(SINT32)s16X[ChOffset+32+1];\
    643     s32Temp2+=(SINT32)WIND_8_SUBBANDS_1_2*(SINT32)s16X[ChOffset+32+15];\
    644     s32Temp+=(SINT32)WIND_8_SUBBANDS_1_3*(SINT32)s16X[ChOffset+48+1];\
    645     s32Temp2+=(SINT32)WIND_8_SUBBANDS_1_3*(SINT32)s16X[ChOffset+16+15];\
    646     s32Temp+=(SINT32)WIND_8_SUBBANDS_1_4*(SINT32)s16X[ChOffset+64+1];\
    647     s32Temp2+=(SINT32)WIND_8_SUBBANDS_1_4*(SINT32)s16X[ChOffset+15];\
    648     s32DCTY[1]=(SINT32)s32Temp;\
    649     s32DCTY[15]=(SINT32)s32Temp2;\
    650 }
    651 #define WINDOW_ACCU_8_2_14 \
    652 {\
    653     s32Temp=(SINT32)WIND_8_SUBBANDS_2_0*(SINT32)s16X[ChOffset+2];\
    654     s32Temp2=(SINT32)WIND_8_SUBBANDS_2_0*(SINT32)s16X[ChOffset+64+14];\
    655     s32Temp+=(SINT32)WIND_8_SUBBANDS_2_1*(SINT32)s16X[ChOffset+16+2];\
    656     s32Temp2+=(SINT32)WIND_8_SUBBANDS_2_1*(SINT32)s16X[ChOffset+48+14];\
    657     s32Temp+=(SINT32)WIND_8_SUBBANDS_2_2*(SINT32)s16X[ChOffset+32+2];\
    658     s32Temp2+=(SINT32)WIND_8_SUBBANDS_2_2*(SINT32)s16X[ChOffset+32+14];\
    659     s32Temp+=(SINT32)WIND_8_SUBBANDS_2_3*(SINT32)s16X[ChOffset+48+2];\
    660     s32Temp2+=(SINT32)WIND_8_SUBBANDS_2_3*(SINT32)s16X[ChOffset+16+14];\
    661     s32Temp+=(SINT32)WIND_8_SUBBANDS_2_4*(SINT32)s16X[ChOffset+64+2];\
    662     s32Temp2+=(SINT32)WIND_8_SUBBANDS_2_4*(SINT32)s16X[ChOffset+14];\
    663     s32DCTY[2]=(SINT32)s32Temp;\
    664     s32DCTY[14]=(SINT32)s32Temp2;\
    665 }
    666 #define WINDOW_ACCU_8_3_13 \
    667 {\
    668     s32Temp=(SINT32)WIND_8_SUBBANDS_3_0*(SINT32)s16X[ChOffset+3];\
    669     s32Temp2=(SINT32)WIND_8_SUBBANDS_3_0*(SINT32)s16X[ChOffset+64+13];\
    670     s32Temp+=(SINT32)WIND_8_SUBBANDS_3_1*(SINT32)s16X[ChOffset+16+3];\
    671     s32Temp2+=(SINT32)WIND_8_SUBBANDS_3_1*(SINT32)s16X[ChOffset+48+13];\
    672     s32Temp+=(SINT32)WIND_8_SUBBANDS_3_2*(SINT32)s16X[ChOffset+32+3];\
    673     s32Temp2+=(SINT32)WIND_8_SUBBANDS_3_2*(SINT32)s16X[ChOffset+32+13];\
    674     s32Temp+=(SINT32)WIND_8_SUBBANDS_3_3*(SINT32)s16X[ChOffset+48+3];\
    675     s32Temp2+=(SINT32)WIND_8_SUBBANDS_3_3*(SINT32)s16X[ChOffset+16+13];\
    676     s32Temp+=(SINT32)WIND_8_SUBBANDS_3_4*(SINT32)s16X[ChOffset+64+3];\
    677     s32Temp2+=(SINT32)WIND_8_SUBBANDS_3_4*(SINT32)s16X[ChOffset+13];\
    678     s32DCTY[3]=(SINT32)s32Temp;\
    679     s32DCTY[13]=(SINT32)s32Temp2;\
    680 }
    681 #define WINDOW_ACCU_8_4_12 \
    682 {\
    683     s32Temp=(SINT32)WIND_8_SUBBANDS_4_0*(SINT32)s16X[ChOffset+4];\
    684     s32Temp2=(SINT32)WIND_8_SUBBANDS_4_0*(SINT32)s16X[ChOffset+64+12];\
    685     s32Temp+=(SINT32)WIND_8_SUBBANDS_4_1*(SINT32)s16X[ChOffset+16+4];\
    686     s32Temp2+=(SINT32)WIND_8_SUBBANDS_4_1*(SINT32)s16X[ChOffset+48+12];\
    687     s32Temp+=(SINT32)WIND_8_SUBBANDS_4_2*(SINT32)s16X[ChOffset+32+4];\
    688     s32Temp2+=(SINT32)WIND_8_SUBBANDS_4_2*(SINT32)s16X[ChOffset+32+12];\
    689     s32Temp+=(SINT32)WIND_8_SUBBANDS_4_3*(SINT32)s16X[ChOffset+48+4];\
    690     s32Temp2+=(SINT32)WIND_8_SUBBANDS_4_3*(SINT32)s16X[ChOffset+16+12];\
    691     s32Temp+=(SINT32)WIND_8_SUBBANDS_4_4*(SINT32)s16X[ChOffset+64+4];\
    692     s32Temp2+=(SINT32)WIND_8_SUBBANDS_4_4*(SINT32)s16X[ChOffset+12];\
    693     s32DCTY[4]=(SINT32)s32Temp;\
    694     s32DCTY[12]=(SINT32)s32Temp2;\
    695 }
    696 #define WINDOW_ACCU_8_5_11 \
    697 {\
    698     s32Temp=(SINT32)WIND_8_SUBBANDS_5_0*(SINT32)s16X[ChOffset+5];\
    699     s32Temp2=(SINT32)WIND_8_SUBBANDS_5_0*(SINT32)s16X[ChOffset+64+11];\
    700     s32Temp+=(SINT32)WIND_8_SUBBANDS_5_1*(SINT32)s16X[ChOffset+16+5];\
    701     s32Temp2+=(SINT32)WIND_8_SUBBANDS_5_1*(SINT32)s16X[ChOffset+48+11];\
    702     s32Temp+=(SINT32)WIND_8_SUBBANDS_5_2*(SINT32)s16X[ChOffset+32+5];\
    703     s32Temp2+=(SINT32)WIND_8_SUBBANDS_5_2*(SINT32)s16X[ChOffset+32+11];\
    704     s32Temp+=(SINT32)WIND_8_SUBBANDS_5_3*(SINT32)s16X[ChOffset+48+5];\
    705     s32Temp2+=(SINT32)WIND_8_SUBBANDS_5_3*(SINT32)s16X[ChOffset+16+11];\
    706     s32Temp+=(SINT32)WIND_8_SUBBANDS_5_4*(SINT32)s16X[ChOffset+64+5];\
    707     s32Temp2+=(SINT32)WIND_8_SUBBANDS_5_4*(SINT32)s16X[ChOffset+11];\
    708     s32DCTY[5]=(SINT32)s32Temp;\
    709     s32DCTY[11]=(SINT32)s32Temp2;\
    710 }
    711 #define WINDOW_ACCU_8_6_10 \
    712 {\
    713     s32Temp=(SINT32)WIND_8_SUBBANDS_6_0*(SINT32)s16X[ChOffset+6];\
    714     s32Temp2=(SINT32)WIND_8_SUBBANDS_6_0*(SINT32)s16X[ChOffset+64+10];\
    715     s32Temp+=(SINT32)WIND_8_SUBBANDS_6_1*(SINT32)s16X[ChOffset+16+6];\
    716     s32Temp2+=(SINT32)WIND_8_SUBBANDS_6_1*(SINT32)s16X[ChOffset+48+10];\
    717     s32Temp+=(SINT32)WIND_8_SUBBANDS_6_2*(SINT32)s16X[ChOffset+32+6];\
    718     s32Temp2+=(SINT32)WIND_8_SUBBANDS_6_2*(SINT32)s16X[ChOffset+32+10];\
    719     s32Temp+=(SINT32)WIND_8_SUBBANDS_6_3*(SINT32)s16X[ChOffset+48+6];\
    720     s32Temp2+=(SINT32)WIND_8_SUBBANDS_6_3*(SINT32)s16X[ChOffset+16+10];\
    721     s32Temp+=(SINT32)WIND_8_SUBBANDS_6_4*(SINT32)s16X[ChOffset+64+6];\
    722     s32Temp2+=(SINT32)WIND_8_SUBBANDS_6_4*(SINT32)s16X[ChOffset+10];\
    723     s32DCTY[6]=(SINT32)s32Temp;\
    724     s32DCTY[10]=(SINT32)s32Temp2;\
    725 }
    726 #define WINDOW_ACCU_8_7_9 \
    727 {\
    728     s32Temp=(SINT32)WIND_8_SUBBANDS_7_0*(SINT32)s16X[ChOffset+7];\
    729     s32Temp2=(SINT32)WIND_8_SUBBANDS_7_0*(SINT32)s16X[ChOffset+64+9];\
    730     s32Temp+=(SINT32)WIND_8_SUBBANDS_7_1*(SINT32)s16X[ChOffset+16+7];\
    731     s32Temp2+=(SINT32)WIND_8_SUBBANDS_7_1*(SINT32)s16X[ChOffset+48+9];\
    732     s32Temp+=(SINT32)WIND_8_SUBBANDS_7_2*(SINT32)s16X[ChOffset+32+7];\
    733     s32Temp2+=(SINT32)WIND_8_SUBBANDS_7_2*(SINT32)s16X[ChOffset+32+9];\
    734     s32Temp+=(SINT32)WIND_8_SUBBANDS_7_3*(SINT32)s16X[ChOffset+48+7];\
    735     s32Temp2+=(SINT32)WIND_8_SUBBANDS_7_3*(SINT32)s16X[ChOffset+16+9];\
    736     s32Temp+=(SINT32)WIND_8_SUBBANDS_7_4*(SINT32)s16X[ChOffset+64+7];\
    737     s32Temp2+=(SINT32)WIND_8_SUBBANDS_7_4*(SINT32)s16X[ChOffset+9];\
    738     s32DCTY[7]=(SINT32)s32Temp;\
    739     s32DCTY[9]=(SINT32)s32Temp2;\
    740 }
    741 #define WINDOW_ACCU_8_8 \
    742 {\
    743     s32Temp=(SINT32)WIND_8_SUBBANDS_8_0*(SINT32)(s16X[ChOffset+8]+s16X[ChOffset+64+8]);\
    744     s32Temp+=(SINT32)WIND_8_SUBBANDS_8_1*(SINT32)(s16X[ChOffset+16+8]+s16X[ChOffset+48+8]);\
    745     s32Temp+=(SINT32)WIND_8_SUBBANDS_8_2*(SINT32)s16X[ChOffset+32+8];\
    746     s32DCTY[8]=(SINT32)s32Temp;\
    747 }
    748 #define WINDOW_ACCU_4_0 \
    749 {\
    750     s32Temp=(SINT32)WIND_4_SUBBANDS_0_1*(SINT32)(s16X[ChOffset+8]-s16X[ChOffset+32]);\
    751     s32Temp+=(SINT32)WIND_4_SUBBANDS_0_2*(SINT32)(s16X[ChOffset+16]-s16X[ChOffset+24]);\
    752     s32DCTY[0]=(SINT32)(s32Temp);\
    753 }
    754 #define WINDOW_ACCU_4_1_7 \
    755 {\
    756     s32Temp=(SINT32)WIND_4_SUBBANDS_1_0*(SINT32)s16X[ChOffset+1];\
    757     s32Temp2=(SINT32)WIND_4_SUBBANDS_1_0*(SINT32)s16X[ChOffset+32+7];\
    758     s32Temp+=(SINT32)WIND_4_SUBBANDS_1_1*(SINT32)s16X[ChOffset+8+1];\
    759     s32Temp2+=(SINT32)WIND_4_SUBBANDS_1_1*(SINT32)s16X[ChOffset+24+7];\
    760     s32Temp+=(SINT32)WIND_4_SUBBANDS_1_2*(SINT32)s16X[ChOffset+16+1];\
    761     s32Temp2+=(SINT32)WIND_4_SUBBANDS_1_2*(SINT32)s16X[ChOffset+16+7];\
    762     s32Temp+=(SINT32)WIND_4_SUBBANDS_1_3*(SINT32)s16X[ChOffset+24+1];\
    763     s32Temp2+=(SINT32)WIND_4_SUBBANDS_1_3*(SINT32)s16X[ChOffset+8+7];\
    764     s32Temp+=(SINT32)WIND_4_SUBBANDS_1_4*(SINT32)s16X[ChOffset+32+1];\
    765     s32Temp2+=(SINT32)WIND_4_SUBBANDS_1_4*(SINT32)s16X[ChOffset+7];\
    766     s32DCTY[1]=(SINT32)(s32Temp);\
    767     s32DCTY[7]=(SINT32)(s32Temp2);\
    768 }
    769 #define WINDOW_ACCU_4_2_6 \
    770 {\
    771     s32Temp=(SINT32)WIND_4_SUBBANDS_2_0*(SINT32)s16X[ChOffset+2];\
    772     s32Temp2=(SINT32)WIND_4_SUBBANDS_2_0*(SINT32)s16X[ChOffset+32+6];\
    773     s32Temp+=(SINT32)WIND_4_SUBBANDS_2_1*(SINT32)s16X[ChOffset+8+2];\
    774     s32Temp2+=(SINT32)WIND_4_SUBBANDS_2_1*(SINT32)s16X[ChOffset+24+6];\
    775     s32Temp+=(SINT32)WIND_4_SUBBANDS_2_2*(SINT32)s16X[ChOffset+16+2];\
    776     s32Temp2+=(SINT32)WIND_4_SUBBANDS_2_2*(SINT32)s16X[ChOffset+16+6];\
    777     s32Temp+=(SINT32)WIND_4_SUBBANDS_2_3*(SINT32)s16X[ChOffset+24+2];\
    778     s32Temp2+=(SINT32)WIND_4_SUBBANDS_2_3*(SINT32)s16X[ChOffset+8+6];\
    779     s32Temp+=(SINT32)WIND_4_SUBBANDS_2_4*(SINT32)s16X[ChOffset+32+2];\
    780     s32Temp2+=(SINT32)WIND_4_SUBBANDS_2_4*(SINT32)s16X[ChOffset+6];\
    781     s32DCTY[2]=(SINT32)(s32Temp);\
    782     s32DCTY[6]=(SINT32)(s32Temp2);\
    783 }
    784 #define WINDOW_ACCU_4_3_5 \
    785 {\
    786     s32Temp=(SINT32)WIND_4_SUBBANDS_3_0*(SINT32)s16X[ChOffset+3];\
    787     s32Temp2=(SINT32)WIND_4_SUBBANDS_3_0*(SINT32)s16X[ChOffset+32+5];\
    788     s32Temp+=(SINT32)WIND_4_SUBBANDS_3_1*(SINT32)s16X[ChOffset+8+3];\
    789     s32Temp2+=(SINT32)WIND_4_SUBBANDS_3_1*(SINT32)s16X[ChOffset+24+5];\
    790     s32Temp+=(SINT32)WIND_4_SUBBANDS_3_2*(SINT32)s16X[ChOffset+16+3];\
    791     s32Temp2+=(SINT32)WIND_4_SUBBANDS_3_2*(SINT32)s16X[ChOffset+16+5];\
    792     s32Temp+=(SINT32)WIND_4_SUBBANDS_3_3*(SINT32)s16X[ChOffset+24+3];\
    793     s32Temp2+=(SINT32)WIND_4_SUBBANDS_3_3*(SINT32)s16X[ChOffset+8+5];\
    794     s32Temp+=(SINT32)WIND_4_SUBBANDS_3_4*(SINT32)s16X[ChOffset+32+3];\
    795     s32Temp2+=(SINT32)WIND_4_SUBBANDS_3_4*(SINT32)s16X[ChOffset+5];\
    796     s32DCTY[3]=(SINT32)(s32Temp);\
    797     s32DCTY[5]=(SINT32)(s32Temp2);\
    798 }
    799 
    800 #define WINDOW_ACCU_4_4 \
    801 {\
    802     s32Temp=(SINT32)WIND_4_SUBBANDS_4_0*(SINT32)(s16X[ChOffset+4]+s16X[ChOffset+4+32]);\
    803     s32Temp+=(SINT32)WIND_4_SUBBANDS_4_1*(SINT32)(s16X[ChOffset+4+8]+s16X[ChOffset+4+24]);\
    804     s32Temp+=(SINT32)WIND_4_SUBBANDS_4_2*(SINT32)s16X[ChOffset+4+16];\
    805     s32DCTY[4]=(SINT32)(s32Temp);\
    806 }
    807 #endif
    808 #define WINDOW_PARTIAL_4 \
    809 {\
    810     WINDOW_ACCU_4_0;     WINDOW_ACCU_4_1_7;\
    811     WINDOW_ACCU_4_2_6;   WINDOW_ACCU_4_3_5;\
    812     WINDOW_ACCU_4_4;\
    813 }
    814 
    815 #define WINDOW_PARTIAL_8 \
    816 {\
    817     WINDOW_ACCU_8_0;         WINDOW_ACCU_8_1_15;\
    818     WINDOW_ACCU_8_2_14;      WINDOW_ACCU_8_3_13;\
    819     WINDOW_ACCU_8_4_12;      WINDOW_ACCU_8_5_11;\
    820     WINDOW_ACCU_8_6_10;      WINDOW_ACCU_8_7_9;\
    821     WINDOW_ACCU_8_8;\
    822 }
    823 #else
    824 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
    825 #define WINDOW_ACCU_4(i) \
    826 {\
    827     s64Temp=((SINT64)gas32CoeffFor4SBs[i] * (SINT64)s16X[ChOffset+i]);                                    \
    828     s64Temp+=((SINT64)gas32CoeffFor4SBs[(i+8)] * (SINT64)s16X[ChOffset+i+8]);                                    \
    829     s64Temp+=((SINT64)gas32CoeffFor4SBs[(i+16)] * (SINT64)s16X[ChOffset+i+16]);                                    \
    830     s64Temp+=((SINT64)gas32CoeffFor4SBs[(i+24)] * (SINT64)s16X[ChOffset+i+24]);                                    \
    831     s64Temp+=((SINT64)gas32CoeffFor4SBs[(i+32)] * (SINT64)s16X[ChOffset+i+32]);                                    \
    832     s32DCTY[i]=(SINT32)(s64Temp>>16);\
    833 	/*printf("s32DCTY4: 0x%x \n", s32DCTY[i]);*/\
    834 }
    835 #else
    836 #define WINDOW_ACCU_4(i) \
    837 {\
    838     s32DCTY[i]=(gas32CoeffFor4SBs[i * 2] * s16X[ChOffset+i])                                    \
    839             +  (((SINT32)(UINT16)(gas32CoeffFor4SBs[(i * 2) + 1]) * s16X[ChOffset+i]) >> 16);   \
    840     s32DCTY[i]+=(gas32CoeffFor4SBs[(i+8) * 2] * s16X[ChOffset+i+8])                                    \
    841             +  (((SINT32)(UINT16)(gas32CoeffFor4SBs[((i+8) * 2) + 1]) * s16X[ChOffset+i+8]) >> 16);   \
    842     s32DCTY[i]+=(gas32CoeffFor4SBs[(i+16) * 2] * s16X[ChOffset+i+16])                                    \
    843             +  (((SINT32)(UINT16)(gas32CoeffFor4SBs[((i+16) * 2) + 1]) * s16X[ChOffset+i+16]) >> 16);   \
    844     s32DCTY[i]+=(gas32CoeffFor4SBs[(i+24) * 2] * s16X[ChOffset+i+24])                                    \
    845             +  (((SINT32)(UINT16)(gas32CoeffFor4SBs[((i+24) * 2) + 1]) * s16X[ChOffset+i+24]) >> 16);   \
    846     s32DCTY[i]+=(gas32CoeffFor4SBs[(i+32) * 2] * s16X[ChOffset+i+32])                                    \
    847             +  (((SINT32)(UINT16)(gas32CoeffFor4SBs[((i+32) * 2) + 1]) * s16X[ChOffset+i+32]) >> 16);   \
    848 }
    849 #endif
    850 #define WINDOW_PARTIAL_4 \
    851 {\
    852     WINDOW_ACCU_4(0);      WINDOW_ACCU_4(1);\
    853     WINDOW_ACCU_4(2);      WINDOW_ACCU_4(3);\
    854     WINDOW_ACCU_4(4);      WINDOW_ACCU_4(5);\
    855     WINDOW_ACCU_4(6);      WINDOW_ACCU_4(7);\
    856 }
    857 
    858 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
    859 #define WINDOW_ACCU_8(i) \
    860 {\
    861     s64Temp = ((((SINT64)gas32CoeffFor8SBs[i]      * (SINT64)s16X[ChOffset+i]   )));                 \
    862     s64Temp+= ((((SINT64)gas32CoeffFor8SBs[(i+16)] * (SINT64)s16X[ChOffset+i+16])));                 \
    863     s64Temp+= ((((SINT64)gas32CoeffFor8SBs[(i+32)] * (SINT64)s16X[ChOffset+i+32])));                 \
    864     s64Temp+= ((((SINT64)gas32CoeffFor8SBs[(i+48)] * (SINT64)s16X[ChOffset+i+48])));                 \
    865     s64Temp+= ((((SINT64)gas32CoeffFor8SBs[(i+64)] * (SINT64)s16X[ChOffset+i+64])));                 \
    866 	/*printf("s32DCTY8: %d= 0x%x * %d\n", s32DCTY[i], gas32CoeffFor8SBs[i], s16X[ChOffset+i]);*/     \
    867     s32DCTY[i]=(SINT32)(s64Temp>>16);\
    868 }
    869 #else
    870 #define WINDOW_ACCU_8(i) \
    871 {\
    872     s32DCTY[i]=(gas32CoeffFor8SBs[i * 2] * s16X[ChOffset+i])                                    \
    873             +  (((SINT32)(UINT16)(gas32CoeffFor8SBs[(i * 2) + 1]) * s16X[ChOffset+i]) >> 16);   \
    874     s32DCTY[i]+=(gas32CoeffFor8SBs[(i+16) * 2] * s16X[ChOffset+i+16])                                    \
    875             +  (((SINT32)(UINT16)(gas32CoeffFor8SBs[((i+16) * 2) + 1]) * s16X[ChOffset+i+16]) >> 16);   \
    876     s32DCTY[i]+=(gas32CoeffFor8SBs[(i+32) * 2] * s16X[ChOffset+i+32])                                    \
    877             +  (((SINT32)(UINT16)(gas32CoeffFor8SBs[((i+32) * 2) + 1]) * s16X[ChOffset+i+32]) >> 16);   \
    878     s32DCTY[i]+=(gas32CoeffFor8SBs[(i+48) * 2] * s16X[ChOffset+i+48])                                    \
    879             +  (((SINT32)(UINT16)(gas32CoeffFor8SBs[((i+48) * 2) + 1]) * s16X[ChOffset+i+48]) >> 16);   \
    880     s32DCTY[i]+=(gas32CoeffFor8SBs[(i+64) * 2] * s16X[ChOffset+i+64])                                    \
    881             +  (((SINT32)(UINT16)(gas32CoeffFor8SBs[((i+64) * 2) + 1]) * s16X[ChOffset+i+64]) >> 16);   \
    882 	/*printf("s32DCTY8: %d = 0x%4x%4x * %d\n", s32DCTY[i], gas32CoeffFor8SBs[i * 2], (gas32CoeffFor8SBs[(i * 2) + 1]), s16X[ChOffset+i]);*/\
    883     /*s32DCTY[i]=(SINT32)(s64Temp>>16);*/\
    884 }
    885 #endif
    886 #define WINDOW_PARTIAL_8 \
    887 {\
    888     WINDOW_ACCU_8(0);      WINDOW_ACCU_8(1);\
    889     WINDOW_ACCU_8(2);      WINDOW_ACCU_8(3);\
    890     WINDOW_ACCU_8(4);      WINDOW_ACCU_8(5);\
    891     WINDOW_ACCU_8(6);      WINDOW_ACCU_8(7);\
    892     WINDOW_ACCU_8(8);      WINDOW_ACCU_8(9);\
    893     WINDOW_ACCU_8(10);     WINDOW_ACCU_8(11);\
    894     WINDOW_ACCU_8(12);     WINDOW_ACCU_8(13);\
    895     WINDOW_ACCU_8(14);     WINDOW_ACCU_8(15);\
    896 }
    897 #endif
    898 #endif
    899 
    900 static SINT16 ShiftCounter=0;
    901 extern SINT16 EncMaxShiftCounter;
    902 /****************************************************************************
    903 * SbcAnalysisFilter - performs Analysis of the input audio stream
    904 *
    905 * RETURNS : N/A
    906 */
    907 void SbcAnalysisFilter4(SBC_ENC_PARAMS *pstrEncParams)
    908 {
    909     SINT16 *ps16PcmBuf;
    910     SINT32 *ps32SbBuf;
    911     SINT32  s32Blk,s32Ch;
    912     SINT32  s32NumOfChannels, s32NumOfBlocks;
    913     SINT32 i,*ps32X,*ps32X2;
    914     SINT32 Offset,Offset2,ChOffset;
    915 #if (SBC_ARM_ASM_OPT==TRUE)
    916     register SINT32 s32Hi,s32Hi2;
    917 #else
    918 #if (SBC_IPAQ_OPT==TRUE)
    919 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
    920     register SINT64 s64Temp,s64Temp2;
    921 #else
    922 	register SINT32 s32Temp,s32Temp2;
    923 #endif
    924 #else
    925 
    926 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
    927     SINT64 s64Temp;
    928 #endif
    929 
    930 #endif
    931 #endif
    932 
    933     s32NumOfChannels = pstrEncParams->s16NumOfChannels;
    934     s32NumOfBlocks   = pstrEncParams->s16NumOfBlocks;
    935 
    936     ps16PcmBuf = pstrEncParams->ps16NextPcmBuffer;
    937 
    938     ps32SbBuf  = pstrEncParams->s32SbBuffer;
    939     Offset2=(SINT32)(EncMaxShiftCounter+40);
    940     for (s32Blk=0; s32Blk <s32NumOfBlocks; s32Blk++)
    941     {
    942         Offset=(SINT32)(EncMaxShiftCounter-ShiftCounter);
    943         /* Store new samples */
    944         if (s32NumOfChannels==1)
    945         {
    946             s16X[3+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
    947             s16X[2+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
    948             s16X[1+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
    949             s16X[0+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
    950         }
    951         else
    952         {
    953             s16X[3+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
    954             s16X[Offset2+3+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
    955             s16X[2+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
    956             s16X[Offset2+2+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
    957             s16X[1+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
    958             s16X[Offset2+1+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
    959             s16X[0+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
    960             s16X[Offset2+0+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
    961         }
    962         for (s32Ch=0;s32Ch<s32NumOfChannels;s32Ch++)
    963         {
    964             ChOffset=s32Ch*Offset2+Offset;
    965 
    966             WINDOW_PARTIAL_4
    967 
    968             SBC_FastIDCT4(s32DCTY, ps32SbBuf);
    969 
    970             ps32SbBuf +=SUB_BANDS_4;
    971         }
    972         if (s32NumOfChannels==1)
    973         {
    974             if (ShiftCounter>=EncMaxShiftCounter)
    975             {
    976                 SHIFTUP_X4;
    977                 ShiftCounter=0;
    978             }
    979             else
    980             {
    981                 ShiftCounter+=SUB_BANDS_4;
    982             }
    983         }
    984         else
    985         {
    986             if (ShiftCounter>=EncMaxShiftCounter)
    987             {
    988                 SHIFTUP_X4_2;
    989                 ShiftCounter=0;
    990             }
    991             else
    992             {
    993                 ShiftCounter+=SUB_BANDS_4;
    994             }
    995         }
    996     }
    997 }
    998 
    999 /* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
   1000 void SbcAnalysisFilter8 (SBC_ENC_PARAMS *pstrEncParams)
   1001 {
   1002     SINT16 *ps16PcmBuf;
   1003     SINT32 *ps32SbBuf;
   1004     SINT32  s32Blk,s32Ch;                                     /* counter for block*/
   1005     SINT32 Offset,Offset2;
   1006     SINT32  s32NumOfChannels, s32NumOfBlocks;
   1007     SINT32 i,*ps32X,*ps32X2;
   1008     SINT32 ChOffset;
   1009 #if (SBC_ARM_ASM_OPT==TRUE)
   1010     register SINT32 s32Hi,s32Hi2;
   1011 #else
   1012 #if (SBC_IPAQ_OPT==TRUE)
   1013 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
   1014     register SINT64 s64Temp,s64Temp2;
   1015 #else
   1016 	register SINT32 s32Temp,s32Temp2;
   1017 #endif
   1018 #else
   1019 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
   1020     SINT64 s64Temp;
   1021 #endif
   1022 #endif
   1023 #endif
   1024 
   1025     s32NumOfChannels = pstrEncParams->s16NumOfChannels;
   1026     s32NumOfBlocks   = pstrEncParams->s16NumOfBlocks;
   1027 
   1028     ps16PcmBuf = pstrEncParams->ps16NextPcmBuffer;
   1029 
   1030     ps32SbBuf  = pstrEncParams->s32SbBuffer;
   1031     Offset2=(SINT32)(EncMaxShiftCounter+80);
   1032     for (s32Blk=0; s32Blk <s32NumOfBlocks; s32Blk++)
   1033     {
   1034         Offset=(SINT32)(EncMaxShiftCounter-ShiftCounter);
   1035         /* Store new samples */
   1036         if (s32NumOfChannels==1)
   1037         {
   1038             s16X[7+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
   1039             s16X[6+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
   1040             s16X[5+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
   1041             s16X[4+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
   1042             s16X[3+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
   1043             s16X[2+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
   1044             s16X[1+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
   1045             s16X[0+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
   1046         }
   1047         else
   1048         {
   1049             s16X[7+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
   1050             s16X[Offset2+7+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
   1051             s16X[6+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
   1052             s16X[Offset2+6+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
   1053             s16X[5+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
   1054             s16X[Offset2+5+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
   1055             s16X[4+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
   1056             s16X[Offset2+4+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
   1057             s16X[3+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
   1058             s16X[Offset2+3+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
   1059             s16X[2+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
   1060             s16X[Offset2+2+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
   1061             s16X[1+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
   1062             s16X[Offset2+1+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
   1063             s16X[0+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
   1064             s16X[Offset2+0+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
   1065         }
   1066         for (s32Ch=0;s32Ch<s32NumOfChannels;s32Ch++)
   1067         {
   1068             ChOffset=s32Ch*Offset2+Offset;
   1069 
   1070             WINDOW_PARTIAL_8
   1071 
   1072             SBC_FastIDCT8 (s32DCTY, ps32SbBuf);
   1073 
   1074             ps32SbBuf +=SUB_BANDS_8;
   1075         }
   1076         if (s32NumOfChannels==1)
   1077         {
   1078             if (ShiftCounter>=EncMaxShiftCounter)
   1079             {
   1080                 SHIFTUP_X8;
   1081                 ShiftCounter=0;
   1082             }
   1083             else
   1084             {
   1085                 ShiftCounter+=SUB_BANDS_8;
   1086             }
   1087         }
   1088         else
   1089         {
   1090             if (ShiftCounter>=EncMaxShiftCounter)
   1091             {
   1092                 SHIFTUP_X8_2;
   1093                 ShiftCounter=0;
   1094             }
   1095             else
   1096             {
   1097                 ShiftCounter+=SUB_BANDS_8;
   1098             }
   1099         }
   1100     }
   1101 }
   1102 
   1103 void SbcAnalysisInit (void)
   1104 {
   1105     memset(s16X,0,ENC_VX_BUFFER_SIZE*sizeof(SINT16));
   1106     ShiftCounter=0;
   1107 }
   1108