summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-12-10 11:53:44 -0500
committerUlrich Drepper <drepper@gmail.com>2011-12-10 11:53:44 -0500
commitf039c043071f2f55943d052fa7d4ad5f1a67db09 (patch)
tree2c64a4951dd64770b17439dee64a79697eb09bd3
parent850fb039cec802072f70ed9763927881bbbf639c (diff)
downloadglibc-f039c043071f2f55943d052fa7d4ad5f1a67db09.tar.gz
glibc-f039c043071f2f55943d052fa7d4ad5f1a67db09.tar.xz
glibc-f039c043071f2f55943d052fa7d4ad5f1a67db09.zip
Optimize generic ELF hash function a bit more
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/generic/dl-hash.h5
2 files changed, 9 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 73e9911d85..93adebd389 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-12-10  Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/generic/dl-hash.h (_dl_elf_hash): Lift one operation out of
+	the inner loop.
+
 2011-12-06  Andreas Schwab  <schwab@linux-m68k.org>
 
 	[BZ #13472]
diff --git a/sysdeps/generic/dl-hash.h b/sysdeps/generic/dl-hash.h
index 28312ca1c4..e0db00edc3 100644
--- a/sysdeps/generic/dl-hash.h
+++ b/sysdeps/generic/dl-hash.h
@@ -60,9 +60,12 @@ _dl_elf_hash (const char *name_arg)
 			 But the following is equivalent and a lot
 			 faster, especially on modern processors.  */
 
-		      hash ^= hi;
 		      hash ^= hi >> 24;
 		    }
+
+		  /* Second part of the modified formula.  This
+		     operation can be lifted outside the loop.  */
+		  hash &= 0x0fffffff;
 		}
 	    }
 	}