1 ;/** 2 ; * Function: omxVCCOMM_Copy16x16 3 ; * 4 ; * Description: 5 ; * Copies the reference 16x16 block to the current block. 6 ; * Parameters: 7 ; * [in] pSrc - pointer to the reference block in the source frame; must be aligned on an 16-byte boundary. 8 ; * [in] step - distance between the starts of consecutive lines in the reference frame, in bytes; 9 ; * must be a multiple of 16 and must be larger than or equal to 16. 10 ; * [out] pDst - pointer to the destination block; must be aligned on an 8-byte boundary. 11 ; * Return Value: 12 ; * OMX_Sts_NoErr - no error 13 ; * OMX_Sts_BadArgErr - bad arguments; returned under any of the following conditions: 14 ; * - one or more of the following pointers is NULL: pSrc, pDst 15 ; * - one or more of the following pointers is not aligned on an 16-byte boundary: pSrc, pDst 16 ; * - step <16 or step is not a multiple of 16. 17 ; */ 18 19 INCLUDE omxtypes_s.h 20 21 22 M_VARIANTS CortexA8 23 24 IF CortexA8 25 26 27 ;//Input Arguments 28 pSrc RN 0 29 pDst RN 1 30 step RN 2 31 32 ;//Local Variables 33 Return RN 0 34 ;// Neon Registers 35 36 X0 DN D0.S8 37 X1 DN D1.S8 38 X2 DN D2.S8 39 X3 DN D3.S8 40 X4 DN D4.S8 41 X5 DN D5.S8 42 X6 DN D6.S8 43 X7 DN D7.S8 44 45 M_START omxVCCOMM_Copy16x16 46 47 48 VLD1 {X0,X1},[pSrc@128],step ;// Load 16 bytes from 16 byte aligned pSrc and pSrc=pSrc + step after loading 49 VLD1 {X2,X3},[pSrc@128],step 50 VLD1 {X4,X5},[pSrc@128],step 51 VLD1 {X6,X7},[pSrc@128],step 52 53 VST1 {X0,X1,X2,X3},[pDst@128]! ;// Store 32 bytes to 16 byte aligned pDst 54 VST1 {X4,X5,X6,X7},[pDst@128]! 55 56 57 VLD1 {X0,X1},[pSrc@128],step 58 VLD1 {X2,X3},[pSrc@128],step 59 VLD1 {X4,X5},[pSrc@128],step 60 VLD1 {X6,X7},[pSrc@128],step 61 62 VST1 {X0,X1,X2,X3},[pDst@128]! 63 VST1 {X4,X5,X6,X7},[pDst@128]! 64 65 66 VLD1 {X0,X1},[pSrc@128],step 67 VLD1 {X2,X3},[pSrc@128],step 68 VLD1 {X4,X5},[pSrc@128],step 69 VLD1 {X6,X7},[pSrc@128],step 70 71 VST1 {X0,X1,X2,X3},[pDst@128]! 72 VST1 {X4,X5,X6,X7},[pDst@128]! 73 74 75 VLD1 {X0,X1},[pSrc@128],step 76 VLD1 {X2,X3},[pSrc@128],step 77 VLD1 {X4,X5},[pSrc@128],step 78 VLD1 {X6,X7},[pSrc@128],step 79 80 VST1 {X0,X1,X2,X3},[pDst@128]! 81 VST1 {X4,X5,X6,X7},[pDst@128]! 82 83 84 MOV Return,#OMX_Sts_NoErr 85 86 87 88 M_END 89 ENDIF 90 91 92 93 94 END 95