38 lines
		
	
	
		
			935 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			935 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 go1.7,amd64,!gccgo,!appengine | ||
|  | 
 | ||
|  | package blake2b | ||
|  | 
 | ||
|  | import "golang.org/x/sys/cpu" | ||
|  | 
 | ||
|  | func init() { | ||
|  | 	useAVX2 = cpu.X86.HasAVX2 | ||
|  | 	useAVX = cpu.X86.HasAVX | ||
|  | 	useSSE4 = cpu.X86.HasSSE41 | ||
|  | } | ||
|  | 
 | ||
|  | //go:noescape | ||
|  | func fAVX2(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) | ||
|  | 
 | ||
|  | //go:noescape | ||
|  | func fAVX(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) | ||
|  | 
 | ||
|  | //go:noescape | ||
|  | func fSSE4(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) | ||
|  | 
 | ||
|  | func f(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) { | ||
|  | 	switch { | ||
|  | 	case useAVX2: | ||
|  | 		fAVX2(h, m, c0, c1, flag, rounds) | ||
|  | 	case useAVX: | ||
|  | 		fAVX(h, m, c0, c1, flag, rounds) | ||
|  | 	case useSSE4: | ||
|  | 		fSSE4(h, m, c0, c1, flag, rounds) | ||
|  | 	default: | ||
|  | 		fGeneric(h, m, c0, c1, flag, rounds) | ||
|  | 	} | ||
|  | } |