mirror of https://github.com/docker/cli.git
vendor: github.com/cespare/xxhash v2.1.2
intermediate bump for easier review full diff: https://github.com/cespare/xxhash/compare/v2.1.1...v2.1.2 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
7eba0dad8c
commit
2b7cb5b1bf
|
@ -8,6 +8,7 @@ go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Microsoft/go-winio v0.5.1 // indirect
|
github.com/Microsoft/go-winio v0.5.1 // indirect
|
||||||
|
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||||
github.com/containerd/containerd v1.5.10
|
github.com/containerd/containerd v1.5.10
|
||||||
github.com/coreos/etcd v3.3.27+incompatible // indirect
|
github.com/coreos/etcd v3.3.27+incompatible // indirect
|
||||||
github.com/creack/pty v1.1.11
|
github.com/creack/pty v1.1.11
|
||||||
|
|
|
@ -97,8 +97,9 @@ github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXe
|
||||||
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
|
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
|
||||||
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
|
|
||||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
|
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
|
||||||
|
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
|
github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
|
||||||
github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M=
|
github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M=
|
||||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
language: go
|
|
||||||
go:
|
|
||||||
- "1.x"
|
|
||||||
- master
|
|
||||||
env:
|
|
||||||
- TAGS=""
|
|
||||||
- TAGS="-tags purego"
|
|
||||||
script: go test $TAGS -v ./...
|
|
|
@ -1,7 +1,7 @@
|
||||||
# xxhash
|
# xxhash
|
||||||
|
|
||||||
[![GoDoc](https://godoc.org/github.com/cespare/xxhash?status.svg)](https://godoc.org/github.com/cespare/xxhash)
|
[![Go Reference](https://pkg.go.dev/badge/github.com/cespare/xxhash/v2.svg)](https://pkg.go.dev/github.com/cespare/xxhash/v2)
|
||||||
[![Build Status](https://travis-ci.org/cespare/xxhash.svg?branch=master)](https://travis-ci.org/cespare/xxhash)
|
[![Test](https://github.com/cespare/xxhash/actions/workflows/test.yml/badge.svg)](https://github.com/cespare/xxhash/actions/workflows/test.yml)
|
||||||
|
|
||||||
xxhash is a Go implementation of the 64-bit
|
xxhash is a Go implementation of the 64-bit
|
||||||
[xxHash](http://cyan4973.github.io/xxHash/) algorithm, XXH64. This is a
|
[xxHash](http://cyan4973.github.io/xxHash/) algorithm, XXH64. This is a
|
||||||
|
@ -64,4 +64,6 @@ $ go test -benchtime 10s -bench '/xxhash,direct,bytes'
|
||||||
|
|
||||||
- [InfluxDB](https://github.com/influxdata/influxdb)
|
- [InfluxDB](https://github.com/influxdata/influxdb)
|
||||||
- [Prometheus](https://github.com/prometheus/prometheus)
|
- [Prometheus](https://github.com/prometheus/prometheus)
|
||||||
|
- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics)
|
||||||
- [FreeCache](https://github.com/coocood/freecache)
|
- [FreeCache](https://github.com/coocood/freecache)
|
||||||
|
- [FastCache](https://github.com/VictoriaMetrics/fastcache)
|
||||||
|
|
|
@ -193,7 +193,6 @@ func (d *Digest) UnmarshalBinary(b []byte) error {
|
||||||
b, d.v4 = consumeUint64(b)
|
b, d.v4 = consumeUint64(b)
|
||||||
b, d.total = consumeUint64(b)
|
b, d.total = consumeUint64(b)
|
||||||
copy(d.mem[:], b)
|
copy(d.mem[:], b)
|
||||||
b = b[len(d.mem):]
|
|
||||||
d.n = int(d.total % uint64(len(d.mem)))
|
d.n = int(d.total % uint64(len(d.mem)))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
// Register allocation:
|
// Register allocation:
|
||||||
// AX h
|
// AX h
|
||||||
// CX pointer to advance through b
|
// SI pointer to advance through b
|
||||||
// DX n
|
// DX n
|
||||||
// BX loop end
|
// BX loop end
|
||||||
// R8 v1, k1
|
// R8 v1, k1
|
||||||
|
@ -16,39 +16,39 @@
|
||||||
// R12 tmp
|
// R12 tmp
|
||||||
// R13 prime1v
|
// R13 prime1v
|
||||||
// R14 prime2v
|
// R14 prime2v
|
||||||
// R15 prime4v
|
// DI prime4v
|
||||||
|
|
||||||
// round reads from and advances the buffer pointer in CX.
|
// round reads from and advances the buffer pointer in SI.
|
||||||
// It assumes that R13 has prime1v and R14 has prime2v.
|
// It assumes that R13 has prime1v and R14 has prime2v.
|
||||||
#define round(r) \
|
#define round(r) \
|
||||||
MOVQ (CX), R12 \
|
MOVQ (SI), R12 \
|
||||||
ADDQ $8, CX \
|
ADDQ $8, SI \
|
||||||
IMULQ R14, R12 \
|
IMULQ R14, R12 \
|
||||||
ADDQ R12, r \
|
ADDQ R12, r \
|
||||||
ROLQ $31, r \
|
ROLQ $31, r \
|
||||||
IMULQ R13, r
|
IMULQ R13, r
|
||||||
|
|
||||||
// mergeRound applies a merge round on the two registers acc and val.
|
// mergeRound applies a merge round on the two registers acc and val.
|
||||||
// It assumes that R13 has prime1v, R14 has prime2v, and R15 has prime4v.
|
// It assumes that R13 has prime1v, R14 has prime2v, and DI has prime4v.
|
||||||
#define mergeRound(acc, val) \
|
#define mergeRound(acc, val) \
|
||||||
IMULQ R14, val \
|
IMULQ R14, val \
|
||||||
ROLQ $31, val \
|
ROLQ $31, val \
|
||||||
IMULQ R13, val \
|
IMULQ R13, val \
|
||||||
XORQ val, acc \
|
XORQ val, acc \
|
||||||
IMULQ R13, acc \
|
IMULQ R13, acc \
|
||||||
ADDQ R15, acc
|
ADDQ DI, acc
|
||||||
|
|
||||||
// func Sum64(b []byte) uint64
|
// func Sum64(b []byte) uint64
|
||||||
TEXT ·Sum64(SB), NOSPLIT, $0-32
|
TEXT ·Sum64(SB), NOSPLIT, $0-32
|
||||||
// Load fixed primes.
|
// Load fixed primes.
|
||||||
MOVQ ·prime1v(SB), R13
|
MOVQ ·prime1v(SB), R13
|
||||||
MOVQ ·prime2v(SB), R14
|
MOVQ ·prime2v(SB), R14
|
||||||
MOVQ ·prime4v(SB), R15
|
MOVQ ·prime4v(SB), DI
|
||||||
|
|
||||||
// Load slice.
|
// Load slice.
|
||||||
MOVQ b_base+0(FP), CX
|
MOVQ b_base+0(FP), SI
|
||||||
MOVQ b_len+8(FP), DX
|
MOVQ b_len+8(FP), DX
|
||||||
LEAQ (CX)(DX*1), BX
|
LEAQ (SI)(DX*1), BX
|
||||||
|
|
||||||
// The first loop limit will be len(b)-32.
|
// The first loop limit will be len(b)-32.
|
||||||
SUBQ $32, BX
|
SUBQ $32, BX
|
||||||
|
@ -65,14 +65,14 @@ TEXT ·Sum64(SB), NOSPLIT, $0-32
|
||||||
XORQ R11, R11
|
XORQ R11, R11
|
||||||
SUBQ R13, R11
|
SUBQ R13, R11
|
||||||
|
|
||||||
// Loop until CX > BX.
|
// Loop until SI > BX.
|
||||||
blockLoop:
|
blockLoop:
|
||||||
round(R8)
|
round(R8)
|
||||||
round(R9)
|
round(R9)
|
||||||
round(R10)
|
round(R10)
|
||||||
round(R11)
|
round(R11)
|
||||||
|
|
||||||
CMPQ CX, BX
|
CMPQ SI, BX
|
||||||
JLE blockLoop
|
JLE blockLoop
|
||||||
|
|
||||||
MOVQ R8, AX
|
MOVQ R8, AX
|
||||||
|
@ -100,16 +100,16 @@ noBlocks:
|
||||||
afterBlocks:
|
afterBlocks:
|
||||||
ADDQ DX, AX
|
ADDQ DX, AX
|
||||||
|
|
||||||
// Right now BX has len(b)-32, and we want to loop until CX > len(b)-8.
|
// Right now BX has len(b)-32, and we want to loop until SI > len(b)-8.
|
||||||
ADDQ $24, BX
|
ADDQ $24, BX
|
||||||
|
|
||||||
CMPQ CX, BX
|
CMPQ SI, BX
|
||||||
JG fourByte
|
JG fourByte
|
||||||
|
|
||||||
wordLoop:
|
wordLoop:
|
||||||
// Calculate k1.
|
// Calculate k1.
|
||||||
MOVQ (CX), R8
|
MOVQ (SI), R8
|
||||||
ADDQ $8, CX
|
ADDQ $8, SI
|
||||||
IMULQ R14, R8
|
IMULQ R14, R8
|
||||||
ROLQ $31, R8
|
ROLQ $31, R8
|
||||||
IMULQ R13, R8
|
IMULQ R13, R8
|
||||||
|
@ -117,18 +117,18 @@ wordLoop:
|
||||||
XORQ R8, AX
|
XORQ R8, AX
|
||||||
ROLQ $27, AX
|
ROLQ $27, AX
|
||||||
IMULQ R13, AX
|
IMULQ R13, AX
|
||||||
ADDQ R15, AX
|
ADDQ DI, AX
|
||||||
|
|
||||||
CMPQ CX, BX
|
CMPQ SI, BX
|
||||||
JLE wordLoop
|
JLE wordLoop
|
||||||
|
|
||||||
fourByte:
|
fourByte:
|
||||||
ADDQ $4, BX
|
ADDQ $4, BX
|
||||||
CMPQ CX, BX
|
CMPQ SI, BX
|
||||||
JG singles
|
JG singles
|
||||||
|
|
||||||
MOVL (CX), R8
|
MOVL (SI), R8
|
||||||
ADDQ $4, CX
|
ADDQ $4, SI
|
||||||
IMULQ R13, R8
|
IMULQ R13, R8
|
||||||
XORQ R8, AX
|
XORQ R8, AX
|
||||||
|
|
||||||
|
@ -138,19 +138,19 @@ fourByte:
|
||||||
|
|
||||||
singles:
|
singles:
|
||||||
ADDQ $4, BX
|
ADDQ $4, BX
|
||||||
CMPQ CX, BX
|
CMPQ SI, BX
|
||||||
JGE finalize
|
JGE finalize
|
||||||
|
|
||||||
singlesLoop:
|
singlesLoop:
|
||||||
MOVBQZX (CX), R12
|
MOVBQZX (SI), R12
|
||||||
ADDQ $1, CX
|
ADDQ $1, SI
|
||||||
IMULQ ·prime5v(SB), R12
|
IMULQ ·prime5v(SB), R12
|
||||||
XORQ R12, AX
|
XORQ R12, AX
|
||||||
|
|
||||||
ROLQ $11, AX
|
ROLQ $11, AX
|
||||||
IMULQ R13, AX
|
IMULQ R13, AX
|
||||||
|
|
||||||
CMPQ CX, BX
|
CMPQ SI, BX
|
||||||
JL singlesLoop
|
JL singlesLoop
|
||||||
|
|
||||||
finalize:
|
finalize:
|
||||||
|
@ -179,9 +179,9 @@ TEXT ·writeBlocks(SB), NOSPLIT, $0-40
|
||||||
MOVQ ·prime2v(SB), R14
|
MOVQ ·prime2v(SB), R14
|
||||||
|
|
||||||
// Load slice.
|
// Load slice.
|
||||||
MOVQ b_base+8(FP), CX
|
MOVQ b_base+8(FP), SI
|
||||||
MOVQ b_len+16(FP), DX
|
MOVQ b_len+16(FP), DX
|
||||||
LEAQ (CX)(DX*1), BX
|
LEAQ (SI)(DX*1), BX
|
||||||
SUBQ $32, BX
|
SUBQ $32, BX
|
||||||
|
|
||||||
// Load vN from d.
|
// Load vN from d.
|
||||||
|
@ -199,7 +199,7 @@ blockLoop:
|
||||||
round(R10)
|
round(R10)
|
||||||
round(R11)
|
round(R11)
|
||||||
|
|
||||||
CMPQ CX, BX
|
CMPQ SI, BX
|
||||||
JLE blockLoop
|
JLE blockLoop
|
||||||
|
|
||||||
// Copy vN back to d.
|
// Copy vN back to d.
|
||||||
|
@ -208,8 +208,8 @@ blockLoop:
|
||||||
MOVQ R10, 16(AX)
|
MOVQ R10, 16(AX)
|
||||||
MOVQ R11, 24(AX)
|
MOVQ R11, 24(AX)
|
||||||
|
|
||||||
// The number of bytes written is CX minus the old base pointer.
|
// The number of bytes written is SI minus the old base pointer.
|
||||||
SUBQ b_base+8(FP), CX
|
SUBQ b_base+8(FP), SI
|
||||||
MOVQ CX, ret+32(FP)
|
MOVQ SI, ret+32(FP)
|
||||||
|
|
||||||
RET
|
RET
|
||||||
|
|
|
@ -6,41 +6,52 @@
|
||||||
package xxhash
|
package xxhash
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Notes:
|
|
||||||
//
|
|
||||||
// See https://groups.google.com/d/msg/golang-nuts/dcjzJy-bSpw/tcZYBzQqAQAJ
|
|
||||||
// for some discussion about these unsafe conversions.
|
|
||||||
//
|
|
||||||
// In the future it's possible that compiler optimizations will make these
|
// In the future it's possible that compiler optimizations will make these
|
||||||
// unsafe operations unnecessary: https://golang.org/issue/2205.
|
// XxxString functions unnecessary by realizing that calls such as
|
||||||
|
// Sum64([]byte(s)) don't need to copy s. See https://golang.org/issue/2205.
|
||||||
|
// If that happens, even if we keep these functions they can be replaced with
|
||||||
|
// the trivial safe code.
|
||||||
|
|
||||||
|
// NOTE: The usual way of doing an unsafe string-to-[]byte conversion is:
|
||||||
//
|
//
|
||||||
// Both of these wrapper functions still incur function call overhead since they
|
// var b []byte
|
||||||
// will not be inlined. We could write Go/asm copies of Sum64 and Digest.Write
|
// bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
|
||||||
// for strings to squeeze out a bit more speed. Mid-stack inlining should
|
// bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data
|
||||||
// eventually fix this.
|
// bh.Len = len(s)
|
||||||
|
// bh.Cap = len(s)
|
||||||
|
//
|
||||||
|
// Unfortunately, as of Go 1.15.3 the inliner's cost model assigns a high enough
|
||||||
|
// weight to this sequence of expressions that any function that uses it will
|
||||||
|
// not be inlined. Instead, the functions below use a different unsafe
|
||||||
|
// conversion designed to minimize the inliner weight and allow both to be
|
||||||
|
// inlined. There is also a test (TestInlining) which verifies that these are
|
||||||
|
// inlined.
|
||||||
|
//
|
||||||
|
// See https://github.com/golang/go/issues/42739 for discussion.
|
||||||
|
|
||||||
// Sum64String computes the 64-bit xxHash digest of s.
|
// Sum64String computes the 64-bit xxHash digest of s.
|
||||||
// It may be faster than Sum64([]byte(s)) by avoiding a copy.
|
// It may be faster than Sum64([]byte(s)) by avoiding a copy.
|
||||||
func Sum64String(s string) uint64 {
|
func Sum64String(s string) uint64 {
|
||||||
var b []byte
|
b := *(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)}))
|
||||||
bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
|
|
||||||
bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data
|
|
||||||
bh.Len = len(s)
|
|
||||||
bh.Cap = len(s)
|
|
||||||
return Sum64(b)
|
return Sum64(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteString adds more data to d. It always returns len(s), nil.
|
// WriteString adds more data to d. It always returns len(s), nil.
|
||||||
// It may be faster than Write([]byte(s)) by avoiding a copy.
|
// It may be faster than Write([]byte(s)) by avoiding a copy.
|
||||||
func (d *Digest) WriteString(s string) (n int, err error) {
|
func (d *Digest) WriteString(s string) (n int, err error) {
|
||||||
var b []byte
|
d.Write(*(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)})))
|
||||||
bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
|
// d.Write always returns len(s), nil.
|
||||||
bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data
|
// Ignoring the return output and returning these fixed values buys a
|
||||||
bh.Len = len(s)
|
// savings of 6 in the inliner's cost model.
|
||||||
bh.Cap = len(s)
|
return len(s), nil
|
||||||
return d.Write(b)
|
}
|
||||||
|
|
||||||
|
// sliceHeader is similar to reflect.SliceHeader, but it assumes that the layout
|
||||||
|
// of the first two words is the same as the layout of a string.
|
||||||
|
type sliceHeader struct {
|
||||||
|
s string
|
||||||
|
cap int
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,8 @@ github.com/Microsoft/go-winio
|
||||||
github.com/Microsoft/go-winio/pkg/guid
|
github.com/Microsoft/go-winio/pkg/guid
|
||||||
# github.com/beorn7/perks v1.0.1
|
# github.com/beorn7/perks v1.0.1
|
||||||
github.com/beorn7/perks/quantile
|
github.com/beorn7/perks/quantile
|
||||||
# github.com/cespare/xxhash/v2 v2.1.1
|
# github.com/cespare/xxhash/v2 v2.1.2
|
||||||
|
## explicit
|
||||||
github.com/cespare/xxhash/v2
|
github.com/cespare/xxhash/v2
|
||||||
# github.com/containerd/containerd v1.5.10
|
# github.com/containerd/containerd v1.5.10
|
||||||
## explicit
|
## explicit
|
||||||
|
|
Loading…
Reference in New Issue