FFmpeg/libavcodec/arm
James Cowgill aa28df74ab avcodec/arm/sbcenc: avoid callee preserved vfp registers
When compiling FFmpeg with GCC-9, some very random segfaults were
observed in code which had previously called down into the SBC encoder
NEON assembly routines. This was caused by these functions clobbering
some of the vfp callee saved registers (d8 - d15 aka q4 - q7). GCC was
using these registers to save local variables, but after these
functions returned, they would contain garbage.

Fix by reallocating the registers in the two affected functions in
the following way:
 ff_sbc_analyze_4_neon: q2-q5 => q8-q11, then q1-q4 => q8-q11
 ff_sbc_analyze_8_neon: q2-q9 => q8-q15

The reason for using these replacements is to keep closely related
sets of registers consecutively numbered which hopefully makes the
code more easy to follow. Since this commit only reallocates
registers, it should have no performance impact.

Signed-off-by: James Cowgill <jcowgill@debian.org>
Signed-off-by: Martin Storsjö <martin@martin.st>
(cherry picked from commit 50a4dff69f)
Signed-off-by: Martin Storsjö <martin@martin.st>
2022-09-20 11:22:18 +03:00
..
aac.h
aacpsdsp_init_arm.c lavc/aacpsdsp: use ptrdiff_t for stride in hybrid_analysis 2017-06-28 12:22:39 +02:00
aacpsdsp_neon.S lavc/arm: fix lack of precision in ff_ps_stereo_interpolate_neon 2017-06-28 11:59:34 +02:00
ac3dsp_arm.S
ac3dsp_armv6.S
ac3dsp_init_arm.c ac3enc_fixed: drop unnecessary fixed-point DSP code 2021-01-14 01:44:20 +01:00
ac3dsp_neon.S
asm-offsets.h
audiodsp_arm.h
audiodsp_init_arm.c
audiodsp_init_neon.c Merge commit '12004a9a7f20e44f4da2ee6c372d5e1794c8d6c5' 2017-03-20 22:35:07 +01:00
audiodsp_neon.S Merge commit '12004a9a7f20e44f4da2ee6c372d5e1794c8d6c5' 2017-03-20 22:35:07 +01:00
blockdsp_arm.h blockdsp: drop the high_bit_depth parameter 2016-09-22 09:47:52 +02:00
blockdsp_init_arm.c blockdsp: drop the high_bit_depth parameter 2016-09-22 09:47:52 +02:00
blockdsp_init_neon.c lavc/arm: fix indent in blockdsp_init_neon 2017-03-20 19:01:25 +01:00
blockdsp_neon.S
cabac.h
dca.h avcodec/dca: remove old decoder 2016-01-31 17:09:38 +01:00
fft_init_arm.c Merge commit '4c297249ac0f513a610a62691ce96d6b62f65b94' 2016-04-12 15:43:34 +01:00
fft_neon.S
fft_vfp.S
flacdsp_arm.S
flacdsp_init_arm.c
fmtconvert_init_arm.c Merge commit 'b487add7ecf78efda36d49815f8f8757bd24d4cb' 2017-11-11 23:30:31 -03:00
fmtconvert_neon.S Merge commit '90b1b9350c0a97c4065ae9054b83e57f48a0de1f' 2016-01-02 11:21:36 +01:00
fmtconvert_vfp.S
g722dsp_init_arm.c
g722dsp_neon.S
h264chroma_init_arm.c Merge commit 'e4a94d8b36c48d95a7d412c40d7b558422ff659c' 2017-03-21 15:20:45 -03:00
h264cmc_neon.S Merge commit 'e4a94d8b36c48d95a7d412c40d7b558422ff659c' 2017-03-21 15:20:45 -03:00
h264dsp_init_arm.c Merge commit '0676de935b1e81bc5b5698fef3e7d48ff2ea77ff' 2019-03-22 16:06:04 -03:00
h264dsp_neon.S Merge commit '0676de935b1e81bc5b5698fef3e7d48ff2ea77ff' 2019-03-22 16:06:04 -03:00
h264idct_neon.S Merge commit '9dde6ab06c48f9447cd16f39bee33569cddb7be4' 2017-11-11 13:44:07 -03:00
h264pred_init_arm.c Merge commit '256ef19844892c6cf8e0386e3287bae970ec6320' 2015-07-18 02:13:22 +02:00
h264pred_neon.S
h264qpel_init_arm.c
h264qpel_neon.S
hevcdsp_arm.h Merge commit '0b9a237b2386ff84a6f99716bd58fa27a1b767e7' 2017-10-24 19:10:22 -03:00
hevcdsp_deblock_neon.S arm: hevcdsp: Avoid using macro expansion counters 2018-03-31 21:55:32 +03:00
hevcdsp_idct_neon.S arm/hevc_idct: fix compilation on Android 2017-12-09 21:46:34 +02:00
hevcdsp_init_arm.c hevc: Add hevc_get_pixel_4/8/12/16/24/32/48/64 2017-12-08 23:41:01 +02:00
hevcdsp_init_neon.c avcodec/arm/hevcdsp_sao : add NEON optimization for sao 2018-04-09 03:45:15 +02:00
hevcdsp_qpel_neon.S arm: hevcdsp: Add commas between macro arguments 2018-03-31 21:59:01 +03:00
hevcdsp_sao_neon.S lavc/hevcdec: fix the HEVC decoder crash when memory over-read 2020-04-20 10:28:04 +08:00
hpeldsp_arm.h
hpeldsp_arm.S Merge commit '92c5755a185086067fe49e7e64c23a8e7011be31' 2017-03-21 15:10:46 +01:00
hpeldsp_armv6.S
hpeldsp_init_arm.c
hpeldsp_init_armv6.c
hpeldsp_init_neon.c
hpeldsp_neon.S
idct.h Merge commit '2ec9fa5ec60dcd10e1cb10d8b4e4437e634ea428' 2017-03-21 14:29:52 -03:00
idctdsp_arm.h
idctdsp_arm.S idct: Change type of array stride parameters to ptrdiff_t 2016-09-29 14:48:03 +02:00
idctdsp_armv6.S
idctdsp_init_arm.c idct_arm: remove use of ff_put/add_pixels_clamped function pointer. 2017-04-06 10:03:27 -04:00
idctdsp_init_armv5te.c
idctdsp_init_armv6.c idct: Change type of array stride parameters to ptrdiff_t 2016-09-29 14:48:03 +02:00
idctdsp_init_neon.c
idctdsp_neon.S
int_neon.S
jrevdct_arm.S
lossless_audiodsp_init_arm.c
lossless_audiodsp_neon.S
Makefile fft: remove 16-bit FFT and MDCT code 2021-01-14 01:44:21 +01:00
mathops.h
mdct_neon.S
mdct_vfp.S
me_cmp_armv6.S
me_cmp_init_arm.c
mlpdsp_armv5te.S
mlpdsp_armv6.S Merge commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb' 2016-06-21 21:55:34 +02:00
mlpdsp_init_arm.c
mpegaudiodsp_fixed_armv6.S
mpegaudiodsp_init_arm.c Merge commit '2caa93b813adc5dbb7771dfe615da826a2947d18' 2017-03-21 16:04:22 -03:00
mpegvideo_arm.c
mpegvideo_arm.h
mpegvideo_armv5te_s.S
mpegvideo_armv5te.c Merge commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb' 2016-06-21 21:55:34 +02:00
mpegvideo_neon.S
mpegvideoencdsp_armv6.S
mpegvideoencdsp_init_arm.c
neon.S
neontest.c avcodec: add missing FF_API_OLD_ENCDEC wrappers to xmm clobber functions 2021-02-26 19:26:31 -03:00
pixblockdsp_armv6.S
pixblockdsp_init_arm.c libavcodec: arm: Add a NEON implementation of pixblockdsp 2020-05-15 23:37:43 +03:00
pixblockdsp_neon.S libavcodec: arm: Add a NEON implementation of pixblockdsp 2020-05-15 23:37:43 +03:00
rdft_init_arm.c arm/rdft_init: fix license header 2016-04-12 15:01:19 -03:00
rdft_neon.S avcodec/rdft: remove sintable 2017-07-11 13:22:02 +07:00
rv34dsp_init_arm.c
rv34dsp_neon.S
rv40dsp_init_arm.c
rv40dsp_neon.S
sbcdsp_armv6.S sbcenc: add armv6 and neon asm optimizations 2018-03-07 22:26:53 +01:00
sbcdsp_init_arm.c lavu/mem: move the DECLARE_ALIGNED macro family to mem_internal on next+1 bump 2021-01-01 14:14:57 +01:00
sbcdsp_neon.S avcodec/arm/sbcenc: avoid callee preserved vfp registers 2022-09-20 11:22:18 +03:00
sbrdsp_init_arm.c
sbrdsp_neon.S avcodec/arm/sbrdsp_neon: Use a free register instead of putting 2 things in one 2018-01-12 22:45:02 +01:00
simple_idct_arm.S Merge commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb' 2016-06-21 21:55:34 +02:00
simple_idct_armv5te.S Merge commit '014852e932dab6e9cf2a53e7a17ce8321f3e922c' 2017-03-19 16:12:07 +01:00
simple_idct_armv6.S Merge commit '2ec9fa5ec60dcd10e1cb10d8b4e4437e634ea428' 2017-03-21 14:29:52 -03:00
simple_idct_neon.S Merge commit '2ec9fa5ec60dcd10e1cb10d8b4e4437e634ea428' 2017-03-21 14:29:52 -03:00
startcode_armv6.S
startcode.h
synth_filter_init_arm.c avcodec/synth_filter: split off remaining code from dcadec files 2016-01-25 14:57:38 -03:00
synth_filter_neon.S
synth_filter_vfp.S
vc1dsp_init_arm.c
vc1dsp_init_neon.c Merge commit 'd7320ca3ed10f0d35b3740fa03341161e74275ea' 2017-10-30 21:00:51 -03:00
vc1dsp_neon.S Merge commit 'ab05d3934de8e932dbd77979a687e6598e67535c' 2018-03-30 15:47:31 -03:00
vc1dsp.h
videodsp_arm.h
videodsp_armv5te.S arm: use a local label instead of the function symbol in ff_prefetch_arm 2015-07-20 23:10:29 +02:00
videodsp_init_arm.c
videodsp_init_armv5te.c
vorbisdsp_init_arm.c
vorbisdsp_neon.S
vp3dsp_init_arm.c Merge commit '6892df9294d93322d43255ada299507465bc93c8' 2017-03-19 18:41:26 +01:00
vp3dsp_neon.S
vp6dsp_init_arm.c Merge commit '721d57e608dc4fd6c86f27c5ae76ef559d646220' 2017-03-19 17:15:24 -03:00
vp6dsp_neon.S
vp8_armv6.S
vp8.h
vp8dsp_armv6.S Merge commit '802727b538b484e3f9d1345bfcc4ab24cfea8898' 2017-03-19 15:18:31 -03:00
vp8dsp_init_arm.c
vp8dsp_init_armv6.c
vp8dsp_init_neon.c
vp8dsp_neon.S Merge commit 'cef914e08310166112ac09567e66452a7679bfc8' 2019-03-14 16:19:41 -03:00
vp8dsp.h
vp9dsp_init_10bpp_arm.c arm: Add NEON optimizations for 10 and 12 bit vp9 MC 2017-01-24 22:35:50 +02:00
vp9dsp_init_12bpp_arm.c arm: Add NEON optimizations for 10 and 12 bit vp9 MC 2017-01-24 22:35:50 +02:00
vp9dsp_init_16bpp_arm_template.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
vp9dsp_init_arm.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
vp9dsp_init.h vp9: re-split the decoder/format/dsp interface header files. 2017-03-28 18:04:26 -04:00
vp9itxfm_16bpp_neon.S arm: vp9itxfm16: Do a simpler half/quarter idct16/idct32 when possible 2017-03-19 22:54:33 +02:00
vp9itxfm_neon.S arm/aarch64: vp9: Fix vertical alignment 2017-03-19 22:53:32 +02:00
vp9lpf_16bpp_neon.S arm: Add NEON optimizations for 10 and 12 bit vp9 loop filter 2017-01-24 22:35:59 +02:00
vp9lpf_neon.S arm/aarch64: vp9: Fix vertical alignment 2017-03-19 22:53:32 +02:00
vp9mc_16bpp_neon.S arm: Add NEON optimizations for 10 and 12 bit vp9 MC 2017-01-24 22:35:50 +02:00
vp9mc_neon.S arm: vp9mc: Calculate less unused data in the 4 pixel wide horizontal filter 2017-03-11 13:14:47 +02:00
vp56_arith.h