diff --git a/crypto/keccak/keccak_arm64.go b/crypto/keccak/keccak_arm64.go index aa3d1ea2db..a7e2800448 100644 --- a/crypto/keccak/keccak_arm64.go +++ b/crypto/keccak/keccak_arm64.go @@ -5,105 +5,18 @@ package keccak import ( "runtime" - "golang.org/x/crypto/sha3" "golang.org/x/sys/cpu" ) // Apple Silicon always has Armv8.2-A SHA3 extensions (VEOR3, VRAX1, VXAR, VBCAX). // On other ARM64 platforms, detect at runtime via CPU feature flags. // When SHA3 is unavailable, falls back to x/crypto/sha3. -var useSHA3 = runtime.GOOS == "darwin" || runtime.GOOS == "ios" || cpu.ARM64.HasSHA3 +func init() { + useASM = runtime.GOOS == "darwin" || runtime.GOOS == "ios" || cpu.ARM64.HasSHA3 +} //go:noescape func keccakF1600(a *[200]byte) //go:noescape func xorAndPermute(state *[200]byte, buf *byte) - -// Sum256 computes the Keccak-256 hash of data. Zero heap allocations when SHA3 is available. -func Sum256(data []byte) [32]byte { - if !useSHA3 { - return sum256XCrypto(data) - } - return sum256Sponge(data) -} - -func sum256XCrypto(data []byte) [32]byte { - h := sha3.NewLegacyKeccak256() - h.Write(data) - var out [32]byte - h.Sum(out[:0]) - return out -} - -// Hasher is a streaming Keccak-256 hasher. -// Uses NEON SHA3 assembly when available, x/crypto/sha3 otherwise. -type Hasher struct { - sponge - xc KeccakState // x/crypto fallback -} - -// Reset resets the hasher to its initial state. -func (h *Hasher) Reset() { - if useSHA3 { - h.sponge.Reset() - } else { - if h.xc == nil { - h.xc = sha3.NewLegacyKeccak256().(KeccakState) - } else { - h.xc.Reset() - } - } -} - -// Write absorbs data into the hasher. -// Panics if called after Read. -func (h *Hasher) Write(p []byte) (int, error) { - if !useSHA3 { - if h.xc == nil { - h.xc = sha3.NewLegacyKeccak256().(KeccakState) - } - return h.xc.Write(p) - } - return h.sponge.Write(p) -} - -// Sum256 finalizes and returns the 32-byte Keccak-256 digest. -// Does not modify the hasher state. -func (h *Hasher) Sum256() [32]byte { - if !useSHA3 { - if h.xc == nil { - return Sum256(nil) - } - var out [32]byte - h.xc.Sum(out[:0]) - return out - } - return h.sponge.Sum256() -} - -// Sum appends the current Keccak-256 digest to b and returns the resulting slice. -// Does not modify the hasher state. -func (h *Hasher) Sum(b []byte) []byte { - if !useSHA3 { - if h.xc == nil { - d := Sum256(nil) - return append(b, d[:]...) - } - return h.xc.Sum(b) - } - return h.sponge.Sum(b) -} - -// Read squeezes an arbitrary number of bytes from the sponge. -// On the first call, it pads and permutes, transitioning from absorbing to squeezing. -// Subsequent calls to Write will panic. It never returns an error. -func (h *Hasher) Read(out []byte) (int, error) { - if !useSHA3 { - if h.xc == nil { - h.xc = sha3.NewLegacyKeccak256().(KeccakState) - } - return h.xc.Read(out) - } - return h.sponge.Read(out) -} \ No newline at end of file diff --git a/crypto/keccak/keccak_asm.go b/crypto/keccak/keccak_asm.go index 00c015f591..3a12f7b775 100644 --- a/crypto/keccak/keccak_asm.go +++ b/crypto/keccak/keccak_asm.go @@ -2,7 +2,15 @@ package keccak -import "unsafe" +import ( + "unsafe" + + "golang.org/x/crypto/sha3" +) + +// useASM is set by platform-specific init to indicate hardware acceleration is available. +// When false, Sum256 and Hasher fall back to x/crypto/sha3. +var useASM bool // sponge is the core Keccak-256 sponge state used by native (asm) implementations. type sponge struct { @@ -120,6 +128,95 @@ func sum256Sponge(data []byte) [32]byte { return [32]byte(state[:32]) } +// Sum256 computes the Keccak-256 hash of data. Zero heap allocations when hardware +// acceleration is available. +func Sum256(data []byte) [32]byte { + if !useASM { + return sum256XCrypto(data) + } + return sum256Sponge(data) +} + +func sum256XCrypto(data []byte) [32]byte { + h := sha3.NewLegacyKeccak256() + h.Write(data) + var out [32]byte + h.Sum(out[:0]) + return out +} + +// Hasher is a streaming Keccak-256 hasher. +// Uses platform assembly when available, x/crypto/sha3 otherwise. +type Hasher struct { + sponge + xc KeccakState // x/crypto fallback +} + +// Reset resets the hasher to its initial state. +func (h *Hasher) Reset() { + if useASM { + h.sponge.Reset() + } else { + if h.xc == nil { + h.xc = sha3.NewLegacyKeccak256().(KeccakState) + } else { + h.xc.Reset() + } + } +} + +// Write absorbs data into the hasher. +// Panics if called after Read. +func (h *Hasher) Write(p []byte) (int, error) { + if !useASM { + if h.xc == nil { + h.xc = sha3.NewLegacyKeccak256().(KeccakState) + } + return h.xc.Write(p) + } + return h.sponge.Write(p) +} + +// Sum256 finalizes and returns the 32-byte Keccak-256 digest. +// Does not modify the hasher state. +func (h *Hasher) Sum256() [32]byte { + if !useASM { + if h.xc == nil { + return Sum256(nil) + } + var out [32]byte + h.xc.Sum(out[:0]) + return out + } + return h.sponge.Sum256() +} + +// Sum appends the current Keccak-256 digest to b and returns the resulting slice. +// Does not modify the hasher state. +func (h *Hasher) Sum(b []byte) []byte { + if !useASM { + if h.xc == nil { + d := Sum256(nil) + return append(b, d[:]...) + } + return h.xc.Sum(b) + } + return h.sponge.Sum(b) +} + +// Read squeezes an arbitrary number of bytes from the sponge. +// On the first call, it pads and permutes, transitioning from absorbing to squeezing. +// Subsequent calls to Write will panic. It never returns an error. +func (h *Hasher) Read(out []byte) (int, error) { + if !useASM { + if h.xc == nil { + h.xc = sha3.NewLegacyKeccak256().(KeccakState) + } + return h.xc.Read(out) + } + return h.sponge.Read(out) +} + func xorIn(state *[200]byte, data []byte) { stateU64 := (*[25]uint64)(unsafe.Pointer(state)) n := len(data) >> 3 diff --git a/crypto/keccak/keccak_test.go b/crypto/keccak/keccak_test.go index a25345d229..65ea21fcb3 100644 --- a/crypto/keccak/keccak_test.go +++ b/crypto/keccak/keccak_test.go @@ -267,13 +267,14 @@ func benchName(size int) string { } } -func BenchmarkFasterKeccak(b *testing.B) { +// BenchmarkKeccak256Sum tests Sum256 with local faster_keccak implementation. +func BenchmarkKeccak256Sum(b *testing.B) { for _, size := range benchSizes { data := make([]byte, size) for i := range data { data[i] = byte(i) } - b.Run(benchName(size), func(b *testing.B) { + b.Run("FasterKeccak/"+benchName(size), func(b *testing.B) { b.SetBytes(int64(size)) b.ReportAllocs() for b.Loop() { @@ -283,13 +284,14 @@ func BenchmarkFasterKeccak(b *testing.B) { } } -func BenchmarkXCrypto(b *testing.B) { +// BenchmarkKeccak256Stdlib tests Sum256 with golang.org/x/crypto/sha3 standard library. +func BenchmarkKeccak256Stdlib(b *testing.B) { for _, size := range benchSizes { data := make([]byte, size) for i := range data { data[i] = byte(i) } - b.Run(benchName(size), func(b *testing.B) { + b.Run("StdLib/"+benchName(size), func(b *testing.B) { b.SetBytes(int64(size)) b.ReportAllocs() h := sha3.NewLegacyKeccak256() @@ -302,13 +304,14 @@ func BenchmarkXCrypto(b *testing.B) { } } -func BenchmarkFasterKeccakHasher(b *testing.B) { +// BenchmarkKeccak256Hasher tests Hasher.Sum256() with local faster_keccak implementation. +func BenchmarkKeccak256Hasher(b *testing.B) { for _, size := range benchSizes { data := make([]byte, size) for i := range data { data[i] = byte(i) } - b.Run(benchName(size), func(b *testing.B) { + b.Run("FasterKeccak/"+benchName(size), func(b *testing.B) { b.SetBytes(int64(size)) b.ReportAllocs() var h Hasher @@ -321,13 +324,35 @@ func BenchmarkFasterKeccakHasher(b *testing.B) { } } -// BenchmarkKeccakStreaming_Sha3 benchmarks the standard sha3 streaming hasher (Reset+Write+Read). -func BenchmarkKeccakStreaming_Sha3(b *testing.B) { +// BenchmarkKeccak256HasherStdlib tests Hasher API with golang.org/x/crypto/sha3 standard library. +func BenchmarkKeccak256HasherStdlib(b *testing.B) { + for _, size := range benchSizes { + data := make([]byte, size) + for i := range data { + data[i] = byte(i) + } + b.Run("StdLib/"+benchName(size), func(b *testing.B) { + b.SetBytes(int64(size)) + b.ReportAllocs() + h := sha3.NewLegacyKeccak256().(KeccakState) + var buf [32]byte + for b.Loop() { + h.Reset() + h.Write(data) + h.Read(buf[:]) + } + }) + } +} + +// BenchmarkKeccakStreaming benchmarks the streaming hasher (Reset+Write+Read). +// Use with benchstat: go test -bench=BenchmarkKeccakStreaming -benchmem ./... | benchstat +func BenchmarkKeccakStreaming(b *testing.B) { data := make([]byte, 32) for i := range data { data[i] = byte(i) } - h := sha3.NewLegacyKeccak256().(KeccakState) + var h Hasher var buf [32]byte b.SetBytes(int64(len(data))) b.ReportAllocs() diff --git a/crypto/keccak/keccakf_amd64.go b/crypto/keccak/keccakf_amd64.go index fee6f73aeb..498517a128 100644 --- a/crypto/keccak/keccakf_amd64.go +++ b/crypto/keccak/keccakf_amd64.go @@ -2,16 +2,20 @@ package keccak -import "unsafe" +import ( + "unsafe" + + "golang.org/x/sys/cpu" +) + +func init() { useASM = cpu.X86.HasBMI2 } //go:noescape -func keccakF1600(a *[200]byte) +func keccakF1600BMI2(a *[200]byte) -// Sum256 computes the Keccak-256 hash of data. Zero heap allocations. -func Sum256(data []byte) [32]byte { return sum256Sponge(data) } - -// Hasher is a streaming Keccak-256 hasher. Designed for stack allocation. -type Hasher struct{ sponge } +func keccakF1600(a *[200]byte) { + keccakF1600BMI2(a) +} func xorAndPermute(state *[200]byte, buf *byte) { xorIn(state, unsafe.Slice(buf, rate)) diff --git a/crypto/keccak/keccakf_amd64.s b/crypto/keccak/keccakf_amd64.s deleted file mode 100644 index 85df986ef7..0000000000 --- a/crypto/keccak/keccakf_amd64.s +++ /dev/null @@ -1,5420 +0,0 @@ -// Code generated by command: go run keccakf_amd64_asm.go -out ../sha3_amd64.s. DO NOT EDIT. - -//go:build !purego - -// func keccakF1600(a *[200]byte) -TEXT ·keccakF1600(SB), $200-8 - MOVQ a+0(FP), DI - - // Convert the user state into an internal state - NOTQ 8(DI) - NOTQ 16(DI) - NOTQ 64(DI) - NOTQ 96(DI) - NOTQ 136(DI) - NOTQ 160(DI) - - // Execute the KeccakF permutation - MOVQ (DI), SI - MOVQ 8(DI), BP - MOVQ 32(DI), R15 - XORQ 40(DI), SI - XORQ 48(DI), BP - XORQ 72(DI), R15 - XORQ 80(DI), SI - XORQ 88(DI), BP - XORQ 112(DI), R15 - XORQ 120(DI), SI - XORQ 128(DI), BP - XORQ 152(DI), R15 - XORQ 160(DI), SI - XORQ 168(DI), BP - MOVQ 176(DI), DX - MOVQ 184(DI), R8 - XORQ 192(DI), R15 - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x0000000000000001, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x0000000000008082, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x800000000000808a, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000080008000, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x000000000000808b, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x0000000080000001, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000080008081, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000000008009, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x000000000000008a, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x0000000000000088, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x0000000080008009, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x000000008000000a, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x000000008000808b, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x800000000000008b, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000000008089, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000000008003, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000000008002, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000000000080, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x000000000000800a, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x800000008000000a, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000080008081, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000000008080, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - MOVQ R12, BP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - XORQ R10, R15 - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - XORQ R11, R15 - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(DI), R12 - XORQ 56(DI), DX - XORQ R15, BX - XORQ 96(DI), R12 - XORQ 136(DI), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(DI), R13 - XORQ 64(DI), R8 - XORQ SI, CX - XORQ 104(DI), R13 - XORQ 144(DI), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (DI), R10 - MOVQ 48(DI), R11 - XORQ R13, R9 - MOVQ 96(DI), R12 - MOVQ 144(DI), R13 - MOVQ 192(DI), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x0000000080000001, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (SP) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(SP) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(SP) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(SP) - MOVQ R12, 8(SP) - MOVQ R12, BP - - // Result g - MOVQ 72(DI), R11 - XORQ R9, R11 - MOVQ 80(DI), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(DI), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(DI), R13 - MOVQ 176(DI), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(SP) - XORQ AX, SI - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(SP) - XORQ AX, BP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(SP) - NOTQ R14 - XORQ R10, R15 - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(SP) - - // Result k - MOVQ 8(DI), R10 - MOVQ 56(DI), R11 - MOVQ 104(DI), R12 - MOVQ 152(DI), R13 - MOVQ 160(DI), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(SP) - XORQ AX, SI - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(SP) - XORQ AX, BP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(SP) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(SP) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(SP) - XORQ R10, R15 - - // Result m - MOVQ 40(DI), R11 - XORQ BX, R11 - MOVQ 88(DI), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(DI), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(DI), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(DI), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(SP) - XORQ AX, SI - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(SP) - XORQ AX, BP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(SP) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(SP) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(SP) - XORQ R11, R15 - - // Result s - MOVQ 16(DI), R10 - MOVQ 64(DI), R11 - MOVQ 112(DI), R12 - XORQ DX, R10 - MOVQ 120(DI), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(DI), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(SP) - ROLQ $0x27, R12 - XORQ R9, R15 - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(SP) - XORQ BX, SI - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(SP) - XORQ CX, BP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(SP) - MOVQ R8, 184(SP) - - // Prepare round - MOVQ BP, BX - ROLQ $0x01, BX - MOVQ 16(SP), R12 - XORQ 56(SP), DX - XORQ R15, BX - XORQ 96(SP), R12 - XORQ 136(SP), DX - XORQ DX, R12 - MOVQ R12, CX - ROLQ $0x01, CX - MOVQ 24(SP), R13 - XORQ 64(SP), R8 - XORQ SI, CX - XORQ 104(SP), R13 - XORQ 144(SP), R8 - XORQ R8, R13 - MOVQ R13, DX - ROLQ $0x01, DX - MOVQ R15, R8 - XORQ BP, DX - ROLQ $0x01, R8 - MOVQ SI, R9 - XORQ R12, R8 - ROLQ $0x01, R9 - - // Result b - MOVQ (SP), R10 - MOVQ 48(SP), R11 - XORQ R13, R9 - MOVQ 96(SP), R12 - MOVQ 144(SP), R13 - MOVQ 192(SP), R14 - XORQ CX, R11 - ROLQ $0x2c, R11 - XORQ DX, R12 - XORQ BX, R10 - ROLQ $0x2b, R12 - MOVQ R11, SI - MOVQ $0x8000000080008008, AX - ORQ R12, SI - XORQ R10, AX - XORQ AX, SI - MOVQ SI, (DI) - XORQ R9, R14 - ROLQ $0x0e, R14 - MOVQ R10, R15 - ANDQ R11, R15 - XORQ R14, R15 - MOVQ R15, 32(DI) - XORQ R8, R13 - ROLQ $0x15, R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 16(DI) - NOTQ R12 - ORQ R10, R14 - ORQ R13, R12 - XORQ R13, R14 - XORQ R11, R12 - MOVQ R14, 24(DI) - MOVQ R12, 8(DI) - NOP - - // Result g - MOVQ 72(SP), R11 - XORQ R9, R11 - MOVQ 80(SP), R12 - ROLQ $0x14, R11 - XORQ BX, R12 - ROLQ $0x03, R12 - MOVQ 24(SP), R10 - MOVQ R11, AX - ORQ R12, AX - XORQ R8, R10 - MOVQ 128(SP), R13 - MOVQ 176(SP), R14 - ROLQ $0x1c, R10 - XORQ R10, AX - MOVQ AX, 40(DI) - NOP - XORQ CX, R13 - ROLQ $0x2d, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 48(DI) - NOP - XORQ DX, R14 - ROLQ $0x3d, R14 - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 64(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 72(DI) - NOTQ R14 - NOP - ORQ R14, R13 - XORQ R12, R13 - MOVQ R13, 56(DI) - - // Result k - MOVQ 8(SP), R10 - MOVQ 56(SP), R11 - MOVQ 104(SP), R12 - MOVQ 152(SP), R13 - MOVQ 160(SP), R14 - XORQ DX, R11 - ROLQ $0x06, R11 - XORQ R8, R12 - ROLQ $0x19, R12 - MOVQ R11, AX - ORQ R12, AX - XORQ CX, R10 - ROLQ $0x01, R10 - XORQ R10, AX - MOVQ AX, 80(DI) - NOP - XORQ R9, R13 - ROLQ $0x08, R13 - MOVQ R12, AX - ANDQ R13, AX - XORQ R11, AX - MOVQ AX, 88(DI) - NOP - XORQ BX, R14 - ROLQ $0x12, R14 - NOTQ R13 - MOVQ R13, AX - ANDQ R14, AX - XORQ R12, AX - MOVQ AX, 96(DI) - MOVQ R14, AX - ORQ R10, AX - XORQ R13, AX - MOVQ AX, 104(DI) - ANDQ R11, R10 - XORQ R14, R10 - MOVQ R10, 112(DI) - NOP - - // Result m - MOVQ 40(SP), R11 - XORQ BX, R11 - MOVQ 88(SP), R12 - ROLQ $0x24, R11 - XORQ CX, R12 - MOVQ 32(SP), R10 - ROLQ $0x0a, R12 - MOVQ R11, AX - MOVQ 136(SP), R13 - ANDQ R12, AX - XORQ R9, R10 - MOVQ 184(SP), R14 - ROLQ $0x1b, R10 - XORQ R10, AX - MOVQ AX, 120(DI) - NOP - XORQ DX, R13 - ROLQ $0x0f, R13 - MOVQ R12, AX - ORQ R13, AX - XORQ R11, AX - MOVQ AX, 128(DI) - NOP - XORQ R8, R14 - ROLQ $0x38, R14 - NOTQ R13 - MOVQ R13, AX - ORQ R14, AX - XORQ R12, AX - MOVQ AX, 136(DI) - ORQ R10, R11 - XORQ R14, R11 - MOVQ R11, 152(DI) - ANDQ R10, R14 - XORQ R13, R14 - MOVQ R14, 144(DI) - NOP - - // Result s - MOVQ 16(SP), R10 - MOVQ 64(SP), R11 - MOVQ 112(SP), R12 - XORQ DX, R10 - MOVQ 120(SP), R13 - ROLQ $0x3e, R10 - XORQ R8, R11 - MOVQ 168(SP), R14 - ROLQ $0x37, R11 - XORQ R9, R12 - MOVQ R10, R9 - XORQ CX, R14 - ROLQ $0x02, R14 - ANDQ R11, R9 - XORQ R14, R9 - MOVQ R9, 192(DI) - ROLQ $0x27, R12 - NOP - NOTQ R11 - XORQ BX, R13 - MOVQ R11, BX - ANDQ R12, BX - XORQ R10, BX - MOVQ BX, 160(DI) - NOP - ROLQ $0x29, R13 - MOVQ R12, CX - ORQ R13, CX - XORQ R11, CX - MOVQ CX, 168(DI) - NOP - MOVQ R13, DX - MOVQ R14, R8 - ANDQ R14, DX - ORQ R10, R8 - XORQ R12, DX - XORQ R13, R8 - MOVQ DX, 176(DI) - MOVQ R8, 184(DI) - - // Revert the internal state to the user state - NOTQ 8(DI) - NOTQ 16(DI) - NOTQ 64(DI) - NOTQ 96(DI) - NOTQ 136(DI) - NOTQ 160(DI) - RET - \ No newline at end of file diff --git a/crypto/keccak/keccakf_amd64_bmi2.s b/crypto/keccak/keccakf_amd64_bmi2.s new file mode 100644 index 0000000000..1cec6e21b5 --- /dev/null +++ b/crypto/keccak/keccakf_amd64_bmi2.s @@ -0,0 +1,4570 @@ +// Code generated by gen_keccakf_bmi2.go. DO NOT EDIT. + +//go:build !purego + +#include "textflag.h" + +// func keccakF1600BMI2(a *[200]byte) +TEXT ·keccakF1600BMI2(SB), NOSPLIT, $200-8 + MOVQ a+0(FP), DI + + // Round 0 + MOVQ $0x0000000000000001, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 1 + MOVQ $0x0000000000008082, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 2 + MOVQ $0x800000000000808a, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 3 + MOVQ $0x8000000080008000, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 4 + MOVQ $0x000000000000808b, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 5 + MOVQ $0x0000000080000001, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 6 + MOVQ $0x8000000080008081, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 7 + MOVQ $0x8000000000008009, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 8 + MOVQ $0x000000000000008a, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 9 + MOVQ $0x0000000000000088, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 10 + MOVQ $0x0000000080008009, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 11 + MOVQ $0x000000008000000a, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 12 + MOVQ $0x000000008000808b, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 13 + MOVQ $0x800000000000008b, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 14 + MOVQ $0x8000000000008089, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 15 + MOVQ $0x8000000000008003, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 16 + MOVQ $0x8000000000008002, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 17 + MOVQ $0x8000000000000080, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 18 + MOVQ $0x000000000000800a, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 19 + MOVQ $0x800000008000000a, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 20 + MOVQ $0x8000000080008081, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 21 + MOVQ $0x8000000000008080, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + + // Round 22 + MOVQ $0x0000000080000001, R13 + MOVQ 0(DI), AX + XORQ 40(DI), AX + XORQ 80(DI), AX + XORQ 120(DI), AX + XORQ 160(DI), AX + MOVQ 8(DI), BX + XORQ 48(DI), BX + XORQ 88(DI), BX + XORQ 128(DI), BX + XORQ 168(DI), BX + MOVQ 16(DI), CX + XORQ 56(DI), CX + XORQ 96(DI), CX + XORQ 136(DI), CX + XORQ 176(DI), CX + MOVQ 24(DI), DX + XORQ 64(DI), DX + XORQ 104(DI), DX + XORQ 144(DI), DX + XORQ 184(DI), DX + MOVQ 32(DI), SI + XORQ 72(DI), SI + XORQ 112(DI), SI + XORQ 152(DI), SI + XORQ 192(DI), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(DI), R8 + XORQ R14, R8 + MOVQ 48(DI), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(DI), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(DI), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(DI), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(SP) + MOVQ 24(DI), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(DI), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(DI), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(DI), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(DI), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(SP) + MOVQ 8(DI), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(DI), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(DI), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(DI), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(DI), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(SP) + MOVQ 32(DI), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(DI), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(DI), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(DI), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(DI), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(SP) + MOVQ 16(DI), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(DI), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(DI), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(DI), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(DI), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(SP) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(SP) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(SP) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(SP) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(SP) + + // Round 23 + MOVQ $0x8000000080008008, R13 + MOVQ 0(SP), AX + XORQ 40(SP), AX + XORQ 80(SP), AX + XORQ 120(SP), AX + XORQ 160(SP), AX + MOVQ 8(SP), BX + XORQ 48(SP), BX + XORQ 88(SP), BX + XORQ 128(SP), BX + XORQ 168(SP), BX + MOVQ 16(SP), CX + XORQ 56(SP), CX + XORQ 96(SP), CX + XORQ 136(SP), CX + XORQ 176(SP), CX + MOVQ 24(SP), DX + XORQ 64(SP), DX + XORQ 104(SP), DX + XORQ 144(SP), DX + XORQ 184(SP), DX + MOVQ 32(SP), SI + XORQ 72(SP), SI + XORQ 112(SP), SI + XORQ 152(SP), SI + XORQ 192(SP), SI + RORXQ $63, BX, R14 + XORQ SI, R14 + RORXQ $63, CX, R15 + XORQ AX, R15 + RORXQ $63, DX, BP + XORQ BX, BP + RORXQ $63, SI, R8 + XORQ CX, R8 + RORXQ $63, AX, R9 + XORQ DX, R9 + MOVQ R8, SI + MOVQ R9, DX + MOVQ 0(SP), R8 + XORQ R14, R8 + MOVQ 48(SP), R9 + XORQ R15, R9 + RORXQ $20, R9, R9 + MOVQ 96(SP), R10 + XORQ BP, R10 + RORXQ $21, R10, R10 + MOVQ 144(SP), R11 + XORQ SI, R11 + RORXQ $43, R11, R11 + MOVQ 192(SP), R12 + XORQ DX, R12 + RORXQ $50, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + XORQ R13, AX + MOVQ AX, 0(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 8(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 16(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 24(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 32(DI) + MOVQ 24(SP), R8 + XORQ SI, R8 + RORXQ $36, R8, R8 + MOVQ 72(SP), R9 + XORQ DX, R9 + RORXQ $44, R9, R9 + MOVQ 80(SP), R10 + XORQ R14, R10 + RORXQ $61, R10, R10 + MOVQ 128(SP), R11 + XORQ R15, R11 + RORXQ $19, R11, R11 + MOVQ 176(SP), R12 + XORQ BP, R12 + RORXQ $3, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 40(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 48(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 56(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 64(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 72(DI) + MOVQ 8(SP), R8 + XORQ R15, R8 + RORXQ $63, R8, R8 + MOVQ 56(SP), R9 + XORQ BP, R9 + RORXQ $58, R9, R9 + MOVQ 104(SP), R10 + XORQ SI, R10 + RORXQ $39, R10, R10 + MOVQ 152(SP), R11 + XORQ DX, R11 + RORXQ $56, R11, R11 + MOVQ 160(SP), R12 + XORQ R14, R12 + RORXQ $46, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 80(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 88(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 96(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 104(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 112(DI) + MOVQ 32(SP), R8 + XORQ DX, R8 + RORXQ $37, R8, R8 + MOVQ 40(SP), R9 + XORQ R14, R9 + RORXQ $28, R9, R9 + MOVQ 88(SP), R10 + XORQ R15, R10 + RORXQ $54, R10, R10 + MOVQ 136(SP), R11 + XORQ BP, R11 + RORXQ $49, R11, R11 + MOVQ 184(SP), R12 + XORQ SI, R12 + RORXQ $8, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 120(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 128(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 136(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 144(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 152(DI) + MOVQ 16(SP), R8 + XORQ BP, R8 + RORXQ $2, R8, R8 + MOVQ 64(SP), R9 + XORQ SI, R9 + RORXQ $9, R9, R9 + MOVQ 112(SP), R10 + XORQ DX, R10 + RORXQ $25, R10, R10 + MOVQ 120(SP), R11 + XORQ R14, R11 + RORXQ $23, R11, R11 + MOVQ 168(SP), R12 + XORQ R15, R12 + RORXQ $62, R12, R12 + ANDNQ R10, R9, AX + XORQ R8, AX + MOVQ AX, 160(DI) + ANDNQ R11, R10, AX + XORQ R9, AX + MOVQ AX, 168(DI) + ANDNQ R12, R11, AX + XORQ R10, AX + MOVQ AX, 176(DI) + ANDNQ R8, R12, AX + XORQ R11, AX + MOVQ AX, 184(DI) + ANDNQ R9, R8, AX + XORQ R12, AX + MOVQ AX, 192(DI) + RET diff --git a/crypto/keccak/‎gen_keccakf_bmi2.go b/crypto/keccak/‎gen_keccakf_bmi2.go new file mode 100644 index 0000000000..e322537a66 --- /dev/null +++ b/crypto/keccak/‎gen_keccakf_bmi2.go @@ -0,0 +1,156 @@ +//go:build ignore + +// gen_keccakf_bmi2.go generates keccakf_amd64_bmi2.s — a BMI2-optimized +// Keccak-f[1600] permutation using RORXQ and ANDNQ. +// Fully unrolled (all 24 rounds). +// +// Key optimizations: +// - D values kept in registers (R14, R15, BP, SI, DX), not on stack +// - State alternates between the original array (DI) and a 200-byte stack +// buffer, avoiding a second 200-byte copy +// - Frame is only 200 bytes (25 × 8 for temp state) +// +// Usage: go run gen_keccakf_bmi2.go + +package main + +import ( + "fmt" + "os" +) + +var rc = [24]uint64{ + 0x0000000000000001, 0x0000000000008082, + 0x800000000000808a, 0x8000000080008000, + 0x000000000000808b, 0x0000000080000001, + 0x8000000080008081, 0x8000000000008009, + 0x000000000000008a, 0x0000000000000088, + 0x0000000080008009, 0x000000008000000a, + 0x000000008000808b, 0x800000000000008b, + 0x8000000000008089, 0x8000000000008003, + 0x8000000000008002, 0x8000000000000080, + 0x000000000000800a, 0x800000008000000a, + 0x8000000080008081, 0x8000000000008080, + 0x0000000080000001, 0x8000000080008008, +} + +type lane struct { + idx int // state lane index (0–24) + rot int // left-rotation amount +} + +// Chi groups: each group reads 5 lanes (after theta+rho+pi) +// and produces 5 consecutive output lanes. +var groups = [5][5]lane{ + {{0, 0}, {6, 44}, {12, 43}, {18, 21}, {24, 14}}, // → lanes 0–4 + {{3, 28}, {9, 20}, {10, 3}, {16, 45}, {22, 61}}, // → lanes 5–9 + {{1, 1}, {7, 6}, {13, 25}, {19, 8}, {20, 18}}, // → lanes 10–14 + {{4, 27}, {5, 36}, {11, 10}, {17, 15}, {23, 56}}, // → lanes 15–19 + {{2, 62}, {8, 55}, {14, 39}, {15, 41}, {21, 2}}, // → lanes 20–24 +} + +// D-value registers, indexed by lane%5. +var dReg = [5]string{"R14", "R15", "BP", "SI", "DX"} + +const fsize = 200 + +var p func(string, ...any) + +func main() { + f, err := os.Create("keccakf_amd64_bmi2.s") + if err != nil { + panic(err) + } + defer f.Close() + p = func(format string, args ...any) { fmt.Fprintf(f, format+"\n", args...) } + + p("// Code generated by gen_keccakf_bmi2.go. DO NOT EDIT.") + p("") + p("//go:build !purego") + p("") + p("#include \"textflag.h\"") + p("") + + // Function. + p("// func keccakF1600BMI2(a *[200]byte)") + p("TEXT ·keccakF1600BMI2(SB), NOSPLIT, $%d-8", fsize) + p("\tMOVQ a+0(FP), DI") + + for round := 0; round < 24; round++ { + p("") + p("\t// Round %d", round) + srcArray := (round % 2) == 0 + emitRound(srcArray, round) + } + + p("\tRET") +} + +// srcArray: true = source is array (DI), dest is stack (SP) +// +// false = source is stack (SP), dest is array (DI) +func emitRound(srcArray bool, round int) { + // Load round constant into R13. + p("\tMOVQ $0x%016x, R13", rc[round]) + + // Theta: 5 column parities → AX, BX, CX, DX, SI. + colR := [5]string{"AX", "BX", "CX", "DX", "SI"} + for c := 0; c < 5; c++ { + p("\tMOVQ %s, %s", off(c, srcArray), colR[c]) + for r := 1; r < 5; r++ { + p("\tXORQ %s, %s", off(r*5+c, srcArray), colR[c]) + } + } + + // D values: D[x] = C[(x+4)%5] ^ rol(C[(x+1)%5], 1). + for _, x := range []int{0, 1, 2} { + p("\tRORXQ $63, %s, %s", colR[(x+1)%5], dReg[x]) + p("\tXORQ %s, %s", colR[(x+4)%5], dReg[x]) + } + // Do = CX ^ rol(SI, 1) → R8 temp, then move to SI + p("\tRORXQ $63, SI, R8") + p("\tXORQ CX, R8") + // Du = DX ^ rol(AX, 1) → R9 temp, then move to DX + p("\tRORXQ $63, AX, R9") + p("\tXORQ DX, R9") + p("\tMOVQ R8, SI") // SI = Do + p("\tMOVQ R9, DX") // DX = Du + + // Five chi groups. + for g := 0; g < 5; g++ { + emitChi(g, srcArray, g == 0) + } +} + +func emitChi(g int, srcArray, first bool) { + B := [5]string{"R8", "R9", "R10", "R11", "R12"} + + // Load lane, XOR with D (register!), rotate. + for i := 0; i < 5; i++ { + l := groups[g][i] + p("\tMOVQ %s, %s", off(l.idx, srcArray), B[i]) + p("\tXORQ %s, %s", dReg[l.idx%5], B[i]) + if l.rot != 0 { + p("\tRORXQ $%d, %s, %s", 64-l.rot, B[i], B[i]) + } + } + + // Chi: out[j] = B[j] ^ (~B[(j+1)%5] & B[(j+2)%5]). + for j := 0; j < 5; j++ { + p("\tANDNQ %s, %s, AX", B[(j+2)%5], B[(j+1)%5]) + p("\tXORQ %s, AX", B[j]) + if first && j == 0 { + p("\tXORQ R13, AX") + } + p("\tMOVQ AX, %s", off(g*5+j, !srcArray)) + } +} + +// off returns the memory operand for lane idx. +func off(idx int, array bool) string { + o := idx * 8 + if array { + return fmt.Sprintf("%d(DI)", o) + } + return fmt.Sprintf("%d(SP)", o) +}