mirror of https://git.ffmpeg.org/ffmpeg.git
lavc/videodsp: RISC-V zicbop prefetch
There are currently no ways to run-time detect the CPU capability, so we take it for granted (in the worst case, it will execute NOPs).
This commit is contained in:
parent
4570b9f3c4
commit
262168b04e
|
@ -67,6 +67,8 @@ RVV-OBJS-$(CONFIG_UTVIDEO_DECODER) += riscv/utvideodsp_rvv.o
|
|||
OBJS-$(CONFIG_VC1DSP) += riscv/vc1dsp_init.o
|
||||
RV-OBJS-$(CONFIG_VC1DSP) += riscv/vc1dsp_rvi.o
|
||||
RVV-OBJS-$(CONFIG_VC1DSP) += riscv/vc1dsp_rvv.o
|
||||
OBJS-$(CONFIG_VIDEODSP) += riscv/videodsp_init.o
|
||||
RV-OBJS-$(CONFIG_VIDEODSP) += riscv/videodsp.o
|
||||
OBJS-$(CONFIG_VP7_DECODER) += riscv/vp7dsp_init.o
|
||||
RVV-OBJS-$(CONFIG_VP7_DECODER) += riscv/vp7dsp_rvv.o
|
||||
OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_init.o
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright © 2022 Rémi Denis-Courmont.
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "libavutil/riscv/asm.S"
|
||||
|
||||
#if HAVE_RV_ZICBOP
|
||||
func ff_prefetch_rv_zicbop, zicbop
|
||||
1:
|
||||
addi a2, a2, -1
|
||||
prefetch.r (a0)
|
||||
add a0, a0, a1
|
||||
bnez a2, 1b
|
||||
|
||||
ret
|
||||
endfunc
|
||||
#endif
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "libavutil/attributes.h"
|
||||
#include "libavutil/cpu.h"
|
||||
#include "libavcodec/videodsp.h"
|
||||
|
||||
void ff_prefetch_rv_zicbop(const uint8_t *mem, ptrdiff_t stride, int h);
|
||||
|
||||
av_cold void ff_videodsp_init_riscv(VideoDSPContext *ctx, int bpc)
|
||||
{
|
||||
#if HAVE_RV_ZICBOP
|
||||
/* TODO: Since we pay for the indirect function call anyway, we should
|
||||
* only set this if Cache-Block Operation Prefetch (Zicbop) is actually
|
||||
* supported and otherwise save a few cycles of NOPs.
|
||||
* But so far there are no means to detect Zicbop (in user mode).
|
||||
*/
|
||||
ctx->prefetch = ff_prefetch_rv_zicbop;
|
||||
#endif
|
||||
}
|
|
@ -51,6 +51,8 @@ av_cold void ff_videodsp_init(VideoDSPContext *ctx, int bpc)
|
|||
ff_videodsp_init_arm(ctx, bpc);
|
||||
#elif ARCH_PPC
|
||||
ff_videodsp_init_ppc(ctx, bpc);
|
||||
#elif ARCH_RISCV
|
||||
ff_videodsp_init_riscv(ctx, bpc);
|
||||
#elif ARCH_X86
|
||||
ff_videodsp_init_x86(ctx, bpc);
|
||||
#elif ARCH_MIPS
|
||||
|
|
|
@ -81,6 +81,7 @@ void ff_videodsp_init(VideoDSPContext *ctx, int bpc);
|
|||
void ff_videodsp_init_aarch64(VideoDSPContext *ctx, int bpc);
|
||||
void ff_videodsp_init_arm(VideoDSPContext *ctx, int bpc);
|
||||
void ff_videodsp_init_ppc(VideoDSPContext *ctx, int bpc);
|
||||
void ff_videodsp_init_riscv(VideoDSPContext *ctx, int bpc);
|
||||
void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc);
|
||||
void ff_videodsp_init_mips(VideoDSPContext *ctx, int bpc);
|
||||
void ff_videodsp_init_loongarch(VideoDSPContext *ctx, int bpc);
|
||||
|
|
Loading…
Reference in New Issue