Having a trailing comma before a space doesn't mean that the next option will be ANDed rather than ORed. This worked with the standard toolchain because the filenames prevented the incorrect build constraints for other platforms from being acted on. Change-Id: Iaee5b60a7496166f23fc36319abe07c7a7ec04e5 Reviewed-on: https://go-review.googlesource.com/32311 Run-TryBot: Adam Langley <agl@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
40 lines
936 B
Go
40 lines
936 B
Go
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build amd64,!gccgo,!appengine
|
|
|
|
package blake2s
|
|
|
|
var (
|
|
useSSE4 = supportSSE4()
|
|
useSSSE3 = supportSSSE3()
|
|
useSSE2 = true // Always available on amd64
|
|
useGeneric = false
|
|
)
|
|
|
|
//go:noescape
|
|
func supportSSSE3() bool
|
|
|
|
//go:noescape
|
|
func supportSSE4() bool
|
|
|
|
//go:noescape
|
|
func hashBlocksSSE2(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte)
|
|
|
|
//go:noescape
|
|
func hashBlocksSSSE3(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte)
|
|
|
|
//go:noescape
|
|
func hashBlocksSSE4(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte)
|
|
|
|
func hashBlocks(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) {
|
|
if useSSE4 {
|
|
hashBlocksSSE4(h, c, flag, blocks)
|
|
} else if useSSSE3 {
|
|
hashBlocksSSSE3(h, c, flag, blocks)
|
|
} else {
|
|
hashBlocksSSE2(h, c, flag, blocks)
|
|
}
|
|
}
|