From: Joe Tsai Date: Fri, 20 Nov 2015 01:41:57 +0000 (-0800) Subject: hash/crc32: add noescape tags to assembly functions X-Git-Tag: go1.6beta1~300 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=64cc5fd0b3ad20c6e7e8b875317629df8207d9ba;p=gostls13.git hash/crc32: add noescape tags to assembly functions CRC-32 computation is stateless and the p slice does not get stored anywhere. Thus, we mark the assembly functions as noescape so that it doesn't believe that p leaks in: func Update(crc uint32, tab *Table, p []byte) uint32 Before: ./crc32.go:153: leaking param: p After: ./crc32.go:153: Update p does not escape Change-Id: I52ba35b6cc544fff724327140e0c27898431d1dc Reviewed-on: https://go-review.googlesource.com/17069 Reviewed-by: Russ Cox --- diff --git a/src/hash/crc32/crc32_amd64.go b/src/hash/crc32/crc32_amd64.go index 01f86840d6..ab4e2b8c8c 100644 --- a/src/hash/crc32/crc32_amd64.go +++ b/src/hash/crc32/crc32_amd64.go @@ -15,10 +15,12 @@ func haveCLMUL() bool // castagnoliSSE42 is defined in crc_amd64.s and uses the SSE4.2 CRC32 // instruction. +//go:noescape func castagnoliSSE42(crc uint32, p []byte) uint32 // ieeeCLMUL is defined in crc_amd64.s and uses the PCLMULQDQ // instruction as well as SSE 4.1. +//go:noescape func ieeeCLMUL(crc uint32, p []byte) uint32 var sse42 = haveSSE42() diff --git a/src/hash/crc32/crc32_amd64p32.go b/src/hash/crc32/crc32_amd64p32.go index e6c2a523df..067fbb162f 100644 --- a/src/hash/crc32/crc32_amd64p32.go +++ b/src/hash/crc32/crc32_amd64p32.go @@ -13,6 +13,7 @@ func haveSSE42() bool // castagnoliSSE42 is defined in crc_amd64.s and uses the SSE4.2 CRC32 // instruction. +//go:noescape func castagnoliSSE42(crc uint32, p []byte) uint32 var sse42 = haveSSE42()