I believed i've found a bug in the assembler optimized version of theOpenMAX implementation, can anyone here confirm this bug?First, i begin with the software version i'm using!* Arm Assembler optimized openmax (OX001-BU-00010-r2p0-00rel0)Filename: ARM_OpenMax_OX001-BU-0010-r2p0-00rel0.tgzmd5sum: 2eb4fb315e5935bcfa5cf9ed28e63954 * ARM C implementation of openmax (OX000-BU-00010-r1p0-00bet0)Filename: arm-download-98665.tgzmd5sum c093bd73e6e48c13952855a63ec5baab* Compiler ToolchainsRVDS: RVDS v 4.0$ arm-eabi-gcc --versionarm-eabi-gcc (GCC) 4.4.0Copyright © 2009 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.* ReportThe function omxSP_FIR_Direct_S16 provides different results whencomparing the C implementation and the Assembler optimized versionwhen TAP length is over 9 TAPS!Also, TAP length of 4, 8, 12, 16 results in segmention fault on mytarget (Android telephone HTC Magic)** Specifics*** TAP length = 13 OMX_S16 FIR_TESTVECTOR[100] = { 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 10000,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0 };const OMX_S16 Coeff[13]={16384, 8192,4096,2048,1024,512,256,128,64,32,16,16,0};int Coefflen=13;delayline is zeroeddelaylinIndex 0result = omxSP_FIR_Direct_S16(FIR_TESTVECTOR, Destination, len, Coeff,Coefflen, delayline, delaylineIndex); Provides the result:**** CORRECT C implementation (performed on PC)...Destination[18]==0Destination[19]==0Destination[20]==5000Destination[21]==2500Destination[22]==1250Destination[23]==625Destination[24]==313Destination[25]==156Destination[26]==78Destination[27]==39Destination[28]==20Destination[29]==10Destination[30]==5Destination[31]==5Destination[32]==0...**** FAILED!! Assembler implementation (performed on target, ARM1176) Destination[18]==0Destination[19]==0Destination[20]==-2Destination[21]==-6641Destination[22]==-9926Destination[23]==-2435Destination[24]==-7426Destination[25]==-2436Destination[26]==-4177Destination[27]==-2418Destination[28]==-7426Destination[29]==-2319Destination[30]==0Destination[31]==-2435Destination[32]==0*** TAP length = 9 OMX_S16 FIR_TESTVECTOR[100] = { 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 10000,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0 };const OMX_S16 Coeff[13]={16384, 8192,4096,2048,1024,512,256,128,64,32,16,16,0};int Coefflen=9;delayline is zeroeddelaylinIndex 0result = omxSP_FIR_Direct_S16(FIR_TESTVECTOR, Destination, len, Coeff,Coefflen, delayline, delaylineIndex); Provides the result:**** CORRECT C implementation (performed on PC)...Destination[18]==0Destination[19]==0Destination[20]==5000Destination[21]==2500Destination[22]==1250Destination[23]==625Destination[24]==313Destination[25]==156Destination[26]==78Destination[27]==39Destination[28]==20Destination[29]==0Destination[30]==0Destination[31]==0Destination[32]==0...**** CORRECT Assembler implementation (performed on target, ARM1176)Destination[18]==0Destination[19]==0Destination[20]==5000Destination[21]==2500Destination[22]==1250Destination[23]==625Destination[24]==313Destination[25]==156Destination[26]==78Destination[27]==39Destination[28]==20Destination[29]==0Destination[30]==0Destination[31]==0Destination[32]==0Do anyone here have possibility to confirm this bug??/Bo SvangÃ¥rd, System Designer, EmbeddedArt AB, SwdenTelephon +46-736 631 628
Hello, I am using OX002-BU-0010-r2p0-00rel0 for SP function and I have not tried to do comparison with C version of it.Have you used omxSP_FFTFwd_CToC_SC32_Sfs and omxSP_FFTInv_CToC_SC32_Sfs SP functions ?noI want to use float values as input of this functions ? okDo you have any idea about that?noThanks,rach