diff options
| author | Ingo Molnar <mingo@kernel.org> | 2020-07-25 21:49:36 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2020-07-25 21:49:36 +0200 |
| commit | c84d53051fcb4f3d14d5a245e1d7ee8512bcb199 (patch) | |
| tree | 30f7f845afc8e0428c1fbb1bc93f52b120d40661 /tools/perf/util/hashmap.h | |
| parent | 9a71df495c3d29dab596bb590e73fd8b20106e2d (diff) | |
| parent | ba47d845d715a010f7b51f6f89bae32845e6acb7 (diff) | |
| download | linux-next-c84d53051fcb4f3d14d5a245e1d7ee8512bcb199.tar.gz linux-next-c84d53051fcb4f3d14d5a245e1d7ee8512bcb199.zip | |
Merge tag 'v5.8-rc6' into locking/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/util/hashmap.h')
| -rw-r--r-- | tools/perf/util/hashmap.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/tools/perf/util/hashmap.h b/tools/perf/util/hashmap.h index df59fd4fc95b..e0af36b0e5d8 100644 --- a/tools/perf/util/hashmap.h +++ b/tools/perf/util/hashmap.h @@ -11,14 +11,18 @@ #include <stdbool.h> #include <stddef.h> #include <limits.h> -#ifndef __WORDSIZE -#define __WORDSIZE (__SIZEOF_LONG__ * 8) -#endif static inline size_t hash_bits(size_t h, int bits) { /* shuffle bits and return requested number of upper bits */ - return (h * 11400714819323198485llu) >> (__WORDSIZE - bits); +#if (__SIZEOF_SIZE_T__ == __SIZEOF_LONG_LONG__) + /* LP64 case */ + return (h * 11400714819323198485llu) >> (__SIZEOF_LONG_LONG__ * 8 - bits); +#elif (__SIZEOF_SIZE_T__ <= __SIZEOF_LONG__) + return (h * 2654435769lu) >> (__SIZEOF_LONG__ * 8 - bits); +#else +# error "Unsupported size_t size" +#endif } typedef size_t (*hashmap_hash_fn)(const void *key, void *ctx); |
