From 7a9e65aceee678ee2677480579cb3b2208474140 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Mon, 29 Oct 2012 16:18:04 -0400 Subject: x86: lavr: fix stack allocation for 7 and 8 channel downmixing on x86-32 Fixes crashes on Win32 and stack overruns on x86-32 in general. --- libavresample/x86/audio_mix.asm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'libavresample/x86') diff --git a/libavresample/x86/audio_mix.asm b/libavresample/x86/audio_mix.asm index 47c23e4584..daf0a7b335 100644 --- a/libavresample/x86/audio_mix.asm +++ b/libavresample/x86/audio_mix.asm @@ -272,7 +272,15 @@ cglobal mix_%1_to_%2_%3_flt, 3,in_channels+2,needed_mmregs+matrix_elements_mm, s and rsp, ~(mmsize-1) sub rsp, matrix_elements_stack * mmsize %else - %assign pad matrix_elements_stack * mmsize + (mmsize - gprsize) - (stack_offset & (mmsize - gprsize)) + %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 + %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 -- cgit v1.2.3