diff --git a/examples/sha1/asm.go b/examples/sha1/asm.go index c370cdd1..85f7f1e3 100644 --- a/examples/sha1/asm.go +++ b/examples/sha1/asm.go @@ -18,13 +18,13 @@ func main() { w := AllocLocal(64) W := func(r int) Mem { return w.Offset((r % 16) * 4) } - // Load initial hash. + Comment("Load initial hash.") hash := [5]Register{GP32(), GP32(), GP32(), GP32(), GP32()} for i, r := range hash { MOVL(h.Offset(4*i), r) } - // Initialize registers. + Comment("Initialize registers.") a, b, c, d, e := GP32(), GP32(), GP32(), GP32(), GP32() for i, r := range []Register{a, b, c, d, e} { MOVL(hash[i], r) @@ -42,6 +42,7 @@ func main() { } for r := 0; r < 80; r++ { + Commentf("Round %d.", r) q := quarter[r/20] // Load message value. @@ -72,12 +73,12 @@ func main() { a, b, c, d, e = t, a, b, c, d } - // Final add. + Comment("Final add.") for i, r := range []Register{a, b, c, d, e} { ADDL(r, hash[i]) } - // Store results back. + Comment("Store results back.") for i, r := range hash { MOVL(r, h.Offset(4*i)) } diff --git a/examples/sha1/sha1.s b/examples/sha1/sha1.s index 4f16ebac..518372db 100644 --- a/examples/sha1/sha1.s +++ b/examples/sha1/sha1.s @@ -2,18 +2,24 @@ // func block(h *[5]uint32, m []byte) TEXT ·block(SB), $64-32 - MOVQ h(FP), AX - MOVQ m_base+8(FP), CX - MOVL (AX), DX - MOVL 4(AX), BX - MOVL 8(AX), BP - MOVL 12(AX), SI - MOVL 16(AX), DI - MOVL DX, R8 - MOVL BX, R9 - MOVL BP, R10 - MOVL SI, R11 - MOVL DI, R12 + MOVQ h(FP), AX + MOVQ m_base+8(FP), CX + + // Load initial hash. + MOVL (AX), DX + MOVL 4(AX), BX + MOVL 8(AX), BP + MOVL 12(AX), SI + MOVL 16(AX), DI + + // Initialize registers. + MOVL DX, R8 + MOVL BX, R9 + MOVL BP, R10 + MOVL SI, R11 + MOVL DI, R12 + + // Round 0. MOVL (CX), R13 BSWAPL R13 MOVL R13, (SP) @@ -28,6 +34,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R14 ADDL R13, R14 ROLL $0x1e, R9 + + // Round 1. MOVL 4(CX), R12 BSWAPL R12 MOVL R12, 4(SP) @@ -42,6 +50,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R13 ADDL R12, R13 ROLL $0x1e, R8 + + // Round 2. MOVL 8(CX), R11 BSWAPL R11 MOVL R11, 8(SP) @@ -56,6 +66,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R12 ADDL R11, R12 ROLL $0x1e, R14 + + // Round 3. MOVL 12(CX), R10 BSWAPL R10 MOVL R10, 12(SP) @@ -70,6 +82,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R11 ADDL R10, R11 ROLL $0x1e, R13 + + // Round 4. MOVL 16(CX), R9 BSWAPL R9 MOVL R9, 16(SP) @@ -84,6 +98,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R10 ADDL R9, R10 ROLL $0x1e, R12 + + // Round 5. MOVL 20(CX), R8 BSWAPL R8 MOVL R8, 20(SP) @@ -98,6 +114,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R9 ADDL R8, R9 ROLL $0x1e, R11 + + // Round 6. MOVL 24(CX), R8 BSWAPL R8 MOVL R8, 24(SP) @@ -112,6 +130,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R14 ADDL R8, R14 ROLL $0x1e, R10 + + // Round 7. MOVL 28(CX), R8 BSWAPL R8 MOVL R8, 28(SP) @@ -126,6 +146,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R13 ADDL R8, R13 ROLL $0x1e, R9 + + // Round 8. MOVL 32(CX), R8 BSWAPL R8 MOVL R8, 32(SP) @@ -140,6 +162,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R12 ADDL R8, R12 ROLL $0x1e, R14 + + // Round 9. MOVL 36(CX), R8 BSWAPL R8 MOVL R8, 36(SP) @@ -154,6 +178,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R11 ADDL R8, R11 ROLL $0x1e, R13 + + // Round 10. MOVL 40(CX), R8 BSWAPL R8 MOVL R8, 40(SP) @@ -168,6 +194,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R10 ADDL R8, R10 ROLL $0x1e, R12 + + // Round 11. MOVL 44(CX), R8 BSWAPL R8 MOVL R8, 44(SP) @@ -182,6 +210,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R9 ADDL R8, R9 ROLL $0x1e, R11 + + // Round 12. MOVL 48(CX), R8 BSWAPL R8 MOVL R8, 48(SP) @@ -196,6 +226,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R14 ADDL R8, R14 ROLL $0x1e, R10 + + // Round 13. MOVL 52(CX), R8 BSWAPL R8 MOVL R8, 52(SP) @@ -210,6 +242,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R13 ADDL R8, R13 ROLL $0x1e, R9 + + // Round 14. MOVL 56(CX), R8 BSWAPL R8 MOVL R8, 56(SP) @@ -224,6 +258,8 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R12 ADDL R8, R12 ROLL $0x1e, R14 + + // Round 15. MOVL 60(CX), CX BSWAPL CX MOVL CX, 60(SP) @@ -238,1102 +274,1234 @@ TEXT ·block(SB), $64-32 ADDL $0x5a827999, R8 ADDL CX, R8 ROLL $0x1e, R13 - MOVL 52(SP), CX - XORL 32(SP), CX - XORL 8(SP), CX - XORL (SP), CX - ROLL $0x01, CX - MOVL CX, (SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R14, R11 - XORL R13, R11 - ANDL R12, R11 - XORL R14, R11 - ADDL R11, R10 - ADDL R9, R10 - ADDL $0x5a827999, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 56(SP), CX - XORL 36(SP), CX - XORL 12(SP), CX - XORL 4(SP), CX - ROLL $0x01, CX - MOVL CX, 4(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R13, R11 - XORL R12, R11 - ANDL R8, R11 - XORL R13, R11 - ADDL R11, R9 - ADDL R14, R9 - ADDL $0x5a827999, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 60(SP), CX - XORL 40(SP), CX - XORL 16(SP), CX - XORL 8(SP), CX - ROLL $0x01, CX - MOVL CX, 8(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R12, R14 - XORL R8, R14 - ANDL R10, R14 - XORL R12, R14 - ADDL R14, R11 - ADDL R13, R11 - ADDL $0x5a827999, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL (SP), CX - XORL 44(SP), CX - XORL 20(SP), CX - XORL 12(SP), CX - ROLL $0x01, CX - MOVL CX, 12(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R8, R14 - XORL R10, R14 - ANDL R9, R14 - XORL R8, R14 - ADDL R14, R13 - ADDL R12, R13 - ADDL $0x5a827999, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 4(SP), CX - XORL 48(SP), CX - XORL 24(SP), CX - XORL 16(SP), CX - ROLL $0x01, CX - MOVL CX, 16(SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - XORL R9, R14 - XORL R10, R14 - ADDL R14, R12 - ADDL R8, R12 - ADDL $0x6ed9eba1, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL 8(SP), CX - XORL 52(SP), CX - XORL 28(SP), CX - XORL 20(SP), CX - ROLL $0x01, CX - MOVL CX, 20(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - XORL R11, R14 - XORL R9, R14 - ADDL R14, R8 - ADDL R10, R8 - ADDL $0x6ed9eba1, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 12(SP), CX - XORL 56(SP), CX - XORL 32(SP), CX - XORL 24(SP), CX - ROLL $0x01, CX - MOVL CX, 24(SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - XORL R13, R14 - XORL R11, R14 - ADDL R14, R10 - ADDL R9, R10 - ADDL $0x6ed9eba1, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 16(SP), CX - XORL 60(SP), CX - XORL 36(SP), CX - XORL 28(SP), CX - ROLL $0x01, CX - MOVL CX, 28(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - XORL R12, R14 - XORL R13, R14 - ADDL R14, R9 - ADDL R11, R9 - ADDL $0x6ed9eba1, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 20(SP), CX - XORL (SP), CX - XORL 40(SP), CX - XORL 32(SP), CX - ROLL $0x01, CX - MOVL CX, 32(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - XORL R8, R14 - XORL R12, R14 - ADDL R14, R11 - ADDL R13, R11 - ADDL $0x6ed9eba1, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL 24(SP), CX - XORL 4(SP), CX - XORL 44(SP), CX - XORL 36(SP), CX - ROLL $0x01, CX - MOVL CX, 36(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - XORL R10, R14 - XORL R8, R14 - ADDL R14, R13 - ADDL R12, R13 - ADDL $0x6ed9eba1, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 28(SP), CX - XORL 8(SP), CX - XORL 48(SP), CX - XORL 40(SP), CX - ROLL $0x01, CX - MOVL CX, 40(SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - XORL R9, R14 - XORL R10, R14 - ADDL R14, R12 - ADDL R8, R12 - ADDL $0x6ed9eba1, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL 32(SP), CX - XORL 12(SP), CX - XORL 52(SP), CX - XORL 44(SP), CX - ROLL $0x01, CX - MOVL CX, 44(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - XORL R11, R14 - XORL R9, R14 - ADDL R14, R8 - ADDL R10, R8 - ADDL $0x6ed9eba1, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 36(SP), CX - XORL 16(SP), CX - XORL 56(SP), CX - XORL 48(SP), CX - ROLL $0x01, CX - MOVL CX, 48(SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - XORL R13, R14 - XORL R11, R14 - ADDL R14, R10 - ADDL R9, R10 - ADDL $0x6ed9eba1, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 40(SP), CX - XORL 20(SP), CX - XORL 60(SP), CX - XORL 52(SP), CX - ROLL $0x01, CX - MOVL CX, 52(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - XORL R12, R14 - XORL R13, R14 - ADDL R14, R9 - ADDL R11, R9 - ADDL $0x6ed9eba1, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 44(SP), CX - XORL 24(SP), CX - XORL (SP), CX - XORL 56(SP), CX - ROLL $0x01, CX - MOVL CX, 56(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - XORL R8, R14 - XORL R12, R14 - ADDL R14, R11 - ADDL R13, R11 - ADDL $0x6ed9eba1, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL 48(SP), CX - XORL 28(SP), CX - XORL 4(SP), CX - XORL 60(SP), CX - ROLL $0x01, CX - MOVL CX, 60(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - XORL R10, R14 - XORL R8, R14 - ADDL R14, R13 - ADDL R12, R13 - ADDL $0x6ed9eba1, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 52(SP), CX - XORL 32(SP), CX - XORL 8(SP), CX - XORL (SP), CX - ROLL $0x01, CX - MOVL CX, (SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - XORL R9, R14 - XORL R10, R14 - ADDL R14, R12 - ADDL R8, R12 - ADDL $0x6ed9eba1, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL 56(SP), CX - XORL 36(SP), CX - XORL 12(SP), CX - XORL 4(SP), CX - ROLL $0x01, CX - MOVL CX, 4(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - XORL R11, R14 - XORL R9, R14 - ADDL R14, R8 - ADDL R10, R8 - ADDL $0x6ed9eba1, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 60(SP), CX - XORL 40(SP), CX - XORL 16(SP), CX - XORL 8(SP), CX - ROLL $0x01, CX - MOVL CX, 8(SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - XORL R13, R14 - XORL R11, R14 - ADDL R14, R10 - ADDL R9, R10 - ADDL $0x6ed9eba1, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL (SP), CX - XORL 44(SP), CX - XORL 20(SP), CX - XORL 12(SP), CX - ROLL $0x01, CX - MOVL CX, 12(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - XORL R12, R14 - XORL R13, R14 - ADDL R14, R9 - ADDL R11, R9 - ADDL $0x6ed9eba1, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 4(SP), CX - XORL 48(SP), CX - XORL 24(SP), CX - XORL 16(SP), CX - ROLL $0x01, CX - MOVL CX, 16(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - XORL R8, R14 - XORL R12, R14 - ADDL R14, R11 - ADDL R13, R11 - ADDL $0x6ed9eba1, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL 8(SP), CX - XORL 52(SP), CX - XORL 28(SP), CX - XORL 20(SP), CX - ROLL $0x01, CX - MOVL CX, 20(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - XORL R10, R14 - XORL R8, R14 - ADDL R14, R13 - ADDL R12, R13 - ADDL $0x6ed9eba1, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 12(SP), CX - XORL 56(SP), CX - XORL 32(SP), CX - XORL 24(SP), CX - ROLL $0x01, CX - MOVL CX, 24(SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - XORL R9, R14 - XORL R10, R14 - ADDL R14, R12 - ADDL R8, R12 - ADDL $0x6ed9eba1, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL 16(SP), CX - XORL 60(SP), CX - XORL 36(SP), CX - XORL 28(SP), CX - ROLL $0x01, CX - MOVL CX, 28(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - XORL R11, R14 - XORL R9, R14 - ADDL R14, R8 - ADDL R10, R8 - ADDL $0x6ed9eba1, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 20(SP), CX - XORL (SP), CX - XORL 40(SP), CX - XORL 32(SP), CX - ROLL $0x01, CX - MOVL CX, 32(SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - ORL R13, R14 - ANDL R11, R14 - MOVL R12, R15 - ANDL R13, R15 - ORL R14, R15 - ADDL R15, R10 - ADDL R9, R10 - ADDL $0x8f1bbcdc, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 24(SP), CX - XORL 4(SP), CX - XORL 44(SP), CX - XORL 36(SP), CX - ROLL $0x01, CX - MOVL CX, 36(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - ORL R12, R14 - ANDL R13, R14 - MOVL R8, R15 - ANDL R12, R15 - ORL R14, R15 - ADDL R15, R9 - ADDL R11, R9 - ADDL $0x8f1bbcdc, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 28(SP), CX - XORL 8(SP), CX - XORL 48(SP), CX - XORL 40(SP), CX - ROLL $0x01, CX - MOVL CX, 40(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - ORL R8, R14 - ANDL R12, R14 - MOVL R10, R15 - ANDL R8, R15 - ORL R14, R15 - ADDL R15, R11 - ADDL R13, R11 - ADDL $0x8f1bbcdc, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL 32(SP), CX - XORL 12(SP), CX - XORL 52(SP), CX - XORL 44(SP), CX - ROLL $0x01, CX - MOVL CX, 44(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - ORL R10, R14 - ANDL R8, R14 - MOVL R9, R15 - ANDL R10, R15 - ORL R14, R15 - ADDL R15, R13 - ADDL R12, R13 - ADDL $0x8f1bbcdc, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 36(SP), CX - XORL 16(SP), CX - XORL 56(SP), CX - XORL 48(SP), CX - ROLL $0x01, CX - MOVL CX, 48(SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - ORL R9, R14 - ANDL R10, R14 - MOVL R11, R15 - ANDL R9, R15 - ORL R14, R15 - ADDL R15, R12 - ADDL R8, R12 - ADDL $0x8f1bbcdc, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL 40(SP), CX - XORL 20(SP), CX - XORL 60(SP), CX - XORL 52(SP), CX - ROLL $0x01, CX - MOVL CX, 52(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - ORL R11, R14 - ANDL R9, R14 - MOVL R13, R15 - ANDL R11, R15 - ORL R14, R15 - ADDL R15, R8 - ADDL R10, R8 - ADDL $0x8f1bbcdc, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 44(SP), CX - XORL 24(SP), CX - XORL (SP), CX - XORL 56(SP), CX - ROLL $0x01, CX - MOVL CX, 56(SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - ORL R13, R14 - ANDL R11, R14 - MOVL R12, R15 - ANDL R13, R15 - ORL R14, R15 - ADDL R15, R10 - ADDL R9, R10 - ADDL $0x8f1bbcdc, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 48(SP), CX - XORL 28(SP), CX - XORL 4(SP), CX - XORL 60(SP), CX - ROLL $0x01, CX - MOVL CX, 60(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - ORL R12, R14 - ANDL R13, R14 - MOVL R8, R15 - ANDL R12, R15 - ORL R14, R15 - ADDL R15, R9 - ADDL R11, R9 - ADDL $0x8f1bbcdc, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 52(SP), CX - XORL 32(SP), CX - XORL 8(SP), CX - XORL (SP), CX - ROLL $0x01, CX - MOVL CX, (SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - ORL R8, R14 - ANDL R12, R14 - MOVL R10, R15 - ANDL R8, R15 - ORL R14, R15 - ADDL R15, R11 - ADDL R13, R11 - ADDL $0x8f1bbcdc, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL 56(SP), CX - XORL 36(SP), CX - XORL 12(SP), CX - XORL 4(SP), CX - ROLL $0x01, CX - MOVL CX, 4(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - ORL R10, R14 - ANDL R8, R14 - MOVL R9, R15 - ANDL R10, R15 - ORL R14, R15 - ADDL R15, R13 - ADDL R12, R13 - ADDL $0x8f1bbcdc, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 60(SP), CX - XORL 40(SP), CX - XORL 16(SP), CX - XORL 8(SP), CX - ROLL $0x01, CX - MOVL CX, 8(SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - ORL R9, R14 - ANDL R10, R14 - MOVL R11, R15 - ANDL R9, R15 - ORL R14, R15 - ADDL R15, R12 - ADDL R8, R12 - ADDL $0x8f1bbcdc, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL (SP), CX - XORL 44(SP), CX - XORL 20(SP), CX - XORL 12(SP), CX - ROLL $0x01, CX - MOVL CX, 12(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - ORL R11, R14 - ANDL R9, R14 - MOVL R13, R15 - ANDL R11, R15 - ORL R14, R15 - ADDL R15, R8 - ADDL R10, R8 - ADDL $0x8f1bbcdc, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 4(SP), CX - XORL 48(SP), CX - XORL 24(SP), CX - XORL 16(SP), CX - ROLL $0x01, CX - MOVL CX, 16(SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - ORL R13, R14 - ANDL R11, R14 - MOVL R12, R15 - ANDL R13, R15 - ORL R14, R15 - ADDL R15, R10 - ADDL R9, R10 - ADDL $0x8f1bbcdc, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 8(SP), CX - XORL 52(SP), CX - XORL 28(SP), CX - XORL 20(SP), CX - ROLL $0x01, CX - MOVL CX, 20(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - ORL R12, R14 - ANDL R13, R14 - MOVL R8, R15 - ANDL R12, R15 - ORL R14, R15 - ADDL R15, R9 - ADDL R11, R9 - ADDL $0x8f1bbcdc, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 12(SP), CX - XORL 56(SP), CX - XORL 32(SP), CX - XORL 24(SP), CX - ROLL $0x01, CX - MOVL CX, 24(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - ORL R8, R14 - ANDL R12, R14 - MOVL R10, R15 - ANDL R8, R15 - ORL R14, R15 - ADDL R15, R11 - ADDL R13, R11 - ADDL $0x8f1bbcdc, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL 16(SP), CX - XORL 60(SP), CX - XORL 36(SP), CX - XORL 28(SP), CX - ROLL $0x01, CX - MOVL CX, 28(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - ORL R10, R14 - ANDL R8, R14 - MOVL R9, R15 - ANDL R10, R15 - ORL R14, R15 - ADDL R15, R13 - ADDL R12, R13 - ADDL $0x8f1bbcdc, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 20(SP), CX - XORL (SP), CX - XORL 40(SP), CX - XORL 32(SP), CX - ROLL $0x01, CX - MOVL CX, 32(SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - ORL R9, R14 - ANDL R10, R14 - MOVL R11, R15 - ANDL R9, R15 - ORL R14, R15 - ADDL R15, R12 - ADDL R8, R12 - ADDL $0x8f1bbcdc, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL 24(SP), CX - XORL 4(SP), CX - XORL 44(SP), CX - XORL 36(SP), CX - ROLL $0x01, CX - MOVL CX, 36(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - ORL R11, R14 - ANDL R9, R14 - MOVL R13, R15 - ANDL R11, R15 - ORL R14, R15 - ADDL R15, R8 - ADDL R10, R8 - ADDL $0x8f1bbcdc, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 28(SP), CX - XORL 8(SP), CX - XORL 48(SP), CX - XORL 40(SP), CX - ROLL $0x01, CX - MOVL CX, 40(SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - ORL R13, R14 - ANDL R11, R14 - MOVL R12, R15 - ANDL R13, R15 - ORL R14, R15 - ADDL R15, R10 - ADDL R9, R10 - ADDL $0x8f1bbcdc, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 32(SP), CX - XORL 12(SP), CX - XORL 52(SP), CX - XORL 44(SP), CX - ROLL $0x01, CX - MOVL CX, 44(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - ORL R12, R14 - ANDL R13, R14 - MOVL R8, R15 - ANDL R12, R15 - ORL R14, R15 - ADDL R15, R9 - ADDL R11, R9 - ADDL $0x8f1bbcdc, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 36(SP), CX - XORL 16(SP), CX - XORL 56(SP), CX - XORL 48(SP), CX - ROLL $0x01, CX - MOVL CX, 48(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - XORL R8, R14 - XORL R12, R14 - ADDL R14, R11 - ADDL R13, R11 - ADDL $0xca62c1d6, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL 40(SP), CX - XORL 20(SP), CX - XORL 60(SP), CX - XORL 52(SP), CX - ROLL $0x01, CX - MOVL CX, 52(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - XORL R10, R14 - XORL R8, R14 - ADDL R14, R13 - ADDL R12, R13 - ADDL $0xca62c1d6, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 44(SP), CX - XORL 24(SP), CX - XORL (SP), CX - XORL 56(SP), CX - ROLL $0x01, CX - MOVL CX, 56(SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - XORL R9, R14 - XORL R10, R14 - ADDL R14, R12 - ADDL R8, R12 - ADDL $0xca62c1d6, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL 48(SP), CX - XORL 28(SP), CX - XORL 4(SP), CX - XORL 60(SP), CX - ROLL $0x01, CX - MOVL CX, 60(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - XORL R11, R14 - XORL R9, R14 - ADDL R14, R8 - ADDL R10, R8 - ADDL $0xca62c1d6, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 52(SP), CX - XORL 32(SP), CX - XORL 8(SP), CX - XORL (SP), CX - ROLL $0x01, CX - MOVL CX, (SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - XORL R13, R14 - XORL R11, R14 - ADDL R14, R10 - ADDL R9, R10 - ADDL $0xca62c1d6, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 56(SP), CX - XORL 36(SP), CX - XORL 12(SP), CX - XORL 4(SP), CX - ROLL $0x01, CX - MOVL CX, 4(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - XORL R12, R14 - XORL R13, R14 - ADDL R14, R9 - ADDL R11, R9 - ADDL $0xca62c1d6, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 60(SP), CX - XORL 40(SP), CX - XORL 16(SP), CX - XORL 8(SP), CX - ROLL $0x01, CX - MOVL CX, 8(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - XORL R8, R14 - XORL R12, R14 - ADDL R14, R11 - ADDL R13, R11 - ADDL $0xca62c1d6, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL (SP), CX - XORL 44(SP), CX - XORL 20(SP), CX - XORL 12(SP), CX - ROLL $0x01, CX - MOVL CX, 12(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - XORL R10, R14 - XORL R8, R14 - ADDL R14, R13 - ADDL R12, R13 - ADDL $0xca62c1d6, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 4(SP), CX - XORL 48(SP), CX - XORL 24(SP), CX - XORL 16(SP), CX - ROLL $0x01, CX - MOVL CX, 16(SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - XORL R9, R14 - XORL R10, R14 - ADDL R14, R12 - ADDL R8, R12 - ADDL $0xca62c1d6, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL 8(SP), CX - XORL 52(SP), CX - XORL 28(SP), CX - XORL 20(SP), CX - ROLL $0x01, CX - MOVL CX, 20(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - XORL R11, R14 - XORL R9, R14 - ADDL R14, R8 - ADDL R10, R8 - ADDL $0xca62c1d6, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 12(SP), CX - XORL 56(SP), CX - XORL 32(SP), CX - XORL 24(SP), CX - ROLL $0x01, CX - MOVL CX, 24(SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - XORL R13, R14 - XORL R11, R14 - ADDL R14, R10 - ADDL R9, R10 - ADDL $0xca62c1d6, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 16(SP), CX - XORL 60(SP), CX - XORL 36(SP), CX - XORL 28(SP), CX - ROLL $0x01, CX - MOVL CX, 28(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - XORL R12, R14 - XORL R13, R14 - ADDL R14, R9 - ADDL R11, R9 - ADDL $0xca62c1d6, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 20(SP), CX - XORL (SP), CX - XORL 40(SP), CX - XORL 32(SP), CX - ROLL $0x01, CX - MOVL CX, 32(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - XORL R8, R14 - XORL R12, R14 - ADDL R14, R11 - ADDL R13, R11 - ADDL $0xca62c1d6, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL 24(SP), CX - XORL 4(SP), CX - XORL 44(SP), CX - XORL 36(SP), CX - ROLL $0x01, CX - MOVL CX, 36(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - XORL R10, R14 - XORL R8, R14 - ADDL R14, R13 - ADDL R12, R13 - ADDL $0xca62c1d6, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - MOVL 28(SP), CX - XORL 8(SP), CX - XORL 48(SP), CX - XORL 40(SP), CX - ROLL $0x01, CX - MOVL CX, 40(SP) - MOVL R13, R12 - ROLL $0x05, R12 - MOVL R11, R14 - XORL R9, R14 - XORL R10, R14 - ADDL R14, R12 - ADDL R8, R12 - ADDL $0xca62c1d6, R12 - ADDL CX, R12 - ROLL $0x1e, R11 - MOVL 32(SP), CX - XORL 12(SP), CX - XORL 52(SP), CX - XORL 44(SP), CX - ROLL $0x01, CX - MOVL CX, 44(SP) - MOVL R12, R8 - ROLL $0x05, R8 - MOVL R13, R14 - XORL R11, R14 - XORL R9, R14 - ADDL R14, R8 - ADDL R10, R8 - ADDL $0xca62c1d6, R8 - ADDL CX, R8 - ROLL $0x1e, R13 - MOVL 36(SP), CX - XORL 16(SP), CX - XORL 56(SP), CX - XORL 48(SP), CX - ROLL $0x01, CX - MOVL CX, 48(SP) - MOVL R8, R10 - ROLL $0x05, R10 - MOVL R12, R14 - XORL R13, R14 - XORL R11, R14 - ADDL R14, R10 - ADDL R9, R10 - ADDL $0xca62c1d6, R10 - ADDL CX, R10 - ROLL $0x1e, R12 - MOVL 40(SP), CX - XORL 20(SP), CX - XORL 60(SP), CX - XORL 52(SP), CX - ROLL $0x01, CX - MOVL CX, 52(SP) - MOVL R10, R9 - ROLL $0x05, R9 - MOVL R8, R14 - XORL R12, R14 - XORL R13, R14 - ADDL R14, R9 - ADDL R11, R9 - ADDL $0xca62c1d6, R9 - ADDL CX, R9 - ROLL $0x1e, R8 - MOVL 44(SP), CX - XORL 24(SP), CX - XORL (SP), CX - XORL 56(SP), CX - ROLL $0x01, CX - MOVL CX, 56(SP) - MOVL R9, R11 - ROLL $0x05, R11 - MOVL R10, R14 - XORL R8, R14 - XORL R12, R14 - ADDL R14, R11 - ADDL R13, R11 - ADDL $0xca62c1d6, R11 - ADDL CX, R11 - ROLL $0x1e, R10 - MOVL 48(SP), CX - XORL 28(SP), CX - XORL 4(SP), CX - XORL 60(SP), CX - ROLL $0x01, CX - MOVL CX, 60(SP) - MOVL R11, R13 - ROLL $0x05, R13 - MOVL R9, R14 - XORL R10, R14 - XORL R8, R14 - ADDL R14, R13 - ADDL R12, R13 - ADDL $0xca62c1d6, R13 - ADDL CX, R13 - ROLL $0x1e, R9 - ADDL R13, DX - ADDL R11, BX - ADDL R9, BP - ADDL R10, SI - ADDL R8, DI - MOVL DX, (AX) - MOVL BX, 4(AX) - MOVL BP, 8(AX) - MOVL SI, 12(AX) - MOVL DI, 16(AX) + + // Round 16. + MOVL 52(SP), CX + XORL 32(SP), CX + XORL 8(SP), CX + XORL (SP), CX + ROLL $0x01, CX + MOVL CX, (SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R14, R11 + XORL R13, R11 + ANDL R12, R11 + XORL R14, R11 + ADDL R11, R10 + ADDL R9, R10 + ADDL $0x5a827999, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 17. + MOVL 56(SP), CX + XORL 36(SP), CX + XORL 12(SP), CX + XORL 4(SP), CX + ROLL $0x01, CX + MOVL CX, 4(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R13, R11 + XORL R12, R11 + ANDL R8, R11 + XORL R13, R11 + ADDL R11, R9 + ADDL R14, R9 + ADDL $0x5a827999, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 18. + MOVL 60(SP), CX + XORL 40(SP), CX + XORL 16(SP), CX + XORL 8(SP), CX + ROLL $0x01, CX + MOVL CX, 8(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R12, R14 + XORL R8, R14 + ANDL R10, R14 + XORL R12, R14 + ADDL R14, R11 + ADDL R13, R11 + ADDL $0x5a827999, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 19. + MOVL (SP), CX + XORL 44(SP), CX + XORL 20(SP), CX + XORL 12(SP), CX + ROLL $0x01, CX + MOVL CX, 12(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R8, R14 + XORL R10, R14 + ANDL R9, R14 + XORL R8, R14 + ADDL R14, R13 + ADDL R12, R13 + ADDL $0x5a827999, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 20. + MOVL 4(SP), CX + XORL 48(SP), CX + XORL 24(SP), CX + XORL 16(SP), CX + ROLL $0x01, CX + MOVL CX, 16(SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + XORL R9, R14 + XORL R10, R14 + ADDL R14, R12 + ADDL R8, R12 + ADDL $0x6ed9eba1, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 21. + MOVL 8(SP), CX + XORL 52(SP), CX + XORL 28(SP), CX + XORL 20(SP), CX + ROLL $0x01, CX + MOVL CX, 20(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + XORL R11, R14 + XORL R9, R14 + ADDL R14, R8 + ADDL R10, R8 + ADDL $0x6ed9eba1, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 22. + MOVL 12(SP), CX + XORL 56(SP), CX + XORL 32(SP), CX + XORL 24(SP), CX + ROLL $0x01, CX + MOVL CX, 24(SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + XORL R13, R14 + XORL R11, R14 + ADDL R14, R10 + ADDL R9, R10 + ADDL $0x6ed9eba1, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 23. + MOVL 16(SP), CX + XORL 60(SP), CX + XORL 36(SP), CX + XORL 28(SP), CX + ROLL $0x01, CX + MOVL CX, 28(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + XORL R12, R14 + XORL R13, R14 + ADDL R14, R9 + ADDL R11, R9 + ADDL $0x6ed9eba1, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 24. + MOVL 20(SP), CX + XORL (SP), CX + XORL 40(SP), CX + XORL 32(SP), CX + ROLL $0x01, CX + MOVL CX, 32(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + XORL R8, R14 + XORL R12, R14 + ADDL R14, R11 + ADDL R13, R11 + ADDL $0x6ed9eba1, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 25. + MOVL 24(SP), CX + XORL 4(SP), CX + XORL 44(SP), CX + XORL 36(SP), CX + ROLL $0x01, CX + MOVL CX, 36(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + XORL R10, R14 + XORL R8, R14 + ADDL R14, R13 + ADDL R12, R13 + ADDL $0x6ed9eba1, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 26. + MOVL 28(SP), CX + XORL 8(SP), CX + XORL 48(SP), CX + XORL 40(SP), CX + ROLL $0x01, CX + MOVL CX, 40(SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + XORL R9, R14 + XORL R10, R14 + ADDL R14, R12 + ADDL R8, R12 + ADDL $0x6ed9eba1, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 27. + MOVL 32(SP), CX + XORL 12(SP), CX + XORL 52(SP), CX + XORL 44(SP), CX + ROLL $0x01, CX + MOVL CX, 44(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + XORL R11, R14 + XORL R9, R14 + ADDL R14, R8 + ADDL R10, R8 + ADDL $0x6ed9eba1, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 28. + MOVL 36(SP), CX + XORL 16(SP), CX + XORL 56(SP), CX + XORL 48(SP), CX + ROLL $0x01, CX + MOVL CX, 48(SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + XORL R13, R14 + XORL R11, R14 + ADDL R14, R10 + ADDL R9, R10 + ADDL $0x6ed9eba1, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 29. + MOVL 40(SP), CX + XORL 20(SP), CX + XORL 60(SP), CX + XORL 52(SP), CX + ROLL $0x01, CX + MOVL CX, 52(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + XORL R12, R14 + XORL R13, R14 + ADDL R14, R9 + ADDL R11, R9 + ADDL $0x6ed9eba1, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 30. + MOVL 44(SP), CX + XORL 24(SP), CX + XORL (SP), CX + XORL 56(SP), CX + ROLL $0x01, CX + MOVL CX, 56(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + XORL R8, R14 + XORL R12, R14 + ADDL R14, R11 + ADDL R13, R11 + ADDL $0x6ed9eba1, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 31. + MOVL 48(SP), CX + XORL 28(SP), CX + XORL 4(SP), CX + XORL 60(SP), CX + ROLL $0x01, CX + MOVL CX, 60(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + XORL R10, R14 + XORL R8, R14 + ADDL R14, R13 + ADDL R12, R13 + ADDL $0x6ed9eba1, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 32. + MOVL 52(SP), CX + XORL 32(SP), CX + XORL 8(SP), CX + XORL (SP), CX + ROLL $0x01, CX + MOVL CX, (SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + XORL R9, R14 + XORL R10, R14 + ADDL R14, R12 + ADDL R8, R12 + ADDL $0x6ed9eba1, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 33. + MOVL 56(SP), CX + XORL 36(SP), CX + XORL 12(SP), CX + XORL 4(SP), CX + ROLL $0x01, CX + MOVL CX, 4(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + XORL R11, R14 + XORL R9, R14 + ADDL R14, R8 + ADDL R10, R8 + ADDL $0x6ed9eba1, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 34. + MOVL 60(SP), CX + XORL 40(SP), CX + XORL 16(SP), CX + XORL 8(SP), CX + ROLL $0x01, CX + MOVL CX, 8(SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + XORL R13, R14 + XORL R11, R14 + ADDL R14, R10 + ADDL R9, R10 + ADDL $0x6ed9eba1, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 35. + MOVL (SP), CX + XORL 44(SP), CX + XORL 20(SP), CX + XORL 12(SP), CX + ROLL $0x01, CX + MOVL CX, 12(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + XORL R12, R14 + XORL R13, R14 + ADDL R14, R9 + ADDL R11, R9 + ADDL $0x6ed9eba1, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 36. + MOVL 4(SP), CX + XORL 48(SP), CX + XORL 24(SP), CX + XORL 16(SP), CX + ROLL $0x01, CX + MOVL CX, 16(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + XORL R8, R14 + XORL R12, R14 + ADDL R14, R11 + ADDL R13, R11 + ADDL $0x6ed9eba1, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 37. + MOVL 8(SP), CX + XORL 52(SP), CX + XORL 28(SP), CX + XORL 20(SP), CX + ROLL $0x01, CX + MOVL CX, 20(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + XORL R10, R14 + XORL R8, R14 + ADDL R14, R13 + ADDL R12, R13 + ADDL $0x6ed9eba1, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 38. + MOVL 12(SP), CX + XORL 56(SP), CX + XORL 32(SP), CX + XORL 24(SP), CX + ROLL $0x01, CX + MOVL CX, 24(SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + XORL R9, R14 + XORL R10, R14 + ADDL R14, R12 + ADDL R8, R12 + ADDL $0x6ed9eba1, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 39. + MOVL 16(SP), CX + XORL 60(SP), CX + XORL 36(SP), CX + XORL 28(SP), CX + ROLL $0x01, CX + MOVL CX, 28(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + XORL R11, R14 + XORL R9, R14 + ADDL R14, R8 + ADDL R10, R8 + ADDL $0x6ed9eba1, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 40. + MOVL 20(SP), CX + XORL (SP), CX + XORL 40(SP), CX + XORL 32(SP), CX + ROLL $0x01, CX + MOVL CX, 32(SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + ORL R13, R14 + ANDL R11, R14 + MOVL R12, R15 + ANDL R13, R15 + ORL R14, R15 + ADDL R15, R10 + ADDL R9, R10 + ADDL $0x8f1bbcdc, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 41. + MOVL 24(SP), CX + XORL 4(SP), CX + XORL 44(SP), CX + XORL 36(SP), CX + ROLL $0x01, CX + MOVL CX, 36(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + ORL R12, R14 + ANDL R13, R14 + MOVL R8, R15 + ANDL R12, R15 + ORL R14, R15 + ADDL R15, R9 + ADDL R11, R9 + ADDL $0x8f1bbcdc, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 42. + MOVL 28(SP), CX + XORL 8(SP), CX + XORL 48(SP), CX + XORL 40(SP), CX + ROLL $0x01, CX + MOVL CX, 40(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + ORL R8, R14 + ANDL R12, R14 + MOVL R10, R15 + ANDL R8, R15 + ORL R14, R15 + ADDL R15, R11 + ADDL R13, R11 + ADDL $0x8f1bbcdc, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 43. + MOVL 32(SP), CX + XORL 12(SP), CX + XORL 52(SP), CX + XORL 44(SP), CX + ROLL $0x01, CX + MOVL CX, 44(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + ORL R10, R14 + ANDL R8, R14 + MOVL R9, R15 + ANDL R10, R15 + ORL R14, R15 + ADDL R15, R13 + ADDL R12, R13 + ADDL $0x8f1bbcdc, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 44. + MOVL 36(SP), CX + XORL 16(SP), CX + XORL 56(SP), CX + XORL 48(SP), CX + ROLL $0x01, CX + MOVL CX, 48(SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + ORL R9, R14 + ANDL R10, R14 + MOVL R11, R15 + ANDL R9, R15 + ORL R14, R15 + ADDL R15, R12 + ADDL R8, R12 + ADDL $0x8f1bbcdc, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 45. + MOVL 40(SP), CX + XORL 20(SP), CX + XORL 60(SP), CX + XORL 52(SP), CX + ROLL $0x01, CX + MOVL CX, 52(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + ORL R11, R14 + ANDL R9, R14 + MOVL R13, R15 + ANDL R11, R15 + ORL R14, R15 + ADDL R15, R8 + ADDL R10, R8 + ADDL $0x8f1bbcdc, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 46. + MOVL 44(SP), CX + XORL 24(SP), CX + XORL (SP), CX + XORL 56(SP), CX + ROLL $0x01, CX + MOVL CX, 56(SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + ORL R13, R14 + ANDL R11, R14 + MOVL R12, R15 + ANDL R13, R15 + ORL R14, R15 + ADDL R15, R10 + ADDL R9, R10 + ADDL $0x8f1bbcdc, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 47. + MOVL 48(SP), CX + XORL 28(SP), CX + XORL 4(SP), CX + XORL 60(SP), CX + ROLL $0x01, CX + MOVL CX, 60(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + ORL R12, R14 + ANDL R13, R14 + MOVL R8, R15 + ANDL R12, R15 + ORL R14, R15 + ADDL R15, R9 + ADDL R11, R9 + ADDL $0x8f1bbcdc, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 48. + MOVL 52(SP), CX + XORL 32(SP), CX + XORL 8(SP), CX + XORL (SP), CX + ROLL $0x01, CX + MOVL CX, (SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + ORL R8, R14 + ANDL R12, R14 + MOVL R10, R15 + ANDL R8, R15 + ORL R14, R15 + ADDL R15, R11 + ADDL R13, R11 + ADDL $0x8f1bbcdc, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 49. + MOVL 56(SP), CX + XORL 36(SP), CX + XORL 12(SP), CX + XORL 4(SP), CX + ROLL $0x01, CX + MOVL CX, 4(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + ORL R10, R14 + ANDL R8, R14 + MOVL R9, R15 + ANDL R10, R15 + ORL R14, R15 + ADDL R15, R13 + ADDL R12, R13 + ADDL $0x8f1bbcdc, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 50. + MOVL 60(SP), CX + XORL 40(SP), CX + XORL 16(SP), CX + XORL 8(SP), CX + ROLL $0x01, CX + MOVL CX, 8(SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + ORL R9, R14 + ANDL R10, R14 + MOVL R11, R15 + ANDL R9, R15 + ORL R14, R15 + ADDL R15, R12 + ADDL R8, R12 + ADDL $0x8f1bbcdc, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 51. + MOVL (SP), CX + XORL 44(SP), CX + XORL 20(SP), CX + XORL 12(SP), CX + ROLL $0x01, CX + MOVL CX, 12(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + ORL R11, R14 + ANDL R9, R14 + MOVL R13, R15 + ANDL R11, R15 + ORL R14, R15 + ADDL R15, R8 + ADDL R10, R8 + ADDL $0x8f1bbcdc, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 52. + MOVL 4(SP), CX + XORL 48(SP), CX + XORL 24(SP), CX + XORL 16(SP), CX + ROLL $0x01, CX + MOVL CX, 16(SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + ORL R13, R14 + ANDL R11, R14 + MOVL R12, R15 + ANDL R13, R15 + ORL R14, R15 + ADDL R15, R10 + ADDL R9, R10 + ADDL $0x8f1bbcdc, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 53. + MOVL 8(SP), CX + XORL 52(SP), CX + XORL 28(SP), CX + XORL 20(SP), CX + ROLL $0x01, CX + MOVL CX, 20(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + ORL R12, R14 + ANDL R13, R14 + MOVL R8, R15 + ANDL R12, R15 + ORL R14, R15 + ADDL R15, R9 + ADDL R11, R9 + ADDL $0x8f1bbcdc, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 54. + MOVL 12(SP), CX + XORL 56(SP), CX + XORL 32(SP), CX + XORL 24(SP), CX + ROLL $0x01, CX + MOVL CX, 24(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + ORL R8, R14 + ANDL R12, R14 + MOVL R10, R15 + ANDL R8, R15 + ORL R14, R15 + ADDL R15, R11 + ADDL R13, R11 + ADDL $0x8f1bbcdc, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 55. + MOVL 16(SP), CX + XORL 60(SP), CX + XORL 36(SP), CX + XORL 28(SP), CX + ROLL $0x01, CX + MOVL CX, 28(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + ORL R10, R14 + ANDL R8, R14 + MOVL R9, R15 + ANDL R10, R15 + ORL R14, R15 + ADDL R15, R13 + ADDL R12, R13 + ADDL $0x8f1bbcdc, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 56. + MOVL 20(SP), CX + XORL (SP), CX + XORL 40(SP), CX + XORL 32(SP), CX + ROLL $0x01, CX + MOVL CX, 32(SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + ORL R9, R14 + ANDL R10, R14 + MOVL R11, R15 + ANDL R9, R15 + ORL R14, R15 + ADDL R15, R12 + ADDL R8, R12 + ADDL $0x8f1bbcdc, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 57. + MOVL 24(SP), CX + XORL 4(SP), CX + XORL 44(SP), CX + XORL 36(SP), CX + ROLL $0x01, CX + MOVL CX, 36(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + ORL R11, R14 + ANDL R9, R14 + MOVL R13, R15 + ANDL R11, R15 + ORL R14, R15 + ADDL R15, R8 + ADDL R10, R8 + ADDL $0x8f1bbcdc, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 58. + MOVL 28(SP), CX + XORL 8(SP), CX + XORL 48(SP), CX + XORL 40(SP), CX + ROLL $0x01, CX + MOVL CX, 40(SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + ORL R13, R14 + ANDL R11, R14 + MOVL R12, R15 + ANDL R13, R15 + ORL R14, R15 + ADDL R15, R10 + ADDL R9, R10 + ADDL $0x8f1bbcdc, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 59. + MOVL 32(SP), CX + XORL 12(SP), CX + XORL 52(SP), CX + XORL 44(SP), CX + ROLL $0x01, CX + MOVL CX, 44(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + ORL R12, R14 + ANDL R13, R14 + MOVL R8, R15 + ANDL R12, R15 + ORL R14, R15 + ADDL R15, R9 + ADDL R11, R9 + ADDL $0x8f1bbcdc, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 60. + MOVL 36(SP), CX + XORL 16(SP), CX + XORL 56(SP), CX + XORL 48(SP), CX + ROLL $0x01, CX + MOVL CX, 48(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + XORL R8, R14 + XORL R12, R14 + ADDL R14, R11 + ADDL R13, R11 + ADDL $0xca62c1d6, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 61. + MOVL 40(SP), CX + XORL 20(SP), CX + XORL 60(SP), CX + XORL 52(SP), CX + ROLL $0x01, CX + MOVL CX, 52(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + XORL R10, R14 + XORL R8, R14 + ADDL R14, R13 + ADDL R12, R13 + ADDL $0xca62c1d6, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 62. + MOVL 44(SP), CX + XORL 24(SP), CX + XORL (SP), CX + XORL 56(SP), CX + ROLL $0x01, CX + MOVL CX, 56(SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + XORL R9, R14 + XORL R10, R14 + ADDL R14, R12 + ADDL R8, R12 + ADDL $0xca62c1d6, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 63. + MOVL 48(SP), CX + XORL 28(SP), CX + XORL 4(SP), CX + XORL 60(SP), CX + ROLL $0x01, CX + MOVL CX, 60(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + XORL R11, R14 + XORL R9, R14 + ADDL R14, R8 + ADDL R10, R8 + ADDL $0xca62c1d6, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 64. + MOVL 52(SP), CX + XORL 32(SP), CX + XORL 8(SP), CX + XORL (SP), CX + ROLL $0x01, CX + MOVL CX, (SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + XORL R13, R14 + XORL R11, R14 + ADDL R14, R10 + ADDL R9, R10 + ADDL $0xca62c1d6, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 65. + MOVL 56(SP), CX + XORL 36(SP), CX + XORL 12(SP), CX + XORL 4(SP), CX + ROLL $0x01, CX + MOVL CX, 4(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + XORL R12, R14 + XORL R13, R14 + ADDL R14, R9 + ADDL R11, R9 + ADDL $0xca62c1d6, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 66. + MOVL 60(SP), CX + XORL 40(SP), CX + XORL 16(SP), CX + XORL 8(SP), CX + ROLL $0x01, CX + MOVL CX, 8(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + XORL R8, R14 + XORL R12, R14 + ADDL R14, R11 + ADDL R13, R11 + ADDL $0xca62c1d6, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 67. + MOVL (SP), CX + XORL 44(SP), CX + XORL 20(SP), CX + XORL 12(SP), CX + ROLL $0x01, CX + MOVL CX, 12(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + XORL R10, R14 + XORL R8, R14 + ADDL R14, R13 + ADDL R12, R13 + ADDL $0xca62c1d6, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 68. + MOVL 4(SP), CX + XORL 48(SP), CX + XORL 24(SP), CX + XORL 16(SP), CX + ROLL $0x01, CX + MOVL CX, 16(SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + XORL R9, R14 + XORL R10, R14 + ADDL R14, R12 + ADDL R8, R12 + ADDL $0xca62c1d6, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 69. + MOVL 8(SP), CX + XORL 52(SP), CX + XORL 28(SP), CX + XORL 20(SP), CX + ROLL $0x01, CX + MOVL CX, 20(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + XORL R11, R14 + XORL R9, R14 + ADDL R14, R8 + ADDL R10, R8 + ADDL $0xca62c1d6, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 70. + MOVL 12(SP), CX + XORL 56(SP), CX + XORL 32(SP), CX + XORL 24(SP), CX + ROLL $0x01, CX + MOVL CX, 24(SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + XORL R13, R14 + XORL R11, R14 + ADDL R14, R10 + ADDL R9, R10 + ADDL $0xca62c1d6, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 71. + MOVL 16(SP), CX + XORL 60(SP), CX + XORL 36(SP), CX + XORL 28(SP), CX + ROLL $0x01, CX + MOVL CX, 28(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + XORL R12, R14 + XORL R13, R14 + ADDL R14, R9 + ADDL R11, R9 + ADDL $0xca62c1d6, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 72. + MOVL 20(SP), CX + XORL (SP), CX + XORL 40(SP), CX + XORL 32(SP), CX + ROLL $0x01, CX + MOVL CX, 32(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + XORL R8, R14 + XORL R12, R14 + ADDL R14, R11 + ADDL R13, R11 + ADDL $0xca62c1d6, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 73. + MOVL 24(SP), CX + XORL 4(SP), CX + XORL 44(SP), CX + XORL 36(SP), CX + ROLL $0x01, CX + MOVL CX, 36(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + XORL R10, R14 + XORL R8, R14 + ADDL R14, R13 + ADDL R12, R13 + ADDL $0xca62c1d6, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Round 74. + MOVL 28(SP), CX + XORL 8(SP), CX + XORL 48(SP), CX + XORL 40(SP), CX + ROLL $0x01, CX + MOVL CX, 40(SP) + MOVL R13, R12 + ROLL $0x05, R12 + MOVL R11, R14 + XORL R9, R14 + XORL R10, R14 + ADDL R14, R12 + ADDL R8, R12 + ADDL $0xca62c1d6, R12 + ADDL CX, R12 + ROLL $0x1e, R11 + + // Round 75. + MOVL 32(SP), CX + XORL 12(SP), CX + XORL 52(SP), CX + XORL 44(SP), CX + ROLL $0x01, CX + MOVL CX, 44(SP) + MOVL R12, R8 + ROLL $0x05, R8 + MOVL R13, R14 + XORL R11, R14 + XORL R9, R14 + ADDL R14, R8 + ADDL R10, R8 + ADDL $0xca62c1d6, R8 + ADDL CX, R8 + ROLL $0x1e, R13 + + // Round 76. + MOVL 36(SP), CX + XORL 16(SP), CX + XORL 56(SP), CX + XORL 48(SP), CX + ROLL $0x01, CX + MOVL CX, 48(SP) + MOVL R8, R10 + ROLL $0x05, R10 + MOVL R12, R14 + XORL R13, R14 + XORL R11, R14 + ADDL R14, R10 + ADDL R9, R10 + ADDL $0xca62c1d6, R10 + ADDL CX, R10 + ROLL $0x1e, R12 + + // Round 77. + MOVL 40(SP), CX + XORL 20(SP), CX + XORL 60(SP), CX + XORL 52(SP), CX + ROLL $0x01, CX + MOVL CX, 52(SP) + MOVL R10, R9 + ROLL $0x05, R9 + MOVL R8, R14 + XORL R12, R14 + XORL R13, R14 + ADDL R14, R9 + ADDL R11, R9 + ADDL $0xca62c1d6, R9 + ADDL CX, R9 + ROLL $0x1e, R8 + + // Round 78. + MOVL 44(SP), CX + XORL 24(SP), CX + XORL (SP), CX + XORL 56(SP), CX + ROLL $0x01, CX + MOVL CX, 56(SP) + MOVL R9, R11 + ROLL $0x05, R11 + MOVL R10, R14 + XORL R8, R14 + XORL R12, R14 + ADDL R14, R11 + ADDL R13, R11 + ADDL $0xca62c1d6, R11 + ADDL CX, R11 + ROLL $0x1e, R10 + + // Round 79. + MOVL 48(SP), CX + XORL 28(SP), CX + XORL 4(SP), CX + XORL 60(SP), CX + ROLL $0x01, CX + MOVL CX, 60(SP) + MOVL R11, R13 + ROLL $0x05, R13 + MOVL R9, R14 + XORL R10, R14 + XORL R8, R14 + ADDL R14, R13 + ADDL R12, R13 + ADDL $0xca62c1d6, R13 + ADDL CX, R13 + ROLL $0x1e, R9 + + // Final add. + ADDL R13, DX + ADDL R11, BX + ADDL R9, BP + ADDL R10, SI + ADDL R8, DI + + // Store results back. + MOVL DX, (AX) + MOVL BX, 4(AX) + MOVL BP, 8(AX) + MOVL SI, 12(AX) + MOVL DI, 16(AX) RET