Home | History | Annotate | Download | only in crc32
      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") }
     42