• James Cowgill's avatar
    avcodec/arm/sbcenc: avoid callee preserved vfp registers · 50a4dff6
    James Cowgill authored
    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: 's avatarJames Cowgill <jcowgill@debian.org>
    Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
    50a4dff6
sbcdsp_neon.S 24.9 KB