diff --git a/asm.go b/asm.go index cc506b9..fa1fcea 100644 --- a/asm.go +++ b/asm.go @@ -3,6 +3,8 @@ package main import ( + "flag" + . "github.com/mmcloughlin/avo/build" . "github.com/mmcloughlin/avo/operand" . "github.com/mmcloughlin/avo/reg" @@ -533,9 +535,9 @@ func fmix(h GPVirtual) GPVirtual { } func mur(a, h GPVirtual) GPVirtual { - IMUL3L(U32(c1), a, a) + imul3l(c1, a, a) RORL(Imm(17), a) - IMUL3L(U32(c2), a, a) + imul3l(c2, a, a) XORL(a, h) RORL(Imm(19), h) @@ -786,7 +788,7 @@ func fp32() { g = mur(t, g) ADDL(a, g) - IMUL3L(U32(c1), e, t) + imul3l(c1, e, t) ADDL(b, t) f = mur(t, f) ADDL(d, f) @@ -865,8 +867,23 @@ func fp32() { RET() } +var go111 = flag.Bool("go111", true, "use assembly instructions present in go1.11 and later") + +func imul3l(m uint32, x, y Register) { + if *go111 { + IMUL3L(U32(m), x, y) + } else { + t := GP32() + MOVL(U32(m), t) + IMULL(t, x) + MOVL(x, y) + } +} + func main() { + flag.Parse() + ConstraintExpr("amd64,!purego") fp64() diff --git a/fp_amd64.s b/fp_amd64.s index 2583137..0d90beb 100644 --- a/fp_amd64.s +++ b/fp_amd64.s @@ -1,4 +1,4 @@ -// Code generated by command: go run asm.go -out=fp_amd64.s -stubs=fp_stub.go. DO NOT EDIT. +// Code generated by command: go run asm.go -out=fp_amd64.s -go111=false. DO NOT EDIT. // +build amd64,!purego @@ -451,152 +451,168 @@ TEXT ·Fingerprint32(SB), NOSPLIT, $0-28 JZ done done: - MOVL CX, BP - IMUL3L $0xcc9e2d51, BP, BP - RORL $0x11, BP - IMUL3L $0x1b873593, BP, BP - XORL BP, BX - RORL $0x13, BX - LEAL (BX)(BX*4), BP - LEAL 3864292196(BP), 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, DX - SHRL $0x10, DX - XORL DX, BX - MOVL $0x85ebca6b, DX - IMULL DX, BX - MOVL BX, DX - SHRL $0x0d, DX - XORL DX, BX - MOVL $0xc2b2ae35, DX - IMULL DX, BX - MOVL BX, DX - SHRL $0x10, DX - XORL DX, BX - MOVL BX, ret+24(FP) + MOVL CX, BP + MOVL $0xcc9e2d51, SI + IMULL SI, BP + RORL $0x11, BP + MOVL $0x1b873593, SI + IMULL SI, BP + XORL BP, BX + RORL $0x13, BX + LEAL (BX)(BX*4), BP + LEAL 3864292196(BP), BX + MOVL $0xcc9e2d51, BP + IMULL BP, DX + RORL $0x11, DX + MOVL $0x1b873593, BP + IMULL BP, DX + XORL DX, BX + RORL $0x13, BX + LEAL (BX)(BX*4), DX + LEAL 3864292196(DX), BX + MOVL BX, DX + SHRL $0x10, DX + XORL DX, BX + MOVL $0x85ebca6b, DX + IMULL DX, BX + MOVL BX, DX + SHRL $0x0d, DX + XORL DX, BX + MOVL $0xc2b2ae35, DX + IMULL DX, BX + MOVL BX, DX + SHRL $0x10, DX + XORL DX, BX + MOVL BX, ret+24(FP) RET hash_5_12: - MOVL CX, DX - MOVL DX, BX - SHLL $0x02, BX - ADDL DX, BX - MOVL $0x00000009, BP - MOVL BX, SI - ADDL (AX), DX - MOVQ CX, DI - SUBQ $0x04, DI - ADDQ AX, DI - ADDL (DI), BX - MOVQ CX, DI - SHRQ $0x01, DI - ANDQ $0x04, DI - ADDQ AX, DI - ADDL (DI), BP - IMUL3L $0xcc9e2d51, DX, DX - RORL $0x11, DX - IMUL3L $0x1b873593, DX, DX - XORL DX, SI - RORL $0x13, SI - LEAL (SI)(SI*4), DX - LEAL 3864292196(DX), SI - IMUL3L $0xcc9e2d51, BX, BX - RORL $0x11, BX - IMUL3L $0x1b873593, BX, BX - XORL BX, SI - RORL $0x13, SI - LEAL (SI)(SI*4), BX - LEAL 3864292196(BX), SI - IMUL3L $0xcc9e2d51, BP, BP - RORL $0x11, BP - IMUL3L $0x1b873593, BP, BP - XORL BP, SI - RORL $0x13, SI - LEAL (SI)(SI*4), BP - LEAL 3864292196(BP), SI - MOVL SI, DX - SHRL $0x10, DX - XORL DX, SI - MOVL $0x85ebca6b, DX - IMULL DX, SI - MOVL SI, DX - SHRL $0x0d, DX - XORL DX, SI - MOVL $0xc2b2ae35, DX - IMULL DX, SI - MOVL SI, DX - SHRL $0x10, DX - XORL DX, SI - MOVL SI, ret+24(FP) + MOVL CX, DX + MOVL DX, BX + SHLL $0x02, BX + ADDL DX, BX + MOVL $0x00000009, BP + MOVL BX, SI + ADDL (AX), DX + MOVQ CX, DI + SUBQ $0x04, DI + ADDQ AX, DI + ADDL (DI), BX + MOVQ CX, DI + SHRQ $0x01, DI + ANDQ $0x04, DI + ADDQ AX, DI + ADDL (DI), BP + MOVL $0xcc9e2d51, DI + IMULL DI, DX + RORL $0x11, DX + MOVL $0x1b873593, DI + IMULL DI, DX + XORL DX, SI + RORL $0x13, SI + LEAL (SI)(SI*4), DX + LEAL 3864292196(DX), SI + MOVL $0xcc9e2d51, DX + IMULL DX, BX + RORL $0x11, BX + MOVL $0x1b873593, DX + IMULL DX, BX + XORL BX, SI + RORL $0x13, SI + LEAL (SI)(SI*4), BX + LEAL 3864292196(BX), SI + MOVL $0xcc9e2d51, DX + IMULL DX, BP + RORL $0x11, BP + MOVL $0x1b873593, DX + IMULL DX, BP + XORL BP, SI + RORL $0x13, SI + LEAL (SI)(SI*4), BP + LEAL 3864292196(BP), SI + MOVL SI, DX + SHRL $0x10, DX + XORL DX, SI + MOVL $0x85ebca6b, DX + IMULL DX, SI + MOVL SI, DX + SHRL $0x0d, DX + XORL DX, SI + MOVL $0xc2b2ae35, DX + IMULL DX, SI + MOVL SI, DX + SHRL $0x10, DX + XORL DX, SI + MOVL SI, ret+24(FP) RET hash_13_24: - MOVQ CX, DX - SHRQ $0x01, DX - ADDQ AX, DX - MOVL -4(DX), BX - MOVL 4(AX), BP - MOVQ CX, SI - ADDQ AX, SI - MOVL -8(SI), DI - MOVL (DX), DX - MOVL (AX), R8 - MOVL -4(SI), SI - MOVL $0xcc9e2d51, R9 - IMULL DX, R9 - ADDL CX, R9 - RORL $0x0c, BX - ADDL SI, BX - MOVL DI, R10 - IMUL3L $0xcc9e2d51, R10, R10 - RORL $0x11, R10 - IMUL3L $0x1b873593, R10, R10 - XORL R10, R9 - RORL $0x13, R9 - LEAL (R9)(R9*4), R10 - LEAL 3864292196(R10), R9 - ADDL BX, R9 - RORL $0x03, BX - ADDL DI, BX - IMUL3L $0xcc9e2d51, R8, R8 - RORL $0x11, R8 - IMUL3L $0x1b873593, R8, R8 - XORL R8, R9 - RORL $0x13, R9 - LEAL (R9)(R9*4), R8 - LEAL 3864292196(R8), R9 - ADDL BX, R9 - ADDL SI, BX - RORL $0x0c, BX - ADDL DX, BX - IMUL3L $0xcc9e2d51, BP, BP - RORL $0x11, BP - IMUL3L $0x1b873593, BP, BP - XORL BP, R9 - RORL $0x13, R9 - LEAL (R9)(R9*4), BP - LEAL 3864292196(BP), R9 - ADDL BX, R9 - MOVL R9, DX - SHRL $0x10, DX - XORL DX, R9 - MOVL $0x85ebca6b, DX - IMULL DX, R9 - MOVL R9, DX - SHRL $0x0d, DX - XORL DX, R9 - MOVL $0xc2b2ae35, DX - IMULL DX, R9 - MOVL R9, DX - SHRL $0x10, DX - XORL DX, R9 - MOVL R9, ret+24(FP) + MOVQ CX, DX + SHRQ $0x01, DX + ADDQ AX, DX + MOVL -4(DX), BX + MOVL 4(AX), BP + MOVQ CX, SI + ADDQ AX, SI + MOVL -8(SI), DI + MOVL (DX), DX + MOVL (AX), R8 + MOVL -4(SI), SI + MOVL $0xcc9e2d51, R9 + IMULL DX, R9 + ADDL CX, R9 + RORL $0x0c, BX + ADDL SI, BX + MOVL DI, R10 + MOVL $0xcc9e2d51, R11 + IMULL R11, R10 + RORL $0x11, R10 + MOVL $0x1b873593, R11 + IMULL R11, R10 + XORL R10, R9 + RORL $0x13, R9 + LEAL (R9)(R9*4), R10 + LEAL 3864292196(R10), R9 + ADDL BX, R9 + RORL $0x03, BX + ADDL DI, BX + MOVL $0xcc9e2d51, DI + IMULL DI, R8 + RORL $0x11, R8 + MOVL $0x1b873593, DI + IMULL DI, R8 + XORL R8, R9 + RORL $0x13, R9 + LEAL (R9)(R9*4), R8 + LEAL 3864292196(R8), R9 + ADDL BX, R9 + ADDL SI, BX + RORL $0x0c, BX + ADDL DX, BX + MOVL $0xcc9e2d51, DX + IMULL DX, BP + RORL $0x11, BP + MOVL $0x1b873593, DX + IMULL DX, BP + XORL BP, R9 + RORL $0x13, R9 + LEAL (R9)(R9*4), BP + LEAL 3864292196(BP), R9 + ADDL BX, R9 + MOVL R9, DX + SHRL $0x10, DX + XORL DX, R9 + MOVL $0x85ebca6b, DX + IMULL DX, R9 + MOVL R9, DX + SHRL $0x0d, DX + XORL DX, R9 + MOVL $0xc2b2ae35, DX + IMULL DX, R9 + MOVL R9, DX + SHRL $0x10, DX + XORL DX, R9 + MOVL R9, ret+24(FP) RET long: @@ -657,208 +673,248 @@ long: ADDL $0x71, BP loop80: - CMPQ CX, $0x64 - JL loop20 - MOVL (AX), SI - ADDL SI, DX - MOVL 4(AX), DI - ADDL DI, BX - MOVL 8(AX), R8 - ADDL R8, BP - MOVL 12(AX), R9 - MOVL R9, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, DX - RORL $0x13, DX - LEAL (DX)(DX*4), R11 - LEAL 3864292196(R11), DX - MOVL 16(AX), R10 - ADDL R10, DX - MOVL R8, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BX - RORL $0x13, BX - LEAL (BX)(BX*4), R11 - LEAL 3864292196(R11), BX - ADDL SI, BX - IMUL3L $0xcc9e2d51, R10, R11 - ADDL DI, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BP - RORL $0x13, BP - LEAL (BP)(BP*4), R11 - LEAL 3864292196(R11), BP - ADDL R9, BP - ADDL BX, BP - ADDL BP, BX - MOVL 20(AX), SI - ADDL SI, DX - MOVL 24(AX), DI - ADDL DI, BX - MOVL 28(AX), R8 - ADDL R8, BP - MOVL 32(AX), R9 - MOVL R9, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, DX - RORL $0x13, DX - LEAL (DX)(DX*4), R11 - LEAL 3864292196(R11), DX - MOVL 36(AX), R10 - ADDL R10, DX - MOVL R8, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BX - RORL $0x13, BX - LEAL (BX)(BX*4), R11 - LEAL 3864292196(R11), BX - ADDL SI, BX - IMUL3L $0xcc9e2d51, R10, R11 - ADDL DI, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BP - RORL $0x13, BP - LEAL (BP)(BP*4), R11 - LEAL 3864292196(R11), BP - ADDL R9, BP - ADDL BX, BP - ADDL BP, BX - MOVL 40(AX), SI - ADDL SI, DX - MOVL 44(AX), DI - ADDL DI, BX - MOVL 48(AX), R8 - ADDL R8, BP - MOVL 52(AX), R9 - MOVL R9, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, DX - RORL $0x13, DX - LEAL (DX)(DX*4), R11 - LEAL 3864292196(R11), DX - MOVL 56(AX), R10 - ADDL R10, DX - MOVL R8, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BX - RORL $0x13, BX - LEAL (BX)(BX*4), R11 - LEAL 3864292196(R11), BX - ADDL SI, BX - IMUL3L $0xcc9e2d51, R10, R11 - ADDL DI, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BP - RORL $0x13, BP - LEAL (BP)(BP*4), R11 - LEAL 3864292196(R11), BP - ADDL R9, BP - ADDL BX, BP - ADDL BP, BX - MOVL 60(AX), SI - ADDL SI, DX - MOVL 64(AX), DI - ADDL DI, BX - MOVL 68(AX), R8 - ADDL R8, BP - MOVL 72(AX), R9 - MOVL R9, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, DX - RORL $0x13, DX - LEAL (DX)(DX*4), R11 - LEAL 3864292196(R11), DX - MOVL 76(AX), R10 - ADDL R10, DX - MOVL R8, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BX - RORL $0x13, BX - LEAL (BX)(BX*4), R11 - LEAL 3864292196(R11), BX - ADDL SI, BX - IMUL3L $0xcc9e2d51, R10, R11 - ADDL DI, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BP - RORL $0x13, BP - LEAL (BP)(BP*4), R11 - LEAL 3864292196(R11), BP - ADDL R9, BP - ADDL BX, BP - ADDL BP, BX - ADDQ $0x50, AX - SUBQ $0x50, CX - JMP loop80 + CMPQ CX, $0x64 + JL loop20 + MOVL (AX), SI + ADDL SI, DX + MOVL 4(AX), DI + ADDL DI, BX + MOVL 8(AX), R8 + ADDL R8, BP + MOVL 12(AX), R9 + MOVL R9, R11 + MOVL $0xcc9e2d51, R10 + IMULL R10, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R10 + IMULL R10, R11 + XORL R11, DX + RORL $0x13, DX + LEAL (DX)(DX*4), R11 + LEAL 3864292196(R11), DX + MOVL 16(AX), R10 + ADDL R10, DX + MOVL R8, R11 + MOVL $0xcc9e2d51, R8 + IMULL R8, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R8 + IMULL R8, R11 + XORL R11, BX + RORL $0x13, BX + LEAL (BX)(BX*4), R11 + LEAL 3864292196(R11), BX + ADDL SI, BX + MOVL $0xcc9e2d51, SI + IMULL SI, R10 + MOVL R10, R11 + ADDL DI, R11 + MOVL $0xcc9e2d51, SI + IMULL SI, R11 + RORL $0x11, R11 + MOVL $0x1b873593, SI + IMULL SI, R11 + XORL R11, BP + RORL $0x13, BP + LEAL (BP)(BP*4), R11 + LEAL 3864292196(R11), BP + ADDL R9, BP + ADDL BX, BP + ADDL BP, BX + MOVL 20(AX), SI + ADDL SI, DX + MOVL 24(AX), DI + ADDL DI, BX + MOVL 28(AX), R8 + ADDL R8, BP + MOVL 32(AX), R9 + MOVL R9, R11 + MOVL $0xcc9e2d51, R10 + IMULL R10, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R10 + IMULL R10, R11 + XORL R11, DX + RORL $0x13, DX + LEAL (DX)(DX*4), R11 + LEAL 3864292196(R11), DX + MOVL 36(AX), R10 + ADDL R10, DX + MOVL R8, R11 + MOVL $0xcc9e2d51, R8 + IMULL R8, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R8 + IMULL R8, R11 + XORL R11, BX + RORL $0x13, BX + LEAL (BX)(BX*4), R11 + LEAL 3864292196(R11), BX + ADDL SI, BX + MOVL $0xcc9e2d51, SI + IMULL SI, R10 + MOVL R10, R11 + ADDL DI, R11 + MOVL $0xcc9e2d51, SI + IMULL SI, R11 + RORL $0x11, R11 + MOVL $0x1b873593, SI + IMULL SI, R11 + XORL R11, BP + RORL $0x13, BP + LEAL (BP)(BP*4), R11 + LEAL 3864292196(R11), BP + ADDL R9, BP + ADDL BX, BP + ADDL BP, BX + MOVL 40(AX), SI + ADDL SI, DX + MOVL 44(AX), DI + ADDL DI, BX + MOVL 48(AX), R8 + ADDL R8, BP + MOVL 52(AX), R9 + MOVL R9, R11 + MOVL $0xcc9e2d51, R10 + IMULL R10, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R10 + IMULL R10, R11 + XORL R11, DX + RORL $0x13, DX + LEAL (DX)(DX*4), R11 + LEAL 3864292196(R11), DX + MOVL 56(AX), R10 + ADDL R10, DX + MOVL R8, R11 + MOVL $0xcc9e2d51, R8 + IMULL R8, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R8 + IMULL R8, R11 + XORL R11, BX + RORL $0x13, BX + LEAL (BX)(BX*4), R11 + LEAL 3864292196(R11), BX + ADDL SI, BX + MOVL $0xcc9e2d51, SI + IMULL SI, R10 + MOVL R10, R11 + ADDL DI, R11 + MOVL $0xcc9e2d51, SI + IMULL SI, R11 + RORL $0x11, R11 + MOVL $0x1b873593, SI + IMULL SI, R11 + XORL R11, BP + RORL $0x13, BP + LEAL (BP)(BP*4), R11 + LEAL 3864292196(R11), BP + ADDL R9, BP + ADDL BX, BP + ADDL BP, BX + MOVL 60(AX), SI + ADDL SI, DX + MOVL 64(AX), DI + ADDL DI, BX + MOVL 68(AX), R8 + ADDL R8, BP + MOVL 72(AX), R9 + MOVL R9, R11 + MOVL $0xcc9e2d51, R10 + IMULL R10, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R10 + IMULL R10, R11 + XORL R11, DX + RORL $0x13, DX + LEAL (DX)(DX*4), R11 + LEAL 3864292196(R11), DX + MOVL 76(AX), R10 + ADDL R10, DX + MOVL R8, R11 + MOVL $0xcc9e2d51, R8 + IMULL R8, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R8 + IMULL R8, R11 + XORL R11, BX + RORL $0x13, BX + LEAL (BX)(BX*4), R11 + LEAL 3864292196(R11), BX + ADDL SI, BX + MOVL $0xcc9e2d51, SI + IMULL SI, R10 + MOVL R10, R11 + ADDL DI, R11 + MOVL $0xcc9e2d51, SI + IMULL SI, R11 + RORL $0x11, R11 + MOVL $0x1b873593, SI + IMULL SI, R11 + XORL R11, BP + RORL $0x13, BP + LEAL (BP)(BP*4), R11 + LEAL 3864292196(R11), BP + ADDL R9, BP + ADDL BX, BP + ADDL BP, BX + ADDQ $0x50, AX + SUBQ $0x50, CX + JMP loop80 loop20: - CMPQ CX, $0x14 - JLE after - MOVL (AX), SI - ADDL SI, DX - MOVL 4(AX), DI - ADDL DI, BX - MOVL 8(AX), R8 - ADDL R8, BP - MOVL 12(AX), R9 - MOVL R9, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, DX - RORL $0x13, DX - LEAL (DX)(DX*4), R11 - LEAL 3864292196(R11), DX - MOVL 16(AX), R10 - ADDL R10, DX - MOVL R8, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BX - RORL $0x13, BX - LEAL (BX)(BX*4), R11 - LEAL 3864292196(R11), BX - ADDL SI, BX - IMUL3L $0xcc9e2d51, R10, R11 - ADDL DI, R11 - IMUL3L $0xcc9e2d51, R11, R11 - RORL $0x11, R11 - IMUL3L $0x1b873593, R11, R11 - XORL R11, BP - RORL $0x13, BP - LEAL (BP)(BP*4), R11 - LEAL 3864292196(R11), BP - ADDL R9, BP - ADDL BX, BP - ADDL BP, BX - ADDQ $0x14, AX - SUBQ $0x14, CX - JMP loop20 + CMPQ CX, $0x14 + JLE after + MOVL (AX), SI + ADDL SI, DX + MOVL 4(AX), DI + ADDL DI, BX + MOVL 8(AX), R8 + ADDL R8, BP + MOVL 12(AX), R9 + MOVL R9, R11 + MOVL $0xcc9e2d51, R10 + IMULL R10, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R10 + IMULL R10, R11 + XORL R11, DX + RORL $0x13, DX + LEAL (DX)(DX*4), R11 + LEAL 3864292196(R11), DX + MOVL 16(AX), R10 + ADDL R10, DX + MOVL R8, R11 + MOVL $0xcc9e2d51, R8 + IMULL R8, R11 + RORL $0x11, R11 + MOVL $0x1b873593, R8 + IMULL R8, R11 + XORL R11, BX + RORL $0x13, BX + LEAL (BX)(BX*4), R11 + LEAL 3864292196(R11), BX + ADDL SI, BX + MOVL $0xcc9e2d51, SI + IMULL SI, R10 + MOVL R10, R11 + ADDL DI, R11 + MOVL $0xcc9e2d51, SI + IMULL SI, R11 + RORL $0x11, R11 + MOVL $0x1b873593, SI + IMULL SI, R11 + XORL R11, BP + RORL $0x13, BP + LEAL (BP)(BP*4), R11 + LEAL 3864292196(R11), BP + ADDL R9, BP + ADDL BX, BP + ADDL BP, BX + ADDQ $0x14, AX + SUBQ $0x14, CX + JMP loop20 after: MOVL $0xcc9e2d51, AX