diff options
author | RĂ©mi Denis-Courmont <remi@remlab.net> | 2022-10-02 14:55:01 +0300 |
---|---|---|
committer | Lynne <dev@lynne.ee> | 2022-10-05 08:26:19 +0200 |
commit | 2abafd7307d5ba31cc6492539caf0da15dd808a5 (patch) | |
tree | c59f97a721580cacf4c277b3b22bc13216b9612b /libavcodec/riscv | |
parent | d7528af4df169dea0af080f33e41f292a6eba99c (diff) | |
download | ffmpeg-2abafd7307d5ba31cc6492539caf0da15dd808a5.tar.gz |
lavc/bswapdsp: RISC-V V bswap16_buf
Diffstat (limited to 'libavcodec/riscv')
-rw-r--r-- | libavcodec/riscv/bswapdsp_init.c | 5 | ||||
-rw-r--r-- | libavcodec/riscv/bswapdsp_rvv.S | 17 |
2 files changed, 21 insertions, 1 deletions
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 |