lavu/fixed_dsp: R-V V vector_fmul

vector_fmul_fixed_c: 4.0
vector_fmul_fixed_rvv_i64: 0.5
This commit is contained in:
Rémi Denis-Courmont 2023-10-04 18:53:03 +03:00
parent da7a77fb0a
commit 10eb3b9c9f
2 changed files with 20 additions and 0 deletions

View File

@ -25,6 +25,8 @@
#include "libavutil/cpu.h"
#include "libavutil/fixed_dsp.h"
void ff_vector_fmul_fixed_rvv(int *dst, const int *src0, const int *src1,
int len);
void ff_vector_fmul_reverse_fixed_rvv(int *dst, const int *src0,
const int *src1, int len);
void ff_vector_fmul_add_fixed_rvv(int *dst, const int *src0, const int *src1,
@ -38,6 +40,7 @@ av_cold void ff_fixed_dsp_init_riscv(AVFixedDSPContext *fdsp)
int flags = av_get_cpu_flags();
if ((flags & AV_CPU_FLAG_RVV_I32) && (flags & AV_CPU_FLAG_RVB_ADDR)) {
fdsp->vector_fmul = ff_vector_fmul_fixed_rvv;
fdsp->vector_fmul_reverse = ff_vector_fmul_reverse_fixed_rvv;
fdsp->vector_fmul_add = ff_vector_fmul_add_fixed_rvv;

View File

@ -20,6 +20,23 @@
#include "asm.S"
func ff_vector_fmul_fixed_rvv, zve32x
csrwi vxrm, 0
1:
vsetvli t0, a3, e32, m4, ta, ma
vle32.v v16, (a1)
sub a3, a3, t0
vle32.v v24, (a2)
sh2add a1, t0, a1
vsmul.vv v8, v16, v24
sh2add a2, t0, a2
vse32.v v8, (a0)
sh2add a0, t0, a0
bnez a3, 1b
ret
endfunc
func ff_vector_fmul_reverse_fixed_rvv, zve32x
csrwi vxrm, 0
vsetvli t0, zero, e16, m4, ta, ma