1bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//
2bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//
3bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// File Name:  omxVCM4P10_FilterDeblockingChroma_VerEdge_I_s.s
4bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// OpenMAX DL: v1.0.2
5bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Revision:   9641
6bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Date:       Thursday, February 7, 2008
7bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//
8bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
9bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//
10bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//
11bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//
12bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
13bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        INCLUDE omxtypes_s.h
14bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        INCLUDE armCOMM_s.h
15bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
16bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_VARIANTS ARM1136JS
17bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
18bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
19bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        IF ARM1136JS
20bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
21bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
22bebc99d6fa433c04139294a5057f8439d772dbd9James DongMASK_0      EQU 0x00000000
23bebc99d6fa433c04139294a5057f8439d772dbd9James DongMASK_1      EQU 0x01010101
24bebc99d6fa433c04139294a5057f8439d772dbd9James DongMASK_2      EQU 0x0000ff00
25bebc99d6fa433c04139294a5057f8439d772dbd9James DongLOOP_COUNT  EQU 0x50000000
26bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
27bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Declare input registers
28bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
29bebc99d6fa433c04139294a5057f8439d772dbd9James DongpSrcDst     RN 0
30bebc99d6fa433c04139294a5057f8439d772dbd9James DongsrcdstStep  RN 1
31bebc99d6fa433c04139294a5057f8439d772dbd9James DongpAlphaArg   RN 2
32bebc99d6fa433c04139294a5057f8439d772dbd9James DongpBetaArg    RN 3
33bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
34bebc99d6fa433c04139294a5057f8439d772dbd9James DongpThresholds RN 6
35bebc99d6fa433c04139294a5057f8439d772dbd9James DongpBS         RN 9
36bebc99d6fa433c04139294a5057f8439d772dbd9James DongpQ0         RN 0
37bebc99d6fa433c04139294a5057f8439d772dbd9James DongbS          RN 2
38bebc99d6fa433c04139294a5057f8439d772dbd9James DongbSTemp      RN 10
39bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
40bebc99d6fa433c04139294a5057f8439d772dbd9James Dongalpha       RN 6
41bebc99d6fa433c04139294a5057f8439d772dbd9James Dongalpha0      RN 6
42bebc99d6fa433c04139294a5057f8439d772dbd9James Dongalpha1      RN 8
43bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
44bebc99d6fa433c04139294a5057f8439d772dbd9James Dongbeta        RN 7
45bebc99d6fa433c04139294a5057f8439d772dbd9James Dongbeta0       RN 7
46bebc99d6fa433c04139294a5057f8439d772dbd9James Dongbeta1       RN 9
47bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
48bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Declare Local/Temporary variables
49bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
50bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Pixels
51bebc99d6fa433c04139294a5057f8439d772dbd9James Dongp_0         RN 3
52bebc99d6fa433c04139294a5057f8439d772dbd9James Dongp_1         RN 5
53bebc99d6fa433c04139294a5057f8439d772dbd9James Dongq_0         RN 8
54bebc99d6fa433c04139294a5057f8439d772dbd9James Dongq_1         RN 9
55bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
56bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Unpacking
57bebc99d6fa433c04139294a5057f8439d772dbd9James Dongmask        RN 11
58bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
59bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow0        RN 2
60bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow1        RN 4
61bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow2        RN 5
62bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow3        RN 3
63bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
64bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow4        RN 8
65bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow5        RN 9
66bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow6        RN 10
67bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow7        RN 12
68bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
69bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk0      RN 2
70bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk2      RN 10
71bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk3      RN 12
72bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
73bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk4      RN 4
74bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk5      RN 5
75bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk6      RN 14
76bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk7      RN 2
77bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
78bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Filtering
79bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
80bebc99d6fa433c04139294a5057f8439d772dbd9James Dongdp0q0       RN 12
81bebc99d6fa433c04139294a5057f8439d772dbd9James Dongdp1p0       RN 12
82bebc99d6fa433c04139294a5057f8439d772dbd9James Dongdq1q0       RN 12
83bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
84bebc99d6fa433c04139294a5057f8439d772dbd9James Dongap0q0       RN 4
85bebc99d6fa433c04139294a5057f8439d772dbd9James Dongfilt        RN 2
86bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
87bebc99d6fa433c04139294a5057f8439d772dbd9James Dongm00         RN 14
88bebc99d6fa433c04139294a5057f8439d772dbd9James Dongm01         RN 11
89bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
90bebc99d6fa433c04139294a5057f8439d772dbd9James DongpQ0         RN 0
91bebc99d6fa433c04139294a5057f8439d772dbd9James DongStep        RN 1
92bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
93bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Output
94bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
95bebc99d6fa433c04139294a5057f8439d772dbd9James DongP_0         RN 6
96bebc99d6fa433c04139294a5057f8439d772dbd9James DongQ_0         RN 7
97bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
98bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//Declarations for bSLT4 kernel
99bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
100bebc99d6fa433c04139294a5057f8439d772dbd9James DongtC          RN 12
101bebc99d6fa433c04139294a5057f8439d772dbd9James DongtC0         RN 5
102bebc99d6fa433c04139294a5057f8439d772dbd9James DongtC1         RN 12
103bebc99d6fa433c04139294a5057f8439d772dbd9James Dongpos         RN 5
104bebc99d6fa433c04139294a5057f8439d772dbd9James Dongneg         RN 9
105bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
106bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//Declarations for bSGE4 kernel
107bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
108bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
109bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Miscellanous
110bebc99d6fa433c04139294a5057f8439d772dbd9James DongXY          RN 8
111bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
112bebc99d6fa433c04139294a5057f8439d772dbd9James Donga           RN 10
113bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt1          RN 10
114bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt2          RN 12
115bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt3          RN 14
116bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt4          RN 6
117bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt5          RN 5
118bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
119bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
120bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Allocate stack memory
121bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_ALLOC4 ppThresholds,4
122bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_ALLOC8 pAlphaBeta0,8
123bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_ALLOC8 pAlphaBeta1,8
124bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_ALLOC8 pXYBS,4
125bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_ALLOC4 ppBS,4
126bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
127bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Function header
128bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_START omxVCM4P10_FilterDeblockingChroma_VerEdge_I, r11
129bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
130bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//Input arguments on the stack
131bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_ARG   ppThresholdsArg, 4
132bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_ARG   ppBSArg, 4
133bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
134bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRB    alpha1, [pAlphaArg,#1]
135bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRB    beta1,  [pBetaArg,#1]
136bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDR   pThresholds, ppThresholdsArg
137bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDR     a,=MASK_1
138bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRB    beta0,  [pBetaArg]
139bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STR   pThresholds, ppThresholds
140bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRB    alpha0, [pAlphaArg]
141bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
142bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MUL     alpha1, alpha1, a
143bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MUL     beta1, beta1, a
144bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MUL     alpha0, alpha0, a
145bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MUL     beta0, beta0, a
146bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
147bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STRD  alpha1, beta1, pAlphaBeta1
148bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDR   pBS, ppBSArg
149bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STRD  alpha0, beta0, pAlphaBeta0
150bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
151bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDR     XY,=LOOP_COUNT
152bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STRD  XY, pBS, pXYBS
153bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
154bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
155bebc99d6fa433c04139294a5057f8439d772dbd9James DongLoopY
156bebc99d6fa433c04139294a5057f8439d772dbd9James DongLoopX
157bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//---------------Load Pixels-------------------
158bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
159bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//----------------Pack q0-q1-----------------------
160bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRH    bS, [pBS], #8
161bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDR     mask, =MASK_2
162bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
163bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDRH  row4, [pQ0], srcdstStep
164bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        CMP     bS, #0
165bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STR   pBS, ppBS
166bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDRH  row5, [pQ0], srcdstStep
167bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        BEQ.W   NoFilterBS0
168bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRH    row6, [pQ0]
169bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRH    row7, [pQ0, srcdstStep]
170bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
171bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// row4 = [0 0 r0q0 r0q1]
172bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// row5 = [0 0 r1q0 r1q1]
173bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// row6 = [0 0 r2q0 r2q1]
174bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// row7 = [0 0 r3q0 r3q1]
175bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
176bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        AND     tunpk4, mask, row4
177bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        AND     tunpk5, mask, row4, LSL#8
178bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UXTAB   tunpk4, tunpk4, row5, ROR#8
179bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UXTAB   tunpk5, tunpk5, row5
180bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        AND     tunpk6, mask, row6
181bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        AND     tunpk7, mask, row6, LSL#8
182bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UXTAB   tunpk6, tunpk6, row7, ROR#8
183bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UXTAB   tunpk7, tunpk7, row7
184bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
185bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// tunpk4 = [0 0 r0q0 r1q0]
186bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// tunpk5 = [0 0 r0q1 r1q1]
187bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// tunpk6 = [0 0 r2q0 r3q0]
188bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// tunpk7 = [0 0 r2q1 r3q1]
189bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
190bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SUB     pQ0, pQ0, srcdstStep, LSL #1
191bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SUB     pQ0, pQ0, #2
192bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
193bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        PKHBT   q_1, tunpk6, tunpk4, LSL#16
194bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        PKHBT   q_0, tunpk7, tunpk5, LSL#16
195bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
196bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// q_0 = [r0q0 r1q0 r2q0 r3q0]
197bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// q_1 = [r0q1 r1q1 r2q1 r3q1]
198bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
199bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
200bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//----------------Pack p0-p1-----------------------
201bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
202bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDRH  row0, [pQ0], srcdstStep
203bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDRH  row1, [pQ0], srcdstStep
204bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRH    row2, [pQ0]
205bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRH    row3, [pQ0, srcdstStep]
206bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
207bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// row0 = [0 0 r0p0 r0p1]
208bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// row1 = [0 0 r1p0 r1p1]
209bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// row2 = [0 0 r2p0 r2p1]
210bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// row3 = [0 0 r3p0 r3p1]
211bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
212bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        AND     tunpk2, mask, row0
213bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        AND     tunpk6, mask, row0, LSL#8
214bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UXTAB   tunpk2, tunpk2, row1, ROR#8
215bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UXTAB   tunpk6, tunpk6, row1
216bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
217bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        AND     tunpk0, mask, row2
218bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        AND     tunpk3, mask, row2, LSL#8
219bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UXTAB   tunpk0, tunpk0, row3, ROR#8
220bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UXTAB   tunpk3, tunpk3, row3
221bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
222bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// tunpk2 = [0 0 r0p0 r1p0]
223bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// tunpk6 = [0 0 r0p1 r1p1]
224bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// tunpk0 = [0 0 r2p0 r3p0]
225bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// tunpk3 = [0 0 r2p1 r3p1]
226bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
227bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        PKHBT   p_0, tunpk0, tunpk2, LSL#16
228bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDR   bSTemp, ppBS
229bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        PKHBT   p_1, tunpk3, tunpk6, LSL#16
230bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
231bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// p_0 = [r0p0 r1p0 r2p0 r3p0]
232bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// p_1 = [r0p1 r1p1 r2p1 r3p1]
233bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
234bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//--------------Filtering Decision -------------------
235bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   dp0q0, p_0, q_0
236bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDR     m01, =MASK_1
237bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRH    bSTemp, [bSTemp ,#-8]
238bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOV     m00, #MASK_0                ;//  00000000 mask
239bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
240bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOV     filt, m01
241bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        TST     bSTemp, #0xff00
242bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOVEQ   filt, filt, LSL #16
243bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        TST     bSTemp, #0xff
244bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOVEQ   filt, filt, LSR #16
245bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        TST     bSTemp, #4
246bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
247bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Check |p0-q0|<Alpha
248bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   a, q_0, p_0
249bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     ap0q0, a, dp0q0
250bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   a, ap0q0, alpha
251bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     filt, m00, filt
252bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
253bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Check |p1-p0|<Beta
254bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   dp1p0, p_1, p_0
255bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   a, p_0, p_1
256bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     a, a, dp1p0
257bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   a, a, beta
258bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     filt, m00, filt
259bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
260bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Check |q1-q0|<Beta
261bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   dq1q0, q_1, q_0
262bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   a, q_0, q_1
263bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     a, a, dq1q0
264bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   a, a, beta
265bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     filt, m00, filt
266bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
267bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        BEQ     bSLT4
268bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//-------------------Filter--------------------
269bebc99d6fa433c04139294a5057f8439d772dbd9James DongbSGE4
270bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//---------bSGE4 Execution---------------
271bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        CMP     filt, #0
272bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
273bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDR   pThresholds, ppThresholds
274bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
275bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Compute P0b
276bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UHADD8  t1, p_0, q_1
277bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        BEQ     NoFilterFilt0
278bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MVN     t2, p_1
279bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UHSUB8  t1, t1, t2
280bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   t2, filt, m01
281bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        EOR     t1, t1, m01, LSL #7
282bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
283bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ADD     pThresholds,pThresholds, #4
284bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
285bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Compute Q0b
286bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UHADD8  t2, q_0, p_1
287bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MVN     t3, q_1
288bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UHSUB8  t2, t2, t3
289bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STR   pThresholds, ppThresholds
290bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     P_0, t1, p_0
291bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        EOR     t2, t2, m01, LSL #7
292bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     Q_0, t2, q_0
293bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
294bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        B       StoreResultAndExit
295bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
296bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//---------- Exit of LoopX --------------
297bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//---- for the case of no filtering -----
298bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
299bebc99d6fa433c04139294a5057f8439d772dbd9James DongNoFilterFilt0
300bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ADD     pQ0, pQ0, #2
301bebc99d6fa433c04139294a5057f8439d772dbd9James DongNoFilterBS0
302bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDR   pThresholds, ppThresholds
303bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SUB     pQ0, pQ0, srcdstStep, LSL #1
304bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ADD     pQ0, pQ0, #4
305bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ADD     pThresholds, pThresholds, #4
306bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Load counter for LoopX
307bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDRD  XY, pBS, pXYBS
308bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STR   pThresholds, ppThresholds
309bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDRD  alpha, beta, pAlphaBeta1
310bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
311bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Align the pointer
312bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ADDS    XY, XY, XY
313bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STR   XY, pXYBS
314bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        BCC     LoopY
315bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        B       ExitLoopY
316bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
317bebc99d6fa433c04139294a5057f8439d772dbd9James DongbSLT4
318bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//---------bSLT4 Execution---------------
319bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDR   pThresholds, ppThresholds
320bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        CMP     filt, #0
321bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
322bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
323bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Since beta <= 18 and alpha <= 255 we know
324bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// -254 <= p0-q0 <= 254
325bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//  -17 <= q1-q0 <= 17
326bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//  -17 <= p1-p0 <= 17
327bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
328bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// delta = Clip3( -tC, tC, ((((q0-p0)<<2) + (p1-q1) + 4)>>3))
329bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//
330bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//    Calculate A = (((q0-p0)<<2) + (p1-q1) + 4)>>3
331bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//                = (4*q0 - 4*p0 + p1 - q1 + 4)>>3
332bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//                = ((p1-p0) - (q1-q0) - 3*(p0-q0) + 4)>>3
333bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
334bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   t1, p_1, p_0
335bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   t2, q_1, q_0
336bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        BEQ     NoFilterFilt0
337bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
338bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRB    tC0, [pThresholds], #1
339bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SSUB8   t1, t1, t2
340bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        LDRB    tC1, [pThresholds], #3
341bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STR   pThresholds, ppThresholds
342bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UHSUB8  t4, p_0, q_0
343bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ORR     tC, tC1, tC0, LSL #16
344bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   t5, p_0, q_0
345bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        AND     t5, t5, m01
346bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SHSUB8  t1, t1, t5
347bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ORR     tC, tC, LSL #8
348bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SSUB8   t1, t1, t5
349bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SHSUB8  t1, t1, t4
350bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UQADD8  tC, tC, m01
351bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SADD8   t1, t1, m01
352bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   t5, filt, m01
353bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SHSUB8  t1, t1, t4
354bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     tC, tC, m00
355bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
356bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Split into positive and negative part and clip
357bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
358bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SSUB8   t1, t1, m00
359bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     pos, t1, m00
360bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   neg, pos, t1
361bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   t3, pos, tC
362bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     pos, tC, pos
363bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   t3, neg, tC
364bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     neg, tC, neg
365bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UQADD8  P_0, p_0, pos
366bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UQSUB8  Q_0, q_0, pos
367bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UQSUB8  P_0, P_0, neg
368bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        UQADD8  Q_0, Q_0, neg
369bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
370bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Choose to store the filtered
371bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// value or the original pixel
372bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        USUB8   t1, filt, m01
373bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     P_0, P_0, p_0
374bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SEL     Q_0, Q_0, q_0
375bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
376bebc99d6fa433c04139294a5057f8439d772dbd9James DongStoreResultAndExit
377bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
378bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;//---------Store result---------------
379bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
380bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// P_0 = [r0p0 r1p0 r2p0 r3p0]
381bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Q_0 = [r0q0 r1q0 r2q0 r3q0]
382bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
383bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SUB     pQ0, pQ0, srcdstStep, LSL #1
384bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ADD        pQ0, pQ0, #1
385bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
386bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOV     t1, Q_0, LSR #24
387bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        STRB    t1, [pQ0, #1]
388bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOV     t1, P_0, LSR #24
389bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STRB  t1, [pQ0], srcdstStep
390bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
391bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOV     t1, Q_0, LSR #16
392bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        STRB    t1, [pQ0, #1]
393bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOV     t1, P_0, LSR #16
394bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STRB  t1, [pQ0], srcdstStep
395bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
396bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOV     t1, P_0, LSR #8
397bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        STRB    t1, [pQ0]
398bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        STRB    P_0, [pQ0, srcdstStep]
399bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOV     t1, Q_0, LSR #8
400bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        STRB    t1, [pQ0, #1]!
401bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        STRB    Q_0, [pQ0, srcdstStep]
402bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
403bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDRD  XY, pBS, pXYBS
404bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDRD  alpha, beta, pAlphaBeta1
405bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
406bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SUB     pQ0, pQ0, srcdstStep, LSL #1
407bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ADD     pQ0, pQ0, #4
408bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
409bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ADDS    XY, XY, XY
410bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STR   XY, pXYBS
411bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        BCC     LoopX
412bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
413bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//-------- Common Exit of LoopY -----------------
414bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ;// Align the pointers
415bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
416bebc99d6fa433c04139294a5057f8439d772dbd9James DongExitLoopY
417bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
418bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDR   pThresholds, ppThresholds
419bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SUB     pQ0, pQ0, #8
420bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ADD     pQ0, pQ0, srcdstStep, LSL #2
421bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SUB     pBS, pBS, #14
422bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        SUB     pThresholds, pThresholds, #6
423bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_STR   pThresholds, ppThresholds
424bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
425bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_LDRD  alpha, beta, pAlphaBeta0
426bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
427bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        BNE     LoopY
428bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        MOV     r0, #OMX_Sts_NoErr
429bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//-----------------End Filter--------------------
430bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
431bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        M_END
432bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
433bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        ENDIF
434bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
435bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        END
436bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
437bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
438