|
@ -1200,26 +1200,42 @@ namespace storm { |
|
|
|
|
|
|
|
|
uint64_t k1 = 0; |
|
|
uint64_t k1 = 0; |
|
|
uint64_t k2 = 0; |
|
|
uint64_t k2 = 0; |
|
|
|
|
|
|
|
|
|
|
|
// Loop unrolling via Duff's device
|
|
|
|
|
|
// Cases are supposed to fall-through
|
|
|
switch(len & 15) |
|
|
switch(len & 15) |
|
|
{ |
|
|
{ |
|
|
case 15: k2 ^= ((uint64_t)tail[14]) << 48; |
|
|
case 15: k2 ^= ((uint64_t)tail[14]) << 48; |
|
|
|
|
|
//fallthrough
|
|
|
case 14: k2 ^= ((uint64_t)tail[13]) << 40; |
|
|
case 14: k2 ^= ((uint64_t)tail[13]) << 40; |
|
|
|
|
|
//fallthrough
|
|
|
case 13: k2 ^= ((uint64_t)tail[12]) << 32; |
|
|
case 13: k2 ^= ((uint64_t)tail[12]) << 32; |
|
|
|
|
|
//fallthrough
|
|
|
case 12: k2 ^= ((uint64_t)tail[11]) << 24; |
|
|
case 12: k2 ^= ((uint64_t)tail[11]) << 24; |
|
|
|
|
|
//fallthrough
|
|
|
case 11: k2 ^= ((uint64_t)tail[10]) << 16; |
|
|
case 11: k2 ^= ((uint64_t)tail[10]) << 16; |
|
|
|
|
|
//fallthrough
|
|
|
case 10: k2 ^= ((uint64_t)tail[ 9]) << 8; |
|
|
case 10: k2 ^= ((uint64_t)tail[ 9]) << 8; |
|
|
|
|
|
//fallthrough
|
|
|
case 9: k2 ^= ((uint64_t)tail[ 8]) << 0; |
|
|
case 9: k2 ^= ((uint64_t)tail[ 8]) << 0; |
|
|
k2 *= c2; k2 = rotl64(k2,33); k2 *= c1; h2 ^= k2; |
|
|
k2 *= c2; k2 = rotl64(k2,33); k2 *= c1; h2 ^= k2; |
|
|
|
|
|
//fallthrough
|
|
|
|
|
|
|
|
|
case 8: k1 ^= ((uint64_t)tail[ 7]) << 56; |
|
|
case 8: k1 ^= ((uint64_t)tail[ 7]) << 56; |
|
|
|
|
|
//fallthrough
|
|
|
case 7: k1 ^= ((uint64_t)tail[ 6]) << 48; |
|
|
case 7: k1 ^= ((uint64_t)tail[ 6]) << 48; |
|
|
|
|
|
//fallthrough
|
|
|
case 6: k1 ^= ((uint64_t)tail[ 5]) << 40; |
|
|
case 6: k1 ^= ((uint64_t)tail[ 5]) << 40; |
|
|
|
|
|
//fallthrough
|
|
|
case 5: k1 ^= ((uint64_t)tail[ 4]) << 32; |
|
|
case 5: k1 ^= ((uint64_t)tail[ 4]) << 32; |
|
|
|
|
|
//fallthrough
|
|
|
case 4: k1 ^= ((uint64_t)tail[ 3]) << 24; |
|
|
case 4: k1 ^= ((uint64_t)tail[ 3]) << 24; |
|
|
|
|
|
//fallthrough
|
|
|
case 3: k1 ^= ((uint64_t)tail[ 2]) << 16; |
|
|
case 3: k1 ^= ((uint64_t)tail[ 2]) << 16; |
|
|
|
|
|
//fallthrough
|
|
|
case 2: k1 ^= ((uint64_t)tail[ 1]) << 8; |
|
|
case 2: k1 ^= ((uint64_t)tail[ 1]) << 8; |
|
|
|
|
|
//fallthrough
|
|
|
case 1: k1 ^= ((uint64_t)tail[ 0]) << 0; |
|
|
case 1: k1 ^= ((uint64_t)tail[ 0]) << 0; |
|
|
|
|
|
//fallthrough
|
|
|
k1 *= c1; k1 = rotl64(k1,31); k1 *= c2; h1 ^= k1; |
|
|
k1 *= c1; k1 = rotl64(k1,31); k1 *= c2; h1 ^= k1; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|