From bb7703fcec792904621bc0fc023abbb13af888a3 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 16 Nov 2021 16:08:20 +0000 Subject: [PATCH] Improve `ptr_map_hash_key` --- src/ptr_map.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/ptr_map.cpp b/src/ptr_map.cpp index 3d6be1d44..43e793b8a 100644 --- a/src/ptr_map.cpp +++ b/src/ptr_map.cpp @@ -28,11 +28,13 @@ struct PtrMap { u32 ptr_map_hash_key(uintptr key) { #if defined(GB_ARCH_64_BIT) - u64 x = (u64)key; - u8 count = (u8)(x >> 59); - x ^= x >> (5 + count); - x *= 12605985483714917081ull; - return (u32)(x ^ (x >> 43)); + key = (~key) + (key << 21); + key = key ^ (key >> 24); + key = (key + (key << 3)) + (key << 8); + key = key ^ (key >> 14); + key = (key + (key << 2)) + (key << 4); + key = key ^ (key << 28); + return cast(u32)key; #elif defined(GB_ARCH_32_BIT) u32 state = ((u32)key) * 747796405u + 2891336453u; u32 word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;