mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 22:12:26 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			162 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
//go:build !appengine && !noasm && gc
 | 
						|
// +build !appengine,!noasm,gc
 | 
						|
 | 
						|
package s2
 | 
						|
 | 
						|
import "github.com/klauspost/compress/internal/race"
 | 
						|
 | 
						|
const hasAmd64Asm = true
 | 
						|
 | 
						|
// encodeBlock encodes a non-empty src to a guaranteed-large-enough dst. It
 | 
						|
// assumes that the varint-encoded length of the decompressed bytes has already
 | 
						|
// been written.
 | 
						|
//
 | 
						|
// It also assumes that:
 | 
						|
//
 | 
						|
//	len(dst) >= MaxEncodedLen(len(src)) &&
 | 
						|
//	minNonLiteralBlockSize <= len(src) && len(src) <= maxBlockSize
 | 
						|
func encodeBlock(dst, src []byte) (d int) {
 | 
						|
	race.ReadSlice(src)
 | 
						|
	race.WriteSlice(dst)
 | 
						|
 | 
						|
	const (
 | 
						|
		// Use 12 bit table when less than...
 | 
						|
		limit12B = 16 << 10
 | 
						|
		// Use 10 bit table when less than...
 | 
						|
		limit10B = 4 << 10
 | 
						|
		// Use 8 bit table when less than...
 | 
						|
		limit8B = 512
 | 
						|
	)
 | 
						|
 | 
						|
	if len(src) >= 4<<20 {
 | 
						|
		return encodeBlockAsm(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit12B {
 | 
						|
		return encodeBlockAsm4MB(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit10B {
 | 
						|
		return encodeBlockAsm12B(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit8B {
 | 
						|
		return encodeBlockAsm10B(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) < minNonLiteralBlockSize {
 | 
						|
		return 0
 | 
						|
	}
 | 
						|
	return encodeBlockAsm8B(dst, src)
 | 
						|
}
 | 
						|
 | 
						|
// encodeBlockBetter encodes a non-empty src to a guaranteed-large-enough dst. It
 | 
						|
// assumes that the varint-encoded length of the decompressed bytes has already
 | 
						|
// been written.
 | 
						|
//
 | 
						|
// It also assumes that:
 | 
						|
//
 | 
						|
//	len(dst) >= MaxEncodedLen(len(src)) &&
 | 
						|
//	minNonLiteralBlockSize <= len(src) && len(src) <= maxBlockSize
 | 
						|
func encodeBlockBetter(dst, src []byte) (d int) {
 | 
						|
	race.ReadSlice(src)
 | 
						|
	race.WriteSlice(dst)
 | 
						|
 | 
						|
	const (
 | 
						|
		// Use 12 bit table when less than...
 | 
						|
		limit12B = 16 << 10
 | 
						|
		// Use 10 bit table when less than...
 | 
						|
		limit10B = 4 << 10
 | 
						|
		// Use 8 bit table when less than...
 | 
						|
		limit8B = 512
 | 
						|
	)
 | 
						|
 | 
						|
	if len(src) > 4<<20 {
 | 
						|
		return encodeBetterBlockAsm(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit12B {
 | 
						|
		return encodeBetterBlockAsm4MB(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit10B {
 | 
						|
		return encodeBetterBlockAsm12B(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit8B {
 | 
						|
		return encodeBetterBlockAsm10B(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) < minNonLiteralBlockSize {
 | 
						|
		return 0
 | 
						|
	}
 | 
						|
	return encodeBetterBlockAsm8B(dst, src)
 | 
						|
}
 | 
						|
 | 
						|
// encodeBlockSnappy encodes a non-empty src to a guaranteed-large-enough dst. It
 | 
						|
// assumes that the varint-encoded length of the decompressed bytes has already
 | 
						|
// been written.
 | 
						|
//
 | 
						|
// It also assumes that:
 | 
						|
//
 | 
						|
//	len(dst) >= MaxEncodedLen(len(src)) &&
 | 
						|
//	minNonLiteralBlockSize <= len(src) && len(src) <= maxBlockSize
 | 
						|
func encodeBlockSnappy(dst, src []byte) (d int) {
 | 
						|
	race.ReadSlice(src)
 | 
						|
	race.WriteSlice(dst)
 | 
						|
 | 
						|
	const (
 | 
						|
		// Use 12 bit table when less than...
 | 
						|
		limit12B = 16 << 10
 | 
						|
		// Use 10 bit table when less than...
 | 
						|
		limit10B = 4 << 10
 | 
						|
		// Use 8 bit table when less than...
 | 
						|
		limit8B = 512
 | 
						|
	)
 | 
						|
	if len(src) >= 64<<10 {
 | 
						|
		return encodeSnappyBlockAsm(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit12B {
 | 
						|
		return encodeSnappyBlockAsm64K(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit10B {
 | 
						|
		return encodeSnappyBlockAsm12B(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit8B {
 | 
						|
		return encodeSnappyBlockAsm10B(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) < minNonLiteralBlockSize {
 | 
						|
		return 0
 | 
						|
	}
 | 
						|
	return encodeSnappyBlockAsm8B(dst, src)
 | 
						|
}
 | 
						|
 | 
						|
// encodeBlockSnappy encodes a non-empty src to a guaranteed-large-enough dst. It
 | 
						|
// assumes that the varint-encoded length of the decompressed bytes has already
 | 
						|
// been written.
 | 
						|
//
 | 
						|
// It also assumes that:
 | 
						|
//
 | 
						|
//	len(dst) >= MaxEncodedLen(len(src)) &&
 | 
						|
//	minNonLiteralBlockSize <= len(src) && len(src) <= maxBlockSize
 | 
						|
func encodeBlockBetterSnappy(dst, src []byte) (d int) {
 | 
						|
	race.ReadSlice(src)
 | 
						|
	race.WriteSlice(dst)
 | 
						|
 | 
						|
	const (
 | 
						|
		// Use 12 bit table when less than...
 | 
						|
		limit12B = 16 << 10
 | 
						|
		// Use 10 bit table when less than...
 | 
						|
		limit10B = 4 << 10
 | 
						|
		// Use 8 bit table when less than...
 | 
						|
		limit8B = 512
 | 
						|
	)
 | 
						|
	if len(src) >= 64<<10 {
 | 
						|
		return encodeSnappyBetterBlockAsm(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit12B {
 | 
						|
		return encodeSnappyBetterBlockAsm64K(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit10B {
 | 
						|
		return encodeSnappyBetterBlockAsm12B(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) >= limit8B {
 | 
						|
		return encodeSnappyBetterBlockAsm10B(dst, src)
 | 
						|
	}
 | 
						|
	if len(src) < minNonLiteralBlockSize {
 | 
						|
		return 0
 | 
						|
	}
 | 
						|
	return encodeSnappyBetterBlockAsm8B(dst, src)
 | 
						|
}
 |