From 7ba1434cf35f494d5c09f83876521f71ef67119e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st> Date: Tue, 23 Apr 2013 17:55:00 +0300 Subject: [PATCH] win64: Correctly read the fifth parameter from the stack if we've pushed xmm registers This fixes the umac test on win64. --- ChangeLog | 4 +++- x86_64/machine.m4 | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4a1b169d..096ae21f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,7 +7,9 @@ within this subfunction. * x86_64/machine.m4 (W64_ENTRY): Use movdqu instead of movdqa for saving xmm registers, since the stack is not guaranteed to be - 16-byte aligned on win64. + 16-byte aligned on win64. Take pushed xmm registers into account + when reading the fifth parameter from the stack. + * Makefile.in: Consistently use EXEEXT_FOR_BUILD. 2013-04-21 Niels Möller <nisse@lysator.liu.se> diff --git a/x86_64/machine.m4 b/x86_64/machine.m4 index d5d5b37c..b9556a27 100644 --- a/x86_64/machine.m4 +++ b/x86_64/machine.m4 @@ -67,7 +67,7 @@ define(<XREG>,<ifelse( dnl W64_ENTRY(nargs, xmm_used) define(<W64_ENTRY>, < changequote([,])dnl - ifelse(<<<<<<<<<<<<<<< ignored; only for balancing) + ifelse(<<<<<<<<<<<<<<<< ignored; only for balancing) ifelse(W64_ABI,yes,[ ifelse(eval($2 > 6), 1, [ sub [$]eval(8 + 16*($2 - 6)), %rsp @@ -115,7 +115,11 @@ define(<W64_ENTRY>, < mov %r9, %rcx ]) ifelse(eval($1 >= 5), 1, [ - mov 56(%rsp), %r8 + ifelse(eval($2 > 6), 1, [ + mov eval(8 + 16*($2 - 6) + 56)(%rsp), %r8 + ], [ + mov 56(%rsp), %r8 + ]) ]) ]) changequote(<,>)dnl -- GitLab