Files
FFmpeg/libavcodec/aarch64/Makefile
T
Gyula Sebok ea4162f223 avcodec/aarch64: Add NEON llviddsp left and gradient prediction
Like the x86 versions, these may read and write past the end, here by
up to 15 bytes. The main loops process eight vectors per iteration;
with four, the in-order Cortex-A510 stalls on the latency of the prefix
sums, and add_left_pred_int16 was only 1.25x faster than C there.

checkasm --bench (CPU cycles via perf), seed 12345 (width 983), on a
Dimensity 9000:

                            Cortex-X2      Cortex-A710    Cortex-A510
add_gradient_pred_c:         2138.4         2183.6         4450.3
add_gradient_pred_neon:       225.7 (9.48x)  380.3 (5.74x)  711.6 (6.25x)
add_left_pred_int16_c:       1926.4         1941.4         2112.0
add_left_pred_int16_neon:     370.6 (5.20x)  630.6 (3.08x) 1058.6 (2.00x)
add_left_pred_rnd_acc_c:     1056.5         1029.6         1743.4
add_left_pred_rnd_acc_neon:   201.9 (5.23x)  347.5 (2.96x)  585.2 (2.98x)
add_left_pred_zero_c:        1056.0         1029.2         1742.3
add_left_pred_zero_neon:      201.8 (5.23x)  347.5 (2.96x)  585.2 (2.98x)

and on a Google Tensor (Pixel 6a):

                            Cortex-X1      Cortex-A76     Cortex-A55
add_gradient_pred_c:         2137.4         2848.2         6892.2
add_gradient_pred_neon:       238.2 (8.97x)  408.2 (6.98x) 1117.5 (6.17x)
add_left_pred_int16_c:       1935.0         2177.2         3950.8
add_left_pred_int16_neon:     398.0 (4.86x)  664.4 (3.28x) 1690.0 (2.34x)
add_left_pred_rnd_acc_c:     1059.7         1533.9         2967.1
add_left_pred_rnd_acc_neon:   214.5 (4.94x)  378.2 (4.06x)  925.4 (3.21x)
add_left_pred_zero_c:        1059.8         1533.9         2967.1
add_left_pred_zero_neon:      214.5 (4.94x)  378.2 (4.06x)  925.4 (3.21x)

Signed-off-by: Gyula Sebok <gyula.sbk@gmail.com>
2026-11-03 18:33:02 +00:00

98 lines
6.1 KiB
Makefile

# subsystems
OBJS-$(CONFIG_AC3DSP) += aarch64/ac3dsp_init_aarch64.o
OBJS-$(CONFIG_AUDIODSP) += aarch64/audiodsp_init.o
OBJS-$(CONFIG_FDCTDSP) += aarch64/fdctdsp_init_aarch64.o
OBJS-$(CONFIG_H264CHROMA) += aarch64/h264chroma_init_aarch64.o
OBJS-$(CONFIG_H264DSP) += aarch64/h264dsp_init_aarch64.o
OBJS-$(CONFIG_HUFFYUVDSP) += aarch64/huffyuvdsp_init_aarch64.o
OBJS-$(CONFIG_H264PRED) += aarch64/h264pred_init.o
OBJS-$(CONFIG_H264QPEL) += aarch64/h264qpel_init_aarch64.o
OBJS-$(CONFIG_HPELDSP) += aarch64/hpeldsp_init_aarch64.o
OBJS-$(CONFIG_IDCTDSP) += aarch64/idctdsp_init_aarch64.o
OBJS-$(CONFIG_LLVIDDSP) += aarch64/lossless_videodsp_init.o
OBJS-$(CONFIG_ME_CMP) += aarch64/me_cmp_init_aarch64.o
OBJS-$(CONFIG_MPEGAUDIODSP) += aarch64/mpegaudiodsp_init.o
OBJS-$(CONFIG_MPEGVIDEOENCDSP) += aarch64/mpegvideoencdsp_init.o
OBJS-$(CONFIG_NEON_CLOBBER_TEST) += aarch64/neontest.o
OBJS-$(CONFIG_PIXBLOCKDSP) += aarch64/pixblockdsp_init_aarch64.o
OBJS-$(CONFIG_APNG_DECODER) += aarch64/pngdsp_init.o
OBJS-$(CONFIG_LSCR_DECODER) += aarch64/pngdsp_init.o
OBJS-$(CONFIG_PNG_DECODER) += aarch64/pngdsp_init.o
OBJS-$(CONFIG_VIDEODSP) += aarch64/videodsp_init.o
OBJS-$(CONFIG_VP8DSP) += aarch64/vp8dsp_init_aarch64.o
# decoders/encoders
OBJS-$(CONFIG_AAC_DECODER) += aarch64/aacpsdsp_init_aarch64.o \
aarch64/sbrdsp_init_aarch64.o
OBJS-$(CONFIG_AAC_ENCODER) += aarch64/aacencdsp_init.o
OBJS-$(CONFIG_APV_DECODER) += aarch64/apv_dsp_init_aarch64.o
OBJS-$(CONFIG_BITPACKED_DECODER) += aarch64/bitpacked_init_aarch64.o
OBJS-$(CONFIG_DCA_DECODER) += aarch64/dcadsp_init_aarch64.o \
aarch64/synth_filter_init.o
OBJS-$(CONFIG_OPUS_DECODER) += aarch64/opusdsp_init.o
OBJS-$(CONFIG_RV40_DECODER) += aarch64/rv40dsp_init_aarch64.o
OBJS-$(CONFIG_VC1DSP) += aarch64/vc1dsp_init_aarch64.o
OBJS-$(CONFIG_VORBIS_DECODER) += aarch64/vorbisdsp_init.o
OBJS-$(CONFIG_VP9_DECODER) += aarch64/vp9dsp_init_10bpp_aarch64.o \
aarch64/vp9dsp_init_12bpp_aarch64.o \
aarch64/vp9mc_aarch64.o \
aarch64/vp9dsp_init_aarch64.o
# ARMv8 optimizations
# subsystems
ARMV8-OBJS-$(CONFIG_VIDEODSP) += aarch64/videodsp.o
# NEON optimizations
# subsystems
NEON-OBJS-$(CONFIG_AAC_DECODER) += aarch64/sbrdsp_neon.o
NEON-OBJS-$(CONFIG_AAC_ENCODER) += aarch64/aacencdsp_neon.o
NEON-OBJS-$(CONFIG_AC3DSP) += aarch64/ac3dsp_neon.o
NEON-OBJS-$(CONFIG_AUDIODSP) += aarch64/audiodsp_neon.o
NEON-OBJS-$(CONFIG_FDCTDSP) += aarch64/fdctdsp_neon.o
NEON-OBJS-$(CONFIG_H264CHROMA) += aarch64/h264cmc_neon.o
NEON-OBJS-$(CONFIG_H264DSP) += aarch64/h264dsp_neon.o \
aarch64/h264idct_neon.o
NEON-OBJS-$(CONFIG_H264PRED) += aarch64/h264pred_neon.o
NEON-OBJS-$(CONFIG_H264QPEL) += aarch64/h264qpel_neon.o \
aarch64/hpeldsp_neon.o
NEON-OBJS-$(CONFIG_HPELDSP) += aarch64/hpeldsp_neon.o
NEON-OBJS-$(CONFIG_HUFFYUVDSP) += aarch64/huffyuvdsp_neon.o
NEON-OBJS-$(CONFIG_IDCTDSP) += aarch64/idctdsp_neon.o \
aarch64/simple_idct_neon.o
NEON-OBJS-$(CONFIG_LLVIDDSP) += aarch64/lossless_videodsp_neon.o
NEON-OBJS-$(CONFIG_ME_CMP) += aarch64/me_cmp_neon.o
NEON-OBJS-$(CONFIG_MPEGAUDIODSP) += aarch64/mpegaudiodsp_neon.o
NEON-OBJS-$(CONFIG_MPEGVIDEOENCDSP) += aarch64/mpegvideoencdsp_neon.o
NEON-OBJS-$(CONFIG_PIXBLOCKDSP) += aarch64/pixblockdsp_neon.o
NEON-OBJS-$(CONFIG_APNG_DECODER) += aarch64/pngdsp_neon.o
NEON-OBJS-$(CONFIG_LSCR_DECODER) += aarch64/pngdsp_neon.o
NEON-OBJS-$(CONFIG_PNG_DECODER) += aarch64/pngdsp_neon.o
NEON-OBJS-$(CONFIG_VC1DSP) += aarch64/vc1dsp_neon.o
NEON-OBJS-$(CONFIG_VP8DSP) += aarch64/vp8dsp_neon.o
# decoders/encoders
NEON-OBJS-$(CONFIG_AAC_DECODER) += aarch64/aacpsdsp_neon.o
NEON-OBJS-$(CONFIG_APV_DECODER) += aarch64/apv_dsp_neon.o
NEON-OBJS-$(CONFIG_BITPACKED_DECODER) += aarch64/bitpacked_neon.o
NEON-OBJS-$(CONFIG_DCA_DECODER) += aarch64/dcadsp_neon.o \
aarch64/synth_filter_neon.o
NEON-OBJS-$(CONFIG_OPUS_DECODER) += aarch64/opusdsp_neon.o
NEON-OBJS-$(CONFIG_VORBIS_DECODER) += aarch64/vorbisdsp_neon.o
NEON-OBJS-$(CONFIG_VP9_DECODER) += aarch64/vp9itxfm_16bpp_neon.o \
aarch64/vp9itxfm_neon.o \
aarch64/vp9lpf_16bpp_neon.o \
aarch64/vp9lpf_neon.o \
aarch64/vp9mc_16bpp_neon.o \
aarch64/vp9mc_neon.o
NEON-OBJS-$(CONFIG_HEVC_DECODER) += aarch64/hevcdsp_deblock_neon.o \
aarch64/hevcdsp_dequant_neon.o \
aarch64/hevcdsp_idct_neon.o \
aarch64/hevcdsp_init_aarch64.o \
aarch64/hevcpred_neon.o \
aarch64/hevcpred_init_aarch64.o \
aarch64/h26x/epel_neon.o \
aarch64/h26x/qpel_neon.o \
aarch64/h26x/sao_neon.o