git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make hash_64() use a 64-bit multiply when appropriate
[pandora-kernel.git]
/
include
/
linux
/
hash.h
diff --git
a/include/linux/hash.h
b/include/linux/hash.h
index
bd1754c
..
d0494c3
100644
(file)
--- a/
include/linux/hash.h
+++ b/
include/linux/hash.h
@@
-37,6
+37,9
@@
static __always_inline u64 hash_64(u64 val, unsigned int bits)
{
u64 hash = val;
{
u64 hash = val;
+#if defined(CONFIG_ARCH_HAS_FAST_MULTIPLIER) && BITS_PER_LONG == 64
+ hash = hash * GOLDEN_RATIO_PRIME_64;
+#else
/* Sigh, gcc can't optimise this alone like it does for 32 bits. */
u64 n = hash;
n <<= 18;
/* Sigh, gcc can't optimise this alone like it does for 32 bits. */
u64 n = hash;
n <<= 18;
@@
-51,6
+54,7
@@
static __always_inline u64 hash_64(u64 val, unsigned int bits)
hash += n;
n <<= 2;
hash += n;
hash += n;
n <<= 2;
hash += n;
+#endif
/* High bits are more random, so use them. */
return hash >> (64 - bits);
/* High bits are more random, so use them. */
return hash >> (64 - bits);