mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-01-12 00:06:51 +08:00
lavc/llvidencdsp: R-V V sub_left_predict
SpacemiT X60: sub_left_predict_c: 51836.0 ( 1.00x) sub_left_predict_rvv_i32: 5843.1 ( 8.87x)
This commit is contained in:
@@ -26,6 +26,9 @@
|
||||
|
||||
void ff_llvidenc_diff_bytes_rvv(uint8_t *dst, const uint8_t *src1,
|
||||
const uint8_t *src2, intptr_t w);
|
||||
void ff_llvidenc_sub_left_predict_rvv(uint8_t *dst, const uint8_t *src,
|
||||
ptrdiff_t stride, ptrdiff_t width,
|
||||
int height);
|
||||
|
||||
av_cold void ff_llvidencdsp_init_riscv(LLVidEncDSPContext *c)
|
||||
{
|
||||
@@ -34,6 +37,7 @@ av_cold void ff_llvidencdsp_init_riscv(LLVidEncDSPContext *c)
|
||||
|
||||
if (flags & AV_CPU_FLAG_RVV_I32) {
|
||||
c->diff_bytes = ff_llvidenc_diff_bytes_rvv;
|
||||
c->sub_left_predict = ff_llvidenc_sub_left_predict_rvv;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -36,3 +36,30 @@ func ff_llvidenc_diff_bytes_rvv, zve32x
|
||||
|
||||
ret
|
||||
endfunc
|
||||
|
||||
func ff_llvidenc_sub_left_predict_rvv, zve32x
|
||||
lpad 0
|
||||
li a5, -0x80
|
||||
sub a2, a2, a3
|
||||
1:
|
||||
mv t3, a3
|
||||
addi a4, a4, -1
|
||||
2:
|
||||
vsetvli t0, t3, e8, m8, ta, ma
|
||||
vle8.v v16, (a1)
|
||||
sub t3, t3, t0
|
||||
vle8.v v8, (a0)
|
||||
add a1, a1, t0
|
||||
vslide1up.vx v24, v16, a5
|
||||
vadd.vv v8, v8, v16
|
||||
lb a5, -1(a1)
|
||||
vsub.vv v8, v8, v24
|
||||
vse8.v v8, (a0)
|
||||
add a0, a0, t0
|
||||
bnez t3, 2b
|
||||
|
||||
add a1, a1, a2
|
||||
bnez a4, 1b
|
||||
|
||||
ret
|
||||
endfunc
|
||||
|
||||
Reference in New Issue
Block a user