70 static void Hash128(
const void*
message,
78 static uint64 Hash64(
const void*
message,
83 Hash128(
message, length, &hash1, &seed);
90 static uint32 Hash32(
const void*
message,
94 uint64 hash1 = seed, hash2 = seed;
95 Hash128(
message, length, &hash1, &hash2);
102 void Init(uint64 seed1,
108 void Update(
const void*
message,
119 void Final(uint64* hash1,
125 static INLINE uint64 Rot64(uint64 x,
int k) {
126 return (x << k) | (x >> (64 - k));
142 static INLINE
void Mix(
const uint64* data, uint64& s0, uint64& s1, uint64& s2, uint64& s3,
143 uint64& s4, uint64& s5, uint64& s6, uint64& s7, uint64& s8, uint64& s9,
144 uint64& s10, uint64& s11) {
198 s10 = Rot64(s10, 22);
203 s11 = Rot64(s11, 46);
223 static INLINE
void EndPartial(uint64& h0, uint64& h1, uint64& h2, uint64& h3, uint64& h4,
224 uint64& h5, uint64& h6, uint64& h7, uint64& h8, uint64& h9,
225 uint64& h10, uint64& h11) {
255 h10 = Rot64(h10, 53);
258 h11 = Rot64(h11, 42);
264 static INLINE
void End(
const uint64* data, uint64& h0, uint64& h1, uint64& h2, uint64& h3,
265 uint64& h4, uint64& h5, uint64& h6, uint64& h7, uint64& h8, uint64& h9,
266 uint64& h10, uint64& h11) {
279 EndPartial(h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);
280 EndPartial(h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);
281 EndPartial(h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);
299 static INLINE
void ShortMix(uint64& h0, uint64& h1, uint64& h2, uint64& h3) {
350 static INLINE
void ShortEnd(uint64& h0, uint64& h1, uint64& h2, uint64& h3) {
393 static void Short(
const void*
message,
399 static const size_t sc_numVars = 12;
402 static const size_t sc_blockSize = sc_numVars * 8;
405 static const size_t sc_bufSize = 2 * sc_blockSize;
414 static const uint64 sc_const = 0xdeadbeefdeadbeefLL;
416 uint64 m_data[2 * sc_numVars];
417 uint64 m_state[sc_numVars];