x86: lavr: use the x86inc.asm automatic stack alignment in mixing functions
authorJustin Ruggles <justin.ruggles@gmail.com>
Wed, 2 Jan 2013 18:34:48 +0000 (13:34 -0500)
committerJustin Ruggles <justin.ruggles@gmail.com>
Sat, 5 Jan 2013 21:14:35 +0000 (16:14 -0500)
CC:libav-stable@libav.org

libavresample/x86/audio_mix.asm

index daf0a7b3356d5b7fbb34ee6787bd9ee9659d6d9b..8a298e208127135e09c9e84f817c7c9a8eb6a10f 100644 (file)
@@ -260,29 +260,20 @@ MIX_1_TO_2_S16P_FLT
 %else
     %assign matrix_elements_stack 0
 %endif
+%assign matrix_stack_size matrix_elements_stack * mmsize
 
-cglobal mix_%1_to_%2_%3_flt, 3,in_channels+2,needed_mmregs+matrix_elements_mm, src0, src1, len, src2, src3, src4, src5, src6, src7
+%assign needed_stack_size -1 * matrix_stack_size
+%if ARCH_X86_32 && in_channels >= 7
+%assign needed_stack_size needed_stack_size - 16
+%endif
 
-; get aligned stack space if needed
-%if matrix_elements_stack > 0
-    %if mmsize == 32
-    %assign bkpreg %1 + 1
-    %define bkpq r %+ bkpreg %+ q
-    mov           bkpq, rsp
-    and           rsp, ~(mmsize-1)
-    sub           rsp, matrix_elements_stack * mmsize
-    %else
-    %assign matrix_stack_size matrix_elements_stack * mmsize
-    %assign pad matrix_stack_size + (mmsize - gprsize) - (stack_offset & (mmsize - gprsize))
-    ; on x86-32 for 7 and 8 channels we need more stack space for src pointers
-    %if ARCH_X86_32 && in_channels >= 7
-    %assign pad pad + 0x10
+cglobal mix_%1_to_%2_%3_flt, 3,in_channels+2,needed_mmregs+matrix_elements_mm, needed_stack_size, src0, src1, len, src2, src3, src4, src5, src6, src7
+
+; define src pointers on stack if needed
+%if matrix_elements_stack > 0 && ARCH_X86_32 && in_channels >= 7
     %define src5m [rsp+matrix_stack_size+0]
     %define src6m [rsp+matrix_stack_size+4]
     %define src7m [rsp+matrix_stack_size+8]
-    %endif
-    SUB           rsp, pad
-    %endif
 %endif
 
 ; load matrix pointers
@@ -463,14 +454,6 @@ cglobal mix_%1_to_%2_%3_flt, 3,in_channels+2,needed_mmregs+matrix_elements_mm, s
 
     add          lenq, mmsize
     jl .loop
-; restore stack pointer
-%if matrix_elements_stack > 0
-    %if mmsize == 32
-    mov           rsp, bkpq
-    %else
-    ADD           rsp, pad
-    %endif
-%endif
 ; zero ymm high halves
 %if mmsize == 32
     vzeroupper