This is to fix security issues found in Openmax SC16 code. Verified with SNR testing code in Openmax folder. R=aedla@chromium.org, rtoy@google.com Review URL: https://webrtc-codereview.appspot.com/1715004 git-svn-id: http://webrtc.googlecode.com/svn/deps/third_party/openmax@4353 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/dl/sp/api/omxSP.h b/dl/sp/api/omxSP.h index 40abe38..13c64e3 100644 --- a/dl/sp/api/omxSP.h +++ b/dl/sp/api/omxSP.h
@@ -1887,8 +1887,7 @@ * must be aligned on a 32-byte boundary. * pFFTSpec - pointer to the preallocated and initialized specification * structure - * scaleFactor - scale factor of the output. Valid value is 0 - * only. + * scaleFactor - scale factor of the output. Valid range is [0,16]. * * Output Arguments: * order
diff --git a/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_fs_unsafe_s.S b/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_fs_unsafe_s.S index cdb42a9..1b0217e 100644 --- a/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_fs_unsafe_s.S +++ b/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_fs_unsafe_s.S
@@ -142,7 +142,6 @@ RSB setStep,setStep,#16 @// setStep = - 3*pointStep+16 - VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] MOV subFFTSize,#4 @// subFFTSize = 1 for the first stage @@ -158,6 +157,7 @@ grpZeroSetLoop\name: + VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] .ifeqs "\scaled", "TRUE" @@ -178,9 +178,6 @@ VLD2 {dXr1,dXi1},[pSrc :128],step1 @// data[1] VHADD qZ0,qY0,qY1 @// y0 - VLD2 {dXr3,dXi3},[pSrc :128],setStep - - .ifeqs "\inverse", "TRUE" VHSUB dZr3,dYr2,dYi3 @// y3 @@ -235,9 +232,6 @@ VLD2 {dXr1,dXi1},[pSrc :128],step1 @// data[1] VADD qZ0,qY0,qY1 @// y0 - VLD2 {dXr3,dXi3},[pSrc :128],setStep - - .ifeqs "\inverse", "TRUE" VSUB dZr3,dYr2,dYi3 @// y3
diff --git a/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_ls_unsafe_s.S b/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_ls_unsafe_s.S index 23e2c37..c5ef7a0 100644 --- a/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_ls_unsafe_s.S +++ b/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_ls_unsafe_s.S
@@ -163,7 +163,6 @@ @// Define stack arguments MOV pw2,pTwiddle - VLD4 {dW2r,dW2i,dTmp0,dTmp1},[pw2 :256]! MOV pw3,pTwiddle MOV pw1,pTwiddle @@ -171,43 +170,48 @@ @// pOut0+outPointStep == increment of 4*outPointStep bytes MOV outPointStep,subFFTSize,LSL #2 - VLD3 {dW3rS32,dTmp1S32,dTmp2S32},[pw3 :64]! MOV subFFTNum,#1 @//after the last stage LSL grpCount,subFFTSize,#2 @// Update grpCount and grpSize rightaway - VLD3 {dW3iS32,dTmp2S32,dTmp3S32},[pw3 :64]! @// update subFFTSize for the next stage MOV subFFTSize,grpCount MOV dstStep,outPointStep,LSL #1 - VLD2 {dW1r,dW1i}, [pw1 :128]! - - ADD dstStep,dstStep,outPointStep @// dstStep = 3*outPointStep RSB dstStep,dstStep,#16 @// dstStep = - 3*outPointStep+16 - VLD4 {dButterfly1Real02,dButterfly1Imag02,dButterfly1Real13,dButterfly1Imag13},[pSrc :256]! @// AC.r AC.i BD.r BD.i - VLD4 {dButterfly2Real02,dButterfly2Imag02,dButterfly2Real13,dButterfly2Imag13},[pSrc :256]! @// AC.r AC.i BD.r BD.i - @// Process 4 groups at a time grpLoop\name: + VLD4 {dButterfly1Real02,dButterfly1Imag02,dButterfly1Real13,dButterfly1Imag13},[pSrc :256]! @// AC.r AC.i BD.r BD.i + VLD4 {dButterfly2Real02,dButterfly2Imag02,dButterfly2Real13,dButterfly2Imag13},[pSrc :256]! @// AC.r AC.i BD.r BD.i + @// Load the second twiddle for 4 groups : w^2 + @// w^2 twiddle (2i+0,2i+2,2i+4,2i+6) for group 0,1,2,3 + VLD4 {dW2r,dW2i,dTmp0,dTmp1},[pw2 :256]! + + VUZP dButterfly1Real13, dButterfly2Real13 @// B.r D.r + + @// Load the third twiddle for 4 groups : w^3 + @// w^3 twiddle (3i+0,3i+3,3i+6,3i+9) for group 0,1,2,3 + VLD3 {dW3rS32,dTmp1S32,dTmp2S32},[pw3 :64]! + + VUZP dButterfly1Imag13, dButterfly2Imag13 @// B.i D.i + VUZP dButterfly1Real02, dButterfly2Real02 @// A.r C.r + + VLD3 {dW3iS32,dTmp2S32,dTmp3S32},[pw3 :64]! + + VUZP dButterfly1Imag02, dButterfly2Imag02 @// A.i C.i + + VLD2 {dW1r,dW1i}, [pw1 :128]! @// Rearrange the third twiddle VUZP dW3r,dW3i SUBS grpCount,grpCount,#16 @// grpCount is multiplied by 4 - - VUZP dButterfly1Real13, dButterfly2Real13 @// B.r D.r - VUZP dButterfly1Imag13, dButterfly2Imag13 @// B.i D.i - VUZP dButterfly1Real02, dButterfly2Real02 @// A.r C.r - VUZP dButterfly1Imag02, dButterfly2Imag02 @// A.i C.i - - .ifeqs "\inverse", "TRUE" VMULL qT0,dXr1,dW1r VMLAL qT0,dXi1,dW1i @// real part @@ -225,8 +229,6 @@ @// Load the first twiddle for 4 groups : w^1 @// w^1 twiddle (i+0,i+1,i+2,i+3) for group 0,1,2,3 - VLD2 {dW1r,dW1i}, [pw1 :128]! - .ifeqs "\inverse", "TRUE" VMULL qT2,dXr2,dW2r VMLAL qT2,dXi2,dW2i @// real part @@ -260,24 +262,12 @@ .ENDIF - @// Load the second twiddle for 4 groups : w^2 - @// w^2 twiddle (2i+0,2i+2,2i+4,2i+6) for group 0,1,2,3 - VLD4 {dW2r,dW2i,dTmp0,dTmp1},[pw2 :256]! - - VRSHRN dZr2,qT2,#15 VRSHRN dZi2,qT3,#15 - @// Load the third twiddle for 4 groups : w^3 - @// w^3 twiddle (3i+0,3i+3,3i+6,3i+9) for group 0,1,2,3 - - VLD3 {dW3rS32,dTmp1S32,dTmp2S32},[pw3 :64]! - VRSHRN dZr3,qT0,#15 VRSHRN dZi3,qT1,#15 - VLD3 {dW3iS32,dTmp2S32,dTmp3S32},[pw3 :64]! - .ifeqs "\scaled", "TRUE" @// finish first stage of 4 point FFT @@ -285,7 +275,6 @@ VHADD qY0,qX0,qZ2 VHSUB qY2,qX0,qZ2 VHADD qY1,qZ1,qZ3 - VLD4 {dButterfly1Real02,dButterfly1Imag02,dButterfly1Real13,dButterfly1Imag13},[pSrc :256]! @// AC.r AC.i BD.r BD.i VHSUB qY3,qZ1,qZ3 @@ -293,7 +282,6 @@ VHSUB qZ0,qY2,qY1 VHADD qZ2,qY2,qY1 - VLD4 {dButterfly2Real02,dButterfly2Imag02,dButterfly2Real13,dButterfly2Imag13},[pSrc :256]! @// AC.r AC.i BD.r BD.i .ifeqs "\inverse", "TRUE" @@ -329,7 +317,6 @@ VADD qY0,qX0,qZ2 VSUB qY2,qX0,qZ2 VADD qY1,qZ1,qZ3 - VLD4 {dButterfly1Real02,dButterfly1Imag02,dButterfly1Real13,dButterfly1Imag13},[pSrc :256]! @// AC.r AC.i BD.r BD.i VSUB qY3,qZ1,qZ3 @@ -337,7 +324,6 @@ VSUB qZ0,qY2,qY1 VADD qZ2,qY2,qY1 - VLD4 {dButterfly2Real02,dButterfly2Imag02,dButterfly2Real13,dButterfly2Imag13},[pSrc :256]! @// AC.r AC.i BD.r BD.i .ifeqs "\inverse", "TRUE" @@ -376,7 +362,6 @@ @// Reset and Swap pSrc and pDst for the next stage MOV pTmp,pDst - SUB pSrc,pSrc,#64 @// Extra increment currently done in the loop SUB pDst,pSrc,outPointStep,LSL #2 @// pDst -= size; pSrc -= 4*size bytes SUB pSrc,pTmp,outPointStep
diff --git a/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_unsafe_s.S b/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_unsafe_s.S index 0eba385..0cb4701 100644 --- a/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_unsafe_s.S +++ b/dl/sp/src/armSP_FFT_CToC_SC16_Radix4_unsafe_s.S
@@ -154,7 +154,6 @@ MOV srcStep,pointStep,LSL #1 @// srcStep = 2*pointStep VLD1 dW2,[pTwiddle :64] @//[wi | wr] ADD setStep,srcStep,pointStep @// setStep = 3*pointStep - SUB srcStep,srcStep,#16 @// srcStep = 2*pointStep-16 VLD1 dW3,[pTwiddle :64] @//RSB setStep,setStep,#16 @// setStep = - 3*pointStep+16 RSB setStep,setStep,#0 @// setStep = - 3*pointStep @@ -167,26 +166,23 @@ grpLoop\name: - VLD2 {dXr0,dXi0},[pSrc :128],pointStep @// data[0] ADD stepTwiddle,stepTwiddle,pointStep - VLD2 {dXr1,dXi1},[pSrc :128],pointStep @// data[1] ADD pTwiddle,pTwiddle,stepTwiddle @// set pTwiddle to the first point - VLD2 {dXr2,dXi2},[pSrc :128],pointStep @// data[2] MOV twStep,stepTwiddle,LSL #2 - VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] & reset pSrc SUB twStep,stepTwiddle,twStep @// twStep = -3*stepTwiddle MOV setCount,pointStep,LSR #2 - ADD pSrc,pSrc,#16 @// set pSrc to data[0] of the next set - ADD pSrc,pSrc,pointStep @// increment to data[1] of the next set + ADD pSrc,pSrc,pointStep @// increment to data[1] of the next set @// Loop on the sets : 4 at a time setLoop\name: + VLD2 {dXr1,dXi1},[pSrc :128],pointStep @// data[1] + VLD2 {dXr2,dXi2},[pSrc :128],pointStep @// data[2] - SUBS setCount,setCount,#4 @// decrement the loop counter + SUBS setCount,setCount,#4 @// decrement the loop counter .ifeqs "\inverse", "TRUE" VMULL qT0,dXr1,dW1[0] @@ -202,8 +198,6 @@ .ENDIF - VLD2 {dXr1,dXi1},[pSrc :128],pointStep @// data[1] - .ifeqs "\inverse", "TRUE" VMULL qT2,dXr2,dW2[0] VMLAL qT2,dXi2,dW2[1] @// real part @@ -218,11 +212,13 @@ .ENDIF + VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] & update pSrc for the next set + VRSHRN dZr1,qT0,#15 VRSHRN dZi1,qT1,#15 - - VLD2 {dXr2,dXi2},[pSrc :128],pointStep @// data[2] + VLD2 {dXr0,dXi0},[pSrc :128],pointStep @// data[0] + ADD pSrc,pSrc,#16 @// set pSrc to data[1] of the next set .ifeqs "\inverse", "TRUE" VMULL qT0,dXr3,dW3[0] @@ -244,7 +240,6 @@ VRSHRN dZr3,qT0,#15 VRSHRN dZi3,qT1,#15 - VLD2 {dXr3,dXi3},[pSrc :128],setStep @// data[3] & update pSrc for the next set .ifeqs "\scaled", "TRUE" @@ -253,7 +248,6 @@ VHADD qY0,qX0,qZ2 VHSUB qY2,qX0,qZ2 - VLD2 {dXr0,dXi0},[pSrc :128]! @// data[0] VHADD qY1,qZ1,qZ3 VHSUB qY3,qZ1,qZ3 @@ -303,7 +297,6 @@ VADD qY0,qX0,qZ2 VSUB qY2,qX0,qZ2 - VLD2 {dXr0,dXi0},[pSrc]! @// data[0] VADD qY1,qZ1,qZ3 VSUB qY3,qZ1,qZ3 @@ -351,7 +344,6 @@ .ENDIF - ADD pSrc,pSrc,pointStep @// increment to data[1] of the next set BGT setLoop\name VLD1 dW1,[pTwiddle :64],stepTwiddle @//[wi | wr]
diff --git a/dl/sp/src/armSP_FFT_CToC_SC16_Radix8_fs_unsafe_s.S b/dl/sp/src/armSP_FFT_CToC_SC16_Radix8_fs_unsafe_s.S index 588c319..ba7c344 100644 --- a/dl/sp/src/armSP_FFT_CToC_SC16_Radix8_fs_unsafe_s.S +++ b/dl/sp/src/armSP_FFT_CToC_SC16_Radix8_fs_unsafe_s.S
@@ -233,12 +233,12 @@ VLD2 {dXr4,dXi4},[pSrc :128],pointStep @// data[4] VLD2 {dXr5,dXi5},[pSrc :128],pointStep @// data[5] VLD2 {dXr6,dXi6},[pSrc :128],pointStep @// data[6] - VLD2 {dXr7,dXi7},[pSrc :128],setStep @// data[7] & update pSrc for the next set - @// setStep = -7*pointStep + 16 @// grp = 0 a special case since all the twiddle factors are 1 @// Loop on the sets : 4 sets at a time grpZeroSetLoop\name: + VLD2 {dXr7,dXi7},[pSrc :128],setStep @// data[7] & update pSrc for the next set + @// setStep = -7*pointStep + 16 @// Decrement setcount SUBS setCount,setCount,#4 @// decrement the set loop counter @@ -348,9 +348,6 @@ VSUB dVi7,dVi7,dT1 SUB pDst, pDst, step2 @// set pDst to y1 - VLD2 {dXr7,dXi7},[pSrc :128],setStep @// data[7] - - VHSUB dYr3,dVr3,dVr7 VHSUB dYi3,dVi3,dVi7 VST2 {dYr1,dYi1},[pDst :128],step1 @// store y1 @@ -388,7 +385,6 @@ VSUB dVr5,dT1,dVi5 @// a * V5 VADD dVi5,dT1,dVi5 - VLD2 {dXr7,dXi7},[pSrc :128],setStep @// data[7] VHSUB qY5,qV1,qV5 @@ -514,9 +510,6 @@ VSUB dVi7,dVi7,dT1 SUB pDst, pDst, step2 @// set pDst to y1 - VLD2 {dXr7,dXi7},[pSrc :128],setStep @// data[7] - - VSUB dYr3,dVr3,dVr7 VSUB dYi3,dVi3,dVi7 VST2 {dYr1,dYi1},[pDst :128],step1 @// store y1 @@ -554,7 +547,6 @@ VSUB dVr5,dT1,dVi5 @// a * V5 VADD dVi5,dT1,dVi5 - VLD2 {dXr7,dXi7},[pSrc :128],setStep @// data[7] VSUB qY5,qV1,qV5