github.com/0xsequence/ethkit@v1.25.0/go-ethereum/crypto/blake2b/blake2bAVX2_amd64.go (about)

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build go1.7 && amd64 && !gccgo && !appengine
     6  // +build go1.7,amd64,!gccgo,!appengine
     7  
     8  package blake2b
     9  
    10  import "golang.org/x/sys/cpu"
    11  
    12  func init() {
    13  	useAVX2 = cpu.X86.HasAVX2
    14  	useAVX = cpu.X86.HasAVX
    15  	useSSE4 = cpu.X86.HasSSE41
    16  }
    17  
    18  //go:noescape
    19  func fAVX2(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64)
    20  
    21  //go:noescape
    22  func fAVX(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64)
    23  
    24  //go:noescape
    25  func fSSE4(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64)
    26  
    27  func f(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) {
    28  	switch {
    29  	case useAVX2:
    30  		fAVX2(h, m, c0, c1, flag, rounds)
    31  	case useAVX:
    32  		fAVX(h, m, c0, c1, flag, rounds)
    33  	case useSSE4:
    34  		fSSE4(h, m, c0, c1, flag, rounds)
    35  	default:
    36  		fGeneric(h, m, c0, c1, flag, rounds)
    37  	}
    38  }