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: omxSP_FFTInv_CCSToR_S32S16_Sfs_s.s 1699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// OpenMAX DL: v1.0.2 1799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Last Modified Revision: 7098 1899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Last Modified Date: Thu, 16 Aug 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 an inverse FFT for a 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 3699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Import symbols required from other files 3799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// (For example tables) 3899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 3999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .extern omxSP_FFTInv_CCSToR_S32_Sfs 4099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Set debugging level 4399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@//DEBUG_ON SETL {TRUE} 4499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Guarding implementation by the processor name 4899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Guarding implementation by the processor name 5299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Import symbols required from other files 5599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// (For example tables) 5699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@//Input Registers 5999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pSrc r0 6199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pDst r1 6299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pFFTSpec r2 6399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define scale r3 6499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Output registers 6799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define result r0 6899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 7099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define N r6 7199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pOut r5 7299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define pTmpDst r4 7399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 7499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 7599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com@// Neon registers 7699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 7799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dX0 D0.S32 7899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dX01 D1.S32 7999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define qX0 Q0.S32 8099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dY0 D2.S16 8199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define dY0S32 D2.S32 8299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 8399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 8499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 8599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Allocate stack memory required by the function 8699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 8799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Write function header 8899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_START omxSP_FFTInv_CCSToR_S32S16_Sfs,r11,d15 8999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 9099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .set ARMsFFTSpec_N, 0 9199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .set ARMsFFTSpec_pBitRev, 4 9299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .set ARMsFFTSpec_pTwiddle, 8 9399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .set ARMsFFTSpec_pBuf, 12 9499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 9599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Define stack arguments 9699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 9799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Read the size from structure and take log 9899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com LDR N, [pFFTSpec, #ARMsFFTSpec_N] 9999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 10099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Read other structure parameters 10199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @//LDR pTwiddle, [pFFTSpec, #ARMsFFTSpec_pTwiddle] 10299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com LDR pOut, [pFFTSpec, #ARMsFFTSpec_pBuf] 10399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 10499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 10599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com MOV pTmpDst,pDst 10699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com ADD pDst,pOut,N, LSL #2 10799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 10899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 10999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com BL omxSP_FFTInv_CCSToR_S32_Sfs 11099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 11199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com ADD pDst,pOut,N, LSL #2 11299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 11399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com CMP N,#2 11499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com BGT copyLoop 11599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com BEQ copyS32ToS16 11699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD1 dX0[0],[pDst] 11799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VQMOVN dY0,qX0 11899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST1 dY0[0],[pTmpDst] 11999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 12099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com B End 12199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 12299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comcopyS32ToS16: 12399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 12499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD1 dX0,[pDst] 12599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VQMOVN dY0,qX0 12699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST1 dY0S32[0],[pTmpDst] 12799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com B End 12899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 12999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comcopyLoop: 13099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VLD1 {dX0,dX01},[pDst]! 13299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com SUBS N,N,#4 13399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VQMOVN dY0,qX0 13499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com VST1 dY0,[pTmpDst]! 13599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com BGT copyLoop 13799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comEnd: 14099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Set return value 14199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com MOV result, #OMX_Sts_NoErr 14299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 14399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com @// Write function tail 14499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M_END 14599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 14699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com .end 147