aboutsummaryrefslogtreecommitdiffstats
path: root/libavutil/riscv/float_dsp_rvv.S
diff options
context:
space:
mode:
authorRĂ©mi Denis-Courmont <remi@remlab.net>2022-09-26 17:52:37 +0300
committerLynne <dev@lynne.ee>2022-09-27 13:19:52 +0200
commitb493370662eaa87f84450e876b8b61b34d91f23d (patch)
tree61185b43b398c0ad2b3813e26fbf5148fe594936 /libavutil/riscv/float_dsp_rvv.S
parent9aeb6aca3a9fa8caf8db263de4fa9f8077ba6634 (diff)
downloadffmpeg-b493370662eaa87f84450e876b8b61b34d91f23d.tar.gz
lavu/floatdsp: RISC-V V vector_fmul_window
Diffstat (limited to 'libavutil/riscv/float_dsp_rvv.S')
-rw-r--r--libavutil/riscv/float_dsp_rvv.S33
1 files changed, 33 insertions, 0 deletions
diff --git a/libavutil/riscv/float_dsp_rvv.S b/libavutil/riscv/float_dsp_rvv.S
index fbd2777463..ce530f6108 100644
--- a/libavutil/riscv/float_dsp_rvv.S
+++ b/libavutil/riscv/float_dsp_rvv.S
@@ -74,6 +74,39 @@ NOHWF mv a2, a3
ret
endfunc
+func ff_vector_fmul_window_rvv, zve32f
+ // a0: dst, a1: src0, a2: src1, a3: window, a4: length
+ addi t0, a4, -1
+ add t1, t0, a4
+ sh2add a2, t0, a2
+ sh2add t0, t1, a0
+ sh2add t3, t1, a3
+ li t1, -4 // byte stride
+1:
+ vsetvli t2, a4, e32, m1, ta, ma
+ vle32.v v16, (a1)
+ slli t4, t2, 2
+ vlse32.v v20, (a2), t1
+ sub a4, a4, t2
+ vle32.v v24, (a3)
+ add a1, a1, t4
+ vlse32.v v28, (t3), t1
+ sub a2, a2, t4
+ vfmul.vv v0, v16, v28
+ add a3, a3, t4
+ vfmul.vv v8, v16, v24
+ sub t3, t3, t4
+ vfnmsac.vv v0, v20, v24
+ vfmacc.vv v8, v20, v28
+ vse32.v v0, (a0)
+ add a0, a0, t4
+ vsse32.v v8, (t0), t1
+ sub t0, t0, t4
+ bnez a4, 1b
+
+ ret
+endfunc
+
// (a0) = (a1) * (a2) + (a3) [0..a4-1]
func ff_vector_fmul_add_rvv, zve32f
1: