// Code generated by command: go run asm.go -out fp_amd64.s -stubs fp_stub.go -pkg farm. DO NOT EDIT.

//go:build amd64 && !purego

#include "textflag.h"

// func Fingerprint64(s []byte) uint64
TEXT ·Fingerprint64(SB), NOSPLIT, $0-32
	MOVQ  s_base+0(FP), CX
	MOVQ  s_len+8(FP), AX
	CMPQ  AX, $0x10
	JG    check32
	CMPQ  AX, $0x08
	JL    check4
	MOVQ  (CX), DX
	MOVQ  AX, BX
	SUBQ  $0x08, BX
	ADDQ  CX, BX
	MOVQ  (BX), CX
	MOVQ  $0x9ae16a3b2f90404f, BX
	ADDQ  BX, DX
	SHLQ  $0x01, AX
	ADDQ  BX, AX
	MOVQ  CX, BX
	RORQ  $0x25, BX
	IMULQ AX, BX
	ADDQ  DX, BX
	RORQ  $0x19, DX
	ADDQ  CX, DX
	IMULQ AX, DX
	XORQ  DX, BX
	IMULQ AX, BX
	MOVQ  BX, CX
	SHRQ  $0x2f, CX
	XORQ  BX, CX
	XORQ  CX, DX
	IMULQ AX, DX
	MOVQ  DX, CX
	SHRQ  $0x2f, CX
	XORQ  DX, CX
	IMULQ AX, CX
	MOVQ  CX, ret+24(FP)
	RET

check4:
	CMPQ  AX, $0x04
	JL    check0
	MOVQ  $0x9ae16a3b2f90404f, DX
	MOVQ  AX, BX
	SHLQ  $0x01, BX
	ADDQ  DX, BX
	MOVL  (CX), DX
	SHLQ  $0x03, DX
	ADDQ  AX, DX
	SUBQ  $0x04, AX
	ADDQ  AX, CX
	MOVL  (CX), AX
	XORQ  AX, DX
	IMULQ BX, DX
	MOVQ  DX, CX
	SHRQ  $0x2f, CX
	XORQ  DX, CX
	XORQ  CX, AX
	IMULQ BX, AX
	MOVQ  AX, CX
	SHRQ  $0x2f, CX
	XORQ  AX, CX
	IMULQ BX, CX
	MOVQ  CX, ret+24(FP)
	RET

check0:
	TESTQ   AX, AX
	JZ      empty
	MOVBQZX (CX), DX
	MOVQ    AX, BX
	SHRQ    $0x01, BX
	ADDQ    CX, BX
	MOVBQZX (BX), SI
	MOVQ    AX, BX
	SUBQ    $0x01, BX
	ADDQ    CX, BX
	MOVBQZX (BX), CX
	SHLQ    $0x08, SI
	ADDQ    SI, DX
	SHLQ    $0x02, CX
	ADDQ    CX, AX
	MOVQ    $0xc3a5c85c97cb3127, CX
	IMULQ   CX, AX
	MOVQ    $0x9ae16a3b2f90404f, CX
	IMULQ   CX, DX
	XORQ    DX, AX
	MOVQ    AX, DX
	SHRQ    $0x2f, DX
	XORQ    AX, DX
	IMULQ   CX, DX
	MOVQ    DX, ret+24(FP)
	RET

empty:
	MOVQ $0x9ae16a3b2f90404f, AX
	MOVQ AX, ret+24(FP)
	RET

check32:
	CMPQ  AX, $0x20
	JG    check64
	MOVQ  AX, DX
	SHLQ  $0x01, DX
	MOVQ  $0x9ae16a3b2f90404f, BX
	ADDQ  BX, DX
	MOVQ  (CX), SI
	MOVQ  $0xb492b66fbe98f273, DI
	IMULQ DI, SI
	MOVQ  8(CX), DI
	SUBQ  $0x10, AX
	ADDQ  CX, AX
	MOVQ  8(AX), CX
	IMULQ DX, CX
	MOVQ  (AX), AX
	IMULQ BX, AX
	MOVQ  SI, R8
	ADDQ  DI, R8
	RORQ  $0x2b, R8
	ADDQ  AX, R8
	MOVQ  CX, AX
	RORQ  $0x1e, AX
	ADDQ  AX, R8
	ADDQ  CX, SI
	ADDQ  BX, DI
	RORQ  $0x12, DI
	ADDQ  DI, SI
	XORQ  SI, R8
	IMULQ DX, R8
	MOVQ  R8, AX
	SHRQ  $0x2f, AX
	XORQ  R8, AX
	XORQ  AX, SI
	IMULQ DX, SI
	MOVQ  SI, AX
	SHRQ  $0x2f, AX
	XORQ  SI, AX
	IMULQ DX, AX
	MOVQ  AX, ret+24(FP)
	RET

check64:
	CMPQ  AX, $0x40
	JG    long
	MOVQ  AX, DX
	SHLQ  $0x01, DX
	MOVQ  $0x9ae16a3b2f90404f, BX
	ADDQ  BX, DX
	MOVQ  (CX), SI
	IMULQ BX, SI
	MOVQ  8(CX), DI
	MOVQ  AX, R8
	SUBQ  $0x10, R8
	ADDQ  CX, R8
	MOVQ  8(R8), R9
	IMULQ DX, R9
	MOVQ  (R8), R8
	IMULQ BX, R8
	MOVQ  SI, R10
	ADDQ  DI, R10
	RORQ  $0x2b, R10
	ADDQ  R8, R10
	MOVQ  R9, R8
	RORQ  $0x1e, R8
	ADDQ  R8, R10
	ADDQ  SI, R9
	ADDQ  BX, DI
	RORQ  $0x12, DI
	ADDQ  DI, R9
	MOVQ  R10, BX
	XORQ  R9, BX
	IMULQ DX, BX
	MOVQ  BX, DI
	SHRQ  $0x2f, DI
	XORQ  BX, DI
	XORQ  DI, R9
	IMULQ DX, R9
	MOVQ  R9, BX
	SHRQ  $0x2f, BX
	XORQ  R9, BX
	IMULQ DX, BX
	MOVQ  16(CX), DI
	IMULQ DX, DI
	MOVQ  24(CX), R8
	SUBQ  $0x20, AX
	ADDQ  CX, AX
	MOVQ  (AX), CX
	ADDQ  R10, CX
	IMULQ DX, CX
	MOVQ  8(AX), AX
	ADDQ  BX, AX
	IMULQ DX, AX
	MOVQ  DI, BX
	ADDQ  R8, BX
	RORQ  $0x2b, BX
	ADDQ  AX, BX
	MOVQ  CX, AX
	RORQ  $0x1e, AX
	ADDQ  AX, BX
	ADDQ  CX, DI
	ADDQ  SI, R8
	RORQ  $0x12, R8
	ADDQ  R8, DI
	XORQ  DI, BX
	IMULQ DX, BX
	MOVQ  BX, AX
	SHRQ  $0x2f, AX
	XORQ  BX, AX
	XORQ  AX, DI
	IMULQ DX, DI
	MOVQ  DI, AX
	SHRQ  $0x2f, AX
	XORQ  DI, AX
	IMULQ DX, AX
	MOVQ  AX, ret+24(FP)
	RET

long:
	XORQ DX, DX
	XORQ BX, BX
	XORQ SI, SI
	XORQ DI, DI
	MOVQ $0x01529cba0ca458ff, R8
	ADDQ (CX), R8
	MOVQ $0x226bb95b4e64b6d4, R9
	MOVQ $0x134a747f856d0526, R10
	MOVQ AX, R11
	SUBQ $0x01, R11
	MOVQ $0xffffffffffffffc0, R12
	ANDQ R12, R11
	MOVQ AX, R12
	SUBQ $0x01, R12
	ANDQ $0x3f, R12
	SUBQ $0x3f, R12
	ADDQ R11, R12
	MOVQ R12, R11
	ADDQ CX, R11
	MOVQ AX, R12

loop:
	MOVQ  $0xb492b66fbe98f273, R13
	ADDQ  R9, R8
	ADDQ  DX, R8
	ADDQ  8(CX), R8
	RORQ  $0x25, R8
	IMULQ R13, R8
	ADDQ  BX, R9
	ADDQ  48(CX), R9
	RORQ  $0x2a, R9
	IMULQ R13, R9
	XORQ  DI, R8
	ADDQ  DX, R9
	ADDQ  40(CX), R9
	ADDQ  SI, R10
	RORQ  $0x21, R10
	IMULQ R13, R10
	IMULQ R13, BX
	MOVQ  R8, DX
	ADDQ  SI, DX
	ADDQ  (CX), BX
	ADDQ  BX, DX
	ADDQ  24(CX), DX
	RORQ  $0x15, DX
	MOVQ  BX, SI
	ADDQ  8(CX), BX
	ADDQ  16(CX), BX
	MOVQ  BX, R14
	RORQ  $0x2c, R14
	ADDQ  R14, DX
	ADDQ  24(CX), BX
	ADDQ  SI, DX
	XCHGQ BX, DX
	ADDQ  R10, DI
	MOVQ  R9, SI
	ADDQ  16(CX), SI
	ADDQ  32(CX), DI
	ADDQ  DI, SI
	ADDQ  56(CX), SI
	RORQ  $0x15, SI
	MOVQ  DI, R14
	ADDQ  40(CX), DI
	ADDQ  48(CX), DI
	MOVQ  DI, R15
	RORQ  $0x2c, R15
	ADDQ  R15, SI
	ADDQ  56(CX), DI
	ADDQ  R14, SI
	XCHGQ DI, SI
	XCHGQ R10, R8
	ADDQ  $0x40, CX
	SUBQ  $0x40, R12
	CMPQ  R12, $0x40
	JG    loop
	MOVQ  R11, CX
	MOVQ  R10, R12
	ANDQ  $0xff, R12
	SHLQ  $0x01, R12
	ADDQ  R13, R12
	MOVQ  R11, CX
	SUBQ  $0x01, AX
	ANDQ  $0x3f, AX
	ADDQ  AX, SI
	ADDQ  SI, DX
	ADDQ  DX, SI
	ADDQ  R9, R8
	ADDQ  DX, R8
	ADDQ  8(CX), R8
	RORQ  $0x25, R8
	IMULQ R12, R8
	ADDQ  BX, R9
	ADDQ  48(CX), R9
	RORQ  $0x2a, R9
	IMULQ R12, R9
	MOVQ  $0x00000009, AX
	IMULQ DI, AX
	XORQ  AX, R8
	MOVQ  $0x00000009, AX
	IMULQ DX, AX
	ADDQ  AX, R9
	ADDQ  40(CX), R9
	ADDQ  SI, R10
	RORQ  $0x21, R10
	IMULQ R12, R10
	IMULQ R12, BX
	MOVQ  R8, DX
	ADDQ  SI, DX
	ADDQ  (CX), BX
	ADDQ  BX, DX
	ADDQ  24(CX), DX
	RORQ  $0x15, DX
	MOVQ  BX, AX
	ADDQ  8(CX), BX
	ADDQ  16(CX), BX
	MOVQ  BX, SI
	RORQ  $0x2c, SI
	ADDQ  SI, DX
	ADDQ  24(CX), BX
	ADDQ  AX, DX
	XCHGQ BX, DX
	ADDQ  R10, DI
	MOVQ  R9, SI
	ADDQ  16(CX), SI
	ADDQ  32(CX), DI
	ADDQ  DI, SI
	ADDQ  56(CX), SI
	RORQ  $0x15, SI
	MOVQ  DI, AX
	ADDQ  40(CX), DI
	ADDQ  48(CX), DI
	MOVQ  DI, R11
	RORQ  $0x2c, R11
	ADDQ  R11, SI
	ADDQ  56(CX), DI
	ADDQ  AX, SI
	XCHGQ DI, SI
	XCHGQ R10, R8
	XORQ  SI, DX
	IMULQ R12, DX
	MOVQ  DX, AX
	SHRQ  $0x2f, AX
	XORQ  DX, AX
	XORQ  AX, SI
	IMULQ R12, SI
	MOVQ  SI, AX
	SHRQ  $0x2f, AX
	XORQ  SI, AX
	IMULQ R12, AX
	ADDQ  R10, AX
	MOVQ  R9, CX
	SHRQ  $0x2f, CX
	XORQ  R9, CX
	MOVQ  $0xc3a5c85c97cb3127, DX
	IMULQ DX, CX
	ADDQ  CX, AX
	XORQ  DI, BX
	IMULQ R12, BX
	MOVQ  BX, CX
	SHRQ  $0x2f, CX
	XORQ  BX, CX
	XORQ  CX, DI
	IMULQ R12, DI
	MOVQ  DI, CX
	SHRQ  $0x2f, CX
	XORQ  DI, CX
	IMULQ R12, CX
	ADDQ  R8, CX
	XORQ  CX, AX
	IMULQ R12, AX
	MOVQ  AX, DX
	SHRQ  $0x2f, DX
	XORQ  AX, DX
	XORQ  DX, CX
	IMULQ R12, CX
	MOVQ  CX, AX
	SHRQ  $0x2f, AX
	XORQ  CX, AX
	IMULQ R12, AX
	MOVQ  AX, ret+24(FP)
	RET

// func Fingerprint32(s []byte) uint32
// Requires: MMX+
TEXT ·Fingerprint32(SB), NOSPLIT, $0-28
	MOVQ    s_base+0(FP), AX
	MOVQ    s_len+8(FP), CX
	CMPQ    CX, $0x18
	JG      long
	CMPQ    CX, $0x0c
	JG      hash_13_24
	CMPQ    CX, $0x04
	JG      hash_5_12
	XORL    DX, DX
	MOVL    $0x00000009, BX
	TESTQ   CX, CX
	JZ      done
	MOVQ    CX, SI
	MOVL    $0xcc9e2d51, R8
	IMULL   R8, DX
	MOVBLSX (AX), DI
	ADDL    DI, DX
	XORL    DX, BX
	SUBQ    $0x01, SI
	TESTQ   SI, SI
	JZ      done
	IMULL   R8, DX
	MOVBLSX 1(AX), DI
	ADDL    DI, DX
	XORL    DX, BX
	SUBQ    $0x01, SI
	TESTQ   SI, SI
	JZ      done
	IMULL   R8, DX
	MOVBLSX 2(AX), DI
	ADDL    DI, DX
	XORL    DX, BX
	SUBQ    $0x01, SI
	TESTQ   SI, SI
	JZ      done
	IMULL   R8, DX
	MOVBLSX 3(AX), DI
	ADDL    DI, DX
	XORL    DX, BX
	SUBQ    $0x01, SI
	TESTQ   SI, SI
	JZ      done

done:
	MOVL   CX, AX
	IMUL3L $0xcc9e2d51, AX, AX
	RORL   $0x11, AX
	IMUL3L $0x1b873593, AX, AX
	XORL   AX, BX
	RORL   $0x13, BX
	LEAL   (BX)(BX*4), AX
	LEAL   3864292196(AX), BX
	IMUL3L $0xcc9e2d51, DX, DX
	RORL   $0x11, DX
	IMUL3L $0x1b873593, DX, DX
	XORL   DX, BX
	RORL   $0x13, BX
	LEAL   (BX)(BX*4), DX
	LEAL   3864292196(DX), BX
	MOVL   BX, AX
	SHRL   $0x10, AX
	XORL   AX, BX
	MOVL   $0x85ebca6b, AX
	IMULL  AX, BX
	MOVL   BX, AX
	SHRL   $0x0d, AX
	XORL   AX, BX
	MOVL   $0xc2b2ae35, AX
	IMULL  AX, BX
	MOVL   BX, AX
	SHRL   $0x10, AX
	XORL   AX, BX
	MOVL   BX, ret+24(FP)
	RET

hash_5_12:
	MOVL   CX, DX
	MOVL   DX, BX
	SHLL   $0x02, BX
	ADDL   DX, BX
	MOVL   $0x00000009, SI
	MOVL   BX, DI
	ADDL   (AX), DX
	MOVQ   CX, R8
	SUBQ   $0x04, R8
	ADDQ   AX, R8
	ADDL   (R8), BX
	MOVQ   CX, R8
	SHRQ   $0x01, R8
	ANDQ   $0x04, R8
	ADDQ   AX, R8
	ADDL   (R8), SI
	IMUL3L $0xcc9e2d51, DX, DX
	RORL   $0x11, DX
	IMUL3L $0x1b873593, DX, DX
	XORL   DX, DI
	RORL   $0x13, DI
	LEAL   (DI)(DI*4), DX
	LEAL   3864292196(DX), DI
	IMUL3L $0xcc9e2d51, BX, BX
	RORL   $0x11, BX
	IMUL3L $0x1b873593, BX, BX
	XORL   BX, DI
	RORL   $0x13, DI
	LEAL   (DI)(DI*4), BX
	LEAL   3864292196(BX), DI
	IMUL3L $0xcc9e2d51, SI, SI
	RORL   $0x11, SI
	IMUL3L $0x1b873593, SI, SI
	XORL   SI, DI
	RORL   $0x13, DI
	LEAL   (DI)(DI*4), SI
	LEAL   3864292196(SI), DI
	MOVL   DI, AX
	SHRL   $0x10, AX
	XORL   AX, DI
	MOVL   $0x85ebca6b, AX
	IMULL  AX, DI
	MOVL   DI, AX
	SHRL   $0x0d, AX
	XORL   AX, DI
	MOVL   $0xc2b2ae35, AX
	IMULL  AX, DI
	MOVL   DI, AX
	SHRL   $0x10, AX
	XORL   AX, DI
	MOVL   DI, ret+24(FP)
	RET

hash_13_24:
	MOVQ   CX, DX
	SHRQ   $0x01, DX
	ADDQ   AX, DX
	MOVL   -4(DX), BX
	MOVL   4(AX), SI
	MOVQ   CX, DI
	ADDQ   AX, DI
	MOVL   -8(DI), R8
	MOVL   (DX), DX
	MOVL   (AX), AX
	MOVL   -4(DI), DI
	MOVL   $0xcc9e2d51, R9
	IMULL  DX, R9
	ADDL   CX, R9
	RORL   $0x0c, BX
	ADDL   DI, BX
	MOVL   R8, CX
	IMUL3L $0xcc9e2d51, CX, CX
	RORL   $0x11, CX
	IMUL3L $0x1b873593, CX, CX
	XORL   CX, R9
	RORL   $0x13, R9
	LEAL   (R9)(R9*4), CX
	LEAL   3864292196(CX), R9
	ADDL   BX, R9
	RORL   $0x03, BX
	ADDL   R8, BX
	IMUL3L $0xcc9e2d51, AX, AX
	RORL   $0x11, AX
	IMUL3L $0x1b873593, AX, AX
	XORL   AX, R9
	RORL   $0x13, R9
	LEAL   (R9)(R9*4), AX
	LEAL   3864292196(AX), R9
	ADDL   BX, R9
	ADDL   DI, BX
	RORL   $0x0c, BX
	ADDL   DX, BX
	IMUL3L $0xcc9e2d51, SI, SI
	RORL   $0x11, SI
	IMUL3L $0x1b873593, SI, SI
	XORL   SI, R9
	RORL   $0x13, R9
	LEAL   (R9)(R9*4), SI
	LEAL   3864292196(SI), R9
	ADDL   BX, R9
	MOVL   R9, AX
	SHRL   $0x10, AX
	XORL   AX, R9
	MOVL   $0x85ebca6b, AX
	IMULL  AX, R9
	MOVL   R9, AX
	SHRL   $0x0d, AX
	XORL   AX, R9
	MOVL   $0xc2b2ae35, AX
	IMULL  AX, R9
	MOVL   R9, AX
	SHRL   $0x10, AX
	XORL   AX, R9
	MOVL   R9, ret+24(FP)
	RET

long:
	MOVL       CX, DX
	MOVL       $0xcc9e2d51, BX
	IMULL      DX, BX
	MOVL       BX, SI
	MOVQ       CX, DI
	ADDQ       AX, DI
	MOVL       $0xcc9e2d51, R8
	MOVL       $0x1b873593, R9
	MOVL       -4(DI), R10
	IMULL      R8, R10
	RORL       $0x11, R10
	IMULL      R9, R10
	XORL       R10, DX
	RORL       $0x13, DX
	MOVL       DX, R10
	SHLL       $0x02, R10
	ADDL       R10, DX
	ADDL       $0xe6546b64, DX
	MOVL       -8(DI), R10
	IMULL      R8, R10
	RORL       $0x11, R10
	IMULL      R9, R10
	XORL       R10, BX
	RORL       $0x13, BX
	MOVL       BX, R10
	SHLL       $0x02, R10
	ADDL       R10, BX
	ADDL       $0xe6546b64, BX
	MOVL       -16(DI), R10
	IMULL      R8, R10
	RORL       $0x11, R10
	IMULL      R9, R10
	XORL       R10, DX
	RORL       $0x13, DX
	MOVL       DX, R10
	SHLL       $0x02, R10
	ADDL       R10, DX
	ADDL       $0xe6546b64, DX
	MOVL       -12(DI), R10
	IMULL      R8, R10
	RORL       $0x11, R10
	IMULL      R9, R10
	XORL       R10, BX
	RORL       $0x13, BX
	MOVL       BX, R10
	SHLL       $0x02, R10
	ADDL       R10, BX
	ADDL       $0xe6546b64, BX
	PREFETCHT0 (AX)
	MOVL       -20(DI), DI
	IMULL      R8, DI
	RORL       $0x11, DI
	IMULL      R9, DI
	ADDL       DI, SI
	RORL       $0x13, SI
	ADDL       $0x71, SI

loop80:
	CMPQ       CX, $0x64
	JL         loop20
	PREFETCHT0 20(AX)
	MOVL       (AX), DI
	ADDL       DI, DX
	MOVL       4(AX), R8
	ADDL       R8, BX
	MOVL       8(AX), R9
	ADDL       R9, SI
	MOVL       12(AX), R10
	MOVL       R10, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, DX
	RORL       $0x13, DX
	LEAL       (DX)(DX*4), R12
	LEAL       3864292196(R12), DX
	MOVL       16(AX), R11
	ADDL       R11, DX
	MOVL       R9, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, BX
	RORL       $0x13, BX
	LEAL       (BX)(BX*4), R12
	LEAL       3864292196(R12), BX
	ADDL       DI, BX
	IMUL3L     $0xcc9e2d51, R11, R12
	ADDL       R8, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, SI
	RORL       $0x13, SI
	LEAL       (SI)(SI*4), R12
	LEAL       3864292196(R12), SI
	ADDL       R10, SI
	ADDL       BX, SI
	ADDL       SI, BX
	PREFETCHT0 40(AX)
	MOVL       20(AX), DI
	ADDL       DI, DX
	MOVL       24(AX), R8
	ADDL       R8, BX
	MOVL       28(AX), R9
	ADDL       R9, SI
	MOVL       32(AX), R10
	MOVL       R10, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, DX
	RORL       $0x13, DX
	LEAL       (DX)(DX*4), R12
	LEAL       3864292196(R12), DX
	MOVL       36(AX), R11
	ADDL       R11, DX
	MOVL       R9, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, BX
	RORL       $0x13, BX
	LEAL       (BX)(BX*4), R12
	LEAL       3864292196(R12), BX
	ADDL       DI, BX
	IMUL3L     $0xcc9e2d51, R11, R12
	ADDL       R8, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, SI
	RORL       $0x13, SI
	LEAL       (SI)(SI*4), R12
	LEAL       3864292196(R12), SI
	ADDL       R10, SI
	ADDL       BX, SI
	ADDL       SI, BX
	PREFETCHT0 60(AX)
	MOVL       40(AX), DI
	ADDL       DI, DX
	MOVL       44(AX), R8
	ADDL       R8, BX
	MOVL       48(AX), R9
	ADDL       R9, SI
	MOVL       52(AX), R10
	MOVL       R10, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, DX
	RORL       $0x13, DX
	LEAL       (DX)(DX*4), R12
	LEAL       3864292196(R12), DX
	MOVL       56(AX), R11
	ADDL       R11, DX
	MOVL       R9, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, BX
	RORL       $0x13, BX
	LEAL       (BX)(BX*4), R12
	LEAL       3864292196(R12), BX
	ADDL       DI, BX
	IMUL3L     $0xcc9e2d51, R11, R12
	ADDL       R8, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, SI
	RORL       $0x13, SI
	LEAL       (SI)(SI*4), R12
	LEAL       3864292196(R12), SI
	ADDL       R10, SI
	ADDL       BX, SI
	ADDL       SI, BX
	PREFETCHT0 80(AX)
	MOVL       60(AX), DI
	ADDL       DI, DX
	MOVL       64(AX), R8
	ADDL       R8, BX
	MOVL       68(AX), R9
	ADDL       R9, SI
	MOVL       72(AX), R10
	MOVL       R10, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, DX
	RORL       $0x13, DX
	LEAL       (DX)(DX*4), R12
	LEAL       3864292196(R12), DX
	MOVL       76(AX), R11
	ADDL       R11, DX
	MOVL       R9, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, BX
	RORL       $0x13, BX
	LEAL       (BX)(BX*4), R12
	LEAL       3864292196(R12), BX
	ADDL       DI, BX
	IMUL3L     $0xcc9e2d51, R11, R12
	ADDL       R8, R12
	IMUL3L     $0xcc9e2d51, R12, R12
	RORL       $0x11, R12
	IMUL3L     $0x1b873593, R12, R12
	XORL       R12, SI
	RORL       $0x13, SI
	LEAL       (SI)(SI*4), R12
	LEAL       3864292196(R12), SI
	ADDL       R10, SI
	ADDL       BX, SI
	ADDL       SI, BX
	ADDQ       $0x50, AX
	SUBQ       $0x50, CX
	JMP        loop80

loop20:
	CMPQ   CX, $0x14
	JLE    after
	MOVL   (AX), DI
	ADDL   DI, DX
	MOVL   4(AX), R8
	ADDL   R8, BX
	MOVL   8(AX), R9
	ADDL   R9, SI
	MOVL   12(AX), R10
	MOVL   R10, R12
	IMUL3L $0xcc9e2d51, R12, R12
	RORL   $0x11, R12
	IMUL3L $0x1b873593, R12, R12
	XORL   R12, DX
	RORL   $0x13, DX
	LEAL   (DX)(DX*4), R12
	LEAL   3864292196(R12), DX
	MOVL   16(AX), R11
	ADDL   R11, DX
	MOVL   R9, R12
	IMUL3L $0xcc9e2d51, R12, R12
	RORL   $0x11, R12
	IMUL3L $0x1b873593, R12, R12
	XORL   R12, BX
	RORL   $0x13, BX
	LEAL   (BX)(BX*4), R12
	LEAL   3864292196(R12), BX
	ADDL   DI, BX
	IMUL3L $0xcc9e2d51, R11, R12
	ADDL   R8, R12
	IMUL3L $0xcc9e2d51, R12, R12
	RORL   $0x11, R12
	IMUL3L $0x1b873593, R12, R12
	XORL   R12, SI
	RORL   $0x13, SI
	LEAL   (SI)(SI*4), R12
	LEAL   3864292196(R12), SI
	ADDL   R10, SI
	ADDL   BX, SI
	ADDL   SI, BX
	ADDQ   $0x14, AX
	SUBQ   $0x14, CX
	JMP    loop20

after:
	MOVL  $0xcc9e2d51, AX
	RORL  $0x0b, BX
	IMULL AX, BX
	RORL  $0x11, BX
	IMULL AX, BX
	RORL  $0x0b, SI
	IMULL AX, SI
	RORL  $0x11, SI
	IMULL AX, SI
	ADDL  BX, DX
	RORL  $0x13, DX
	MOVL  DX, CX
	SHLL  $0x02, CX
	ADDL  CX, DX
	ADDL  $0xe6546b64, DX
	RORL  $0x11, DX
	IMULL AX, DX
	ADDL  SI, DX
	RORL  $0x13, DX
	MOVL  DX, CX
	SHLL  $0x02, CX
	ADDL  CX, DX
	ADDL  $0xe6546b64, DX
	RORL  $0x11, DX
	IMULL AX, DX
	MOVL  DX, ret+24(FP)
	RET
