Message ID | 20221002115501.17996-4-remi@remlab.net |
---|---|
State | Accepted |
Commit | 2abafd7307d5ba31cc6492539caf0da15dd808a5 |
Headers | show |
Series | RISC-V initial bswapdsp | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
Oct 2, 2022, 13:55 by remi@remlab.net: > From: Rémi Denis-Courmont <remi@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 > Pushed patchset with a minor bump and apichanges Thanks
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
From: Rémi Denis-Courmont <remi@remlab.net> --- libavcodec/riscv/bswapdsp_init.c | 5 ++++- libavcodec/riscv/bswapdsp_rvv.S | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-)