// Code generated by command: go run gen.go -out ../md5block_amd64.s -stubs ../md5block_amd64.go -pkg=md5simd. DO NOT EDIT.

// +build !appengine
// +build !noasm
// +build gc

// func blockScalar(dig *[4]uint32, p []byte)
TEXT ·blockScalar(SB), $0-32
	MOVQ p_len+16(FP), AX
	MOVQ dig+0(FP), CX
	MOVQ p_base+8(FP), DX
	SHRQ $0x06, AX
	SHLQ $0x06, AX
	LEAQ (DX)(AX*1), AX
	CMPQ DX, AX
	JEQ  end
	MOVL (CX), BX
	MOVL 4(CX), BP
	MOVL 8(CX), SI
	MOVL 12(CX), CX
	MOVL $0xffffffff, DI

loop:
	MOVL (DX), R8
	MOVL CX, R9
	MOVL BX, R10
	MOVL BP, R11
	MOVL SI, R12
	MOVL CX, R13

	// ROUND1
	XORL SI, R9
	ADDL $0xd76aa478, BX
	ADDL R8, BX
	ANDL BP, R9
	XORL CX, R9
	MOVL 4(DX), R8
	ADDL R9, BX
	ROLL $0x07, BX
	MOVL SI, R9
	ADDL BP, BX
	XORL BP, R9
	ADDL $0xe8c7b756, CX
	ADDL R8, CX
	ANDL BX, R9
	XORL SI, R9
	MOVL 8(DX), R8
	ADDL R9, CX
	ROLL $0x0c, CX
	MOVL BP, R9
	ADDL BX, CX
	XORL BX, R9
	ADDL $0x242070db, SI
	ADDL R8, SI
	ANDL CX, R9
	XORL BP, R9
	MOVL 12(DX), R8
	ADDL R9, SI
	ROLL $0x11, SI
	MOVL BX, R9
	ADDL CX, SI
	XORL CX, R9
	ADDL $0xc1bdceee, BP
	ADDL R8, BP
	ANDL SI, R9
	XORL BX, R9
	MOVL 16(DX), R8
	ADDL R9, BP
	ROLL $0x16, BP
	MOVL CX, R9
	ADDL SI, BP
	XORL SI, R9
	ADDL $0xf57c0faf, BX
	ADDL R8, BX
	ANDL BP, R9
	XORL CX, R9
	MOVL 20(DX), R8
	ADDL R9, BX
	ROLL $0x07, BX
	MOVL SI, R9
	ADDL BP, BX
	XORL BP, R9
	ADDL $0x4787c62a, CX
	ADDL R8, CX
	ANDL BX, R9
	XORL SI, R9
	MOVL 24(DX), R8
	ADDL R9, CX
	ROLL $0x0c, CX
	MOVL BP, R9
	ADDL BX, CX
	XORL BX, R9
	ADDL $0xa8304613, SI
	ADDL R8, SI
	ANDL CX, R9
	XORL BP, R9
	MOVL 28(DX), R8
	ADDL R9, SI
	ROLL $0x11, SI
	MOVL BX, R9
	ADDL CX, SI
	XORL CX, R9
	ADDL $0xfd469501, BP
	ADDL R8, BP
	ANDL SI, R9
	XORL BX, R9
	MOVL 32(DX), R8
	ADDL R9, BP
	ROLL $0x16, BP
	MOVL CX, R9
	ADDL SI, BP
	XORL SI, R9
	ADDL $0x698098d8, BX
	ADDL R8, BX
	ANDL BP, R9
	XORL CX, R9
	MOVL 36(DX), R8
	ADDL R9, BX
	ROLL $0x07, BX
	MOVL SI, R9
	ADDL BP, BX
	XORL BP, R9
	ADDL $0x8b44f7af, CX
	ADDL R8, CX
	ANDL BX, R9
	XORL SI, R9
	MOVL 40(DX), R8
	ADDL R9, CX
	ROLL $0x0c, CX
	MOVL BP, R9
	ADDL BX, CX
	XORL BX, R9
	ADDL $0xffff5bb1, SI
	ADDL R8, SI
	ANDL CX, R9
	XORL BP, R9
	MOVL 44(DX), R8
	ADDL R9, SI
	ROLL $0x11, SI
	MOVL BX, R9
	ADDL CX, SI
	XORL CX, R9
	ADDL $0x895cd7be, BP
	ADDL R8, BP
	ANDL SI, R9
	XORL BX, R9
	MOVL 48(DX), R8
	ADDL R9, BP
	ROLL $0x16, BP
	MOVL CX, R9
	ADDL SI, BP
	XORL SI, R9
	ADDL $0x6b901122, BX
	ADDL R8, BX
	ANDL BP, R9
	XORL CX, R9
	MOVL 52(DX), R8
	ADDL R9, BX
	ROLL $0x07, BX
	MOVL SI, R9
	ADDL BP, BX
	XORL BP, R9
	ADDL $0xfd987193, CX
	ADDL R8, CX
	ANDL BX, R9
	XORL SI, R9
	MOVL 56(DX), R8
	ADDL R9, CX
	ROLL $0x0c, CX
	MOVL BP, R9
	ADDL BX, CX
	XORL BX, R9
	ADDL $0xa679438e, SI
	ADDL R8, SI
	ANDL CX, R9
	XORL BP, R9
	MOVL 60(DX), R8
	ADDL R9, SI
	ROLL $0x11, SI
	MOVL BX, R9
	ADDL CX, SI
	XORL CX, R9
	ADDL $0x49b40821, BP
	ADDL R8, BP
	ANDL SI, R9
	XORL BX, R9
	MOVL 4(DX), R8
	ADDL R9, BP
	ROLL $0x16, BP
	MOVL CX, R9
	ADDL SI, BP

	// ROUND2
	MOVL CX, R9
	MOVL CX, R14
	XORL DI, R9
	ADDL $0xf61e2562, BX
	ADDL R8, BX
	ANDL BP, R14
	ANDL SI, R9
	MOVL 24(DX), R8
	ORL  R9, R14
	MOVL SI, R9
	ADDL R14, BX
	MOVL SI, R14
	ROLL $0x05, BX
	ADDL BP, BX
	XORL DI, R9
	ADDL $0xc040b340, CX
	ADDL R8, CX
	ANDL BX, R14
	ANDL BP, R9
	MOVL 44(DX), R8
	ORL  R9, R14
	MOVL BP, R9
	ADDL R14, CX
	MOVL BP, R14
	ROLL $0x09, CX
	ADDL BX, CX
	XORL DI, R9
	ADDL $0x265e5a51, SI
	ADDL R8, SI
	ANDL CX, R14
	ANDL BX, R9
	MOVL (DX), R8
	ORL  R9, R14
	MOVL BX, R9
	ADDL R14, SI
	MOVL BX, R14
	ROLL $0x0e, SI
	ADDL CX, SI
	XORL DI, R9
	ADDL $0xe9b6c7aa, BP
	ADDL R8, BP
	ANDL SI, R14
	ANDL CX, R9
	MOVL 20(DX), R8
	ORL  R9, R14
	MOVL CX, R9
	ADDL R14, BP
	MOVL CX, R14
	ROLL $0x14, BP
	ADDL SI, BP
	XORL DI, R9
	ADDL $0xd62f105d, BX
	ADDL R8, BX
	ANDL BP, R14
	ANDL SI, R9
	MOVL 40(DX), R8
	ORL  R9, R14
	MOVL SI, R9
	ADDL R14, BX
	MOVL SI, R14
	ROLL $0x05, BX
	ADDL BP, BX
	XORL DI, R9
	ADDL $0x02441453, CX
	ADDL R8, CX
	ANDL BX, R14
	ANDL BP, R9
	MOVL 60(DX), R8
	ORL  R9, R14
	MOVL BP, R9
	ADDL R14, CX
	MOVL BP, R14
	ROLL $0x09, CX
	ADDL BX, CX
	XORL DI, R9
	ADDL $0xd8a1e681, SI
	ADDL R8, SI
	ANDL CX, R14
	ANDL BX, R9
	MOVL 16(DX), R8
	ORL  R9, R14
	MOVL BX, R9
	ADDL R14, SI
	MOVL BX, R14
	ROLL $0x0e, SI
	ADDL CX, SI
	XORL DI, R9
	ADDL $0xe7d3fbc8, BP
	ADDL R8, BP
	ANDL SI, R14
	ANDL CX, R9
	MOVL 36(DX), R8
	ORL  R9, R14
	MOVL CX, R9
	ADDL R14, BP
	MOVL CX, R14
	ROLL $0x14, BP
	ADDL SI, BP
	XORL DI, R9
	ADDL $0x21e1cde6, BX
	ADDL R8, BX
	ANDL BP, R14
	ANDL SI, R9
	MOVL 56(DX), R8
	ORL  R9, R14
	MOVL SI, R9
	ADDL R14, BX
	MOVL SI, R14
	ROLL $0x05, BX
	ADDL BP, BX
	XORL DI, R9
	ADDL $0xc33707d6, CX
	ADDL R8, CX
	ANDL BX, R14
	ANDL BP, R9
	MOVL 12(DX), R8
	ORL  R9, R14
	MOVL BP, R9
	ADDL R14, CX
	MOVL BP, R14
	ROLL $0x09, CX
	ADDL BX, CX
	XORL DI, R9
	ADDL $0xf4d50d87, SI
	ADDL R8, SI
	ANDL CX, R14
	ANDL BX, R9
	MOVL 32(DX), R8
	ORL  R9, R14
	MOVL BX, R9
	ADDL R14, SI
	MOVL BX, R14
	ROLL $0x0e, SI
	ADDL CX, SI
	XORL DI, R9
	ADDL $0x455a14ed, BP
	ADDL R8, BP
	ANDL SI, R14
	ANDL CX, R9
	MOVL 52(DX), R8
	ORL  R9, R14
	MOVL CX, R9
	ADDL R14, BP
	MOVL CX, R14
	ROLL $0x14, BP
	ADDL SI, BP
	XORL DI, R9
	ADDL $0xa9e3e905, BX
	ADDL R8, BX
	ANDL BP, R14
	ANDL SI, R9
	MOVL 8(DX), R8
	ORL  R9, R14
	MOVL SI, R9
	ADDL R14, BX
	MOVL SI, R14
	ROLL $0x05, BX
	ADDL BP, BX
	XORL DI, R9
	ADDL $0xfcefa3f8, CX
	ADDL R8, CX
	ANDL BX, R14
	ANDL BP, R9
	MOVL 28(DX), R8
	ORL  R9, R14
	MOVL BP, R9
	ADDL R14, CX
	MOVL BP, R14
	ROLL $0x09, CX
	ADDL BX, CX
	XORL DI, R9
	ADDL $0x676f02d9, SI
	ADDL R8, SI
	ANDL CX, R14
	ANDL BX, R9
	MOVL 48(DX), R8
	ORL  R9, R14
	MOVL BX, R9
	ADDL R14, SI
	MOVL BX, R14
	ROLL $0x0e, SI
	ADDL CX, SI
	XORL DI, R9
	ADDL $0x8d2a4c8a, BP
	ADDL R8, BP
	ANDL SI, R14
	ANDL CX, R9
	MOVL 20(DX), R8
	ORL  R9, R14
	MOVL CX, R9
	ADDL R14, BP
	MOVL CX, R14
	ROLL $0x14, BP
	ADDL SI, BP

	// ROUND3
	MOVL SI, R9
	ADDL $0xfffa3942, BX
	ADDL R8, BX
	MOVL 32(DX), R8
	XORL CX, R9
	XORL BP, R9
	ADDL R9, BX
	ROLL $0x04, BX
	MOVL BP, R9
	ADDL BP, BX
	ADDL $0x8771f681, CX
	ADDL R8, CX
	MOVL 44(DX), R8
	XORL SI, R9
	XORL BX, R9
	ADDL R9, CX
	ROLL $0x0b, CX
	MOVL BX, R9
	ADDL BX, CX
	ADDL $0x6d9d6122, SI
	ADDL R8, SI
	MOVL 56(DX), R8
	XORL BP, R9
	XORL CX, R9
	ADDL R9, SI
	ROLL $0x10, SI
	MOVL CX, R9
	ADDL CX, SI
	ADDL $0xfde5380c, BP
	ADDL R8, BP
	MOVL 4(DX), R8
	XORL BX, R9
	XORL SI, R9
	ADDL R9, BP
	ROLL $0x17, BP
	MOVL SI, R9
	ADDL SI, BP
	ADDL $0xa4beea44, BX
	ADDL R8, BX
	MOVL 16(DX), R8
	XORL CX, R9
	XORL BP, R9
	ADDL R9, BX
	ROLL $0x04, BX
	MOVL BP, R9
	ADDL BP, BX
	ADDL $0x4bdecfa9, CX
	ADDL R8, CX
	MOVL 28(DX), R8
	XORL SI, R9
	XORL BX, R9
	ADDL R9, CX
	ROLL $0x0b, CX
	MOVL BX, R9
	ADDL BX, CX
	ADDL $0xf6bb4b60, SI
	ADDL R8, SI
	MOVL 40(DX), R8
	XORL BP, R9
	XORL CX, R9
	ADDL R9, SI
	ROLL $0x10, SI
	MOVL CX, R9
	ADDL CX, SI
	ADDL $0xbebfbc70, BP
	ADDL R8, BP
	MOVL 52(DX), R8
	XORL BX, R9
	XORL SI, R9
	ADDL R9, BP
	ROLL $0x17, BP
	MOVL SI, R9
	ADDL SI, BP
	ADDL $0x289b7ec6, BX
	ADDL R8, BX
	MOVL (DX), R8
	XORL CX, R9
	XORL BP, R9
	ADDL R9, BX
	ROLL $0x04, BX
	MOVL BP, R9
	ADDL BP, BX
	ADDL $0xeaa127fa, CX
	ADDL R8, CX
	MOVL 12(DX), R8
	XORL SI, R9
	XORL BX, R9
	ADDL R9, CX
	ROLL $0x0b, CX
	MOVL BX, R9
	ADDL BX, CX
	ADDL $0xd4ef3085, SI
	ADDL R8, SI
	MOVL 24(DX), R8
	XORL BP, R9
	XORL CX, R9
	ADDL R9, SI
	ROLL $0x10, SI
	MOVL CX, R9
	ADDL CX, SI
	ADDL $0x04881d05, BP
	ADDL R8, BP
	MOVL 36(DX), R8
	XORL BX, R9
	XORL SI, R9
	ADDL R9, BP
	ROLL $0x17, BP
	MOVL SI, R9
	ADDL SI, BP
	ADDL $0xd9d4d039, BX
	ADDL R8, BX
	MOVL 48(DX), R8
	XORL CX, R9
	XORL BP, R9
	ADDL R9, BX
	ROLL $0x04, BX
	MOVL BP, R9
	ADDL BP, BX
	ADDL $0xe6db99e5, CX
	ADDL R8, CX
	MOVL 60(DX), R8
	XORL SI, R9
	XORL BX, R9
	ADDL R9, CX
	ROLL $0x0b, CX
	MOVL BX, R9
	ADDL BX, CX
	ADDL $0x1fa27cf8, SI
	ADDL R8, SI
	MOVL 8(DX), R8
	XORL BP, R9
	XORL CX, R9
	ADDL R9, SI
	ROLL $0x10, SI
	MOVL CX, R9
	ADDL CX, SI
	ADDL $0xc4ac5665, BP
	ADDL R8, BP
	MOVL (DX), R8
	XORL BX, R9
	XORL SI, R9
	ADDL R9, BP
	ROLL $0x17, BP
	MOVL SI, R9
	ADDL SI, BP

	// ROUND4
	MOVL DI, R9
	XORL CX, R9
	ADDL $0xf4292244, BX
	ADDL R8, BX
	ORL  BP, R9
	XORL SI, R9
	ADDL R9, BX
	MOVL 28(DX), R8
	MOVL DI, R9
	ROLL $0x06, BX
	XORL SI, R9
	ADDL BP, BX
	ADDL $0x432aff97, CX
	ADDL R8, CX
	ORL  BX, R9
	XORL BP, R9
	ADDL R9, CX
	MOVL 56(DX), R8
	MOVL DI, R9
	ROLL $0x0a, CX
	XORL BP, R9
	ADDL BX, CX
	ADDL $0xab9423a7, SI
	ADDL R8, SI
	ORL  CX, R9
	XORL BX, R9
	ADDL R9, SI
	MOVL 20(DX), R8
	MOVL DI, R9
	ROLL $0x0f, SI
	XORL BX, R9
	ADDL CX, SI
	ADDL $0xfc93a039, BP
	ADDL R8, BP
	ORL  SI, R9
	XORL CX, R9
	ADDL R9, BP
	MOVL 48(DX), R8
	MOVL DI, R9
	ROLL $0x15, BP
	XORL CX, R9
	ADDL SI, BP
	ADDL $0x655b59c3, BX
	ADDL R8, BX
	ORL  BP, R9
	XORL SI, R9
	ADDL R9, BX
	MOVL 12(DX), R8
	MOVL DI, R9
	ROLL $0x06, BX
	XORL SI, R9
	ADDL BP, BX
	ADDL $0x8f0ccc92, CX
	ADDL R8, CX
	ORL  BX, R9
	XORL BP, R9
	ADDL R9, CX
	MOVL 40(DX), R8
	MOVL DI, R9
	ROLL $0x0a, CX
	XORL BP, R9
	ADDL BX, CX
	ADDL $0xffeff47d, SI
	ADDL R8, SI
	ORL  CX, R9
	XORL BX, R9
	ADDL R9, SI
	MOVL 4(DX), R8
	MOVL DI, R9
	ROLL $0x0f, SI
	XORL BX, R9
	ADDL CX, SI
	ADDL $0x85845dd1, BP
	ADDL R8, BP
	ORL  SI, R9
	XORL CX, R9
	ADDL R9, BP
	MOVL 32(DX), R8
	MOVL DI, R9
	ROLL $0x15, BP
	XORL CX, R9
	ADDL SI, BP
	ADDL $0x6fa87e4f, BX
	ADDL R8, BX
	ORL  BP, R9
	XORL SI, R9
	ADDL R9, BX
	MOVL 60(DX), R8
	MOVL DI, R9
	ROLL $0x06, BX
	XORL SI, R9
	ADDL BP, BX
	ADDL $0xfe2ce6e0, CX
	ADDL R8, CX
	ORL  BX, R9
	XORL BP, R9
	ADDL R9, CX
	MOVL 24(DX), R8
	MOVL DI, R9
	ROLL $0x0a, CX
	XORL BP, R9
	ADDL BX, CX
	ADDL $0xa3014314, SI
	ADDL R8, SI
	ORL  CX, R9
	XORL BX, R9
	ADDL R9, SI
	MOVL 52(DX), R8
	MOVL DI, R9
	ROLL $0x0f, SI
	XORL BX, R9
	ADDL CX, SI
	ADDL $0x4e0811a1, BP
	ADDL R8, BP
	ORL  SI, R9
	XORL CX, R9
	ADDL R9, BP
	MOVL 16(DX), R8
	MOVL DI, R9
	ROLL $0x15, BP
	XORL CX, R9
	ADDL SI, BP
	ADDL $0xf7537e82, BX
	ADDL R8, BX
	ORL  BP, R9
	XORL SI, R9
	ADDL R9, BX
	MOVL 44(DX), R8
	MOVL DI, R9
	ROLL $0x06, BX
	XORL SI, R9
	ADDL BP, BX
	ADDL $0xbd3af235, CX
	ADDL R8, CX
	ORL  BX, R9
	XORL BP, R9
	ADDL R9, CX
	MOVL 8(DX), R8
	MOVL DI, R9
	ROLL $0x0a, CX
	XORL BP, R9
	ADDL BX, CX
	ADDL $0x2ad7d2bb, SI
	ADDL R8, SI
	ORL  CX, R9
	XORL BX, R9
	ADDL R9, SI
	MOVL 36(DX), R8
	MOVL DI, R9
	ROLL $0x0f, SI
	XORL BX, R9
	ADDL CX, SI
	ADDL $0xeb86d391, BP
	ADDL R8, BP
	ORL  SI, R9
	XORL CX, R9
	ADDL R9, BP
	ROLL $0x15, BP
	ADDL SI, BP
	ADDL R10, BX
	ADDL R11, BP
	ADDL R12, SI
	ADDL R13, CX

	// Prepare next loop
	ADDQ $0x40, DX
	CMPQ DX, AX
	JB   loop

	// Write output
	MOVQ dig+0(FP), AX
	MOVL BX, (AX)
	MOVL BP, 4(AX)
	MOVL SI, 8(AX)
	MOVL CX, 12(AX)

end:
	RET
