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