This removes the dependency on Zba at essentially zero cost.
Unified · Split
| @@ -33,15 +33,15 @@ av_cold void ff_bswapdsp_init_riscv(BswapDSPContext *c) · 32 unmodified lines | ||
| 33 | 33 | #if HAVE_RV |
| 34 | 34 | int flags = av_get_cpu_flags(); |
| 35 | 35 | |
| 36 | − if (flags & AV_CPU_FLAG_RVB_ADDR) { | |
| 37 | 36 | #if (__riscv_xlen >= 64) |
| 38 | − if (flags & AV_CPU_FLAG_RVB_BASIC) | |
| 39 | − c->bswap_buf = ff_bswap32_buf_rvb; | |
| 37 | + if (flags & AV_CPU_FLAG_RVB_BASIC) | |
| 38 | + c->bswap_buf = ff_bswap32_buf_rvb; | |
| 40 | 39 | #endif |
| 41 | 40 | #if HAVE_RVV |
| 41 | + if (flags & AV_CPU_FLAG_RVB_ADDR) { | |
| 42 | 42 | if (flags & AV_CPU_FLAG_RVV_I32) |
| 43 | 43 | c->bswap16_buf = ff_bswap16_buf_rvv; |
| 44 | −#endif | |
| 45 | 44 | } |
| 46 | 45 | #endif |
| 46 | +#endif | |
| 47 | 47 | } |
| @@ -23,8 +23,9 @@ · 22 unmodified lines | ||
| 23 | 23 | #include "libavutil/riscv/bswap_rvb.S" |
| 24 | 24 | |
| 25 | 25 | #if (__riscv_xlen >= 64) |
| 26 | −func ff_bswap32_buf_rvb, zba, zbb | |
| 26 | +func ff_bswap32_buf_rvb, zbb | |
| 27 | 27 | lpad 0 |
| 28 | + slli a2, a2, 2 | |
| 28 | 29 | bswap32_rvb a0, a1, a2 |
| 29 | 30 | endfunc |
| 30 | 31 | #endif |
| @@ -20,21 +20,21 @@ · 19 unmodified lines | ||
| 20 | 20 | |
| 21 | 21 | #if (__riscv_xlen >= 64) |
| 22 | 22 | .macro bswap32_rvb out, in, count |
| 23 | − andi t0, \count, 4 | |
| 23 | + andi t0, \count, 1 | |
| 24 | 24 | beqz t0, 1f |
| 25 | 25 | /* Align input to 64-bit */ |
| 26 | 26 | lwu t0, (\in) |
| 27 | 27 | addi \out, \out, 4 |
| 28 | 28 | rev8 t0, t0 |
| 29 | − addi \count, \count, -1 | |
| 29 | + addi \count, \count, -4 | |
| 30 | 30 | srli t0, t0, __riscv_xlen - 32 |
| 31 | 31 | addi \in, \in, 4 |
| 32 | 32 | sw t0, -4(\out) |
| 33 | 33 | 1: |
| 34 | − andi t3, \count, -2 | |
| 35 | − sh2add \count, \count, \out | |
| 34 | + andi t3, \count, -8 | |
| 35 | + add \count, \count, \out | |
| 36 | 36 | beqz t3, 3f |
| 37 | − sh2add t3, t3, \out | |
| 37 | + add t3, t3, \out | |
| 38 | 38 | 2: /* 2 elements (64 bits) at a time on a 64-bit boundary */ |
| 39 | 39 | ld t0, (\in) |
| 40 | 40 | addi \out, \out, 8 |
| @@ -46,7 +46,7 @@ av_cold void rgb2rgb_init_riscv(void) · 45 unmodified lines | ||
| 46 | 46 | int flags = av_get_cpu_flags(); |
| 47 | 47 | |
| 48 | 48 | #if (__riscv_xlen == 64) |
| 49 | − if ((flags & AV_CPU_FLAG_RVB_BASIC) && (flags & AV_CPU_FLAG_RVB_ADDR)) | |
| 49 | + if (flags & AV_CPU_FLAG_RVB_BASIC) | |
| 50 | 50 | shuffle_bytes_3210 = ff_shuffle_bytes_3210_rvb; |
| 51 | 51 | #endif |
| 52 | 52 | #if HAVE_RVV |
| @@ -23,9 +23,8 @@ · 22 unmodified lines | ||
| 23 | 23 | #include "libavutil/riscv/bswap_rvb.S" |
| 24 | 24 | |
| 25 | 25 | #if (__riscv_xlen >= 64) |
| 26 | −func ff_shuffle_bytes_3210_rvb, zba, zbb | |
| 26 | +func ff_shuffle_bytes_3210_rvb, zbb | |
| 27 | 27 | lpad 0 |
| 28 | − srli a2, a2, 2 | |
| 29 | 28 | bswap32_rvb a1, a0, a2 |
| 30 | 29 | endfunc |
| 31 | 30 | #endif |