From dean-gnu@arctic.org Fri Nov 28 15:19:57 2003
Date: Fri, 28 Nov 2003 15:12:10 -0800 (PST)
From: dean gaudet <dean-gnu@arctic.org>
To: bug-coreutils@gnu.org
Subject: small md5sum speedup on i386
X-comment: visit http://arctic.org/~dean/legal for information regarding
    copyright and disclaimer.

this conditional for i386 is not required with any recent GCC (probably
anything 3.x)...  in fact it's undesirable because the asm forces the use
of a variable rotation, which steals the %ecx register from many more
useful purposes in this code.

the patch below results in an 8% speedup on pentium-m, and a 15% speedup
on xeon (on 256MB of /dev/zero).

if you really want to use asm i suggest using the immediate form of
rotate:

	asm volatile("rol %2,%0" : "=r" (x) : "0" (x), "i" (n));

-dean


--- coreutils-5.0/lib/md5.h.orig	2003-11-28 15:04:30.000000000 -0800
+++ coreutils-5.0/lib/md5.h	2003-11-28 15:06:03.000000000 -0800
@@ -149,7 +149,7 @@

 /* The following is from gnupg-1.0.2's cipher/bithelp.h.  */
 /* Rotate a 32 bit integer by n bytes */
-#if defined __GNUC__ && defined __i386__
+#if 0 && defined __GNUC__ && defined __i386__
 static inline md5_uint32
 rol(md5_uint32 x, int n)
 {
