Since the horizontal and vertical filters are identical except for a transposition, this uses a common subprocedure with an ad-hoc ABI. To preserve return-address stack prediction, a link register has to be used (c.f. the "Control Transfer Instructions" from the RISC-V ISA Manual). The alternate/temporary link register T0 is used here, so that the normal RA is preserved (something Arm cannot do!). To load the strength value based on `qscale`, the shortest possible and PIC-compatible sequence is used: AUIPC; ADD; LBU. The classic LLA; ADD; LBU sequence would add one more instruction since LLA is a convenience alias for AUIPC; ADDI. To ensure that this trick works, relocation relaxation is disabled. To implement the two signed divisions by a power of two toward zero: (x / (1 << SHIFT)) the code relies on the small range of integers involved, computing: (x + (x >> (16 - SHIFT))) >> SHIFT rather than the more general: (x + ((x >> (16 - 1)) & ((1 << SHIFT) - 1))) >> SHIFT Thus one ANDI instruction is avoided. T-Head C908: h263dsp.h_loop_filter_c: 228.2 h263dsp.h_loop_filter_rvv_i32: 144.0 h263dsp.v_loop_filter_c: 242.7 h263dsp.v_loop_filter_rvv_i32: 114.0 (C is probably worse in real use due to less predictible branches.)
77 lines
3.9 KiB
Makefile
77 lines
3.9 KiB
Makefile
OBJS-$(CONFIG_AAC_DECODER) += riscv/aacpsdsp_init.o riscv/sbrdsp_init.o
|
|
RVV-OBJS-$(CONFIG_AAC_DECODER) += riscv/aacpsdsp_rvv.o riscv/sbrdsp_rvv.o
|
|
OBJS-$(CONFIG_AAC_ENCODER) += riscv/aacencdsp_init.o
|
|
RVV-OBJS-$(CONFIG_AAC_ENCODER) += riscv/aacencdsp_rvv.o
|
|
OBJS-$(CONFIG_AC3DSP) += riscv/ac3dsp_init.o
|
|
RV-OBJS-$(CONFIG_AC3DSP) += riscv/ac3dsp_rvb.o
|
|
RVV-OBJS-$(CONFIG_AC3DSP) += riscv/ac3dsp_rvv.o
|
|
RVVB-OBJS-$(CONFIG_AC3DSP) += riscv/ac3dsp_rvvb.o
|
|
OBJS-$(CONFIG_ALAC_DECODER) += riscv/alacdsp_init.o
|
|
RVV-OBJS-$(CONFIG_ALAC_DECODER) += riscv/alacdsp_rvv.o
|
|
OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_init.o
|
|
RV-OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_rvf.o
|
|
RVV-OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_rvv.o
|
|
OBJS-$(CONFIG_BLOCKDSP) += riscv/blockdsp_init.o
|
|
RVV-OBJS-$(CONFIG_BLOCKDSP) += riscv/blockdsp_rvv.o
|
|
OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_init.o
|
|
RV-OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_rvb.o
|
|
RVV-OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_rvv.o
|
|
OBJS-$(CONFIG_EXR_DECODER) += riscv/exrdsp_init.o
|
|
RVV-OBJS-$(CONFIG_EXR_DECODER) += riscv/exrdsp_rvv.o
|
|
OBJS-$(CONFIG_FLAC_DECODER) += riscv/flacdsp_init.o
|
|
RVV-OBJS-$(CONFIG_FLAC_DECODER) += riscv/flacdsp_rvv.o
|
|
OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_init.o
|
|
RVV-OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_rvv.o
|
|
OBJS-$(CONFIG_G722DSP) += riscv/g722dsp_init.o
|
|
RVV-OBJS-$(CONFIG_G722DSP) += riscv/g722dsp_rvv.o
|
|
OBJS-$(CONFIG_JPEG2000_DECODER) += riscv/jpeg2000dsp_init.o
|
|
RVV-OBJS-$(CONFIG_JPEG2000_DECODER) += riscv/jpeg2000dsp_rvv.o
|
|
OBJS-$(CONFIG_H263DSP) += riscv/h263dsp_init.o
|
|
RVV-OBJS-$(CONFIG_H263DSP) += riscv/h263dsp_rvv.o
|
|
OBJS-$(CONFIG_H264CHROMA) += riscv/h264_chroma_init_riscv.o
|
|
RVV-OBJS-$(CONFIG_H264CHROMA) += riscv/h264_mc_chroma.o
|
|
OBJS-$(CONFIG_H264DSP) += riscv/h264dsp_init.o
|
|
OBJS-$(CONFIG_HUFFYUV_DECODER) += riscv/huffyuvdsp_init.o
|
|
RVV-OBJS-$(CONFIG_HUFFYUV_DECODER) += riscv/huffyuvdsp_rvv.o
|
|
OBJS-$(CONFIG_IDCTDSP) += riscv/idctdsp_init.o
|
|
RVV-OBJS-$(CONFIG_IDCTDSP) += riscv/idctdsp_rvv.o
|
|
OBJS-$(CONFIG_LLAUDDSP) += riscv/llauddsp_init.o
|
|
RVV-OBJS-$(CONFIG_LLAUDDSP) += riscv/llauddsp_rvv.o
|
|
OBJS-$(CONFIG_LLVIDDSP) += riscv/llviddsp_init.o
|
|
RVV-OBJS-$(CONFIG_LLVIDDSP) += riscv/llviddsp_rvv.o
|
|
OBJS-$(CONFIG_LLVIDENCDSP) += riscv/llvidencdsp_init.o
|
|
RVV-OBJS-$(CONFIG_LLVIDENCDSP) += riscv/llvidencdsp_rvv.o
|
|
OBJS-$(CONFIG_LPC) += riscv/lpc_init.o
|
|
RVV-OBJS-$(CONFIG_LPC) += riscv/lpc_rvv.o
|
|
OBJS-$(CONFIG_ME_CMP) += riscv/me_cmp_init.o
|
|
RVV-OBJS-$(CONFIG_ME_CMP) += riscv/me_cmp_rvv.o
|
|
OBJS-$(CONFIG_OPUS_DECODER) += riscv/opusdsp_init.o
|
|
RVV-OBJS-$(CONFIG_OPUS_DECODER) += riscv/opusdsp_rvv.o
|
|
OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_init.o
|
|
RV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvi.o
|
|
RVV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvv.o
|
|
OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_init.o
|
|
RVV-OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_rvv.o
|
|
OBJS-$(CONFIG_RV40_DECODER) += riscv/rv40dsp_init.o
|
|
RVV-OBJS-$(CONFIG_RV40_DECODER) += riscv/rv40dsp_rvv.o
|
|
RV-OBJS-$(CONFIG_STARTCODE) += riscv/startcode_rvb.o
|
|
RVV-OBJS-$(CONFIG_STARTCODE) += riscv/startcode_rvv.o
|
|
OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_init.o
|
|
RVV-OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_rvv.o
|
|
OBJS-$(CONFIG_TAK_DECODER) += riscv/takdsp_init.o
|
|
RVV-OBJS-$(CONFIG_TAK_DECODER) += riscv/takdsp_rvv.o
|
|
OBJS-$(CONFIG_UTVIDEO_DECODER) += riscv/utvideodsp_init.o
|
|
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_VP8DSP) += riscv/vp8dsp_init.o
|
|
RV-OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_rvi.o
|
|
RVV-OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_rvv.o
|
|
OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9dsp_init.o
|
|
RV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvi.o \
|
|
riscv/vp9_mc_rvi.o
|
|
RVV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvv.o \
|
|
riscv/vp9_mc_rvv.o
|
|
OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_init.o
|
|
RVV-OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_rvv.o
|