10c1bc742181ded4930842b46e9507372f0b1b963James Dong ;/**
20c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * Function: omxVCCOMM_Copy16x16
30c1bc742181ded4930842b46e9507372f0b1b963James Dong ; *
40c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * Description:
50c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * Copies the reference 16x16 block to the current block.
60c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * Parameters:
70c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * [in] pSrc         - pointer to the reference block in the source frame; must be aligned on an 16-byte boundary.
80c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * [in] step         - distance between the starts of consecutive lines in the reference frame, in bytes;
90c1bc742181ded4930842b46e9507372f0b1b963James Dong ; *                     must be a multiple of 16 and must be larger than or equal to 16.
100c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * [out] pDst        - pointer to the destination block; must be aligned on an 8-byte boundary.
110c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * Return Value:
120c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * OMX_Sts_NoErr     - no error
130c1bc742181ded4930842b46e9507372f0b1b963James Dong ; * OMX_Sts_BadArgErr - bad arguments; returned under any of the following conditions:
140c1bc742181ded4930842b46e9507372f0b1b963James Dong ; *                   - one or more of the following pointers is NULL:  pSrc, pDst
150c1bc742181ded4930842b46e9507372f0b1b963James Dong ; *                   - one or more of the following pointers is not aligned on an 16-byte boundary:  pSrc, pDst
160c1bc742181ded4930842b46e9507372f0b1b963James Dong ; *                   - step <16 or step is not a multiple of 16.
170c1bc742181ded4930842b46e9507372f0b1b963James Dong ; */
180c1bc742181ded4930842b46e9507372f0b1b963James Dong
190c1bc742181ded4930842b46e9507372f0b1b963James Dong   INCLUDE omxtypes_s.h
200c1bc742181ded4930842b46e9507372f0b1b963James Dong
210c1bc742181ded4930842b46e9507372f0b1b963James Dong
220c1bc742181ded4930842b46e9507372f0b1b963James Dong     M_VARIANTS CortexA8
230c1bc742181ded4930842b46e9507372f0b1b963James Dong
240c1bc742181ded4930842b46e9507372f0b1b963James Dong     IF CortexA8
250c1bc742181ded4930842b46e9507372f0b1b963James Dong
260c1bc742181ded4930842b46e9507372f0b1b963James Dong
270c1bc742181ded4930842b46e9507372f0b1b963James Dong ;//Input Arguments
280c1bc742181ded4930842b46e9507372f0b1b963James DongpSrc    RN 0
290c1bc742181ded4930842b46e9507372f0b1b963James DongpDst    RN 1
300c1bc742181ded4930842b46e9507372f0b1b963James Dongstep    RN 2
310c1bc742181ded4930842b46e9507372f0b1b963James Dong
320c1bc742181ded4930842b46e9507372f0b1b963James Dong;//Local Variables
330c1bc742181ded4930842b46e9507372f0b1b963James DongReturn  RN 0
340c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Neon Registers
350c1bc742181ded4930842b46e9507372f0b1b963James Dong
360c1bc742181ded4930842b46e9507372f0b1b963James DongX0      DN D0.S8
370c1bc742181ded4930842b46e9507372f0b1b963James DongX1      DN D1.S8
380c1bc742181ded4930842b46e9507372f0b1b963James DongX2      DN D2.S8
390c1bc742181ded4930842b46e9507372f0b1b963James DongX3      DN D3.S8
400c1bc742181ded4930842b46e9507372f0b1b963James DongX4      DN D4.S8
410c1bc742181ded4930842b46e9507372f0b1b963James DongX5      DN D5.S8
420c1bc742181ded4930842b46e9507372f0b1b963James DongX6      DN D6.S8
430c1bc742181ded4930842b46e9507372f0b1b963James DongX7      DN D7.S8
440c1bc742181ded4930842b46e9507372f0b1b963James Dong
450c1bc742181ded4930842b46e9507372f0b1b963James Dong     M_START omxVCCOMM_Copy16x16
460c1bc742181ded4930842b46e9507372f0b1b963James Dong
470c1bc742181ded4930842b46e9507372f0b1b963James Dong
480c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X0,X1},[pSrc@128],step       ;// Load 16 bytes from 16 byte aligned pSrc and pSrc=pSrc + step after loading
490c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X2,X3},[pSrc@128],step
500c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X4,X5},[pSrc@128],step
510c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X6,X7},[pSrc@128],step
520c1bc742181ded4930842b46e9507372f0b1b963James Dong
530c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1  {X0,X1,X2,X3},[pDst@128]!     ;// Store 32 bytes to 16 byte aligned pDst
540c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1  {X4,X5,X6,X7},[pDst@128]!
550c1bc742181ded4930842b46e9507372f0b1b963James Dong
560c1bc742181ded4930842b46e9507372f0b1b963James Dong
570c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X0,X1},[pSrc@128],step
580c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X2,X3},[pSrc@128],step
590c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X4,X5},[pSrc@128],step
600c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X6,X7},[pSrc@128],step
610c1bc742181ded4930842b46e9507372f0b1b963James Dong
620c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1  {X0,X1,X2,X3},[pDst@128]!
630c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1  {X4,X5,X6,X7},[pDst@128]!
640c1bc742181ded4930842b46e9507372f0b1b963James Dong
650c1bc742181ded4930842b46e9507372f0b1b963James Dong
660c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X0,X1},[pSrc@128],step
670c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X2,X3},[pSrc@128],step
680c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X4,X5},[pSrc@128],step
690c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X6,X7},[pSrc@128],step
700c1bc742181ded4930842b46e9507372f0b1b963James Dong
710c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1  {X0,X1,X2,X3},[pDst@128]!
720c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1  {X4,X5,X6,X7},[pDst@128]!
730c1bc742181ded4930842b46e9507372f0b1b963James Dong
740c1bc742181ded4930842b46e9507372f0b1b963James Dong
750c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X0,X1},[pSrc@128],step
760c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X2,X3},[pSrc@128],step
770c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X4,X5},[pSrc@128],step
780c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1  {X6,X7},[pSrc@128],step
790c1bc742181ded4930842b46e9507372f0b1b963James Dong
800c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1  {X0,X1,X2,X3},[pDst@128]!
810c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1  {X4,X5,X6,X7},[pDst@128]!
820c1bc742181ded4930842b46e9507372f0b1b963James Dong
830c1bc742181ded4930842b46e9507372f0b1b963James Dong
840c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV   Return,#OMX_Sts_NoErr
850c1bc742181ded4930842b46e9507372f0b1b963James Dong
860c1bc742181ded4930842b46e9507372f0b1b963James Dong
870c1bc742181ded4930842b46e9507372f0b1b963James Dong
880c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_END
890c1bc742181ded4930842b46e9507372f0b1b963James Dong        ENDIF
900c1bc742181ded4930842b46e9507372f0b1b963James Dong
910c1bc742181ded4930842b46e9507372f0b1b963James Dong
920c1bc742181ded4930842b46e9507372f0b1b963James Dong
930c1bc742181ded4930842b46e9507372f0b1b963James Dong
940c1bc742181ded4930842b46e9507372f0b1b963James Dong        END
950c1bc742181ded4930842b46e9507372f0b1b963James Dong