mirror of
https://github.com/docker/cli.git
synced 2026-11-06 13:10:41 -04:00
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:
+1
-1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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.
|
||||
|
||||
+366
-366
File diff suppressed because it is too large
Load Diff
+271
-335
@@ -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
|
||||
|
||||
Vendored
+2
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user