1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------ 2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License. 6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at 7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software 11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied. 14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions 15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License. 16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * ------------------------------------------------------------------- 17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* 19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Filename: dct64.c 21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY 24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who: Date: MM/DD/YYYY 27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INPUT AND OUTPUT DEFINITIONS 31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 x 32-bit integer input length 64 33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FUNCTION DESCRIPTION 37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Implement dct of lenght 64 39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REQUIREMENTS 42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES 46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PSEUDO-CODE 49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/ 52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES 56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef AAC_PLUS 59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "dct16.h" 62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "dct64.h" 63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h" 65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "synthesis_sub_band.h" 66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "fxp_mul32.h" 68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; MACROS 72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Define module specific macros here 73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; DEFINES 78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Include all pre-processor statements here. Include conditional 79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; compile variables also. 80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define Qfmt(a) (Int32)(a*((Int32)1<<26) + (a>=0?0.5F:-0.5F)) 83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define Qfmt31(a) (Int32)(a*0x7FFFFFFF) 84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberconst Int32 CosTable_48[48] = 86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.50015063602065F) , Qfmt31(0.50135845244641F) , 88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.50378872568104F) , Qfmt31(0.50747117207256F) , 89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.51245147940822F) , Qfmt31(0.51879271310533F) , 90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.52657731515427F) , Qfmt31(0.53590981690799F) , 91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.54692043798551F) , Qfmt31(0.55976981294708F) , 92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.57465518403266F) , Qfmt31(0.59181853585742F) , 93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.61155734788251F) , Qfmt31(0.63423893668840F) , 94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.66031980781371F) , Qfmt31(0.69037212820021F) , 95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.72512052237720F) , Qfmt31(0.76549416497309F) , 96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt31(0.81270209081449F) , Qfmt31(0.86834471522335F) , 97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(0.93458359703641F) , Qfmt(1.01440826499705F) , 98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(1.11207162057972F) , Qfmt(1.23383273797657F) , 99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(1.38929395863283F) , Qfmt(1.59397228338563F) , 100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(1.87467598000841F) , Qfmt(2.28205006800516F) , 101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(2.92462842815822F) , Qfmt(4.08461107812925F) , 102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(6.79675071167363F) , Qfmt(20.37387816723145F) , /* 32 */ 103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(0.50060299823520F) , Qfmt(0.50547095989754F) , 104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(0.51544730992262F) , Qfmt(0.53104259108978F) , 105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(0.55310389603444F) , Qfmt(0.58293496820613F) , 106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(0.62250412303566F) , Qfmt(0.67480834145501F) , 107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(0.74453627100230F) , Qfmt(0.83934964541553F) , 108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(0.97256823786196F) , Qfmt(1.16943993343288F) , 109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(1.48416461631417F) , Qfmt(2.05778100995341F) , 110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Qfmt(3.40760841846872F) , Qfmt(10.19000812354803F) 111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber}; 112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL FUNCTION DEFINITIONS 118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Function Prototype declaration 119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Variable declaration - defined here and used outside this module 124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL FUNCTION REFERENCES 128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare functions defined elsewhere and referenced in this module 129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare variables used in this module but defined elsewhere 134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; FUNCTION CODE 138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; dct_64 142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid pv_split_LC(Int32 *vector, 145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *temp_o) 146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 i; 149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pt_vector = &vector[0]; 150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pt_vector_N_1 = &vector[31]; 151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int32 *pt_cosTerms = &CosTable_48[32]; 152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pt_temp_o = temp_o; 153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp1; 154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp2; 155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp3; 156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = *(pt_vector); 159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = *(pt_vector_N_1--); 160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (i = 16; i != 0; i--) 161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp3 = *(pt_cosTerms++); 163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_vector++) = tmp1 + tmp2; 164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_temp_o++) = fxp_mul32_Q26((tmp1 - tmp2), tmp3); 165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = *(pt_vector); 166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = *(pt_vector_N_1--); 167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} 170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR 173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid dct_64(Int32 vec[], Int32 *scratch_mem) 176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *temp_e1; 178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *temp_o1; 179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pt_vec; 181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int i; 183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 aux1; 185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 aux2; 186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 aux3; 187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 aux4; 188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int32 *cosTerms = &CosTable_48[31]; 190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp_o1 = &vec[32]; 192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp_e1 = temp_o1 - 1; 193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (i = 6; i != 0; i--) 196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = *(temp_e1); 198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = *(temp_o1); 199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = *(cosTerms--); 200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(temp_e1--) = aux1 + aux2; 201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(temp_o1++) = fxp_mul32_Q26((aux1 - aux2), aux3); 202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = *(temp_e1); 203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = *(temp_o1); 204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = *(cosTerms--); 205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(temp_e1--) = aux1 + aux2; 206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(temp_o1++) = fxp_mul32_Q26((aux1 - aux2), aux3); 207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (i = 10; i != 0; i--) 211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = *(temp_e1); 213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = *(temp_o1); 214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = *(cosTerms--); 215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(temp_e1--) = aux1 + aux2; 216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(temp_o1++) = fxp_mul32_Q31((aux1 - aux2), aux3) << 1; 217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = *(temp_e1); 218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = *(temp_o1); 219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = *(cosTerms--); 220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(temp_e1--) = aux1 + aux2; 221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(temp_o1++) = fxp_mul32_Q31((aux1 - aux2), aux3) << 1; 222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pv_split(&vec[16]); 226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber dct_16(&vec[16], 0); 228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber dct_16(vec, 1); // Even terms 229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pv_merge_in_place_N32(vec); 231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pv_split_z(&vec[32]); 233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber dct_16(&vec[32], 1); // Even terms 235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber dct_16(&vec[48], 0); 236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pv_merge_in_place_N32(&vec[32]); 238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[32]; 242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[33]; 243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[ 1]; /* vec[ 1] */ 244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[32] + vec[33]; 247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 0] += aux1; 248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 1] += aux1; 249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[34]; 251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[ 2]; /* vec[ 2] */ 252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 2] = aux4 + aux3; 254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[ 3]; /* vec[ 3] */ 255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 3] = aux2 + aux3; 256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[35]; 258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[32] = vec[ 4]; 262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[33] = vec[ 5]; 263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 4] = aux2 + aux1; 264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 5] = aux4 + aux1; 265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[36]; 267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[32]; /* vec[ 4] */ 268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[34] = vec[ 6]; 270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[35] = vec[ 7]; 271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 6] = aux4 + aux3; 272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 7] = aux2 + aux3; 273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[37]; 275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[33]; /* vec[ 5] */ 276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[32] = vec[ 8]; 280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[33] = vec[ 9]; 281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 8] = aux2 + aux1; 282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 9] = aux4 + aux1; 283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[38]; 285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[34]; /* vec[ 6] */ 286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 287dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[34] = vec[10]; 288dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[10] = aux4 + aux3; 289dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[35]; /* vec[ 7] */ 290dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[35] = vec[11]; 291dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[11] = aux2 + aux3; 292dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 293dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[39]; 294dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 295dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 296dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 297dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[36] = vec[12]; 298dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[37] = vec[13]; 299dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[12] = aux2 + aux1; 300dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[13] = aux4 + aux1; 301dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 302dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[40]; 303dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[32]; /* vec[ 8] */ 304dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 305dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[32] = vec[14]; 306dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[14] = aux4 + aux3; 307dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[33]; /* vec[ 9] */ 308dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[33] = vec[15]; 309dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[15] = aux2 + aux3; 310dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 311dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[41]; 312dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 313dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 314dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 315dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[38] = vec[16]; 316dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[39] = vec[17]; 317dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[16] = aux2 + aux1; 318dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[17] = aux4 + aux1; 319dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 320dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[42]; 321dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[34]; /* vec[10] */ 322dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 323dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[34] = vec[18]; 324dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[18] = aux4 + aux3; 325dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[35]; /* vec[11] */ 326dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[35] = vec[19]; 327dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[19] = aux2 + aux3; 328dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 329dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[43]; 330dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 331dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 332dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 333dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[40] = vec[20]; 334dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[41] = vec[21]; 335dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[20] = aux2 + aux1; 336dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[21] = aux4 + aux1; 337dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 338dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[44]; 339dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[36]; /* vec[12] */ 340dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 341dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[42] = vec[22]; 342dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[43] = vec[23]; 343dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[22] = aux4 + aux3; 344dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[23] = aux2 + aux3; 345dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 346dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[45]; 347dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[37]; /* vec[13] */ 348dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 349dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 350dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 351dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 352dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scratch_mem[0] = vec[24]; 353dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scratch_mem[1] = vec[25]; 354dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 355dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[24] = aux2 + aux1; 356dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[25] = aux4 + aux1; 357dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 358dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[46]; 359dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[32]; /* vec[14] */ 360dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scratch_mem[2] = vec[26]; 361dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scratch_mem[3] = vec[27]; 362dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 363dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[26] = aux4 + aux3; 364dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[27] = aux2 + aux3; 365dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 366dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[47]; 367dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[33]; /* vec[15] */ 368dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 369dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 370dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scratch_mem[4] = vec[28]; 371dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scratch_mem[5] = vec[29]; 372dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 373dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[28] = aux2 + aux1; 374dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[29] = aux4 + aux1; 375dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 376dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[48]; 377dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[38]; /* vec[16] */ 378dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scratch_mem[6] = vec[30]; 379dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scratch_mem[7] = vec[31]; 380dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 381dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[30] = aux4 + aux3; 382dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[31] = aux2 + aux3; 383dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 384dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[49]; 385dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[39]; /* vec[17] */ 386dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 387dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 388dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 389dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[32] = aux2 + aux1; 390dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[33] = aux4 + aux1; 391dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 392dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[50]; 393dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[34]; /* vec[18] */ 394dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 395dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[34] = aux4 + aux3; 396dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[35]; /* vec[19] */ 397dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[35] = aux2 + aux3; 398dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 399dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[51]; 400dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 401dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 402dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 403dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 404dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[36] = aux2 + aux1; 405dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[37] = aux4 + aux1; 406dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 407dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[52]; 408dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[40]; /* vec[20] */ 409dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 410dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[38] = aux4 + aux3; 411dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[39] = aux2 + aux3; 412dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 413dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[53]; 414dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[41]; /* vec[21] */ 415dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 416dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 417dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 418dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[40] = aux2 + aux1; 419dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[41] = aux4 + aux1; 420dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 421dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = vec[54]; 422dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = vec[42]; /* vec[22] */ 423dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 424dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[42] = aux4 + aux3; 425dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = vec[43]; /* vec[23] */ 426dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[43] = aux2 + aux3; 427dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 428dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = vec[55]; 429dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 430dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* -----------------------------------*/ 431dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 432dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pt_vec = &vec[44]; 433dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp_o1 = &vec[56]; 434dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp_e1 = &scratch_mem[0]; 435dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 436dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (i = 4; i != 0; i--) 437dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 438dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 439dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_vec++) = aux2 + aux1; 440dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_vec++) = aux4 + aux1; 441dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 442dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 = *(temp_o1++); 443dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 += aux1; 444dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux2 = *(temp_e1++); 445dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_vec++) = aux4 + aux3; 446dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_vec++) = aux2 + aux3; 447dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 448dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux3 = *(temp_o1++); 449dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux4 = *(temp_e1++); 450dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 451dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 452dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber aux1 += aux3; 453dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[60] = aux2 + aux1; 454dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[61] = aux4 + aux1; 455dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[62] = aux4 + aux3; 456dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 457dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} 458dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 459dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 460dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif 461dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 462dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 463dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; pv_split 464dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 465dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 466dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 467dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid pv_split(Int32 *temp_o) 468dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 469dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 470dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 i; 471dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int32 *pt_cosTerms = &CosTable_48[47]; 472dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pt_temp_o = temp_o; 473dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pt_temp_e = pt_temp_o - 1; 474dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp1; 475dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp2; 476dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 cosx; 477dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 478dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (i = 8; i != 0; i--) 479dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 480dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = *(pt_temp_o); 481dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = *(pt_temp_e); 482dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber cosx = *(pt_cosTerms--); 483dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_temp_e--) = tmp1 + tmp2; 484dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_temp_o++) = fxp_mul32_Q26((tmp1 - tmp2), cosx); 485dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = *(pt_temp_e); 486dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = *(pt_temp_o); 487dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber cosx = *(pt_cosTerms--); 488dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_temp_e--) = tmp1 + tmp2; 489dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_temp_o++) = fxp_mul32_Q26((tmp1 - tmp2), cosx); 490dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 491dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} 492dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 493dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 494dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 495dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid pv_split_z(Int32 *vector) 496dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 497dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 i; 498dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pt_vector = &vector[31]; 499dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int32 *pt_cosTerms = &CosTable_48[32]; 500dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pt_temp_e = vector; 501dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp1; 502dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp2; 503dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 cosx; 504dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 505dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (i = 8; i != 0; i--) 506dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 507dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = *(pt_vector); 508dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = *(pt_temp_e); 509dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber cosx = *(pt_cosTerms++); 510dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_temp_e++) = tmp1 + tmp2; 511dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_vector--) = fxp_mul32_Q26((tmp1 - tmp2), cosx); 512dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = *(pt_temp_e); 513dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = *(pt_vector); 514dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber cosx = *(pt_cosTerms++); 515dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_temp_e++) = tmp1 + tmp2; 516dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pt_vector--) = fxp_mul32_Q26((tmp1 - tmp2), cosx); 517dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 518dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} 519dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 520dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 521dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid pv_merge_in_place_N32(Int32 vec[]) 522dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 523dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 524dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 temp[4]; 525dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 526dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp[0] = vec[14]; 527dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[14] = vec[ 7]; 528dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp[1] = vec[12]; 529dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[12] = vec[ 6]; 530dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp[2] = vec[10]; 531dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[10] = vec[ 5]; 532dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp[3] = vec[ 8]; 533dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 8] = vec[ 4]; 534dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 6] = vec[ 3]; 535dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 4] = vec[ 2]; 536dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 2] = vec[ 1]; 537dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 538dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 1] = vec[16] + vec[17]; 539dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[16] = temp[3]; 540dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 3] = vec[18] + vec[17]; 541dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 5] = vec[19] + vec[18]; 542dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[18] = vec[9]; 543dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp[3] = vec[11]; 544dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 545dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 7] = vec[20] + vec[19]; 546dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 9] = vec[21] + vec[20]; 547dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[20] = temp[2]; 548dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp[2] = vec[13]; 549dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[11] = vec[22] + vec[21]; 550dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[13] = vec[23] + vec[22]; 551dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[22] = temp[3]; 552dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp[3] = vec[15]; 553dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[15] = vec[24] + vec[23]; 554dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[17] = vec[25] + vec[24]; 555dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[19] = vec[26] + vec[25]; 556dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[21] = vec[27] + vec[26]; 557dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[23] = vec[28] + vec[27]; 558dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[25] = vec[29] + vec[28]; 559dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[27] = vec[30] + vec[29]; 560dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[29] = vec[30] + vec[31]; 561dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[24] = temp[1]; 562dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[26] = temp[2]; 563dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[28] = temp[0]; 564dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[30] = temp[3]; 565dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} 566dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 567dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif 568dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 569dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 570