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:  armVCM4P10_DeblockingLuma_unsafe_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        INCLUDE omxtypes_s.h
280c1bc742181ded4930842b46e9507372f0b1b963James Dong        INCLUDE armCOMM_s.h
290c1bc742181ded4930842b46e9507372f0b1b963James Dong
300c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_VARIANTS CortexA8
310c1bc742181ded4930842b46e9507372f0b1b963James Dong
320c1bc742181ded4930842b46e9507372f0b1b963James Dong
330c1bc742181ded4930842b46e9507372f0b1b963James Dong    IF  CortexA8
340c1bc742181ded4930842b46e9507372f0b1b963James Dong
350c1bc742181ded4930842b46e9507372f0b1b963James DongpThresholds RN 5
360c1bc742181ded4930842b46e9507372f0b1b963James Dong
370c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Pixels
380c1bc742181ded4930842b46e9507372f0b1b963James DongdP_0        DN D4.U8
390c1bc742181ded4930842b46e9507372f0b1b963James DongdP_1        DN D5.U8
400c1bc742181ded4930842b46e9507372f0b1b963James DongdP_2        DN D6.U8
410c1bc742181ded4930842b46e9507372f0b1b963James DongdP_3        DN D7.U8
420c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_0        DN D8.U8
430c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_1        DN D9.U8
440c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_2        DN D10.U8
450c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_3        DN D11.U8
460c1bc742181ded4930842b46e9507372f0b1b963James Dong
470c1bc742181ded4930842b46e9507372f0b1b963James Dong
480c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Filtering Decision
490c1bc742181ded4930842b46e9507372f0b1b963James DongdAlpha      DN D0.U8
500c1bc742181ded4930842b46e9507372f0b1b963James Dong
510c1bc742181ded4930842b46e9507372f0b1b963James DongdFilt       DN D16.U8
520c1bc742181ded4930842b46e9507372f0b1b963James DongdAqflg      DN D12.U8
530c1bc742181ded4930842b46e9507372f0b1b963James DongdApflg      DN D17.U8
540c1bc742181ded4930842b46e9507372f0b1b963James Dong
550c1bc742181ded4930842b46e9507372f0b1b963James DongdAp0q0      DN D13.U8
560c1bc742181ded4930842b46e9507372f0b1b963James Dong
570c1bc742181ded4930842b46e9507372f0b1b963James Dong;// bSLT4
580c1bc742181ded4930842b46e9507372f0b1b963James DongdTC0        DN D18.U8
590c1bc742181ded4930842b46e9507372f0b1b963James DongdTC1        DN D19.U8
600c1bc742181ded4930842b46e9507372f0b1b963James DongdTC01       DN D18.U8
610c1bc742181ded4930842b46e9507372f0b1b963James Dong
620c1bc742181ded4930842b46e9507372f0b1b963James DongdTCs        DN D31.S8
630c1bc742181ded4930842b46e9507372f0b1b963James DongdTC         DN D31.U8
640c1bc742181ded4930842b46e9507372f0b1b963James Dong
650c1bc742181ded4930842b46e9507372f0b1b963James DongdMask_0     DN D14.U8
660c1bc742181ded4930842b46e9507372f0b1b963James DongdMask_1     DN D15.U8
670c1bc742181ded4930842b46e9507372f0b1b963James Dong
680c1bc742181ded4930842b46e9507372f0b1b963James DongdTemp       DN D19.U8
690c1bc742181ded4930842b46e9507372f0b1b963James Dong
700c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Computing P0,Q0
710c1bc742181ded4930842b46e9507372f0b1b963James DongqDq0p0      QN Q10.S16
720c1bc742181ded4930842b46e9507372f0b1b963James DongqDp1q1      QN Q11.S16
730c1bc742181ded4930842b46e9507372f0b1b963James DongqDelta      QN Q10.S16  ; reuse qDq0p0
740c1bc742181ded4930842b46e9507372f0b1b963James DongdDelta      DN D20.S8
750c1bc742181ded4930842b46e9507372f0b1b963James Dong
760c1bc742181ded4930842b46e9507372f0b1b963James Dong
770c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Computing P1,Q1
780c1bc742181ded4930842b46e9507372f0b1b963James DongdRp0q0      DN D24.U8
790c1bc742181ded4930842b46e9507372f0b1b963James Dong
800c1bc742181ded4930842b46e9507372f0b1b963James DongdMaxP       DN D23.U8
810c1bc742181ded4930842b46e9507372f0b1b963James DongdMinP       DN D22.U8
820c1bc742181ded4930842b46e9507372f0b1b963James Dong
830c1bc742181ded4930842b46e9507372f0b1b963James DongdMaxQ       DN D19.U8
840c1bc742181ded4930842b46e9507372f0b1b963James DongdMinQ       DN D21.U8
850c1bc742181ded4930842b46e9507372f0b1b963James Dong
860c1bc742181ded4930842b46e9507372f0b1b963James DongdDeltaP     DN D26.U8
870c1bc742181ded4930842b46e9507372f0b1b963James DongdDeltaQ     DN D27.U8
880c1bc742181ded4930842b46e9507372f0b1b963James Dong
890c1bc742181ded4930842b46e9507372f0b1b963James DongqP_0n       QN Q14.S16
900c1bc742181ded4930842b46e9507372f0b1b963James DongqQ_0n       QN Q12.S16
910c1bc742181ded4930842b46e9507372f0b1b963James Dong
920c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_0n       DN D24.U8
930c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_1n       DN D25.U8
940c1bc742181ded4930842b46e9507372f0b1b963James DongdP_0n       DN D29.U8
950c1bc742181ded4930842b46e9507372f0b1b963James DongdP_1n       DN D30.U8
960c1bc742181ded4930842b46e9507372f0b1b963James Dong
970c1bc742181ded4930842b46e9507372f0b1b963James Dong;// bSGE4
980c1bc742181ded4930842b46e9507372f0b1b963James Dong
990c1bc742181ded4930842b46e9507372f0b1b963James DongqSp0q0      QN Q10.U16
1000c1bc742181ded4930842b46e9507372f0b1b963James Dong
1010c1bc742181ded4930842b46e9507372f0b1b963James DongqSp2q1      QN Q11.U16
1020c1bc742181ded4930842b46e9507372f0b1b963James DongqSp0q0p1    QN Q12.U16
1030c1bc742181ded4930842b46e9507372f0b1b963James DongqSp3p2      QN Q13.U16
1040c1bc742181ded4930842b46e9507372f0b1b963James DongdHSp0q1     DN D28.U8
1050c1bc742181ded4930842b46e9507372f0b1b963James Dong
1060c1bc742181ded4930842b46e9507372f0b1b963James DongqSq2p1      QN Q11.U16
1070c1bc742181ded4930842b46e9507372f0b1b963James DongqSp0q0q1    QN Q12.U16
1080c1bc742181ded4930842b46e9507372f0b1b963James DongqSq3q2      QN Q13.U16  ;!!
1090c1bc742181ded4930842b46e9507372f0b1b963James DongdHSq0p1     DN D28.U8   ;!!
1100c1bc742181ded4930842b46e9507372f0b1b963James Dong
1110c1bc742181ded4930842b46e9507372f0b1b963James DongqTemp1      QN Q11.U16  ;!!;qSp2q1
1120c1bc742181ded4930842b46e9507372f0b1b963James DongqTemp2      QN Q12.U16  ;!!;qSp0q0p1
1130c1bc742181ded4930842b46e9507372f0b1b963James Dong
1140c1bc742181ded4930842b46e9507372f0b1b963James DongdP_0t       DN D28.U8   ;!!;dHSp0q1
1150c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_0t       DN D22.U8   ;!!;Temp1
1160c1bc742181ded4930842b46e9507372f0b1b963James Dong
1170c1bc742181ded4930842b46e9507372f0b1b963James DongdP_0n       DN D29.U8
1180c1bc742181ded4930842b46e9507372f0b1b963James DongdP_1n       DN D30.U8
1190c1bc742181ded4930842b46e9507372f0b1b963James DongdP_2n       DN D31.U8
1200c1bc742181ded4930842b46e9507372f0b1b963James Dong
1210c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_0n       DN D24.U8   ;!!;Temp2
1220c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_1n       DN D25.U8   ;!!;Temp2
1230c1bc742181ded4930842b46e9507372f0b1b963James DongdQ_2n       DN D28.U8   ;!!;dQ_0t
1240c1bc742181ded4930842b46e9507372f0b1b963James Dong
1250c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Register usage for - armVCM4P10_DeblockingLumabSLT4_unsafe
1260c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
1270c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Inputs - Pixels             - p0-p3: D4-D7, q0-q3: D8-D11
1280c1bc742181ded4930842b46e9507372f0b1b963James Dong;//        - Filter masks       - filt: D16, aqflg: D12, apflg: D17
1290c1bc742181ded4930842b46e9507372f0b1b963James Dong;//        - Additional Params  - pThresholds: r5
1300c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
1310c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Outputs - Pixels            - P0-P1: D29-D30, Q0-Q1: D24-D25
1320c1bc742181ded4930842b46e9507372f0b1b963James Dong;//         - Additional Params - pThresholds: r5
1330c1bc742181ded4930842b46e9507372f0b1b963James Dong
1340c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Registers Corrupted         - D18-D31
1350c1bc742181ded4930842b46e9507372f0b1b963James Dong
1360c1bc742181ded4930842b46e9507372f0b1b963James Dong
1370c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_START armVCM4P10_DeblockingLumabSLT4_unsafe
1380c1bc742181ded4930842b46e9507372f0b1b963James Dong
1390c1bc742181ded4930842b46e9507372f0b1b963James Dong
1400c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qDq0p0-10
1410c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSUBL       qDp1q1, dP_1, dQ_1
1420c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1        {dTC0[]}, [pThresholds]!
1430c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qDp1q1-11
1440c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSUBL       qDq0p0, dQ_0, dP_0
1450c1bc742181ded4930842b46e9507372f0b1b963James Dong        VLD1        {dTC1[]}, [pThresholds]!
1460c1bc742181ded4930842b46e9507372f0b1b963James Dong
1470c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dRp0q0-24
1480c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHR        qDp1q1, qDp1q1, #2
1490c1bc742181ded4930842b46e9507372f0b1b963James Dong
1500c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dTC01 = (dTC1 << 4) | dTC0
1510c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dTC01-18
1520c1bc742181ded4930842b46e9507372f0b1b963James Dong        VEXT        dTC01, dTC0, dTC1, #4
1530c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dTemp-19
1540c1bc742181ded4930842b46e9507372f0b1b963James Dong        VAND        dTemp, dApflg, dMask_1
1550c1bc742181ded4930842b46e9507372f0b1b963James Dong
1560c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dTC01, dMask_0, dFilt
1570c1bc742181ded4930842b46e9507372f0b1b963James Dong
1580c1bc742181ded4930842b46e9507372f0b1b963James Dong
1590c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// delta = (((q0-p0)<<2) + (p1-q1) + 4) >> 3;
1600c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dDelta = (qDp1q1 >> 2 + qDq0p0 + 1)>> 1
1610c1bc742181ded4930842b46e9507372f0b1b963James Dong
1620c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qDelta-qDq0p0-10
1630c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRHADD      qDelta, qDp1q1, qDq0p0
1640c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRHADD      dRp0q0, dP_0, dQ_0
1650c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD        dTC, dTC01, dTemp
1660c1bc742181ded4930842b46e9507372f0b1b963James Dong
1670c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dTC = dTC01 + (dAplg & 1) + (dAqflg & 1)
1680c1bc742181ded4930842b46e9507372f0b1b963James Dong
1690c1bc742181ded4930842b46e9507372f0b1b963James Dong        VAND        dTemp, dAqflg, dMask_1
1700c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQADD       dMaxP, dP_1, dTC01
1710c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQMOVN      dDelta, qDelta
1720c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD        dTC, dTC, dTemp
1730c1bc742181ded4930842b46e9507372f0b1b963James Dong
1740c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dMaxP = QADD(dP_1, dTC01)
1750c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dMinP = QSUB(dP_1, dTC01)
1760c1bc742181ded4930842b46e9507372f0b1b963James Dong
1770c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dMaxP-d23
1780c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dMinP-d22
1790c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQSUB       dMinP, dP_1, dTC01
1800c1bc742181ded4930842b46e9507372f0b1b963James Dong
1810c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dDelta-d20
1820c1bc742181ded4930842b46e9507372f0b1b963James Dong
1830c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dMaxQ = QADD(dQ_1, dTC01)
1840c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dMinQ = QSUB(dQ_1, dTC01)
1850c1bc742181ded4930842b46e9507372f0b1b963James Dong
1860c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dMaxQ-19
1870c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dMinQ-21
1880c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQADD       dMaxQ, dQ_1, dTC01
1890c1bc742181ded4930842b46e9507372f0b1b963James Dong        VHADD       dDeltaP, dRp0q0, dP_2
1900c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMIN        dDelta, dDelta, dTCs
1910c1bc742181ded4930842b46e9507372f0b1b963James Dong
1920c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dDelta = (OMX_U8)armClip(0, 255, q0 - delta);
1930c1bc742181ded4930842b46e9507372f0b1b963James Dong        VNEG        dTCs, dTCs
1940c1bc742181ded4930842b46e9507372f0b1b963James Dong
1950c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQSUB       dMinQ, dQ_1, dTC01
1960c1bc742181ded4930842b46e9507372f0b1b963James Dong
1970c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// delta = (p2 + ((p0+q0+1)>>1) - (p1<<1))>>1;
1980c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// delta = armClip(-tC0, tC0, delta);
1990c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[-2*Step] = (OMX_U8)(p1 + delta);
2000c1bc742181ded4930842b46e9507372f0b1b963James Dong
2010c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dDeltaP = (dP_2 + dRp0q0)>>1;
2020c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_1n = armClip(dP_1 - dTC01, dP_1 + dTC01, dDeltaP);
2030c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_1n = armClip(MinP, MaxP, dDeltaP);
2040c1bc742181ded4930842b46e9507372f0b1b963James Dong
2050c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// delta = (q2 + ((p0+q0+1)>>1) - (q1<<1))>>1;
2060c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// delta = armClip(-tC0, tC0, delta);
2070c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[1*Step] = (OMX_U8)(q1 + delta);
2080c1bc742181ded4930842b46e9507372f0b1b963James Dong
2090c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dDeltaQ = (dQ_2 + dRp0q0)>>1;
2100c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_1n = armClip(dQ_1 - dTC01, dQ_1 + dTC01, dDeltaQ);
2110c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_1n = armClip(MinQ, MaxQ, dDeltaQ);
2120c1bc742181ded4930842b46e9507372f0b1b963James Dong
2130c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dDeltaP-26
2140c1bc742181ded4930842b46e9507372f0b1b963James Dong        VHADD       dDeltaQ, dRp0q0, dQ_2
2150c1bc742181ded4930842b46e9507372f0b1b963James Dong
2160c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dDeltaQ-27
2170c1bc742181ded4930842b46e9507372f0b1b963James Dong
2180c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_0n - 29
2190c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_1n - 30
2200c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_0n - 24
2210c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_1n - 25
2220c1bc742181ded4930842b46e9507372f0b1b963James Dong
2230c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// delta = (q2 + ((p0+q0+1)>>1) - (q1<<1))>>1;
2240c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dDeltaQ = (dQ_2 + dRp0q0)>>1;
2250c1bc742181ded4930842b46e9507372f0b1b963James Dong
2260c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMAX        dP_1n, dDeltaP, dMinP
2270c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMAX        dDelta, dDelta, dTCs
2280c1bc742181ded4930842b46e9507372f0b1b963James Dong
2290c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[-1*Step] = (OMX_U8)armClip(0, 255, dP_0 - delta);
2300c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[0*Step] = (OMX_U8)armClip(0, 255, dQ_0 - delta);
2310c1bc742181ded4930842b46e9507372f0b1b963James Dong
2320c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta);
2330c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta);
2340c1bc742181ded4930842b46e9507372f0b1b963James Dong
2350c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qP_0n - 14
2360c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qQ_0n - 12
2370c1bc742181ded4930842b46e9507372f0b1b963James Dong
2380c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMOVL       qP_0n, dP_0
2390c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMOVL       qQ_0n, dQ_0
2400c1bc742181ded4930842b46e9507372f0b1b963James Dong
2410c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDW       qP_0n, qP_0n, dDelta
2420c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSUBW       qQ_0n, qQ_0n, dDelta
2430c1bc742181ded4930842b46e9507372f0b1b963James Dong
2440c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQMOVUN     dP_0n, qP_0n
2450c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQMOVUN     dQ_0n, qQ_0n
2460c1bc742181ded4930842b46e9507372f0b1b963James Dong
2470c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMAX        dQ_1n, dDeltaQ, dMinQ
2480c1bc742181ded4930842b46e9507372f0b1b963James Dong
2490c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMIN        dP_1n, dP_1n, dMaxP
2500c1bc742181ded4930842b46e9507372f0b1b963James Dong        VMIN        dQ_1n, dQ_1n, dMaxQ
2510c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dP_0n, dP_0, dFilt
2520c1bc742181ded4930842b46e9507372f0b1b963James Dong
2530c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dP_1n, dP_1, dApflg
2540c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dQ_0n, dQ_0, dFilt
2550c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dQ_1n, dQ_1, dAqflg
2560c1bc742181ded4930842b46e9507372f0b1b963James Dong
2570c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_END
2580c1bc742181ded4930842b46e9507372f0b1b963James Dong
2590c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Register usage for - armVCM4P10_DeblockingLumabSGE4_unsafe()
2600c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
2610c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Inputs - Pixels             - p0-p3: D4-D7, q0-q3: D8-D11
2620c1bc742181ded4930842b46e9507372f0b1b963James Dong;//        - Filter masks       - filt: D16, aqflg: D12, apflg: D17
2630c1bc742181ded4930842b46e9507372f0b1b963James Dong;//        - Additional Params  - alpha: D0, dMask_1: D15
2640c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
2650c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Outputs - Pixels            - P0-P2: D29-D31, Q0-Q2: D24,D25,D28
2660c1bc742181ded4930842b46e9507372f0b1b963James Dong
2670c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Registers Corrupted         - D18-D31
2680c1bc742181ded4930842b46e9507372f0b1b963James Dong
2690c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_START armVCM4P10_DeblockingLumabSGE4_unsafe
2700c1bc742181ded4930842b46e9507372f0b1b963James Dong
2710c1bc742181ded4930842b46e9507372f0b1b963James Dong
2720c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// ap<beta && armAbs(p0-q0)<((alpha>>2)+2)
2730c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// aq<beta && armAbs(p0-q0)<((alpha>>2)+2)
2740c1bc742181ded4930842b46e9507372f0b1b963James Dong
2750c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// ( dApflg & dAp0q0 < (dAlpha >> 2 + 2) )
2760c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// ( dAqflg & dAp0q0 < (dAlpha >> 2 + 2) )
2770c1bc742181ded4930842b46e9507372f0b1b963James Dong
2780c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// ( dApflg = dApflg & dAp0q0 < (dTemp + dMask_1 + dMask_1) )
2790c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// ( dAqflg = dAqflg & dAp0q0 < (dTemp + dMask_1 + dMask_1) )
2800c1bc742181ded4930842b46e9507372f0b1b963James Dong
2810c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// P Filter
2820c1bc742181ded4930842b46e9507372f0b1b963James Dong
2830c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHR        dTemp, dAlpha, #2
2840c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD        dTemp, dTemp, dMask_1
2850c1bc742181ded4930842b46e9507372f0b1b963James Dong
2860c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qSp0q0-10
2870c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDL       qSp0q0, dQ_0, dP_0
2880c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADD        dTemp, dTemp, dMask_1
2890c1bc742181ded4930842b46e9507372f0b1b963James Dong
2900c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qSp2q1-11
2910c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qSp0q0p1-12
2920c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDL       qSp2q1, dP_2, dQ_1
2930c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDW       qSp0q0p1, qSp0q0, dP_1
2940c1bc742181ded4930842b46e9507372f0b1b963James Dong
2950c1bc742181ded4930842b46e9507372f0b1b963James Dong        VCGT        dTemp, dTemp, dAp0q0
2960c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHR        qSp2q1, #1
2970c1bc742181ded4930842b46e9507372f0b1b963James Dong
2980c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[-1*Step] = (OMX_U8)((p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4)>>3);
2990c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[-1*Step] = ( ( (p0 + q0 + p1) + (p2 + q1)>>1 ) >> 1 + 1 ) >> 1
3000c1bc742181ded4930842b46e9507372f0b1b963James Dong
3010c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_0n = ( ( (qSp0q0 + dP_1) + qSp2q1>>1 ) >> 1 + 1 ) >> 1
3020c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_0n = ( ( qSp0q0p1 + qSp2q1>>1 ) >> 1 + 1 ) >> 1
3030c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_0n = ( qTemp1 + 1 ) >> 1
3040c1bc742181ded4930842b46e9507372f0b1b963James Dong
3050c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[-2*Step] = (OMX_U8)((p2 + p1 + p0 + q0 + 2)>>2);
3060c1bc742181ded4930842b46e9507372f0b1b963James Dong
3070c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_1n = (OMX_U8)((dP_2 + qSp0q0p1 + 2)>>2);
3080c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_1n = (OMX_U8)((qTemp2 + 2)>>2);
3090c1bc742181ded4930842b46e9507372f0b1b963James Dong
3100c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[-3*Step] = (OMX_U8)((2*p3 + 3*p2 + p1 + p0 + q0 + 4)>>3);
3110c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[-3*Step] = (OMX_U8)(( (p3 + p2) + (p1 + p0 + q0 + p2) >> 1 + 2)>>2);
3120c1bc742181ded4930842b46e9507372f0b1b963James Dong
3130c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_2n = (OMX_U8)(( qSp3p2 + (dP_2 + qSp0q0p1) >> 1 + 2) >> 2);
3140c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_2n = (OMX_U8)(( qSp3p2 + qTemp2 >> 1 + 2) >> 2);
3150c1bc742181ded4930842b46e9507372f0b1b963James Dong
3160c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qTemp1-qSp2q1-11
3170c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qTemp2-qSp0q0p1-12
3180c1bc742181ded4930842b46e9507372f0b1b963James Dong        VHADD       qTemp1, qSp0q0p1, qSp2q1
3190c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDW       qTemp2, qSp0q0p1, dP_2
3200c1bc742181ded4930842b46e9507372f0b1b963James Dong
3210c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qSp3p2-13
3220c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDL       qSp3p2, dP_3, dP_2
3230c1bc742181ded4930842b46e9507372f0b1b963James Dong
3240c1bc742181ded4930842b46e9507372f0b1b963James Dong        VAND        dApflg, dApflg, dTemp
3250c1bc742181ded4930842b46e9507372f0b1b963James Dong        VHADD       dHSp0q1, dP_0, dQ_1
3260c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSRA        qSp3p2, qTemp2, #1
3270c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dHSp0q1-28
3280c1bc742181ded4930842b46e9507372f0b1b963James Dong        VAND        dAqflg, dAqflg, dTemp
3290c1bc742181ded4930842b46e9507372f0b1b963James Dong
3300c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_0n-29
3310c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_0t-dHSp0q1-28
3320c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRN     dP_0n, qTemp1, #1
3330c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRHADD      dP_0t, dHSp0q1, dP_1
3340c1bc742181ded4930842b46e9507372f0b1b963James Dong
3350c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_1n-30
3360c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRN     dP_1n, qTemp2, #2
3370c1bc742181ded4930842b46e9507372f0b1b963James Dong
3380c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDL       qSq2p1, dQ_2, dP_1
3390c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDW       qSp0q0q1, qSp0q0, dQ_1
3400c1bc742181ded4930842b46e9507372f0b1b963James Dong
3410c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dP_0n, dP_0t, dApflg
3420c1bc742181ded4930842b46e9507372f0b1b963James Dong
3430c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Q Filter
3440c1bc742181ded4930842b46e9507372f0b1b963James Dong
3450c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[0*Step] = (OMX_U8)((q2 + 2*q1 + 2*q0 + 2*p0 + p1 + 4)>>3);
3460c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[0*Step] = ( ( (p0 + q0 + q1) + (q2 + p1)>>1 ) >> 1 + 1 ) >> 1
3470c1bc742181ded4930842b46e9507372f0b1b963James Dong
3480c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_0n = ( ( (qSp0q0 + dQ_1) + qSq2p1>>1 ) >> 1 + 1 ) >> 1
3490c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_0n = ( ( qSp0q0q1 + qSq2p1>>1 ) >> 1 + 1 ) >> 1
3500c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_0n = ( qTemp1 + 1 ) >> 1
3510c1bc742181ded4930842b46e9507372f0b1b963James Dong
3520c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[1*Step] = (OMX_U8)((q2 + q1 + q0 + q0 + 2)>>2);
3530c1bc742181ded4930842b46e9507372f0b1b963James Dong
3540c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_1n = (OMX_U8)((dQ_2 + qSp0q0q1 + 2)>>2);
3550c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_1n = (OMX_U8)((qTemp2 + 2)>>2);
3560c1bc742181ded4930842b46e9507372f0b1b963James Dong
3570c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[2*Step] = (OMX_U8)((2*q3 + 3*q2 + q1 + q0 + p0 + 4)>>3);
3580c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pQ0[2*Step] = (OMX_U8)(( (q3 + q2) + (q1 + p0 + q0 + q2) >> 1 + 2)>>2);
3590c1bc742181ded4930842b46e9507372f0b1b963James Dong
3600c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_2n = (OMX_U8)(( qSq3q2 + (dQ_2 + qSp0q0q1) >> 1 + 2) >> 2);
3610c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_2n = (OMX_U8)(( qSq3q2 + qTemp2 >> 1 + 2) >> 2);
3620c1bc742181ded4930842b46e9507372f0b1b963James Dong
3630c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qTemp1-qSp2q1-11
3640c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qTemp2-qSp0q0p1-12
3650c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qSq2p1-11
3660c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qSp0q0q1-12
3670c1bc742181ded4930842b46e9507372f0b1b963James Dong
3680c1bc742181ded4930842b46e9507372f0b1b963James Dong
3690c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qTemp2-qSp0q0p1-12
3700c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qTemp1-qSq2p1-11
3710c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// qSq3q2-13
3720c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dP_2n-31
3730c1bc742181ded4930842b46e9507372f0b1b963James Dong
3740c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRN     dP_2n, qSp3p2, #2
3750c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDL       qSq3q2, dQ_3, dQ_2
3760c1bc742181ded4930842b46e9507372f0b1b963James Dong
3770c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSHR        qSq2p1, #1
3780c1bc742181ded4930842b46e9507372f0b1b963James Dong
3790c1bc742181ded4930842b46e9507372f0b1b963James Dong        VHADD       qTemp1, qSp0q0q1, qSq2p1
3800c1bc742181ded4930842b46e9507372f0b1b963James Dong        VADDW       qTemp2, qSp0q0q1, dQ_2
3810c1bc742181ded4930842b46e9507372f0b1b963James Dong
3820c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dHSq0p1-28
3830c1bc742181ded4930842b46e9507372f0b1b963James Dong        VHADD       dHSq0p1, dQ_0, dP_1
3840c1bc742181ded4930842b46e9507372f0b1b963James Dong
3850c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dP_0n, dP_0, dFilt
3860c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dP_1n, dP_1, dApflg
3870c1bc742181ded4930842b46e9507372f0b1b963James Dong
3880c1bc742181ded4930842b46e9507372f0b1b963James Dong        VSRA        qSq3q2, qTemp2, #1
3890c1bc742181ded4930842b46e9507372f0b1b963James Dong
3900c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_1-Temp2-25
3910c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_0-Temp2-24
3920c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRN     dQ_1n, qTemp2, #2
3930c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRN     dQ_0n, qTemp1, #1
3940c1bc742181ded4930842b46e9507372f0b1b963James Dong
3950c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// dQ_0t-Temp1-22
3960c1bc742181ded4930842b46e9507372f0b1b963James Dong        VRHADD      dQ_0t, dHSq0p1, dQ_1
3970c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dQ_1n, dQ_1, dAqflg
3980c1bc742181ded4930842b46e9507372f0b1b963James Dong
3990c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dP_2n, dP_2, dApflg
4000c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dQ_0n, dQ_0t, dAqflg
4010c1bc742181ded4930842b46e9507372f0b1b963James Dong        VQRSHRN     dQ_2n, qSq3q2, #2
4020c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dQ_0n, dQ_0, dFilt
4030c1bc742181ded4930842b46e9507372f0b1b963James Dong        VBIF        dQ_2n, dQ_2, dAqflg
4040c1bc742181ded4930842b46e9507372f0b1b963James Dong
4050c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_END
4060c1bc742181ded4930842b46e9507372f0b1b963James Dong
4070c1bc742181ded4930842b46e9507372f0b1b963James Dong    ENDIF
4080c1bc742181ded4930842b46e9507372f0b1b963James Dong
4090c1bc742181ded4930842b46e9507372f0b1b963James Dong
4100c1bc742181ded4930842b46e9507372f0b1b963James Dong        END
411