blob: bea1779e973ecc0209736b93ac43abefc4704495 [file] [log] [blame]
Abhay Kumara2ae5992025-11-10 14:02:24 +00001//go:build !amd64 || appengine || !gc || noasm
2// +build !amd64 appengine !gc noasm
3
4// Copyright 2019+ Klaus Post. All rights reserved.
5// License information can be found in the LICENSE file.
6
7package zstd
8
9import (
10 "math/bits"
11
12 "github.com/klauspost/compress/internal/le"
13)
14
15// matchLen returns the maximum common prefix length of a and b.
16// a must be the shortest of the two.
17func matchLen(a, b []byte) (n int) {
18 left := len(a)
19 for left >= 8 {
20 diff := le.Load64(a, n) ^ le.Load64(b, n)
21 if diff != 0 {
22 return n + bits.TrailingZeros64(diff)>>3
23 }
24 n += 8
25 left -= 8
26 }
27 a = a[n:]
28 b = b[n:]
29
30 for i := range a {
31 if a[i] != b[i] {
32 break
33 }
34 n++
35 }
36 return n
37
38}