History

Merge "fix armv6 simpleloop filter"

Johann committed 16 years ago

Commit a522be22 parents 6ea5bb8 467a0b91 file · +47 −68Browse files

Unified · Split

vp8/common/arm/armv6/simpleloopfilter_v6.asm+47−68
@@ -63,23 +63,22 @@ pstep RN r1 · 62 unmodified lines
6363 ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
6464 stmdb sp!, {r4 - r11, lr}
6565
66− sub src, src, pstep, lsl #1 ; move src pointer down by 2 lines
66+ ldr r12, [r3] ; limit
67+ ldr r3, [src, -pstep, lsl #1] ; p1
6768
68− ldr r12, [r3], #4 ; limit
69− ldr r3, [src], pstep ; p1
69+ ldr r9, [sp, #40] ; count for 8-in-parallel
70+ ldr r4, [src, -pstep] ; p0
7071
71− ldr r9, [sp, #36] ; count for 8-in-parallel
72− ldr r4, [src], pstep ; p0
73−
74− ldr r7, [r2], #4 ; flimit
75− ldr r5, [src], pstep ; q0
72+ ldr r7, [r2] ; flimit
73+ ldr r5, [src] ; q0
7674 ldr r2, c0x80808080
7775
78− ldr r6, [src] ; q1
76+ ldr r6, [src, pstep] ; q1
7977
8078 uadd8 r7, r7, r7 ; flimit * 2
81− mov r9, r9, lsl #1 ; 4-in-parallel
79+ mov r9, r9, lsl #1 ; double the count. we're doing 4 at a time
8280 uadd8 r12, r7, r12 ; flimit * 2 + limit
81+ mov lr, #0
8382
8483 |simple_hnext8|
8584 ; vp8_simple_filter_mask() function
@@ -89,22 +88,19 @@ pstep RN r1 · 3 unmodified lines
8988 uqsub8 r10, r4, r5 ; p0 - q0
9089 uqsub8 r11, r5, r4 ; q0 - p0
9190 orr r8, r8, r7 ; abs(p1 - q1)
92− ldr lr, c0x7F7F7F7F ; 01111111 mask
9391 orr r10, r10, r11 ; abs(p0 - q0)
94− and r8, lr, r8, lsr #1 ; abs(p1 - q1) / 2
92+ uhadd8 r8, r8, lr ; abs(p1 - q2) >> 1
9593 uqadd8 r10, r10, r10 ; abs(p0 - q0) * 2
96− mvn lr, #0 ; r10 == -1
94+ ; STALL waiting on r10
9795 uqadd8 r10, r10, r8 ; abs(p0 - q0)*2 + abs(p1 - q1)/2
98− ; STALL waiting on r10 :(
99− uqsub8 r10, r10, r12 ; compare to flimit
100− mov r8, #0
101−
102− usub8 r10, r8, r10 ; use usub8 instead of ssub8
103− ; STALL (maybe?) when are flags set? :/
104− sel r10, lr, r8 ; filter mask: lr
105−
96+ ; STALL waiting on r10
97+ mvn r8, #0
98+ uqsub8 r10, r10, r12 ; compare to flimit. need to do this twice because uqsub8 doesn't set GE flags
99+ ; and usub8 doesn't saturate
100+ usub8 r10, lr, r10 ; set GE flags for each byte
101+ sel r10, r8, lr ; filter mask: F or 0
106102 cmp r10, #0
107− beq simple_hskip_filter ; skip filtering
103+ beq simple_hskip_filter ; skip filtering if we're &ing with 0s. would just write out the same values
108104
109105 ;vp8_simple_filter() function
110106
@@ -113,55 +109,45 @@ pstep RN r1 · 2 unmodified lines
113109 eor r4, r4, r2 ; p0 offset to convert to a signed value
114110 eor r5, r5, r2 ; q0 offset to convert to a signed value
115111
116− qsub8 r3, r3, r6 ; vp8_filter (r3) = vp8_signed_char_clamp(p1-q1)
117− qsub8 r6, r5, r4 ; vp8_filter = vp8_signed_char_clamp(vp8_filter + 3 * ( q0 - p0))
112+ qsub8 r3, r3, r6 ; vp8_signed_char_clamp(p1-q1)
113+ qsub8 r6, r5, r4 ; vp8_signed_char_clamp(q0-p0)
114+ qadd8 r3, r3, r6 ; += q0-p0
115+ qadd8 r3, r3, r6 ; += q0-p0
116+ qadd8 r3, r3, r6 ; p1-q1 + 3*(q0-p0))
117+ and r3, r3, r10 ; &= mask
118118
119− qadd8 r3, r3, r6
120− ldr r8, c0x03030303 ; r8 = 3
121−
122− qadd8 r3, r3, r6
123119 ldr r7, c0x04040404
124−
125− qadd8 r3, r3, r6
126− and r3, r3, lr ; vp8_filter &= mask;
120+ ldr r8, c0x03030303
127121
128122 ;save bottom 3 bits so that we round one side +4 and the other +3
123+ qadd8 r7 , r3 , r7 ; Filter1 (r3) = vp8_signed_char_clamp(vp8_filter+4)
129124 qadd8 r8 , r3 , r8 ; Filter2 (r8) = vp8_signed_char_clamp(vp8_filter+3)
130− qadd8 r3 , r3 , r7 ; Filter1 (r3) = vp8_signed_char_clamp(vp8_filter+4)
131125
132− mov r7, #0
133− shadd8 r8 , r8 , r7 ; Filter2 >>= 3
134− shadd8 r3 , r3 , r7 ; Filter1 >>= 3
135− shadd8 r8 , r8 , r7
136− shadd8 r3 , r3 , r7
137− shadd8 r8 , r8 , r7 ; r8: Filter2
138− shadd8 r3 , r3 , r7 ; r7: filter1
126+ mov r3, #0
127+ shadd8 r7 , r7 , r3
128+ shadd8 r8 , r8 , r3
129+ shadd8 r7 , r7 , r3
130+ shadd8 r8 , r8 , r3
131+ shadd8 r7 , r7 , r3 ; Filter1 >>= 3
132+ shadd8 r8 , r8 , r3 ; Filter2 >>= 3
139133
140− ;calculate output
141− sub src, src, pstep, lsl #1
142134
135+ qsub8 r5 ,r5, r7 ; u = vp8_signed_char_clamp(q0 - Filter1)
143136 qadd8 r4, r4, r8 ; u = vp8_signed_char_clamp(p0 + Filter2)
144− qsub8 r5 ,r5, r3 ; u = vp8_signed_char_clamp(q0 - Filter1)
145− eor r4, r4, r2 ; *op0 = u^0x80
146− str r4, [src], pstep ; store op0 result
147137 eor r5, r5, r2 ; *oq0 = u^0x80
148− str r5, [src], pstep ; store oq0 result
138+ str r5, [src] ; store oq0 result
139+ eor r4, r4, r2 ; *op0 = u^0x80
140+ str r4, [src, -pstep] ; store op0 result
149141
150142 |simple_hskip_filter|
151− add src, src, #4
152− sub src, src, pstep
153− sub src, src, pstep, lsl #1
154143
155144 subs r9, r9, #1
145+ addne src, src, #4 ; next row
156146
157− ;pld [src]
158− ;pld [src, pstep]
159− ;pld [src, pstep, lsl #1]
160−
161− ldrne r3, [src], pstep ; p1
162− ldrne r4, [src], pstep ; p0
163− ldrne r5, [src], pstep ; q0
164− ldrne r6, [src] ; q1
147+ ldrne r3, [src, -pstep, lsl #1] ; p1
148+ ldrne r4, [src, -pstep] ; p0
149+ ldrne r5, [src] ; q0
150+ ldrne r6, [src, pstep] ; q1
165151
166152 bne simple_hnext8
167153
@@ -174,9 +160,9 @@ pstep RN r1 · 6 unmodified lines
174160 ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
175161 stmdb sp!, {r4 - r11, lr}
176162
177− ldr r12, [r2], #4 ; r12: flimit
163+ ldr r12, [r2] ; r12: flimit
178164 ldr r2, c0x80808080
179− ldr r7, [r3], #4 ; limit
165+ ldr r7, [r3] ; limit
180166
181167 ; load soure data to r7, r8, r9, r10
182168 ldrh r3, [src, #-2]
@@ -213,16 +199,15 @@ pstep RN r1 · 30 unmodified lines
213199 uqsub8 r10, r5, r4 ; q0 - p0
214200 orr r7, r7, r8 ; abs(p1 - q1)
215201 orr r9, r9, r10 ; abs(p0 - q0)
216− ldr lr, c0x7F7F7F7F ; 0111 1111 mask
217− uqadd8 r9, r9, r9 ; abs(p0 - q0) * 2
218− and r7, lr, r7, lsr #1 ; abs(p1 - q1) / 2
219202 mov r8, #0
203+ uqadd8 r9, r9, r9 ; abs(p0 - q0) * 2
204+ uhadd8 r7, r7, r8 ; abs(p1 - q1) / 2
220205 uqadd8 r7, r7, r9 ; abs(p0 - q0)*2 + abs(p1 - q1)/2
221206 mvn r10, #0 ; r10 == -1
222207 uqsub8 r7, r7, r12 ; compare to flimit
223208
224209 usub8 r7, r8, r7
225− sel r7, r10, r8 ; filter mask: lr
210+ sel lr, r10, r8 ; filter mask
226211
227212 cmp lr, #0
228213 beq simple_vskip_filter ; skip filtering
@@ -286,10 +271,6 @@ pstep RN r1 · 57 unmodified lines
286271 |simple_vskip_filter|
287272 subs r11, r11, #1
288273
289− ;pld [src]
290− ;pld [src, pstep]
291− ;pld [src, pstep, lsl #1]
292−
293274 ; load soure data to r7, r8, r9, r10
294275 ldrneh r3, [src, #-2]
295276 ldrneh r4, [src], pstep
@@ -316,7 +297,5 @@ pstep RN r1 · 20 unmodified lines
316297 c0x80808080 DCD 0x80808080
317298 c0x03030303 DCD 0x03030303
318299 c0x04040404 DCD 0x04040404
319−c0x01010101 DCD 0x01010101
320−c0x7F7F7F7F DCD 0x7F7F7F7F
321300
322301 END

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t