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