From d6449816ce06963d9d136eee5a56fca5b0616e7e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 11 Apr 2018 17:42:50 +0200 Subject: [PATCH] blake2b: use internal/cpu to determine AVX and SSE 4 support CL 106235 removed runtime.support_avx on which blake2b depends to determine AVX support. Switch to use the corresponding feature flags from internal/cpu instead. While at it, also use AVX2 and SSE4 (for Go 1.7 and later) from there. Change-Id: I4f7a27fcfa0c5d0d7a50444c7aa32519b97e90dd Reviewed-on: https://go-review.googlesource.com/106336 Run-TryBot: Tobias Klauser TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- blake2b/blake2bAVX2_amd64.go | 26 ++++++++++++++------------ blake2b/blake2bAVX2_amd64.s | 12 ------------ 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/blake2b/blake2bAVX2_amd64.go b/blake2b/blake2bAVX2_amd64.go index 8c41cf6..a1e08d7 100644 --- a/blake2b/blake2bAVX2_amd64.go +++ b/blake2b/blake2bAVX2_amd64.go @@ -6,21 +6,23 @@ package blake2b +import _ "unsafe" + +//go:linkname x86_HasAVX internal/cpu.X86.HasAVX +var x86_HasAVX bool + +//go:linkname x86_HasAVX2 internal/cpu.X86.HasAVX2 +var x86_HasAVX2 bool + +//go:linkname x86_HasAVX internal/cpu.X86.HasSSE4 +var x86_HasSSE4 bool + func init() { - useAVX2 = supportsAVX2() - useAVX = supportsAVX() - useSSE4 = supportsSSE4() + useAVX2 = x86_HasAVX2 + useAVX = x86_HasAVX + useSSE4 = x86_HasSSE4 } -//go:noescape -func supportsSSE4() bool - -//go:noescape -func supportsAVX() bool - -//go:noescape -func supportsAVX2() bool - //go:noescape func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) diff --git a/blake2b/blake2bAVX2_amd64.s b/blake2b/blake2bAVX2_amd64.s index 784bce6..5593b1b 100644 --- a/blake2b/blake2bAVX2_amd64.s +++ b/blake2b/blake2bAVX2_amd64.s @@ -748,15 +748,3 @@ noinc: MOVQ BP, SP RET - -// func supportsAVX2() bool -TEXT ·supportsAVX2(SB), 4, $0-1 - MOVQ runtime·support_avx2(SB), AX - MOVB AX, ret+0(FP) - RET - -// func supportsAVX() bool -TEXT ·supportsAVX(SB), 4, $0-1 - MOVQ runtime·support_avx(SB), AX - MOVB AX, ret+0(FP) - RET