[FFmpeg-devel] [libav-devel] [PATCH] x86inc: Avoid using eax/rax for storing the stack pointer

Ronald S. Bultje rsbultje at gmail.com
Mon Dec 26 03:32:32 EET 2016


Hi,

On Sun, Dec 25, 2016 at 2:24 PM, Henrik Gramner <henrik at gramner.com> wrote:

> When allocating stack space with an alignment requirement that is larger
> than the current stack alignment we need to store a copy of the original
> stack pointer in order to be able to restore it later.
>
> If we chose to use another register for this purpose we should not pick
> eax/rax since it can be overwritten as a return value.
> ---
>  libavutil/x86/x86inc.asm | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/libavutil/x86/x86inc.asm b/libavutil/x86/x86inc.asm
> index b2e9c60..128ddc1 100644
> --- a/libavutil/x86/x86inc.asm
> +++ b/libavutil/x86/x86inc.asm
> @@ -385,7 +385,14 @@ DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7,8,9,10,11,12,
> 13,14
>      %ifnum %1
>          %if %1 != 0 && required_stack_alignment > STACK_ALIGNMENT
>              %if %1 > 0
> +                ; Reserve an additional register for storing the original
> stack pointer, but avoid using
> +                ; eax/rax for this purpose since it can potentially get
> overwritten as a return value.
>                  %assign regs_used (regs_used + 1)
> +                %if ARCH_X86_64 && regs_used == 7
> +                    %assign regs_used 8
> +                %elif ARCH_X86_64 == 0 && regs_used == 1
> +                    %assign regs_used 2
> +                %endif
>              %endif
>              %if ARCH_X86_64 && regs_used < 5 + UNIX64 * 3
>                  ; Ensure that we don't clobber any registers containing
> arguments. For UNIX64 we also preserve r6 (rax)
> --
> 2.7.4


I know I'm terribly nitpicking here for the limited scope of the comment,
but this only matters for functions that have a return value. Do you think
it makes sense to allow functions to opt out of this requirement if they
explicitly state to not have a return value?

Ronald


More information about the ffmpeg-devel mailing list