summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Hash.cpp
diff options
context:
space:
mode:
authorFiora <fioraaeterna@gmail.com>2014-10-18 00:22:41 -0700
committerFiora <fioraaeterna@gmail.com>2014-10-18 00:24:35 -0700
commitd2e004fa9e8b4f331e7e241645e47211e93686eb (patch)
tree9877146b15aeab9057f816a1442dc78ef79dfbf5 /Source/Core/Common/Hash.cpp
parent742f9c6b14348b7279cb6b666a342fb2fcf4792c (diff)
Use CRC to output 64 bits instead of 32
A bit hacky, but should dramatically reduce the odds of hash collision.
Diffstat (limited to 'Source/Core/Common/Hash.cpp')
-rw-r--r--Source/Core/Common/Hash.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/Source/Core/Common/Hash.cpp b/Source/Core/Common/Hash.cpp
index 6cdd1e6a7a..f9a3737d34 100644
--- a/Source/Core/Common/Hash.cpp
+++ b/Source/Core/Common/Hash.cpp
@@ -254,7 +254,8 @@ u64 GetCRC32(const u8 *src, int len, u32 samples)
const u8 *data2 = (const u8*)end;
// FIXME: is there a better way to combine these partial hashes?
- return _mm_crc32_u64(h[0] + h[1] + h[2] + h[3], u64(data2[0]));
+ h[0] = _mm_crc32_u64(h[0], u64(data2[0]));
+ return h[0] + (h[1] << 10) + (h[2] << 21) + (h[3] << 32);
#else
return 0;
#endif