// Code generated by command: go run asm.go -out ../sha1cdblock_amd64.s -pkg sha1cd. DO NOT EDIT.

//go:build !noasm && gc && amd64 && !arm64

#include "textflag.h"

// func blockAMD64(dig *digest, p []byte, m1 []uint32, cs [][5]uint32)
TEXT ·blockAMD64(SB), NOSPLIT, $64-80
	MOVQ dig+0(FP), R8
	MOVQ p_base+8(FP), SI
	MOVQ p_len+16(FP), DX
	SHRQ $+6, DX
	SHLQ $+6, DX
	LEAQ (SI)(DX*1), DI

	// Load h0, h1, h2, h3, h4.
	MOVL (R8), AX
	MOVL 4(R8), BX
	MOVL 8(R8), CX
	MOVL 12(R8), DX
	MOVL 16(R8), BP

	// len(p) >= chunk
	CMPQ DI, SI
	JBE  end

loop:
	// Initialize registers a, b, c, d, e.
	MOVL AX, R9
	MOVL BX, R10
	MOVL CX, R11
	MOVL DX, R12
	MOVL BP, R13

	// ROUND1 (steps 0-15)
	// Load cs
	MOVQ cs_base+56(FP), R8
	MOVL R9, (R8)
	MOVL R10, 4(R8)
	MOVL R11, 8(R8)
	MOVL R12, 12(R8)
	MOVL R13, 16(R8)

	// ROUND1(0)
	// LOAD
	MOVL   (SI), DI
	BSWAPL DI
	MOVL   DI, (SP)

	// FUNC1
	MOVL R12, R14
	XORL R11, R14
	ANDL R10, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 1518500249(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL (SP), DI
	MOVL DI, (R8)

	// ROUND1(1)
	// LOAD
	MOVL   4(SI), DI
	BSWAPL DI
	MOVL   DI, 4(SP)

	// FUNC1
	MOVL R11, R14
	XORL R10, R14
	ANDL R9, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 1518500249(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 4(SP), DI
	MOVL DI, 4(R8)

	// ROUND1(2)
	// LOAD
	MOVL   8(SI), DI
	BSWAPL DI
	MOVL   DI, 8(SP)

	// FUNC1
	MOVL R10, R14
	XORL R9, R14
	ANDL R13, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 1518500249(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 8(SP), DI
	MOVL DI, 8(R8)

	// ROUND1(3)
	// LOAD
	MOVL   12(SI), DI
	BSWAPL DI
	MOVL   DI, 12(SP)

	// FUNC1
	MOVL R9, R14
	XORL R13, R14
	ANDL R12, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 1518500249(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 12(SP), DI
	MOVL DI, 12(R8)

	// ROUND1(4)
	// LOAD
	MOVL   16(SI), DI
	BSWAPL DI
	MOVL   DI, 16(SP)

	// FUNC1
	MOVL R13, R14
	XORL R12, R14
	ANDL R11, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 1518500249(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 16(SP), DI
	MOVL DI, 16(R8)

	// ROUND1(5)
	// LOAD
	MOVL   20(SI), DI
	BSWAPL DI
	MOVL   DI, 20(SP)

	// FUNC1
	MOVL R12, R14
	XORL R11, R14
	ANDL R10, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 1518500249(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 20(SP), DI
	MOVL DI, 20(R8)

	// ROUND1(6)
	// LOAD
	MOVL   24(SI), DI
	BSWAPL DI
	MOVL   DI, 24(SP)

	// FUNC1
	MOVL R11, R14
	XORL R10, R14
	ANDL R9, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 1518500249(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 24(SP), DI
	MOVL DI, 24(R8)

	// ROUND1(7)
	// LOAD
	MOVL   28(SI), DI
	BSWAPL DI
	MOVL   DI, 28(SP)

	// FUNC1
	MOVL R10, R14
	XORL R9, R14
	ANDL R13, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 1518500249(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 28(SP), DI
	MOVL DI, 28(R8)

	// ROUND1(8)
	// LOAD
	MOVL   32(SI), DI
	BSWAPL DI
	MOVL   DI, 32(SP)

	// FUNC1
	MOVL R9, R14
	XORL R13, R14
	ANDL R12, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 1518500249(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 32(SP), DI
	MOVL DI, 32(R8)

	// ROUND1(9)
	// LOAD
	MOVL   36(SI), DI
	BSWAPL DI
	MOVL   DI, 36(SP)

	// FUNC1
	MOVL R13, R14
	XORL R12, R14
	ANDL R11, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 1518500249(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 36(SP), DI
	MOVL DI, 36(R8)

	// ROUND1(10)
	// LOAD
	MOVL   40(SI), DI
	BSWAPL DI
	MOVL   DI, 40(SP)

	// FUNC1
	MOVL R12, R14
	XORL R11, R14
	ANDL R10, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 1518500249(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 40(SP), DI
	MOVL DI, 40(R8)

	// ROUND1(11)
	// LOAD
	MOVL   44(SI), DI
	BSWAPL DI
	MOVL   DI, 44(SP)

	// FUNC1
	MOVL R11, R14
	XORL R10, R14
	ANDL R9, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 1518500249(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 44(SP), DI
	MOVL DI, 44(R8)

	// ROUND1(12)
	// LOAD
	MOVL   48(SI), DI
	BSWAPL DI
	MOVL   DI, 48(SP)

	// FUNC1
	MOVL R10, R14
	XORL R9, R14
	ANDL R13, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 1518500249(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 48(SP), DI
	MOVL DI, 48(R8)

	// ROUND1(13)
	// LOAD
	MOVL   52(SI), DI
	BSWAPL DI
	MOVL   DI, 52(SP)

	// FUNC1
	MOVL R9, R14
	XORL R13, R14
	ANDL R12, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 1518500249(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 52(SP), DI
	MOVL DI, 52(R8)

	// ROUND1(14)
	// LOAD
	MOVL   56(SI), DI
	BSWAPL DI
	MOVL   DI, 56(SP)

	// FUNC1
	MOVL R13, R14
	XORL R12, R14
	ANDL R11, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 1518500249(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 56(SP), DI
	MOVL DI, 56(R8)

	// ROUND1(15)
	// LOAD
	MOVL   60(SI), DI
	BSWAPL DI
	MOVL   DI, 60(SP)

	// FUNC1
	MOVL R12, R14
	XORL R11, R14
	ANDL R10, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 1518500249(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 60(SP), DI
	MOVL DI, 60(R8)

	// ROUND1x (steps 16-19) - same as ROUND1 but with no data load.
	// ROUND1x(16)
	// SHUFFLE
	MOVL (SP), DI
	XORL 52(SP), DI
	XORL 32(SP), DI
	XORL 8(SP), DI
	ROLL $+1, DI
	MOVL DI, (SP)

	// FUNC1
	MOVL R11, R14
	XORL R10, R14
	ANDL R9, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 1518500249(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL (SP), DI
	MOVL DI, 64(R8)

	// ROUND1x(17)
	// SHUFFLE
	MOVL 4(SP), DI
	XORL 56(SP), DI
	XORL 36(SP), DI
	XORL 12(SP), DI
	ROLL $+1, DI
	MOVL DI, 4(SP)

	// FUNC1
	MOVL R10, R14
	XORL R9, R14
	ANDL R13, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 1518500249(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 4(SP), DI
	MOVL DI, 68(R8)

	// ROUND1x(18)
	// SHUFFLE
	MOVL 8(SP), DI
	XORL 60(SP), DI
	XORL 40(SP), DI
	XORL 16(SP), DI
	ROLL $+1, DI
	MOVL DI, 8(SP)

	// FUNC1
	MOVL R9, R14
	XORL R13, R14
	ANDL R12, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 1518500249(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 8(SP), DI
	MOVL DI, 72(R8)

	// ROUND1x(19)
	// SHUFFLE
	MOVL 12(SP), DI
	XORL (SP), DI
	XORL 44(SP), DI
	XORL 20(SP), DI
	ROLL $+1, DI
	MOVL DI, 12(SP)

	// FUNC1
	MOVL R13, R14
	XORL R12, R14
	ANDL R11, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 1518500249(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 12(SP), DI
	MOVL DI, 76(R8)

	// ROUND2 (steps 20-39)
	// ROUND2(20)
	// SHUFFLE
	MOVL 16(SP), DI
	XORL 4(SP), DI
	XORL 48(SP), DI
	XORL 24(SP), DI
	ROLL $+1, DI
	MOVL DI, 16(SP)

	// FUNC2
	MOVL R10, R14
	XORL R11, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 1859775393(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 16(SP), DI
	MOVL DI, 80(R8)

	// ROUND2(21)
	// SHUFFLE
	MOVL 20(SP), DI
	XORL 8(SP), DI
	XORL 52(SP), DI
	XORL 28(SP), DI
	ROLL $+1, DI
	MOVL DI, 20(SP)

	// FUNC2
	MOVL R9, R14
	XORL R10, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 1859775393(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 20(SP), DI
	MOVL DI, 84(R8)

	// ROUND2(22)
	// SHUFFLE
	MOVL 24(SP), DI
	XORL 12(SP), DI
	XORL 56(SP), DI
	XORL 32(SP), DI
	ROLL $+1, DI
	MOVL DI, 24(SP)

	// FUNC2
	MOVL R13, R14
	XORL R9, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 1859775393(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 24(SP), DI
	MOVL DI, 88(R8)

	// ROUND2(23)
	// SHUFFLE
	MOVL 28(SP), DI
	XORL 16(SP), DI
	XORL 60(SP), DI
	XORL 36(SP), DI
	ROLL $+1, DI
	MOVL DI, 28(SP)

	// FUNC2
	MOVL R12, R14
	XORL R13, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 1859775393(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 28(SP), DI
	MOVL DI, 92(R8)

	// ROUND2(24)
	// SHUFFLE
	MOVL 32(SP), DI
	XORL 20(SP), DI
	XORL (SP), DI
	XORL 40(SP), DI
	ROLL $+1, DI
	MOVL DI, 32(SP)

	// FUNC2
	MOVL R11, R14
	XORL R12, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 1859775393(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 32(SP), DI
	MOVL DI, 96(R8)

	// ROUND2(25)
	// SHUFFLE
	MOVL 36(SP), DI
	XORL 24(SP), DI
	XORL 4(SP), DI
	XORL 44(SP), DI
	ROLL $+1, DI
	MOVL DI, 36(SP)

	// FUNC2
	MOVL R10, R14
	XORL R11, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 1859775393(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 36(SP), DI
	MOVL DI, 100(R8)

	// ROUND2(26)
	// SHUFFLE
	MOVL 40(SP), DI
	XORL 28(SP), DI
	XORL 8(SP), DI
	XORL 48(SP), DI
	ROLL $+1, DI
	MOVL DI, 40(SP)

	// FUNC2
	MOVL R9, R14
	XORL R10, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 1859775393(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 40(SP), DI
	MOVL DI, 104(R8)

	// ROUND2(27)
	// SHUFFLE
	MOVL 44(SP), DI
	XORL 32(SP), DI
	XORL 12(SP), DI
	XORL 52(SP), DI
	ROLL $+1, DI
	MOVL DI, 44(SP)

	// FUNC2
	MOVL R13, R14
	XORL R9, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 1859775393(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 44(SP), DI
	MOVL DI, 108(R8)

	// ROUND2(28)
	// SHUFFLE
	MOVL 48(SP), DI
	XORL 36(SP), DI
	XORL 16(SP), DI
	XORL 56(SP), DI
	ROLL $+1, DI
	MOVL DI, 48(SP)

	// FUNC2
	MOVL R12, R14
	XORL R13, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 1859775393(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 48(SP), DI
	MOVL DI, 112(R8)

	// ROUND2(29)
	// SHUFFLE
	MOVL 52(SP), DI
	XORL 40(SP), DI
	XORL 20(SP), DI
	XORL 60(SP), DI
	ROLL $+1, DI
	MOVL DI, 52(SP)

	// FUNC2
	MOVL R11, R14
	XORL R12, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 1859775393(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 52(SP), DI
	MOVL DI, 116(R8)

	// ROUND2(30)
	// SHUFFLE
	MOVL 56(SP), DI
	XORL 44(SP), DI
	XORL 24(SP), DI
	XORL (SP), DI
	ROLL $+1, DI
	MOVL DI, 56(SP)

	// FUNC2
	MOVL R10, R14
	XORL R11, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 1859775393(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 56(SP), DI
	MOVL DI, 120(R8)

	// ROUND2(31)
	// SHUFFLE
	MOVL 60(SP), DI
	XORL 48(SP), DI
	XORL 28(SP), DI
	XORL 4(SP), DI
	ROLL $+1, DI
	MOVL DI, 60(SP)

	// FUNC2
	MOVL R9, R14
	XORL R10, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 1859775393(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 60(SP), DI
	MOVL DI, 124(R8)

	// ROUND2(32)
	// SHUFFLE
	MOVL (SP), DI
	XORL 52(SP), DI
	XORL 32(SP), DI
	XORL 8(SP), DI
	ROLL $+1, DI
	MOVL DI, (SP)

	// FUNC2
	MOVL R13, R14
	XORL R9, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 1859775393(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL (SP), DI
	MOVL DI, 128(R8)

	// ROUND2(33)
	// SHUFFLE
	MOVL 4(SP), DI
	XORL 56(SP), DI
	XORL 36(SP), DI
	XORL 12(SP), DI
	ROLL $+1, DI
	MOVL DI, 4(SP)

	// FUNC2
	MOVL R12, R14
	XORL R13, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 1859775393(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 4(SP), DI
	MOVL DI, 132(R8)

	// ROUND2(34)
	// SHUFFLE
	MOVL 8(SP), DI
	XORL 60(SP), DI
	XORL 40(SP), DI
	XORL 16(SP), DI
	ROLL $+1, DI
	MOVL DI, 8(SP)

	// FUNC2
	MOVL R11, R14
	XORL R12, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 1859775393(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 8(SP), DI
	MOVL DI, 136(R8)

	// ROUND2(35)
	// SHUFFLE
	MOVL 12(SP), DI
	XORL (SP), DI
	XORL 44(SP), DI
	XORL 20(SP), DI
	ROLL $+1, DI
	MOVL DI, 12(SP)

	// FUNC2
	MOVL R10, R14
	XORL R11, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 1859775393(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 12(SP), DI
	MOVL DI, 140(R8)

	// ROUND2(36)
	// SHUFFLE
	MOVL 16(SP), DI
	XORL 4(SP), DI
	XORL 48(SP), DI
	XORL 24(SP), DI
	ROLL $+1, DI
	MOVL DI, 16(SP)

	// FUNC2
	MOVL R9, R14
	XORL R10, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 1859775393(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 16(SP), DI
	MOVL DI, 144(R8)

	// ROUND2(37)
	// SHUFFLE
	MOVL 20(SP), DI
	XORL 8(SP), DI
	XORL 52(SP), DI
	XORL 28(SP), DI
	ROLL $+1, DI
	MOVL DI, 20(SP)

	// FUNC2
	MOVL R13, R14
	XORL R9, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 1859775393(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 20(SP), DI
	MOVL DI, 148(R8)

	// ROUND2(38)
	// SHUFFLE
	MOVL 24(SP), DI
	XORL 12(SP), DI
	XORL 56(SP), DI
	XORL 32(SP), DI
	ROLL $+1, DI
	MOVL DI, 24(SP)

	// FUNC2
	MOVL R12, R14
	XORL R13, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 1859775393(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 24(SP), DI
	MOVL DI, 152(R8)

	// ROUND2(39)
	// SHUFFLE
	MOVL 28(SP), DI
	XORL 16(SP), DI
	XORL 60(SP), DI
	XORL 36(SP), DI
	ROLL $+1, DI
	MOVL DI, 28(SP)

	// FUNC2
	MOVL R11, R14
	XORL R12, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 1859775393(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 28(SP), DI
	MOVL DI, 156(R8)

	// ROUND3 (steps 40-59)
	// ROUND3(40)
	// SHUFFLE
	MOVL 32(SP), DI
	XORL 20(SP), DI
	XORL (SP), DI
	XORL 40(SP), DI
	ROLL $+1, DI
	MOVL DI, 32(SP)

	// FUNC3
	MOVL R10, R8
	ORL  R11, R8
	ANDL R12, R8
	MOVL R10, R14
	ANDL R11, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 2400959708(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 32(SP), DI
	MOVL DI, 160(R8)

	// ROUND3(41)
	// SHUFFLE
	MOVL 36(SP), DI
	XORL 24(SP), DI
	XORL 4(SP), DI
	XORL 44(SP), DI
	ROLL $+1, DI
	MOVL DI, 36(SP)

	// FUNC3
	MOVL R9, R8
	ORL  R10, R8
	ANDL R11, R8
	MOVL R9, R14
	ANDL R10, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 2400959708(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 36(SP), DI
	MOVL DI, 164(R8)

	// ROUND3(42)
	// SHUFFLE
	MOVL 40(SP), DI
	XORL 28(SP), DI
	XORL 8(SP), DI
	XORL 48(SP), DI
	ROLL $+1, DI
	MOVL DI, 40(SP)

	// FUNC3
	MOVL R13, R8
	ORL  R9, R8
	ANDL R10, R8
	MOVL R13, R14
	ANDL R9, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 2400959708(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 40(SP), DI
	MOVL DI, 168(R8)

	// ROUND3(43)
	// SHUFFLE
	MOVL 44(SP), DI
	XORL 32(SP), DI
	XORL 12(SP), DI
	XORL 52(SP), DI
	ROLL $+1, DI
	MOVL DI, 44(SP)

	// FUNC3
	MOVL R12, R8
	ORL  R13, R8
	ANDL R9, R8
	MOVL R12, R14
	ANDL R13, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 2400959708(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 44(SP), DI
	MOVL DI, 172(R8)

	// ROUND3(44)
	// SHUFFLE
	MOVL 48(SP), DI
	XORL 36(SP), DI
	XORL 16(SP), DI
	XORL 56(SP), DI
	ROLL $+1, DI
	MOVL DI, 48(SP)

	// FUNC3
	MOVL R11, R8
	ORL  R12, R8
	ANDL R13, R8
	MOVL R11, R14
	ANDL R12, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 2400959708(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 48(SP), DI
	MOVL DI, 176(R8)

	// ROUND3(45)
	// SHUFFLE
	MOVL 52(SP), DI
	XORL 40(SP), DI
	XORL 20(SP), DI
	XORL 60(SP), DI
	ROLL $+1, DI
	MOVL DI, 52(SP)

	// FUNC3
	MOVL R10, R8
	ORL  R11, R8
	ANDL R12, R8
	MOVL R10, R14
	ANDL R11, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 2400959708(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 52(SP), DI
	MOVL DI, 180(R8)

	// ROUND3(46)
	// SHUFFLE
	MOVL 56(SP), DI
	XORL 44(SP), DI
	XORL 24(SP), DI
	XORL (SP), DI
	ROLL $+1, DI
	MOVL DI, 56(SP)

	// FUNC3
	MOVL R9, R8
	ORL  R10, R8
	ANDL R11, R8
	MOVL R9, R14
	ANDL R10, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 2400959708(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 56(SP), DI
	MOVL DI, 184(R8)

	// ROUND3(47)
	// SHUFFLE
	MOVL 60(SP), DI
	XORL 48(SP), DI
	XORL 28(SP), DI
	XORL 4(SP), DI
	ROLL $+1, DI
	MOVL DI, 60(SP)

	// FUNC3
	MOVL R13, R8
	ORL  R9, R8
	ANDL R10, R8
	MOVL R13, R14
	ANDL R9, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 2400959708(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 60(SP), DI
	MOVL DI, 188(R8)

	// ROUND3(48)
	// SHUFFLE
	MOVL (SP), DI
	XORL 52(SP), DI
	XORL 32(SP), DI
	XORL 8(SP), DI
	ROLL $+1, DI
	MOVL DI, (SP)

	// FUNC3
	MOVL R12, R8
	ORL  R13, R8
	ANDL R9, R8
	MOVL R12, R14
	ANDL R13, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 2400959708(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL (SP), DI
	MOVL DI, 192(R8)

	// ROUND3(49)
	// SHUFFLE
	MOVL 4(SP), DI
	XORL 56(SP), DI
	XORL 36(SP), DI
	XORL 12(SP), DI
	ROLL $+1, DI
	MOVL DI, 4(SP)

	// FUNC3
	MOVL R11, R8
	ORL  R12, R8
	ANDL R13, R8
	MOVL R11, R14
	ANDL R12, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 2400959708(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 4(SP), DI
	MOVL DI, 196(R8)

	// ROUND3(50)
	// SHUFFLE
	MOVL 8(SP), DI
	XORL 60(SP), DI
	XORL 40(SP), DI
	XORL 16(SP), DI
	ROLL $+1, DI
	MOVL DI, 8(SP)

	// FUNC3
	MOVL R10, R8
	ORL  R11, R8
	ANDL R12, R8
	MOVL R10, R14
	ANDL R11, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 2400959708(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 8(SP), DI
	MOVL DI, 200(R8)

	// ROUND3(51)
	// SHUFFLE
	MOVL 12(SP), DI
	XORL (SP), DI
	XORL 44(SP), DI
	XORL 20(SP), DI
	ROLL $+1, DI
	MOVL DI, 12(SP)

	// FUNC3
	MOVL R9, R8
	ORL  R10, R8
	ANDL R11, R8
	MOVL R9, R14
	ANDL R10, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 2400959708(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 12(SP), DI
	MOVL DI, 204(R8)

	// ROUND3(52)
	// SHUFFLE
	MOVL 16(SP), DI
	XORL 4(SP), DI
	XORL 48(SP), DI
	XORL 24(SP), DI
	ROLL $+1, DI
	MOVL DI, 16(SP)

	// FUNC3
	MOVL R13, R8
	ORL  R9, R8
	ANDL R10, R8
	MOVL R13, R14
	ANDL R9, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 2400959708(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 16(SP), DI
	MOVL DI, 208(R8)

	// ROUND3(53)
	// SHUFFLE
	MOVL 20(SP), DI
	XORL 8(SP), DI
	XORL 52(SP), DI
	XORL 28(SP), DI
	ROLL $+1, DI
	MOVL DI, 20(SP)

	// FUNC3
	MOVL R12, R8
	ORL  R13, R8
	ANDL R9, R8
	MOVL R12, R14
	ANDL R13, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 2400959708(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 20(SP), DI
	MOVL DI, 212(R8)

	// ROUND3(54)
	// SHUFFLE
	MOVL 24(SP), DI
	XORL 12(SP), DI
	XORL 56(SP), DI
	XORL 32(SP), DI
	ROLL $+1, DI
	MOVL DI, 24(SP)

	// FUNC3
	MOVL R11, R8
	ORL  R12, R8
	ANDL R13, R8
	MOVL R11, R14
	ANDL R12, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 2400959708(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 24(SP), DI
	MOVL DI, 216(R8)

	// ROUND3(55)
	// SHUFFLE
	MOVL 28(SP), DI
	XORL 16(SP), DI
	XORL 60(SP), DI
	XORL 36(SP), DI
	ROLL $+1, DI
	MOVL DI, 28(SP)

	// FUNC3
	MOVL R10, R8
	ORL  R11, R8
	ANDL R12, R8
	MOVL R10, R14
	ANDL R11, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 2400959708(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 28(SP), DI
	MOVL DI, 220(R8)

	// ROUND3(56)
	// SHUFFLE
	MOVL 32(SP), DI
	XORL 20(SP), DI
	XORL (SP), DI
	XORL 40(SP), DI
	ROLL $+1, DI
	MOVL DI, 32(SP)

	// FUNC3
	MOVL R9, R8
	ORL  R10, R8
	ANDL R11, R8
	MOVL R9, R14
	ANDL R10, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 2400959708(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 32(SP), DI
	MOVL DI, 224(R8)

	// ROUND3(57)
	// SHUFFLE
	MOVL 36(SP), DI
	XORL 24(SP), DI
	XORL 4(SP), DI
	XORL 44(SP), DI
	ROLL $+1, DI
	MOVL DI, 36(SP)

	// FUNC3
	MOVL R13, R8
	ORL  R9, R8
	ANDL R10, R8
	MOVL R13, R14
	ANDL R9, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 2400959708(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 36(SP), DI
	MOVL DI, 228(R8)

	// Load cs
	MOVQ cs_base+56(FP), R8
	MOVL R11, 20(R8)
	MOVL R12, 24(R8)
	MOVL R13, 28(R8)
	MOVL R9, 32(R8)
	MOVL R10, 36(R8)

	// ROUND3(58)
	// SHUFFLE
	MOVL 40(SP), DI
	XORL 28(SP), DI
	XORL 8(SP), DI
	XORL 48(SP), DI
	ROLL $+1, DI
	MOVL DI, 40(SP)

	// FUNC3
	MOVL R12, R8
	ORL  R13, R8
	ANDL R9, R8
	MOVL R12, R14
	ANDL R13, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 2400959708(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 40(SP), DI
	MOVL DI, 232(R8)

	// ROUND3(59)
	// SHUFFLE
	MOVL 44(SP), DI
	XORL 32(SP), DI
	XORL 12(SP), DI
	XORL 52(SP), DI
	ROLL $+1, DI
	MOVL DI, 44(SP)

	// FUNC3
	MOVL R11, R8
	ORL  R12, R8
	ANDL R13, R8
	MOVL R11, R14
	ANDL R12, R14
	ORL  R8, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 2400959708(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 44(SP), DI
	MOVL DI, 236(R8)

	// ROUND4 (steps 60-79)
	// ROUND4(60)
	// SHUFFLE
	MOVL 48(SP), DI
	XORL 36(SP), DI
	XORL 16(SP), DI
	XORL 56(SP), DI
	ROLL $+1, DI
	MOVL DI, 48(SP)

	// FUNC2
	MOVL R10, R14
	XORL R11, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 3395469782(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 48(SP), DI
	MOVL DI, 240(R8)

	// ROUND4(61)
	// SHUFFLE
	MOVL 52(SP), DI
	XORL 40(SP), DI
	XORL 20(SP), DI
	XORL 60(SP), DI
	ROLL $+1, DI
	MOVL DI, 52(SP)

	// FUNC2
	MOVL R9, R14
	XORL R10, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 3395469782(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 52(SP), DI
	MOVL DI, 244(R8)

	// ROUND4(62)
	// SHUFFLE
	MOVL 56(SP), DI
	XORL 44(SP), DI
	XORL 24(SP), DI
	XORL (SP), DI
	ROLL $+1, DI
	MOVL DI, 56(SP)

	// FUNC2
	MOVL R13, R14
	XORL R9, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 3395469782(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 56(SP), DI
	MOVL DI, 248(R8)

	// ROUND4(63)
	// SHUFFLE
	MOVL 60(SP), DI
	XORL 48(SP), DI
	XORL 28(SP), DI
	XORL 4(SP), DI
	ROLL $+1, DI
	MOVL DI, 60(SP)

	// FUNC2
	MOVL R12, R14
	XORL R13, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 3395469782(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 60(SP), DI
	MOVL DI, 252(R8)

	// ROUND4(64)
	// SHUFFLE
	MOVL (SP), DI
	XORL 52(SP), DI
	XORL 32(SP), DI
	XORL 8(SP), DI
	ROLL $+1, DI
	MOVL DI, (SP)

	// FUNC2
	MOVL R11, R14
	XORL R12, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 3395469782(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL (SP), DI
	MOVL DI, 256(R8)

	// Load cs
	MOVQ cs_base+56(FP), R8
	MOVL R9, 40(R8)
	MOVL R10, 44(R8)
	MOVL R11, 48(R8)
	MOVL R12, 52(R8)
	MOVL R13, 56(R8)

	// ROUND4(65)
	// SHUFFLE
	MOVL 4(SP), DI
	XORL 56(SP), DI
	XORL 36(SP), DI
	XORL 12(SP), DI
	ROLL $+1, DI
	MOVL DI, 4(SP)

	// FUNC2
	MOVL R10, R14
	XORL R11, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 3395469782(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 4(SP), DI
	MOVL DI, 260(R8)

	// ROUND4(66)
	// SHUFFLE
	MOVL 8(SP), DI
	XORL 60(SP), DI
	XORL 40(SP), DI
	XORL 16(SP), DI
	ROLL $+1, DI
	MOVL DI, 8(SP)

	// FUNC2
	MOVL R9, R14
	XORL R10, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 3395469782(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 8(SP), DI
	MOVL DI, 264(R8)

	// ROUND4(67)
	// SHUFFLE
	MOVL 12(SP), DI
	XORL (SP), DI
	XORL 44(SP), DI
	XORL 20(SP), DI
	ROLL $+1, DI
	MOVL DI, 12(SP)

	// FUNC2
	MOVL R13, R14
	XORL R9, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 3395469782(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 12(SP), DI
	MOVL DI, 268(R8)

	// ROUND4(68)
	// SHUFFLE
	MOVL 16(SP), DI
	XORL 4(SP), DI
	XORL 48(SP), DI
	XORL 24(SP), DI
	ROLL $+1, DI
	MOVL DI, 16(SP)

	// FUNC2
	MOVL R12, R14
	XORL R13, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 3395469782(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 16(SP), DI
	MOVL DI, 272(R8)

	// ROUND4(69)
	// SHUFFLE
	MOVL 20(SP), DI
	XORL 8(SP), DI
	XORL 52(SP), DI
	XORL 28(SP), DI
	ROLL $+1, DI
	MOVL DI, 20(SP)

	// FUNC2
	MOVL R11, R14
	XORL R12, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 3395469782(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 20(SP), DI
	MOVL DI, 276(R8)

	// ROUND4(70)
	// SHUFFLE
	MOVL 24(SP), DI
	XORL 12(SP), DI
	XORL 56(SP), DI
	XORL 32(SP), DI
	ROLL $+1, DI
	MOVL DI, 24(SP)

	// FUNC2
	MOVL R10, R14
	XORL R11, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 3395469782(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 24(SP), DI
	MOVL DI, 280(R8)

	// ROUND4(71)
	// SHUFFLE
	MOVL 28(SP), DI
	XORL 16(SP), DI
	XORL 60(SP), DI
	XORL 36(SP), DI
	ROLL $+1, DI
	MOVL DI, 28(SP)

	// FUNC2
	MOVL R9, R14
	XORL R10, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 3395469782(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 28(SP), DI
	MOVL DI, 284(R8)

	// ROUND4(72)
	// SHUFFLE
	MOVL 32(SP), DI
	XORL 20(SP), DI
	XORL (SP), DI
	XORL 40(SP), DI
	ROLL $+1, DI
	MOVL DI, 32(SP)

	// FUNC2
	MOVL R13, R14
	XORL R9, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 3395469782(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 32(SP), DI
	MOVL DI, 288(R8)

	// ROUND4(73)
	// SHUFFLE
	MOVL 36(SP), DI
	XORL 24(SP), DI
	XORL 4(SP), DI
	XORL 44(SP), DI
	ROLL $+1, DI
	MOVL DI, 36(SP)

	// FUNC2
	MOVL R12, R14
	XORL R13, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 3395469782(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 36(SP), DI
	MOVL DI, 292(R8)

	// ROUND4(74)
	// SHUFFLE
	MOVL 40(SP), DI
	XORL 28(SP), DI
	XORL 8(SP), DI
	XORL 48(SP), DI
	ROLL $+1, DI
	MOVL DI, 40(SP)

	// FUNC2
	MOVL R11, R14
	XORL R12, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 3395469782(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 40(SP), DI
	MOVL DI, 296(R8)

	// ROUND4(75)
	// SHUFFLE
	MOVL 44(SP), DI
	XORL 32(SP), DI
	XORL 12(SP), DI
	XORL 52(SP), DI
	ROLL $+1, DI
	MOVL DI, 44(SP)

	// FUNC2
	MOVL R10, R14
	XORL R11, R14
	XORL R12, R14

	// MIX
	ROLL $+30, R10
	ADDL R14, R13
	MOVL R9, R8
	ROLL $+5, R8
	LEAL 3395469782(R13)(DI*1), R13
	ADDL R8, R13

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 44(SP), DI
	MOVL DI, 300(R8)

	// ROUND4(76)
	// SHUFFLE
	MOVL 48(SP), DI
	XORL 36(SP), DI
	XORL 16(SP), DI
	XORL 56(SP), DI
	ROLL $+1, DI
	MOVL DI, 48(SP)

	// FUNC2
	MOVL R9, R14
	XORL R10, R14
	XORL R11, R14

	// MIX
	ROLL $+30, R9
	ADDL R14, R12
	MOVL R13, R8
	ROLL $+5, R8
	LEAL 3395469782(R12)(DI*1), R12
	ADDL R8, R12

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 48(SP), DI
	MOVL DI, 304(R8)

	// ROUND4(77)
	// SHUFFLE
	MOVL 52(SP), DI
	XORL 40(SP), DI
	XORL 20(SP), DI
	XORL 60(SP), DI
	ROLL $+1, DI
	MOVL DI, 52(SP)

	// FUNC2
	MOVL R13, R14
	XORL R9, R14
	XORL R10, R14

	// MIX
	ROLL $+30, R13
	ADDL R14, R11
	MOVL R12, R8
	ROLL $+5, R8
	LEAL 3395469782(R11)(DI*1), R11
	ADDL R8, R11

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 52(SP), DI
	MOVL DI, 308(R8)

	// ROUND4(78)
	// SHUFFLE
	MOVL 56(SP), DI
	XORL 44(SP), DI
	XORL 24(SP), DI
	XORL (SP), DI
	ROLL $+1, DI
	MOVL DI, 56(SP)

	// FUNC2
	MOVL R12, R14
	XORL R13, R14
	XORL R9, R14

	// MIX
	ROLL $+30, R12
	ADDL R14, R10
	MOVL R11, R8
	ROLL $+5, R8
	LEAL 3395469782(R10)(DI*1), R10
	ADDL R8, R10

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 56(SP), DI
	MOVL DI, 312(R8)

	// ROUND4(79)
	// SHUFFLE
	MOVL 60(SP), DI
	XORL 48(SP), DI
	XORL 28(SP), DI
	XORL 4(SP), DI
	ROLL $+1, DI
	MOVL DI, 60(SP)

	// FUNC2
	MOVL R11, R14
	XORL R12, R14
	XORL R13, R14

	// MIX
	ROLL $+30, R11
	ADDL R14, R9
	MOVL R10, R8
	ROLL $+5, R8
	LEAL 3395469782(R9)(DI*1), R9
	ADDL R8, R9

	// Load m1
	MOVQ m1_base+32(FP), R8
	MOVL 60(SP), DI
	MOVL DI, 316(R8)

	// Add registers to temp hash.
	ADDL R9, AX
	ADDL R10, BX
	ADDL R11, CX
	ADDL R12, DX
	ADDL R13, BP
	ADDQ $+64, SI
	JB   loop

end:
	MOVQ dig+0(FP), DI
	MOVL AX, (DI)
	MOVL BX, 4(DI)
	MOVL CX, 8(DI)
	MOVL DX, 12(DI)
	MOVL BP, 16(DI)
	RET
