[FFmpeg-devel] [PATCH 4/4] lavc/bswapdsp: RISC-V V bswap16_buf
remi at remlab.net
remi at remlab.net
Sun Oct 2 14:55:01 EEST 2022
From: Rémi Denis-Courmont <remi at remlab.net>
---
libavcodec/riscv/bswapdsp_init.c | 5 ++++-
libavcodec/riscv/bswapdsp_rvv.S | 17 +++++++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/libavcodec/riscv/bswapdsp_init.c b/libavcodec/riscv/bswapdsp_init.c
index c17b6b75bb..abe84ec1f7 100644
--- a/libavcodec/riscv/bswapdsp_init.c
+++ b/libavcodec/riscv/bswapdsp_init.c
@@ -27,6 +27,7 @@
void ff_bswap32_buf_rvb(uint32_t *dst, const uint32_t *src, int len);
void ff_bswap32_buf_rvv(uint32_t *dst, const uint32_t *src, int len);
+void ff_bswap16_buf_rvv(uint16_t *dst, const uint16_t *src, int len);
av_cold void ff_bswapdsp_init_riscv(BswapDSPContext *c)
{
@@ -37,7 +38,9 @@ av_cold void ff_bswapdsp_init_riscv(BswapDSPContext *c)
c->bswap_buf = ff_bswap32_buf_rvb;
#endif
#if HAVE_RVV
- if (cpu_flags & AV_CPU_FLAG_RVV_I32)
+ if (cpu_flags & AV_CPU_FLAG_RVV_I32) {
c->bswap_buf = ff_bswap32_buf_rvv;
+ c->bswap16_buf = ff_bswap16_buf_rvv;
+ }
#endif
}
diff --git a/libavcodec/riscv/bswapdsp_rvv.S b/libavcodec/riscv/bswapdsp_rvv.S
index 7ea747b3ce..ef2999c1be 100644
--- a/libavcodec/riscv/bswapdsp_rvv.S
+++ b/libavcodec/riscv/bswapdsp_rvv.S
@@ -43,3 +43,20 @@ func ff_bswap32_buf_rvv, zve32x
ret
endfunc
+
+func ff_bswap16_buf_rvv, zve32x
+ li t2, 2
+ addi t1, a0, 1
+1:
+ vsetvli t0, a2, e8, m1, ta, ma
+ vlseg2e8.v v8, (a1)
+ sub a2, a2, t0
+ sh1add a1, t0, a1
+ vsse8.v v8, (t1), t2
+ sh1add t1, t0, t1
+ vsse8.v v9, (a0), t2
+ sh1add a0, t0, a0
+ bnez a2, 1b
+
+ ret
+endfunc
--
2.37.2
More information about the ffmpeg-devel
mailing list