ref: a465076e02aece158093ebe55f30c3420ab1ad14
parent: 439b2ecd74f83ff49b4714a5e046affa853b9b66
author: Timothy B. Terriberry <tterribe@xiph.org>
date: Thu Sep 30 16:40:45 EDT 2010
Fix valgrind errors in the NEON loop filters. Like the ARMv6 code, these functions were accessing values below the stack pointer, which can be corrupted by signal delivery at any time.
--- a/vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm
+++ b/vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm
@@ -67,9 +67,10 @@
sub sp, sp, #32
vld1.s8 {d4[], d5[]}, [r12] ; thresh
- vst1.u8 {q3}, [sp]!
+ mov r12, sp
+ vst1.u8 {q3}, [r12]!
+ vst1.u8 {q10}, [r12]!
ldr r12, _mbvlfuv_coeff_
- vst1.u8 {q10}, [sp]!
; vp8_filter_mask
vabd.u8 q11, q3, q4 ; abs(p3 - p2)
@@ -164,8 +165,6 @@
vqsub.s8 q7, q7, q2 ; qs0 = vp8_signed_char_clamp(qs0 - Filter1)
vld1.u8 {d5}, [r12]! ;#27
-
- sub sp, sp, #32
vqadd.s8 q6, q6, q13 ; ps0 = vp8_signed_char_clamp(ps0 + Filter2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
--- a/vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm
+++ b/vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm
@@ -63,11 +63,12 @@
vtrn.8 q7, q8
vtrn.8 q9, q10
- vld1.s8 {d2[], d3[]}, [r3] ; limit
- vst1.u8 {q3}, [sp]!
vld1.s8 {d4[], d5[]}, [r12] ; thresh
+ vld1.s8 {d2[], d3[]}, [r3] ; limit
+ mov r12, sp
+ vst1.u8 {q3}, [r12]!
+ vst1.u8 {q10}, [r12]!
ldr r12, _mbvlfy_coeff_
- vst1.u8 {q10}, [sp]!
; vp8_filter_mask
vabd.u8 q11, q3, q4 ; abs(p3 - p2)
@@ -150,7 +151,6 @@
vld1.u8 {d6}, [r12]! ;#18
sub r0, r0, r1, lsl #4
- sub sp, sp, #32
add r2, r0, r1