199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Use of this source code is governed by a BSD-style license 599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// that can be found in the LICENSE file in the root of the source 699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// tree. An additional intellectual property rights grant can be found 799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// in the file PATENTS. All contributing project authors may 899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// be found in the AUTHORS file in the root of the source tree. 999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 1099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// This file was originally licensed as follows. It has been 1199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// relicensed with permission from the copyright holders. 1299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 1399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 1499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 1599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// File Name: armSP_FFT_CToC_SC32_Radix4_fs_unsafe_s.s 1699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// OpenMAX DL: v1.0.2 1799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Last Modified Revision: 7767 1899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Last Modified Date: Thu, 27 Sep 2007 1999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 2099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. 2199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 2299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 2399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 2499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Description: 2599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Compute a first stage Radix 4 FFT stage for a N point complex signal 2699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// 2799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 2899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 2999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 3099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Include standard headers 3199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 32bdf981cb383b7ec472ee86d2fedb53937285f894rtoy@google.com#include "dl/api/arm/armCOMM_s.h" 33bdf981cb383b7ec472ee86d2fedb53937285f894rtoy@google.com#include "dl/api/arm/omxtypes_s.h" 3499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 3599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Import symbols required from other files 3699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// (For example tables) 3799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 3899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 3999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Set debugging level 4299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@//DEBUG_ON SETL {TRUE} 4399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Guarding implementation by the processor name 4799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Guarding implementation by the processor name 5199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@//Input Registers 5499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pSrc r0 5699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pDst r2 5799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pTwiddle r1 5899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pPingPongBuf r5 5999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define subFFTNum r6 6099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define subFFTSize r7 6199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@//Output Registers 6499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@//Local Scratch Registers 6799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define grpSize r3 6999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Reuse grpSize as setCount 7099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define setCount r3 7199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pointStep r4 7299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define outPointStep r4 7399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define setStep r8 7499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define step1 r9 7599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define step3 r10 7699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 7799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Neon Registers 7899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 7999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dXr0 D0.S32 8099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dXi0 D1.S32 8199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dXr1 D2.S32 8299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dXi1 D3.S32 8399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dXr2 D4.S32 8499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dXi2 D5.S32 8599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dXr3 D6.S32 8699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dXi3 D7.S32 8799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dYr0 D8.S32 8899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dYi0 D9.S32 8999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dYr1 D10.S32 9099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dYi1 D11.S32 9199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dYr2 D12.S32 9299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dYi2 D13.S32 9399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dYr3 D14.S32 9499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dYi3 D15.S32 9599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qX0 Q0.S32 9699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qX1 Q1.S32 9799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qX2 Q2.S32 9899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qX3 Q3.S32 9999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qY0 Q4.S32 10099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qY1 Q5.S32 10199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qY2 Q6.S32 10299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qY3 Q7.S32 10399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dZr0 D16.S32 10499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dZi0 D17.S32 10599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dZr1 D18.S32 10699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dZi1 D19.S32 10799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dZr2 D20.S32 10899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dZi2 D21.S32 10999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dZr3 D22.S32 11099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dZi3 D23.S32 11199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qZ0 Q8.S32 11299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qZ1 Q9.S32 11399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qZ2 Q10.S32 11499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qZ3 Q11.S32 11599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 11699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 1175d8507771824df2b96d9c6f2fd55a47fcfd9dec9rtoy@google.com .macro FFTSTAGE scaled, inverse, name 11899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 11999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Define stack arguments 12099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 12199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// pT0+1 increments pT0 by 8 bytes 12299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// pT0+pointStep = increment of 8*pointStep bytes = 2*grpSize bytes 12399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Note: outPointStep = pointStep for firststage 12499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 12599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com MOV pointStep,subFFTNum,LSL #1 12699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 12799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 12899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Update pSubFFTSize and pSubFFTNum regs 12999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr0,dXi0},[pSrc :128],pointStep @// data[0] 13099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com MOV subFFTSize,#4 @// subFFTSize = 1 for the first stage 13199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Note: setCount = subFFTNum/4 (reuse the grpSize reg for setCount) 13399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com LSR grpSize,subFFTNum,#2 13499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr1,dXi1},[pSrc :128],pointStep @// data[1] 13599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com MOV subFFTNum,grpSize 13699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Calculate the step of input data for the next set 13999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @//MOV setStep,pointStep,LSL #1 14099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com MOV setStep,grpSize,LSL #4 14199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr2,dXi2},[pSrc :128],pointStep @// data[2] 14299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com ADD setStep,setStep,pointStep @// setStep = 3*pointStep 14399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com RSB setStep,setStep,#16 @// setStep = - 3*pointStep+16 14499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 14599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] & update pSrc for the next set 14699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com MOV step1,pointStep,LSL #1 @// step1 = 2*pointStep 14799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 14899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .ifeqs "\scaled", "TRUE" 14999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD qY0,qX0,qX2 15099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .else 15199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD qY0,qX0,qX2 15299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .endif 15399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 15499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com RSB step3,pointStep,#0 @// step3 = -pointStep 15599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 15699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// grp = 0 a special case since all the twiddle factors are 1 15799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Loop on the sets : 2 sets at a time 15899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 15999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comgrpZeroSetLoop\name : 16099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 16199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 16299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 16399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Decrement setcount 16499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com SUBS setCount,setCount,#2 @// decrement the set loop counter 16599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 16699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .ifeqs "\scaled", "TRUE" 16799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 16899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// finish first stage of 4 point FFT 16999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 17099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHSUB qY2,qX0,qX2 17199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 17299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr0,dXi0},[pSrc :128],step1 @// data[0] 17399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD qY1,qX1,qX3 17499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr2,dXi2},[pSrc :128],step3 @// data[2] 17599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHSUB qY3,qX1,qX3 17699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 17799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 17899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// finish second stage of 4 point FFT 17999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 18099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .ifeqs "\inverse", "TRUE" 18199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 18299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr1,dXi1},[pSrc :128],step1 @// data[1] 18399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD qZ0,qY0,qY1 18499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 18599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] & update pSrc for the next set 18699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHSUB dZr3,dYr2,dYi3 18799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 18899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr0,dZi0},[pDst :128],outPointStep 18999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD dZi3,dYi2,dYr3 19099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 19199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHSUB qZ1,qY0,qY1 19299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr3,dZi3},[pDst :128],outPointStep 19399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 19499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD dZr2,dYr2,dYi3 19599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr1,dZi1},[pDst :128],outPointStep 19699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHSUB dZi2,dYi2,dYr3 19799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 19899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD qY0,qX0,qX2 @// u0 for next iteration 19999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr2,dZi2},[pDst :128],setStep 20099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 20199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 20299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .else 20399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 20499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr1,dXi1},[pSrc :128],step1 @// data[1] 20599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD qZ0,qY0,qY1 20699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 20799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] & update pSrc for the next set 20899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD dZr2,dYr2,dYi3 20999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 21099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr0,dZi0},[pDst :128],outPointStep 21199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHSUB dZi2,dYi2,dYr3 21299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 21399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHSUB qZ1,qY0,qY1 21499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr2,dZi2},[pDst :128],outPointStep 21599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 21699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHSUB dZr3,dYr2,dYi3 21799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr1,dZi1},[pDst :128],outPointStep 21899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD dZi3,dYi2,dYr3 21999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 22099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VHADD qY0,qX0,qX2 @// u0 for next iteration 22199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr3,dZi3},[pDst :128],setStep 22299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 22399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .endif 22499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 22599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 22699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 22799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .else 22899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 22999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// finish first stage of 4 point FFT 23099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 23199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 23299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VSUB qY2,qX0,qX2 23399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 23499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr0,dXi0},[pSrc :128],step1 @// data[0] 23599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD qY1,qX1,qX3 23699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr2,dXi2},[pSrc :128],step3 @// data[2] 23799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VSUB qY3,qX1,qX3 23899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 23999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 24099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// finish second stage of 4 point FFT 24199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 24299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .ifeqs "\inverse", "TRUE" 24399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 24499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr1,dXi1},[pSrc :128],step1 @// data[1] 24599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD qZ0,qY0,qY1 24699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 24799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] & update pSrc for the next set 24899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VSUB dZr3,dYr2,dYi3 24999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 25099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr0,dZi0},[pDst :128],outPointStep 25199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD dZi3,dYi2,dYr3 25299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 25399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VSUB qZ1,qY0,qY1 25499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr3,dZi3},[pDst :128],outPointStep 25599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 25699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD dZr2,dYr2,dYi3 25799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr1,dZi1},[pDst :128],outPointStep 25899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VSUB dZi2,dYi2,dYr3 25999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 26099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD qY0,qX0,qX2 @// u0 for next iteration 26199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr2,dZi2},[pDst :128],setStep 26299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 26399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 26499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .else 26599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 26699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr1,dXi1},[pSrc :128],step1 @// data[1] 26799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD qZ0,qY0,qY1 26899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 26999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] & update pSrc for the next set 27099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD dZr2,dYr2,dYi3 27199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 27299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr0,dZi0},[pDst :128],outPointStep 27399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VSUB dZi2,dYi2,dYr3 27499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 27599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VSUB qZ1,qY0,qY1 27699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr2,dZi2},[pDst :128],outPointStep 27799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 27899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VSUB dZr3,dYr2,dYi3 27999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr1,dZi1},[pDst :128],outPointStep 28099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD dZi3,dYi2,dYr3 28199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 28299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VADD qY0,qX0,qX2 @// u0 for next iteration 28399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST2 {dZr3,dZi3},[pDst :128],setStep 28499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 28599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .endif 28699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 28799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .endif 28899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 28999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com BGT grpZeroSetLoop\name 29099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 29199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// reset pSrc to pDst for the next stage 29299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com SUB pSrc,pDst,pointStep @// pDst -= 2*grpSize 29399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com MOV pDst,pPingPongBuf 29499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 29599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 29699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .endm 29799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 29899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 29999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 30099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_START armSP_FFTFwd_CToC_SC32_Radix4_fs_OutOfPlace_unsafe,r4 30199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com FFTSTAGE "FALSE","FALSE",fwd 30299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_END 30399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 30499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 30599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 30699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_START armSP_FFTInv_CToC_SC32_Radix4_fs_OutOfPlace_unsafe,r4 30799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com FFTSTAGE "FALSE","TRUE",inv 30899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_END 30999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 31099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 31199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_START armSP_FFTFwd_CToC_SC32_Sfs_Radix4_fs_OutOfPlace_unsafe,r4 31299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com FFTSTAGE "TRUE","FALSE",fwdsfs 31399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_END 31499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 31599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 31699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_START armSP_FFTInv_CToC_SC32_Sfs_Radix4_fs_OutOfPlace_unsafe,r4 31799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com FFTSTAGE "TRUE","TRUE",invsfs 31899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_END 31999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 32099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .end 321