4d31dd0fdcd5db7bd47845e67a98662b080b6b0e
[platform/core/system/edge-orchestration.git] / vendor / golang.org / x / crypto / blake2b / blake2bAVX2_amd64.go
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 // +build go1.7,amd64,!gccgo,!appengine
6
7 package blake2b
8
9 import "golang.org/x/sys/cpu"
10
11 func init() {
12         useAVX2 = cpu.X86.HasAVX2
13         useAVX = cpu.X86.HasAVX
14         useSSE4 = cpu.X86.HasSSE41
15 }
16
17 //go:noescape
18 func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte)
19
20 //go:noescape
21 func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte)
22
23 //go:noescape
24 func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte)
25
26 func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) {
27         switch {
28         case useAVX2:
29                 hashBlocksAVX2(h, c, flag, blocks)
30         case useAVX:
31                 hashBlocksAVX(h, c, flag, blocks)
32         case useSSE4:
33                 hashBlocksSSE4(h, c, flag, blocks)
34         default:
35                 hashBlocksGeneric(h, c, flag, blocks)
36         }
37 }