1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00
FFmpeg/libavcodec/aarch64
Martin Storsjö 78db8405c0 aarch64: hevc: Don't iterate with sp in ff_hevc_put_hevc_qpel_uni_w_hv32/64_8_neon_i8mm
Many of the routines within hevcdsp_epel_neon and hevcdsp_qpel_neon
store temporary buffers on the stack. When consuming it,
many of these functions use the stack pointer as incremental pointer
for reading the data (instead of storing it in another register),
which is rather unusual.

Technically, this is fine as long as the pointer remains properly
aligned.

However in the case of ff_hevc_put_hevc_qpel_uni_w_hv64_8_neon_i8mm,
after incrementing sp when reading data (within each 16 pixel
wide stripe) it would then reset the stack pointer back to a lower
value, for reading the next 16 pixel wide stripe, expecting the
data to remain untouched.

This can't be assumed; data on the stack below the stack pointer
can be clobbered (e.g. by a signal handler). Some OS ABIs
allow for a little margin that won't be touched, aka a red zone,
but not all do. The ones that do, guarantee 16 or 128 bytes, not
9 KB.

Convert this function to use a separate pointer register to
iterate through the data, retaining the stack pointer to point
at the bottom of the data we require to remain untouched.

Signed-off-by: Martin Storsjö <martin@martin.st>
2024-03-26 08:57:55 +02:00
..
aacpsdsp_init_aarch64.c
aacpsdsp_neon.S aarch64: Reindent all assembly to 8/24 column indentation 2023-10-21 23:25:54 +03:00
cabac.h
fmtconvert_init.c avcodec/fmtconvert: Remove unused AVCodecContext parameter 2022-09-21 20:26:40 +02:00
fmtconvert_neon.S
h264chroma_init_aarch64.c avcodec/h264chroma: Constify src in h264_chroma_mc_func 2022-08-05 03:02:13 +02:00
h264cmc_neon.S aarch64: Lowercase UXTW/SXTW and similar flags 2023-10-21 23:25:23 +03:00
h264dsp_init_aarch64.c
h264dsp_neon.S aarch64: Make the indentation more consistent 2023-10-21 23:25:29 +03:00
h264idct_neon.S aarch64: Lowercase UXTW/SXTW and similar flags 2023-10-21 23:25:23 +03:00
h264pred_init.c
h264pred_neon.S
h264qpel_init_aarch64.c lavc/aarch64: h264qpel, add 10-bit lowpass_8_10 based functions 2023-12-07 23:20:14 +02:00
h264qpel_neon.S lavc/aarch64: h264qpel, add 10-bit lowpass_8_10 based functions 2023-12-07 23:20:14 +02:00
hevcdsp_deblock_neon.S avcodec/aarch64/hevc: add luma deblock NEON 2024-02-28 10:14:58 +01:00
hevcdsp_epel_neon.S aarch64: Fix ff_hevc_put_hevc_epel_h48_8_neon_i8mm 2024-03-14 13:42:39 +01:00
hevcdsp_idct_neon.S aarch64: Make the indentation more consistent 2023-10-21 23:25:29 +03:00
hevcdsp_init_aarch64.c aarch64: hevc: Reorder a misplaced function init line 2024-03-26 08:57:50 +02:00
hevcdsp_qpel_neon.S aarch64: hevc: Don't iterate with sp in ff_hevc_put_hevc_qpel_uni_w_hv32/64_8_neon_i8mm 2024-03-26 08:57:55 +02:00
hevcdsp_sao_neon.S aarch64: Implement stack spilling in a consistent way. 2022-10-11 09:12:02 +02:00
hpeldsp_init_aarch64.c
hpeldsp_neon.S aarch64: Consistently use lowercase for vector element specifiers 2023-10-21 23:25:18 +03:00
idct.h
idctdsp_init_aarch64.c avcodec/idctdsp: Arm 64-bit NEON block add and clamp fast paths 2022-04-01 10:03:34 +03:00
idctdsp_neon.S avcodec/idctdsp: Arm 64-bit NEON block add and clamp fast paths 2022-04-01 10:03:34 +03:00
Makefile avcodec: Remove DCT, FFT, MDCT and RDFT 2023-10-01 02:25:09 +02:00
me_cmp_init_aarch64.c lavc/aarch64: Add neon implementation for vsse_intra8 2022-10-04 13:24:20 +03:00
me_cmp_neon.S aarch64: Consistently use lowercase for vector element specifiers 2023-10-21 23:25:18 +03:00
mpegaudiodsp_init.c
mpegaudiodsp_neon.S lavc/hevcdsp_qpel_neon: using movi.16b instead of movi.2d 2023-11-28 15:54:49 +02:00
neon.S aarch64: Consistently use lowercase for vector element specifiers 2023-10-21 23:25:18 +03:00
neontest.c
opusdsp_init.c
opusdsp_neon.S aarch64: Reindent all assembly to 8/24 column indentation 2023-10-21 23:25:54 +03:00
pixblockdsp_init_aarch64.c
pixblockdsp_neon.S
rv40dsp_init_aarch64.c avcodec/h264chroma: Constify src in h264_chroma_mc_func 2022-08-05 03:02:13 +02:00
sbrdsp_init_aarch64.c
sbrdsp_neon.S aarch64: Consistently use lowercase for vector element specifiers 2023-10-21 23:25:18 +03:00
simple_idct_neon.S aarch64: Consistently use lowercase for vector element specifiers 2023-10-21 23:25:18 +03:00
synth_filter_init.c avcodec: Remove DCT, FFT, MDCT and RDFT 2023-10-01 02:25:09 +02:00
synth_filter_neon.S avcodec: Remove DCT, FFT, MDCT and RDFT 2023-10-01 02:25:09 +02:00
vc1dsp_init_aarch64.c avcodec/h264chroma: Constify src in h264_chroma_mc_func 2022-08-05 03:02:13 +02:00
vc1dsp_neon.S avcodec/vc1: Arm 64-bit NEON unescape fast path 2022-04-01 10:03:34 +03:00
videodsp_init.c avcodec/videodsp: Constify buf in VideoDSPContext.prefetch 2022-07-31 03:14:34 +02:00
videodsp.S
vorbisdsp_init.c lavc/vorbisdsp: use ptrdiff_t rather than intptr_t 2022-09-19 13:51:00 -03:00
vorbisdsp_neon.S
vp8dsp_init_aarch64.c
vp8dsp_neon.S aarch64: Make the indentation more consistent 2023-10-21 23:25:29 +03:00
vp8dsp.h avcodec/vp8dsp: Constify src in vp8_mc_func 2022-09-11 20:57:51 +02:00
vp9dsp_init_10bpp_aarch64.c
vp9dsp_init_12bpp_aarch64.c
vp9dsp_init_16bpp_aarch64_template.c
vp9dsp_init_aarch64.c
vp9dsp_init.h
vp9itxfm_16bpp_neon.S
vp9itxfm_neon.S aarch64: Implement stack spilling in a consistent way. 2022-10-11 09:12:02 +02:00
vp9lpf_16bpp_neon.S aarch64: Implement stack spilling in a consistent way. 2022-10-11 09:12:02 +02:00
vp9lpf_neon.S aarch64: Implement stack spilling in a consistent way. 2022-10-11 09:12:02 +02:00
vp9mc_16bpp_neon.S
vp9mc_aarch64.S
vp9mc_neon.S