summaryrefslogtreecommitdiff
path: root/libavcodec/arm/rv34dsp_neon.S
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2011-12-12 23:22:04 +0000
committerMans Rullgard <mans@mansr.com>2011-12-13 12:06:21 +0000
commit4722a03c75d17d88312b91cd1006776844237349 (patch)
treeb2814832aa845a3253c493b253ffda4e39010213 /libavcodec/arm/rv34dsp_neon.S
parent40901fc14e1ae1a1074a70931a133b2bc2604a1c (diff)
rv34: NEON optimised 4x4 dequant
Signed-off-by: Mans Rullgard <mans@mansr.com>
Diffstat (limited to 'libavcodec/arm/rv34dsp_neon.S')
-rw-r--r--libavcodec/arm/rv34dsp_neon.S24
1 files changed, 24 insertions, 0 deletions
diff --git a/libavcodec/arm/rv34dsp_neon.S b/libavcodec/arm/rv34dsp_neon.S
index f700f5c321..423b537fb9 100644
--- a/libavcodec/arm/rv34dsp_neon.S
+++ b/libavcodec/arm/rv34dsp_neon.S
@@ -107,3 +107,27 @@ function ff_rv34_inv_transform_noround_neon, export=1
vst4.16 {d0[3], d1[3], d2[3], d3[3]}, [r2,:64], r1
bx lr
endfunc
+
+function ff_rv34_dequant4x4_neon, export=1
+ mov r3, r0
+ mov r12, #16
+ vdup.16 q0, r2
+ vmov.16 d0[0], r1
+ vld1.16 {d2}, [r0,:64], r12
+ vld1.16 {d4}, [r0,:64], r12
+ vld1.16 {d6}, [r0,:64], r12
+ vld1.16 {d16}, [r0,:64], r12
+ vmull.s16 q1, d2, d0
+ vmull.s16 q2, d4, d1
+ vmull.s16 q3, d6, d1
+ vmull.s16 q8, d16, d1
+ vqrshrn.s32 d2, q1, #4
+ vqrshrn.s32 d4, q2, #4
+ vqrshrn.s32 d6, q3, #4
+ vqrshrn.s32 d16, q8, #4
+ vst1.16 {d2}, [r3,:64], r12
+ vst1.16 {d4}, [r3,:64], r12
+ vst1.16 {d6}, [r3,:64], r12
+ vst1.16 {d16}, [r3,:64], r12
+ bx lr
+endfunc