From e9d8f0c53ceb8f2567d7561d4ce3bccb1d9b7845 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Wed, 5 Oct 2005 12:40:45 +0200
Subject: [PATCH] (EXPAND): Use % 16 instead of & 15 to compute offsets mod 16,
 since m4 on FreeBSD 49.RELEASE and NetBSD doesn't implement & correctly in
 eval.

Rev: src/nettle/x86/sha1-compress.asm:1.10
---
 x86/sha1-compress.asm | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/x86/sha1-compress.asm b/x86/sha1-compress.asm
index a6b02aa6..cbab4122 100644
--- a/x86/sha1-compress.asm
+++ b/x86/sha1-compress.asm
@@ -50,17 +50,17 @@ C expand(i) is the expansion function
 C
 C   W[i] = (W[i - 16] ^ W[i - 14] ^ W[i - 8] ^ W[i - 3]) <<< 1
 C
-C where W[i] is stored in DATA[i & 15].
+C where W[i] is stored in DATA[i mod 16].
 C
 C Result is stored back in W[i], and also left in TMP, the only
 C register that is used.
 define(<EXPAND>, <
-	movl	OFFSET(eval($1 & 15)) (DATA), TMP
-	xorl	OFFSET(eval(($1 +  2) & 15)) (DATA), TMP
-	xorl	OFFSET(eval(($1 +  8) & 15)) (DATA), TMP
-	xorl	OFFSET(eval(($1 + 13) & 15)) (DATA), TMP
+	movl	OFFSET(eval($1 % 16)) (DATA), TMP
+	xorl	OFFSET(eval(($1 +  2) % 16)) (DATA), TMP
+	xorl	OFFSET(eval(($1 +  8) % 16)) (DATA), TMP
+	xorl	OFFSET(eval(($1 + 13) % 16)) (DATA), TMP
 	roll	<$>1, TMP
-	movl	TMP, OFFSET(eval($1 & 15)) (DATA)>)dnl
+	movl	TMP, OFFSET(eval($1 % 16)) (DATA)>)dnl
 define(<NOEXPAND>, <OFFSET($1) (DATA)>)dnl
 
 C The f functions,
-- 
GitLab