summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/on2/h264dec/omxdl/arm_neon/vc/m4p10/src/armVCM4P10_DeblockingChroma_unsafe_s.s
blob: 4c3a77c594f195ccd7b4fd8ea1bbdce767668a9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
;//
;// 
;// File Name:  armVCM4P10_DeblockingChroma_unsafe_s.s
;// OpenMAX DL: v1.0.2
;// Revision:   12290
;// Date:       Wednesday, April 9, 2008
;// 
;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
;// 
;// 
;//

        INCLUDE omxtypes_s.h
        INCLUDE armCOMM_s.h
        
        M_VARIANTS CortexA8


    IF  CortexA8
        
pAlpha      RN 2
pBeta       RN 3

pThresholds RN 5
pBS         RN 4
bS3210      RN 6

;// Pixels
dP_0        DN D4.U8
dP_1        DN D5.U8  
dP_2        DN D6.U8  
dP_3        DN D7.U8  
dQ_0        DN D8.U8  
dQ_1        DN D9.U8  
dQ_2        DN D10.U8 
dQ_3        DN D11.U8 


;// Filtering Decision
dAlpha      DN D0.U8
dBeta       DN D2.U8

dFilt       DN D16.U8
dAqflg      DN D12.U8
dApflg      DN D17.U8 

dAp0q0      DN D13.U8

;// bSLT4
dTC3210     DN D18.U8   
dTCs        DN D31.S8
dTC         DN D31.U8

dMask_0     DN D14.U8
dMask_1     DN D15.U8    
dMask_4     DN D26.U16

dTemp       DN D28.U8
dDummy      DN D17.U8

;// Computing P0,Q0
qDq0p0      QN Q10.S16
qDp1q1      QN Q11.S16
qDelta      QN Q10.S16  ; reuse qDq0p0
dDelta      DN D20.S8


;// Computing P1,Q1
qP_0n       QN Q14.S16
qQ_0n       QN Q12.S16

dQ_0n       DN D24.U8
dP_0n       DN D29.U8

;// bSGE4

dHSp0q1     DN D13.U8
dHSq0p1     DN D31.U8   

dBS3210     DN D28.U16

dP_0t       DN D13.U8   ;dHSp0q1        
dQ_0t       DN D31.U8   ;Temp1        

dP_0n       DN D29.U8
dQ_0n       DN D24.U8   ;Temp2        

;// Register usage for - armVCM4P10_DeblockingLumabSLT4_unsafe
;//
;// Inputs - Pixels             - p0-p3: D4-D7, q0-q3: D8-D11
;//        - Filter masks       - filt: D16, aqflg: D12, apflg: D17
;//        - Additional Params  - pThresholds: r5
;//         
;// Outputs - Pixels            - P0-P1: D29-D30, Q0-Q1: D24-D25
;//         - Additional Params - pThresholds: r5

;// Registers Corrupted         - D18-D31


        M_START armVCM4P10_DeblockingChromabSLT4_unsafe

        
        ;dTC3210 -18
        ;dTemp-28

        VLD1        d18.U32[0], [pThresholds]! ;here

        ;// delta = (((q0-p0)<<2) + (p1-q1) + 4) >> 3;
        ;// dDelta = (qDp1q1 >> 2 + qDq0p0 + 1)>> 1

        ;// qDp1q1-11
        ;// qDq0p0-10
        VSUBL       qDp1q1, dP_1, dQ_1      
        VMOV        dTemp, dTC3210
        VSUBL       qDq0p0, dQ_0, dP_0      
        VSHR        qDp1q1, qDp1q1, #2      
        VZIP.8      dTC3210, dTemp
    
        ;// qDelta-qDq0p0-10

        ;// dTC = dTC01 + (dAplg & 1) + (dAqflg & 1)

        ;// dTC3210-18
        ;// dTemp-28
        ;// dTC-31
        VBIF        dTC3210, dMask_0, dFilt
        VRHADD      qDelta, qDp1q1, qDq0p0  
        VADD        dTC, dTC3210, dMask_1
        VQMOVN      dDelta, qDelta
        ;// dDelta-d20

        ;// dDelta = (OMX_U8)armClip(0, 255, q0 - delta);
        VLD1        {dAlpha[]}, [pAlpha]
        VMIN        dDelta, dDelta, dTCs
        VNEG        dTCs, dTCs
        VLD1        {dBeta[]}, [pBeta]
        ;1
        VMAX        dDelta, dDelta, dTCs

        ;// dP_0n - 29
        ;// dQ_0n - 24

        ;// pQ0[-1*Step] = (OMX_U8)armClip(0, 255, dP_0 - delta);
        ;// pQ0[0*Step] = (OMX_U8)armClip(0, 255, dQ_0 - delta);

        ;// dP_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta);
        ;// dQ_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta);
        
        ;// qP_0n - 14
        ;// qQ_0n - 12
        
        VMOVL       qP_0n, dP_0
        VMOVL       qQ_0n, dQ_0

        ;1
        VADDW       qP_0n, qP_0n, dDelta
        VSUBW       qQ_0n, qQ_0n, dDelta
        
        VQMOVUN     dP_0n, qP_0n
        VQMOVUN     dQ_0n, qQ_0n

        M_END

;// Register usage for - armVCM4P10_DeblockingLumabSGE4_unsafe()
;//
;// Inputs - Pixels             - p0-p3: D4-D7, q0-q3: D8-D11
;//        - Filter masks       - filt: D16, aqflg: D12, apflg: D17
;//        - Additional Params  - alpha: D0, dMask_1: D15
;//         
;// Outputs - Pixels            - P0-P2: D29-D31, Q0-Q2: D24,D25,D28

;// Registers Corrupted         - D18-D31

        M_START armVCM4P10_DeblockingChromabSGE4_unsafe
    
        ;dHSq0p1 - 31
        ;dHSp0q1 - 13
        VHADD       dHSp0q1, dP_0, dQ_1     
        VHADD       dHSq0p1, dQ_0, dP_1         

        ;// Prepare the bS mask

        ;// dHSp0q1-13
        ;// dP_0t-dHSp0q1-13
        ;// dHSq0p1-31
        ;// dQ_0t-Temp1-31
        VLD1        {dAlpha[]}, [pAlpha]
        ADD         pThresholds, pThresholds, #4
        VLD1        {dBeta[]}, [pBeta]

        VRHADD      dP_0t, dHSp0q1, dP_1    
        VRHADD      dQ_0t, dHSq0p1, dQ_1
        
        M_END
        
        ENDIF  

        END