Browse Source

xxh32: Fewer accesses to bufused in Write

Benchmark results on amd64:

name      old time/op  new time/op  delta
_XXH32-8  86.3ns ± 0%  82.3ns ± 0%  -4.60%  (p=0.000 n=7+10)
greatroar 5 years ago
parent
commit
2bcf8c01b5
1 changed files with 3 additions and 5 deletions
  1. 3 5
      internal/xxh32/xxh32zero.go

+ 3 - 5
internal/xxh32/xxh32zero.go

@@ -79,8 +79,7 @@ func (xxh *XXHZero) Write(input []byte) (int, error) {
 	v1, v2, v3, v4 := xxh.v1, xxh.v2, xxh.v3, xxh.v4
 	v1, v2, v3, v4 := xxh.v1, xxh.v2, xxh.v3, xxh.v4
 	if m > 0 {
 	if m > 0 {
 		// some data left from previous update
 		// some data left from previous update
-		copy(xxh.buf[xxh.bufused:], input[:r])
-		xxh.bufused += len(input) - r
+		copy(xxh.buf[m:], input)
 
 
 		// fast rotl(13)
 		// fast rotl(13)
 		buf := xxh.buf[:16] // BCE hint.
 		buf := xxh.buf[:16] // BCE hint.
@@ -89,7 +88,6 @@ func (xxh *XXHZero) Write(input []byte) (int, error) {
 		v3 = rol13(v3+binary.LittleEndian.Uint32(buf[8:])*prime2) * prime1
 		v3 = rol13(v3+binary.LittleEndian.Uint32(buf[8:])*prime2) * prime1
 		v4 = rol13(v4+binary.LittleEndian.Uint32(buf[12:])*prime2) * prime1
 		v4 = rol13(v4+binary.LittleEndian.Uint32(buf[12:])*prime2) * prime1
 		p = r
 		p = r
-		xxh.bufused = 0
 	}
 	}
 
 
 	for n := n - 16; p <= n; p += 16 {
 	for n := n - 16; p <= n; p += 16 {
@@ -101,8 +99,8 @@ func (xxh *XXHZero) Write(input []byte) (int, error) {
 	}
 	}
 	xxh.v1, xxh.v2, xxh.v3, xxh.v4 = v1, v2, v3, v4
 	xxh.v1, xxh.v2, xxh.v3, xxh.v4 = v1, v2, v3, v4
 
 
-	copy(xxh.buf[xxh.bufused:], input[p:])
-	xxh.bufused += len(input) - p
+	copy(xxh.buf[:], input[p:])
+	xxh.bufused = len(input) - p
 
 
 	return n, nil
 	return n, nil
 }
 }