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 33cd55e..044b3a3 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 f51fd0b..e071662 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.7.4