From: Timothy B. Terriberry Date: Fri, 1 Oct 2010 03:40:45 +0000 (-0700) Subject: Fix valgrind errors in the NEON loop filters. X-Git-Tag: v0.9.5~66^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a465076e02aece158093ebe55f30c3420ab1ad14;p=libvpx 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. --- diff --git a/vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm b/vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm index 33cd55e1c..044b3a3a8 100644 --- 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) @@ -165,8 +166,6 @@ vld1.u8 {d5}, [r12]! ;#27 - sub sp, sp, #32 - vqadd.s8 q6, q6, q13 ; ps0 = vp8_signed_char_clamp(ps0 + Filter2) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm b/vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm index f51fd0bd4..e0716625c 100644 --- 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