14d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// 24d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 34d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// 44d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Use of this source code is governed by a BSD-style license 54d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// that can be found in the LICENSE file in the root of the source 64d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// tree. An additional intellectual property rights grant can be found 74d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// in the file PATENTS. All contributing project authors may 84d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// be found in the AUTHORS file in the root of the source tree. 94d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// 104d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// This is a modification of armSP_FFT_CToC_FC32_Radix8_fs_unsafe_s.s 114d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// to support float instead of SC32. 124d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// 134d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 144d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// 154d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Description: 164d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Compute a first stage Radix 8 FFT stage for a N point complex signal 174d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// 184d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// 194d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 204d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 214d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Include standard headers 224d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 234d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#include "dl/api/arm/arm64COMM_s.h" 244d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#include "dl/api/arm/omxtypes_s.h" 254d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 264d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Import symbols required from other files 274d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// (For example tables) 284d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 294d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 304d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Set debugging level 314d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com//DEBUG_ON SETL {TRUE} 324d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 334d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 344d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 354d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Guarding implementation by the processor name 364d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 374d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 384d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 394d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 404d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Guarding implementation by the processor name 414d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 424d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com//Input Registers 434d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 444d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define pSrc x0 454d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define pDst x1 464d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define pTwiddle x2 474d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define pSubFFTNum x3 484d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define pSubFFTSize x4 494d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 504d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 514d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com//Output Registers 524d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 534d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 544d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com//Local Scratch Registers 554d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 564d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define subFFTNum x5 574d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define subFFTSize x6 584d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define grpSize x7 594d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Reuse grpSize as setCount 604d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define setCount x7 614d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define pointStep x8 624d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define outPointStep x8 634d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define setStep x9 644d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define step1 x10 654d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define step2 x11 664d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define t0 w12 674d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 684d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 694d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// Neon Registers 704d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 714d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXr0 v0.2s 724d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXi0 v1.2s 734d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXr1 v2.2s 744d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXi1 v3.2s 754d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXr2 v4.2s 764d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXi2 v5.2s 774d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXr3 v6.2s 784d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXi3 v7.2s 794d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXr4 v8.2s 804d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXi4 v9.2s 814d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXr5 v10.2s 824d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXi5 v11.2s 834d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXr6 v12.2s 844d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXi6 v13.2s 854d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXr7 v14.2s 864d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dXi7 v15.2s 874d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qX0 v0.4s 884d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qX1 v1.4s 894d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qX2 v2.4s 904d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qX3 v3.4s 914d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qX4 v4.4s 924d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qX5 v5.4s 934d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qX6 v6.4s 944d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qX7 v7.4s 954d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 964d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUr0 v16.2s 974d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUi0 v17.2s 984d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUr2 v18.2s 994d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUi2 v19.2s 1004d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUr4 v20.2s 1014d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUi4 v21.2s 1024d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUr6 v22.2s 1034d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUi6 v23.2s 1044d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUr1 v24.2s 1054d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUi1 v25.2s 1064d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUr3 v26.2s 1074d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUi3 v27.2s 1084d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUr5 v28.2s 1094d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUi5 v29.2s 1104d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com// reuse dXr7 and dXi7 1114d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUr7 v30.2s 1124d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dUi7 v31.2s 1134d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qU0 v8.4s 1144d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qU1 v12.4s 1154d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qU2 v9.4s 1164d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qU3 v13.4s 1174d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qU4 v10.4s 1184d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qU5 v14.4s 1194d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qU6 v11.4s 1204d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qU7 v15.4s 1214d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1224d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1234d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVr0 v24.2s 1244d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVi0 v25.2s 1254d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVr2 v26.2s 1264d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVi2 v27.2s 1274d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVr4 v28.2s 1284d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVi4 v29.2s 1294d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVr6 v30.2s 1304d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVi6 v31.2s 1314d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVr1 v16.2s 1324d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVi1 v17.2s 1334d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVr3 v18.2s 1344d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVi3 v19.2s 1354d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVr5 v20.2s 1364d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVi5 v21.2s 1374d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVr7 v22.2s 1384d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dVi7 v23.2s 1394d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qV0 v12.4s 1404d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qV1 v8.4s 1414d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qV2 v13.4s 1424d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qV3 v9.4s 1434d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qV4 v14.4s 1444d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qV5 v10.4s 1454d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qV6 v15.4s 1464d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qV7 v11.4s 1474d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1484d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYr0 v16.2s 1494d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYi0 v17.2s 1504d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYr2 v18.2s 1514d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYi2 v19.2s 1524d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYr4 v20.2s 1534d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYi4 v21.2s 1544d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYr6 v22.2s 1554d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYi6 v23.2s 1564d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYr1 v24.2s 1574d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYi1 v25.2s 1584d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYr3 v26.2s 1594d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYi3 v27.2s 1604d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYr5 v28.2s 1614d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYi5 v29.2s 1624d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYr7 v30.2s 1634d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dYi7 v31.2s 1644d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qY0 v8.4s 1654d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qY1 v12.4s 1664d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qY2 v9.4s 1674d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qY3 v13.4s 1684d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qY4 v10.4s 1694d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qY5 v14.4s 1704d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qY6 v11.4s 1714d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define qY7 v15.4s 1724d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1734d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dT0 v14.2s 1744d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dT0s v14.s 1754d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#define dT1 v15.2s 1764d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1774d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com .MACRO FFTSTAGE scaled, inverse, name 1784d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1794d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Define stack arguments 1804d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1814d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Move args values into our work registers 1824d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ldr subFFTNum, [pSubFFTNum] 1834d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ldr subFFTSize, [pSubFFTSize] 1844d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1854d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Update pSubFFTSize and pSubFFTNum regs 1864d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // subFFTSize = 1 for the first stage 1874d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1884d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com movz t0, 0x3f35, lsl #16 // High half word of sqrt(1/2). 1894d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com movk t0, 0x04f3 // Low half word of sqrt(1/2). 1904d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com MOV subFFTSize,#8 1914d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1924d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Note: setCount = subFFTNum/8 (reuse the grpSize reg for setCount) 1934d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com LSR grpSize,subFFTNum,#3 1944d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com MOV subFFTNum,grpSize 1954d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1964d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1974d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // pT0+1 increments pT0 by 8 bytes 1984d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // pT0+pointStep = increment of 8*pointStep bytes = grpSize bytes 1994d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Note: outPointStep = pointStep for firststage 2004d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2014d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com lsl pointStep,grpSize, #3 2024d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2034d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2044d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Calculate the step of input data for the next set 2054d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com //MOV step1,pointStep,LSL #1 // step1 = 2*pointStep 2064d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr0,dXi0},[pSrc],pointStep // data[0] 2074d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com lsl step1,grpSize, #4 2084d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com lsl step2,pointStep, #3 2094d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2104d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr1,dXi1},[pSrc],pointStep // data[1] 2114d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com SUB step2,step2,pointStep // step2 = 7*pointStep 2124d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // setStep = - 7*pointStep+16 2134d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com rsb setStep,step2,#16 2144d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2154d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr2,dXi2},[pSrc],pointStep // data[2] 2164d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr3,dXi3},[pSrc],pointStep // data[3] 2174d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr4,dXi4},[pSrc],pointStep // data[4] 2184d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr5,dXi5},[pSrc],pointStep // data[5] 2194d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr6,dXi6},[pSrc],pointStep // data[6] 2204d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // data[7] & update pSrc for the next set 2214d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // setStep = -7*pointStep + 16 2224d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr7,dXi7},[pSrc],setStep 2234d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // grp = 0 a special case since all the twiddle factors are 1 2244d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Loop on the sets 2254d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2264d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.comradix8fsGrpZeroSetLoop\name : 2274d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2284d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Decrement setcount 2294d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com SUBS setCount,setCount,#2 2304d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2314d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2324d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // finish first stage of 8 point FFT 2334d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2344d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fadd qU0,qX0,qX4 2354d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fadd qU2,qX1,qX5 2364d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fadd qU4,qX2,qX6 2374d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fadd qU6,qX3,qX7 2384d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dUr0,dXr0,dXr4 2394d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dUr2,dXr1,dXr5 2404d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dUr4,dXr2,dXr6 2414d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dUr6,dXr3,dXr7 2424d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dUi0,dXi0,dXi4 2434d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dUi2,dXi1,dXi5 2444d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dUi4,dXi2,dXi6 2454d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dUi6,dXi3,dXi7 2464d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2474d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // finish second stage of 8 point FFT 2484d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2494d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fadd qV0,qU0,qU4 2504d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qV2,qU0,qU4 2514d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fadd qV4,qU2,qU6 2524d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qV6,qU2,qU6 2534d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVr0,dUr0,dUr4 2544d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVr2,dUr0,dUr4 2554d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVr4,dUr2,dUr6 2564d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVr6,dUr2,dUr6 2574d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVi0,dUi0,dUi4 2584d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVi2,dUi0,dUi4 2594d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVi4,dUi2,dUi6 2604d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVi6,dUi2,dUi6 2614d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2624d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // finish third stage of 8 point FFT 2634d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2644d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fadd qY0,qV0,qV4 2654d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qY4,qV0,qV4 2664d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYr0,dVr0,dVr4 2674d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYr4,dVr0,dVr4 2684d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYi0,dVi0,dVi4 2694d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYi4,dVi0,dVi4 2704d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2714d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr0,dYi0},[pDst],step1 // store y0 2724d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2734d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com .ifeqs "\inverse", "TRUE" 2744d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2754d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYr2,dVr2,dVi6 2764d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYi2,dVi2,dVr6 2774d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2784d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYr6,dVr2,dVi6 2794d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr2,dYi2},[pDst],step1 // store y2 2804d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYi6,dVi2,dVr6 2814d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2824d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qU1,qX0,qX4 2834d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUr1,dXr0,dXr4 2844d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUi1,dXi0,dXi4 2854d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2864d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr4,dYi4},[pDst],step1 // store y4 2874d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2884d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qU3,qX1,qX5 2894d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qU5,qX2,qX6 2904d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUr3,dXr1,dXr5 2914d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUr5,dXr2,dXr6 2924d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUi3,dXi1,dXi5 2934d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUi5,dXi2,dXi6 2944d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2954d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr6,dYi6},[pDst],step1 // store y6 2964d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2974d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com .ELSE 2984d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 2994d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYr6,dVr2,dVi6 3004d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYi6,dVi2,dVr6 3014d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3024d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYr2,dVr2,dVi6 3034d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr6,dYi6},[pDst],step1 // store y2 3044d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYi2,dVi2,dVr6 3054d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3064d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3074d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qU1,qX0,qX4 3084d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUr1,dXr0,dXr4 3094d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUi1,dXi0,dXi4 3104d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3114d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr4,dYi4},[pDst],step1 // store y4 3124d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3134d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qU3,qX1,qX5 3144d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qU5,qX2,qX6 3154d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUr3,dXr1,dXr5 3164d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUr5,dXr2,dXr6 3174d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUi3,dXi1,dXi5 3184d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUi5,dXi2,dXi6 3194d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3204d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr2,dYi2},[pDst],step1 // store y6 3214d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3224d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3234d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com .ENDIF 3244d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3254d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // finish first stage of 8 point FFT 3264d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3274d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qU7,qX3,qX7 3284d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUr7,dXr3,dXr7 3294d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dUi7,dXi3,dXi7 3304d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3314d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com mov dT0s[0], t0 3324d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3334d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // finish second stage of 8 point FFT 3344d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3354d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVr1,dUr1,dUi5 3364d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // data[0] for next iteration 3374d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr0,dXi0},[pSrc],pointStep 3384d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVi1,dUi1,dUr5 3394d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVr3,dUr1,dUi5 3404d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr1,dXi1},[pSrc],pointStep // data[1] 3414d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVi3,dUi1,dUr5 3424d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3434d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVr5,dUr3,dUi7 3444d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr2,dXi2},[pSrc],pointStep // data[2] 3454d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVi5,dUi3,dUr7 3464d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVr7,dUr3,dUi7 3474d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr3,dXi3},[pSrc],pointStep // data[3] 3484d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVi7,dUi3,dUr7 3494d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3504d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // finish third stage of 8 point FFT 3514d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3524d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com .ifeqs "\inverse", "TRUE" 3534d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3544d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // calculate a*v5 3554d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fmul dT1,dVr5,dT0[0] // use dVi0 for dT1 3564d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3574d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr4,dXi4},[pSrc],pointStep // data[4] 3584d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fmul dVi5,dVi5,dT0[0] 3594d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3604d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr5,dXi5},[pSrc],pointStep // data[5] 3614d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVr5,dT1,dVi5 // a * V5 3624d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVi5,dT1,dVi5 3634d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3644d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr6,dXi6},[pSrc],pointStep // data[6] 3654d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3664d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // calculate b*v7 3674d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fmul dT1,dVr7,dT0[0] 3684d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fmul dVi7,dVi7,dT0[0] 3694d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3704d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fadd qY1,qV1,qV5 3714d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qY5,qV1,qV5 3724d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYr1,dVr1,dVr5 3734d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYr5,dVr1,dVr5 3744d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYi1,dVi1,dVi5 3754d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYi5,dVi1,dVi5 3764d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3774d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVr7,dT1,dVi7 // b * V7 3784d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVi7,dVi7,dT1 3794d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com SUB pDst, pDst, step2 // set pDst to y1 3804d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3814d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // On the last iteration, this will read past the end of pSrc, 3824d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // so skip this read. 3834d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com BEQ radix8SkipLastUpdateInv\name 3844d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr7,dXi7},[pSrc],setStep // data[7] 3854d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.comradix8SkipLastUpdateInv\name: 3864d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3874d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYr3,dVr3,dVr7 3884d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYi3,dVi3,dVi7 3894d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr1,dYi1},[pDst],step1 // store y1 3904d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYr7,dVr3,dVr7 3914d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYi7,dVi3,dVi7 3924d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3934d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3944d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr3,dYi3},[pDst],step1 // store y3 3954d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr5,dYi5},[pDst],step1 // store y5 3964d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr7,dYi7},[pDst] // store y7 3974d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ADD pDst, pDst, #16 3984d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 3994d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com .ELSE 4004d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4014d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // calculate b*v7 4024d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fmul dT1,dVr7,dT0[0] 4034d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr4,dXi4},[pSrc],pointStep // data[4] 4044d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fmul dVi7,dVi7,dT0[0] 4054d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4064d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr5,dXi5},[pSrc],pointStep // data[5] 4074d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVr7,dT1,dVi7 // b * V7 4084d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVi7,dVi7,dT1 4094d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4104d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr6,dXi6},[pSrc],pointStep // data[6] 4114d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4124d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // calculate a*v5 4134d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fmul dT1,dVr5,dT0[0] // use dVi0 for dT1 4144d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fmul dVi5,dVi5,dT0[0] 4154d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4164d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYr7,dVr3,dVr7 4174d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYi7,dVi3,dVi7 4184d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com SUB pDst, pDst, step2 // set pDst to y1 4194d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4204d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dVr5,dT1,dVi5 // a * V5 4214d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dVi5,dT1,dVi5 4224d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4234d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // On the last iteration, this will read past the end of pSrc, 4244d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // so skip this read. 4254d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com BEQ radix8SkipLastUpdateFwd\name 4264d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com ld2 {dXr7,dXi7},[pSrc],setStep // data[7] 4274d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.comradix8SkipLastUpdateFwd\name: 4284d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4294d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fsub qY5,qV1,qV5 4304d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYr5,dVr1,dVr5 4314d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYi5,dVi1,dVi5 4324d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4334d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYr3,dVr3,dVr7 4344d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr7,dYi7},[pDst],step1 // store y1 4354d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fsub dYi3,dVi3,dVi7 4364d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4374d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // fadd qY1,qV1,qV5 4384d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYr1,dVr1,dVr5 4394d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com fadd dYi1,dVi1,dVi5 4404d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4414d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr5,dYi5},[pDst],step1 // store y3 4424d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr3,dYi3},[pDst],step1 // store y5 4434d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com st2 {dYr1,dYi1},[pDst],#16 // store y7 4444d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4454d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com .ENDIF 4464d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4474d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4484d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // update pDst for the next set 4494d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com SUB pDst, pDst, step2 4504d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com BGT radix8fsGrpZeroSetLoop\name 4514d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4524d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Save subFFTNum and subFFTSize for next stage 4534d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com str subFFTNum, [pSubFFTNum] 4544d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com str subFFTSize, [pSubFFTSize] 4554d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4564d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com .endm 4574d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4584d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4594d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com // Allocate stack memory required by the function 4604d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4614d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4624d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com M_START armSP_FFTFwd_CToC_FC32_Radix8_fs_OutOfPlace,,d15 4634d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com FFTSTAGE "FALSE","FALSE",FWD 4644d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com M_END 4654d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4664d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4674d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com M_START armSP_FFTInv_CToC_FC32_Radix8_fs_OutOfPlace,,d15 4684d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com FFTSTAGE "FALSE","TRUE",INV 4694d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com M_END 4704d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4714d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4724d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 4734d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com .end 474