// Code generated by command: go run asm.go -out sha1.s -stubs stub.go. DO NOT EDIT.

// func block(h *[5]uint32, m []byte)
TEXT ·block(SB), $64-32
	MOVQ h+0(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)
	MOVL   R8, R14
	ROLL   $0x05, R14
	MOVL   R11, R15
	XORL   R10, R15
	ANDL   R9, R15
	XORL   R11, R15
	ADDL   R15, R14
	ADDL   R12, R14
	ADDL   $0x5a827999, R14
	ADDL   R13, R14
	ROLL   $0x1e, R9

	// Round 1.
	MOVL   4(CX), R12
	BSWAPL R12
	MOVL   R12, 4(SP)
	MOVL   R14, R13
	ROLL   $0x05, R13
	MOVL   R10, R15
	XORL   R9, R15
	ANDL   R8, R15
	XORL   R10, R15
	ADDL   R15, R13
	ADDL   R11, R13
	ADDL   $0x5a827999, R13
	ADDL   R12, R13
	ROLL   $0x1e, R8

	// Round 2.
	MOVL   8(CX), R11
	BSWAPL R11
	MOVL   R11, 8(SP)
	MOVL   R13, R12
	ROLL   $0x05, R12
	MOVL   R9, R15
	XORL   R8, R15
	ANDL   R14, R15
	XORL   R9, R15
	ADDL   R15, R12
	ADDL   R10, R12
	ADDL   $0x5a827999, R12
	ADDL   R11, R12
	ROLL   $0x1e, R14

	// Round 3.
	MOVL   12(CX), R10
	BSWAPL R10
	MOVL   R10, 12(SP)
	MOVL   R12, R11
	ROLL   $0x05, R11
	MOVL   R8, R15
	XORL   R14, R15
	ANDL   R13, R15
	XORL   R8, R15
	ADDL   R15, R11
	ADDL   R9, R11
	ADDL   $0x5a827999, R11
	ADDL   R10, R11
	ROLL   $0x1e, R13

	// Round 4.
	MOVL   16(CX), R9
	BSWAPL R9
	MOVL   R9, 16(SP)
	MOVL   R11, R10
	ROLL   $0x05, R10
	MOVL   R14, R15
	XORL   R13, R15
	ANDL   R12, R15
	XORL   R14, R15
	ADDL   R15, R10
	ADDL   R8, R10
	ADDL   $0x5a827999, R10
	ADDL   R9, R10
	ROLL   $0x1e, R12

	// Round 5.
	MOVL   20(CX), R8
	BSWAPL R8
	MOVL   R8, 20(SP)
	MOVL   R10, R9
	ROLL   $0x05, R9
	MOVL   R13, R15
	XORL   R12, R15
	ANDL   R11, R15
	XORL   R13, R15
	ADDL   R15, R9
	ADDL   R14, R9
	ADDL   $0x5a827999, R9
	ADDL   R8, R9
	ROLL   $0x1e, R11

	// Round 6.
	MOVL   24(CX), R8
	BSWAPL R8
	MOVL   R8, 24(SP)
	MOVL   R9, R14
	ROLL   $0x05, R14
	MOVL   R12, R15
	XORL   R11, R15
	ANDL   R10, R15
	XORL   R12, R15
	ADDL   R15, R14
	ADDL   R13, R14
	ADDL   $0x5a827999, R14
	ADDL   R8, R14
	ROLL   $0x1e, R10

	// Round 7.
	MOVL   28(CX), R8
	BSWAPL R8
	MOVL   R8, 28(SP)
	MOVL   R14, R13
	ROLL   $0x05, R13
	MOVL   R11, R15
	XORL   R10, R15
	ANDL   R9, R15
	XORL   R11, R15
	ADDL   R15, R13
	ADDL   R12, R13
	ADDL   $0x5a827999, R13
	ADDL   R8, R13
	ROLL   $0x1e, R9

	// Round 8.
	MOVL   32(CX), R8
	BSWAPL R8
	MOVL   R8, 32(SP)
	MOVL   R13, R12
	ROLL   $0x05, R12
	MOVL   R10, R15
	XORL   R9, R15
	ANDL   R14, R15
	XORL   R10, R15
	ADDL   R15, R12
	ADDL   R11, R12
	ADDL   $0x5a827999, R12
	ADDL   R8, R12
	ROLL   $0x1e, R14

	// Round 9.
	MOVL   36(CX), R8
	BSWAPL R8
	MOVL   R8, 36(SP)
	MOVL   R12, R11
	ROLL   $0x05, R11
	MOVL   R9, R15
	XORL   R14, R15
	ANDL   R13, R15
	XORL   R9, R15
	ADDL   R15, R11
	ADDL   R10, R11
	ADDL   $0x5a827999, R11
	ADDL   R8, R11
	ROLL   $0x1e, R13

	// Round 10.
	MOVL   40(CX), R8
	BSWAPL R8
	MOVL   R8, 40(SP)
	MOVL   R11, R10
	ROLL   $0x05, R10
	MOVL   R14, R15
	XORL   R13, R15
	ANDL   R12, R15
	XORL   R14, R15
	ADDL   R15, R10
	ADDL   R9, R10
	ADDL   $0x5a827999, R10
	ADDL   R8, R10
	ROLL   $0x1e, R12

	// Round 11.
	MOVL   44(CX), R8
	BSWAPL R8
	MOVL   R8, 44(SP)
	MOVL   R10, R9
	ROLL   $0x05, R9
	MOVL   R13, R15
	XORL   R12, R15
	ANDL   R11, R15
	XORL   R13, R15
	ADDL   R15, R9
	ADDL   R14, R9
	ADDL   $0x5a827999, R9
	ADDL   R8, R9
	ROLL   $0x1e, R11

	// Round 12.
	MOVL   48(CX), R8
	BSWAPL R8
	MOVL   R8, 48(SP)
	MOVL   R9, R14
	ROLL   $0x05, R14
	MOVL   R12, R15
	XORL   R11, R15
	ANDL   R10, R15
	XORL   R12, R15
	ADDL   R15, R14
	ADDL   R13, R14
	ADDL   $0x5a827999, R14
	ADDL   R8, R14
	ROLL   $0x1e, R10

	// Round 13.
	MOVL   52(CX), R8
	BSWAPL R8
	MOVL   R8, 52(SP)
	MOVL   R14, R13
	ROLL   $0x05, R13
	MOVL   R11, R15
	XORL   R10, R15
	ANDL   R9, R15
	XORL   R11, R15
	ADDL   R15, R13
	ADDL   R12, R13
	ADDL   $0x5a827999, R13
	ADDL   R8, R13
	ROLL   $0x1e, R9

	// Round 14.
	MOVL   56(CX), R8
	BSWAPL R8
	MOVL   R8, 56(SP)
	MOVL   R13, R12
	ROLL   $0x05, R12
	MOVL   R10, R15
	XORL   R9, R15
	ANDL   R14, R15
	XORL   R10, R15
	ADDL   R15, R12
	ADDL   R11, R12
	ADDL   $0x5a827999, R12
	ADDL   R8, R12
	ROLL   $0x1e, R14

	// Round 15.
	MOVL   60(CX), CX
	BSWAPL CX
	MOVL   CX, 60(SP)
	MOVL   R12, R8
	ROLL   $0x05, R8
	MOVL   R9, R11
	XORL   R14, R11
	ANDL   R13, R11
	XORL   R9, R11
	ADDL   R11, R8
	ADDL   R10, R8
	ADDL   $0x5a827999, R8
	ADDL   CX, R8
	ROLL   $0x1e, R13

	// 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
