History

arm: dsputil: fix overreads in put/avg_pixels functions

The vertically interpolating variants of these functions read ahead one line to optimise the loop. On the last line processed, this might be outside the buffer. Fix these invalid reads by processing the last line outside the loop.

Mans Rullgard committed 14 years ago

Commit cbc7d601 parent 1de53d01 file · +92 −0Browse files

Unified · Split

libavcodec/arm/dsputil_neon.S+92−0
@@ -95,6 +95,7 @@ endfunc · 94 unmodified lines
95.endm95.endm
96 96
97.macro pixels16_y2 rnd=1, avg=097.macro pixels16_y2 rnd=1, avg=0
98 sub r3, r3, #2
98 vld1.64 {q0}, [r1], r299 vld1.64 {q0}, [r1], r2
99 vld1.64 {q1}, [r1], r2100 vld1.64 {q1}, [r1], r2
1001: subs r3, r3, #21011: subs r3, r3, #2
@@ -114,10 +115,25 @@ endfunc · 13 unmodified lines
114 vst1.64 {q2}, [r0,:128], r2115 vst1.64 {q2}, [r0,:128], r2
115 vst1.64 {q3}, [r0,:128], r2116 vst1.64 {q3}, [r0,:128], r2
116 bne 1b117 bne 1b
118
119 avg q2, q0, q1
120 vld1.64 {q0}, [r1], r2
121 avg q3, q0, q1
122 .if \avg
123 vld1.8 {q8}, [r0,:128], r2
124 vld1.8 {q9}, [r0,:128]
125 vrhadd.u8 q2, q2, q8
126 vrhadd.u8 q3, q3, q9
127 sub r0, r0, r2
128 .endif
129 vst1.64 {q2}, [r0,:128], r2
130 vst1.64 {q3}, [r0,:128], r2
131
117 bx lr132 bx lr
118.endm133.endm
119 134
120.macro pixels16_xy2 rnd=1, avg=0135.macro pixels16_xy2 rnd=1, avg=0
136 sub r3, r3, #2
121 vld1.64 {d0-d2}, [r1], r2137 vld1.64 {d0-d2}, [r1], r2
122 vld1.64 {d4-d6}, [r1], r2138 vld1.64 {d4-d6}, [r1], r2
123 .ifeq \rnd139 .ifeq \rnd
@@ -173,6 +189,42 @@ endfunc · 49 unmodified lines
173 vaddl.u8 q11, d3, d5189 vaddl.u8 q11, d3, d5
174 vst1.64 {q15}, [r0,:128], r2190 vst1.64 {q15}, [r0,:128], r2
175 bgt 1b191 bgt 1b
192
193 vld1.64 {d0-d2}, [r1], r2
194 vadd.u16 q12, q8, q9
195 .ifeq \rnd
196 vadd.u16 q12, q12, q13
197 .endif
198 vext.8 q15, q0, q1, #1
199 vadd.u16 q1 , q10, q11
200 shrn d28, q12, #2
201 .ifeq \rnd
202 vadd.u16 q1, q1, q13
203 .endif
204 shrn d29, q1, #2
205 .if \avg
206 vld1.8 {q8}, [r0,:128]
207 vrhadd.u8 q14, q14, q8
208 .endif
209 vaddl.u8 q8, d0, d30
210 vaddl.u8 q10, d1, d31
211 vst1.64 {q14}, [r0,:128], r2
212 vadd.u16 q12, q8, q9
213 .ifeq \rnd
214 vadd.u16 q12, q12, q13
215 .endif
216 vadd.u16 q0, q10, q11
217 shrn d30, q12, #2
218 .ifeq \rnd
219 vadd.u16 q0, q0, q13
220 .endif
221 shrn d31, q0, #2
222 .if \avg
223 vld1.8 {q9}, [r0,:128]
224 vrhadd.u8 q15, q15, q9
225 .endif
226 vst1.64 {q15}, [r0,:128], r2
227
176 bx lr228 bx lr
177.endm229.endm
178 230
@@ -228,6 +280,7 @@ endfunc · 49 unmodified lines
228.endm280.endm
229 281
230.macro pixels8_y2 rnd=1, avg=0282.macro pixels8_y2 rnd=1, avg=0
283 sub r3, r3, #2
231 vld1.64 {d0}, [r1], r2284 vld1.64 {d0}, [r1], r2
232 vld1.64 {d1}, [r1], r2285 vld1.64 {d1}, [r1], r2
2331: subs r3, r3, #22861: subs r3, r3, #2
@@ -246,10 +299,24 @@ endfunc · 12 unmodified lines
246 vst1.64 {d4}, [r0,:64], r2299 vst1.64 {d4}, [r0,:64], r2
247 vst1.64 {d5}, [r0,:64], r2300 vst1.64 {d5}, [r0,:64], r2
248 bne 1b301 bne 1b
302
303 avg d4, d0, d1
304 vld1.64 {d0}, [r1], r2
305 avg d5, d0, d1
306 .if \avg
307 vld1.8 {d2}, [r0,:64], r2
308 vld1.8 {d3}, [r0,:64]
309 vrhadd.u8 q2, q2, q1
310 sub r0, r0, r2
311 .endif
312 vst1.64 {d4}, [r0,:64], r2
313 vst1.64 {d5}, [r0,:64], r2
314
249 bx lr315 bx lr
250.endm316.endm
251 317
252.macro pixels8_xy2 rnd=1, avg=0318.macro pixels8_xy2 rnd=1, avg=0
319 sub r3, r3, #2
253 vld1.64 {q0}, [r1], r2320 vld1.64 {q0}, [r1], r2
254 vld1.64 {q1}, [r1], r2321 vld1.64 {q1}, [r1], r2
255 .ifeq \rnd322 .ifeq \rnd
@@ -291,6 +358,31 @@ endfunc · 35 unmodified lines
291 vaddl.u8 q9, d2, d6358 vaddl.u8 q9, d2, d6
292 vst1.64 {d7}, [r0,:64], r2359 vst1.64 {d7}, [r0,:64], r2
293 bgt 1b360 bgt 1b
361
362 vld1.64 {q0}, [r1], r2
363 vadd.u16 q10, q8, q9
364 vext.8 d4, d0, d1, #1
365 .ifeq \rnd
366 vadd.u16 q10, q10, q11
367 .endif
368 vaddl.u8 q8, d0, d4
369 shrn d5, q10, #2
370 vadd.u16 q10, q8, q9
371 .if \avg
372 vld1.8 {d7}, [r0,:64]
373 vrhadd.u8 d5, d5, d7
374 .endif
375 .ifeq \rnd
376 vadd.u16 q10, q10, q11
377 .endif
378 vst1.64 {d5}, [r0,:64], r2
379 shrn d7, q10, #2
380 .if \avg
381 vld1.8 {d5}, [r0,:64]
382 vrhadd.u8 d7, d7, d5
383 .endif
384 vst1.64 {d7}, [r0,:64], r2
385
294 bx lr386 bx lr
295.endm387.endm
296 388

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