mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-04-06 17:23:13 +00:00
ARM: NEON optimised vector_fmac_scalar()
Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
a92a1b93b4
commit
baf6b738f2
libavcodec/arm
@ -143,6 +143,8 @@ void ff_vector_fmul_window_neon(float *dst, const float *src0,
|
|||||||
const float *src1, const float *win, int len);
|
const float *src1, const float *win, int len);
|
||||||
void ff_vector_fmul_scalar_neon(float *dst, const float *src, float mul,
|
void ff_vector_fmul_scalar_neon(float *dst, const float *src, float mul,
|
||||||
int len);
|
int len);
|
||||||
|
void ff_vector_fmac_scalar_neon(float *dst, const float *src, float mul,
|
||||||
|
int len);
|
||||||
void ff_butterflies_float_neon(float *v1, float *v2, int len);
|
void ff_butterflies_float_neon(float *v1, float *v2, int len);
|
||||||
float ff_scalarproduct_float_neon(const float *v1, const float *v2, int len);
|
float ff_scalarproduct_float_neon(const float *v1, const float *v2, int len);
|
||||||
void ff_vector_fmul_reverse_neon(float *dst, const float *src0,
|
void ff_vector_fmul_reverse_neon(float *dst, const float *src0,
|
||||||
@ -305,6 +307,7 @@ void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx)
|
|||||||
c->vector_fmul = ff_vector_fmul_neon;
|
c->vector_fmul = ff_vector_fmul_neon;
|
||||||
c->vector_fmul_window = ff_vector_fmul_window_neon;
|
c->vector_fmul_window = ff_vector_fmul_window_neon;
|
||||||
c->vector_fmul_scalar = ff_vector_fmul_scalar_neon;
|
c->vector_fmul_scalar = ff_vector_fmul_scalar_neon;
|
||||||
|
c->vector_fmac_scalar = ff_vector_fmac_scalar_neon;
|
||||||
c->butterflies_float = ff_butterflies_float_neon;
|
c->butterflies_float = ff_butterflies_float_neon;
|
||||||
c->scalarproduct_float = ff_scalarproduct_float_neon;
|
c->scalarproduct_float = ff_scalarproduct_float_neon;
|
||||||
c->vector_fmul_reverse = ff_vector_fmul_reverse_neon;
|
c->vector_fmul_reverse = ff_vector_fmul_reverse_neon;
|
||||||
|
@ -587,6 +587,54 @@ NOVFP vdup.32 q8, r2
|
|||||||
.unreq len
|
.unreq len
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
function ff_vector_fmac_scalar_neon, export=1
|
||||||
|
VFP len .req r2
|
||||||
|
VFP acc .req r3
|
||||||
|
NOVFP len .req r3
|
||||||
|
NOVFP acc .req r2
|
||||||
|
VFP vdup.32 q15, d0[0]
|
||||||
|
NOVFP vdup.32 q15, r2
|
||||||
|
bics r12, len, #15
|
||||||
|
mov acc, r0
|
||||||
|
beq 3f
|
||||||
|
vld1.32 {q0}, [r1,:128]!
|
||||||
|
vld1.32 {q8}, [acc,:128]!
|
||||||
|
vld1.32 {q1}, [r1,:128]!
|
||||||
|
vld1.32 {q9}, [acc,:128]!
|
||||||
|
1: vmla.f32 q8, q0, q15
|
||||||
|
vld1.32 {q2}, [r1,:128]!
|
||||||
|
vld1.32 {q10}, [acc,:128]!
|
||||||
|
vmla.f32 q9, q1, q15
|
||||||
|
vld1.32 {q3}, [r1,:128]!
|
||||||
|
vld1.32 {q11}, [acc,:128]!
|
||||||
|
vmla.f32 q10, q2, q15
|
||||||
|
vst1.32 {q8}, [r0,:128]!
|
||||||
|
vmla.f32 q11, q3, q15
|
||||||
|
vst1.32 {q9}, [r0,:128]!
|
||||||
|
subs r12, r12, #16
|
||||||
|
beq 2f
|
||||||
|
vld1.32 {q0}, [r1,:128]!
|
||||||
|
vld1.32 {q8}, [acc,:128]!
|
||||||
|
vst1.32 {q10}, [r0,:128]!
|
||||||
|
vld1.32 {q1}, [r1,:128]!
|
||||||
|
vld1.32 {q9}, [acc,:128]!
|
||||||
|
vst1.32 {q11}, [r0,:128]!
|
||||||
|
b 1b
|
||||||
|
2: vst1.32 {q10}, [r0,:128]!
|
||||||
|
vst1.32 {q11}, [r0,:128]!
|
||||||
|
ands len, len, #15
|
||||||
|
it eq
|
||||||
|
bxeq lr
|
||||||
|
3: vld1.32 {q0}, [r1,:128]!
|
||||||
|
vld1.32 {q8}, [acc,:128]!
|
||||||
|
vmla.f32 q8, q0, q15
|
||||||
|
vst1.32 {q8}, [r0,:128]!
|
||||||
|
subs len, len, #4
|
||||||
|
bgt 3b
|
||||||
|
bx lr
|
||||||
|
.unreq len
|
||||||
|
endfunc
|
||||||
|
|
||||||
function ff_butterflies_float_neon, export=1
|
function ff_butterflies_float_neon, export=1
|
||||||
1: vld1.32 {q0},[r0,:128]
|
1: vld1.32 {q0},[r0,:128]
|
||||||
vld1.32 {q1},[r1,:128]
|
vld1.32 {q1},[r1,:128]
|
||||||
|
Loading…
Reference in New Issue
Block a user