...
1 package xxh3
2
3 import (
4 "unsafe"
5
6 "github.com/klauspost/cpuid/v2"
7 )
8
9 var (
10 hasAVX2 = cpuid.CPU.Has(cpuid.AVX2)
11 hasSSE2 = cpuid.CPU.Has(cpuid.SSE2)
12 hasAVX512 = cpuid.CPU.Has(cpuid.AVX512F)
13 )
14
15
16 func accumAVX2(acc *[8]u64, data, key unsafe.Pointer, len u64)
17
18
19 func accumAVX512(acc *[8]u64, data, key unsafe.Pointer, len u64)
20
21
22 func accumSSE(acc *[8]u64, data, key unsafe.Pointer, len u64)
23
24
25 func accumBlockAVX2(acc *[8]u64, data, key unsafe.Pointer)
26
27
28 func accumBlockSSE(acc *[8]u64, data, key unsafe.Pointer)
29
30 func withOverrides(avx512, avx2, sse2 bool, cb func()) {
31 avx512Orig, avx2Orig, sse2Orig := hasAVX512, hasAVX2, hasSSE2
32 hasAVX512, hasAVX2, hasSSE2 = avx512, avx2, sse2
33 defer func() { hasAVX512, hasAVX2, hasSSE2 = avx512Orig, avx2Orig, sse2Orig }()
34 cb()
35 }
36
37 func withAVX512(cb func()) { withOverrides(hasAVX512, false, false, cb) }
38 func withAVX2(cb func()) { withOverrides(false, hasAVX2, false, cb) }
39 func withSSE2(cb func()) { withOverrides(false, false, hasSSE2, cb) }
40 func withGeneric(cb func()) { withOverrides(false, false, false, cb) }
41
View as plain text