151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick/****************************************************************************** 251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * * 351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * Copyright (C) 2018 The Android Open Source Project 451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * 551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * Licensed under the Apache License, Version 2.0 (the "License"); 651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * you may not use this file except in compliance with the License. 751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * You may obtain a copy of the License at: 851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * 951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * http://www.apache.org/licenses/LICENSE-2.0 1051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * 1151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * Unless required by applicable law or agreed to in writing, software 1251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * distributed under the License is distributed on an "AS IS" BASIS, 1351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * See the License for the specific language governing permissions and 1551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * limitations under the License. 1651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * 1751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ***************************************************************************** 1851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 1951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick*/ 2051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <stdlib.h> 2151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <stdio.h> 2251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <ixheaacd_type_def.h> 2451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_interface.h" 2551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_constants.h" 2651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <ixheaacd_basic_ops32.h> 2751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_function_selector.h" 2851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickextern const WORD32 ixheaacd_twiddle_table_fft_32x32[514]; 3051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickextern const WORD32 ixheaacd_twiddle_table_3pr[1155]; 3151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickextern const WORD32 ixheaacd_twiddle_table_3pi[1155]; 3251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickextern const WORD8 ixheaacd_mps_dig_rev[16]; 3351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 3451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#define PLATFORM_INLINE __inline 3551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 3651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#define DIG_REV(i, m, j) \ 3751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick do { \ 3851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick unsigned _ = (i); \ 3951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick _ = ((_ & 0x33333333) << 2) | ((_ & ~0x33333333) >> 2); \ 4051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick _ = ((_ & 0x0F0F0F0F) << 4) | ((_ & ~0x0F0F0F0F) >> 4); \ 4151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick _ = ((_ & 0x00FF00FF) << 8) | ((_ & ~0x00FF00FF) >> 8); \ 4251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (j) = _ >> (m); \ 4351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } while (0) 4451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickstatic PLATFORM_INLINE WORD32 ixheaacd_mult32(WORD32 a, WORD32 b) { 4651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 result; 4751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD64 temp_result; 4851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick temp_result = (WORD64)a * (WORD64)b; 5051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick result = (WORD32)(temp_result >> 31); 5151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return (result); 5351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 5451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickstatic PLATFORM_INLINE WORD32 ixheaacd_mac32(WORD32 a, WORD32 b, WORD32 c) { 5651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 result; 5751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick result = a + ixheaacd_mult32(b, c); 5951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return (result); 6151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 6251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickstatic PLATFORM_INLINE WORD32 ixheaacd_mult32_shl(WORD32 a, WORD32 b) { 6451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 result; 6551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD64 temp_result; 6651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick temp_result = (WORD64)a * (WORD64)b; 6851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick result = (WORD32)(temp_result >> 32); 6951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 7051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return (result << 1); 7151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 7251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 7351aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickVOID ixheaacd_mps_complex_fft_64_dec(WORD32 *ptr_x, WORD32 *fin_re, 7451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *fin_im, WORD32 nlength) { 7551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 i, j, k, n_stages; 7651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 h2, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 7751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 del, nodespacing, in_loop_cnt; 7851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 y[128]; 7951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 npoints = nlength; 8051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *ptr_y = y; 8151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick const WORD32 *ptr_w; 8251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick n_stages = 30 - ixheaacd_norm32(npoints); 8351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick n_stages = n_stages >> 1; 8551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_w = ixheaacd_twiddle_table_fft_32x32; 8751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < npoints; i += 4) { 8951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *inp = ptr_x; 9051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick h2 = ixheaacd_mps_dig_rev[i >> 2]; 9151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (h2); 9251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = *inp; 9451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = *(inp + 1); 9551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (npoints >> 1); 9651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *inp; 9851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(inp + 1); 9951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (npoints >> 1); 10051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 10151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *inp; 10251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(inp + 1); 10351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (npoints >> 1); 10451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 10551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *inp; 10651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(inp + 1); 10751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 10851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x2r; 10951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x2i; 11051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 11151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 11251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 11351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 11451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 11551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 11651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 11751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x1r; 11851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x1i; 11951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 12051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 12151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + x3i; 12251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - x3r; 12351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 12451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 12551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 12651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x0r; 12751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x0i; 12851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x2r; 12951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x2i; 13051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x1r; 13151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x1i; 13251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x3i; 13351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x3r; 13451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 13551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y -= 2 * npoints; 13651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick del = 4; 13751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick nodespacing = 64; 13851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick in_loop_cnt = npoints >> 4; 13951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = n_stages - 1; i > 0; i--) { 14051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick const WORD32 *twiddles = ptr_w; 14151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *data = ptr_y; 14251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1h, w2h, w3h, w1l, w2l, w3l; 14351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 sec_loop_cnt; 14451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 14551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 14651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 14751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 14851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 14951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 15051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = (*data); 15151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = (*(data + 1)); 15251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 15351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 15451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = (*data); 15551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = (*(data + 1)); 15651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 15751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 15851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = (*data); 15951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = (*(data + 1)); 16051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 16151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 16251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x2r; 16351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x2i; 16451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 16551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 16651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 16751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 16851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 16951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 17051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 17151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x1r; 17251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x1i; 17351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 17451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 17551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + x3i; 17651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - x3r; 17751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 17851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 17951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 18051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 18151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 18251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 18351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 18451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 18551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 18651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 18751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 18851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 18951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 19051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 19151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 19251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 19351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 19451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 19551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 19651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data = ptr_y + 2; 19751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 19851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sec_loop_cnt = (nodespacing * del); 19951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sec_loop_cnt = (sec_loop_cnt / 4) + (sec_loop_cnt / 8) - 20051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (sec_loop_cnt / 16) + (sec_loop_cnt / 32) - 20151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (sec_loop_cnt / 64) + (sec_loop_cnt / 128) - 20251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (sec_loop_cnt / 256); 20351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick j = nodespacing; 20451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 20551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = nodespacing; j <= sec_loop_cnt; j += nodespacing) { 20651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 20751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 20851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1)); 20951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) + 1); 21051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1)); 21151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) + 1); 21251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 21351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 21451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 21551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 21651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 21751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 21851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 21951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 22051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 22151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 22251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 22351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 22451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 22551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 22651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 22751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 22851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 22951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 23051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 23151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) - ixheaacd_mult32(x1i, w1h)); 23251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(ixheaacd_mult32(x1r, w1h), x1i, w1l); 23351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 23451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 23551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2l) - ixheaacd_mult32(x2i, w2h)); 23651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = ixheaacd_mac32(ixheaacd_mult32(x2r, w2h), x2i, w2l); 23751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 23851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 23951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x3r, w3l) - ixheaacd_mult32(x3i, w3h)); 24051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = ixheaacd_mac32(ixheaacd_mult32(x3r, w3h), x3i, w3l); 24151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 24251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 24351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 24451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 24551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 24651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 24751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 24851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 24951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 25051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 25151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 25251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 25351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 25451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 25551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 25651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 25751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 25851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 25951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + (x3i); 26051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - (x3r); 26151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 26251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 26351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 26451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 26551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 26651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 26751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 26851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 26951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 27051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 27151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 27251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 27351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 27451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 27551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 27651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 27751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 27851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 27951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 28051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 28151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 28251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 28351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (; j <= (nodespacing * del) >> 1; j += nodespacing) { 28451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 28551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1)); 28651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512); 28751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 28851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) + 1); 28951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511); 29051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 29151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 29251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 29351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 29451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 29551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 29651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 29751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 29851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 29951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 30051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 30151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 30251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 30351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 30451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 30551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 30651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 30751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 30851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 30951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) - ixheaacd_mult32(x1i, w1h)); 31051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(ixheaacd_mult32(x1r, w1h), x1i, w1l); 31151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 31251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 31351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2l) - ixheaacd_mult32(x2i, w2h)); 31451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = ixheaacd_mac32(ixheaacd_mult32(x2r, w2h), x2i, w2l); 31551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 31651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 31751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x3r, w3h) + ixheaacd_mult32(x3i, w3l)); 31851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = -ixheaacd_mult32(x3r, w3l) + ixheaacd_mult32(x3i, w3h); 31951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 32051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 32151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 32251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 32351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 32451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 32551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 32651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 32751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 32851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 32951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 33051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 33151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 33251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 33351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 33451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 33551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 33651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 33751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + (x3i); 33851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - (x3r); 33951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 34051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 34151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 34251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 34351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 34451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 34551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 34651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 34751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 34851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 34951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 35051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 35151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 35251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 35351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 35451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 35551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 35651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 35751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 35851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 35951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 36051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 36151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (; j <= sec_loop_cnt * 2; j += nodespacing) { 36251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 36351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1) - 512); 36451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512); 36551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 36651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) - 511); 36751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511); 36851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 36951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 37051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 37151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 37251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 37351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 37451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 37551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 37651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 37751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 37851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 37951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 38051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 38151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 38251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 38351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 38451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 38551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 38651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 38751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) - ixheaacd_mult32(x1i, w1h)); 38851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(ixheaacd_mult32(x1r, w1h), x1i, w1l); 38951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 39051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 39151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2h) + ixheaacd_mult32(x2i, w2l)); 39251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = -ixheaacd_mult32(x2r, w2l) + ixheaacd_mult32(x2i, w2h); 39351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 39451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 39551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x3r, w3h) + ixheaacd_mult32(x3i, w3l)); 39651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = -ixheaacd_mult32(x3r, w3l) + ixheaacd_mult32(x3i, w3h); 39751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 39851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 39951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 40051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 40151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 40251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 40351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 40451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 40551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 40651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 40751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 40851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 40951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 41051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 41151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 41251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 41351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 41451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 41551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + (x3i); 41651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - (x3r); 41751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 41851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 41951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 42051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 42151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 42251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 42351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 42451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 42551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 42651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 42751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 42851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 42951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 43051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 43151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 43251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 43351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 43451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 43551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 43651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 43751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 43851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 43951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (; j < nodespacing * del; j += nodespacing) { 44051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 44151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1) - 512); 44251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1) - 1024); 44351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 44451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) - 511); 44551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) - 1023); 44651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 44751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 44851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 44951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 45051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 45151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 45251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 45351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 45451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 45551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 45651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 45751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 45851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 45951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 46051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 46151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 46251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 46351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 46451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 46551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) - ixheaacd_mult32(x1i, w1h)); 46651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(ixheaacd_mult32(x1r, w1h), x1i, w1l); 46751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 46851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 46951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2h) + ixheaacd_mult32(x2i, w2l)); 47051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = -ixheaacd_mult32(x2r, w2l) + ixheaacd_mult32(x2i, w2h); 47151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 47251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 47351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (-ixheaacd_mult32(x3r, w3l) + ixheaacd_mult32(x3i, w3h)); 47451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = ixheaacd_mac32(ixheaacd_mult32(x3r, w3h), x3i, w3l); 47551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 47651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 47751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 47851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 47951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 48051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 48151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 48251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 48351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 48451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 48551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i - x3i; 48651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 48751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i + (x3i << 1); 48851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 48951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 49051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 49151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 49251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 49351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + (x3i); 49451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - (x3r); 49551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 49651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 49751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 49851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 49951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 50051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 50151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 50251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 50351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 50451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 50551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 50651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 50751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 50851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 50951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 51051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 51151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 51251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 51351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 51451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 51551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 51651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 51751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick nodespacing >>= 2; 51851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick del <<= 2; 51951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick in_loop_cnt >>= 2; 52051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 52151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 52251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < 2 * nlength; i += 2) { 52351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick fin_re[i] = y[i]; 52451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick fin_im[i] = y[i + 1]; 52551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 52651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 52751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return; 52851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 52951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 53051aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickVOID ixheaacd_complex_fft_p2_dec(WORD32 *xr, WORD32 *xi, WORD32 nlength, 53151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 fft_mode, WORD32 *preshift) { 53251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 i, j, k, n_stages; 53351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 h2, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 53451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 del, nodespacing, in_loop_cnt; 53551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 not_power_4; 53651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 npts, shift; 53751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 dig_rev_shift; 53851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 ptr_x[1024]; 53951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 y[1024]; 54051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 npoints = nlength; 54151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 n = 0; 54251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *ptr_y = y; 54351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick const WORD32 *ptr_w; 54451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick dig_rev_shift = ixheaacd_norm32(npoints) + 1 - 16; 54551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick n_stages = 30 - ixheaacd_norm32(npoints); 54651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick not_power_4 = n_stages & 1; 54751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 54851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick n_stages = n_stages >> 1; 54951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 55051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick npts = npoints; 55151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick while (npts >> 1) { 55251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick n++; 55351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick npts = npts >> 1; 55451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 55551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 55651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (n % 2 == 0) 55751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick shift = ((n + 4)) / 2; 55851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick else 55951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick shift = ((n + 3) / 2); 56051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 56151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < nlength; i++) { 56251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i] = (xr[i] / (1 << (shift))); 56351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 1] = (xi[i] / (1 << (shift))); 56451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 56551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 56651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (fft_mode == -1) { 56751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_w = ixheaacd_twiddle_table_fft_32x32; 56851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 56951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < npoints; i += 4) { 57051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *inp = ptr_x; 57151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 57251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick DIG_REV(i, dig_rev_shift, h2); 57351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (not_power_4) { 57451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick h2 += 1; 57551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick h2 &= ~1; 57651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 57751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (h2); 57851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 57951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = *inp; 58051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = *(inp + 1); 58151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (npoints >> 1); 58251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 58351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *inp; 58451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(inp + 1); 58551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (npoints >> 1); 58651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 58751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *inp; 58851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(inp + 1); 58951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (npoints >> 1); 59051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 59151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *inp; 59251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(inp + 1); 59351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 59451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x2r; 59551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x2i; 59651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 59751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 59851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 59951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 60051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 60151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 60251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 60351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x1r; 60451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x1i; 60551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 60651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 60751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + x3i; 60851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - x3r; 60951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 61051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 61151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 61251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x0r; 61351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x0i; 61451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x2r; 61551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x2i; 61651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x1r; 61751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x1i; 61851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x3i; 61951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x3r; 62051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 62151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y -= 2 * npoints; 62251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick del = 4; 62351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick nodespacing = 64; 62451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick in_loop_cnt = npoints >> 4; 62551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = n_stages - 1; i > 0; i--) { 62651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick const WORD32 *twiddles = ptr_w; 62751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *data = ptr_y; 62851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1h, w2h, w3h, w1l, w2l, w3l; 62951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 sec_loop_cnt; 63051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 63151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 63251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 63351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 63451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 63551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 63651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = (*data); 63751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = (*(data + 1)); 63851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 63951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 64051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = (*data); 64151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = (*(data + 1)); 64251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 64351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 64451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = (*data); 64551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = (*(data + 1)); 64651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 64751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 64851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x2r; 64951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x2i; 65051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 65151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 65251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 65351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 65451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 65551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 65651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 65751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x1r; 65851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x1i; 65951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 66051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 66151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + x3i; 66251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - x3r; 66351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 66451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 66551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 66651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 66751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 66851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 66951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 67051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 67151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 67251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 67351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 67451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 67551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 67651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 67751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 67851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 67951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 68051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 68151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 68251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data = ptr_y + 2; 68351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 68451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sec_loop_cnt = (nodespacing * del); 68551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sec_loop_cnt = (sec_loop_cnt / 4) + (sec_loop_cnt / 8) - 68651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (sec_loop_cnt / 16) + (sec_loop_cnt / 32) - 68751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (sec_loop_cnt / 64) + (sec_loop_cnt / 128) - 68851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (sec_loop_cnt / 256); 68951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick j = nodespacing; 69051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 69151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = nodespacing; j <= sec_loop_cnt; j += nodespacing) { 69251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 69351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 69451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1)); 69551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) + 1); 69651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1)); 69751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) + 1); 69851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 69951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 70051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 70151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 70251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 70351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 70451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 70551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 70651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 70751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 70851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 70951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 71051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 71151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 71251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 71351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 71451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 71551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 71651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 71751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) - ixheaacd_mult32(x1i, w1h)); 71851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(ixheaacd_mult32(x1r, w1h), x1i, w1l); 71951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 72051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 72151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2l) - ixheaacd_mult32(x2i, w2h)); 72251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = ixheaacd_mac32(ixheaacd_mult32(x2r, w2h), x2i, w2l); 72351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 72451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 72551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x3r, w3l) - ixheaacd_mult32(x3i, w3h)); 72651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = ixheaacd_mac32(ixheaacd_mult32(x3r, w3h), x3i, w3l); 72751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 72851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 72951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 73051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 73151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 73251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 73351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 73451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 73551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 73651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 73751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 73851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 73951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 74051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 74151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 74251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 74351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 74451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 74551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + (x3i); 74651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - (x3r); 74751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 74851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 74951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 75051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 75151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 75251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 75351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 75451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 75551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 75651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 75751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 75851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 75951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 76051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 76151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 76251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 76351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 76451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 76551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 76651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 76751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 76851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 76951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (; j <= (nodespacing * del) >> 1; j += nodespacing) { 77051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 77151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1)); 77251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512); 77351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 77451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) + 1); 77551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511); 77651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 77751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 77851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 77951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 78051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 78151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 78251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 78351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 78451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 78551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 78651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 78751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 78851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 78951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 79051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 79151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 79251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 79351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 79451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) - ixheaacd_mult32(x1i, w1h)); 79551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(ixheaacd_mult32(x1r, w1h), x1i, w1l); 79651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 79751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 79851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2l) - ixheaacd_mult32(x2i, w2h)); 79951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = ixheaacd_mac32(ixheaacd_mult32(x2r, w2h), x2i, w2l); 80051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 80151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 80251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x3r, w3h) + ixheaacd_mult32(x3i, w3l)); 80351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = -ixheaacd_mult32(x3r, w3l) + ixheaacd_mult32(x3i, w3h); 80451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 80551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 80651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 80751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 80851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 80951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 81051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 81151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 81251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 81351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 81451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 81551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 81651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 81751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 81851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 81951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 82051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 82151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 82251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + (x3i); 82351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - (x3r); 82451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 82551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 82651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 82751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 82851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 82951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 83051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 83151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 83251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 83351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 83451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 83551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 83651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 83751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 83851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 83951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 84051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 84151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 84251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 84351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 84451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 84551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 84651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (; j <= sec_loop_cnt * 2; j += nodespacing) { 84751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 84851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1) - 512); 84951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512); 85051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 85151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) - 511); 85251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511); 85351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 85451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 85551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 85651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 85751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 85851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 85951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 86051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 86151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 86251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 86351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 86451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 86551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 86651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 86751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 86851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 86951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 87051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 87151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 87251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) - ixheaacd_mult32(x1i, w1h)); 87351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(ixheaacd_mult32(x1r, w1h), x1i, w1l); 87451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 87551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 87651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2h) + ixheaacd_mult32(x2i, w2l)); 87751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = -ixheaacd_mult32(x2r, w2l) + ixheaacd_mult32(x2i, w2h); 87851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 87951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 88051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x3r, w3h) + ixheaacd_mult32(x3i, w3l)); 88151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = -ixheaacd_mult32(x3r, w3l) + ixheaacd_mult32(x3i, w3h); 88251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 88351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 88451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 88551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 88651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 88751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 88851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 88951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 89051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 89151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 89251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 89351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 89451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 89551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 89651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 89751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 89851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 89951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 90051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + (x3i); 90151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - (x3r); 90251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 90351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 90451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 90551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 90651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 90751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 90851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 90951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 91051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 91151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 91251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 91351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 91451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 91551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 91651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 91751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 91851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 91951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 92051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 92151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 92251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 92351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 92451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (; j < nodespacing * del; j += nodespacing) { 92551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 92651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1) - 512); 92751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1) - 1024); 92851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 92951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) - 511); 93051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) - 1023); 93151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 93251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 93351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 93451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 93551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 93651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 93751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 93851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 93951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 94051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 94151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 94251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 94351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 94451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 94551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 94651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 94751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 94851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 94951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 95051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) - ixheaacd_mult32(x1i, w1h)); 95151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(ixheaacd_mult32(x1r, w1h), x1i, w1l); 95251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 95351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 95451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2h) + ixheaacd_mult32(x2i, w2l)); 95551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = -ixheaacd_mult32(x2r, w2l) + ixheaacd_mult32(x2i, w2h); 95651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 95751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 95851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (-ixheaacd_mult32(x3r, w3l) + ixheaacd_mult32(x3i, w3h)); 95951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = ixheaacd_mac32(ixheaacd_mult32(x3r, w3h), x3i, w3l); 96051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 96151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 96251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 96351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 96451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 96551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 96651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 96751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 96851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 96951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 97051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i - x3i; 97151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 97251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i + (x3i << 1); 97351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 97451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 97551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 97651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 97751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 97851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r + (x3i); 97951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i - (x3r); 98051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r - (x3i << 1); 98151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i + (x3r << 1); 98251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 98351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 98451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 98551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 98651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 98751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 98851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 98951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 99051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 99151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 99251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 99351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 99451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 99551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 99651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 99751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 99851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 99951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 100051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 100151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 100251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick nodespacing >>= 2; 100351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick del <<= 2; 100451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick in_loop_cnt >>= 2; 100551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 100651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (not_power_4) { 100751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick const WORD32 *twiddles = ptr_w; 100851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick nodespacing <<= 1; 100951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick shift += 1; 101051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 101151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = del / 2; j != 0; j--) { 101251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1h = *twiddles; 101351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1l = *(twiddles + 1); 101451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 101551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick twiddles += nodespacing * 2; 101651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 101751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = *ptr_y; 101851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = *(ptr_y + 1); 101951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y += (del << 1); 102051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 102151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *ptr_y; 102251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(ptr_y + 1); 102351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 102451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) - ixheaacd_mult32(x1i, w1h)); 102551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(ixheaacd_mult32(x1r, w1h), x1i, w1l); 102651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 102751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 102851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y = (x0r) / 2 - (x1r) / 2; 102951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(ptr_y + 1) = (x0i) / 2 - (x1i) / 2; 103051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y -= (del << 1); 103151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 103251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y = (x0r) / 2 + (x1r) / 2; 103351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(ptr_y + 1) = (x0i) / 2 + (x1i) / 2; 103451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y += 2; 103551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 103651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick twiddles = ptr_w; 103751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = del / 2; j != 0; j--) { 103851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1h = *twiddles; 103951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1l = *(twiddles + 1); 104051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 104151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick twiddles += nodespacing * 2; 104251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 104351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = *ptr_y; 104451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = *(ptr_y + 1); 104551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y += (del << 1); 104651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 104751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *ptr_y; 104851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(ptr_y + 1); 104951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 105051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1h) + ixheaacd_mult32(x1i, w1l)); 105151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = -ixheaacd_mult32(x1r, w1l) + ixheaacd_mult32(x1i, w1h); 105251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 105351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 105451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y = (x0r) / 2 - (x1r) / 2; 105551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(ptr_y + 1) = (x0i) / 2 - (x1i) / 2; 105651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y -= (del << 1); 105751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 105851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y = (x0r) / 2 + (x1r) / 2; 105951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(ptr_y + 1) = (x0i) / 2 + (x1i) / 2; 106051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y += 2; 106151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 106251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 106351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 106451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 106551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 106651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick else { 106751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_w = ixheaacd_twiddle_table_fft_32x32; 106851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 106951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < npoints; i += 4) { 107051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *inp = ptr_x; 107151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 107251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick DIG_REV(i, dig_rev_shift, h2); 107351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (not_power_4) { 107451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick h2 += 1; 107551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick h2 &= ~1; 107651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 107751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (h2); 107851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 107951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = *inp; 108051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = *(inp + 1); 108151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (npoints >> 1); 108251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 108351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *inp; 108451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(inp + 1); 108551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (npoints >> 1); 108651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 108751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *inp; 108851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(inp + 1); 108951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inp += (npoints >> 1); 109051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 109151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *inp; 109251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(inp + 1); 109351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 109451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x2r; 109551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x2i; 109651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 109751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 109851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 109951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 110051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 110151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 110251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 110351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x1r; 110451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x1i; 110551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 110651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 110751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r - x3i; 110851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i + x3r; 110951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r + (x3i << 1); 111051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i - (x3r << 1); 111151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 111251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x0r; 111351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x0i; 111451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x2r; 111551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x2i; 111651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x1r; 111751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x1i; 111851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x3i; 111951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y++ = x3r; 112051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 112151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y -= 2 * npoints; 112251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick del = 4; 112351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick nodespacing = 64; 112451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick in_loop_cnt = npoints >> 4; 112551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = n_stages - 1; i > 0; i--) { 112651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick const WORD32 *twiddles = ptr_w; 112751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *data = ptr_y; 112851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1h, w2h, w3h, w1l, w2l, w3l; 112951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 sec_loop_cnt; 113051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 113151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 113251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 113351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 113451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 113551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 113651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = (*data); 113751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = (*(data + 1)); 113851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 113951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 114051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = (*data); 114151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = (*(data + 1)); 114251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 114351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 114451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = (*data); 114551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = (*(data + 1)); 114651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 114751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 114851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + x2r; 114951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + x2i; 115051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 115151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 115251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 115351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 115451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 115551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 115651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 1157b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri x0r = ixheaacd_add32_sat(x0r, x1r); 1158b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri x0i = ixheaacd_add32_sat(x0i, x1i); 1159b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri x1r = ixheaacd_sub32_sat(x0r, (x1r << 1)); 1160b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri x1i = ixheaacd_sub32_sat(x0i, (x1i << 1)); 1161b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri x2r = ixheaacd_sub32_sat(x2r, x3i); 1162b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri x2i = ixheaacd_add32_sat(x2i, x3r); 1163b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri x3i = ixheaacd_add32_sat(x2r, (x3i << 1)); 1164b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri x3r = ixheaacd_sub32_sat(x2i, (x3r << 1)); 116551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 116651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 116751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 116851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 116951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 117051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 117151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 117251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 117351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 117451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 117551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 117651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 117751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 117851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 117951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 118051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 118151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 118251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data = ptr_y + 2; 118351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 118451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sec_loop_cnt = (nodespacing * del); 118551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sec_loop_cnt = (sec_loop_cnt / 4) + (sec_loop_cnt / 8) - 118651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (sec_loop_cnt / 16) + (sec_loop_cnt / 32) - 118751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (sec_loop_cnt / 64) + (sec_loop_cnt / 128) - 118851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (sec_loop_cnt / 256); 118951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick j = nodespacing; 119051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 119151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = nodespacing; j <= sec_loop_cnt; j += nodespacing) { 119251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 119351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1)); 119451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1)); 119551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 119651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) + 1); 119751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) + 1); 119851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 119951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 120051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 120151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 120251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 120351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 120451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 120551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 120651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 120751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 120851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 120951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 121051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 121151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 121251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 121351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 121451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 121551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 121651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 121751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) + ixheaacd_mult32(x1i, w1h)); 121851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(-ixheaacd_mult32(x1r, w1h), x1i, w1l); 121951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 122051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 122151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2l) + ixheaacd_mult32(x2i, w2h)); 122251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = ixheaacd_mac32(-ixheaacd_mult32(x2r, w2h), x2i, w2l); 122351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 122451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 122551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x3r, w3l) + ixheaacd_mult32(x3i, w3h)); 122651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = ixheaacd_mac32(-ixheaacd_mult32(x3r, w3h), x3i, w3l); 122751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 122851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 122951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 123051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 123151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 123251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 123351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 123451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 123551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 123651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 123751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 123851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 123951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 124051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 124151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 124251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 124351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 124451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 124551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r - (x3i); 124651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i + (x3r); 124751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r + (x3i << 1); 124851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i - (x3r << 1); 124951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 125051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 125151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 125251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 125351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 125451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 125551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 125651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 125751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 125851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 125951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 126051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 126151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 126251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 126351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 126451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 126551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 126651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 126751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 126851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 126951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (; j <= (nodespacing * del) >> 1; j += nodespacing) { 127051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 127151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1)); 127251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512); 127351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 127451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) + 1); 127551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511); 127651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 127751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 127851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 127951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 128051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 128151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 128251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 128351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 128451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 128551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 128651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 128751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 128851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 128951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 129051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 129151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 129251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 129351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 129451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 129551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) + ixheaacd_mult32(x1i, w1h)); 129651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(-ixheaacd_mult32(x1r, w1h), x1i, w1l); 129751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 129851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 129951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2l) + ixheaacd_mult32(x2i, w2h)); 130051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = ixheaacd_mac32(-ixheaacd_mult32(x2r, w2h), x2i, w2l); 130151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 130251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 130351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x3r, w3h) - ixheaacd_mult32(x3i, w3l)); 130451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = ixheaacd_mult32(x3r, w3l) + ixheaacd_mult32(x3i, w3h); 130551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 130651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 130751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 130851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 130951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 131051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 131151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 131251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 131351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 131451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 131551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 131651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 131751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 131851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 131951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 132051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 132151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 132251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 132351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r - (x3i); 132451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i + (x3r); 132551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r + (x3i << 1); 132651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i - (x3r << 1); 132751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 132851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 132951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 133051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 133151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 133251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 133351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 133451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 133551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 133651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 133751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 133851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 133951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 134051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 134151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 134251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 134351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 134451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 134551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 134651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 134751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (; j <= sec_loop_cnt * 2; j += nodespacing) { 134851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 134951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1) - 512); 135051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512); 135151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 135251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) - 511); 135351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511); 135451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 135551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 135651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 135751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 135851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 135951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 136051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 136151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 136251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 136351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 136451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 136551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 136651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 136751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 136851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 136951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 137051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 137151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 137251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 137351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) + ixheaacd_mult32(x1i, w1h)); 137451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(-ixheaacd_mult32(x1r, w1h), x1i, w1l); 137551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 137651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 137751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2h) - ixheaacd_mult32(x2i, w2l)); 137851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = ixheaacd_mult32(x2r, w2l) + ixheaacd_mult32(x2i, w2h); 137951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 138051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 138151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x3r, w3h) - ixheaacd_mult32(x3i, w3l)); 138251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = ixheaacd_mult32(x3r, w3l) + ixheaacd_mult32(x3i, w3h); 138351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 138451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 138551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 138651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 138751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 138851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 138951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 139051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 139151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 139251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 139351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i + x3i; 139451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 139551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i - (x3i << 1); 139651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 139751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 139851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 139951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 140051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 140151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r - (x3i); 140251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i + (x3r); 140351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r + (x3i << 1); 140451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i - (x3r << 1); 140551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 140651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 140751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 140851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 140951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 141051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 141151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 141251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 141351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 141451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 141551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 141651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 141751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 141851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 141951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 142051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 142151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 142251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 142351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 142451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 142551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (; j < nodespacing * del; j += nodespacing) { 142651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1h = *(twiddles + 2 * j); 142751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2h = *(twiddles + 2 * (j << 1) - 512); 142851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3h = *(twiddles + 2 * j + 2 * (j << 1) - 1024); 142951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1l = *(twiddles + 2 * j + 1); 143051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w2l = *(twiddles + 2 * (j << 1) - 511); 143151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w3l = *(twiddles + 2 * j + 2 * (j << 1) - 1023); 143251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 143351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (k = in_loop_cnt; k != 0; k--) { 143451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 143551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 143651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 143751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 143851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 143951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *data; 144051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(data + 1); 144151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 144251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 144351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = *data; 144451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = *(data + 1); 144551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 144651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 144751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = *data; 144851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = *(data + 1); 144951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 3 * (del << 1); 145051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 145151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) + ixheaacd_mult32(x1i, w1h)); 145251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(-ixheaacd_mult32(x1r, w1h), x1i, w1l); 145351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 145451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 145551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x2r, w2h) - ixheaacd_mult32(x2i, w2l)); 145651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = ixheaacd_mult32(x2r, w2l) + ixheaacd_mult32(x2i, w2h); 145751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = tmp; 145851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 145951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (-ixheaacd_mult32(x3r, w3l) - ixheaacd_mult32(x3i, w3h)); 146051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = ixheaacd_mac32(-ixheaacd_mult32(x3r, w3h), x3i, w3l); 146151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = tmp; 146251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 146351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = (*data); 146451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = (*(data + 1)); 146551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 146651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x2r); 146751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x2i); 146851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x0r - (x2r << 1); 146951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x0i - (x2i << 1); 147051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x1r + x3r; 147151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x1i - x3i; 147251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x1r - (x3r << 1); 147351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x1i + (x3i << 1); 147451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 147551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = x0r + (x1r); 147651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = x0i + (x1i); 147751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = x0r - (x1r << 1); 147851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = x0i - (x1i << 1); 147951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2r = x2r - (x3i); 148051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x2i = x2i + (x3r); 148151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3i = x2r + (x3i << 1); 148251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x3r = x2i - (x3r << 1); 148351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 148451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x0r; 148551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x0i; 148651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 148751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 148851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x2r; 148951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x2i; 149051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 149151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 149251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x1r; 149351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x1i; 149451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 149551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 149651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *data = x3i; 149751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(data + 1) = x3r; 149851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += (del << 1); 149951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 150051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data -= 2 * npoints; 150151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick data += 2; 150251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 150351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick nodespacing >>= 2; 150451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick del <<= 2; 150551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick in_loop_cnt >>= 2; 150651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 150751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (not_power_4) { 150851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick const WORD32 *twiddles = ptr_w; 150951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick nodespacing <<= 1; 151051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick shift += 1; 151151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = del / 2; j != 0; j--) { 151251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1h = *twiddles; 151351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1l = *(twiddles + 1); 151451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 151551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 151651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick twiddles += nodespacing * 2; 151751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 151851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = *ptr_y; 151951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = *(ptr_y + 1); 152051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y += (del << 1); 152151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 152251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *ptr_y; 152351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(ptr_y + 1); 152451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 152551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1l) + ixheaacd_mult32(x1i, w1h)); 152651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mac32(-ixheaacd_mult32(x1r, w1h), x1i, w1l); 152751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 152851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 152951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y = (x0r) / 2 - (x1r) / 2; 153051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(ptr_y + 1) = (x0i) / 2 - (x1i) / 2; 153151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y -= (del << 1); 153251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 153351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y = (x0r) / 2 + (x1r) / 2; 153451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(ptr_y + 1) = (x0i) / 2 + (x1i) / 2; 153551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y += 2; 153651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 153751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick twiddles = ptr_w; 153851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = del / 2; j != 0; j--) { 153951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1h = *twiddles; 154051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 w1l = *(twiddles + 1); 154151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 154251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick twiddles += nodespacing * 2; 154351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 154451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0r = *ptr_y; 154551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x0i = *(ptr_y + 1); 154651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y += (del << 1); 154751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 154851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = *ptr_y; 154951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = *(ptr_y + 1); 155051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 155151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = (ixheaacd_mult32(x1r, w1h) - ixheaacd_mult32(x1i, w1l)); 155251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1i = ixheaacd_mult32(x1r, w1l) + ixheaacd_mult32(x1i, w1h); 155351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick x1r = tmp; 155451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 155551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y = (x0r) / 2 - (x1r) / 2; 155651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(ptr_y + 1) = (x0i) / 2 - (x1i) / 2; 155751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y -= (del << 1); 155851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 155951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *ptr_y = (x0r) / 2 + (x1r) / 2; 156051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *(ptr_y + 1) = (x0i) / 2 + (x1i) / 2; 156151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y += 2; 156251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 156351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 156451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 156551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 156651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < nlength; i++) { 156751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xr[i] = y[2 * i]; 156851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xi[i] = y[2 * i + 1]; 156951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 157051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 157151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *preshift = shift - *preshift; 157251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return; 157351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 157451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 157551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickstatic PLATFORM_INLINE void ixheaacd_complex_3point_fft(WORD32 *inp, WORD32 *op, 157651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 sign_dir) { 157751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 add_r, sub_r; 157851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 add_i, sub_i; 157951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 temp_real, temp_imag, temp; 158051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 158151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 p1, p2, p3, p4; 158251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 158351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 sinmu; 158451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sinmu = -1859775393 * sign_dir; 158551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 158651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick temp_real = ixheaacd_add32_sat(inp[0], inp[2]); 158751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick temp_imag = ixheaacd_add32_sat(inp[1], inp[3]); 158851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 158951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick add_r = ixheaacd_add32_sat(inp[2], inp[4]); 159051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick add_i = ixheaacd_add32_sat(inp[3], inp[5]); 159151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 159251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sub_r = ixheaacd_sub32_sat(inp[2], inp[4]); 159351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sub_i = ixheaacd_sub32_sat(inp[3], inp[5]); 159451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 159551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick p1 = add_r >> 1; 159651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick p4 = add_i >> 1; 159751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick p2 = ixheaacd_mult32_shl(sub_i, sinmu); 159851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick p3 = ixheaacd_mult32_shl(sub_r, sinmu); 159951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 160051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick temp = ixheaacd_sub32(inp[0], p1); 160151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 160251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick op[0] = ixheaacd_add32_sat(temp_real, inp[4]); 160351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick op[1] = ixheaacd_add32_sat(temp_imag, inp[5]); 160451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick op[2] = ixheaacd_add32_sat(temp, p2); 160551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick op[3] = ixheaacd_sub32_sat(ixheaacd_sub32_sat(inp[1], p3), p4); 160651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick op[4] = ixheaacd_sub32_sat(temp, p2); 160751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick op[5] = ixheaacd_sub32_sat(ixheaacd_add32_sat(inp[1], p3), p4); 160851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 160951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return; 161051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 161151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 161251aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickVOID ixheaacd_complex_fft_p3(WORD32 *xr, WORD32 *xi, WORD32 nlength, 161351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 fft_mode, WORD32 *preshift) { 161451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 i, j; 161551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 shift = 0; 161651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 xr_3[384]; 161751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 xi_3[384]; 161851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 x[1024]; 161951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 y[1024]; 162051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 cnfac, npts; 162151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 mpass = nlength; 162251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 n = 0; 162351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *ptr_x = x; 162451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 *ptr_y = y; 162551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 162651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick cnfac = 0; 162751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick while (mpass % 3 == 0) { 162851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick mpass /= 3; 162951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick cnfac++; 163051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 163151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick npts = mpass; 163251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 163351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < 3 * cnfac; i++) { 163451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = 0; j < mpass; j++) { 163551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xr_3[j] = xr[3 * j + i]; 163651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xi_3[j] = xi[3 * j + i]; 163751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 163851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 163951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (*ixheaacd_complex_fft_p2)(xr_3, xi_3, mpass, fft_mode, &shift); 164051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 164151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = 0; j < mpass; j++) { 164251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xr[3 * j + i] = xr_3[j]; 164351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xi[3 * j + i] = xi_3[j]; 164451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 164551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 164651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 164751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick while (npts >> 1) { 164851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick n++; 164951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick npts = npts >> 1; 165051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 165151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 165251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (n % 2 == 0) 165351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick shift = ((n + 4)) / 2; 165451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick else 165551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick shift = ((n + 5) / 2); 165651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 165751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *preshift = shift - *preshift + 1; 165851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 165951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < nlength; i++) { 166051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i] = (xr[i] >> 1); 166151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 1] = (xi[i] >> 1); 166251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 166351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 166451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick { 166551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick const WORD32 *w1r, *w1i; 166651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tmp; 166751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1r = ixheaacd_twiddle_table_3pr; 166851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1i = ixheaacd_twiddle_table_3pi; 166951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 167051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (fft_mode < 0) { 167151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < nlength; i += 3) { 167251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = ixheaacd_sub32_sat(ixheaacd_mult32(ptr_x[2 * i], (*w1r)), 167351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 1], (*w1i))); 167451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 1] = 167551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_add32_sat(ixheaacd_mult32(ptr_x[2 * i], (*w1i)), 167651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 1], (*w1r))); 167751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i] = tmp; 167851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 167951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1r++; 168051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1i++; 168151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 168251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = ixheaacd_sub32_sat(ixheaacd_mult32(ptr_x[2 * i + 2], (*w1r)), 168351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 3], (*w1i))); 168451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 3] = 168551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_add32_sat(ixheaacd_mult32(ptr_x[2 * i + 2], (*w1i)), 168651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 3], (*w1r))); 168751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 2] = tmp; 168851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 168951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1r++; 169051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1i++; 169151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 169251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = ixheaacd_sub32_sat(ixheaacd_mult32(ptr_x[2 * i + 4], (*w1r)), 169351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 5], (*w1i))); 169451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 5] = 169551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_add32_sat(ixheaacd_mult32(ptr_x[2 * i + 4], (*w1i)), 169651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 5], (*w1r))); 169751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 4] = tmp; 169851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 169951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1r += 3 * (128 / mpass - 1) + 1; 170051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1i += 3 * (128 / mpass - 1) + 1; 170151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 170251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 170351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 170451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick else { 170551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < nlength; i += 3) { 170651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = ixheaacd_add32_sat(ixheaacd_mult32(ptr_x[2 * i], (*w1r)), 170751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 1], (*w1i))); 170851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 1] = 170951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_sub32_sat(ixheaacd_mult32(ptr_x[2 * i + 1], (*w1r)), 171051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i], (*w1i))); 171151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i] = tmp; 171251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 171351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1r++; 171451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1i++; 171551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 171651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = ixheaacd_add32_sat(ixheaacd_mult32(ptr_x[2 * i + 2], (*w1r)), 171751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 3], (*w1i))); 171851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 3] = 171951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_sub32_sat(ixheaacd_mult32(ptr_x[2 * i + 3], (*w1r)), 172051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 2], (*w1i))); 172151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 2] = tmp; 172251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 172351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1r++; 172451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1i++; 172551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 172651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick tmp = ixheaacd_add32_sat(ixheaacd_mult32(ptr_x[2 * i + 4], (*w1r)), 172751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 5], (*w1i))); 172851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 5] = 172951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_sub32_sat(ixheaacd_mult32(ptr_x[2 * i + 5], (*w1r)), 173051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_mult32(ptr_x[2 * i + 4], (*w1i))); 173151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x[2 * i + 4] = tmp; 173251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 173351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1r += 3 * (128 / mpass - 1) + 1; 173451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick w1i += 3 * (128 / mpass - 1) + 1; 173551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 173651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 173751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 173851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 173951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < mpass; i++) { 174051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_complex_3point_fft(ptr_x, ptr_y, fft_mode); 174151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 174251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_x = ptr_x + 6; 174351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_y = ptr_y + 6; 174451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 174551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 174651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < mpass; i++) { 174751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xr[i] = y[6 * i]; 174851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xi[i] = y[6 * i + 1]; 174951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 175051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 175151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < mpass; i++) { 175251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xr[mpass + i] = y[6 * i + 2]; 175351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xi[mpass + i] = y[6 * i + 3]; 175451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 175551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 175651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < mpass; i++) { 175751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xr[2 * mpass + i] = y[6 * i + 4]; 175851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick xi[2 * mpass + i] = y[6 * i + 5]; 175951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 176051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return; 176151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 176251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 176351aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickVOID ixheaacd_complex_fft(WORD32 *data_r, WORD32 *data_i, WORD32 nlength, 176451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 fft_mode, WORD32 *preshift) { 176551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (nlength & (nlength - 1)) { 176651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if ((nlength != 24) && (nlength != 48) && (nlength != 96) && 176751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (nlength != 192) && (nlength != 384)) { 176851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick printf("%d point FFT not supported", nlength); 176951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick exit(0); 177051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 177151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_complex_fft_p3(data_r, data_i, nlength, fft_mode, preshift); 177251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } else 177351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (*ixheaacd_complex_fft_p2)(data_r, data_i, nlength, fft_mode, preshift); 177451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 177551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return; 177651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 1777