summaryrefslogtreecommitdiff
path: root/vendor/github.com/zeebo/xxh3/hash64_seed.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/zeebo/xxh3/hash64_seed.go')
-rw-r--r--vendor/github.com/zeebo/xxh3/hash64_seed.go134
1 files changed, 0 insertions, 134 deletions
diff --git a/vendor/github.com/zeebo/xxh3/hash64_seed.go b/vendor/github.com/zeebo/xxh3/hash64_seed.go
deleted file mode 100644
index 429994c36..000000000
--- a/vendor/github.com/zeebo/xxh3/hash64_seed.go
+++ /dev/null
@@ -1,134 +0,0 @@
-package xxh3
-
-import "math/bits"
-
-// HashSeed returns the hash of the byte slice with given seed.
-func HashSeed(b []byte, seed uint64) uint64 {
- return hashAnySeed(*(*str)(ptr(&b)), seed)
-
-}
-
-// HashStringSeed returns the hash of the string slice with given seed.
-func HashStringSeed(s string, seed uint64) uint64 {
- return hashAnySeed(*(*str)(ptr(&s)), seed)
-}
-
-func hashAnySeed(s str, seed uint64) (acc u64) {
- p, l := s.p, s.l
-
- switch {
- case l <= 16:
- switch {
- case l > 8:
- inputlo := readU64(p, 0) ^ (key64_024 ^ key64_032 + seed)
- inputhi := readU64(p, ui(l)-8) ^ (key64_040 ^ key64_048 - seed)
- folded := mulFold64(inputlo, inputhi)
- return xxh3Avalanche(u64(l) + bits.ReverseBytes64(inputlo) + inputhi + folded)
-
- case l > 3:
- seed ^= u64(bits.ReverseBytes32(u32(seed))) << 32
- input1 := readU32(p, 0)
- input2 := readU32(p, ui(l)-4)
- input64 := u64(input2) + u64(input1)<<32
- keyed := input64 ^ (key64_008 ^ key64_016 - seed)
- return rrmxmx(keyed, u64(l))
-
- case l == 3: // 3
- c12 := u64(readU16(p, 0))
- c3 := u64(readU8(p, 2))
- acc = c12<<16 + c3 + 3<<8
-
- case l > 1: // 2
- c12 := u64(readU16(p, 0))
- acc = c12*(1<<24+1)>>8 + 2<<8
-
- case l == 1: // 1
- c1 := u64(readU8(p, 0))
- acc = c1*(1<<24+1<<16+1) + 1<<8
-
- default:
- return xxhAvalancheSmall(seed ^ key64_056 ^ key64_064)
- }
-
- acc ^= u64(key32_000^key32_004) + seed
- return xxhAvalancheSmall(acc)
-
- case l <= 128:
- acc = u64(l) * prime64_1
-
- if l > 32 {
- if l > 64 {
- if l > 96 {
- acc += mulFold64(readU64(p, 6*8)^(key64_096+seed), readU64(p, 7*8)^(key64_104-seed))
- acc += mulFold64(readU64(p, ui(l)-8*8)^(key64_112+seed), readU64(p, ui(l)-7*8)^(key64_120-seed))
- } // 96
- acc += mulFold64(readU64(p, 4*8)^(key64_064+seed), readU64(p, 5*8)^(key64_072-seed))
- acc += mulFold64(readU64(p, ui(l)-6*8)^(key64_080+seed), readU64(p, ui(l)-5*8)^(key64_088-seed))
- } // 64
- acc += mulFold64(readU64(p, 2*8)^(key64_032+seed), readU64(p, 3*8)^(key64_040-seed))
- acc += mulFold64(readU64(p, ui(l)-4*8)^(key64_048+seed), readU64(p, ui(l)-3*8)^(key64_056-seed))
- } // 32
- acc += mulFold64(readU64(p, 0*8)^(key64_000+seed), readU64(p, 1*8)^(key64_008-seed))
- acc += mulFold64(readU64(p, ui(l)-2*8)^(key64_016+seed), readU64(p, ui(l)-1*8)^(key64_024-seed))
-
- return xxh3Avalanche(acc)
-
- case l <= 240:
- acc = u64(l) * prime64_1
-
- acc += mulFold64(readU64(p, 0*16+0)^(key64_000+seed), readU64(p, 0*16+8)^(key64_008-seed))
- acc += mulFold64(readU64(p, 1*16+0)^(key64_016+seed), readU64(p, 1*16+8)^(key64_024-seed))
- acc += mulFold64(readU64(p, 2*16+0)^(key64_032+seed), readU64(p, 2*16+8)^(key64_040-seed))
- acc += mulFold64(readU64(p, 3*16+0)^(key64_048+seed), readU64(p, 3*16+8)^(key64_056-seed))
- acc += mulFold64(readU64(p, 4*16+0)^(key64_064+seed), readU64(p, 4*16+8)^(key64_072-seed))
- acc += mulFold64(readU64(p, 5*16+0)^(key64_080+seed), readU64(p, 5*16+8)^(key64_088-seed))
- acc += mulFold64(readU64(p, 6*16+0)^(key64_096+seed), readU64(p, 6*16+8)^(key64_104-seed))
- acc += mulFold64(readU64(p, 7*16+0)^(key64_112+seed), readU64(p, 7*16+8)^(key64_120-seed))
-
- // avalanche
- acc = xxh3Avalanche(acc)
-
- // trailing groups after 128
- top := ui(l) &^ 15
- for i := ui(8 * 16); i < top; i += 16 {
- acc += mulFold64(readU64(p, i+0)^(readU64(key, i-125)+seed), readU64(p, i+8)^(readU64(key, i-117)-seed))
- }
-
- // last 16 bytes
- acc += mulFold64(readU64(p, ui(l)-16)^(key64_119+seed), readU64(p, ui(l)-8)^(key64_127-seed))
-
- return xxh3Avalanche(acc)
-
- default:
- acc = u64(l) * prime64_1
-
- secret := key
- if seed != 0 {
- secret = ptr(&[secretSize]byte{})
- initSecret(secret, seed)
- }
-
- accs := [8]u64{
- prime32_3, prime64_1, prime64_2, prime64_3,
- prime64_4, prime32_2, prime64_5, prime32_1,
- }
-
- if hasAVX512 && l >= avx512Switch {
- accumAVX512(&accs, p, secret, u64(l))
- } else if hasAVX2 {
- accumAVX2(&accs, p, secret, u64(l))
- } else if hasSSE2 {
- accumSSE(&accs, p, secret, u64(l))
- } else {
- accumScalarSeed(&accs, p, secret, u64(l))
- }
-
- // merge accs
- acc += mulFold64(accs[0]^readU64(secret, 11), accs[1]^readU64(secret, 19))
- acc += mulFold64(accs[2]^readU64(secret, 27), accs[3]^readU64(secret, 35))
- acc += mulFold64(accs[4]^readU64(secret, 43), accs[5]^readU64(secret, 51))
- acc += mulFold64(accs[6]^readU64(secret, 59), accs[7]^readU64(secret, 67))
-
- return xxh3Avalanche(acc)
- }
-}