summaryrefslogtreecommitdiff
authorMichael Niedermayer <michaelni@gmx.at>2013-01-06 12:20:14 (GMT)
committer Michael Niedermayer <michaelni@gmx.at>2013-01-06 12:20:23 (GMT)
commit7456164b5036ed3ec2ff8baadba8dfc7f92cc2e3 (patch)
tree4f47f47a1c81b0b2c27302ee859002bf0f1e6528
parentc44b4ee6ea1efaceb5afbba3a01946d0007db654 (diff)
parent95d01c3f1c33c079db04e24133ba4a6b00d62d4a (diff)
downloadffmpeg-7456164b5036ed3ec2ff8baadba8dfc7f92cc2e3.zip
ffmpeg-7456164b5036ed3ec2ff8baadba8dfc7f92cc2e3.tar.gz
ffmpeg-7456164b5036ed3ec2ff8baadba8dfc7f92cc2e3.tar.bz2
Merge remote-tracking branch 'qatar/master'
* qatar/master: x86: lavr: use the x86inc.asm automatic stack alignment in mixing functions Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat
-rw-r--r--libavresample/x86/audio_mix.asm35
1 files changed, 9 insertions, 26 deletions
diff --git a/libavresample/x86/audio_mix.asm b/libavresample/x86/audio_mix.asm
index a3f1af5..9353593 100644
--- a/libavresample/x86/audio_mix.asm
+++ b/libavresample/x86/audio_mix.asm
@@ -266,29 +266,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
@@ -469,14 +460,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