ARM: NEON optimised vector_fmac_scalar()
Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
a92a1b93b4
commit
baf6b738f2
@ -143,6 +143,8 @@ void ff_vector_fmul_window_neon(float *dst, const float *src0,
|
||||
const float *src1, const float *win, int len);
|
||||
void ff_vector_fmul_scalar_neon(float *dst, const float *src, float mul,
|
||||
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);
|
||||
float ff_scalarproduct_float_neon(const float *v1, const float *v2, int len);
|
||||
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_window = ff_vector_fmul_window_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->scalarproduct_float = ff_scalarproduct_float_neon;
|
||||
c->vector_fmul_reverse = ff_vector_fmul_reverse_neon;
|
||||
|
@ -587,6 +587,54 @@ NOVFP vdup.32 q8, r2
|
||||
.unreq len
|
||||
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
|
||||
1: vld1.32 {q0},[r0,:128]
|
||||
vld1.32 {q1},[r1,:128]
|
||||
|
Loading…
x
Reference in New Issue
Block a user