vendor: github.com/klauspost/compress v1.20.0

- Add lzw reader/writer
- ci: test against go1.27.x, drop go1.24.x
- flate: Writer L7-9 with dictionary can emit the dictionary to stream
- gzhttp: limit jitter hash to jitterBuffer bytes
- s2: arm64 assembly encoders, lowered from the amd64 avo program
- s2: clamp the Go EncodeBetter skip to match the assembly
- xpress: add Microsoft XPRESS (MS-XCA) decompression
- xxhash: bound input of non-preemptive assembly
- zstd, huff0: improved arm64 lowering, and narrow two table loads to MOVWQZX
- zstd/huff0: break false partial-register dependencies in seqdec/4X decoders
- zstd/huff0: fold two ISA-gap x86 idioms in the avo arm64 lowering

full diff: https://github.com/klauspost/compress/compare/v1.19.2...v1.20.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn
2026-10-01 19:33:28 +02:00
parent 0932e7d9a8
commit 637be3d60c
12 changed files with 875 additions and 979 deletions
+1 -1
View File
@@ -87,7 +87,7 @@ require (
github.com/gorilla/mux v1.8.1 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.30.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/klauspost/compress v1.19.2 // indirect
github.com/klauspost/compress v1.20.0 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
github.com/moby/sys/user v0.4.1 // indirect
github.com/moby/sys/userns v0.2.1 // indirect
+2 -2
View File
@@ -78,8 +78,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.19.2 h1:hMRETovs/pu/dVWN7zIT1PGG8t509MwT6bO7XSi26R8=
github.com/klauspost/compress v1.19.2/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA=
github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/mattn/go-runewidth v0.0.29 h1:3oGF3R/S2N9DQ3ptftzVIvg2eicmojCzlwBEmqEPDfQ=
+2
View File
@@ -6,7 +6,9 @@ This package provides various compression algorithms.
* [S2](https://github.com/klauspost/compress/tree/master/s2#s2-compression) is a high performance replacement for Snappy.
* Optimized [deflate](https://godoc.org/github.com/klauspost/compress/flate) packages which can be used as a dropin replacement for [gzip](https://godoc.org/github.com/klauspost/compress/gzip), [zip](https://godoc.org/github.com/klauspost/compress/zip) and [zlib](https://godoc.org/github.com/klauspost/compress/zlib).
* [snappy](https://github.com/klauspost/compress/tree/master/snappy) is a drop-in replacement for `github.com/golang/snappy` offering better compression and concurrent streams.
* [lzw](https://github.com/klauspost/compress/tree/master/lzw) is a drop-in replacement for `compress/lzw` with 1.4-4x faster decompression and 1.1-2.7x faster compression, depending on the data.
* [huff0](https://github.com/klauspost/compress/tree/master/huff0) and [FSE](https://github.com/klauspost/compress/tree/master/fse) implementations for raw entropy encoding.
* [Xpress](https://github.com/klauspost/compress/tree/master/xpress) decompression of the Microsoft XPRESS (MS-XCA) plain LZ77 and LZ77+Huffman formats (the LZ77+Huffman variant is the one used in WIM images and Windows Compact OS / WOF data).
* [gzhttp](https://github.com/klauspost/compress/tree/master/gzhttp) Provides client and server wrappers for handling gzipped/zstd HTTP requests efficiently.
* [pgzip](https://github.com/klauspost/pgzip) is a separate package that provides a very fast parallel gzip implementation.
+103 -103
View File
@@ -47,12 +47,12 @@ skip_fill0:
SHRQ CL, R13
// v0 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br0.advance(uint8(v0.entry)
MOVB CH, AL
SHLQ CL, R11
ADDB CL, R12
MOVBLZX CH, AX
SHLQ CL, R11
ADDB CL, R12
// val1 := br0.peekTopBits(peekBits)
MOVQ DI, CX
@@ -60,7 +60,7 @@ skip_fill0:
SHRQ CL, R13
// v1 := table[val1&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br0.advance(uint8(v1.entry))
MOVB CH, AH
@@ -104,12 +104,12 @@ skip_fill1:
SHRQ CL, R13
// v0 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br1.advance(uint8(v0.entry)
MOVB CH, AL
SHLQ CL, R11
ADDB CL, R12
MOVBLZX CH, AX
SHLQ CL, R11
ADDB CL, R12
// val1 := br1.peekTopBits(peekBits)
MOVQ DI, CX
@@ -117,7 +117,7 @@ skip_fill1:
SHRQ CL, R13
// v1 := table[val1&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br1.advance(uint8(v1.entry))
MOVB CH, AH
@@ -161,12 +161,12 @@ skip_fill2:
SHRQ CL, R13
// v0 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br2.advance(uint8(v0.entry)
MOVB CH, AL
SHLQ CL, R11
ADDB CL, R12
MOVBLZX CH, AX
SHLQ CL, R11
ADDB CL, R12
// val1 := br2.peekTopBits(peekBits)
MOVQ DI, CX
@@ -174,7 +174,7 @@ skip_fill2:
SHRQ CL, R13
// v1 := table[val1&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br2.advance(uint8(v1.entry))
MOVB CH, AH
@@ -218,12 +218,12 @@ skip_fill3:
SHRQ CL, R13
// v0 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br3.advance(uint8(v0.entry)
MOVB CH, AL
SHLQ CL, R11
ADDB CL, R12
MOVBLZX CH, AX
SHLQ CL, R11
ADDB CL, R12
// val1 := br3.peekTopBits(peekBits)
MOVQ DI, CX
@@ -231,7 +231,7 @@ skip_fill3:
SHRQ CL, R13
// v1 := table[val1&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br3.advance(uint8(v1.entry))
MOVB CH, AH
@@ -259,13 +259,13 @@ skip_fill3:
// func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext)
TEXT ·decompress4x_8b_main_loop_amd64(SB), $0-8
// Preload values
MOVQ ctx+0(FP), CX
MOVBQZX 8(CX), DI
MOVQ 16(CX), BX
MOVQ 48(CX), SI
MOVQ 24(CX), R8
MOVQ 32(CX), R9
MOVQ (CX), R10
MOVQ ctx+0(FP), AX
MOVBQZX 8(AX), DI
MOVQ 16(AX), BX
MOVQ 48(AX), SI
MOVQ 24(AX), R8
MOVQ 32(AX), R9
MOVQ (AX), R10
// Main loop
main_loop:
@@ -278,35 +278,35 @@ main_loop:
MOVBQZX 40(R10), R12
CMPQ R12, $0x20
JBE skip_fill0
MOVQ 24(R10), R13
MOVQ 24(R10), AX
SUBQ $0x20, R12
SUBQ $0x04, R13
MOVQ (R10), R14
SUBQ $0x04, AX
MOVQ (R10), R13
// b.value |= uint64(low) << (b.bitsRead & 63)
MOVL (R13)(R14*1), R14
MOVL (AX)(R13*1), R13
MOVQ R12, CX
SHLQ CL, R14
MOVQ R13, 24(R10)
ORQ R14, R11
SHLQ CL, R13
MOVQ AX, 24(R10)
ORQ R13, R11
// exhausted += (br0.off < 4)
CMPQ R13, $0x04
CMPQ AX, $0x04
ADCB $+0, DL
skip_fill0:
// val0 := br0.peekTopBits(peekBits)
MOVQ R11, R13
MOVQ R11, AX
MOVQ DI, CX
SHRQ CL, R13
SHRQ CL, AX
// v0 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(AX*2), CX
// br0.advance(uint8(v0.entry)
MOVB CH, AL
SHLQ CL, R11
ADDB CL, R12
MOVBLZX CH, AX
SHLQ CL, R11
ADDB CL, R12
// val1 := br0.peekTopBits(peekBits)
MOVQ R11, R13
@@ -314,7 +314,7 @@ skip_fill0:
SHRQ CL, R13
// v1 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br0.advance(uint8(v1.entry)
MOVB CH, AH
@@ -328,7 +328,7 @@ skip_fill0:
SHRQ CL, R13
// v2 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br0.advance(uint8(v2.entry)
MOVB CH, AH
@@ -341,7 +341,7 @@ skip_fill0:
SHRQ CL, R13
// v3 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br0.advance(uint8(v3.entry)
MOVB CH, AL
@@ -365,35 +365,35 @@ skip_fill0:
MOVBQZX 88(R10), R12
CMPQ R12, $0x20
JBE skip_fill1
MOVQ 72(R10), R13
MOVQ 72(R10), AX
SUBQ $0x20, R12
SUBQ $0x04, R13
MOVQ 48(R10), R14
SUBQ $0x04, AX
MOVQ 48(R10), R13
// b.value |= uint64(low) << (b.bitsRead & 63)
MOVL (R13)(R14*1), R14
MOVL (AX)(R13*1), R13
MOVQ R12, CX
SHLQ CL, R14
MOVQ R13, 72(R10)
ORQ R14, R11
SHLQ CL, R13
MOVQ AX, 72(R10)
ORQ R13, R11
// exhausted += (br1.off < 4)
CMPQ R13, $0x04
CMPQ AX, $0x04
ADCB $+0, DL
skip_fill1:
// val0 := br1.peekTopBits(peekBits)
MOVQ R11, R13
MOVQ R11, AX
MOVQ DI, CX
SHRQ CL, R13
SHRQ CL, AX
// v0 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(AX*2), CX
// br1.advance(uint8(v0.entry)
MOVB CH, AL
SHLQ CL, R11
ADDB CL, R12
MOVBLZX CH, AX
SHLQ CL, R11
ADDB CL, R12
// val1 := br1.peekTopBits(peekBits)
MOVQ R11, R13
@@ -401,7 +401,7 @@ skip_fill1:
SHRQ CL, R13
// v1 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br1.advance(uint8(v1.entry)
MOVB CH, AH
@@ -415,7 +415,7 @@ skip_fill1:
SHRQ CL, R13
// v2 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br1.advance(uint8(v2.entry)
MOVB CH, AH
@@ -428,7 +428,7 @@ skip_fill1:
SHRQ CL, R13
// v3 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br1.advance(uint8(v3.entry)
MOVB CH, AL
@@ -452,35 +452,35 @@ skip_fill1:
MOVBQZX 136(R10), R12
CMPQ R12, $0x20
JBE skip_fill2
MOVQ 120(R10), R13
MOVQ 120(R10), AX
SUBQ $0x20, R12
SUBQ $0x04, R13
MOVQ 96(R10), R14
SUBQ $0x04, AX
MOVQ 96(R10), R13
// b.value |= uint64(low) << (b.bitsRead & 63)
MOVL (R13)(R14*1), R14
MOVL (AX)(R13*1), R13
MOVQ R12, CX
SHLQ CL, R14
MOVQ R13, 120(R10)
ORQ R14, R11
SHLQ CL, R13
MOVQ AX, 120(R10)
ORQ R13, R11
// exhausted += (br2.off < 4)
CMPQ R13, $0x04
CMPQ AX, $0x04
ADCB $+0, DL
skip_fill2:
// val0 := br2.peekTopBits(peekBits)
MOVQ R11, R13
MOVQ R11, AX
MOVQ DI, CX
SHRQ CL, R13
SHRQ CL, AX
// v0 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(AX*2), CX
// br2.advance(uint8(v0.entry)
MOVB CH, AL
SHLQ CL, R11
ADDB CL, R12
MOVBLZX CH, AX
SHLQ CL, R11
ADDB CL, R12
// val1 := br2.peekTopBits(peekBits)
MOVQ R11, R13
@@ -488,7 +488,7 @@ skip_fill2:
SHRQ CL, R13
// v1 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br2.advance(uint8(v1.entry)
MOVB CH, AH
@@ -502,7 +502,7 @@ skip_fill2:
SHRQ CL, R13
// v2 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br2.advance(uint8(v2.entry)
MOVB CH, AH
@@ -515,7 +515,7 @@ skip_fill2:
SHRQ CL, R13
// v3 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br2.advance(uint8(v3.entry)
MOVB CH, AL
@@ -539,35 +539,35 @@ skip_fill2:
MOVBQZX 184(R10), R12
CMPQ R12, $0x20
JBE skip_fill3
MOVQ 168(R10), R13
MOVQ 168(R10), AX
SUBQ $0x20, R12
SUBQ $0x04, R13
MOVQ 144(R10), R14
SUBQ $0x04, AX
MOVQ 144(R10), R13
// b.value |= uint64(low) << (b.bitsRead & 63)
MOVL (R13)(R14*1), R14
MOVL (AX)(R13*1), R13
MOVQ R12, CX
SHLQ CL, R14
MOVQ R13, 168(R10)
ORQ R14, R11
SHLQ CL, R13
MOVQ AX, 168(R10)
ORQ R13, R11
// exhausted += (br3.off < 4)
CMPQ R13, $0x04
CMPQ AX, $0x04
ADCB $+0, DL
skip_fill3:
// val0 := br3.peekTopBits(peekBits)
MOVQ R11, R13
MOVQ R11, AX
MOVQ DI, CX
SHRQ CL, R13
SHRQ CL, AX
// v0 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(AX*2), CX
// br3.advance(uint8(v0.entry)
MOVB CH, AL
SHLQ CL, R11
ADDB CL, R12
MOVBLZX CH, AX
SHLQ CL, R11
ADDB CL, R12
// val1 := br3.peekTopBits(peekBits)
MOVQ R11, R13
@@ -575,7 +575,7 @@ skip_fill3:
SHRQ CL, R13
// v1 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br3.advance(uint8(v1.entry)
MOVB CH, AH
@@ -589,7 +589,7 @@ skip_fill3:
SHRQ CL, R13
// v2 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br3.advance(uint8(v2.entry)
MOVB CH, AH
@@ -602,7 +602,7 @@ skip_fill3:
SHRQ CL, R13
// v3 := table[val0&mask]
MOVW (R9)(R13*2), CX
MOVWQZX (R9)(R13*2), CX
// br3.advance(uint8(v3.entry)
MOVB CH, AL
@@ -667,7 +667,7 @@ bitReader_fillFast_1_end:
MOVQ DI, CX
MOVQ R10, R12
SHRQ CL, R12
MOVW (SI)(R12*2), CX
MOVWQZX (SI)(R12*2), CX
MOVB CH, AL
MOVBQZX CL, CX
ADDQ CX, R11
@@ -675,7 +675,7 @@ bitReader_fillFast_1_end:
MOVQ DI, CX
MOVQ R10, R12
SHRQ CL, R12
MOVW (SI)(R12*2), CX
MOVWQZX (SI)(R12*2), CX
MOVB CH, AH
MOVBQZX CL, CX
ADDQ CX, R11
@@ -694,7 +694,7 @@ bitReader_fillFast_2_end:
MOVQ DI, CX
MOVQ R10, R12
SHRQ CL, R12
MOVW (SI)(R12*2), CX
MOVWQZX (SI)(R12*2), CX
MOVB CH, AH
MOVBQZX CL, CX
ADDQ CX, R11
@@ -702,7 +702,7 @@ bitReader_fillFast_2_end:
MOVQ DI, CX
MOVQ R10, R12
SHRQ CL, R12
MOVW (SI)(R12*2), CX
MOVWQZX (SI)(R12*2), CX
MOVB CH, AL
MOVBQZX CL, CX
ADDQ CX, R11
@@ -769,13 +769,13 @@ main_loop:
bitReader_fillFast_1_end:
SHRXQ DI, R10, CX
MOVW (SI)(CX*2), CX
MOVWQZX (SI)(CX*2), CX
MOVB CH, AL
MOVBQZX CL, CX
ADDQ CX, R11
SHLXQ CX, R10, R10
SHRXQ DI, R10, CX
MOVW (SI)(CX*2), CX
MOVWQZX (SI)(CX*2), CX
MOVB CH, AH
MOVBQZX CL, CX
ADDQ CX, R11
@@ -791,13 +791,13 @@ bitReader_fillFast_1_end:
bitReader_fillFast_2_end:
SHRXQ DI, R10, CX
MOVW (SI)(CX*2), CX
MOVWQZX (SI)(CX*2), CX
MOVB CH, AH
MOVBQZX CL, CX
ADDQ CX, R11
SHLXQ CX, R10, R10
SHRXQ DI, R10, CX
MOVW (SI)(CX*2), CX
MOVWQZX (SI)(CX*2), CX
MOVB CH, AL
MOVBQZX CL, CX
ADDQ CX, R11
+97 -152
View File
@@ -1,7 +1,7 @@
// Code generated by command: go run gen.go -out ../decompress.s -arch amd64,arm64 -pkg=huff0. DO NOT EDIT.
// EXPERIMENTAL arm64 output lowered from an amd64 avo program.
//go:build arm64 && !appengine && !noasm && gc
//go:build arm64 && (!appengine && !noasm && gc)
// func decompress4x_main_loop_amd64(ctx *decompress4xContext)
TEXT ·decompress4x_main_loop_arm64(SB), $0-8
@@ -32,8 +32,7 @@ main_loop:
MOVD (R9), R12
// b.value |= uint64(low) << (b.bitsRead & 63)
ADD R12, R0, R15
MOVWU (R15), R12
MOVWU (R0)(R12), R12
MOVD R11, R1
LSL R1, R12, R12
MOVD R0, 24(R9)
@@ -51,12 +50,10 @@ skip_fill0:
LSR R1, R12, R12
// v0 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br0.advance(uint8(v0.entry)
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
UBFX $8, R1, $8, R0
LSL R1, R10, R10
ADD R1, R11, R15
BFI $0, R15, $8, R11
@@ -67,8 +64,7 @@ skip_fill0:
LSR R1, R12, R12
// v1 := table[val1&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br0.advance(uint8(v1.entry))
UBFX $8, R1, $8, R16
@@ -97,8 +93,7 @@ skip_fill0:
MOVD 48(R9), R12
// b.value |= uint64(low) << (b.bitsRead & 63)
ADD R12, R0, R15
MOVWU (R15), R12
MOVWU (R0)(R12), R12
MOVD R11, R1
LSL R1, R12, R12
MOVD R0, 72(R9)
@@ -116,12 +111,10 @@ skip_fill1:
LSR R1, R12, R12
// v0 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br1.advance(uint8(v0.entry)
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
UBFX $8, R1, $8, R0
LSL R1, R10, R10
ADD R1, R11, R15
BFI $0, R15, $8, R11
@@ -132,8 +125,7 @@ skip_fill1:
LSR R1, R12, R12
// v1 := table[val1&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br1.advance(uint8(v1.entry))
UBFX $8, R1, $8, R16
@@ -145,8 +137,7 @@ skip_fill1:
// these two writes get coalesced
// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
ADD R7, R3, R15
MOVH R0, (R15)
MOVH R0, (R3)(R7)
// update the bitreader structure
MOVD R10, 80(R9)
@@ -163,8 +154,7 @@ skip_fill1:
MOVD 96(R9), R12
// b.value |= uint64(low) << (b.bitsRead & 63)
ADD R12, R0, R15
MOVWU (R15), R12
MOVWU (R0)(R12), R12
MOVD R11, R1
LSL R1, R12, R12
MOVD R0, 120(R9)
@@ -182,12 +172,10 @@ skip_fill2:
LSR R1, R12, R12
// v0 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br2.advance(uint8(v0.entry)
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
UBFX $8, R1, $8, R0
LSL R1, R10, R10
ADD R1, R11, R15
BFI $0, R15, $8, R11
@@ -198,8 +186,7 @@ skip_fill2:
LSR R1, R12, R12
// v1 := table[val1&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br2.advance(uint8(v1.entry))
UBFX $8, R1, $8, R16
@@ -211,8 +198,7 @@ skip_fill2:
// these two writes get coalesced
// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
ADD R7<<1, R3, R15
MOVH R0, (R15)
MOVH R0, (R3)(R7<<1)
// update the bitreader structure
MOVD R10, 128(R9)
@@ -229,8 +215,7 @@ skip_fill2:
MOVD 144(R9), R12
// b.value |= uint64(low) << (b.bitsRead & 63)
ADD R12, R0, R15
MOVWU (R15), R12
MOVWU (R0)(R12), R12
MOVD R11, R1
LSL R1, R12, R12
MOVD R0, 168(R9)
@@ -248,12 +233,10 @@ skip_fill3:
LSR R1, R12, R12
// v0 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br3.advance(uint8(v0.entry)
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
UBFX $8, R1, $8, R0
LSL R1, R10, R10
ADD R1, R11, R15
BFI $0, R15, $8, R11
@@ -264,8 +247,7 @@ skip_fill3:
LSR R1, R12, R12
// v1 := table[val1&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br3.advance(uint8(v1.entry))
UBFX $8, R1, $8, R16
@@ -278,16 +260,13 @@ skip_fill3:
// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
ADD R7<<1, R7, R1
ADD R1, R3, R15
MOVH R0, (R15)
MOVH R0, (R3)(R1)
// update the bitreader structure
MOVD R10, 176(R9)
MOVB R11, 184(R9)
ADD $0x02, R3, R3
AND $0xff, R2, R15
AND $0xff, R2, R16
TST R16, R15
TST $0xff, R2
BEQ main_loop
MOVD ctx+0(FP), R0
MOVD 16(R0), R16
@@ -299,13 +278,13 @@ skip_fill3:
// func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext)
TEXT ·decompress4x_8b_main_loop_arm64(SB), $0-8
// Preload values
MOVD ctx+0(FP), R1
MOVBU 8(R1), R6
MOVD 16(R1), R3
MOVD 48(R1), R5
MOVD 24(R1), R7
MOVD 32(R1), R8
MOVD (R1), R9
MOVD ctx+0(FP), R0
MOVBU 8(R0), R6
MOVD 16(R0), R3
MOVD 48(R0), R5
MOVD 24(R0), R7
MOVD 32(R0), R8
MOVD (R0), R9
// Main loop
main_loop:
@@ -319,37 +298,34 @@ main_loop:
MOVBU 40(R9), R11
CMP $0x20, R11
BLS skip_fill0
MOVD 24(R9), R12
MOVD 24(R9), R0
SUB $0x20, R11, R11
SUB $0x04, R12, R12
MOVD (R9), R13
SUB $0x04, R0, R0
MOVD (R9), R12
// b.value |= uint64(low) << (b.bitsRead & 63)
ADD R13, R12, R15
MOVWU (R15), R13
MOVWU (R0)(R12), R12
MOVD R11, R1
LSL R1, R13, R13
MOVD R12, 24(R9)
ORR R13, R10, R10
LSL R1, R12, R12
MOVD R0, 24(R9)
ORR R12, R10, R10
// exhausted += (br0.off < 4)
CMP $0x04, R12
CMP $0x04, R0
CSINC HS, R2, R2, R16
BFI $0, R16, $8, R2
skip_fill0:
// val0 := br0.peekTopBits(peekBits)
MOVD R10, R12
MOVD R10, R0
MOVD R6, R1
LSR R1, R12, R12
LSR R1, R0, R0
// v0 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R0<<1), R1
// br0.advance(uint8(v0.entry)
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
UBFX $8, R1, $8, R0
LSL R1, R10, R10
ADD R1, R11, R15
BFI $0, R15, $8, R11
@@ -360,8 +336,7 @@ skip_fill0:
LSR R1, R12, R12
// v1 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br0.advance(uint8(v1.entry)
UBFX $8, R1, $8, R16
@@ -377,8 +352,7 @@ skip_fill0:
LSR R1, R12, R12
// v2 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br0.advance(uint8(v2.entry)
UBFX $8, R1, $8, R16
@@ -393,8 +367,7 @@ skip_fill0:
LSR R1, R12, R12
// v3 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br0.advance(uint8(v3.entry)
UBFX $8, R1, $8, R16
@@ -420,37 +393,34 @@ skip_fill0:
MOVBU 88(R9), R11
CMP $0x20, R11
BLS skip_fill1
MOVD 72(R9), R12
MOVD 72(R9), R0
SUB $0x20, R11, R11
SUB $0x04, R12, R12
MOVD 48(R9), R13
SUB $0x04, R0, R0
MOVD 48(R9), R12
// b.value |= uint64(low) << (b.bitsRead & 63)
ADD R13, R12, R15
MOVWU (R15), R13
MOVWU (R0)(R12), R12
MOVD R11, R1
LSL R1, R13, R13
MOVD R12, 72(R9)
ORR R13, R10, R10
LSL R1, R12, R12
MOVD R0, 72(R9)
ORR R12, R10, R10
// exhausted += (br1.off < 4)
CMP $0x04, R12
CMP $0x04, R0
CSINC HS, R2, R2, R16
BFI $0, R16, $8, R2
skip_fill1:
// val0 := br1.peekTopBits(peekBits)
MOVD R10, R12
MOVD R10, R0
MOVD R6, R1
LSR R1, R12, R12
LSR R1, R0, R0
// v0 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R0<<1), R1
// br1.advance(uint8(v0.entry)
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
UBFX $8, R1, $8, R0
LSL R1, R10, R10
ADD R1, R11, R15
BFI $0, R15, $8, R11
@@ -461,8 +431,7 @@ skip_fill1:
LSR R1, R12, R12
// v1 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br1.advance(uint8(v1.entry)
UBFX $8, R1, $8, R16
@@ -478,8 +447,7 @@ skip_fill1:
LSR R1, R12, R12
// v2 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br1.advance(uint8(v2.entry)
UBFX $8, R1, $8, R16
@@ -494,8 +462,7 @@ skip_fill1:
LSR R1, R12, R12
// v3 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br1.advance(uint8(v3.entry)
UBFX $8, R1, $8, R16
@@ -510,8 +477,7 @@ skip_fill1:
// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
// out[id * dstEvery + 3] = uint8(v2.entry >> 8)
// out[id * dstEvery + 4] = uint8(v3.entry >> 8)
ADD R7, R3, R15
MOVW R0, (R15)
MOVW R0, (R3)(R7)
// update the bitreader structure
MOVD R10, 80(R9)
@@ -522,37 +488,34 @@ skip_fill1:
MOVBU 136(R9), R11
CMP $0x20, R11
BLS skip_fill2
MOVD 120(R9), R12
MOVD 120(R9), R0
SUB $0x20, R11, R11
SUB $0x04, R12, R12
MOVD 96(R9), R13
SUB $0x04, R0, R0
MOVD 96(R9), R12
// b.value |= uint64(low) << (b.bitsRead & 63)
ADD R13, R12, R15
MOVWU (R15), R13
MOVWU (R0)(R12), R12
MOVD R11, R1
LSL R1, R13, R13
MOVD R12, 120(R9)
ORR R13, R10, R10
LSL R1, R12, R12
MOVD R0, 120(R9)
ORR R12, R10, R10
// exhausted += (br2.off < 4)
CMP $0x04, R12
CMP $0x04, R0
CSINC HS, R2, R2, R16
BFI $0, R16, $8, R2
skip_fill2:
// val0 := br2.peekTopBits(peekBits)
MOVD R10, R12
MOVD R10, R0
MOVD R6, R1
LSR R1, R12, R12
LSR R1, R0, R0
// v0 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R0<<1), R1
// br2.advance(uint8(v0.entry)
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
UBFX $8, R1, $8, R0
LSL R1, R10, R10
ADD R1, R11, R15
BFI $0, R15, $8, R11
@@ -563,8 +526,7 @@ skip_fill2:
LSR R1, R12, R12
// v1 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br2.advance(uint8(v1.entry)
UBFX $8, R1, $8, R16
@@ -580,8 +542,7 @@ skip_fill2:
LSR R1, R12, R12
// v2 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br2.advance(uint8(v2.entry)
UBFX $8, R1, $8, R16
@@ -596,8 +557,7 @@ skip_fill2:
LSR R1, R12, R12
// v3 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br2.advance(uint8(v3.entry)
UBFX $8, R1, $8, R16
@@ -624,37 +584,34 @@ skip_fill2:
MOVBU 184(R9), R11
CMP $0x20, R11
BLS skip_fill3
MOVD 168(R9), R12
MOVD 168(R9), R0
SUB $0x20, R11, R11
SUB $0x04, R12, R12
MOVD 144(R9), R13
SUB $0x04, R0, R0
MOVD 144(R9), R12
// b.value |= uint64(low) << (b.bitsRead & 63)
ADD R13, R12, R15
MOVWU (R15), R13
MOVWU (R0)(R12), R12
MOVD R11, R1
LSL R1, R13, R13
MOVD R12, 168(R9)
ORR R13, R10, R10
LSL R1, R12, R12
MOVD R0, 168(R9)
ORR R12, R10, R10
// exhausted += (br3.off < 4)
CMP $0x04, R12
CMP $0x04, R0
CSINC HS, R2, R2, R16
BFI $0, R16, $8, R2
skip_fill3:
// val0 := br3.peekTopBits(peekBits)
MOVD R10, R12
MOVD R10, R0
MOVD R6, R1
LSR R1, R12, R12
LSR R1, R0, R0
// v0 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R0<<1), R1
// br3.advance(uint8(v0.entry)
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
UBFX $8, R1, $8, R0
LSL R1, R10, R10
ADD R1, R11, R15
BFI $0, R15, $8, R11
@@ -665,8 +622,7 @@ skip_fill3:
LSR R1, R12, R12
// v1 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br3.advance(uint8(v1.entry)
UBFX $8, R1, $8, R16
@@ -682,8 +638,7 @@ skip_fill3:
LSR R1, R12, R12
// v2 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br3.advance(uint8(v2.entry)
UBFX $8, R1, $8, R16
@@ -698,8 +653,7 @@ skip_fill3:
LSR R1, R12, R12
// v3 := table[val0&mask]
ADD R12<<1, R8, R15
MOVHU (R15), R1
MOVHU (R8)(R12<<1), R1
// br3.advance(uint8(v3.entry)
UBFX $8, R1, $8, R16
@@ -715,16 +669,13 @@ skip_fill3:
// out[id * dstEvery + 3] = uint8(v2.entry >> 8)
// out[id * dstEvery + 4] = uint8(v3.entry >> 8)
ADD R7<<1, R7, R1
ADD R1, R3, R15
MOVW R0, (R15)
MOVW R0, (R3)(R1)
// update the bitreader structure
MOVD R10, 176(R9)
MOVB R11, 184(R9)
ADD $0x04, R3, R3
AND $0xff, R2, R15
AND $0xff, R2, R16
TST R16, R15
TST $0xff, R2
BEQ main_loop
MOVD ctx+0(FP), R0
MOVD 16(R0), R16
@@ -761,8 +712,7 @@ main_loop:
BLT bitReader_fillFast_1_end
SUB $0x20, R10, R10
SUB $0x04, R8, R8
ADD R8, R7, R15
MOVWU (R15), R11
MOVWU (R7)(R8), R11
MOVD R10, R1
LSL R1, R11, R11
ORR R11, R9, R9
@@ -771,8 +721,7 @@ bitReader_fillFast_1_end:
MOVD R6, R1
MOVD R9, R11
LSR R1, R11, R11
ADD R11<<1, R5, R15
MOVHU (R15), R1
MOVHU (R5)(R11<<1), R1
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
MOVBU R1, R1
@@ -781,8 +730,7 @@ bitReader_fillFast_1_end:
MOVD R6, R1
MOVD R9, R11
LSR R1, R11, R11
ADD R11<<1, R5, R15
MOVHU (R15), R1
MOVHU (R5)(R11<<1), R1
UBFX $8, R1, $8, R16
BFI $8, R16, $8, R0
MOVBU R1, R1
@@ -793,8 +741,7 @@ bitReader_fillFast_1_end:
BLT bitReader_fillFast_2_end
SUB $0x20, R10, R10
SUB $0x04, R8, R8
ADD R8, R7, R15
MOVWU (R15), R11
MOVWU (R7)(R8), R11
MOVD R10, R1
LSL R1, R11, R11
ORR R11, R9, R9
@@ -803,8 +750,7 @@ bitReader_fillFast_2_end:
MOVD R6, R1
MOVD R9, R11
LSR R1, R11, R11
ADD R11<<1, R5, R15
MOVHU (R15), R1
MOVHU (R5)(R11<<1), R1
UBFX $8, R1, $8, R16
BFI $8, R16, $8, R0
MOVBU R1, R1
@@ -813,8 +759,7 @@ bitReader_fillFast_2_end:
MOVD R6, R1
MOVD R9, R11
LSR R1, R11, R11
ADD R11<<1, R5, R15
MOVHU (R15), R1
MOVHU (R5)(R11<<1), R1
UBFX $8, R1, $8, R16
BFI $0, R16, $8, R0
MOVBU R1, R1
+9 -16
View File
@@ -1,7 +1,7 @@
// Code generated by command: go run gen_fse.go -out ../fse_decoder.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT.
// EXPERIMENTAL arm64 output lowered from an amd64 avo program.
//go:build arm64 && !appengine && !noasm && gc && !noasm
//go:build arm64 && (!appengine && !noasm && gc && !noasm)
// func buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int
TEXT ·buildDtable_asm(SB), $0-24
@@ -26,11 +26,10 @@ TEXT ·buildDtable_asm(SB), $0-24
JMP init_main_loop_condition
init_main_loop:
ADD R8<<1, R1, R15
MOVH (R15), R9
AND $0xffff, R9, R15
MOVH (R1)(R8<<1), R9
MOVD $-1, R16
AND $0xffff, R16, R16
AND $0xffff, R9, R15
CMP R16, R15
BNE do_not_update_high_threshold
ADD R7<<3, R5, R15
@@ -39,8 +38,7 @@ init_main_loop:
MOVD $0x0000000000000001, R9
do_not_update_high_threshold:
ADD R8<<1, R3, R15
MOVH R9, (R15)
MOVH R9, (R3)(R8<<1)
ADD $1, R8, R8
init_main_loop_condition:
@@ -64,8 +62,7 @@ init_main_loop_condition:
spread_main_loop:
MOVD $0, R12
ADD R11<<1, R1, R15
MOVH (R15), R13
MOVH (R1)(R11<<1), R13
JMP spread_inner_loop_condition
spread_inner_loop:
@@ -102,11 +99,9 @@ spread_check_ok:
build_table_main_table:
ADD R6<<3, R5, R15
MOVBU 1(R15), R1
ADD R1<<1, R3, R15
MOVHU (R15), R7
MOVHU (R3)(R1<<1), R7
ADD $1, R7, R8
ADD R1<<1, R3, R15
MOVH R8, (R15)
MOVH R8, (R3)(R1<<1)
MOVD R7, R8
CLZ R8, R16
MOVD $63, R8
@@ -129,12 +124,10 @@ build_table_main_table:
RET
build_table_check1_ok:
AND $0xff, R1, R15
AND $0xff, R1, R16
TST R16, R15
TST $0xff, R1
BNE build_table_check2_ok
AND $0xffff, R7, R15
AND $0xffff, R6, R16
AND $0xffff, R7, R15
CMP R16, R15
BNE build_table_check2_ok
MOVD ctx+8(FP), R0
+12
View File
@@ -52,6 +52,11 @@ func (d *Digest) Reset() {
d.n = 0
}
// maxAsmSize bounds the input handed to a single writeBlocks call. Assembly is
// never preemptible, so an unbounded call holds every P in stop-the-world for
// its duration. Whole 32-byte blocks, so Write can feed it in pieces.
const maxAsmSize = 128 << 10 // 4096 whole 32-byte blocks
// Size always returns 8 bytes.
func (d *Digest) Size() int { return 8 }
@@ -83,6 +88,13 @@ func (d *Digest) Write(b []byte) (n int, err error) {
d.n = 0
}
for len(b) >= maxAsmSize {
// Assembly is not preemptible, so hashing a large buffer in one call
// blocks every stop-the-world for the whole call. Feed it in chunks.
writeBlocks(d, b[:maxAsmSize])
b = b[maxAsmSize:]
}
if len(b) >= 32 {
// One or more full blocks left.
nw := writeBlocks(d, b)
+5 -1
View File
@@ -175,7 +175,11 @@ finalize:
RET
// func writeBlocks(d *Digest, b []byte) int
TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40
//
// Deliberately not NOSPLIT: the stack check is the preemption point that lets a
// stop-the-world proceed between chunks. The frame must be >= abi.StackSmall
// (128), or the assembler marks this leaf NOSPLIT anyway and drops that check.
TEXT ·writeBlocks(SB), $128-40
// Load fixed primes needed for round.
MOVQ ·primes+0(SB), prime1
MOVQ ·primes+8(SB), prime2
+5 -1
View File
@@ -163,7 +163,11 @@ finalize:
RET
// func writeBlocks(s *Digest, b []byte) int
TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40
//
// Deliberately not NOSPLIT: the stack check is the preemption point that lets a
// stop-the-world proceed between chunks. The frame must be >= abi.StackSmall
// (128), or the assembler marks this leaf NOSPLIT anyway and drops that check.
TEXT ·writeBlocks(SB), $128-40
LDP ·primes+0(SB), (prime1, prime2)
// Load state. Assume v[1-4] are stored contiguously.
File diff suppressed because it is too large Load Diff
+271 -335
View File
@@ -1,7 +1,7 @@
// Code generated by command: go run gen.go -out ../seqdec.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT.
// EXPERIMENTAL arm64 output lowered from an amd64 avo program.
//go:build arm64 && !appengine && !noasm && gc && !noasm
//go:build arm64 && (!appengine && !noasm && gc && !noasm)
// func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int
// Requires: CMOV
@@ -60,8 +60,7 @@ sequenceDecs_decode_amd64_fill_end:
MOVD R3, R1
MOVD R2, R14
LSL R1, R14, R14
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decode_amd64_of_update_zero
@@ -82,8 +81,7 @@ sequenceDecs_decode_amd64_of_update_zero:
MOVD R3, R1
MOVD R2, R14
LSL R1, R14, R14
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decode_amd64_ml_update_zero
@@ -133,8 +131,7 @@ sequenceDecs_decode_amd64_fill_2_end:
MOVD R3, R1
MOVD R2, R14
LSL R1, R14, R14
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decode_amd64_ll_update_zero
@@ -151,14 +148,12 @@ sequenceDecs_decode_amd64_ll_update_zero:
MOVD R0, (R9)
// Fill bitreader for state updates
MOVD R13, 8(RSP)
MOVD R8, R0
LSR $0x08, R0, R0
MOVBU R0, R0
MOVD ctx+16(FP), R1
MOVD 96(R1), R16
CMP $0x00, R16
BEQ sequenceDecs_decode_amd64_skip_update
MOVD R13, 8(RSP)
UBFX $8, R8, $8, R0
MOVD ctx+16(FP), R1
MOVD 96(R1), R16
CMP $0x00, R16
BEQ sequenceDecs_decode_amd64_skip_update
// Update Literal Length State
MOVBU R6, R13
@@ -169,7 +164,7 @@ sequenceDecs_decode_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R14, R14
MOVD $0x00000001, R4
BFI $0, R13, $8, R1
MOVBU R13, R1
LSLW R1, R4, R4
SUBW $1, R4, R4
AND R4, R14, R14
@@ -178,8 +173,7 @@ sequenceDecs_decode_amd64_ll_update_zero:
// Load ctx.llTable
MOVD ctx+16(FP), R1
MOVD (R1), R1
ADD R6<<3, R1, R15
MOVD (R15), R6
MOVD (R1)(R6<<3), R6
// Update Match Length State
MOVBU R7, R13
@@ -190,7 +184,7 @@ sequenceDecs_decode_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R14, R14
MOVD $0x00000001, R4
BFI $0, R13, $8, R1
MOVBU R13, R1
LSLW R1, R4, R4
SUBW $1, R4, R4
AND R4, R14, R14
@@ -199,8 +193,7 @@ sequenceDecs_decode_amd64_ll_update_zero:
// Load ctx.mlTable
MOVD ctx+16(FP), R1
MOVD 24(R1), R1
ADD R7<<3, R1, R15
MOVD (R15), R7
MOVD (R1)(R7<<3), R7
// Update Offset State
MOVBU R8, R13
@@ -211,7 +204,7 @@ sequenceDecs_decode_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R14, R14
MOVD $0x00000001, R4
BFI $0, R13, $8, R1
MOVBU R13, R1
LSLW R1, R4, R4
SUBW $1, R4, R4
AND R4, R14, R14
@@ -220,8 +213,7 @@ sequenceDecs_decode_amd64_ll_update_zero:
// Load ctx.ofTable
MOVD ctx+16(FP), R1
MOVD 48(R1), R1
ADD R8<<3, R1, R15
MOVD (R15), R8
MOVD (R1)(R8<<3), R8
sequenceDecs_decode_amd64_skip_update:
// Adjust offset
@@ -411,8 +403,7 @@ sequenceDecs_decode_56_amd64_fill_end:
MOVD R3, R1
MOVD R2, R14
LSL R1, R14, R14
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decode_56_amd64_of_update_zero
@@ -433,8 +424,7 @@ sequenceDecs_decode_56_amd64_of_update_zero:
MOVD R3, R1
MOVD R2, R14
LSL R1, R14, R14
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decode_56_amd64_ml_update_zero
@@ -455,8 +445,7 @@ sequenceDecs_decode_56_amd64_ml_update_zero:
MOVD R3, R1
MOVD R2, R14
LSL R1, R14, R14
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decode_56_amd64_ll_update_zero
@@ -473,14 +462,12 @@ sequenceDecs_decode_56_amd64_ll_update_zero:
MOVD R0, (R9)
// Fill bitreader for state updates
MOVD R13, 8(RSP)
MOVD R8, R0
LSR $0x08, R0, R0
MOVBU R0, R0
MOVD ctx+16(FP), R1
MOVD 96(R1), R16
CMP $0x00, R16
BEQ sequenceDecs_decode_56_amd64_skip_update
MOVD R13, 8(RSP)
UBFX $8, R8, $8, R0
MOVD ctx+16(FP), R1
MOVD 96(R1), R16
CMP $0x00, R16
BEQ sequenceDecs_decode_56_amd64_skip_update
// Update Literal Length State
MOVBU R6, R13
@@ -491,7 +478,7 @@ sequenceDecs_decode_56_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R14, R14
MOVD $0x00000001, R4
BFI $0, R13, $8, R1
MOVBU R13, R1
LSLW R1, R4, R4
SUBW $1, R4, R4
AND R4, R14, R14
@@ -500,8 +487,7 @@ sequenceDecs_decode_56_amd64_ll_update_zero:
// Load ctx.llTable
MOVD ctx+16(FP), R1
MOVD (R1), R1
ADD R6<<3, R1, R15
MOVD (R15), R6
MOVD (R1)(R6<<3), R6
// Update Match Length State
MOVBU R7, R13
@@ -512,7 +498,7 @@ sequenceDecs_decode_56_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R14, R14
MOVD $0x00000001, R4
BFI $0, R13, $8, R1
MOVBU R13, R1
LSLW R1, R4, R4
SUBW $1, R4, R4
AND R4, R14, R14
@@ -521,8 +507,7 @@ sequenceDecs_decode_56_amd64_ll_update_zero:
// Load ctx.mlTable
MOVD ctx+16(FP), R1
MOVD 24(R1), R1
ADD R7<<3, R1, R15
MOVD (R15), R7
MOVD (R1)(R7<<3), R7
// Update Offset State
MOVBU R8, R13
@@ -533,7 +518,7 @@ sequenceDecs_decode_56_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R14, R14
MOVD $0x00000001, R4
BFI $0, R13, $8, R1
MOVBU R13, R1
LSLW R1, R4, R4
SUBW $1, R4, R4
AND R4, R14, R14
@@ -542,8 +527,7 @@ sequenceDecs_decode_56_amd64_ll_update_zero:
// Load ctx.ofTable
MOVD ctx+16(FP), R1
MOVD 48(R1), R1
ADD R8<<3, R1, R15
MOVD (R15), R8
MOVD (R1)(R8<<3), R8
sequenceDecs_decode_56_amd64_skip_update:
// Adjust offset
@@ -716,16 +700,16 @@ main_loop:
MOVD $0, R13
copy_1:
ADD R13, R5, R15
VLD1 (R15), [V0.B16]
ADD R13, R3, R15
VST1 [V0.B16], (R15)
ADD $0x10, R13, R13
CMP R10, R13
BLO copy_1
ADD R10, R5, R5
ADD R10, R3, R3
ADD R10, R6, R6
ADD R13, R5, R15
FMOVQ (R15), F0
ADD R13, R3, R15
FMOVQ F0, (R15)
ADD $0x10, R13, R13
CMP R10, R13
BLO copy_1
ADD R10, R5, R5
ADD R10, R3, R3
ADD R10, R6, R6
// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)
check_offset:
@@ -748,21 +732,19 @@ check_offset:
BLO copy_4_small
copy_4_loop:
VLD1 (R13), [V0.B16]
VST1 [V0.B16], (R3)
ADD $0x10, R13, R13
ADD $0x10, R3, R3
SUBS $0x10, R10, R10
BHS copy_4_loop
ADD R10, R13, R13
ADD $16, R13, R13
ADD R10, R3, R3
ADD $16, R3, R3
ADD $-16, R13, R15
VLD1 (R15), [V0.B16]
ADD $-16, R3, R15
VST1 [V0.B16], (R15)
JMP copy_4_end
FMOVQ (R13), F0
FMOVQ F0, (R3)
ADD $0x10, R13, R13
ADD $0x10, R3, R3
SUBS $0x10, R10, R10
BHS copy_4_loop
ADD R10, R13, R13
ADD $16, R13, R13
ADD R10, R3, R3
ADD $16, R3, R3
FMOVQ -16(R13), F0
FMOVQ F0, -16(R3)
JMP copy_4_end
copy_4_small:
CMP $0x03, R12
@@ -816,21 +798,19 @@ copy_all_from_history:
BLO copy_5_small
copy_5_loop:
VLD1 (R13), [V0.B16]
VST1 [V0.B16], (R3)
ADD $0x10, R13, R13
ADD $0x10, R3, R3
SUBS $0x10, R14, R14
BHS copy_5_loop
ADD R14, R13, R13
ADD $16, R13, R13
ADD R14, R3, R3
ADD $16, R3, R3
ADD $-16, R13, R15
VLD1 (R15), [V0.B16]
ADD $-16, R3, R15
VST1 [V0.B16], (R15)
JMP copy_5_end
FMOVQ (R13), F0
FMOVQ F0, (R3)
ADD $0x10, R13, R13
ADD $0x10, R3, R3
SUBS $0x10, R14, R14
BHS copy_5_loop
ADD R14, R13, R13
ADD $16, R13, R13
ADD R14, R3, R3
ADD $16, R3, R3
FMOVQ -16(R13), F0
FMOVQ F0, -16(R3)
JMP copy_5_end
copy_5_small:
CMP $0x03, R10
@@ -903,21 +883,20 @@ copy_match:
ADD R12, R3, R3
copy_2:
VLD1 (R10), [V0.B16]
VST1 [V0.B16], (R11)
ADD $0x10, R10, R10
ADD $0x10, R11, R11
SUBS $0x10, R12, R12
BHI copy_2
JMP handle_loop
FMOVQ (R10), F0
FMOVQ F0, (R11)
ADD $0x10, R10, R10
ADD $0x10, R11, R11
SUBS $0x10, R12, R12
BHI copy_2
JMP handle_loop
// Copy overlapping match
copy_overlapping_match:
ADD R12, R6, R6
copy_slow_3:
MOVBU (R10), R16
BFI $0, R16, $8, R11
MOVBU (R10), R11
MOVB R11, (R3)
ADD $1, R10, R10
ADD $1, R3, R3
@@ -1002,21 +981,19 @@ main_loop:
BLO copy_1_small
copy_1_loop:
VLD1 (R5), [V0.B16]
VST1 [V0.B16], (R3)
ADD $0x10, R5, R5
ADD $0x10, R3, R3
SUBS $0x10, R13, R13
BHS copy_1_loop
ADD R13, R5, R5
ADD $16, R5, R5
ADD R13, R3, R3
ADD $16, R3, R3
ADD $-16, R5, R15
VLD1 (R15), [V0.B16]
ADD $-16, R3, R15
VST1 [V0.B16], (R15)
JMP copy_1_end
FMOVQ (R5), F0
FMOVQ F0, (R3)
ADD $0x10, R5, R5
ADD $0x10, R3, R3
SUBS $0x10, R13, R13
BHS copy_1_loop
ADD R13, R5, R5
ADD $16, R5, R5
ADD R13, R3, R3
ADD $16, R3, R3
FMOVQ -16(R5), F0
FMOVQ F0, -16(R3)
JMP copy_1_end
copy_1_small:
CMP $0x03, R10
@@ -1094,21 +1071,19 @@ check_offset:
BLO copy_4_small
copy_4_loop:
VLD1 (R13), [V0.B16]
VST1 [V0.B16], (R3)
ADD $0x10, R13, R13
ADD $0x10, R3, R3
SUBS $0x10, R10, R10
BHS copy_4_loop
ADD R10, R13, R13
ADD $16, R13, R13
ADD R10, R3, R3
ADD $16, R3, R3
ADD $-16, R13, R15
VLD1 (R15), [V0.B16]
ADD $-16, R3, R15
VST1 [V0.B16], (R15)
JMP copy_4_end
FMOVQ (R13), F0
FMOVQ F0, (R3)
ADD $0x10, R13, R13
ADD $0x10, R3, R3
SUBS $0x10, R10, R10
BHS copy_4_loop
ADD R10, R13, R13
ADD $16, R13, R13
ADD R10, R3, R3
ADD $16, R3, R3
FMOVQ -16(R13), F0
FMOVQ F0, -16(R3)
JMP copy_4_end
copy_4_small:
CMP $0x03, R12
@@ -1162,21 +1137,19 @@ copy_all_from_history:
BLO copy_5_small
copy_5_loop:
VLD1 (R13), [V0.B16]
VST1 [V0.B16], (R3)
ADD $0x10, R13, R13
ADD $0x10, R3, R3
SUBS $0x10, R14, R14
BHS copy_5_loop
ADD R14, R13, R13
ADD $16, R13, R13
ADD R14, R3, R3
ADD $16, R3, R3
ADD $-16, R13, R15
VLD1 (R15), [V0.B16]
ADD $-16, R3, R15
VST1 [V0.B16], (R15)
JMP copy_5_end
FMOVQ (R13), F0
FMOVQ F0, (R3)
ADD $0x10, R13, R13
ADD $0x10, R3, R3
SUBS $0x10, R14, R14
BHS copy_5_loop
ADD R14, R13, R13
ADD $16, R13, R13
ADD R14, R3, R3
ADD $16, R3, R3
FMOVQ -16(R13), F0
FMOVQ F0, -16(R3)
JMP copy_5_end
copy_5_small:
CMP $0x03, R10
@@ -1250,21 +1223,19 @@ copy_match:
BLO copy_2_small
copy_2_loop:
VLD1 (R10), [V0.B16]
VST1 [V0.B16], (R3)
ADD $0x10, R10, R10
ADD $0x10, R3, R3
SUBS $0x10, R11, R11
BHS copy_2_loop
ADD R11, R10, R10
ADD $16, R10, R10
ADD R11, R3, R3
ADD $16, R3, R3
ADD $-16, R10, R15
VLD1 (R15), [V0.B16]
ADD $-16, R3, R15
VST1 [V0.B16], (R15)
JMP copy_2_end
FMOVQ (R10), F0
FMOVQ F0, (R3)
ADD $0x10, R10, R10
ADD $0x10, R3, R3
SUBS $0x10, R11, R11
BHS copy_2_loop
ADD R11, R10, R10
ADD $16, R10, R10
ADD R11, R3, R3
ADD $16, R3, R3
FMOVQ -16(R10), F0
FMOVQ F0, -16(R3)
JMP copy_2_end
copy_2_small:
CMP $0x03, R12
@@ -1326,8 +1297,7 @@ copy_overlapping_match:
ADD R12, R6, R6
copy_slow_3:
MOVBU (R10), R16
BFI $0, R16, $8, R11
MOVBU (R10), R11
MOVB R11, (R3)
ADD $1, R10, R10
ADD $1, R3, R3
@@ -1453,8 +1423,7 @@ sequenceDecs_decodeSync_amd64_fill_end:
MOVD R3, R1
MOVD R2, R13
LSL R1, R13, R13
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decodeSync_amd64_of_update_zero
@@ -1475,8 +1444,7 @@ sequenceDecs_decodeSync_amd64_of_update_zero:
MOVD R3, R1
MOVD R2, R13
LSL R1, R13, R13
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decodeSync_amd64_ml_update_zero
@@ -1526,8 +1494,7 @@ sequenceDecs_decodeSync_amd64_fill_2_end:
MOVD R3, R1
MOVD R2, R13
LSL R1, R13, R13
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decodeSync_amd64_ll_update_zero
@@ -1544,14 +1511,12 @@ sequenceDecs_decodeSync_amd64_ll_update_zero:
MOVD R0, 32(RSP)
// Fill bitreader for state updates
MOVD R12, 8(RSP)
MOVD R8, R0
LSR $0x08, R0, R0
MOVBU R0, R0
MOVD ctx+16(FP), R1
MOVD 96(R1), R16
CMP $0x00, R16
BEQ sequenceDecs_decodeSync_amd64_skip_update
MOVD R12, 8(RSP)
UBFX $8, R8, $8, R0
MOVD ctx+16(FP), R1
MOVD 96(R1), R16
CMP $0x00, R16
BEQ sequenceDecs_decodeSync_amd64_skip_update
// Update Literal Length State
MOVBU R6, R12
@@ -1562,7 +1527,7 @@ sequenceDecs_decodeSync_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R13, R13
MOVD $0x00000001, R14
BFI $0, R12, $8, R1
MOVBU R12, R1
LSLW R1, R14, R14
SUBW $1, R14, R14
AND R14, R13, R13
@@ -1571,8 +1536,7 @@ sequenceDecs_decodeSync_amd64_ll_update_zero:
// Load ctx.llTable
MOVD ctx+16(FP), R1
MOVD (R1), R1
ADD R6<<3, R1, R15
MOVD (R15), R6
MOVD (R1)(R6<<3), R6
// Update Match Length State
MOVBU R7, R12
@@ -1583,7 +1547,7 @@ sequenceDecs_decodeSync_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R13, R13
MOVD $0x00000001, R14
BFI $0, R12, $8, R1
MOVBU R12, R1
LSLW R1, R14, R14
SUBW $1, R14, R14
AND R14, R13, R13
@@ -1592,8 +1556,7 @@ sequenceDecs_decodeSync_amd64_ll_update_zero:
// Load ctx.mlTable
MOVD ctx+16(FP), R1
MOVD 24(R1), R1
ADD R7<<3, R1, R15
MOVD (R15), R7
MOVD (R1)(R7<<3), R7
// Update Offset State
MOVBU R8, R12
@@ -1604,7 +1567,7 @@ sequenceDecs_decodeSync_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R13, R13
MOVD $0x00000001, R14
BFI $0, R12, $8, R1
MOVBU R12, R1
LSLW R1, R14, R14
SUBW $1, R14, R14
AND R14, R13, R13
@@ -1613,21 +1576,18 @@ sequenceDecs_decodeSync_amd64_ll_update_zero:
// Load ctx.ofTable
MOVD ctx+16(FP), R1
MOVD 48(R1), R1
ADD R8<<3, R1, R15
MOVD (R15), R8
MOVD (R1)(R8<<3), R8
sequenceDecs_decodeSync_amd64_skip_update:
// Adjust offset
MOVD s+0(FP), R1
MOVD 16(RSP), R12
CMP $0x01, R0
BLS sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0
ADD $144, R1, R15
VLD1 (R15), [V0.B16]
MOVD R12, 144(R1)
ADD $152, R1, R15
VST1 [V0.B16], (R15)
JMP sequenceDecs_decodeSync_amd64_after_adjust
MOVD s+0(FP), R1
MOVD 16(RSP), R12
CMP $0x01, R0
BLS sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0
FMOVQ 144(R1), F0
MOVD R12, 144(R1)
FMOVQ F0, 152(R1)
JMP sequenceDecs_decodeSync_amd64_after_adjust
sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0:
MOVD 32(RSP), R16
@@ -1709,16 +1669,16 @@ sequenceDecs_decodeSync_amd64_match_len_ofs_ok:
MOVD $0, R13
copy_1:
ADD R13, R10, R15
VLD1 (R15), [V0.B16]
ADD R13, R9, R15
VST1 [V0.B16], (R15)
ADD $0x10, R13, R13
CMP R0, R13
BLO copy_1
ADD R0, R10, R10
ADD R0, R9, R9
ADD R0, R11, R11
ADD R13, R10, R15
FMOVQ (R15), F0
ADD R13, R9, R15
FMOVQ F0, (R15)
ADD $0x10, R13, R13
CMP R0, R13
BLO copy_1
ADD R0, R10, R10
ADD R0, R9, R9
ADD R0, R11, R11
// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)
check_offset:
@@ -1744,21 +1704,19 @@ check_offset:
BLO copy_4_small
copy_4_loop:
VLD1 (R13), [V0.B16]
VST1 [V0.B16], (R9)
ADD $0x10, R13, R13
ADD $0x10, R9, R9
SUBS $0x10, R0, R0
BHS copy_4_loop
ADD R0, R13, R13
ADD $16, R13, R13
ADD R0, R9, R9
ADD $16, R9, R9
ADD $-16, R13, R15
VLD1 (R15), [V0.B16]
ADD $-16, R9, R15
VST1 [V0.B16], (R15)
JMP copy_4_end
FMOVQ (R13), F0
FMOVQ F0, (R9)
ADD $0x10, R13, R13
ADD $0x10, R9, R9
SUBS $0x10, R0, R0
BHS copy_4_loop
ADD R0, R13, R13
ADD $16, R13, R13
ADD R0, R9, R9
ADD $16, R9, R9
FMOVQ -16(R13), F0
FMOVQ F0, -16(R9)
JMP copy_4_end
copy_4_small:
CMP $0x03, R12
@@ -1809,21 +1767,19 @@ copy_all_from_history:
BLO copy_5_small
copy_5_loop:
VLD1 (R13), [V0.B16]
VST1 [V0.B16], (R9)
ADD $0x10, R13, R13
ADD $0x10, R9, R9
SUBS $0x10, R14, R14
BHS copy_5_loop
ADD R14, R13, R13
ADD $16, R13, R13
ADD R14, R9, R9
ADD $16, R9, R9
ADD $-16, R13, R15
VLD1 (R15), [V0.B16]
ADD $-16, R9, R15
VST1 [V0.B16], (R15)
JMP copy_5_end
FMOVQ (R13), F0
FMOVQ F0, (R9)
ADD $0x10, R13, R13
ADD $0x10, R9, R9
SUBS $0x10, R14, R14
BHS copy_5_loop
ADD R14, R13, R13
ADD $16, R13, R13
ADD R14, R9, R9
ADD $16, R9, R9
FMOVQ -16(R13), F0
FMOVQ F0, -16(R9)
JMP copy_5_end
copy_5_small:
CMP $0x03, R0
@@ -1896,21 +1852,20 @@ copy_match:
ADD R12, R9, R9
copy_2:
VLD1 (R0), [V0.B16]
VST1 [V0.B16], (R1)
ADD $0x10, R0, R0
ADD $0x10, R1, R1
SUBS $0x10, R12, R12
BHI copy_2
JMP handle_loop
FMOVQ (R0), F0
FMOVQ F0, (R1)
ADD $0x10, R0, R0
ADD $0x10, R1, R1
SUBS $0x10, R12, R12
BHI copy_2
JMP handle_loop
// Copy overlapping match
copy_overlapping_match:
ADD R12, R11, R11
copy_slow_3:
MOVBU (R0), R16
BFI $0, R16, $8, R1
MOVBU (R0), R1
MOVB R1, (R9)
ADD $1, R0, R0
ADD $1, R9, R9
@@ -2078,8 +2033,7 @@ sequenceDecs_decodeSync_safe_amd64_fill_end:
MOVD R3, R1
MOVD R2, R13
LSL R1, R13, R13
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decodeSync_safe_amd64_of_update_zero
@@ -2100,8 +2054,7 @@ sequenceDecs_decodeSync_safe_amd64_of_update_zero:
MOVD R3, R1
MOVD R2, R13
LSL R1, R13, R13
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decodeSync_safe_amd64_ml_update_zero
@@ -2151,8 +2104,7 @@ sequenceDecs_decodeSync_safe_amd64_fill_2_end:
MOVD R3, R1
MOVD R2, R13
LSL R1, R13, R13
UBFX $8, R0, $8, R16
BFI $0, R16, $8, R1
UBFX $8, R0, $8, R1
LSR $0x20, R0, R0
TST R1, R1
BEQ sequenceDecs_decodeSync_safe_amd64_ll_update_zero
@@ -2169,14 +2121,12 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
MOVD R0, 32(RSP)
// Fill bitreader for state updates
MOVD R12, 8(RSP)
MOVD R8, R0
LSR $0x08, R0, R0
MOVBU R0, R0
MOVD ctx+16(FP), R1
MOVD 96(R1), R16
CMP $0x00, R16
BEQ sequenceDecs_decodeSync_safe_amd64_skip_update
MOVD R12, 8(RSP)
UBFX $8, R8, $8, R0
MOVD ctx+16(FP), R1
MOVD 96(R1), R16
CMP $0x00, R16
BEQ sequenceDecs_decodeSync_safe_amd64_skip_update
// Update Literal Length State
MOVBU R6, R12
@@ -2187,7 +2137,7 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R13, R13
MOVD $0x00000001, R14
BFI $0, R12, $8, R1
MOVBU R12, R1
LSLW R1, R14, R14
SUBW $1, R14, R14
AND R14, R13, R13
@@ -2196,8 +2146,7 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
// Load ctx.llTable
MOVD ctx+16(FP), R1
MOVD (R1), R1
ADD R6<<3, R1, R15
MOVD (R15), R6
MOVD (R1)(R6<<3), R6
// Update Match Length State
MOVBU R7, R12
@@ -2208,7 +2157,7 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R13, R13
MOVD $0x00000001, R14
BFI $0, R12, $8, R1
MOVBU R12, R1
LSLW R1, R14, R14
SUBW $1, R14, R14
AND R14, R13, R13
@@ -2217,8 +2166,7 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
// Load ctx.mlTable
MOVD ctx+16(FP), R1
MOVD 24(R1), R1
ADD R7<<3, R1, R15
MOVD (R15), R7
MOVD (R1)(R7<<3), R7
// Update Offset State
MOVBU R8, R12
@@ -2229,7 +2177,7 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
NEG R1, R16
ROR R16, R13, R13
MOVD $0x00000001, R14
BFI $0, R12, $8, R1
MOVBU R12, R1
LSLW R1, R14, R14
SUBW $1, R14, R14
AND R14, R13, R13
@@ -2238,21 +2186,18 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
// Load ctx.ofTable
MOVD ctx+16(FP), R1
MOVD 48(R1), R1
ADD R8<<3, R1, R15
MOVD (R15), R8
MOVD (R1)(R8<<3), R8
sequenceDecs_decodeSync_safe_amd64_skip_update:
// Adjust offset
MOVD s+0(FP), R1
MOVD 16(RSP), R12
CMP $0x01, R0
BLS sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0
ADD $144, R1, R15
VLD1 (R15), [V0.B16]
MOVD R12, 144(R1)
ADD $152, R1, R15
VST1 [V0.B16], (R15)
JMP sequenceDecs_decodeSync_safe_amd64_after_adjust
MOVD s+0(FP), R1
MOVD 16(RSP), R12
CMP $0x01, R0
BLS sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0
FMOVQ 144(R1), F0
MOVD R12, 144(R1)
FMOVQ F0, 152(R1)
JMP sequenceDecs_decodeSync_safe_amd64_after_adjust
sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0:
MOVD 32(RSP), R16
@@ -2335,21 +2280,19 @@ sequenceDecs_decodeSync_safe_amd64_match_len_ofs_ok:
BLO copy_1_small
copy_1_loop:
VLD1 (R10), [V0.B16]
VST1 [V0.B16], (R9)
ADD $0x10, R10, R10
ADD $0x10, R9, R9
SUBS $0x10, R13, R13
BHS copy_1_loop
ADD R13, R10, R10
ADD $16, R10, R10
ADD R13, R9, R9
ADD $16, R9, R9
ADD $-16, R10, R15
VLD1 (R15), [V0.B16]
ADD $-16, R9, R15
VST1 [V0.B16], (R15)
JMP copy_1_end
FMOVQ (R10), F0
FMOVQ F0, (R9)
ADD $0x10, R10, R10
ADD $0x10, R9, R9
SUBS $0x10, R13, R13
BHS copy_1_loop
ADD R13, R10, R10
ADD $16, R10, R10
ADD R13, R9, R9
ADD $16, R9, R9
FMOVQ -16(R10), F0
FMOVQ F0, -16(R9)
JMP copy_1_end
copy_1_small:
CMP $0x03, R0
@@ -2430,21 +2373,19 @@ check_offset:
BLO copy_4_small
copy_4_loop:
VLD1 (R13), [V0.B16]
VST1 [V0.B16], (R9)
ADD $0x10, R13, R13
ADD $0x10, R9, R9
SUBS $0x10, R0, R0
BHS copy_4_loop
ADD R0, R13, R13
ADD $16, R13, R13
ADD R0, R9, R9
ADD $16, R9, R9
ADD $-16, R13, R15
VLD1 (R15), [V0.B16]
ADD $-16, R9, R15
VST1 [V0.B16], (R15)
JMP copy_4_end
FMOVQ (R13), F0
FMOVQ F0, (R9)
ADD $0x10, R13, R13
ADD $0x10, R9, R9
SUBS $0x10, R0, R0
BHS copy_4_loop
ADD R0, R13, R13
ADD $16, R13, R13
ADD R0, R9, R9
ADD $16, R9, R9
FMOVQ -16(R13), F0
FMOVQ F0, -16(R9)
JMP copy_4_end
copy_4_small:
CMP $0x03, R12
@@ -2495,21 +2436,19 @@ copy_all_from_history:
BLO copy_5_small
copy_5_loop:
VLD1 (R13), [V0.B16]
VST1 [V0.B16], (R9)
ADD $0x10, R13, R13
ADD $0x10, R9, R9
SUBS $0x10, R14, R14
BHS copy_5_loop
ADD R14, R13, R13
ADD $16, R13, R13
ADD R14, R9, R9
ADD $16, R9, R9
ADD $-16, R13, R15
VLD1 (R15), [V0.B16]
ADD $-16, R9, R15
VST1 [V0.B16], (R15)
JMP copy_5_end
FMOVQ (R13), F0
FMOVQ F0, (R9)
ADD $0x10, R13, R13
ADD $0x10, R9, R9
SUBS $0x10, R14, R14
BHS copy_5_loop
ADD R14, R13, R13
ADD $16, R13, R13
ADD R14, R9, R9
ADD $16, R9, R9
FMOVQ -16(R13), F0
FMOVQ F0, -16(R9)
JMP copy_5_end
copy_5_small:
CMP $0x03, R0
@@ -2583,21 +2522,19 @@ copy_match:
BLO copy_2_small
copy_2_loop:
VLD1 (R0), [V0.B16]
VST1 [V0.B16], (R9)
ADD $0x10, R0, R0
ADD $0x10, R9, R9
SUBS $0x10, R1, R1
BHS copy_2_loop
ADD R1, R0, R0
ADD $16, R0, R0
ADD R1, R9, R9
ADD $16, R9, R9
ADD $-16, R0, R15
VLD1 (R15), [V0.B16]
ADD $-16, R9, R15
VST1 [V0.B16], (R15)
JMP copy_2_end
FMOVQ (R0), F0
FMOVQ F0, (R9)
ADD $0x10, R0, R0
ADD $0x10, R9, R9
SUBS $0x10, R1, R1
BHS copy_2_loop
ADD R1, R0, R0
ADD $16, R0, R0
ADD R1, R9, R9
ADD $16, R9, R9
FMOVQ -16(R0), F0
FMOVQ F0, -16(R9)
JMP copy_2_end
copy_2_small:
CMP $0x03, R12
@@ -2659,8 +2596,7 @@ copy_overlapping_match:
ADD R12, R11, R11
copy_slow_3:
MOVBU (R0), R16
BFI $0, R16, $8, R1
MOVBU (R0), R1
MOVB R1, (R9)
ADD $1, R0, R0
ADD $1, R9, R9
+2 -2
View File
@@ -145,8 +145,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2/utilities
# github.com/inconshreveable/mousetrap v1.1.0
## explicit; go 1.18
github.com/inconshreveable/mousetrap
# github.com/klauspost/compress v1.19.2
## explicit; go 1.24
# github.com/klauspost/compress v1.20.0
## explicit; go 1.25
github.com/klauspost/compress
github.com/klauspost/compress/fse
github.com/klauspost/compress/huff0