x86inc: fix stack alignment on win64

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Ronald S. Bultje 2012-12-12 20:00:22 +01:00 committed by Martin Storsjö
parent 29d2595ad7
commit 140367aff9
1 changed files with 6 additions and 4 deletions

View File

@ -428,7 +428,7 @@ DECLARE_REG 14, R15, 120
%assign %%i xmm_regs_used %assign %%i xmm_regs_used
%rep (xmm_regs_used-6) %rep (xmm_regs_used-6)
%assign %%i %%i-1 %assign %%i %%i-1
movdqa [rsp + (%%i-6)*16 + stack_size], xmm %+ %%i movdqa [rsp + (%%i-6)*16 + stack_size + (~stack_offset&8)], xmm %+ %%i
%endrep %endrep
%endmacro %endmacro
@ -436,8 +436,7 @@ DECLARE_REG 14, R15, 120
%assign xmm_regs_used %1 %assign xmm_regs_used %1
ASSERT xmm_regs_used <= 16 ASSERT xmm_regs_used <= 16
%if xmm_regs_used > 6 %if xmm_regs_used > 6
%assign stack_size_padded (xmm_regs_used-6)*16+16-gprsize-(stack_offset&15) SUB rsp, (xmm_regs_used-6)*16+16
SUB rsp, stack_size_padded
WIN64_PUSH_XMM WIN64_PUSH_XMM
%endif %endif
%endmacro %endmacro
@ -447,8 +446,11 @@ DECLARE_REG 14, R15, 120
%assign %%i xmm_regs_used %assign %%i xmm_regs_used
%rep (xmm_regs_used-6) %rep (xmm_regs_used-6)
%assign %%i %%i-1 %assign %%i %%i-1
movdqa xmm %+ %%i, [%1 + (%%i-6)*16+stack_size] movdqa xmm %+ %%i, [%1 + (%%i-6)*16+stack_size+(~stack_offset&8)]
%endrep %endrep
%if stack_size_padded == 0
add %1, (xmm_regs_used-6)*16+16
%endif
%endif %endif
%if stack_size_padded > 0 %if stack_size_padded > 0
%if stack_size > 0 && (mmsize == 32 || HAVE_ALIGNED_STACK == 0) %if stack_size > 0 && (mmsize == 32 || HAVE_ALIGNED_STACK == 0)