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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
|
;//
;//
;// File Name: armVCM4P10_DeblockingLuma_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
pThresholds RN 5
;// 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
dFilt DN D16.U8
dAqflg DN D12.U8
dApflg DN D17.U8
dAp0q0 DN D13.U8
;// bSLT4
dTC0 DN D18.U8
dTC1 DN D19.U8
dTC01 DN D18.U8
dTCs DN D31.S8
dTC DN D31.U8
dMask_0 DN D14.U8
dMask_1 DN D15.U8
dTemp DN D19.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
dRp0q0 DN D24.U8
dMaxP DN D23.U8
dMinP DN D22.U8
dMaxQ DN D19.U8
dMinQ DN D21.U8
dDeltaP DN D26.U8
dDeltaQ DN D27.U8
qP_0n QN Q14.S16
qQ_0n QN Q12.S16
dQ_0n DN D24.U8
dQ_1n DN D25.U8
dP_0n DN D29.U8
dP_1n DN D30.U8
;// bSGE4
qSp0q0 QN Q10.U16
qSp2q1 QN Q11.U16
qSp0q0p1 QN Q12.U16
qSp3p2 QN Q13.U16
dHSp0q1 DN D28.U8
qSq2p1 QN Q11.U16
qSp0q0q1 QN Q12.U16
qSq3q2 QN Q13.U16 ;!!
dHSq0p1 DN D28.U8 ;!!
qTemp1 QN Q11.U16 ;!!;qSp2q1
qTemp2 QN Q12.U16 ;!!;qSp0q0p1
dP_0t DN D28.U8 ;!!;dHSp0q1
dQ_0t DN D22.U8 ;!!;Temp1
dP_0n DN D29.U8
dP_1n DN D30.U8
dP_2n DN D31.U8
dQ_0n DN D24.U8 ;!!;Temp2
dQ_1n DN D25.U8 ;!!;Temp2
dQ_2n DN D28.U8 ;!!;dQ_0t
;// 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_DeblockingLumabSLT4_unsafe
;// qDq0p0-10
VSUBL qDp1q1, dP_1, dQ_1
VLD1 {dTC0[]}, [pThresholds]!
;// qDp1q1-11
VSUBL qDq0p0, dQ_0, dP_0
VLD1 {dTC1[]}, [pThresholds]!
;// dRp0q0-24
VSHR qDp1q1, qDp1q1, #2
;// dTC01 = (dTC1 << 4) | dTC0
;// dTC01-18
VEXT dTC01, dTC0, dTC1, #4
;// dTemp-19
VAND dTemp, dApflg, dMask_1
VBIF dTC01, dMask_0, dFilt
;// delta = (((q0-p0)<<2) + (p1-q1) + 4) >> 3;
;// dDelta = (qDp1q1 >> 2 + qDq0p0 + 1)>> 1
;// qDelta-qDq0p0-10
VRHADD qDelta, qDp1q1, qDq0p0
VRHADD dRp0q0, dP_0, dQ_0
VADD dTC, dTC01, dTemp
;// dTC = dTC01 + (dAplg & 1) + (dAqflg & 1)
VAND dTemp, dAqflg, dMask_1
VQADD dMaxP, dP_1, dTC01
VQMOVN dDelta, qDelta
VADD dTC, dTC, dTemp
;// dMaxP = QADD(dP_1, dTC01)
;// dMinP = QSUB(dP_1, dTC01)
;// dMaxP-d23
;// dMinP-d22
VQSUB dMinP, dP_1, dTC01
;// dDelta-d20
;// dMaxQ = QADD(dQ_1, dTC01)
;// dMinQ = QSUB(dQ_1, dTC01)
;// dMaxQ-19
;// dMinQ-21
VQADD dMaxQ, dQ_1, dTC01
VHADD dDeltaP, dRp0q0, dP_2
VMIN dDelta, dDelta, dTCs
;// dDelta = (OMX_U8)armClip(0, 255, q0 - delta);
VNEG dTCs, dTCs
VQSUB dMinQ, dQ_1, dTC01
;// delta = (p2 + ((p0+q0+1)>>1) - (p1<<1))>>1;
;// delta = armClip(-tC0, tC0, delta);
;// pQ0[-2*Step] = (OMX_U8)(p1 + delta);
;// dDeltaP = (dP_2 + dRp0q0)>>1;
;// dP_1n = armClip(dP_1 - dTC01, dP_1 + dTC01, dDeltaP);
;// dP_1n = armClip(MinP, MaxP, dDeltaP);
;// delta = (q2 + ((p0+q0+1)>>1) - (q1<<1))>>1;
;// delta = armClip(-tC0, tC0, delta);
;// pQ0[1*Step] = (OMX_U8)(q1 + delta);
;// dDeltaQ = (dQ_2 + dRp0q0)>>1;
;// dQ_1n = armClip(dQ_1 - dTC01, dQ_1 + dTC01, dDeltaQ);
;// dQ_1n = armClip(MinQ, MaxQ, dDeltaQ);
;// dDeltaP-26
VHADD dDeltaQ, dRp0q0, dQ_2
;// dDeltaQ-27
;// dP_0n - 29
;// dP_1n - 30
;// dQ_0n - 24
;// dQ_1n - 25
;// delta = (q2 + ((p0+q0+1)>>1) - (q1<<1))>>1;
;// dDeltaQ = (dQ_2 + dRp0q0)>>1;
VMAX dP_1n, dDeltaP, dMinP
VMAX dDelta, dDelta, dTCs
;// 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
VADDW qP_0n, qP_0n, dDelta
VSUBW qQ_0n, qQ_0n, dDelta
VQMOVUN dP_0n, qP_0n
VQMOVUN dQ_0n, qQ_0n
VMAX dQ_1n, dDeltaQ, dMinQ
VMIN dP_1n, dP_1n, dMaxP
VMIN dQ_1n, dQ_1n, dMaxQ
VBIF dP_0n, dP_0, dFilt
VBIF dP_1n, dP_1, dApflg
VBIF dQ_0n, dQ_0, dFilt
VBIF dQ_1n, dQ_1, dAqflg
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_DeblockingLumabSGE4_unsafe
;// ap<beta && armAbs(p0-q0)<((alpha>>2)+2)
;// aq<beta && armAbs(p0-q0)<((alpha>>2)+2)
;// ( dApflg & dAp0q0 < (dAlpha >> 2 + 2) )
;// ( dAqflg & dAp0q0 < (dAlpha >> 2 + 2) )
;// ( dApflg = dApflg & dAp0q0 < (dTemp + dMask_1 + dMask_1) )
;// ( dAqflg = dAqflg & dAp0q0 < (dTemp + dMask_1 + dMask_1) )
;// P Filter
VSHR dTemp, dAlpha, #2
VADD dTemp, dTemp, dMask_1
;// qSp0q0-10
VADDL qSp0q0, dQ_0, dP_0
VADD dTemp, dTemp, dMask_1
;// qSp2q1-11
;// qSp0q0p1-12
VADDL qSp2q1, dP_2, dQ_1
VADDW qSp0q0p1, qSp0q0, dP_1
VCGT dTemp, dTemp, dAp0q0
VSHR qSp2q1, #1
;// pQ0[-1*Step] = (OMX_U8)((p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4)>>3);
;// pQ0[-1*Step] = ( ( (p0 + q0 + p1) + (p2 + q1)>>1 ) >> 1 + 1 ) >> 1
;// dP_0n = ( ( (qSp0q0 + dP_1) + qSp2q1>>1 ) >> 1 + 1 ) >> 1
;// dP_0n = ( ( qSp0q0p1 + qSp2q1>>1 ) >> 1 + 1 ) >> 1
;// dP_0n = ( qTemp1 + 1 ) >> 1
;// pQ0[-2*Step] = (OMX_U8)((p2 + p1 + p0 + q0 + 2)>>2);
;// dP_1n = (OMX_U8)((dP_2 + qSp0q0p1 + 2)>>2);
;// dP_1n = (OMX_U8)((qTemp2 + 2)>>2);
;// pQ0[-3*Step] = (OMX_U8)((2*p3 + 3*p2 + p1 + p0 + q0 + 4)>>3);
;// pQ0[-3*Step] = (OMX_U8)(( (p3 + p2) + (p1 + p0 + q0 + p2) >> 1 + 2)>>2);
;// dP_2n = (OMX_U8)(( qSp3p2 + (dP_2 + qSp0q0p1) >> 1 + 2) >> 2);
;// dP_2n = (OMX_U8)(( qSp3p2 + qTemp2 >> 1 + 2) >> 2);
;// qTemp1-qSp2q1-11
;// qTemp2-qSp0q0p1-12
VHADD qTemp1, qSp0q0p1, qSp2q1
VADDW qTemp2, qSp0q0p1, dP_2
;// qSp3p2-13
VADDL qSp3p2, dP_3, dP_2
VAND dApflg, dApflg, dTemp
VHADD dHSp0q1, dP_0, dQ_1
VSRA qSp3p2, qTemp2, #1
;// dHSp0q1-28
VAND dAqflg, dAqflg, dTemp
;// dP_0n-29
;// dP_0t-dHSp0q1-28
VQRSHRN dP_0n, qTemp1, #1
VRHADD dP_0t, dHSp0q1, dP_1
;// dP_1n-30
VQRSHRN dP_1n, qTemp2, #2
VADDL qSq2p1, dQ_2, dP_1
VADDW qSp0q0q1, qSp0q0, dQ_1
VBIF dP_0n, dP_0t, dApflg
;// Q Filter
;// pQ0[0*Step] = (OMX_U8)((q2 + 2*q1 + 2*q0 + 2*p0 + p1 + 4)>>3);
;// pQ0[0*Step] = ( ( (p0 + q0 + q1) + (q2 + p1)>>1 ) >> 1 + 1 ) >> 1
;// dQ_0n = ( ( (qSp0q0 + dQ_1) + qSq2p1>>1 ) >> 1 + 1 ) >> 1
;// dQ_0n = ( ( qSp0q0q1 + qSq2p1>>1 ) >> 1 + 1 ) >> 1
;// dQ_0n = ( qTemp1 + 1 ) >> 1
;// pQ0[1*Step] = (OMX_U8)((q2 + q1 + q0 + q0 + 2)>>2);
;// dQ_1n = (OMX_U8)((dQ_2 + qSp0q0q1 + 2)>>2);
;// dQ_1n = (OMX_U8)((qTemp2 + 2)>>2);
;// pQ0[2*Step] = (OMX_U8)((2*q3 + 3*q2 + q1 + q0 + p0 + 4)>>3);
;// pQ0[2*Step] = (OMX_U8)(( (q3 + q2) + (q1 + p0 + q0 + q2) >> 1 + 2)>>2);
;// dQ_2n = (OMX_U8)(( qSq3q2 + (dQ_2 + qSp0q0q1) >> 1 + 2) >> 2);
;// dQ_2n = (OMX_U8)(( qSq3q2 + qTemp2 >> 1 + 2) >> 2);
;// qTemp1-qSp2q1-11
;// qTemp2-qSp0q0p1-12
;// qSq2p1-11
;// qSp0q0q1-12
;// qTemp2-qSp0q0p1-12
;// qTemp1-qSq2p1-11
;// qSq3q2-13
;// dP_2n-31
VQRSHRN dP_2n, qSp3p2, #2
VADDL qSq3q2, dQ_3, dQ_2
VSHR qSq2p1, #1
VHADD qTemp1, qSp0q0q1, qSq2p1
VADDW qTemp2, qSp0q0q1, dQ_2
;// dHSq0p1-28
VHADD dHSq0p1, dQ_0, dP_1
VBIF dP_0n, dP_0, dFilt
VBIF dP_1n, dP_1, dApflg
VSRA qSq3q2, qTemp2, #1
;// dQ_1-Temp2-25
;// dQ_0-Temp2-24
VQRSHRN dQ_1n, qTemp2, #2
VQRSHRN dQ_0n, qTemp1, #1
;// dQ_0t-Temp1-22
VRHADD dQ_0t, dHSq0p1, dQ_1
VBIF dQ_1n, dQ_1, dAqflg
VBIF dP_2n, dP_2, dApflg
VBIF dQ_0n, dQ_0t, dAqflg
VQRSHRN dQ_2n, qSq3q2, #2
VBIF dQ_0n, dQ_0, dFilt
VBIF dQ_2n, dQ_2, dAqflg
M_END
ENDIF
END
|