Hi, On Sun, Dec 25, 2016 at 2:24 PM, Henrik Gramner <hen...@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel