From a465076e02aece158093ebe55f30c3420ab1ad14 Mon Sep 17 00:00:00 2001 From: "Timothy B. Terriberry" Date: Thu, 30 Sep 2010 20:40:45 -0700 Subject: [PATCH] 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. --- vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm | 7 +++---- vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) 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 -- 2.40.0