188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//
288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//
488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//  Use of this source code is governed by a BSD-style license
588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//  that can be found in the LICENSE file in the root of the source
688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//  tree. An additional intellectual property rights grant can be found
788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//  in the file PATENTS.  All contributing project authors may
888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//  be found in the AUTHORS file in the root of the source tree.
988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//
1088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//  This is a modification of omxSP_FFTInv_CCSToR_S32_Sfs_s.s
1188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//  to support float instead of SC32.
1288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//
1388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
1488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//
1588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@// Description:
1688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@// Compute an inverse FFT for a complex signal
1788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//
1888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//
1988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
2088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
2188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@// Include standard headers
2288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
2388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#include "dl/api/arm/armCOMM_s.h"
2488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#include "dl/api/arm/omxtypes_s.h"
2588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
2688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//        M_VARIANTS ARM1136JS
2788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
2888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@// Import symbols required from other files
2988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@// (For example tables)
3088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
3188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        .extern  armSP_FFTInv_CToC_FC32_Radix2_fs_OutOfPlace_unsafe_vfp
3288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        .extern  armSP_FFTInv_CToC_FC32_Radix4_fs_OutOfPlace_unsafe_vfp
3388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        .extern  armSP_FFTInv_CToC_FC32_Radix8_fs_OutOfPlace_unsafe_vfp
3488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        .extern  armSP_FFTInv_CToC_FC32_Radix4_OutOfPlace_unsafe_vfp
3588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        .extern  armSP_FFTInv_CCSToR_F32_preTwiddleRadix2_unsafe_vfp
3688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
3788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@// Set debugging level
3888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//DEBUG_ON    SETL {TRUE}
3988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
4088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
4188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
4288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@// Guarding implementation by the processor name
4388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
4488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//    IF  ARM1136JS
4588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
4688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//Input Registers
4788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
4888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define pSrc            r0
4988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define pDst            r1
5088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define pFFTSpec        r2
5188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
5288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
5388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@// Output registers
5488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define result          r0
5588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
5688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//Local Scratch Registers
5788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
5888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
5988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define argTwiddle      r1
6088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define argDst          r2
6188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define argScale        r4
6288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define pTwiddle        r4
6388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define pOut            r5
6488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define subFFTSize      r7
6588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define subFFTNum       r6
6688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define N               r6
6788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define order           r14
6888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define diff            r9
6988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@// Total num of radix stages required to comple the FFT*/
7088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define count           r8
7188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
7288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define round           r3
7388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
7488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define x0r     s0
7588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define x0i     s1
7688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define y0r     s2
7788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define y0i     s3
7888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define x1r     s4
7988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define x1i     s5
8088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define w1r     s2
8188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define w1i     s3
8288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define w0r     s6
8388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define w0i     s7
8488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define y1r     s2              /*@// w1r,w1i*/
8588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define y1i     s3
8688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define st0     s8
8788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define st1     s9
8888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define st2     s10
8988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define st3     s11
9088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define st4     s12
9188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define st5     s13
9288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define fscale  s2
9388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com#define fone    s3
9488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
9588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
9688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
9788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com    @// Allocate stack memory required by the function
9888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        M_ALLOC4        pDstOnStack, 4
9988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        M_ALLOC4        pFFTSpecOnStack, 4
10088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
10188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com    @// Write function header
10288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        M_START     omxSP_FFTInv_CCSToR_F32_Sfs_vfp,r11
10388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
10488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@ Structure offsets for FFTSpec
10588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        .set    ARMsFFTSpec_N, 0
10688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        .set    ARMsFFTSpec_pBitRev, 4
10788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        .set    ARMsFFTSpec_pTwiddle, 8
10888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        .set    ARMsFFTSpec_pBuf, 12
10988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
11088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// Define stack arguments
11188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
11288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// Read the size from structure and take log
11388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        LDR     N, [pFFTSpec, #ARMsFFTSpec_N]
11488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
11588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
11688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
11788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @//  N=1 Treat seperately
11888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        CMP     N,#1
11988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        BGT     sizeGreaterThanOne
12088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vldr.f32 x0r, [pSrc]
12188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vstr.f32 x0r, [pDst]
12288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
12388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        B       End
12488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
12588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.comsizeGreaterThanOne:
12688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        M_STR   pDst,pDstOnStack                    @// store all the pointers
12788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        M_STR   pFFTSpec,pFFTSpecOnStack
12888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
12988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
13088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// Call the preTwiddle Radix2 stage before doing the compledIFFT
13188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
13288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        BL    armSP_FFTInv_CCSToR_F32_preTwiddleRadix2_unsafe_vfp
13388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
13488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
13588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.comcomplexIFFT:
13688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
13788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        M_LDR   pFFTSpec,pFFTSpecOnStack
13888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        LDR     N, [pFFTSpec, #ARMsFFTSpec_N]
13988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        LDR     pTwiddle, [pFFTSpec, #ARMsFFTSpec_pTwiddle]
14088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        LDR     pOut, [pFFTSpec, #ARMsFFTSpec_pBuf]
14188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
14288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        ASR     N,N,#1                  @// N/2 point complex IFFT
14388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        ADD     pSrc,pOut,N,LSL #3      @// set pSrc as pOut1
14488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        M_LDR   pDst,pDstOnStack
14588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
14688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        CLZ     order,N                 @// N = 2^order
14788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        RSB     order,order,#31
14888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        MOV     subFFTSize,#1
14988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
15088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        CMP     order,#1
15188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        BGT     orderGreaterthan1       @// order > 1
15288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vldmlt.f32 pSrc, {x0r, x0i}
15388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vstmlt.f32 pDst, {x0r, x0i}
15488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
15588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        MOVLT   pSrc,pDst
15688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        BLT     FFTEnd
15788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
15888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        MOV     argDst,pDst             @// Set input args to fft stages
15988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        MOV     argTwiddle,pTwiddle
16088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
16188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        BL      armSP_FFTInv_CToC_FC32_Radix2_fs_OutOfPlace_unsafe_vfp
16288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        B       FFTEnd
16388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
16488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
16588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.comorderGreaterthan1:
16688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
16788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        TST     order, #2               @// Set input args to fft stages
16888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        MOVNE   argDst,pDst
16988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        MOVEQ   argDst,pOut
17088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        MOVEQ   pOut,pDst               @// Pass the first stage destination in RN5
17188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        MOV     argTwiddle,pTwiddle
17288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
17388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
17488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @//check for even or odd order
17588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
17688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// NOTE: The following combination of BL's would work fine
17788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// eventhough the first BL would corrupt the flags. This is
17888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// because the end of the "grpZeroSetLoop" loop inside
17988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// armSP_FFTInv_CToC_FC32_Radix4_fs_OutOfPlace_unsafe_vfp sets
18088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// the Z flag to EQ
18188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
18288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        TST     order,#0x00000001
18388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        BLEQ    armSP_FFTInv_CToC_FC32_Radix4_fs_OutOfPlace_unsafe_vfp
18488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        BLNE    armSP_FFTInv_CToC_FC32_Radix8_fs_OutOfPlace_unsafe_vfp
18588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
18688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.comunscaledRadix4Loop:
18788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        CMP        subFFTNum,#1
18888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com         BEQ        FFTEnd
18988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com         BL        armSP_FFTInv_CToC_FC32_Radix4_OutOfPlace_unsafe_vfp
19088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com         B        unscaledRadix4Loop
19188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
19288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.comFFTEnd:
19388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
19488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vldm.f32 pSrc, {x0r, x0i}
19588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
19688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vmov.f32     fscale, subFFTSize
19788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vcvt.f32.s32 fscale, fscale             @// fscale = N as a float
19888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        mov          round, #1
19988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vmov.f32     fone, round
20088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vcvt.f32.s32 fone, fone
20188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vdiv.f32     fscale, fone, fscale       @// fscale = 1/N
20288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
20388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.comscaleFFTData:                                   @// N = subFFTSize
20488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        SUBS    subFFTSize,subFFTSize,#1
20588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vmul.f32 x0r, x0r, fscale
20688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vmul.f32 x0i, x0i, fscale
20788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vstm.f32 pSrc!, {x0r, x0i}
20888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        vldmgt.f32 pSrc, {x0r, x0i}
20988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
21088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        BGT     scaleFFTData
21188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
21288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
21388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.comEnd:
21488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// Set return value
21588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        MOV     result, #OMX_Sts_NoErr
21688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
21788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        @// Write function tail
21888b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com        M_END
21988b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
22088b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com@//    ENDIF                                           @//ARM1136JS
22188b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
22288b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
22388b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com      @// Guarding implementation by the processor name
22488b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
22588b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
22688b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com
22788b02237dfdb25a9b602a7b6dd49665c96e8e890rtoy@google.com    .end
228