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