;/** ; * Function: omxVCCOMM_Copy8x8 ; * ; * Description: ; * Copies the reference 8x8 block to the current block. ; * Parameters: ; * [in] pSrc - pointer to the reference block in the source frame; must be aligned on an 8-byte boundary. ; * [in] step - distance between the starts of consecutive lines in the reference frame, in bytes; ; * must be a multiple of 8 and must be larger than or equal to 8. ; * [out] pDst - pointer to the destination block; must be aligned on an 8-byte boundary. ; * Return Value: ; * OMX_Sts_NoErr - no error ; * OMX_Sts_BadArgErr - bad arguments; returned under any of the following conditions: ; * - one or more of the following pointers is NULL: pSrc, pDst ; * - one or more of the following pointers is not aligned on an 8-byte boundary: pSrc, pDst ; * - step <8 or step is not a multiple of 8. ; */ INCLUDE omxtypes_s.h M_VARIANTS CortexA8 IF CortexA8 ;//Input Arguments pSrc RN 0 pDst RN 1 step RN 2 ;//Local Variables Count RN 3 Return RN 0 ;// Neon Registers X0 DN D0.S8 X1 DN D1.S8 X2 DN D2.S8 X3 DN D3.S8 M_START omxVCCOMM_Copy8x8 VLD1 {X0},[pSrc],step ;// Load 8 bytes from 8 byte aligned pSrc, pSrc=pSrc+step after load VLD1 {X1},[pSrc],step VLD1 {X2},[pSrc],step VLD1 {X3},[pSrc],step VST1 {X0,X1},[pDst]! ;// Store 16 bytes to 8 byte aligned pDst VST1 {X2,X3},[pDst]! VLD1 {X0},[pSrc],step VLD1 {X1},[pSrc],step VLD1 {X2},[pSrc],step VLD1 {X3},[pSrc],step VST1 {X0,X1},[pDst]! VST1 {X2,X3},[pDst]! MOV Return,#OMX_Sts_NoErr M_END ENDIF END