github.com/slayercat/go@v0.0.0-20170428012452-c51559813f61/src/hash/crc32/crc32_amd64p32.go (about) 1 // Copyright 2011 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 package crc32 6 7 // This file contains the code to call the SSE 4.2 version of the Castagnoli 8 // CRC. 9 10 // haveSSE42 is defined in crc32_amd64p32.s and uses CPUID to test for SSE 4.2 11 // support. 12 func haveSSE42() bool 13 14 // castagnoliSSE42 is defined in crc32_amd64p32.s and uses the SSE4.2 CRC32 15 // instruction. 16 //go:noescape 17 func castagnoliSSE42(crc uint32, p []byte) uint32 18 19 var sse42 = haveSSE42() 20 21 func archAvailableCastagnoli() bool { 22 return sse42 23 } 24 25 func archInitCastagnoli() { 26 if !sse42 { 27 panic("not available") 28 } 29 // No initialization necessary. 30 } 31 32 func archUpdateCastagnoli(crc uint32, p []byte) uint32 { 33 if !sse42 { 34 panic("not available") 35 } 36 return castagnoliSSE42(crc, p) 37 } 38 39 func archAvailableIEEE() bool { return false } 40 func archInitIEEE() { panic("not available") } 41 func archUpdateIEEE(crc uint32, p []byte) uint32 { panic("not available") }