diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-01-06 13:20:14 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-01-06 13:20:23 +0100 |
commit | 7456164b5036ed3ec2ff8baadba8dfc7f92cc2e3 (patch) | |
tree | 4f47f47a1c81b0b2c27302ee859002bf0f1e6528 | |
parent | c44b4ee6ea1efaceb5afbba3a01946d0007db654 (diff) | |
parent | 95d01c3f1c33c079db04e24133ba4a6b00d62d4a (diff) | |
download | ffmpeg-7456164b5036ed3ec2ff8baadba8dfc7f92cc2e3.tar.gz |
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>
-rw-r--r-- | libavresample/x86/audio_mix.asm | 35 |
1 files changed, 9 insertions, 26 deletions
diff --git a/libavresample/x86/audio_mix.asm b/libavresample/x86/audio_mix.asm index a3f1af5787..9353593002 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 |