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