Messages in this thread Patch in this message | | | From | Timofey Titovets <> | Subject | [PATCH v2 1/2] xxHash: create arch dependent 32/64-bit xxhash() | Date | Fri, 22 Sep 2017 12:52:24 +0300 |
| |
xxh32() - fast on both 32/64-bit platforms xxh64() - fast only on 64-bit platform
Create xxhash() which will pickup fastest version on compile time.
Add type xxhash_t to map correct hash size.
As result depends on cpu word size, the main proporse of that - in memory hashing.
Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com> Acked-by: Andi Kleen <ak@linux.intel.com> Cc: Linux-kernel <linux-kernel@vger.kernel.org> --- include/linux/xxhash.h | 24 ++++++++++++++++++++++++ lib/xxhash.c | 10 ++++++++++ 2 files changed, 34 insertions(+)
diff --git a/include/linux/xxhash.h b/include/linux/xxhash.h index 9e1f42cb57e9..195a0ae10e9b 100644 --- a/include/linux/xxhash.h +++ b/include/linux/xxhash.h @@ -76,6 +76,7 @@ #define XXHASH_H
#include <linux/types.h> +#include <linux/bitops.h> /* BITS_PER_LONG */
/*-**************************** * Simple Hash Functions @@ -107,6 +108,29 @@ uint32_t xxh32(const void *input, size_t length, uint32_t seed); */ uint64_t xxh64(const void *input, size_t length, uint64_t seed);
+#if BITS_PER_LONG == 64 +typedef u64 xxhash_t; +#else +typedef u32 xxhash_t; +#endif + +/** + * xxhash() - calculate 32/64-bit hash based on cpu word size + * + * @input: The data to hash. + * @length: The length of the data to hash. + * @seed: The seed can be used to alter the result predictably. + * + * This function always work as xxh32() for 32-bit systems + * and as xxh64() for 64-bit systems. + * Because result depends on cpu work size, + * the main proporse of that function is for in memory hashing. + * + * Return: 32/64-bit hash of the data. + */ + +xxhash_t xxhash(const void *input, size_t length, uint64_t seed); + /*-**************************** * Streaming Hash Functions *****************************/ diff --git a/lib/xxhash.c b/lib/xxhash.c index aa61e2a3802f..7dd1105fcc30 100644 --- a/lib/xxhash.c +++ b/lib/xxhash.c @@ -236,6 +236,16 @@ uint64_t xxh64(const void *input, const size_t len, const uint64_t seed) } EXPORT_SYMBOL(xxh64);
+xxhash_t xxhash(const void *input, size_t length, uint64_t seed) +{ +#if BITS_PER_LONG == 64 + return xxh64(input, length, seed); +#else + return xxh32(input, length, seed); +#endif +} +EXPORT_SYMBOL(xxhash); + /*-************************************************** * Advanced Hash Functions ***************************************************/ -- 2.14.1
| |