blob: 43a76253de5d3fc228bdb5871056d427d7ddd03e [file] [log] [blame]
Andreas Auernhammer4428aee2016-10-12 21:11:18 +02001// 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
Adam Langleyb2fa06b2016-10-28 10:07:08 -07005// +build amd64,!gccgo,!appengine
Andreas Auernhammer4428aee2016-10-12 21:11:18 +02006
7package blake2s
8
9var (
Austin Clements814723e2016-10-21 16:39:25 -040010 useSSE4 = supportSSE4()
11 useSSSE3 = supportSSSE3()
12 useSSE2 = true // Always available on amd64
13 useGeneric = false
Andreas Auernhammer4428aee2016-10-12 21:11:18 +020014)
15
16//go:noescape
17func supportSSSE3() bool
18
19//go:noescape
20func supportSSE4() bool
21
22//go:noescape
23func hashBlocksSSE2(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte)
24
25//go:noescape
26func hashBlocksSSSE3(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte)
27
28//go:noescape
29func hashBlocksSSE4(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte)
30
31func hashBlocks(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) {
32 if useSSE4 {
33 hashBlocksSSE4(h, c, flag, blocks)
34 } else if useSSSE3 {
35 hashBlocksSSSE3(h, c, flag, blocks)
36 } else {
37 hashBlocksSSE2(h, c, flag, blocks)
38 }
39}