summaryrefslogtreecommitdiffstats
path: root/media/openmax_dl/dl/sp/src/omxSP_FFTInv_CCSToR_F32_Sfs_unscaled_s.S
diff options
context:
space:
mode:
Diffstat (limited to 'media/openmax_dl/dl/sp/src/omxSP_FFTInv_CCSToR_F32_Sfs_unscaled_s.S')
-rw-r--r--media/openmax_dl/dl/sp/src/omxSP_FFTInv_CCSToR_F32_Sfs_unscaled_s.S284
1 files changed, 0 insertions, 284 deletions
diff --git a/media/openmax_dl/dl/sp/src/omxSP_FFTInv_CCSToR_F32_Sfs_unscaled_s.S b/media/openmax_dl/dl/sp/src/omxSP_FFTInv_CCSToR_F32_Sfs_unscaled_s.S
deleted file mode 100644
index 838de317f0..0000000000
--- a/media/openmax_dl/dl/sp/src/omxSP_FFTInv_CCSToR_F32_Sfs_unscaled_s.S
+++ /dev/null
@@ -1,284 +0,0 @@
-@//
-@// Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
-@//
-@// Copyright 2016, Mozilla Foundation and contributors
-@//
-@// 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 is a modification of omxSP_FFTInv_CCSToR_S32_Sfs_s.s
-@// to support float instead of SC32.
-@//
-@// It is further modified to produce an "unscaled" version, which
-@// actually multiplies by two for consistency with the other FFT functions
-@// in use.
-@//
-
-@//
-@// Description:
-@// Compute an inverse FFT for a complex signal
-@//
-@//
-
-
-@// Include standard headers
-
-#include "dl/api/armCOMM_s.h"
-#include "dl/api/omxtypes_s.h"
-
-
-@// Import symbols required from other files
-@// (For example tables)
-
- .extern armSP_FFTInv_CToC_FC32_Radix2_fs_OutOfPlace_unsafe
- .extern armSP_FFTInv_CToC_FC32_Radix4_fs_OutOfPlace_unsafe
- .extern armSP_FFTInv_CToC_FC32_Radix8_fs_OutOfPlace_unsafe
- .extern armSP_FFTInv_CToC_FC32_Radix4_OutOfPlace_unsafe
- .extern armSP_FFTInv_CToC_FC32_Radix2_OutOfPlace_unsafe
- .extern armSP_FFTInv_CCSToR_F32_preTwiddleRadix2_unsafe
-
-
-@// 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)
- .extern armSP_FFTInv_CToC_FC32_Radix4_ls_OutOfPlace_unsafe
- .extern armSP_FFTInv_CToC_FC32_Radix2_ls_OutOfPlace_unsafe
-
-
-@//Input Registers
-
-#define pSrc r0
-#define pDst r1
-#define pFFTSpec r2
-#define scale r3
-
-
-@// Output registers
-#define result r0
-
-@//Local Scratch Registers
-
-#define argTwiddle r1
-#define argDst r2
-#define argScale r4
-#define tmpOrder r4
-#define pTwiddle r4
-#define pOut r5
-#define subFFTSize r7
-#define subFFTNum r6
-#define N r6
-#define order r14
-#define diff r9
-@// Total num of radix stages required to comple the FFT
-#define count r8
-#define x0r r4
-#define x0i r5
-#define diffMinusOne r2
-#define round r3
-
-#define pOut1 r2
-#define size r7
-#define step r8
-#define step1 r9
-#define twStep r10
-#define pTwiddleTmp r11
-#define argTwiddle1 r12
-#define zero r14
-
-@// Neon registers
-
-#define dX0 D0
-#define dShift D1
-#define dX1 D1
-#define dY0 D2
-#define dY1 D3
-#define dX0r D0
-#define dX0i D1
-#define dX1r D2
-#define dX1i D3
-#define dW0r D4
-#define dW0i D5
-#define dW1r D6
-#define dW1i D7
-#define dT0 D8
-#define dT1 D9
-#define dT2 D10
-#define dT3 D11
-#define qT0 d12
-#define qT1 d14
-#define qT2 d16
-#define qT3 d18
-#define dY0r D4
-#define dY0i D5
-#define dY1r D6
-#define dY1i D7
-#define dzero D20
-
-#define dY2 D4
-#define dY3 D5
-#define dW0 D6
-#define dW1 D7
-#define dW0Tmp D10
-#define dW1Neg D11
-
-#define sN S0.S32
-#define fN S1
-@// two must be the same as dScale[0]!
-#define dScale D2
-#define two S4
-
-
- @// Allocate stack memory required by the function
- M_ALLOC4 complexFFTSize, 4
-
- @// Write function header
- M_START omxSP_FFTInv_CCSToR_F32_Sfs_unscaled,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.F32 dX0[0],[pSrc]
- VST1.F32 dX0[0],[pDst]
-
- B End
-
-sizeGreaterThanOne:
-
- @// Call the preTwiddle Radix2 stage before doing the compledIFFT
-
-
- BL armSP_FFTInv_CCSToR_F32_preTwiddleRadix2_unsafe
-
-
-complexIFFT:
-
- ASR N,N,#1 @// N/2 point complex IFFT
- M_STR N, complexFFTSize @ Save N for scaling later
- ADD pSrc,pOut,N,LSL #3 @// set pSrc as pOut1
-
- CLZ order,N @// N = 2^order
- RSB order,order,#31
- MOV subFFTSize,#1
- @//MOV subFFTNum,N
-
- CMP order,#3
- BGT orderGreaterthan3 @// order > 3
-
- CMP order,#1
- BGE orderGreaterthan0 @// order > 0
-
- VLD1.F32 dX0,[pSrc]
- VST1.F32 dX0,[pDst]
- MOV pSrc,pDst
- BLT FFTEnd
-
-orderGreaterthan0:
- @// set the buffers appropriately for various orders
- CMP order,#2
- MOVNE argDst,pDst
- MOVEQ argDst,pOut
- @// Pass the first stage destination in RN5
- MOVEQ pOut,pDst
- MOV argTwiddle,pTwiddle
-
- BGE orderGreaterthan1
- BLLT armSP_FFTInv_CToC_FC32_Radix2_fs_OutOfPlace_unsafe @// order = 1
- B FFTEnd
-
-orderGreaterthan1:
- MOV tmpOrder,order @// tmpOrder = RN 4
- BL armSP_FFTInv_CToC_FC32_Radix2_fs_OutOfPlace_unsafe
- CMP tmpOrder,#2
- BLGT armSP_FFTInv_CToC_FC32_Radix2_OutOfPlace_unsafe
- BL armSP_FFTInv_CToC_FC32_Radix2_ls_OutOfPlace_unsafe
- B FFTEnd
-
-
-orderGreaterthan3:
-specialScaleCase:
-
- @// Set input args to fft stages
- TST order, #2
- MOVNE argDst,pDst
- MOVEQ argDst,pOut
- @// Pass the first stage destination in RN5
- MOVEQ pOut,pDst
- MOV argTwiddle,pTwiddle
-
- @//check for even or odd order
- @// NOTE: The following combination of BL's would work fine even though
- @// the first BL would corrupt the flags. This is because the end of
- @// the "grpZeroSetLoop" loop inside
- @// armSP_FFTInv_CToC_FC32_Radix4_fs_OutOfPlace_unsafe sets the Z flag
- @// to EQ
-
- TST order,#0x00000001
- BLEQ armSP_FFTInv_CToC_FC32_Radix4_fs_OutOfPlace_unsafe
- BLNE armSP_FFTInv_CToC_FC32_Radix8_fs_OutOfPlace_unsafe
-
- CMP subFFTNum,#4
- BLT FFTEnd
-
-
-unscaledRadix4Loop:
- BEQ lastStageUnscaledRadix4
- BL armSP_FFTInv_CToC_FC32_Radix4_OutOfPlace_unsafe
- CMP subFFTNum,#4
- B unscaledRadix4Loop
-
-lastStageUnscaledRadix4:
- BL armSP_FFTInv_CToC_FC32_Radix4_ls_OutOfPlace_unsafe
- B FFTEnd
-
-FFTEnd: @// Does only the scaling
- @ Scale inverse FFT result by 2 for consistency with other FFTs
- VMOV.F32 two, #2.0 @ two = dScale[0]
-
- @// N = subFFTSize ; dataptr = pDst
-scaleFFTData:
- VLD1.F32 {dX0},[pSrc] @// pSrc contains pDst pointer
- SUBS subFFTSize,subFFTSize,#1
- VMUL.F32 dX0, dX0, dScale[0]
- VST1.F32 {dX0},[pSrc]!
-
- BGT scaleFFTData
-
-
-End:
- @// Set return value
- MOV result, #OMX_Sts_NoErr
-
- @// Write function tail
- M_END
-
-
-
- .end