mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
x86inc: Avoid using eax/rax for storing the stack pointer
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.
This commit is contained in:
parent
0e8b68a2c4
commit
cd09e3b349
@ -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
|
%ifnum %1
|
||||||
%if %1 != 0 && required_stack_alignment > STACK_ALIGNMENT
|
%if %1 != 0 && required_stack_alignment > STACK_ALIGNMENT
|
||||||
%if %1 > 0
|
%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)
|
%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
|
%endif
|
||||||
%if ARCH_X86_64 && regs_used < 5 + UNIX64 * 3
|
%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)
|
; Ensure that we don't clobber any registers containing arguments. For UNIX64 we also preserve r6 (rax)
|
||||||
|
Loading…
Reference in New Issue
Block a user