@//
@//  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
@//
@//  Use of this source code is governed by a BSD-style license
@//  that can be found in the LICENSE file in the root of the source
@//  tree. An additional intellectual property rights grant can be found
@//  in the file PATENTS.  All contributing project authors may
@//  be found in the AUTHORS file in the root of the source tree.
@//
@//  This file was originally licensed as follows. It has been
@//  relicensed with permission from the copyright holders.
@//

@// 
@// File Name:  omxSP_FFTFwd_RToCCS_S16S32_Sfs_s.s
@// OpenMAX DL: v1.0.2
@// Last Modified Revision:   7403
@// Last Modified Date:       Mon, 17 Sep 2007
@// 
@// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
@// 
@// 
@//
@// Description:
@// Compute FFT for a real signal
@// 

        
@// Include standard headers

#include "dl/api/arm/armCOMM_s.h"
#include "dl/api/arm/omxtypes_s.h"
        
        
@// Import symbols required from other files
@// (For example tables)
        .extern  omxSP_FFTFwd_RToCCS_S32_Sfs
        
        
@// Set debugging level        
@//DEBUG_ON    SETL {TRUE}



@// Guarding implementation by the processor name
    
    
    
    @// Guarding implementation by the processor name
    
@// Import symbols required from other files
@// (For example tables)
             
    
@//Input Registers

#define pSrc            r0
#define pDst            r1
#define pFFTSpec        r2
#define scale           r3
        
@// Output registers
#define result          r0
        
#define pTmpDst         r4
#define pTmpSrc         r5
#define N               r6
#define order           r7
#define pOut            r8

@// Neon registers

#define dX0             D0.S16
#define qY0             Q1.S32
#define dY0S32          D2.S32
#define qX0             Q1.S32
#define dY1S32          D3.S32
#define dX0S32          D0.S32




    @// Allocate stack memory required by the function
        
    @// Write function header
        M_START     omxSP_FFTFwd_RToCCS_S16S32_Sfs,r11,d15

@ Structure offsets for the FFTSpec             
        .set    ARMsFFTSpec_N, 0
        .set    ARMsFFTSpec_pBitRev, 4
        .set    ARMsFFTSpec_pTwiddle, 8
        .set    ARMsFFTSpec_pBuf, 12
        
        @// Define stack arguments
        
        @// Read the size from structure and take log
        LDR     N, [pFFTSpec, #ARMsFFTSpec_N]
        
        @// Read other structure parameters
        @//LDR     pTwiddle, [pFFTSpec, #ARMsFFTSpec_pTwiddle]
        LDR     pOut, [pFFTSpec, #ARMsFFTSpec_pBuf]
        
        
        @//  N=1 Treat seperately  
        CMP     N,#1
        BGT     sizeGreaterThanOne
        VLD1    dX0[0],[pSrc]
        VMOVL   qY0,dX0
        VST1    dY0S32[0],[pDst]
        
        MOV     pSrc,pDst
        B       realS32FFT
        
sizeGreaterThanOne:        
        MOV     N,N,ASR #1
        
        CLZ     order,N                             @// N = 2^order 
        RSB     order,order,#31
        
        TST     order,#1
        MOVEQ   pTmpDst,pOut
        MOVNE   pTmpDst,pDst
        MOV     pTmpSrc,pTmpDst
        
        CMP     N,#1
        BGT     copyS16ToS32
        VLD1    dX0S32[0],[pSrc]
        VMOVL   qX0,dX0
        VST1    dY0S32,[pTmpDst]
        B       setpSrc

        
copyS16ToS32:               
        
        VLD1    dX0,[pSrc]!
        SUBS    N,N,#2
        VMOVL   qX0,dX0
        VST1    {dY0S32,dY1S32},[pTmpDst]!
        BGT     copyS16ToS32
 
setpSrc:                
        MOV     pSrc,pTmpSrc
        
        
              
realS32FFT:             
        BL      omxSP_FFTFwd_RToCCS_S32_Sfs        
        
                
                       
End:                            
        @// Set return value
        MOV     result, #OMX_Sts_NoErr       

        @// Write function tail
        M_END
        .end
                
