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 13242b1ea8a934ee13899663ad7e1551b658d48e6d6Marco Nelissen__attribute__((no_sanitize("integer"))) 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid pvmp3_mdct_18(int32 vec[], int32 *history, const int32 *window) 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 i; 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp; 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp1; 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp2; 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp3; 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp4; 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber const int32 *pt_cos_split = cosTerms_dct18; 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber const int32 *pt_cos = cosTerms_1_ov_cos_phi; 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber const int32 *pt_cos_x = &cosTerms_1_ov_cos_phi[17]; 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *pt_vec = vec; 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *pt_vec_o = &vec[17]; 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber for (i = 9; i != 0; i--) 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = *(pt_vec); 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = *(pt_vec_o); 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = fxp_mul32_Q32(tmp << 1, *(pt_cos++)); 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = fxp_mul32_Q27(tmp1, *(pt_cos_x--)); 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *(pt_vec++) = tmp + tmp1 ; 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *(pt_vec_o--) = fxp_mul32_Q28((tmp - tmp1), *(pt_cos_split++)); 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_dct_9(vec); // Even terms 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_dct_9(&vec[9]); // Odd terms 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = vec[16]; // 167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[16] = vec[ 8]; 168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = vec[14]; // 169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[14] = vec[ 7]; 170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = vec[12]; 171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[12] = vec[ 6]; 172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = vec[10]; // vec[10] 173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[10] = vec[ 5]; 174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 8] = vec[ 4]; 175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 6] = vec[ 3]; 176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 4] = vec[ 2]; 177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 2] = vec[ 1]; 178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 1] = vec[ 9] - tmp2; // vec[9] + vec[10] 179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 3] = vec[11] - tmp2; 180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 5] = vec[11] - tmp; 181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 7] = vec[13] - tmp; 182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 9] = vec[13] - tmp4; 183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[11] = vec[15] - tmp4; 184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[13] = vec[15] - tmp3; 185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[15] = vec[17] - tmp3; 186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 188d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* overlap and add */ 189d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 190d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = vec[0]; 191d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = vec[9]; 192d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 193d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber for (i = 0; i < 6; i++) 194d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 195d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ i]; 196d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = vec[i+10]; 197d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[i+10] = tmp3 + tmp4; 198d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = vec[i+1]; 199d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ i] = fxp_mac32_Q32(tmp, (vec[i+10]), window[ i]); 200d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = tmp4; 201d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[i ] = -(tmp2 + tmp1); 202d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = tmp1; 203d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 204d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 205d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ 6]; 206d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = vec[16]; 207d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[16] = tmp3 + tmp4; 208d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = vec[7]; 209d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 6] = fxp_mac32_Q32(tmp, vec[16] << 1, window[ i]); 210d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ 7]; 211d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[6] = -(tmp2 + tmp1); 212d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[7] = -(tmp1 + vec[8]); 213d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 214d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[ 8]; 215d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = vec[17] + tmp4; 216d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 7] = fxp_mac32_Q32(tmp, tmp4 << 1, window[ 7]); 217d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[8] = -(vec[8] + vec[9]); 218d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 8] = fxp_mac32_Q32(tmp1, vec[17] << 1, window[ 8]); 219d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 220d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[9]; 221d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[17]; 222d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[16]; 223d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[ 9] = fxp_mac32_Q32(tmp, vec[17] << 1, window[ 9]); 224d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 225d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[17] = fxp_mac32_Q32(tmp1, vec[10] << 1, window[17]); 226d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[10] = -vec[ 16]; 227d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[16] = fxp_mac32_Q32(tmp2, vec[11] << 1, window[16]); 228d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[15]; 229d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[14]; 230d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[11] = -vec[ 15]; 231d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[15] = fxp_mac32_Q32(tmp1, vec[12] << 1, window[15]); 232d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[12] = -vec[ 14]; 233d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[14] = fxp_mac32_Q32(tmp2, vec[13] << 1, window[14]); 234d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 235d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[13]; 236d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[12]; 237d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[11]; 238d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = history[10]; 239d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[13] = fxp_mac32_Q32(tmp, vec[12] << 1, window[13]); 240d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[12] = fxp_mac32_Q32(tmp1, vec[11] << 1, window[12]); 241d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[11] = fxp_mac32_Q32(tmp2, vec[10] << 1, window[11]); 242d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[10] = fxp_mac32_Q32(tmp3, tmp4 << 1, window[10]); 243d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 244d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 245d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* next iteration overlap */ 246d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 247d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[ 8]; 248d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = history[ 7]; 249d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[ 1]; 250d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ 0]; 251d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 <<= 1; 252d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 <<= 1; 253d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 254d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 0] = fxp_mul32_Q32(tmp1, window[18]); 255d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[17] = fxp_mul32_Q32(tmp1, window[35]); 256d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 1] = fxp_mul32_Q32(tmp3, window[19]); 257d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[16] = fxp_mul32_Q32(tmp3, window[34]); 258d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 259d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 <<= 1; 260d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp <<= 1; 261d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 7] = fxp_mul32_Q32(tmp2, window[25]); 262d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[10] = fxp_mul32_Q32(tmp2, window[28]); 263d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 8] = fxp_mul32_Q32(tmp, window[26]); 264d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 9] = fxp_mul32_Q32(tmp, window[27]); 265d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 266d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = history[ 6]; 267d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = history[ 5]; 268d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = history[ 4]; 269d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = history[ 3]; 270d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = history[ 2]; 271d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 272d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 <<= 1; 273d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 <<= 1; 274d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 <<= 1; 275d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 276d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 2] = fxp_mul32_Q32(tmp1, window[20]); 277d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[15] = fxp_mul32_Q32(tmp1, window[33]); 278d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 3] = fxp_mul32_Q32(tmp3, window[21]); 279d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[14] = fxp_mul32_Q32(tmp3, window[32]); 280d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 4] = fxp_mul32_Q32(tmp4, window[22]); 281d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[13] = fxp_mul32_Q32(tmp4, window[31]); 282d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 <<= 1; 283d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp <<= 1; 284d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 5] = fxp_mul32_Q32(tmp2, window[23]); 285d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[12] = fxp_mul32_Q32(tmp2, window[30]); 286d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[ 6] = fxp_mul32_Q32(tmp, window[24]); 287d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[11] = fxp_mul32_Q32(tmp, window[29]); 288d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 289d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 290d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif // If not assembly 291