aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Denis-Courmont <remi@remlab.net>2023-11-19 14:49:28 +0200
committerRémi Denis-Courmont <remi@remlab.net>2023-11-23 18:57:18 +0200
commitb88d4058f95de7ebf8322358d2e72cbeaffec49e (patch)
tree6c9455528ce5acde3db1f6532e3b5c5b0af3fa73
parente33ce0d9dd8136d9d1a5eb17863c2f6d4d5f131f (diff)
downloadffmpeg-b88d4058f95de7ebf8322358d2e72cbeaffec49e.tar.gz
lavc/g722dsp: optimise R-V V apply_qmf
This stores the constant coefficients deinterleaved, so that they can be loaded directly with NF=0. Unfortunately, we cannot optimise loading the input, due to insufficient memory alignment (not 32-bit). Before: g722_apply_qmf_c: 82.5 g722_apply_qmf_rvv_i32: 78.2 After: g722_apply_qmf_c: 82.5 g722_apply_qmf_rvv_i32: 65.2
-rw-r--r--libavcodec/riscv/g722dsp_rvv.S24
1 files changed, 13 insertions, 11 deletions
diff --git a/libavcodec/riscv/g722dsp_rvv.S b/libavcodec/riscv/g722dsp_rvv.S
index 350be8dc1f..981d5cecd8 100644
--- a/libavcodec/riscv/g722dsp_rvv.S
+++ b/libavcodec/riscv/g722dsp_rvv.S
@@ -24,7 +24,9 @@ func ff_g722_apply_qmf_rvv, zve32x
lla t0, qmf_coeffs
vsetivli zero, 12, e16, m2, ta, ma
vlseg2e16.v v28, (a0)
- vlseg2e16.v v24, (t0)
+ addi t1, t0, 12 * 2
+ vle16.v v24, (t0)
+ vle16.v v26, (t1)
vwmul.vv v16, v28, v24
vwmul.vv v20, v30, v26
vsetivli zero, 12, e32, m4, ta, ma
@@ -41,26 +43,26 @@ endfunc
const qmf_coeffs, align=2
.short 3
.short -11
- .short -11
- .short 53
.short 12
- .short -156
.short 32
- .short 362
.short -210
- .short -805
.short 951
.short 3876
- .short 3876
- .short 951
.short -805
- .short -210
.short 362
- .short 32
.short -156
- .short 12
.short 53
.short -11
.short -11
+ .short 53
+ .short -156
+ .short 362
+ .short -805
+ .short 3876
+ .short 951
+ .short -210
+ .short 32
+ .short 12
+ .short -11
.short 3
endconst