1d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* ------------------------------------------------------------------ 2d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Copyright (C) 1998-2009 PacketVideo 3d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 4d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * you may not use this file except in compliance with the License. 6d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * You may obtain a copy of the License at 7d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 8d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 10d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Unless required by applicable law or agreed to in writing, software 11d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * express or implied. 14d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * See the License for the specific language governing permissions 15d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * and limitations under the License. 16d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * ------------------------------------------------------------------- 17d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 18d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* 19d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 20d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 21d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PacketVideo Corp. 22d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber MP3 Decoder Library 23d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 24d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Filename: mdct_18.cpp 25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Date: 09/21/2007 27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY 30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description: 33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS 36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput 38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 vec[], input vector of length 18 39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *history input for overlap and add, vector updated with 40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber next overlap and add values 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber const int32 *window sine window used in the mdct, three types are allowed 42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber noraml, start and stop 43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberReturns 44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber none mdct computation in-place 45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION 49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Returns the mdct of length 18 of the input vector, as well as the overlap 51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vector for next iteration ( on history[]) 52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/ 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#if ( !defined(PV_ARM_GCC_V5) && !defined(PV_ARM_GCC_V4) && !defined(PV_ARM_V5) && !defined(PV_ARM_V4) ) 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pv_mp3dec_fxd_op.h" 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_mdct_18.h" 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also. 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberconst int32 cosTerms_dct18[9] = 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt(0.50190991877167f), Qfmt(0.51763809020504f), Qfmt(0.55168895948125f), 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt(0.61038729438073f), Qfmt(0.70710678118655f), Qfmt(0.87172339781055f), 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt(1.18310079157625f), Qfmt(1.93185165257814f), Qfmt(5.73685662283493f) 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}; 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberconst int32 cosTerms_1_ov_cos_phi[18] = 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt1(0.50047634258166f), Qfmt1(0.50431448029008f), Qfmt1(0.51213975715725f), 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt1(0.52426456257041f), Qfmt1(0.54119610014620f), Qfmt1(0.56369097343317f), 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt1(0.59284452371708f), Qfmt1(0.63023620700513f), Qfmt1(0.67817085245463f), 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt2(0.74009361646113f), Qfmt2(0.82133981585229f), Qfmt2(0.93057949835179f), 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt2(1.08284028510010f), Qfmt2(1.30656296487638f), Qfmt2(1.66275476171152f), 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt2(2.31011315767265f), Qfmt2(3.83064878777019f), Qfmt2(11.46279281302667f) 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}; 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module but defined elsewhere 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid pvmp3_mdct_18(int32 vec[], int32 *history, const int32 *window) 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 i; 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp; 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp1; 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp2; 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp3; 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp4; 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber const int32 *pt_cos_split = cosTerms_dct18; 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber const int32 *pt_cos = cosTerms_1_ov_cos_phi; 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber const int32 *pt_cos_x = &cosTerms_1_ov_cos_phi[17]; 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *pt_vec = vec; 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *pt_vec_o = &vec[17]; 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber for (i = 9; i != 0; i--) 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = *(pt_vec); 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = *(pt_vec_o); 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = fxp_mul32_Q32(tmp << 1, *(pt_cos++)); 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = fxp_mul32_Q27(tmp1, *(pt_cos_x--)); 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *(pt_vec++) = tmp + tmp1 ; 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *(pt_vec_o--) = fxp_mul32_Q28((tmp - tmp1), *(pt_cos_split++)); 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_dct_9(vec); // Even terms 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_dct_9(&vec[9]); // Odd terms 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = vec[16]; // 166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[16] = vec[ 8]; 167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = vec[14]; // 168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[14] = vec[ 7]; 169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = vec[12]; 170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[12] = vec[ 6]; 171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = vec[10]; // vec[10] 172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[10] = vec[ 5]; 173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 8] = vec[ 4]; 174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 6] = vec[ 3]; 175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 4] = vec[ 2]; 176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 2] = vec[ 1]; 177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 1] = vec[ 9] - tmp2; // vec[9] + vec[10] 178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 3] = vec[11] - tmp2; 179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 5] = vec[11] - tmp; 180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 7] = vec[13] - tmp; 181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 9] = vec[13] - tmp4; 182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[11] = vec[15] - tmp4; 183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[13] = vec[15] - tmp3; 184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[15] = vec[17] - tmp3; 185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* overlap and add */ 188d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 189d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = vec[0]; 190d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = vec[9]; 191d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 192d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber for (i = 0; i < 6; i++) 193d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 194d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ i]; 195d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = vec[i+10]; 196d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[i+10] = tmp3 + tmp4; 197d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = vec[i+1]; 198d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ i] = fxp_mac32_Q32(tmp, (vec[i+10]), window[ i]); 199d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = tmp4; 200d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[i ] = -(tmp2 + tmp1); 201d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = tmp1; 202d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 203d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 204d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ 6]; 205d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = vec[16]; 206d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[16] = tmp3 + tmp4; 207d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = vec[7]; 208d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 6] = fxp_mac32_Q32(tmp, vec[16] << 1, window[ i]); 209d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ 7]; 210d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[6] = -(tmp2 + tmp1); 211d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[7] = -(tmp1 + vec[8]); 212d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 213d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[ 8]; 214d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = vec[17] + tmp4; 215d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 7] = fxp_mac32_Q32(tmp, tmp4 << 1, window[ 7]); 216d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[8] = -(vec[8] + vec[9]); 217d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 8] = fxp_mac32_Q32(tmp1, vec[17] << 1, window[ 8]); 218d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 219d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[9]; 220d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[17]; 221d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[16]; 222d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 9] = fxp_mac32_Q32(tmp, vec[17] << 1, window[ 9]); 223d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 224d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[17] = fxp_mac32_Q32(tmp1, vec[10] << 1, window[17]); 225d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[10] = -vec[ 16]; 226d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[16] = fxp_mac32_Q32(tmp2, vec[11] << 1, window[16]); 227d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[15]; 228d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[14]; 229d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[11] = -vec[ 15]; 230d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[15] = fxp_mac32_Q32(tmp1, vec[12] << 1, window[15]); 231d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[12] = -vec[ 14]; 232d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[14] = fxp_mac32_Q32(tmp2, vec[13] << 1, window[14]); 233d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 234d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[13]; 235d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[12]; 236d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[11]; 237d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = history[10]; 238d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[13] = fxp_mac32_Q32(tmp, vec[12] << 1, window[13]); 239d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[12] = fxp_mac32_Q32(tmp1, vec[11] << 1, window[12]); 240d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[11] = fxp_mac32_Q32(tmp2, vec[10] << 1, window[11]); 241d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[10] = fxp_mac32_Q32(tmp3, tmp4 << 1, window[10]); 242d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 243d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 244d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* next iteration overlap */ 245d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 246d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[ 8]; 247d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = history[ 7]; 248d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[ 1]; 249d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ 0]; 250d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 <<= 1; 251d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 <<= 1; 252d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 253d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 0] = fxp_mul32_Q32(tmp1, window[18]); 254d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[17] = fxp_mul32_Q32(tmp1, window[35]); 255d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 1] = fxp_mul32_Q32(tmp3, window[19]); 256d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[16] = fxp_mul32_Q32(tmp3, window[34]); 257d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 258d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 <<= 1; 259d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp <<= 1; 260d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 7] = fxp_mul32_Q32(tmp2, window[25]); 261d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[10] = fxp_mul32_Q32(tmp2, window[28]); 262d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 8] = fxp_mul32_Q32(tmp, window[26]); 263d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 9] = fxp_mul32_Q32(tmp, window[27]); 264d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 265d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[ 6]; 266d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = history[ 5]; 267d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = history[ 4]; 268d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[ 3]; 269d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ 2]; 270d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 271d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 <<= 1; 272d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 <<= 1; 273d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 <<= 1; 274d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 275d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 2] = fxp_mul32_Q32(tmp1, window[20]); 276d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[15] = fxp_mul32_Q32(tmp1, window[33]); 277d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 3] = fxp_mul32_Q32(tmp3, window[21]); 278d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[14] = fxp_mul32_Q32(tmp3, window[32]); 279d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 4] = fxp_mul32_Q32(tmp4, window[22]); 280d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[13] = fxp_mul32_Q32(tmp4, window[31]); 281d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 <<= 1; 282d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp <<= 1; 283d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 5] = fxp_mul32_Q32(tmp2, window[23]); 284d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[12] = fxp_mul32_Q32(tmp2, window[30]); 285d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 6] = fxp_mul32_Q32(tmp, window[24]); 286d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[11] = fxp_mul32_Q32(tmp, window[29]); 287d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 288d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 289d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif // If not assembly 290