// +build !noasm
// Generated by PeachPy 0.2.0 from maxbits.py


// func maxBits128(in *uint64, seed *uint64) uint8
TEXT ·maxBits128(SB),4,$0-17
	MOVQ in+0(FP), AX
	ADDQ $1008, AX
	MOVQ seed+8(FP), BX
	MOVOU 0(AX), X0
	PXOR X1, X1
	PXOR X2, X2
	PXOR X3, X3
	PXOR X4, X4
	MOVOU 0(AX), X5
	MOVOU -16(AX), X6
	MOVOU -32(AX), X7
	MOVOU -48(AX), X8
	PSUBQ X6, X5
	POR X5, X1
	PSUBQ X7, X6
	POR X6, X2
	PSUBQ X8, X7
	POR X7, X3
	MOVOU -64(AX), X9
	MOVOU -80(AX), X10
	MOVOU -96(AX), X11
	MOVOU -112(AX), X12
	PSUBQ X9, X8
	POR X8, X4
	PSUBQ X10, X9
	POR X9, X1
	PSUBQ X11, X10
	POR X10, X2
	PSUBQ X12, X11
	POR X11, X3
	MOVOU -128(AX), X13
	MOVOU -144(AX), X14
	MOVOU -160(AX), X15
	MOVOU -176(AX), X5
	PSUBQ X13, X12
	POR X12, X4
	PSUBQ X14, X13
	POR X13, X1
	PSUBQ X15, X14
	POR X14, X2
	PSUBQ X5, X15
	POR X15, X3
	MOVOU -192(AX), X6
	MOVOU -208(AX), X7
	MOVOU -224(AX), X8
	MOVOU -240(AX), X9
	PSUBQ X6, X5
	POR X5, X4
	PSUBQ X7, X6
	POR X6, X1
	PSUBQ X8, X7
	POR X7, X2
	PSUBQ X9, X8
	POR X8, X3
	MOVOU -256(AX), X10
	MOVOU -272(AX), X11
	MOVOU -288(AX), X12
	MOVOU -304(AX), X13
	PSUBQ X10, X9
	POR X9, X4
	PSUBQ X11, X10
	POR X10, X1
	PSUBQ X12, X11
	POR X11, X2
	PSUBQ X13, X12
	POR X12, X3
	MOVOU -320(AX), X14
	MOVOU -336(AX), X15
	MOVOU -352(AX), X5
	MOVOU -368(AX), X6
	PSUBQ X14, X13
	POR X13, X4
	PSUBQ X15, X14
	POR X14, X1
	PSUBQ X5, X15
	POR X15, X2
	PSUBQ X6, X5
	POR X5, X3
	MOVOU -384(AX), X7
	MOVOU -400(AX), X8
	MOVOU -416(AX), X9
	MOVOU -432(AX), X10
	PSUBQ X7, X6
	POR X6, X4
	PSUBQ X8, X7
	POR X7, X1
	PSUBQ X9, X8
	POR X8, X2
	PSUBQ X10, X9
	POR X9, X3
	MOVOU -448(AX), X11
	MOVOU -464(AX), X12
	MOVOU -480(AX), X13
	MOVOU -496(AX), X14
	PSUBQ X11, X10
	POR X10, X4
	PSUBQ X12, X11
	POR X11, X1
	PSUBQ X13, X12
	POR X12, X2
	PSUBQ X14, X13
	POR X13, X3
	MOVOU -512(AX), X15
	MOVOU -528(AX), X5
	MOVOU -544(AX), X6
	MOVOU -560(AX), X7
	PSUBQ X15, X14
	POR X14, X4
	PSUBQ X5, X15
	POR X15, X1
	PSUBQ X6, X5
	POR X5, X2
	PSUBQ X7, X6
	POR X6, X3
	MOVOU -576(AX), X8
	MOVOU -592(AX), X9
	MOVOU -608(AX), X10
	MOVOU -624(AX), X11
	PSUBQ X8, X7
	POR X7, X4
	PSUBQ X9, X8
	POR X8, X1
	PSUBQ X10, X9
	POR X9, X2
	PSUBQ X11, X10
	POR X10, X3
	MOVOU -640(AX), X12
	MOVOU -656(AX), X13
	MOVOU -672(AX), X14
	MOVOU -688(AX), X15
	PSUBQ X12, X11
	POR X11, X4
	PSUBQ X13, X12
	POR X12, X1
	PSUBQ X14, X13
	POR X13, X2
	PSUBQ X15, X14
	POR X14, X3
	MOVOU -704(AX), X5
	MOVOU -720(AX), X6
	MOVOU -736(AX), X7
	MOVOU -752(AX), X8
	PSUBQ X5, X15
	POR X15, X4
	PSUBQ X6, X5
	POR X5, X1
	PSUBQ X7, X6
	POR X6, X2
	PSUBQ X8, X7
	POR X7, X3
	MOVOU -768(AX), X9
	MOVOU -784(AX), X10
	MOVOU -800(AX), X11
	MOVOU -816(AX), X12
	PSUBQ X9, X8
	POR X8, X4
	PSUBQ X10, X9
	POR X9, X1
	PSUBQ X11, X10
	POR X10, X2
	PSUBQ X12, X11
	POR X11, X3
	MOVOU -832(AX), X13
	MOVOU -848(AX), X14
	MOVOU -864(AX), X15
	MOVOU -880(AX), X5
	PSUBQ X13, X12
	POR X12, X4
	PSUBQ X14, X13
	POR X13, X1
	PSUBQ X15, X14
	POR X14, X2
	PSUBQ X5, X15
	POR X15, X3
	MOVOU -896(AX), X6
	MOVOU -912(AX), X7
	MOVOU -928(AX), X8
	MOVOU -944(AX), X9
	PSUBQ X6, X5
	POR X5, X4
	PSUBQ X7, X6
	POR X6, X1
	PSUBQ X8, X7
	POR X7, X2
	PSUBQ X9, X8
	POR X8, X3
	MOVOU -960(AX), X10
	MOVOU -976(AX), X11
	MOVOU -992(AX), X12
	MOVOU -1008(AX), X13
	PSUBQ X10, X9
	POR X9, X4
	PSUBQ X11, X10
	POR X10, X1
	PSUBQ X12, X11
	POR X11, X2
	PSUBQ X13, X12
	POR X12, X3
	PSUBQ 0(BX), X13
	POR X13, X4
	POR X1, X2
	POR X3, X4
	POR X2, X4
	PSHUFL $14, X4, X14
	POR X14, X4
	MOVQ X4, CX
	BSRQ CX, DX
	ADDQ $1, DX
	TESTQ CX, CX
	BYTE $0x48; BYTE $0x0F; BYTE $0x44; BYTE $0xD1 // CMOVZ rdx, rcx
	MOVB DX, ret+16(FP)
	RET

// func maxBits256(in *uint64, seed *uint64) uint8
TEXT ·maxBits256(SB),4,$0-17
	MOVQ in+0(FP), AX
	ADDQ $2032, AX
	MOVQ seed+8(FP), BX
	MOVOU 0(AX), X0
	PXOR X1, X1
	PXOR X2, X2
	PXOR X3, X3
	PXOR X4, X4
	MOVOU 0(AX), X5
	MOVOU -16(AX), X6
	MOVOU -32(AX), X7
	MOVOU -48(AX), X8
	PSUBQ X6, X5
	POR X5, X1
	PSUBQ X7, X6
	POR X6, X2
	PSUBQ X8, X7
	POR X7, X3
	MOVOU -64(AX), X9
	MOVOU -80(AX), X10
	MOVOU -96(AX), X11
	MOVOU -112(AX), X12
	PSUBQ X9, X8
	POR X8, X4
	PSUBQ X10, X9
	POR X9, X1
	PSUBQ X11, X10
	POR X10, X2
	PSUBQ X12, X11
	POR X11, X3
	MOVOU -128(AX), X13
	MOVOU -144(AX), X14
	MOVOU -160(AX), X15
	MOVOU -176(AX), X5
	PSUBQ X13, X12
	POR X12, X4
	PSUBQ X14, X13
	POR X13, X1
	PSUBQ X15, X14
	POR X14, X2
	PSUBQ X5, X15
	POR X15, X3
	MOVOU -192(AX), X6
	MOVOU -208(AX), X7
	MOVOU -224(AX), X8
	MOVOU -240(AX), X9
	PSUBQ X6, X5
	POR X5, X4
	PSUBQ X7, X6
	POR X6, X1
	PSUBQ X8, X7
	POR X7, X2
	PSUBQ X9, X8
	POR X8, X3
	MOVOU -256(AX), X10
	MOVOU -272(AX), X11
	MOVOU -288(AX), X12
	MOVOU -304(AX), X13
	PSUBQ X10, X9
	POR X9, X4
	PSUBQ X11, X10
	POR X10, X1
	PSUBQ X12, X11
	POR X11, X2
	PSUBQ X13, X12
	POR X12, X3
	MOVOU -320(AX), X14
	MOVOU -336(AX), X15
	MOVOU -352(AX), X5
	MOVOU -368(AX), X6
	PSUBQ X14, X13
	POR X13, X4
	PSUBQ X15, X14
	POR X14, X1
	PSUBQ X5, X15
	POR X15, X2
	PSUBQ X6, X5
	POR X5, X3
	MOVOU -384(AX), X7
	MOVOU -400(AX), X8
	MOVOU -416(AX), X9
	MOVOU -432(AX), X10
	PSUBQ X7, X6
	POR X6, X4
	PSUBQ X8, X7
	POR X7, X1
	PSUBQ X9, X8
	POR X8, X2
	PSUBQ X10, X9
	POR X9, X3
	MOVOU -448(AX), X11
	MOVOU -464(AX), X12
	MOVOU -480(AX), X13
	MOVOU -496(AX), X14
	PSUBQ X11, X10
	POR X10, X4
	PSUBQ X12, X11
	POR X11, X1
	PSUBQ X13, X12
	POR X12, X2
	PSUBQ X14, X13
	POR X13, X3
	MOVOU -512(AX), X15
	MOVOU -528(AX), X5
	MOVOU -544(AX), X6
	MOVOU -560(AX), X7
	PSUBQ X15, X14
	POR X14, X4
	PSUBQ X5, X15
	POR X15, X1
	PSUBQ X6, X5
	POR X5, X2
	PSUBQ X7, X6
	POR X6, X3
	MOVOU -576(AX), X8
	MOVOU -592(AX), X9
	MOVOU -608(AX), X10
	MOVOU -624(AX), X11
	PSUBQ X8, X7
	POR X7, X4
	PSUBQ X9, X8
	POR X8, X1
	PSUBQ X10, X9
	POR X9, X2
	PSUBQ X11, X10
	POR X10, X3
	MOVOU -640(AX), X12
	MOVOU -656(AX), X13
	MOVOU -672(AX), X14
	MOVOU -688(AX), X15
	PSUBQ X12, X11
	POR X11, X4
	PSUBQ X13, X12
	POR X12, X1
	PSUBQ X14, X13
	POR X13, X2
	PSUBQ X15, X14
	POR X14, X3
	MOVOU -704(AX), X5
	MOVOU -720(AX), X6
	MOVOU -736(AX), X7
	MOVOU -752(AX), X8
	PSUBQ X5, X15
	POR X15, X4
	PSUBQ X6, X5
	POR X5, X1
	PSUBQ X7, X6
	POR X6, X2
	PSUBQ X8, X7
	POR X7, X3
	MOVOU -768(AX), X9
	MOVOU -784(AX), X10
	MOVOU -800(AX), X11
	MOVOU -816(AX), X12
	PSUBQ X9, X8
	POR X8, X4
	PSUBQ X10, X9
	POR X9, X1
	PSUBQ X11, X10
	POR X10, X2
	PSUBQ X12, X11
	POR X11, X3
	MOVOU -832(AX), X13
	MOVOU -848(AX), X14
	MOVOU -864(AX), X15
	MOVOU -880(AX), X5
	PSUBQ X13, X12
	POR X12, X4
	PSUBQ X14, X13
	POR X13, X1
	PSUBQ X15, X14
	POR X14, X2
	PSUBQ X5, X15
	POR X15, X3
	MOVOU -896(AX), X6
	MOVOU -912(AX), X7
	MOVOU -928(AX), X8
	MOVOU -944(AX), X9
	PSUBQ X6, X5
	POR X5, X4
	PSUBQ X7, X6
	POR X6, X1
	PSUBQ X8, X7
	POR X7, X2
	PSUBQ X9, X8
	POR X8, X3
	MOVOU -960(AX), X10
	MOVOU -976(AX), X11
	MOVOU -992(AX), X12
	MOVOU -1008(AX), X13
	PSUBQ X10, X9
	POR X9, X4
	PSUBQ X11, X10
	POR X10, X1
	PSUBQ X12, X11
	POR X11, X2
	PSUBQ X13, X12
	POR X12, X3
	MOVOU -1024(AX), X14
	MOVOU -1040(AX), X15
	MOVOU -1056(AX), X5
	MOVOU -1072(AX), X6
	PSUBQ X14, X13
	POR X13, X4
	PSUBQ X15, X14
	POR X14, X1
	PSUBQ X5, X15
	POR X15, X2
	PSUBQ X6, X5
	POR X5, X3
	MOVOU -1088(AX), X7
	MOVOU -1104(AX), X8
	MOVOU -1120(AX), X9
	MOVOU -1136(AX), X10
	PSUBQ X7, X6
	POR X6, X4
	PSUBQ X8, X7
	POR X7, X1
	PSUBQ X9, X8
	POR X8, X2
	PSUBQ X10, X9
	POR X9, X3
	MOVOU -1152(AX), X11
	MOVOU -1168(AX), X12
	MOVOU -1184(AX), X13
	MOVOU -1200(AX), X14
	PSUBQ X11, X10
	POR X10, X4
	PSUBQ X12, X11
	POR X11, X1
	PSUBQ X13, X12
	POR X12, X2
	PSUBQ X14, X13
	POR X13, X3
	MOVOU -1216(AX), X15
	MOVOU -1232(AX), X5
	MOVOU -1248(AX), X6
	MOVOU -1264(AX), X7
	PSUBQ X15, X14
	POR X14, X4
	PSUBQ X5, X15
	POR X15, X1
	PSUBQ X6, X5
	POR X5, X2
	PSUBQ X7, X6
	POR X6, X3
	MOVOU -1280(AX), X8
	MOVOU -1296(AX), X9
	MOVOU -1312(AX), X10
	MOVOU -1328(AX), X11
	PSUBQ X8, X7
	POR X7, X4
	PSUBQ X9, X8
	POR X8, X1
	PSUBQ X10, X9
	POR X9, X2
	PSUBQ X11, X10
	POR X10, X3
	MOVOU -1344(AX), X12
	MOVOU -1360(AX), X13
	MOVOU -1376(AX), X14
	MOVOU -1392(AX), X15
	PSUBQ X12, X11
	POR X11, X4
	PSUBQ X13, X12
	POR X12, X1
	PSUBQ X14, X13
	POR X13, X2
	PSUBQ X15, X14
	POR X14, X3
	MOVOU -1408(AX), X5
	MOVOU -1424(AX), X6
	MOVOU -1440(AX), X7
	MOVOU -1456(AX), X8
	PSUBQ X5, X15
	POR X15, X4
	PSUBQ X6, X5
	POR X5, X1
	PSUBQ X7, X6
	POR X6, X2
	PSUBQ X8, X7
	POR X7, X3
	MOVOU -1472(AX), X9
	MOVOU -1488(AX), X10
	MOVOU -1504(AX), X11
	MOVOU -1520(AX), X12
	PSUBQ X9, X8
	POR X8, X4
	PSUBQ X10, X9
	POR X9, X1
	PSUBQ X11, X10
	POR X10, X2
	PSUBQ X12, X11
	POR X11, X3
	MOVOU -1536(AX), X13
	MOVOU -1552(AX), X14
	MOVOU -1568(AX), X15
	MOVOU -1584(AX), X5
	PSUBQ X13, X12
	POR X12, X4
	PSUBQ X14, X13
	POR X13, X1
	PSUBQ X15, X14
	POR X14, X2
	PSUBQ X5, X15
	POR X15, X3
	MOVOU -1600(AX), X6
	MOVOU -1616(AX), X7
	MOVOU -1632(AX), X8
	MOVOU -1648(AX), X9
	PSUBQ X6, X5
	POR X5, X4
	PSUBQ X7, X6
	POR X6, X1
	PSUBQ X8, X7
	POR X7, X2
	PSUBQ X9, X8
	POR X8, X3
	MOVOU -1664(AX), X10
	MOVOU -1680(AX), X11
	MOVOU -1696(AX), X12
	MOVOU -1712(AX), X13
	PSUBQ X10, X9
	POR X9, X4
	PSUBQ X11, X10
	POR X10, X1
	PSUBQ X12, X11
	POR X11, X2
	PSUBQ X13, X12
	POR X12, X3
	MOVOU -1728(AX), X14
	MOVOU -1744(AX), X15
	MOVOU -1760(AX), X5
	MOVOU -1776(AX), X6
	PSUBQ X14, X13
	POR X13, X4
	PSUBQ X15, X14
	POR X14, X1
	PSUBQ X5, X15
	POR X15, X2
	PSUBQ X6, X5
	POR X5, X3
	MOVOU -1792(AX), X7
	MOVOU -1808(AX), X8
	MOVOU -1824(AX), X9
	MOVOU -1840(AX), X10
	PSUBQ X7, X6
	POR X6, X4
	PSUBQ X8, X7
	POR X7, X1
	PSUBQ X9, X8
	POR X8, X2
	PSUBQ X10, X9
	POR X9, X3
	MOVOU -1856(AX), X11
	MOVOU -1872(AX), X12
	MOVOU -1888(AX), X13
	MOVOU -1904(AX), X14
	PSUBQ X11, X10
	POR X10, X4
	PSUBQ X12, X11
	POR X11, X1
	PSUBQ X13, X12
	POR X12, X2
	PSUBQ X14, X13
	POR X13, X3
	MOVOU -1920(AX), X15
	MOVOU -1936(AX), X5
	MOVOU -1952(AX), X6
	MOVOU -1968(AX), X7
	PSUBQ X15, X14
	POR X14, X4
	PSUBQ X5, X15
	POR X15, X1
	PSUBQ X6, X5
	POR X5, X2
	PSUBQ X7, X6
	POR X6, X3
	MOVOU -1984(AX), X8
	MOVOU -2000(AX), X9
	MOVOU -2016(AX), X10
	MOVOU -2032(AX), X11
	PSUBQ X8, X7
	POR X7, X4
	PSUBQ X9, X8
	POR X8, X1
	PSUBQ X10, X9
	POR X9, X2
	PSUBQ X11, X10
	POR X10, X3
	PSUBQ 0(BX), X11
	POR X11, X4
	POR X1, X2
	POR X3, X4
	POR X2, X4
	PSHUFL $14, X4, X12
	POR X12, X4
	MOVQ X4, CX
	BSRQ CX, DX
	ADDQ $1, DX
	TESTQ CX, CX
	BYTE $0x48; BYTE $0x0F; BYTE $0x44; BYTE $0xD1 // CMOVZ rdx, rcx
	MOVB DX, ret+16(FP)
	RET
