summaryrefslogtreecommitdiff
path: root/vendor/github.com/zeebo/xxh3/accum_stubs_amd64.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/zeebo/xxh3/accum_stubs_amd64.go')
-rw-r--r--vendor/github.com/zeebo/xxh3/accum_stubs_amd64.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/vendor/github.com/zeebo/xxh3/accum_stubs_amd64.go b/vendor/github.com/zeebo/xxh3/accum_stubs_amd64.go
new file mode 100644
index 000000000..9baff6c41
--- /dev/null
+++ b/vendor/github.com/zeebo/xxh3/accum_stubs_amd64.go
@@ -0,0 +1,40 @@
+package xxh3
+
+import (
+ "unsafe"
+
+ "github.com/klauspost/cpuid/v2"
+)
+
+var (
+ hasAVX2 = cpuid.CPU.Has(cpuid.AVX2)
+ hasSSE2 = cpuid.CPU.Has(cpuid.SSE2) // Always true on amd64
+ hasAVX512 = cpuid.CPU.Has(cpuid.AVX512F)
+)
+
+//go:noescape
+func accumAVX2(acc *[8]u64, data, key unsafe.Pointer, len u64)
+
+//go:noescape
+func accumAVX512(acc *[8]u64, data, key unsafe.Pointer, len u64)
+
+//go:noescape
+func accumSSE(acc *[8]u64, data, key unsafe.Pointer, len u64)
+
+//go:noescape
+func accumBlockAVX2(acc *[8]u64, data, key unsafe.Pointer)
+
+//go:noescape
+func accumBlockSSE(acc *[8]u64, data, key unsafe.Pointer)
+
+func withOverrides(avx512, avx2, sse2 bool, cb func()) {
+ avx512Orig, avx2Orig, sse2Orig := hasAVX512, hasAVX2, hasSSE2
+ hasAVX512, hasAVX2, hasSSE2 = avx512, avx2, sse2
+ defer func() { hasAVX512, hasAVX2, hasSSE2 = avx512Orig, avx2Orig, sse2Orig }()
+ cb()
+}
+
+func withAVX512(cb func()) { withOverrides(hasAVX512, false, false, cb) }
+func withAVX2(cb func()) { withOverrides(false, hasAVX2, false, cb) }
+func withSSE2(cb func()) { withOverrides(false, false, hasSSE2, cb) }
+func withGeneric(cb func()) { withOverrides(false, false, false, cb) }