10c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
20c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
30c1bc742181ded4930842b46e9507372f0b1b963James Dong;// File Name:  omxVCM4P10_PredictIntraChroma_8x8_s.s
40c1bc742181ded4930842b46e9507372f0b1b963James Dong;// OpenMAX DL: v1.0.2
50c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Revision:   12290
60c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Date:       Wednesday, April 9, 2008
70c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
80c1bc742181ded4930842b46e9507372f0b1b963James Dong;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
90c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
100c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
110c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
120c1bc742181ded4930842b46e9507372f0b1b963James Dong
130c1bc742181ded4930842b46e9507372f0b1b963James Dong
140c1bc742181ded4930842b46e9507372f0b1b963James Dong        INCLUDE omxtypes_s.h
150c1bc742181ded4930842b46e9507372f0b1b963James Dong        INCLUDE armCOMM_s.h
160c1bc742181ded4930842b46e9507372f0b1b963James Dong
170c1bc742181ded4930842b46e9507372f0b1b963James Dong        EXPORT armVCM4P10_pIndexTable8x8
180c1bc742181ded4930842b46e9507372f0b1b963James Dong
190c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Define the processor variants supported by this file
200c1bc742181ded4930842b46e9507372f0b1b963James Dong
210c1bc742181ded4930842b46e9507372f0b1b963James Dong         M_VARIANTS CortexA8
220c1bc742181ded4930842b46e9507372f0b1b963James Dong
230c1bc742181ded4930842b46e9507372f0b1b963James Dong     AREA table, DATA
240c1bc742181ded4930842b46e9507372f0b1b963James Dong;//-------------------------------------------------------
250c1bc742181ded4930842b46e9507372f0b1b963James Dong;// This table for implementing switch case of C in asm by
260c1bc742181ded4930842b46e9507372f0b1b963James Dong;// the mehtod of two levels of indexing.
270c1bc742181ded4930842b46e9507372f0b1b963James Dong;//-------------------------------------------------------
280c1bc742181ded4930842b46e9507372f0b1b963James Dong
290c1bc742181ded4930842b46e9507372f0b1b963James Dong    M_TABLE armVCM4P10_pIndexTable8x8
300c1bc742181ded4930842b46e9507372f0b1b963James Dong    DCD  OMX_VC_CHROMA_DC,     OMX_VC_CHROMA_HOR
310c1bc742181ded4930842b46e9507372f0b1b963James Dong    DCD  OMX_VC_CHROMA_VERT,   OMX_VC_CHROMA_PLANE
320c1bc742181ded4930842b46e9507372f0b1b963James Dong
330c1bc742181ded4930842b46e9507372f0b1b963James Dong    M_TABLE armVCM4P10_MultiplierTableChroma8x8,1
340c1bc742181ded4930842b46e9507372f0b1b963James Dong    DCW   3, 2, 1,4
350c1bc742181ded4930842b46e9507372f0b1b963James Dong    DCW  -3,-2,-1,0
360c1bc742181ded4930842b46e9507372f0b1b963James Dong    DCW   1, 2, 3,4
370c1bc742181ded4930842b46e9507372f0b1b963James Dong
380c1bc742181ded4930842b46e9507372f0b1b963James Dong
390c1bc742181ded4930842b46e9507372f0b1b963James Dong
400c1bc742181ded4930842b46e9507372f0b1b963James Dong    IF CortexA8
410c1bc742181ded4930842b46e9507372f0b1b963James Dong
420c1bc742181ded4930842b46e9507372f0b1b963James Dong;//--------------------------------------------
430c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Scratch variable
440c1bc742181ded4930842b46e9507372f0b1b963James Dong;//--------------------------------------------
450c1bc742181ded4930842b46e9507372f0b1b963James Dong
460c1bc742181ded4930842b46e9507372f0b1b963James Dongpc              RN 15
470c1bc742181ded4930842b46e9507372f0b1b963James Dongreturn          RN 0
480c1bc742181ded4930842b46e9507372f0b1b963James DongpTable          RN 8
490c1bc742181ded4930842b46e9507372f0b1b963James Dong
500c1bc742181ded4930842b46e9507372f0b1b963James Dong;//--------------------------------------------
510c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Input Arguments
520c1bc742181ded4930842b46e9507372f0b1b963James Dong;//--------------------------------------------
530c1bc742181ded4930842b46e9507372f0b1b963James DongpSrcLeft        RN 0    ;// input pointer
540c1bc742181ded4930842b46e9507372f0b1b963James DongpSrcAbove       RN 1    ;// input pointer
550c1bc742181ded4930842b46e9507372f0b1b963James DongpSrcAboveLeft   RN 2    ;// input pointer
560c1bc742181ded4930842b46e9507372f0b1b963James DongpDst            RN 3    ;// output pointer
570c1bc742181ded4930842b46e9507372f0b1b963James DongleftStep        RN 4    ;// input variable
580c1bc742181ded4930842b46e9507372f0b1b963James DongdstStep         RN 5    ;// input variable
590c1bc742181ded4930842b46e9507372f0b1b963James DongpredMode        RN 6    ;// input variable
600c1bc742181ded4930842b46e9507372f0b1b963James Dongavailability    RN 7    ;// input variable
610c1bc742181ded4930842b46e9507372f0b1b963James DongpMultiplierTable    RN  2
620c1bc742181ded4930842b46e9507372f0b1b963James Dong
630c1bc742181ded4930842b46e9507372f0b1b963James DongpTmp            RN 9
640c1bc742181ded4930842b46e9507372f0b1b963James Dongstep            RN 10
650c1bc742181ded4930842b46e9507372f0b1b963James Dong
660c1bc742181ded4930842b46e9507372f0b1b963James Dong;//---------------------
670c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Neon Registers
680c1bc742181ded4930842b46e9507372f0b1b963James Dong;//---------------------
690c1bc742181ded4930842b46e9507372f0b1b963James Dong
700c1bc742181ded4930842b46e9507372f0b1b963James Dong;// OMX_VC_CHROMA_HOR
710c1bc742181ded4930842b46e9507372f0b1b963James Dong
720c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftVal0       DN  D0.8
730c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftVal1       DN  D1.8
740c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftVal2       DN  D2.8
750c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftVal3       DN  D3.8
760c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftVal4       DN  D4.8
770c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftVal5       DN  D5.8
780c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftVal6       DN  D6.8
790c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftVal7       DN  D7.8
800c1bc742181ded4930842b46e9507372f0b1b963James Dong
810c1bc742181ded4930842b46e9507372f0b1b963James Dong;// OMX_VC_CHROMA_VERT
820c1bc742181ded4930842b46e9507372f0b1b963James Dong
830c1bc742181ded4930842b46e9507372f0b1b963James DongdAboveVal       DN  D0.U8
840c1bc742181ded4930842b46e9507372f0b1b963James Dong
850c1bc742181ded4930842b46e9507372f0b1b963James Dong;// OMX_VC_CHROMA_DC
860c1bc742181ded4930842b46e9507372f0b1b963James Dong
870c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftVal        DN  D1.U8
880c1bc742181ded4930842b46e9507372f0b1b963James DongdSumAboveValU16 DN  D2.U16
890c1bc742181ded4930842b46e9507372f0b1b963James DongdSumAboveValU32 DN  D3.U32
900c1bc742181ded4930842b46e9507372f0b1b963James DongdSumAboveValU8  DN  D3.U8
910c1bc742181ded4930842b46e9507372f0b1b963James DongdSumLeftValU16  DN  D2.U16
920c1bc742181ded4930842b46e9507372f0b1b963James DongdSumLeftValU32  DN  D1.U32
930c1bc742181ded4930842b46e9507372f0b1b963James DongdSumLeftValU8   DN  D1.U8
940c1bc742181ded4930842b46e9507372f0b1b963James DongdSumAboveLeft   DN  D2.U32
950c1bc742181ded4930842b46e9507372f0b1b963James DongdSumAboveLeftU8 DN  D2.U8
960c1bc742181ded4930842b46e9507372f0b1b963James DongdIndexRow0U8    DN  D5.U8
970c1bc742181ded4930842b46e9507372f0b1b963James DongdIndexRow0      DN  D5.U64
980c1bc742181ded4930842b46e9507372f0b1b963James DongdIndexRow4U8    DN  D6.U8
990c1bc742181ded4930842b46e9507372f0b1b963James DongdIndexRow4      DN  D6.U64
1000c1bc742181ded4930842b46e9507372f0b1b963James DongdDstRow0        DN  D0.U8
1010c1bc742181ded4930842b46e9507372f0b1b963James DongdDstRow4        DN  D4.U8
1020c1bc742181ded4930842b46e9507372f0b1b963James DongdConst128U8     DN  D0.U8
1030c1bc742181ded4930842b46e9507372f0b1b963James Dong
1040c1bc742181ded4930842b46e9507372f0b1b963James Dong;// OMX_VC_CHROMA_PLANE
1050c1bc742181ded4930842b46e9507372f0b1b963James Dong
1060c1bc742181ded4930842b46e9507372f0b1b963James DongdRevAboveVal    DN  D3.U8
1070c1bc742181ded4930842b46e9507372f0b1b963James DongdRevAboveValU64 DN  D3.U64
1080c1bc742181ded4930842b46e9507372f0b1b963James DongdAboveLeftVal   DN  D2.U8
1090c1bc742181ded4930842b46e9507372f0b1b963James DongqAbove7minus0   QN  Q3.S16
1100c1bc742181ded4930842b46e9507372f0b1b963James DongqAboveDiff      QN  Q2.S16
1110c1bc742181ded4930842b46e9507372f0b1b963James DongdIndex          DN  D8.U8
1120c1bc742181ded4930842b46e9507372f0b1b963James DongdDiffAboveU8    DN  D9.U8
1130c1bc742181ded4930842b46e9507372f0b1b963James DongdDiffAboveS16   DN  D9.S16
1140c1bc742181ded4930842b46e9507372f0b1b963James DongdAboveDiff0U8   DN  D4.U8
1150c1bc742181ded4930842b46e9507372f0b1b963James DongdAboveDiff0U64  DN  D4.U64
1160c1bc742181ded4930842b46e9507372f0b1b963James DongdAbove7minus0U8 DN  D6.U8
1170c1bc742181ded4930842b46e9507372f0b1b963James DongdMultiplier     DN  D10.S16
1180c1bc742181ded4930842b46e9507372f0b1b963James DongdHorPred        DN  D11.S16
1190c1bc742181ded4930842b46e9507372f0b1b963James DongdRevLeftVal     DN  D3.U8
1200c1bc742181ded4930842b46e9507372f0b1b963James DongdRevLeftValU64  DN  D3.U64
1210c1bc742181ded4930842b46e9507372f0b1b963James DongqLeft7minus0    QN  Q7.S16
1220c1bc742181ded4930842b46e9507372f0b1b963James DongqLeftDiff       QN  Q6.S16
1230c1bc742181ded4930842b46e9507372f0b1b963James DongdDiffLeftU8     DN  D16.U8
1240c1bc742181ded4930842b46e9507372f0b1b963James DongdDiffLeftS16    DN  D16.S16
1250c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftDiff0U8    DN  D12.U8
1260c1bc742181ded4930842b46e9507372f0b1b963James DongdLeftDiff0U64   DN  D12.U64
1270c1bc742181ded4930842b46e9507372f0b1b963James DongdLeft7minus0U8  DN  D14.U8
1280c1bc742181ded4930842b46e9507372f0b1b963James DongdVerPred        DN  D3.S16
1290c1bc742181ded4930842b46e9507372f0b1b963James DongdHVValS16       DN  D3.S16
1300c1bc742181ded4930842b46e9507372f0b1b963James DongdHVValS32       DN  D3.S32
1310c1bc742181ded4930842b46e9507372f0b1b963James DongdHVTempS32      DN  D2.S32
1320c1bc742181ded4930842b46e9507372f0b1b963James DongqA              QN  Q0.S16
1330c1bc742181ded4930842b46e9507372f0b1b963James DongqB              QN  Q2.S16
1340c1bc742181ded4930842b46e9507372f0b1b963James DongqC              QN  Q3.S16
1350c1bc742181ded4930842b46e9507372f0b1b963James DongqMultiplier     QN  Q5.S16
1360c1bc742181ded4930842b46e9507372f0b1b963James DongdMultiplier0    DN  D10.S16
1370c1bc742181ded4930842b46e9507372f0b1b963James DongdMultiplier1    DN  D11.S16
1380c1bc742181ded4930842b46e9507372f0b1b963James DongqC0             QN  Q0.S16
1390c1bc742181ded4930842b46e9507372f0b1b963James DongqC1             QN  Q1.S16
1400c1bc742181ded4930842b46e9507372f0b1b963James DongqC2             QN  Q4.S16
1410c1bc742181ded4930842b46e9507372f0b1b963James DongqC3             QN  Q5.S16
1420c1bc742181ded4930842b46e9507372f0b1b963James DongqC4             QN  Q6.S16
1430c1bc742181ded4930842b46e9507372f0b1b963James DongqC5             QN  Q7.S16
1440c1bc742181ded4930842b46e9507372f0b1b963James DongqC6             QN  Q8.S16
1450c1bc742181ded4930842b46e9507372f0b1b963James DongqC7             QN  Q9.S16
1460c1bc742181ded4930842b46e9507372f0b1b963James DongqSum0           QN  Q0.S16
1470c1bc742181ded4930842b46e9507372f0b1b963James DongqSum1           QN  Q1.S16
1480c1bc742181ded4930842b46e9507372f0b1b963James DongqSum2           QN  Q4.S16
1490c1bc742181ded4930842b46e9507372f0b1b963James DongqSum3           QN  Q5.S16
1500c1bc742181ded4930842b46e9507372f0b1b963James DongqSum4           QN  Q6.S16
1510c1bc742181ded4930842b46e9507372f0b1b963James DongqSum5           QN  Q7.S16
1520c1bc742181ded4930842b46e9507372f0b1b963James DongqSum6           QN  Q8.S16
1530c1bc742181ded4930842b46e9507372f0b1b963James DongqSum7           QN  Q9.S16
1540c1bc742181ded4930842b46e9507372f0b1b963James DongdSum0           DN  D0.U8
1550c1bc742181ded4930842b46e9507372f0b1b963James DongdSum1           DN  D1.U8
1560c1bc742181ded4930842b46e9507372f0b1b963James DongdSum2           DN  D2.U8
1570c1bc742181ded4930842b46e9507372f0b1b963James DongdSum3           DN  D3.U8
1580c1bc742181ded4930842b46e9507372f0b1b963James DongdSum4           DN  D4.U8
1590c1bc742181ded4930842b46e9507372f0b1b963James DongdSum5           DN  D5.U8
1600c1bc742181ded4930842b46e9507372f0b1b963James DongdSum6           DN  D6.U8
1610c1bc742181ded4930842b46e9507372f0b1b963James DongdSum7           DN  D7.U8
1620c1bc742181ded4930842b46e9507372f0b1b963James Dong
1630c1bc742181ded4930842b46e9507372f0b1b963James Dong;//-----------------------------------------------------------------------------------------------
1640c1bc742181ded4930842b46e9507372f0b1b963James Dong;// omxVCM4P10_PredictIntraChroma_8x8 starts
1650c1bc742181ded4930842b46e9507372f0b1b963James Dong;//-----------------------------------------------------------------------------------------------
1660c1bc742181ded4930842b46e9507372f0b1b963James Dong
1670c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Write function header
1680c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_START omxVCM4P10_PredictIntraChroma_8x8, r10, d15
1690c1bc742181ded4930842b46e9507372f0b1b963James Dong
1700c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Define stack arguments
1710c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_ARG    LeftStep,     4
1720c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_ARG    DstStep,      4
1730c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_ARG    PredMode,     4
1740c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_ARG    Availability, 4
1750c1bc742181ded4930842b46e9507372f0b1b963James Dong
1760c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR      pTable,=armVCM4P10_pIndexTable8x8   ;// Load index table for switch case
1770c1bc742181ded4930842b46e9507372f0b1b963James Dong
1780c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Load argument from the stack
1790c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR    predMode, PredMode                  ;// Arg predMode loaded from stack to reg
1800c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR    leftStep, LeftStep                  ;// Arg leftStep loaded from stack to reg
1810c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR    dstStep,  DstStep                   ;// Arg dstStep loaded from stack to reg
1820c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR    availability, Availability          ;// Arg availability loaded from stack to reg
1830c1bc742181ded4930842b46e9507372f0b1b963James Dong
1840c1bc742181ded4930842b46e9507372f0b1b963James Dong
1850c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR      pc, [pTable, predMode, LSL #2]      ;// Branch to the case based on preMode
1860c1bc742181ded4930842b46e9507372f0b1b963James Dong
1870c1bc742181ded4930842b46e9507372f0b1b963James DongOMX_VC_CHROMA_DC
1880c1bc742181ded4930842b46e9507372f0b1b963James Dong
1890c1bc742181ded4930842b46e9507372f0b1b963James Dong        TST     availability, #OMX_VC_LEFT
1900c1bc742181ded4930842b46e9507372f0b1b963James Dong        BEQ     DCChroma8x8LeftNotAvailable
1910c1bc742181ded4930842b46e9507372f0b1b963James Dong
1920c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     pTmp, pSrcLeft, leftStep
1930c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     step, leftStep, leftStep
1940c1bc742181ded4930842b46e9507372f0b1b963James Dong
1950c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Load Left Edge
1960c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[0]},[pSrcLeft],step               ;// pSrcLeft[0*leftStep]
1970c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[1]},[pTmp],step                   ;// pSrcLeft[1*leftStep]
1980c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[2]},[pSrcLeft],step               ;// pSrcLeft[2*leftStep]
1990c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[3]},[pTmp],step                   ;// pSrcLeft[3*leftStep]
2000c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[4]},[pSrcLeft],step               ;// pSrcLeft[4*leftStep]
2010c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[5]},[pTmp],step                   ;// pSrcLeft[5*leftStep]
2020c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[6]},[pSrcLeft],step               ;// pSrcLeft[6*leftStep]
2030c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[7]},[pTmp]                        ;// pSrcLeft[7*leftStep]
2040c1bc742181ded4930842b46e9507372f0b1b963James Dong
2050c1bc742181ded4930842b46e9507372f0b1b963James Dong        TST     availability, #OMX_VC_UPPER
2060c1bc742181ded4930842b46e9507372f0b1b963James Dong        BEQ     DCChroma8x8LeftOnlyAvailable
2070c1bc742181ded4930842b46e9507372f0b1b963James Dong
2080c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Load Upper Edge also
2090c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1     dAboveVal,[pSrcAbove]                      ;// pSrcAbove[0 to 7]
2100c1bc742181ded4930842b46e9507372f0b1b963James Dong
2110c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV      return, #OMX_Sts_NoErr                     ;// returnNoError
2120c1bc742181ded4930842b46e9507372f0b1b963James Dong
2130c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADDL   dSumAboveValU16, dAboveVal                 ;// pSrcAbove[ 6+7 | 4+5 | 2+3 | 0+1 ]
2140c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADDL   dSumAboveValU32, dSumAboveValU16           ;// pSrcAbove[ 4+5+6+7 |  0+1+2+3 ]
2150c1bc742181ded4930842b46e9507372f0b1b963James Dong
2160c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADDL   dSumLeftValU16, dLeftVal                   ;// pSrcLeft[ 6+7 | 4+5 | 2+3 | 0+1 ]
2170c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADDL   dSumLeftValU32, dSumLeftValU16             ;// pSrcLeft[ 4+5+6+7 |  0+1+2+3 ]
2180c1bc742181ded4930842b46e9507372f0b1b963James Dong
2190c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD     dSumAboveLeft,dSumAboveValU32,dSumLeftValU32
2200c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRSHR    dSumAboveLeft,dSumAboveLeft,#3             ;// Sum = (Sum + 4) >> 3
2210c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRSHR    dSumAboveValU32,dSumAboveValU32,#2         ;// Sum = (Sum + 2) >> 2
2220c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRSHR    dSumLeftValU32,dSumLeftValU32,#2           ;// Sum = (Sum + 2) >> 2
2230c1bc742181ded4930842b46e9507372f0b1b963James Dong
2240c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMOV     dIndexRow0U8,#0x0c
2250c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMOV     dIndexRow4U8,#0x04
2260c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHL     dIndexRow0,dIndexRow0,#32                  ;// index0 = 0x0c0c0c0c00000000
2270c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHR     dIndexRow4,dIndexRow4,#32                  ;// index4 = 0x0000000004040404
2280c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD     dIndexRow4U8,dIndexRow4U8,dIndexRow0U8     ;// index4 = 0x0c0c0c0c04040404
2290c1bc742181ded4930842b46e9507372f0b1b963James Dong        VTBL     dDstRow0,{dSumAboveLeftU8,dSumAboveValU8},dIndexRow0U8
2300c1bc742181ded4930842b46e9507372f0b1b963James Dong        VTBL     dDstRow4,{dSumLeftValU8,dSumAboveLeftU8},dIndexRow4U8
2310c1bc742181ded4930842b46e9507372f0b1b963James Dong
2320c1bc742181ded4930842b46e9507372f0b1b963James DongDCChroma8x8LeftStore
2330c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     pTmp, pDst, dstStep
2340c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     step, dstStep, dstStep
2350c1bc742181ded4930842b46e9507372f0b1b963James Dong
2360c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pDst],step                    ;// pDst[0*dstStep+x] :0<= x <= 7
2370c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pTmp],step                    ;// pDst[1*dstStep+x] :0<= x <= 7
2380c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pDst],step                    ;// pDst[2*dstStep+x] :0<= x <= 7
2390c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pTmp],step                    ;// pDst[3*dstStep+x] :0<= x <= 7
2400c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow4,[pDst],step                    ;// pDst[4*dstStep+x] :0<= x <= 7
2410c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow4,[pTmp],step                    ;// pDst[5*dstStep+x] :0<= x <= 7
2420c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow4,[pDst],step                    ;// pDst[6*dstStep+x] :0<= x <= 7
2430c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow4,[pTmp]                         ;// pDst[7*dstStep+x] :0<= x <= 7
2440c1bc742181ded4930842b46e9507372f0b1b963James Dong
2450c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_EXIT
2460c1bc742181ded4930842b46e9507372f0b1b963James Dong
2470c1bc742181ded4930842b46e9507372f0b1b963James Dong
2480c1bc742181ded4930842b46e9507372f0b1b963James DongDCChroma8x8LeftOnlyAvailable
2490c1bc742181ded4930842b46e9507372f0b1b963James Dong
2500c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV      return, #OMX_Sts_NoErr
2510c1bc742181ded4930842b46e9507372f0b1b963James Dong
2520c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADDL   dSumLeftValU16, dLeftVal                   ;// pSrcLeft[ 6+7 | 4+5 | 2+3 | 0+1 ]
2530c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADDL   dSumLeftValU32, dSumLeftValU16             ;// pSrcLeft[ 4+5+6+7 |  0+1+2+3 ]
2540c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRSHR    dSumLeftValU32,dSumLeftValU32,#2           ;// Sum = (Sum + 2) >> 2
2550c1bc742181ded4930842b46e9507372f0b1b963James Dong
2560c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP     dDstRow0,dSumLeftValU8[0]
2570c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP     dDstRow4,dSumLeftValU8[4]
2580c1bc742181ded4930842b46e9507372f0b1b963James Dong
2590c1bc742181ded4930842b46e9507372f0b1b963James Dong        B        DCChroma8x8LeftStore
2600c1bc742181ded4930842b46e9507372f0b1b963James Dong
2610c1bc742181ded4930842b46e9507372f0b1b963James Dong
2620c1bc742181ded4930842b46e9507372f0b1b963James DongDCChroma8x8LeftNotAvailable
2630c1bc742181ded4930842b46e9507372f0b1b963James Dong
2640c1bc742181ded4930842b46e9507372f0b1b963James Dong        TST     availability, #OMX_VC_UPPER
2650c1bc742181ded4930842b46e9507372f0b1b963James Dong        BEQ     DCChroma8x8NoneAvailable
2660c1bc742181ded4930842b46e9507372f0b1b963James Dong
2670c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Load Upper Edge
2680c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1     dAboveVal,[pSrcAbove]                      ;// pSrcAbove[0 to 7]
2690c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV      return, #OMX_Sts_NoErr                     ;// returnNoError
2700c1bc742181ded4930842b46e9507372f0b1b963James Dong
2710c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADDL   dSumAboveValU16, dAboveVal                 ;// pSrcAbove[ 6+7 | 4+5 | 2+3 | 0+1 ]
2720c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADDL   dSumAboveValU32, dSumAboveValU16           ;// pSrcAbove[ 4+5+6+7 |  0+1+2+3 ]
2730c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRSHR    dSumAboveValU32,dSumAboveValU32,#2         ;// Sum = (Sum + 2) >> 2
2740c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMOV     dIndexRow0U8,#0x04
2750c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHL     dIndexRow0,dIndexRow0,#32                  ;// index = 0x0404040400000000
2760c1bc742181ded4930842b46e9507372f0b1b963James Dong        VTBL     dDstRow0,{dSumAboveValU8},dIndexRow0U8
2770c1bc742181ded4930842b46e9507372f0b1b963James Dong
2780c1bc742181ded4930842b46e9507372f0b1b963James Dong        B        DCChroma8x8UpperStore
2790c1bc742181ded4930842b46e9507372f0b1b963James Dong
2800c1bc742181ded4930842b46e9507372f0b1b963James Dong
2810c1bc742181ded4930842b46e9507372f0b1b963James DongDCChroma8x8NoneAvailable
2820c1bc742181ded4930842b46e9507372f0b1b963James Dong
2830c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMOV     dConst128U8,#0x80                          ;// 0x8080808080808080 if(count == 0)
2840c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV      return, #OMX_Sts_NoErr                     ;// returnNoError
2850c1bc742181ded4930842b46e9507372f0b1b963James Dong
2860c1bc742181ded4930842b46e9507372f0b1b963James DongDCChroma8x8UpperStore
2870c1bc742181ded4930842b46e9507372f0b1b963James Dong
2880c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     pTmp, pDst, dstStep
2890c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     step, dstStep, dstStep
2900c1bc742181ded4930842b46e9507372f0b1b963James Dong
2910c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pDst],step                    ;// pDst[0*dstStep+x] :0<= x <= 7
2920c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pTmp],step                    ;// pDst[1*dstStep+x] :0<= x <= 7
2930c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pDst],step                    ;// pDst[2*dstStep+x] :0<= x <= 7
2940c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pTmp],step                    ;// pDst[3*dstStep+x] :0<= x <= 7
2950c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pDst],step                    ;// pDst[4*dstStep+x] :0<= x <= 7
2960c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pTmp],step                    ;// pDst[5*dstStep+x] :0<= x <= 7
2970c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pDst],step                    ;// pDst[6*dstStep+x] :0<= x <= 7
2980c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1     dDstRow0,[pTmp]                         ;// pDst[7*dstStep+x] :0<= x <= 7
2990c1bc742181ded4930842b46e9507372f0b1b963James Dong
3000c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_EXIT
3010c1bc742181ded4930842b46e9507372f0b1b963James Dong
3020c1bc742181ded4930842b46e9507372f0b1b963James Dong
3030c1bc742181ded4930842b46e9507372f0b1b963James DongOMX_VC_CHROMA_VERT
3040c1bc742181ded4930842b46e9507372f0b1b963James Dong
3050c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1     dAboveVal,[pSrcAbove]                      ;// pSrcAbove[x]      :0<= x <= 7
3060c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV      return, #OMX_Sts_NoErr
3070c1bc742181ded4930842b46e9507372f0b1b963James Dong
3080c1bc742181ded4930842b46e9507372f0b1b963James Dong        B        DCChroma8x8UpperStore
3090c1bc742181ded4930842b46e9507372f0b1b963James Dong
3100c1bc742181ded4930842b46e9507372f0b1b963James Dong
3110c1bc742181ded4930842b46e9507372f0b1b963James DongOMX_VC_CHROMA_HOR
3120c1bc742181ded4930842b46e9507372f0b1b963James Dong
3130c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     pTmp, pSrcLeft, leftStep
3140c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     step, leftStep, leftStep
3150c1bc742181ded4930842b46e9507372f0b1b963James Dong
3160c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal0[]},[pSrcLeft],step           ;// pSrcLeft[0*leftStep]
3170c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal1[]},[pTmp],step               ;// pSrcLeft[1*leftStep]
3180c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal2[]},[pSrcLeft],step           ;// pSrcLeft[2*leftStep]
3190c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal3[]},[pTmp],step               ;// pSrcLeft[3*leftStep]
3200c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal4[]},[pSrcLeft],step           ;// pSrcLeft[4*leftStep]
3210c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal5[]},[pTmp],step               ;// pSrcLeft[5*leftStep]
3220c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal6[]},[pSrcLeft],step           ;// pSrcLeft[6*leftStep]
3230c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal7[]},[pTmp]                    ;// pSrcLeft[7*leftStep]
3240c1bc742181ded4930842b46e9507372f0b1b963James Dong
3250c1bc742181ded4930842b46e9507372f0b1b963James Dong        B        DCChroma8x8PlaneStore
3260c1bc742181ded4930842b46e9507372f0b1b963James Dong
3270c1bc742181ded4930842b46e9507372f0b1b963James Dong
3280c1bc742181ded4930842b46e9507372f0b1b963James DongOMX_VC_CHROMA_PLANE
3290c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     pTmp, pSrcLeft, leftStep
3300c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     step, leftStep, leftStep
3310c1bc742181ded4930842b46e9507372f0b1b963James Dong
3320c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    dAboveVal,[pSrcAbove]                       ;// pSrcAbove[x]      :0<= x <= 7
3330c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    dAboveLeftVal[0],[pSrcAboveLeft]
3340c1bc742181ded4930842b46e9507372f0b1b963James Dong
3350c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[0]},[pSrcLeft],step               ;// pSrcLeft[0*leftStep]
3360c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[1]},[pTmp],step                   ;// pSrcLeft[1*leftStep]
3370c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[2]},[pSrcLeft],step               ;// pSrcLeft[2*leftStep]
3380c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[3]},[pTmp],step                   ;// pSrcLeft[3*leftStep]
3390c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[4]},[pSrcLeft],step               ;// pSrcLeft[4*leftStep]
3400c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[5]},[pTmp],step                   ;// pSrcLeft[5*leftStep]
3410c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[6]},[pSrcLeft],step               ;// pSrcLeft[6*leftStep]
3420c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dLeftVal[7]},[pTmp]                        ;// pSrcLeft[7*leftStep]
3430c1bc742181ded4930842b46e9507372f0b1b963James Dong
3440c1bc742181ded4930842b46e9507372f0b1b963James Dong
3450c1bc742181ded4930842b46e9507372f0b1b963James Dong        VREV64  dRevAboveVal,dAboveVal                      ;// Reverse order of bytes = pSrcAbove[0:1:2:3:4:5:6:7]
3460c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSUBL   qAbove7minus0,dRevAboveVal,dAboveLeftVal    ;// qAbove7minus0[0] = pSrcAbove[7] - pSrcAboveLeft[0]
3470c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHR    dRevAboveValU64,dRevAboveValU64,#8          ;// pSrcAbove[X:0:1:2:3:4:5:6]
3480c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSUBL   qAboveDiff,dRevAboveVal,dAboveVal           ;// pSrcAbove[6] - pSrcAbove[0]
3490c1bc742181ded4930842b46e9507372f0b1b963James Dong                                                            ;// pSrcAbove[5] - pSrcAbove[1]
3500c1bc742181ded4930842b46e9507372f0b1b963James Dong                                                            ;// pSrcAbove[4] - pSrcAbove[2]
3510c1bc742181ded4930842b46e9507372f0b1b963James Dong
3520c1bc742181ded4930842b46e9507372f0b1b963James Dong        VREV64  dRevLeftVal,dLeftVal                        ;// Reverse order of bytes = pSrcLeft[0:1:2:3:4:5:6:7]
3530c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSUBL   qLeft7minus0,dRevLeftVal,dAboveLeftVal      ;// qAbove7minus0[0] = pSrcLeft[7] - pSrcAboveLeft[0]
3540c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHR    dRevLeftValU64,dRevLeftValU64,#8            ;// pSrcLeft[X:0:1:2:3:4:5:6]
3550c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSUBL   qLeftDiff,dRevLeftVal,dLeftVal              ;// pSrcLeft[6] - pSrcLeft[0]
3560c1bc742181ded4930842b46e9507372f0b1b963James Dong                                                            ;// pSrcLeft[5] - pSrcLeft[1]
3570c1bc742181ded4930842b46e9507372f0b1b963James Dong                                                            ;// pSrcLeft[4] - pSrcLeft[2]
3580c1bc742181ded4930842b46e9507372f0b1b963James Dong
3590c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR     pMultiplierTable,=armVCM4P10_MultiplierTableChroma8x8   ;// Used to calculate Hval & Vval
3600c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHL    dAboveDiff0U64,dAboveDiff0U64,#16
3610c1bc742181ded4930842b46e9507372f0b1b963James Dong        VEXT    dDiffAboveU8,dAboveDiff0U8,dAbove7minus0U8,#2           ;// pSrcAbove[ 7-0 | 4-2 | 5-1 | 6-0 ]
3620c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    dMultiplier,[pMultiplierTable]!
3630c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHL    dLeftDiff0U64,dLeftDiff0U64,#16
3640c1bc742181ded4930842b46e9507372f0b1b963James Dong        VEXT    dDiffLeftU8,dLeftDiff0U8,dLeft7minus0U8,#2              ;// pSrcLeft[ 7-0 | 4-2 | 5-1 | 6-0 ]
3650c1bc742181ded4930842b46e9507372f0b1b963James Dong
3660c1bc742181ded4930842b46e9507372f0b1b963James Dong
3670c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMUL    dHorPred,dDiffAboveS16,dMultiplier                      ;// pSrcAbove[ 4*(7-0) | 1*(4-2) | 2*(5-1) | 3*(6-0) ]
3680c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMUL    dVerPred,dDiffLeftS16,dMultiplier
3690c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADD   dHVValS16,dHorPred,dVerPred
3700c1bc742181ded4930842b46e9507372f0b1b963James Dong
3710c1bc742181ded4930842b46e9507372f0b1b963James Dong
3720c1bc742181ded4930842b46e9507372f0b1b963James Dong        VPADDL  dHVValS32,dHVValS16                                     ;// [V|H] in 32 bits each
3730c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHL    dHVTempS32,dHVValS32,#4                                 ;// 17*H = 16*H + H = (H<<4)+H
3740c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    dHVValS32,dHVValS32,dHVTempS32                          ;// [ 17*V  | 17*H ]in 32 bits each
3750c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1    {dMultiplier0,dMultiplier1},[pMultiplierTable]          ;// qMultiplier = [ 4|3|2|1|0|-1|-2|-3 ]
3760c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRSHR   dHVValS32,dHVValS32,#5                                  ;// [c|b] in 16bits each
3770c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDL   qA,dAboveVal,dLeftVal
3780c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qA,qA[7]
3790c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHL    qA,qA,#4                                                ;// [a|a|a|a|a|a|a|a]
3800c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qB,dHVValS16[0]                                         ;// [b|b|b|b|b|b|b|b]
3810c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qC,dHVValS16[2]                                         ;// [c|c|c|c|c|c|c|c]
3820c1bc742181ded4930842b46e9507372f0b1b963James Dong
3830c1bc742181ded4930842b46e9507372f0b1b963James Dong
3840c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMUL    qB,qB,qMultiplier
3850c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMUL    qC,qC,qMultiplier
3860c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    qB,qB,qA
3870c1bc742181ded4930842b46e9507372f0b1b963James Dong
3880c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qC0,qC[0]
3890c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qC1,qC[1]
3900c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qC2,qC[2]
3910c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qC3,qC[3]
3920c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qC4,qC[4]
3930c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qC5,qC[5]
3940c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qC6,qC[6]
3950c1bc742181ded4930842b46e9507372f0b1b963James Dong        VDUP    qC7,qC[7]
3960c1bc742181ded4930842b46e9507372f0b1b963James Dong
3970c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    qSum0,qB,qC0
3980c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    qSum1,qB,qC1
3990c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    qSum2,qB,qC2
4000c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    qSum3,qB,qC3
4010c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    qSum4,qB,qC4
4020c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    qSum5,qB,qC5
4030c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    qSum6,qB,qC6
4040c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD    qSum7,qB,qC7
4050c1bc742181ded4930842b46e9507372f0b1b963James Dong
4060c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRUN dSum0,qSum0,#5                         ;// (OMX_U8)armClip(0,255,(Sum+16)>>5)
4070c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRUN dSum1,qSum1,#5
4080c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRUN dSum2,qSum2,#5
4090c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRUN dSum3,qSum3,#5
4100c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRUN dSum4,qSum4,#5
4110c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRUN dSum5,qSum5,#5
4120c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRUN dSum6,qSum6,#5
4130c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRUN dSum7,qSum7,#5
4140c1bc742181ded4930842b46e9507372f0b1b963James Dong
4150c1bc742181ded4930842b46e9507372f0b1b963James DongDCChroma8x8PlaneStore
4160c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     pTmp, pDst, dstStep
4170c1bc742181ded4930842b46e9507372f0b1b963James Dong        ADD     step, dstStep, dstStep
4180c1bc742181ded4930842b46e9507372f0b1b963James Dong
4190c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1    dSum0,[pDst],step                    ;// pDst[0*dstStep+x] :0<= x <= 7
4200c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1    dSum1,[pTmp],step                    ;// pDst[1*dstStep+x] :0<= x <= 7
4210c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1    dSum2,[pDst],step                    ;// pDst[2*dstStep+x] :0<= x <= 7
4220c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1    dSum3,[pTmp],step                    ;// pDst[3*dstStep+x] :0<= x <= 7
4230c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1    dSum4,[pDst],step                    ;// pDst[4*dstStep+x] :0<= x <= 7
4240c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1    dSum5,[pTmp],step                    ;// pDst[5*dstStep+x] :0<= x <= 7
4250c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1    dSum6,[pDst],step                    ;// pDst[6*dstStep+x] :0<= x <= 7
4260c1bc742181ded4930842b46e9507372f0b1b963James Dong        VST1    dSum7,[pTmp]                         ;// pDst[7*dstStep+x] :0<= x <= 7
4270c1bc742181ded4930842b46e9507372f0b1b963James Dong
4280c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV     return, #OMX_Sts_NoErr
4290c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_END
4300c1bc742181ded4930842b46e9507372f0b1b963James Dong
4310c1bc742181ded4930842b46e9507372f0b1b963James Dong        ENDIF ;// CortexA8
4320c1bc742181ded4930842b46e9507372f0b1b963James Dong
4330c1bc742181ded4930842b46e9507372f0b1b963James Dong        END
4340c1bc742181ded4930842b46e9507372f0b1b963James Dong;//-----------------------------------------------------------------------------------------------
4350c1bc742181ded4930842b46e9507372f0b1b963James Dong;// omxVCM4P10_PredictIntraChroma_8x8 ends
4360c1bc742181ded4930842b46e9507372f0b1b963James Dong;//-----------------------------------------------------------------------------------------------
437