...

Source file src/github.com/zeebo/xxh3/accum_stubs_amd64.go

Documentation: github.com/zeebo/xxh3

     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) // Always true on amd64
    12  	hasAVX512 = cpuid.CPU.Has(cpuid.AVX512F)
    13  )
    14  
    15  //go:noescape
    16  func accumAVX2(acc *[8]u64, data, key unsafe.Pointer, len u64)
    17  
    18  //go:noescape
    19  func accumAVX512(acc *[8]u64, data, key unsafe.Pointer, len u64)
    20  
    21  //go:noescape
    22  func accumSSE(acc *[8]u64, data, key unsafe.Pointer, len u64)
    23  
    24  //go:noescape
    25  func accumBlockAVX2(acc *[8]u64, data, key unsafe.Pointer)
    26  
    27  //go:noescape
    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