armVCM4P10_DeblockingChroma_unsafe_s.s revision 0c1bc742181ded4930842b46e9507372f0b1b963
1;//
2;//
3;// File Name:  armVCM4P10_DeblockingChroma_unsafe_s.s
4;// OpenMAX DL: v1.0.2
5;// Revision:   12290
6;// Date:       Wednesday, April 9, 2008
7;//
8;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
9;//
10;//
11;//
12
13        INCLUDE omxtypes_s.h
14        INCLUDE armCOMM_s.h
15
16        M_VARIANTS CortexA8
17
18
19    IF  CortexA8
20
21pAlpha      RN 2
22pBeta       RN 3
23
24pThresholds RN 5
25pBS         RN 4
26bS3210      RN 6
27
28;// Pixels
29dP_0        DN D4.U8
30dP_1        DN D5.U8
31dP_2        DN D6.U8
32dP_3        DN D7.U8
33dQ_0        DN D8.U8
34dQ_1        DN D9.U8
35dQ_2        DN D10.U8
36dQ_3        DN D11.U8
37
38
39;// Filtering Decision
40dAlpha      DN D0.U8
41dBeta       DN D2.U8
42
43dFilt       DN D16.U8
44dAqflg      DN D12.U8
45dApflg      DN D17.U8
46
47dAp0q0      DN D13.U8
48
49;// bSLT4
50dTC3210     DN D18.U8
51dTCs        DN D31.S8
52dTC         DN D31.U8
53
54dMask_0     DN D14.U8
55dMask_1     DN D15.U8
56dMask_4     DN D26.U16
57
58dTemp       DN D28.U8
59dDummy      DN D17.U8
60
61;// Computing P0,Q0
62qDq0p0      QN Q10.S16
63qDp1q1      QN Q11.S16
64qDelta      QN Q10.S16  ; reuse qDq0p0
65dDelta      DN D20.S8
66
67
68;// Computing P1,Q1
69qP_0n       QN Q14.S16
70qQ_0n       QN Q12.S16
71
72dQ_0n       DN D24.U8
73dP_0n       DN D29.U8
74
75;// bSGE4
76
77dHSp0q1     DN D13.U8
78dHSq0p1     DN D31.U8
79
80dBS3210     DN D28.U16
81
82dP_0t       DN D13.U8   ;dHSp0q1
83dQ_0t       DN D31.U8   ;Temp1
84
85dP_0n       DN D29.U8
86dQ_0n       DN D24.U8   ;Temp2
87
88;// Register usage for - armVCM4P10_DeblockingLumabSLT4_unsafe
89;//
90;// Inputs - Pixels             - p0-p3: D4-D7, q0-q3: D8-D11
91;//        - Filter masks       - filt: D16, aqflg: D12, apflg: D17
92;//        - Additional Params  - pThresholds: r5
93;//
94;// Outputs - Pixels            - P0-P1: D29-D30, Q0-Q1: D24-D25
95;//         - Additional Params - pThresholds: r5
96
97;// Registers Corrupted         - D18-D31
98
99
100        M_START armVCM4P10_DeblockingChromabSLT4_unsafe
101
102
103        ;dTC3210 -18
104        ;dTemp-28
105
106        VLD1        d18.U32[0], [pThresholds]! ;here
107
108        ;// delta = (((q0-p0)<<2) + (p1-q1) + 4) >> 3;
109        ;// dDelta = (qDp1q1 >> 2 + qDq0p0 + 1)>> 1
110
111        ;// qDp1q1-11
112        ;// qDq0p0-10
113        VSUBL       qDp1q1, dP_1, dQ_1
114        VMOV        dTemp, dTC3210
115        VSUBL       qDq0p0, dQ_0, dP_0
116        VSHR        qDp1q1, qDp1q1, #2
117        VZIP.8      dTC3210, dTemp
118
119        ;// qDelta-qDq0p0-10
120
121        ;// dTC = dTC01 + (dAplg & 1) + (dAqflg & 1)
122
123        ;// dTC3210-18
124        ;// dTemp-28
125        ;// dTC-31
126        VBIF        dTC3210, dMask_0, dFilt
127        VRHADD      qDelta, qDp1q1, qDq0p0
128        VADD        dTC, dTC3210, dMask_1
129        VQMOVN      dDelta, qDelta
130        ;// dDelta-d20
131
132        ;// dDelta = (OMX_U8)armClip(0, 255, q0 - delta);
133        VLD1        {dAlpha[]}, [pAlpha]
134        VMIN        dDelta, dDelta, dTCs
135        VNEG        dTCs, dTCs
136        VLD1        {dBeta[]}, [pBeta]
137        ;1
138        VMAX        dDelta, dDelta, dTCs
139
140        ;// dP_0n - 29
141        ;// dQ_0n - 24
142
143        ;// pQ0[-1*Step] = (OMX_U8)armClip(0, 255, dP_0 - delta);
144        ;// pQ0[0*Step] = (OMX_U8)armClip(0, 255, dQ_0 - delta);
145
146        ;// dP_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta);
147        ;// dQ_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta);
148
149        ;// qP_0n - 14
150        ;// qQ_0n - 12
151
152        VMOVL       qP_0n, dP_0
153        VMOVL       qQ_0n, dQ_0
154
155        ;1
156        VADDW       qP_0n, qP_0n, dDelta
157        VSUBW       qQ_0n, qQ_0n, dDelta
158
159        VQMOVUN     dP_0n, qP_0n
160        VQMOVUN     dQ_0n, qQ_0n
161
162        M_END
163
164;// Register usage for - armVCM4P10_DeblockingLumabSGE4_unsafe()
165;//
166;// Inputs - Pixels             - p0-p3: D4-D7, q0-q3: D8-D11
167;//        - Filter masks       - filt: D16, aqflg: D12, apflg: D17
168;//        - Additional Params  - alpha: D0, dMask_1: D15
169;//
170;// Outputs - Pixels            - P0-P2: D29-D31, Q0-Q2: D24,D25,D28
171
172;// Registers Corrupted         - D18-D31
173
174        M_START armVCM4P10_DeblockingChromabSGE4_unsafe
175
176        ;dHSq0p1 - 31
177        ;dHSp0q1 - 13
178        VHADD       dHSp0q1, dP_0, dQ_1
179        VHADD       dHSq0p1, dQ_0, dP_1
180
181        ;// Prepare the bS mask
182
183        ;// dHSp0q1-13
184        ;// dP_0t-dHSp0q1-13
185        ;// dHSq0p1-31
186        ;// dQ_0t-Temp1-31
187        VLD1        {dAlpha[]}, [pAlpha]
188        ADD         pThresholds, pThresholds, #4
189        VLD1        {dBeta[]}, [pBeta]
190
191        VRHADD      dP_0t, dHSp0q1, dP_1
192        VRHADD      dQ_0t, dHSq0p1, dQ_1
193
194        M_END
195
196        ENDIF
197
198        END
199