lavc/sbrdsp: R-V V sum_square

sum_square_c:       803.5
sum_square_rvv_f32: 283.2
This commit is contained in:
Rémi Denis-Courmont 2023-10-29 18:10:07 +02:00
parent 86bee42473
commit b0aba7dd0c
2 changed files with 21 additions and 0 deletions

View File

@ -24,6 +24,7 @@
#include "libavcodec/sbrdsp.h"
void ff_sbr_sum64x5_rvv(float *z);
float ff_sbr_sum_square_rvv(float (*x)[2], int n);
av_cold void ff_sbrdsp_init_riscv(SBRDSPContext *c)
{
@ -32,6 +33,7 @@ av_cold void ff_sbrdsp_init_riscv(SBRDSPContext *c)
if ((flags & AV_CPU_FLAG_RVV_F32) && (flags & AV_CPU_FLAG_RVB_ADDR)) {
c->sum64x5 = ff_sbr_sum64x5_rvv;
c->sum_square = ff_sbr_sum_square_rvv;
}
#endif
}

View File

@ -48,3 +48,22 @@ func ff_sbr_sum64x5_rvv, zve32f
ret
endfunc
func ff_sbr_sum_square_rvv, zve32f
vsetvli t0, zero, e32, m8, ta, ma
slli a1, a1, 1
vmv.v.x v8, zero
vmv.s.x v0, zero
1:
vsetvli t0, a1, e32, m8, tu, ma
vle32.v v16, (a0)
sub a1, a1, t0
vfmacc.vv v8, v16, v16
sh2add a0, t0, a0
bnez a1, 1b
vfredusum.vs v0, v8, v0
vfmv.f.s fa0, v0
NOHWF fmv.x.w a0, fa0
ret
endfunc