summaryrefslogtreecommitdiff
path: root/vp8
diff options
context:
space:
mode:
authorTimothy B. Terriberry <tterribe@xiph.org>2010-09-30 20:40:45 -0700
committerTimothy B. Terriberry <tterribe@xiph.org>2010-09-30 20:40:45 -0700
commita465076e02aece158093ebe55f30c3420ab1ad14 (patch)
tree4ead342ee5e3ddc2be289ac3afb8629901e6ef85 /vp8
parent439b2ecd74f83ff49b4714a5e046affa853b9b66 (diff)
downloadlibvpx-a465076e02aece158093ebe55f30c3420ab1ad14.tar
libvpx-a465076e02aece158093ebe55f30c3420ab1ad14.tar.gz
libvpx-a465076e02aece158093ebe55f30c3420ab1ad14.tar.bz2
libvpx-a465076e02aece158093ebe55f30c3420ab1ad14.zip
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.
Diffstat (limited to 'vp8')
-rw-r--r--vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm7
-rw-r--r--vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm8
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