lavu/floatdsp: RISC-V V vector_fmul_reverse

pull/388/head
Rémi Denis-Courmont 2 years ago committed by Lynne
parent 47ce9735cc
commit 9aeb6aca3a
  1. 3
      libavutil/riscv/float_dsp_init.c
  2. 21
      libavutil/riscv/float_dsp_rvv.S

@ -33,6 +33,8 @@ void ff_vector_fmul_scalar_rvv(float *dst, const float *src, float mul,
int len);
void ff_vector_fmul_add_rvv(float *dst, const float *src0, const float *src1,
const float *src2, int len);
void ff_vector_fmul_reverse_rvv(float *dst, const float *src0,
const float *src1, int len);
void ff_butterflies_float_rvv(float *v1, float *v2, int len);
void ff_vector_dmul_rvv(double *dst, const double *src0, const double *src1,
@ -52,6 +54,7 @@ av_cold void ff_float_dsp_init_riscv(AVFloatDSPContext *fdsp)
fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_rvv;
fdsp->vector_fmul_scalar = ff_vector_fmul_scalar_rvv;
fdsp->vector_fmul_add = ff_vector_fmul_add_rvv;
fdsp->vector_fmul_reverse = ff_vector_fmul_reverse_rvv;
fdsp->butterflies_float = ff_butterflies_float_rvv;
}

@ -93,6 +93,27 @@ func ff_vector_fmul_add_rvv, zve32f
ret
endfunc
// (a0) = (a1) * reverse(a2) [0..a3-1]
func ff_vector_fmul_reverse_rvv, zve32f
sh2add a2, a3, a2
li t2, -4 // byte stride
addi a2, a2, -4
1:
vsetvli t0, a3, e32, m1, ta, ma
slli t1, t0, 2
vle32.v v16, (a1)
sub a3, a3, t0
vlse32.v v24, (a2), t2
add a1, a1, t1
vfmul.vv v16, v16, v24
sub a2, a2, t1
vse32.v v16, (a0)
add a0, a0, t1
bnez a3, 1b
ret
endfunc
// (a0) = (a0) + (a1), (a1) = (a0) - (a1) [0..a2-1]
func ff_butterflies_float_rvv, zve32f
1:

Loading…
Cancel
Save