1250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/* ------------------------------------------------------------------ 2250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Copyright (C) 1998-2009 PacketVideo 3250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 4250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * you may not use this file except in compliance with the License. 6250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * You may obtain a copy of the License at 7250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 8250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 10250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Unless required by applicable law or agreed to in writing, software 11250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * express or implied. 14250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * See the License for the specific language governing permissions 15250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * and limitations under the License. 16250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * ------------------------------------------------------------------- 17250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber */ 18250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/* 19250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 20250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 21250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber PacketVideo Corp. 22250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber MP3 Decoder Library 23250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 24250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Filename: mdct_18.cpp 25250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 26250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Date: 09/21/2007 27250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 28250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 29250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REVISION HISTORY 30250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 31250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 32250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Description: 33250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 34250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 35250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber INPUT AND OUTPUT DEFINITIONS 36250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 37250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas HuberInput 38250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 vec[], input vector of length 18 39250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 *history input for overlap and add, vector updated with 40250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber next overlap and add values 41250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber const int32 *window sine window used in the mdct, three types are allowed 42250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber noraml, start and stop 43250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas HuberReturns 44250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber none mdct computation in-place 45250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 46250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 47250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 48250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber FUNCTION DESCRIPTION 49250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 50250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Returns the mdct of length 18 of the input vector, as well as the overlap 51250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vector for next iteration ( on history[]) 52250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 53250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 54250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REQUIREMENTS 55250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 56250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 57250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 58250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REFERENCES 59250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 60250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 61250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber PSEUDO-CODE 62250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 63250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 64250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber*/ 65250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 66250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#if ( !defined(PV_ARM_GCC_V5) && !defined(PV_ARM_GCC_V4) && !defined(PV_ARM_V5) && !defined(PV_ARM_V4) ) 67250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 68250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; INCLUDES 69250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 70250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 71250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pv_mp3dec_fxd_op.h" 72250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pvmp3_mdct_18.h" 73250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 74250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 75250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 76250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; MACROS 77250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Define module specific macros here 78250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 79250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 80250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 81250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 82250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; DEFINES 83250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Include all pre-processor statements here. Include conditional 84250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; compile variables also. 85250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 86250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 87250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 88250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; LOCAL FUNCTION DEFINITIONS 89250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Function Prototype declaration 90250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 91250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 92250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 93250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 94250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Variable declaration - defined here and used outside this module 95250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 96250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberconst int32 cosTerms_dct18[9] = 97250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 98250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Qfmt(0.50190991877167f), Qfmt(0.51763809020504f), Qfmt(0.55168895948125f), 99250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Qfmt(0.61038729438073f), Qfmt(0.70710678118655f), Qfmt(0.87172339781055f), 100250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Qfmt(1.18310079157625f), Qfmt(1.93185165257814f), Qfmt(5.73685662283493f) 101250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber}; 102250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 103250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 104250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberconst int32 cosTerms_1_ov_cos_phi[18] = 105250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 106250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 107250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Qfmt1(0.50047634258166f), Qfmt1(0.50431448029008f), Qfmt1(0.51213975715725f), 108250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Qfmt1(0.52426456257041f), Qfmt1(0.54119610014620f), Qfmt1(0.56369097343317f), 109250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Qfmt1(0.59284452371708f), Qfmt1(0.63023620700513f), Qfmt1(0.67817085245463f), 110250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 111250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Qfmt2(0.74009361646113f), Qfmt2(0.82133981585229f), Qfmt2(0.93057949835179f), 112250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Qfmt2(1.08284028510010f), Qfmt2(1.30656296487638f), Qfmt2(1.66275476171152f), 113250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Qfmt2(2.31011315767265f), Qfmt2(3.83064878777019f), Qfmt2(11.46279281302667f) 114250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber}; 115250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 116250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 117250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; EXTERNAL FUNCTION REFERENCES 118250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Declare functions defined elsewhere and referenced in this module 119250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 120250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 121250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 122250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 123250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Declare variables used in this module but defined elsewhere 124250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 125250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 126250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 127250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; FUNCTION CODE 128250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 129250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 130250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 131250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 132250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubervoid pvmp3_mdct_18(int32 vec[], int32 *history, const int32 *window) 133250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 134250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 i; 135250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 tmp; 136250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 tmp1; 137250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 tmp2; 138250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 tmp3; 139250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 tmp4; 140250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 141250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 142250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 143250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber const int32 *pt_cos_split = cosTerms_dct18; 144250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber const int32 *pt_cos = cosTerms_1_ov_cos_phi; 145250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber const int32 *pt_cos_x = &cosTerms_1_ov_cos_phi[17]; 146250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 *pt_vec = vec; 147250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 *pt_vec_o = &vec[17]; 148250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 149250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 150250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber for (i = 9; i != 0; i--) 151250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 152250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = *(pt_vec); 153250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = *(pt_vec_o); 154250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = fxp_mul32_Q32(tmp << 1, *(pt_cos++)); 155250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = fxp_mul32_Q27(tmp1, *(pt_cos_x--)); 156250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *(pt_vec++) = tmp + tmp1 ; 157250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *(pt_vec_o--) = fxp_mul32_Q28((tmp - tmp1), *(pt_cos_split++)); 158250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 159250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 160250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 161250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber pvmp3_dct_9(vec); // Even terms 162250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber pvmp3_dct_9(&vec[9]); // Odd terms 163250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 164250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 165250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3 = vec[16]; // 166250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[16] = vec[ 8]; 167250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp4 = vec[14]; // 168250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[14] = vec[ 7]; 169250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = vec[12]; 170250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[12] = vec[ 6]; 171250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 = vec[10]; // vec[10] 172250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[10] = vec[ 5]; 173250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 8] = vec[ 4]; 174250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 6] = vec[ 3]; 175250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 4] = vec[ 2]; 176250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 2] = vec[ 1]; 177250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 1] = vec[ 9] - tmp2; // vec[9] + vec[10] 178250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 3] = vec[11] - tmp2; 179250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 5] = vec[11] - tmp; 180250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 7] = vec[13] - tmp; 181250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 9] = vec[13] - tmp4; 182250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[11] = vec[15] - tmp4; 183250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[13] = vec[15] - tmp3; 184250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[15] = vec[17] - tmp3; 185250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 186250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 187250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* overlap and add */ 188250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 189250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 = vec[0]; 190250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3 = vec[9]; 191250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 192250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber for (i = 0; i < 6; i++) 193250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 194250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = history[ i]; 195250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp4 = vec[i+10]; 196250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[i+10] = tmp3 + tmp4; 197250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = vec[i+1]; 198250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ i] = fxp_mac32_Q32(tmp, (vec[i+10]), window[ i]); 199250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3 = tmp4; 200250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[i ] = -(tmp2 + tmp1); 201250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 = tmp1; 202250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 203250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 204250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = history[ 6]; 205250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp4 = vec[16]; 206250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[16] = tmp3 + tmp4; 207250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = vec[7]; 208250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 6] = fxp_mac32_Q32(tmp, vec[16] << 1, window[ i]); 209250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = history[ 7]; 210250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[6] = -(tmp2 + tmp1); 211250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[7] = -(tmp1 + vec[8]); 212250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 213250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = history[ 8]; 214250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp4 = vec[17] + tmp4; 215250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 7] = fxp_mac32_Q32(tmp, tmp4 << 1, window[ 7]); 216250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[8] = -(vec[8] + vec[9]); 217250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 8] = fxp_mac32_Q32(tmp1, vec[17] << 1, window[ 8]); 218250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 219250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = history[9]; 220250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = history[17]; 221250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 = history[16]; 222250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[ 9] = fxp_mac32_Q32(tmp, vec[17] << 1, window[ 9]); 223250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 224250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[17] = fxp_mac32_Q32(tmp1, vec[10] << 1, window[17]); 225250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[10] = -vec[ 16]; 226250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[16] = fxp_mac32_Q32(tmp2, vec[11] << 1, window[16]); 227250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = history[15]; 228250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 = history[14]; 229250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[11] = -vec[ 15]; 230250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[15] = fxp_mac32_Q32(tmp1, vec[12] << 1, window[15]); 231250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[12] = -vec[ 14]; 232250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[14] = fxp_mac32_Q32(tmp2, vec[13] << 1, window[14]); 233250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 234250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = history[13]; 235250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = history[12]; 236250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 = history[11]; 237250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3 = history[10]; 238250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[13] = fxp_mac32_Q32(tmp, vec[12] << 1, window[13]); 239250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[12] = fxp_mac32_Q32(tmp1, vec[11] << 1, window[12]); 240250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[11] = fxp_mac32_Q32(tmp2, vec[10] << 1, window[11]); 241250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber vec[10] = fxp_mac32_Q32(tmp3, tmp4 << 1, window[10]); 242250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 243250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 244250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* next iteration overlap */ 245250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 246250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = history[ 8]; 247250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3 = history[ 7]; 248250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 = history[ 1]; 249250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = history[ 0]; 250250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 <<= 1; 251250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3 <<= 1; 252250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 253250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 0] = fxp_mul32_Q32(tmp1, window[18]); 254250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[17] = fxp_mul32_Q32(tmp1, window[35]); 255250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 1] = fxp_mul32_Q32(tmp3, window[19]); 256250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[16] = fxp_mul32_Q32(tmp3, window[34]); 257250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 258250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 <<= 1; 259250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp <<= 1; 260250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 7] = fxp_mul32_Q32(tmp2, window[25]); 261250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[10] = fxp_mul32_Q32(tmp2, window[28]); 262250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 8] = fxp_mul32_Q32(tmp, window[26]); 263250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 9] = fxp_mul32_Q32(tmp, window[27]); 264250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 265250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 = history[ 6]; 266250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3 = history[ 5]; 267250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp4 = history[ 4]; 268250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 = history[ 3]; 269250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp = history[ 2]; 270250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 271250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp1 <<= 1; 272250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3 <<= 1; 273250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp4 <<= 1; 274250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 275250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 2] = fxp_mul32_Q32(tmp1, window[20]); 276250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[15] = fxp_mul32_Q32(tmp1, window[33]); 277250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 3] = fxp_mul32_Q32(tmp3, window[21]); 278250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[14] = fxp_mul32_Q32(tmp3, window[32]); 279250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 4] = fxp_mul32_Q32(tmp4, window[22]); 280250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[13] = fxp_mul32_Q32(tmp4, window[31]); 281250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp2 <<= 1; 282250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp <<= 1; 283250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 5] = fxp_mul32_Q32(tmp2, window[23]); 284250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[12] = fxp_mul32_Q32(tmp2, window[30]); 285250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[ 6] = fxp_mul32_Q32(tmp, window[24]); 286250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber history[11] = fxp_mul32_Q32(tmp, window[29]); 287250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 288250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 289250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#endif // If not assembly 290