[FFmpeg-cvslog] r20029 - in trunk/libavcodec/arm: dsputil_neon.c dsputil_neon_s.S
mru
subversion
Sat Sep 26 21:23:25 CEST 2009
Author: mru
Date: Sat Sep 26 21:23:25 2009
New Revision: 20029
Log:
ARM: NEON optimised vector_fmul_reverse
Modified:
trunk/libavcodec/arm/dsputil_neon.c
trunk/libavcodec/arm/dsputil_neon_s.S
Modified: trunk/libavcodec/arm/dsputil_neon.c
==============================================================================
--- trunk/libavcodec/arm/dsputil_neon.c Sat Sep 26 19:21:22 2009 (r20028)
+++ trunk/libavcodec/arm/dsputil_neon.c Sat Sep 26 21:23:25 2009 (r20029)
@@ -171,6 +171,8 @@ void ff_butterflies_float_neon(float *v1
float ff_scalarproduct_float_neon(const float *v1, const float *v2, int len);
void ff_int32_to_float_fmul_scalar_neon(float *dst, const int *src,
float mul, int len);
+void ff_vector_fmul_reverse_neon(float *dst, const float *src0,
+ const float *src1, int len);
void ff_float_to_int16_neon(int16_t *, const float *, long);
void ff_float_to_int16_interleave_neon(int16_t *, const float **, long, int);
@@ -287,6 +289,7 @@ void ff_dsputil_init_neon(DSPContext *c,
c->butterflies_float = ff_butterflies_float_neon;
c->scalarproduct_float = ff_scalarproduct_float_neon;
c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_neon;
+ c->vector_fmul_reverse = ff_vector_fmul_reverse_neon;
c->vector_fmul_sv_scalar[0] = ff_vector_fmul_sv_scalar_2_neon;
c->vector_fmul_sv_scalar[1] = ff_vector_fmul_sv_scalar_4_neon;
Modified: trunk/libavcodec/arm/dsputil_neon_s.S
==============================================================================
--- trunk/libavcodec/arm/dsputil_neon_s.S Sat Sep 26 19:21:22 2009 (r20028)
+++ trunk/libavcodec/arm/dsputil_neon_s.S Sat Sep 26 21:23:25 2009 (r20029)
@@ -1051,3 +1051,27 @@ NOVFP len .req r3
bx lr
.unreq len
.endfunc
+
+function ff_vector_fmul_reverse_neon, export=1
+ add r2, r2, r3, lsl #2
+ sub r2, r2, #32
+ mov r12, #-32
+ vld1.32 {q0-q1}, [r1,:128]!
+ vld1.32 {q2-q3}, [r2,:128], r12
+1: pld [r1, #32]
+ vrev64.32 q3, q3
+ vmul.f32 d16, d0, d7
+ vmul.f32 d17, d1, d6
+ pld [r2, #-32]
+ vrev64.32 q2, q2
+ vmul.f32 d18, d2, d5
+ vmul.f32 d19, d3, d4
+ subs r3, r3, #8
+ beq 2f
+ vld1.32 {q0-q1}, [r1,:128]!
+ vld1.32 {q2-q3}, [r2,:128], r12
+ vst1.32 {q8-q9}, [r0,:128]!
+ b 1b
+2: vst1.32 {q8-q9}, [r0,:128]!
+ bx lr
+ .endfunc
More information about the ffmpeg-cvslog
mailing list