//go:build !noasm && amd64
// AUTO-GENERATED BY GOCC -- DO NOT EDIT

TEXT ·_uint8_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB0_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB0_4
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	WORD $0xc031             // xor	eax, eax
	JMP  LBB0_13

LBB0_1:
	WORD $0xc031 // xor	eax, eax
	JMP  LBB0_14

LBB0_4:
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB0_6
	WORD $0xc031                               // xor	eax, eax
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d
	JMP  LBB0_10

LBB0_6:
	WORD $0x8941; BYTE $0xd1 // mov	r9d, edx
	LONG $0x7fe18341         // and	r9d, 127
	WORD $0x894d; BYTE $0xc2 // mov	r10, r8
	WORD $0x294d; BYTE $0xca // sub	r10, r9
	LONG $0xc0eff9c5         // vpxor	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc9eff1c5         // vpxor	xmm1, xmm1, xmm1
	LONG $0xd2efe9c5         // vpxor	xmm2, xmm2, xmm2
	LONG $0xdbefe1c5         // vpxor	xmm3, xmm3, xmm3

LBB0_7:
	LONG $0x04fcfdc5; BYTE $0x07   // vpaddb	ymm0, ymm0, ymmword ptr [rdi + rax]
	LONG $0x4cfcf5c5; WORD $0x2007 // vpaddb	ymm1, ymm1, ymmword ptr [rdi + rax + 32]
	LONG $0x54fcedc5; WORD $0x4007 // vpaddb	ymm2, ymm2, ymmword ptr [rdi + rax + 64]
	LONG $0x5cfce5c5; WORD $0x6007 // vpaddb	ymm3, ymm3, ymmword ptr [rdi + rax + 96]
	LONG $0x80e88348               // sub	rax, -128
	WORD $0x3949; BYTE $0xc2       // cmp	r10, rax
	JNE  LBB0_7
	LONG $0xc0fcf5c5               // vpaddb	ymm0, ymm1, ymm0
	LONG $0xc0fcedc5               // vpaddb	ymm0, ymm2, ymm0
	LONG $0xc0fce5c5               // vpaddb	ymm0, ymm3, ymm0
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1fcf9c5               // vpaddb	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee   // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fcf9c5               // vpaddb	xmm0, xmm0, xmm1
	LONG $0xc9eff1c5               // vpxor	xmm1, xmm1, xmm1
	LONG $0xc1f6f9c5               // vpsadbw	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0x854d; BYTE $0xc9       // test	r9, r9
	JE   LBB0_14
	LONG $0x10f98341               // cmp	r9d, 16
	JB   LBB0_13

LBB0_10:
	WORD $0x894c; BYTE $0xd1 // mov	rcx, r10
	WORD $0xe283; BYTE $0x0f // and	edx, 15
	WORD $0x894d; BYTE $0xc2 // mov	r10, r8
	WORD $0x2949; BYTE $0xd2 // sub	r10, rdx
	WORD $0xb60f; BYTE $0xc0 // movzx	eax, al
	LONG $0xc06ef9c5         // vmovd	xmm0, eax

LBB0_11:
	LONG $0x04fcf9c5; BYTE $0x0f // vpaddb	xmm0, xmm0, xmmword ptr [rdi + rcx]
	LONG $0x10c18348             // add	rcx, 16
	WORD $0x3949; BYTE $0xca     // cmp	r10, rcx
	JNE  LBB0_11
	LONG $0xc870f9c5; BYTE $0xee // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fcf9c5             // vpaddb	xmm0, xmm0, xmm1
	LONG $0xc9eff1c5             // vpxor	xmm1, xmm1, xmm1
	LONG $0xc1f6f9c5             // vpsadbw	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5             // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2     // test	rdx, rdx
	JE   LBB0_14

LBB0_13:
	LONG $0x17040242         // add	al, byte ptr [rdi + r10]
	WORD $0xff49; BYTE $0xc2 // inc	r10
	WORD $0x394d; BYTE $0xd0 // cmp	r8, r10
	JNE  LBB0_13

LBB0_14:
	WORD $0x0688             // mov	byte ptr [rsi], al
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint8_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xb60f; BYTE $0x07 // movzx	eax, byte ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB1_13
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB1_3
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB1_12

LBB1_3:
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB1_5
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d
	JMP  LBB1_9

LBB1_5:
	WORD $0x8941; BYTE $0xd1     // mov	r9d, edx
	LONG $0x7fe18341             // and	r9d, 127
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x294d; BYTE $0xca     // sub	r10, r9
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB1_6:
	LONG $0x04dafdc5; BYTE $0x07   // vpminub	ymm0, ymm0, ymmword ptr [rdi + rax]
	LONG $0x4cdaf5c5; WORD $0x2007 // vpminub	ymm1, ymm1, ymmword ptr [rdi + rax + 32]
	LONG $0x54daedc5; WORD $0x4007 // vpminub	ymm2, ymm2, ymmword ptr [rdi + rax + 64]
	LONG $0x5cdae5c5; WORD $0x6007 // vpminub	ymm3, ymm3, ymmword ptr [rdi + rax + 96]
	LONG $0x80e88348               // sub	rax, -128
	WORD $0x3949; BYTE $0xc2       // cmp	r10, rax
	JNE  LBB1_6
	LONG $0xc1dafdc5               // vpminub	ymm0, ymm0, ymm1
	LONG $0xc2dafdc5               // vpminub	ymm0, ymm0, ymm2
	LONG $0xc3dafdc5               // vpminub	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1daf9c5               // vpminub	xmm0, xmm0, xmm1
	LONG $0xd071f1c5; BYTE $0x08   // vpsrlw	xmm1, xmm0, 8
	LONG $0xc1daf9c5               // vpminub	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0   // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0x854d; BYTE $0xc9       // test	r9, r9
	JE   LBB1_13
	LONG $0x10f98341               // cmp	r9d, 16
	JB   LBB1_12

LBB1_9:
	WORD $0x894c; BYTE $0xd1     // mov	rcx, r10
	WORD $0xe283; BYTE $0x0f     // and	edx, 15
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x2949; BYTE $0xd2     // sub	r10, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x7879e2c4; BYTE $0xc0 // vpbroadcastb	xmm0, xmm0

LBB1_10:
	LONG $0x04daf9c5; BYTE $0x0f // vpminub	xmm0, xmm0, xmmword ptr [rdi + rcx]
	LONG $0x10c18348             // add	rcx, 16
	WORD $0x3949; BYTE $0xca     // cmp	r10, rcx
	JNE  LBB1_10
	LONG $0xd071f1c5; BYTE $0x08 // vpsrlw	xmm1, xmm0, 8
	LONG $0xc1daf9c5             // vpminub	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0 // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5             // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2     // test	rdx, rdx
	JE   LBB1_13

LBB1_12:
	LONG $0x0cb60f42; BYTE $0x17 // movzx	ecx, byte ptr [rdi + r10]
	WORD $0xb60f; BYTE $0xc0     // movzx	eax, al
	WORD $0xc138                 // cmp	cl, al
	WORD $0x420f; BYTE $0xc1     // cmovb	eax, ecx
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB1_12

LBB1_13:
	WORD $0x0688             // mov	byte ptr [rsi], al
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint8_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xb60f; BYTE $0x07 // movzx	eax, byte ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB2_13
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB2_3
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB2_12

LBB2_3:
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB2_5
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d
	JMP  LBB2_9

LBB2_5:
	WORD $0x8941; BYTE $0xd1     // mov	r9d, edx
	LONG $0x7fe18341             // and	r9d, 127
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x294d; BYTE $0xca     // sub	r10, r9
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB2_6:
	LONG $0x04defdc5; BYTE $0x07   // vpmaxub	ymm0, ymm0, ymmword ptr [rdi + rax]
	LONG $0x4cdef5c5; WORD $0x2007 // vpmaxub	ymm1, ymm1, ymmword ptr [rdi + rax + 32]
	LONG $0x54deedc5; WORD $0x4007 // vpmaxub	ymm2, ymm2, ymmword ptr [rdi + rax + 64]
	LONG $0x5cdee5c5; WORD $0x6007 // vpmaxub	ymm3, ymm3, ymmword ptr [rdi + rax + 96]
	LONG $0x80e88348               // sub	rax, -128
	WORD $0x3949; BYTE $0xc2       // cmp	r10, rax
	JNE  LBB2_6
	LONG $0xc1defdc5               // vpmaxub	ymm0, ymm0, ymm1
	LONG $0xc2defdc5               // vpmaxub	ymm0, ymm0, ymm2
	LONG $0xc3defdc5               // vpmaxub	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1def9c5               // vpmaxub	xmm0, xmm0, xmm1
	LONG $0xc976f1c5               // vpcmpeqd	xmm1, xmm1, xmm1
	LONG $0xc1eff9c5               // vpxor	xmm0, xmm0, xmm1
	LONG $0xd071f1c5; BYTE $0x08   // vpsrlw	xmm1, xmm0, 8
	LONG $0xc1daf9c5               // vpminub	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0   // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0xd0f6                   // not	al
	WORD $0x854d; BYTE $0xc9       // test	r9, r9
	JE   LBB2_13
	LONG $0x10f98341               // cmp	r9d, 16
	JB   LBB2_12

LBB2_9:
	WORD $0x894c; BYTE $0xd1     // mov	rcx, r10
	WORD $0xe283; BYTE $0x0f     // and	edx, 15
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x2949; BYTE $0xd2     // sub	r10, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x7879e2c4; BYTE $0xc0 // vpbroadcastb	xmm0, xmm0

LBB2_10:
	LONG $0x04def9c5; BYTE $0x0f // vpmaxub	xmm0, xmm0, xmmword ptr [rdi + rcx]
	LONG $0x10c18348             // add	rcx, 16
	WORD $0x3949; BYTE $0xca     // cmp	r10, rcx
	JNE  LBB2_10
	LONG $0xc976f1c5             // vpcmpeqd	xmm1, xmm1, xmm1
	LONG $0xc1eff9c5             // vpxor	xmm0, xmm0, xmm1
	LONG $0xd071f1c5; BYTE $0x08 // vpsrlw	xmm1, xmm0, 8
	LONG $0xc1daf9c5             // vpminub	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0 // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5             // vmovd	eax, xmm0
	WORD $0xd0f6                 // not	al
	WORD $0x8548; BYTE $0xd2     // test	rdx, rdx
	JE   LBB2_13

LBB2_12:
	LONG $0x0cb60f42; BYTE $0x17 // movzx	ecx, byte ptr [rdi + r10]
	WORD $0xb60f; BYTE $0xc0     // movzx	eax, al
	WORD $0xc138                 // cmp	cl, al
	WORD $0x470f; BYTE $0xc1     // cmova	eax, ecx
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB2_12

LBB2_13:
	WORD $0x0688             // mov	byte ptr [rsi], al
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint8_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB3_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB3_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB3_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB3_16

LBB3_15:
	LONG $0x04b60f42; BYTE $0x1e // movzx	eax, byte ptr [rsi + r11]
	LONG $0x1f040242             // add	al, byte ptr [rdi + r11]
	LONG $0x1a048842             // mov	byte ptr [rdx + r11], al
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB3_15

LBB3_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB3_18

LBB3_17:
	LONG $0x04b60f42; BYTE $0x1e   // movzx	eax, byte ptr [rsi + r11]
	LONG $0x1f040242               // add	al, byte ptr [rdi + r11]
	LONG $0x1a048842               // mov	byte ptr [rdx + r11], al
	LONG $0x44b60f42; WORD $0x011e // movzx	eax, byte ptr [rsi + r11 + 1]
	LONG $0x1f440242; BYTE $0x01   // add	al, byte ptr [rdi + r11 + 1]
	LONG $0x1a448842; BYTE $0x01   // mov	byte ptr [rdx + r11 + 1], al
	LONG $0x44b60f42; WORD $0x021e // movzx	eax, byte ptr [rsi + r11 + 2]
	LONG $0x1f440242; BYTE $0x02   // add	al, byte ptr [rdi + r11 + 2]
	LONG $0x1a448842; BYTE $0x02   // mov	byte ptr [rdx + r11 + 2], al
	LONG $0x44b60f42; WORD $0x031e // movzx	eax, byte ptr [rsi + r11 + 3]
	LONG $0x1f440242; BYTE $0x03   // add	al, byte ptr [rdi + r11 + 3]
	LONG $0x1a448842; BYTE $0x03   // mov	byte ptr [rdx + r11 + 3], al
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB3_17

LBB3_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB3_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB3_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB3_14
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB3_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB3_11

LBB3_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x7fe18341         // and	r9d, 127
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB3_8:
	LONG $0x6f7ea1c4; WORD $0x1604             // vmovdqu	ymm0, ymmword ptr [rsi + r10]
	LONG $0x6f7ea1c4; WORD $0x164c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x1654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x165c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + r10 + 96]
	LONG $0xfc7da1c4; WORD $0x1704             // vpaddb	ymm0, ymm0, ymmword ptr [rdi + r10]
	LONG $0xfc75a1c4; WORD $0x174c; BYTE $0x20 // vpaddb	ymm1, ymm1, ymmword ptr [rdi + r10 + 32]
	LONG $0xfc6da1c4; WORD $0x1754; BYTE $0x40 // vpaddb	ymm2, ymm2, ymmword ptr [rdi + r10 + 64]
	LONG $0xfc65a1c4; WORD $0x175c; BYTE $0x60 // vpaddb	ymm3, ymm3, ymmword ptr [rdi + r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x1204             // vmovdqu	ymmword ptr [rdx + r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x124c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x1254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x125c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + r10 + 96], ymm3
	LONG $0x80ea8349                           // sub	r10, -128
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB3_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB3_18
	LONG $0x10f98341                           // cmp	r9d, 16
	JB   LBB3_14

LBB3_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x0fe28341         // and	r10d, 15
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB3_12:
	LONG $0x6f7aa1c4; WORD $0x0e04 // vmovdqu	xmm0, xmmword ptr [rsi + r9]
	LONG $0xfc79a1c4; WORD $0x0f04 // vpaddb	xmm0, xmm0, xmmword ptr [rdi + r9]
	LONG $0x7f7aa1c4; WORD $0x0a04 // vmovdqu	xmmword ptr [rdx + r9], xmm0
	LONG $0x10c18349               // add	r9, 16
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB3_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB3_14
	JMP  LBB3_18

TEXT ·_uint8_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB4_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB4_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB4_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB4_16

LBB4_15:
	LONG $0x04b60f42; BYTE $0x1f // movzx	eax, byte ptr [rdi + r11]
	LONG $0x1e042a42             // sub	al, byte ptr [rsi + r11]
	LONG $0x1a048842             // mov	byte ptr [rdx + r11], al
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB4_15

LBB4_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB4_18

LBB4_17:
	LONG $0x04b60f42; BYTE $0x1f   // movzx	eax, byte ptr [rdi + r11]
	LONG $0x1e042a42               // sub	al, byte ptr [rsi + r11]
	LONG $0x1a048842               // mov	byte ptr [rdx + r11], al
	LONG $0x44b60f42; WORD $0x011f // movzx	eax, byte ptr [rdi + r11 + 1]
	LONG $0x1e442a42; BYTE $0x01   // sub	al, byte ptr [rsi + r11 + 1]
	LONG $0x1a448842; BYTE $0x01   // mov	byte ptr [rdx + r11 + 1], al
	LONG $0x44b60f42; WORD $0x021f // movzx	eax, byte ptr [rdi + r11 + 2]
	LONG $0x1e442a42; BYTE $0x02   // sub	al, byte ptr [rsi + r11 + 2]
	LONG $0x1a448842; BYTE $0x02   // mov	byte ptr [rdx + r11 + 2], al
	LONG $0x44b60f42; WORD $0x031f // movzx	eax, byte ptr [rdi + r11 + 3]
	LONG $0x1e442a42; BYTE $0x03   // sub	al, byte ptr [rsi + r11 + 3]
	LONG $0x1a448842; BYTE $0x03   // mov	byte ptr [rdx + r11 + 3], al
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB4_17

LBB4_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB4_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB4_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB4_14
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB4_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB4_11

LBB4_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x7fe18341         // and	r9d, 127
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB4_8:
	LONG $0x6f7ea1c4; WORD $0x1704             // vmovdqu	ymm0, ymmword ptr [rdi + r10]
	LONG $0x6f7ea1c4; WORD $0x174c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rdi + r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x1754; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rdi + r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x175c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rdi + r10 + 96]
	LONG $0xf87da1c4; WORD $0x1604             // vpsubb	ymm0, ymm0, ymmword ptr [rsi + r10]
	LONG $0xf875a1c4; WORD $0x164c; BYTE $0x20 // vpsubb	ymm1, ymm1, ymmword ptr [rsi + r10 + 32]
	LONG $0xf86da1c4; WORD $0x1654; BYTE $0x40 // vpsubb	ymm2, ymm2, ymmword ptr [rsi + r10 + 64]
	LONG $0xf865a1c4; WORD $0x165c; BYTE $0x60 // vpsubb	ymm3, ymm3, ymmword ptr [rsi + r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x1204             // vmovdqu	ymmword ptr [rdx + r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x124c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x1254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x125c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + r10 + 96], ymm3
	LONG $0x80ea8349                           // sub	r10, -128
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB4_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB4_18
	LONG $0x10f98341                           // cmp	r9d, 16
	JB   LBB4_14

LBB4_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x0fe28341         // and	r10d, 15
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB4_12:
	LONG $0x6f7aa1c4; WORD $0x0f04 // vmovdqu	xmm0, xmmword ptr [rdi + r9]
	LONG $0xf879a1c4; WORD $0x0e04 // vpsubb	xmm0, xmm0, xmmword ptr [rsi + r9]
	LONG $0x7f7aa1c4; WORD $0x0a04 // vmovdqu	xmmword ptr [rdx + r9], xmm0
	LONG $0x10c18349               // add	r9, 16
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB4_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB4_14
	JMP  LBB4_18

LCPI5_0:
	//

TEXT ·_uint8_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB5_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB5_3
	WORD $0x3145; BYTE $0xc9 // xor	r9d, r9d

LBB5_14:
	WORD $0x2944; BYTE $0xc9 // sub	ecx, r9d
	WORD $0x894d; BYTE $0xca // mov	r10, r9
	WORD $0xf749; BYTE $0xd2 // not	r10
	WORD $0x014d; BYTE $0xc2 // add	r10, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB5_16

LBB5_15:
	LONG $0x04b60f42; BYTE $0x0e // movzx	eax, byte ptr [rsi + r9]
	LONG $0x0f24f642             // mul	byte ptr [rdi + r9]
	LONG $0x0a048842             // mov	byte ptr [rdx + r9], al
	WORD $0xff49; BYTE $0xc1     // inc	r9
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB5_15

LBB5_16:
	LONG $0x03fa8349 // cmp	r10, 3
	JB   LBB5_18

LBB5_17:
	LONG $0x04b60f42; BYTE $0x0e   // movzx	eax, byte ptr [rsi + r9]
	LONG $0x0f24f642               // mul	byte ptr [rdi + r9]
	LONG $0x0a048842               // mov	byte ptr [rdx + r9], al
	LONG $0x44b60f42; WORD $0x010e // movzx	eax, byte ptr [rsi + r9 + 1]
	LONG $0x0f64f642; BYTE $0x01   // mul	byte ptr [rdi + r9 + 1]
	LONG $0x0a448842; BYTE $0x01   // mov	byte ptr [rdx + r9 + 1], al
	LONG $0x44b60f42; WORD $0x020e // movzx	eax, byte ptr [rsi + r9 + 2]
	LONG $0x0f64f642; BYTE $0x02   // mul	byte ptr [rdi + r9 + 2]
	LONG $0x0a448842; BYTE $0x02   // mov	byte ptr [rdx + r9 + 2], al
	LONG $0x44b60f42; WORD $0x030e // movzx	eax, byte ptr [rsi + r9 + 3]
	LONG $0x0f64f642; BYTE $0x03   // mul	byte ptr [rdi + r9 + 3]
	LONG $0x0a448842; BYTE $0x03   // mov	byte ptr [rdx + r9 + 3], al
	LONG $0x04c18349               // add	r9, 4
	WORD $0x394d; BYTE $0xc8       // cmp	r8, r9
	JNE  LBB5_17

LBB5_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB5_3:
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf8                   // sub	rax, rdi
	WORD $0x3145; BYTE $0xc9                   // xor	r9d, r9d
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB5_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB5_14
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB5_7
	WORD $0x3145; BYTE $0xc9                   // xor	r9d, r9d
	JMP  LBB5_11

LBB5_7:
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x7fe28341         // and	r10d, 127
	WORD $0x894d; BYTE $0xc1 // mov	r9, r8
	WORD $0x294d; BYTE $0xd1 // sub	r9, r10
	WORD $0xc031             // xor	eax, eax
	QUAD $0x0000014b056ffec5 // vmovdqu	ymm0, ymmword ptr [rip + .LCPI5_0]

LBB5_8:
	LONG $0x1c6ffec5; BYTE $0x07   // vmovdqu	ymm3, ymmword ptr [rdi + rax]
	LONG $0x646ffec5; WORD $0x2007 // vmovdqu	ymm4, ymmword ptr [rdi + rax + 32]
	LONG $0x6c6ffec5; WORD $0x4007 // vmovdqu	ymm5, ymmword ptr [rdi + rax + 64]
	LONG $0x4c6ffec5; WORD $0x6007 // vmovdqu	ymm1, ymmword ptr [rdi + rax + 96]
	LONG $0x346ffec5; BYTE $0x06   // vmovdqu	ymm6, ymmword ptr [rsi + rax]
	LONG $0x7c6ffec5; WORD $0x2006 // vmovdqu	ymm7, ymmword ptr [rsi + rax + 32]
	LONG $0x446f7ec5; WORD $0x4006 // vmovdqu	ymm8, ymmword ptr [rsi + rax + 64]
	LONG $0x546ffec5; WORD $0x6006 // vmovdqu	ymm2, ymmword ptr [rsi + rax + 96]
	LONG $0xcb6865c5               // vpunpckhbw	ymm9, ymm3, ymm3
	LONG $0xd6684dc5               // vpunpckhbw	ymm10, ymm6, ymm6
	LONG $0xd52d41c4; BYTE $0xc9   // vpmullw	ymm9, ymm10, ymm9
	LONG $0xc8db35c5               // vpand	ymm9, ymm9, ymm0
	LONG $0xdb60e5c5               // vpunpcklbw	ymm3, ymm3, ymm3
	LONG $0xf660cdc5               // vpunpcklbw	ymm6, ymm6, ymm6
	LONG $0xdbd5cdc5               // vpmullw	ymm3, ymm6, ymm3
	LONG $0xd8dbe5c5               // vpand	ymm3, ymm3, ymm0
	LONG $0x6765c1c4; BYTE $0xd9   // vpackuswb	ymm3, ymm3, ymm9
	LONG $0xf468ddc5               // vpunpckhbw	ymm6, ymm4, ymm4
	LONG $0xcf6845c5               // vpunpckhbw	ymm9, ymm7, ymm7
	LONG $0xf6d5b5c5               // vpmullw	ymm6, ymm9, ymm6
	LONG $0xf0dbcdc5               // vpand	ymm6, ymm6, ymm0
	LONG $0xe460ddc5               // vpunpcklbw	ymm4, ymm4, ymm4
	LONG $0xff60c5c5               // vpunpcklbw	ymm7, ymm7, ymm7
	LONG $0xe4d5c5c5               // vpmullw	ymm4, ymm7, ymm4
	LONG $0xe0dbddc5               // vpand	ymm4, ymm4, ymm0
	LONG $0xe667ddc5               // vpackuswb	ymm4, ymm4, ymm6
	LONG $0xf568d5c5               // vpunpckhbw	ymm6, ymm5, ymm5
	LONG $0x683dc1c4; BYTE $0xf8   // vpunpckhbw	ymm7, ymm8, ymm8
	LONG $0xf6d5c5c5               // vpmullw	ymm6, ymm7, ymm6
	LONG $0xf0dbcdc5               // vpand	ymm6, ymm6, ymm0
	LONG $0xed60d5c5               // vpunpcklbw	ymm5, ymm5, ymm5
	LONG $0x603dc1c4; BYTE $0xf8   // vpunpcklbw	ymm7, ymm8, ymm8
	LONG $0xedd5c5c5               // vpmullw	ymm5, ymm7, ymm5
	LONG $0xe8dbd5c5               // vpand	ymm5, ymm5, ymm0
	LONG $0xee67d5c5               // vpackuswb	ymm5, ymm5, ymm6
	LONG $0xf168f5c5               // vpunpckhbw	ymm6, ymm1, ymm1
	LONG $0xfa68edc5               // vpunpckhbw	ymm7, ymm2, ymm2
	LONG $0xf6d5c5c5               // vpmullw	ymm6, ymm7, ymm6
	LONG $0xf0dbcdc5               // vpand	ymm6, ymm6, ymm0
	LONG $0xc960f5c5               // vpunpcklbw	ymm1, ymm1, ymm1
	LONG $0xd260edc5               // vpunpcklbw	ymm2, ymm2, ymm2
	LONG $0xc9d5edc5               // vpmullw	ymm1, ymm2, ymm1
	LONG $0xc8dbf5c5               // vpand	ymm1, ymm1, ymm0
	LONG $0xce67f5c5               // vpackuswb	ymm1, ymm1, ymm6
	LONG $0x1c7ffec5; BYTE $0x02   // vmovdqu	ymmword ptr [rdx + rax], ymm3
	LONG $0x647ffec5; WORD $0x2002 // vmovdqu	ymmword ptr [rdx + rax + 32], ymm4
	LONG $0x6c7ffec5; WORD $0x4002 // vmovdqu	ymmword ptr [rdx + rax + 64], ymm5
	LONG $0x4c7ffec5; WORD $0x6002 // vmovdqu	ymmword ptr [rdx + rax + 96], ymm1
	LONG $0x80e88348               // sub	rax, -128
	WORD $0x3949; BYTE $0xc1       // cmp	r9, rax
	JNE  LBB5_8
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JE   LBB5_18
	LONG $0x10fa8341               // cmp	r10d, 16
	JB   LBB5_14

LBB5_11:
	WORD $0x894c; BYTE $0xc8 // mov	rax, r9
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x0fe28341         // and	r10d, 15
	WORD $0x894d; BYTE $0xc1 // mov	r9, r8
	WORD $0x294d; BYTE $0xd1 // sub	r9, r10
	QUAD $0x0000003a056ffec5 // vmovdqu	ymm0, ymmword ptr [rip + .LCPI5_0]

LBB5_12:
	LONG $0x307de2c4; WORD $0x070c // vpmovzxbw	ymm1, xmmword ptr [rdi + rax]
	LONG $0x307de2c4; WORD $0x0614 // vpmovzxbw	ymm2, xmmword ptr [rsi + rax]
	LONG $0xc9d5edc5               // vpmullw	ymm1, ymm2, ymm1
	LONG $0xc8dbf5c5               // vpand	ymm1, ymm1, ymm0
	LONG $0x397de3c4; WORD $0x01ca // vextracti128	xmm2, ymm1, 1
	LONG $0xca67f1c5               // vpackuswb	xmm1, xmm1, xmm2
	LONG $0x0c7ffac5; BYTE $0x02   // vmovdqu	xmmword ptr [rdx + rax], xmm1
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3949; BYTE $0xc1       // cmp	r9, rax
	JNE  LBB5_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB5_14
	JMP  LBB5_18
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff

TEXT ·_uint8_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	WORD $0x5741             // push	r15
	WORD $0x5641             // push	r14
	BYTE $0x53               // push	rbx
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB6_12
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x20f98349         // cmp	r9, 32
	JAE  LBB6_3
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB6_8

LBB6_3:
	WORD $0x8948; BYTE $0xd0 // mov	rax, rdx
	WORD $0x2948; BYTE $0xf8 // sub	rax, rdi
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB6_8
	WORD $0x8948; BYTE $0xd0 // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0 // sub	rax, rsi
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB6_8
	WORD $0x8941; BYTE $0xcb // mov	r11d, ecx
	LONG $0x1fe38341         // and	r11d, 31
	WORD $0x894d; BYTE $0xca // mov	r10, r9
	WORD $0x294d; BYTE $0xda // sub	r10, r11
	WORD $0x3145; BYTE $0xf6 // xor	r14d, r14d

LBB6_6:
	LONG $0x6f7aa1c4; WORD $0x3614             // vmovdqu	xmm2, xmmword ptr [rsi + r14]
	LONG $0x6f7aa1c4; WORD $0x3644; BYTE $0x10 // vmovdqu	xmm0, xmmword ptr [rsi + r14 + 16]
	LONG $0x1479e3c4; WORD $0x01d3             // vpextrb	ebx, xmm2, 1
	LONG $0x6f7aa1c4; WORD $0x371c             // vmovdqu	xmm3, xmmword ptr [rdi + r14]
	LONG $0x6f7aa1c4; WORD $0x374c; BYTE $0x10 // vmovdqu	xmm1, xmmword ptr [rdi + r14 + 16]
	LONG $0x1479e3c4; WORD $0x01d8             // vpextrb	eax, xmm3, 1
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	LONG $0xc0b60f44                           // movzx	r8d, al
	LONG $0xd37ef9c5                           // vmovd	ebx, xmm2
	LONG $0xd87ef9c5                           // vmovd	eax, xmm3
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0xe06ef9c5                           // vmovd	xmm4, eax
	LONG $0x2059c3c4; WORD $0x01e0             // vpinsrb	xmm4, xmm4, r8d, 1
	LONG $0x1479e3c4; WORD $0x02d3             // vpextrb	ebx, xmm2, 2
	LONG $0x1479e3c4; WORD $0x02d8             // vpextrb	eax, xmm3, 2
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x02e0             // vpinsrb	xmm4, xmm4, eax, 2
	LONG $0x1479e3c4; WORD $0x03d3             // vpextrb	ebx, xmm2, 3
	LONG $0x1479e3c4; WORD $0x03d8             // vpextrb	eax, xmm3, 3
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x03e0             // vpinsrb	xmm4, xmm4, eax, 3
	LONG $0x1479e3c4; WORD $0x04d3             // vpextrb	ebx, xmm2, 4
	LONG $0x1479e3c4; WORD $0x04d8             // vpextrb	eax, xmm3, 4
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x04e0             // vpinsrb	xmm4, xmm4, eax, 4
	LONG $0x1479e3c4; WORD $0x05d3             // vpextrb	ebx, xmm2, 5
	LONG $0x1479e3c4; WORD $0x05d8             // vpextrb	eax, xmm3, 5
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x05e0             // vpinsrb	xmm4, xmm4, eax, 5
	LONG $0x1479e3c4; WORD $0x06d3             // vpextrb	ebx, xmm2, 6
	LONG $0x1479e3c4; WORD $0x06d8             // vpextrb	eax, xmm3, 6
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x06e0             // vpinsrb	xmm4, xmm4, eax, 6
	LONG $0x1479e3c4; WORD $0x07d3             // vpextrb	ebx, xmm2, 7
	LONG $0x1479e3c4; WORD $0x07d8             // vpextrb	eax, xmm3, 7
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x07e0             // vpinsrb	xmm4, xmm4, eax, 7
	LONG $0x1479e3c4; WORD $0x08d3             // vpextrb	ebx, xmm2, 8
	LONG $0x1479e3c4; WORD $0x08d8             // vpextrb	eax, xmm3, 8
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x08e0             // vpinsrb	xmm4, xmm4, eax, 8
	LONG $0x1479e3c4; WORD $0x09d3             // vpextrb	ebx, xmm2, 9
	LONG $0x1479e3c4; WORD $0x09d8             // vpextrb	eax, xmm3, 9
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x09e0             // vpinsrb	xmm4, xmm4, eax, 9
	LONG $0x1479e3c4; WORD $0x0ad3             // vpextrb	ebx, xmm2, 10
	LONG $0x1479e3c4; WORD $0x0ad8             // vpextrb	eax, xmm3, 10
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x0ae0             // vpinsrb	xmm4, xmm4, eax, 10
	LONG $0x1479e3c4; WORD $0x0bd3             // vpextrb	ebx, xmm2, 11
	LONG $0x1479e3c4; WORD $0x0bd8             // vpextrb	eax, xmm3, 11
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x0be0             // vpinsrb	xmm4, xmm4, eax, 11
	LONG $0x1479e3c4; WORD $0x0cd3             // vpextrb	ebx, xmm2, 12
	LONG $0x1479e3c4; WORD $0x0cd8             // vpextrb	eax, xmm3, 12
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x0ce0             // vpinsrb	xmm4, xmm4, eax, 12
	LONG $0x1479e3c4; WORD $0x0dd3             // vpextrb	ebx, xmm2, 13
	LONG $0x1479e3c4; WORD $0x0dd8             // vpextrb	eax, xmm3, 13
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x0de0             // vpinsrb	xmm4, xmm4, eax, 13
	LONG $0x1479e3c4; WORD $0x0ed3             // vpextrb	ebx, xmm2, 14
	LONG $0x1479e3c4; WORD $0x0ed8             // vpextrb	eax, xmm3, 14
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x0ee0             // vpinsrb	xmm4, xmm4, eax, 14
	LONG $0x1479e3c4; WORD $0x0fd3             // vpextrb	ebx, xmm2, 15
	LONG $0x1479e3c4; WORD $0x0fd8             // vpextrb	eax, xmm3, 15
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2059e3c4; WORD $0x0fd0             // vpinsrb	xmm2, xmm4, eax, 15
	LONG $0x1479e3c4; WORD $0x01c3             // vpextrb	ebx, xmm0, 1
	LONG $0x1479e3c4; WORD $0x01c8             // vpextrb	eax, xmm1, 1
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	LONG $0xc0b60f44                           // movzx	r8d, al
	LONG $0xc37ef9c5                           // vmovd	ebx, xmm0
	LONG $0xc87ef9c5                           // vmovd	eax, xmm1
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0xd86ef9c5                           // vmovd	xmm3, eax
	LONG $0x2061c3c4; WORD $0x01d8             // vpinsrb	xmm3, xmm3, r8d, 1
	LONG $0x1479e3c4; WORD $0x02c3             // vpextrb	ebx, xmm0, 2
	LONG $0x1479e3c4; WORD $0x02c8             // vpextrb	eax, xmm1, 2
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x02d8             // vpinsrb	xmm3, xmm3, eax, 2
	LONG $0x1479e3c4; WORD $0x03c3             // vpextrb	ebx, xmm0, 3
	LONG $0x1479e3c4; WORD $0x03c8             // vpextrb	eax, xmm1, 3
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x03d8             // vpinsrb	xmm3, xmm3, eax, 3
	LONG $0x1479e3c4; WORD $0x04c3             // vpextrb	ebx, xmm0, 4
	LONG $0x1479e3c4; WORD $0x04c8             // vpextrb	eax, xmm1, 4
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x04d8             // vpinsrb	xmm3, xmm3, eax, 4
	LONG $0x1479e3c4; WORD $0x05c3             // vpextrb	ebx, xmm0, 5
	LONG $0x1479e3c4; WORD $0x05c8             // vpextrb	eax, xmm1, 5
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x05d8             // vpinsrb	xmm3, xmm3, eax, 5
	LONG $0x1479e3c4; WORD $0x06c3             // vpextrb	ebx, xmm0, 6
	LONG $0x1479e3c4; WORD $0x06c8             // vpextrb	eax, xmm1, 6
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x06d8             // vpinsrb	xmm3, xmm3, eax, 6
	LONG $0x1479e3c4; WORD $0x07c3             // vpextrb	ebx, xmm0, 7
	LONG $0x1479e3c4; WORD $0x07c8             // vpextrb	eax, xmm1, 7
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x07d8             // vpinsrb	xmm3, xmm3, eax, 7
	LONG $0x1479e3c4; WORD $0x08c3             // vpextrb	ebx, xmm0, 8
	LONG $0x1479e3c4; WORD $0x08c8             // vpextrb	eax, xmm1, 8
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x08d8             // vpinsrb	xmm3, xmm3, eax, 8
	LONG $0x1479e3c4; WORD $0x09c3             // vpextrb	ebx, xmm0, 9
	LONG $0x1479e3c4; WORD $0x09c8             // vpextrb	eax, xmm1, 9
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x09d8             // vpinsrb	xmm3, xmm3, eax, 9
	LONG $0x1479e3c4; WORD $0x0ac3             // vpextrb	ebx, xmm0, 10
	LONG $0x1479e3c4; WORD $0x0ac8             // vpextrb	eax, xmm1, 10
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x0ad8             // vpinsrb	xmm3, xmm3, eax, 10
	LONG $0x1479e3c4; WORD $0x0bc3             // vpextrb	ebx, xmm0, 11
	LONG $0x1479e3c4; WORD $0x0bc8             // vpextrb	eax, xmm1, 11
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x0bd8             // vpinsrb	xmm3, xmm3, eax, 11
	LONG $0x1479e3c4; WORD $0x0cc3             // vpextrb	ebx, xmm0, 12
	LONG $0x1479e3c4; WORD $0x0cc8             // vpextrb	eax, xmm1, 12
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x0cd8             // vpinsrb	xmm3, xmm3, eax, 12
	LONG $0x1479e3c4; WORD $0x0dc3             // vpextrb	ebx, xmm0, 13
	LONG $0x1479e3c4; WORD $0x0dc8             // vpextrb	eax, xmm1, 13
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	WORD $0xf3f6                               // div	bl
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2061e3c4; WORD $0x0dd8             // vpinsrb	xmm3, xmm3, eax, 13
	LONG $0x1479c3c4; WORD $0x0ec0             // vpextrb	r8d, xmm0, 14
	LONG $0x1479e3c4; WORD $0x0ec8             // vpextrb	eax, xmm1, 14
	LONG $0x1479c3c4; WORD $0x0fc7             // vpextrb	r15d, xmm0, 15
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x1479e3c4; WORD $0x0fcb             // vpextrb	ebx, xmm1, 15
	WORD $0xf641; BYTE $0xf0                   // div	r8b
	WORD $0x8941; BYTE $0xc0                   // mov	r8d, eax
	WORD $0xb60f; BYTE $0xc3                   // movzx	eax, bl
	WORD $0xf641; BYTE $0xf7                   // div	r15b
	LONG $0xd8b60f41                           // movzx	ebx, r8b
	LONG $0x2061e3c4; WORD $0x0ec3             // vpinsrb	xmm0, xmm3, ebx, 14
	WORD $0xb60f; BYTE $0xc0                   // movzx	eax, al
	LONG $0x2079e3c4; WORD $0x0fc0             // vpinsrb	xmm0, xmm0, eax, 15
	LONG $0x7f7aa1c4; WORD $0x3244; BYTE $0x10 // vmovdqu	xmmword ptr [rdx + r14 + 16], xmm0
	LONG $0x7f7aa1c4; WORD $0x3214             // vmovdqu	xmmword ptr [rdx + r14], xmm2
	LONG $0x20c68349                           // add	r14, 32
	WORD $0x394d; BYTE $0xf2                   // cmp	r10, r14
	JNE  LBB6_6
	WORD $0x854d; BYTE $0xdb                   // test	r11, r11
	JE   LBB6_12

LBB6_8:
	WORD $0x2944; BYTE $0xd1     // sub	ecx, r10d
	LONG $0x015a8d49             // lea	rbx, [r10 + 1]
	WORD $0xc1f6; BYTE $0x01     // test	cl, 1
	JE   LBB6_10
	LONG $0x04b60f42; BYTE $0x17 // movzx	eax, byte ptr [rdi + r10]
	LONG $0x1634f642             // div	byte ptr [rsi + r10]
	LONG $0x12048842             // mov	byte ptr [rdx + r10], al
	WORD $0x8949; BYTE $0xda     // mov	r10, rbx

LBB6_10:
	WORD $0x3949; BYTE $0xd9 // cmp	r9, rbx
	JE   LBB6_12

LBB6_11:
	LONG $0x04b60f42; BYTE $0x17   // movzx	eax, byte ptr [rdi + r10]
	LONG $0x1634f642               // div	byte ptr [rsi + r10]
	LONG $0x12048842               // mov	byte ptr [rdx + r10], al
	LONG $0x44b60f42; WORD $0x0117 // movzx	eax, byte ptr [rdi + r10 + 1]
	LONG $0x1674f642; BYTE $0x01   // div	byte ptr [rsi + r10 + 1]
	LONG $0x12448842; BYTE $0x01   // mov	byte ptr [rdx + r10 + 1], al
	LONG $0x02c28349               // add	r10, 2
	WORD $0x394d; BYTE $0xd1       // cmp	r9, r10
	JNE  LBB6_11

LBB6_12:
	LONG $0xe8658d48 // lea	rsp, [rbp - 24]
	BYTE $0x5b       // pop	rbx
	WORD $0x5e41     // pop	r14
	WORD $0x5f41     // pop	r15
	BYTE $0x5d       // pop	rbp
	BYTE $0xc3       // ret

TEXT ·_uint16_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB7_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB7_4
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	WORD $0xc031             // xor	eax, eax
	JMP  LBB7_13

LBB7_1:
	WORD $0xc031 // xor	eax, eax
	JMP  LBB7_14

LBB7_4:
	LONG $0x40f88341         // cmp	r8d, 64
	JAE  LBB7_6
	WORD $0xc031             // xor	eax, eax
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB7_10

LBB7_6:
	WORD $0x8941; BYTE $0xd1 // mov	r9d, edx
	LONG $0x3fe18341         // and	r9d, 63
	WORD $0x894d; BYTE $0xc2 // mov	r10, r8
	WORD $0x294d; BYTE $0xca // sub	r10, r9
	LONG $0xc0eff9c5         // vpxor	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc9eff1c5         // vpxor	xmm1, xmm1, xmm1
	LONG $0xd2efe9c5         // vpxor	xmm2, xmm2, xmm2
	LONG $0xdbefe1c5         // vpxor	xmm3, xmm3, xmm3

LBB7_7:
	LONG $0x04fdfdc5; BYTE $0x47   // vpaddw	ymm0, ymm0, ymmword ptr [rdi + 2*rax]
	LONG $0x4cfdf5c5; WORD $0x2047 // vpaddw	ymm1, ymm1, ymmword ptr [rdi + 2*rax + 32]
	LONG $0x54fdedc5; WORD $0x4047 // vpaddw	ymm2, ymm2, ymmword ptr [rdi + 2*rax + 64]
	LONG $0x5cfde5c5; WORD $0x6047 // vpaddw	ymm3, ymm3, ymmword ptr [rdi + 2*rax + 96]
	LONG $0x40c08348               // add	rax, 64
	WORD $0x3949; BYTE $0xc2       // cmp	r10, rax
	JNE  LBB7_7
	LONG $0xc0fdf5c5               // vpaddw	ymm0, ymm1, ymm0
	LONG $0xc0fdedc5               // vpaddw	ymm0, ymm2, ymm0
	LONG $0xc0fde5c5               // vpaddw	ymm0, ymm3, ymm0
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1fdf9c5               // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee   // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fdf9c5               // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55   // vpshufd	xmm1, xmm0, 85
	LONG $0xc1fdf9c5               // vpaddw	xmm0, xmm0, xmm1
	LONG $0xd072f1c5; BYTE $0x10   // vpsrld	xmm1, xmm0, 16
	LONG $0xc1fdf9c5               // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0x854d; BYTE $0xc9       // test	r9, r9
	JE   LBB7_14
	LONG $0x08f98341               // cmp	r9d, 8
	JB   LBB7_13

LBB7_10:
	WORD $0x894c; BYTE $0xd1 // mov	rcx, r10
	WORD $0xe283; BYTE $0x07 // and	edx, 7
	WORD $0x894d; BYTE $0xc2 // mov	r10, r8
	WORD $0x2949; BYTE $0xd2 // sub	r10, rdx
	WORD $0xb70f; BYTE $0xc0 // movzx	eax, ax
	LONG $0xc06ef9c5         // vmovd	xmm0, eax

LBB7_11:
	LONG $0x04fdf9c5; BYTE $0x4f // vpaddw	xmm0, xmm0, xmmword ptr [rdi + 2*rcx]
	LONG $0x08c18348             // add	rcx, 8
	WORD $0x3949; BYTE $0xca     // cmp	r10, rcx
	JNE  LBB7_11
	LONG $0xc870f9c5; BYTE $0xee // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fdf9c5             // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55 // vpshufd	xmm1, xmm0, 85
	LONG $0xc1fdf9c5             // vpaddw	xmm0, xmm0, xmm1
	LONG $0xd072f1c5; BYTE $0x10 // vpsrld	xmm1, xmm0, 16
	LONG $0xc1fdf9c5             // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5             // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2     // test	rdx, rdx
	JE   LBB7_14

LBB7_13:
	LONG $0x04034266; BYTE $0x57 // add	ax, word ptr [rdi + 2*r10]
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB7_13

LBB7_14:
	WORD $0x8966; BYTE $0x06 // mov	word ptr [rsi], ax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint16_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xb70f; BYTE $0x07 // movzx	eax, word ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB8_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB8_4
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB8_14

LBB8_1:
	WORD $0xc189 // mov	ecx, eax

LBB8_15:
	WORD $0x8966; BYTE $0x0e // mov	word ptr [rsi], cx
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB8_4:
	LONG $0x40f88341         // cmp	r8d, 64
	JAE  LBB8_6
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB8_11

LBB8_6:
	WORD $0x8941; BYTE $0xd1     // mov	r9d, edx
	LONG $0x3fe18341             // and	r9d, 63
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x294d; BYTE $0xca     // sub	r10, r9
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x797de2c4; BYTE $0xc0 // vpbroadcastw	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB8_7:
	LONG $0x3a7de2c4; WORD $0x4704             // vpminuw	ymm0, ymm0, ymmword ptr [rdi + 2*rax]
	LONG $0x3a75e2c4; WORD $0x474c; BYTE $0x20 // vpminuw	ymm1, ymm1, ymmword ptr [rdi + 2*rax + 32]
	LONG $0x3a6de2c4; WORD $0x4754; BYTE $0x40 // vpminuw	ymm2, ymm2, ymmword ptr [rdi + 2*rax + 64]
	LONG $0x3a65e2c4; WORD $0x475c; BYTE $0x60 // vpminuw	ymm3, ymm3, ymmword ptr [rdi + 2*rax + 96]
	LONG $0x40c08348                           // add	rax, 64
	WORD $0x3949; BYTE $0xc2                   // cmp	r10, rax
	JNE  LBB8_7
	LONG $0x3a7de2c4; BYTE $0xc1               // vpminuw	ymm0, ymm0, ymm1
	LONG $0x3a7de2c4; BYTE $0xc2               // vpminuw	ymm0, ymm0, ymm2
	LONG $0x3a7de2c4; BYTE $0xc3               // vpminuw	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	xmm1, ymm0, 1
	LONG $0x3a79e2c4; BYTE $0xc1               // vpminuw	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0               // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5                           // vmovd	eax, xmm0
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB8_9
	LONG $0x08f98341                           // cmp	r9d, 8
	JB   LBB8_14

LBB8_11:
	WORD $0x894c; BYTE $0xd1     // mov	rcx, r10
	WORD $0xe283; BYTE $0x07     // and	edx, 7
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x2949; BYTE $0xd2     // sub	r10, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x7979e2c4; BYTE $0xc0 // vpbroadcastw	xmm0, xmm0

LBB8_12:
	LONG $0x3a79e2c4; WORD $0x4f04 // vpminuw	xmm0, xmm0, xmmword ptr [rdi + 2*rcx]
	LONG $0x08c18348               // add	rcx, 8
	WORD $0x3949; BYTE $0xca       // cmp	r10, rcx
	JNE  LBB8_12
	LONG $0x4179e2c4; BYTE $0xc0   // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0xc189                   // mov	ecx, eax
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB8_15

LBB8_14:
	LONG $0x0cb70f42; BYTE $0x57 // movzx	ecx, word ptr [rdi + 2*r10]
	WORD $0x3966; BYTE $0xc1     // cmp	cx, ax
	WORD $0x430f; BYTE $0xc8     // cmovae	ecx, eax
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0xc889                 // mov	eax, ecx
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB8_14
	JMP  LBB8_15

LBB8_9:
	WORD $0xc189             // mov	ecx, eax
	WORD $0x8966; BYTE $0x0e // mov	word ptr [rsi], cx
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint16_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xb70f; BYTE $0x07 // movzx	eax, word ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB9_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB9_4
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB9_14

LBB9_1:
	WORD $0xc189 // mov	ecx, eax

LBB9_15:
	WORD $0x8966; BYTE $0x0e // mov	word ptr [rsi], cx
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB9_4:
	LONG $0x40f88341         // cmp	r8d, 64
	JAE  LBB9_6
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB9_11

LBB9_6:
	WORD $0x8941; BYTE $0xd1     // mov	r9d, edx
	LONG $0x3fe18341             // and	r9d, 63
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x294d; BYTE $0xca     // sub	r10, r9
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x797de2c4; BYTE $0xc0 // vpbroadcastw	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB9_7:
	LONG $0x3e7de2c4; WORD $0x4704             // vpmaxuw	ymm0, ymm0, ymmword ptr [rdi + 2*rax]
	LONG $0x3e75e2c4; WORD $0x474c; BYTE $0x20 // vpmaxuw	ymm1, ymm1, ymmword ptr [rdi + 2*rax + 32]
	LONG $0x3e6de2c4; WORD $0x4754; BYTE $0x40 // vpmaxuw	ymm2, ymm2, ymmword ptr [rdi + 2*rax + 64]
	LONG $0x3e65e2c4; WORD $0x475c; BYTE $0x60 // vpmaxuw	ymm3, ymm3, ymmword ptr [rdi + 2*rax + 96]
	LONG $0x40c08348                           // add	rax, 64
	WORD $0x3949; BYTE $0xc2                   // cmp	r10, rax
	JNE  LBB9_7
	LONG $0x3e7de2c4; BYTE $0xc1               // vpmaxuw	ymm0, ymm0, ymm1
	LONG $0x3e7de2c4; BYTE $0xc2               // vpmaxuw	ymm0, ymm0, ymm2
	LONG $0x3e7de2c4; BYTE $0xc3               // vpmaxuw	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	xmm1, ymm0, 1
	LONG $0x3e79e2c4; BYTE $0xc1               // vpmaxuw	xmm0, xmm0, xmm1
	LONG $0xc976f1c5                           // vpcmpeqd	xmm1, xmm1, xmm1
	LONG $0xc1eff9c5                           // vpxor	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0               // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5                           // vmovd	eax, xmm0
	WORD $0xd0f7                               // not	eax
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB9_9
	LONG $0x08f98341                           // cmp	r9d, 8
	JB   LBB9_14

LBB9_11:
	WORD $0x894c; BYTE $0xd1     // mov	rcx, r10
	WORD $0xe283; BYTE $0x07     // and	edx, 7
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x2949; BYTE $0xd2     // sub	r10, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x7979e2c4; BYTE $0xc0 // vpbroadcastw	xmm0, xmm0

LBB9_12:
	LONG $0x3e79e2c4; WORD $0x4f04 // vpmaxuw	xmm0, xmm0, xmmword ptr [rdi + 2*rcx]
	LONG $0x08c18348               // add	rcx, 8
	WORD $0x3949; BYTE $0xca       // cmp	r10, rcx
	JNE  LBB9_12
	LONG $0xc976f1c5               // vpcmpeqd	xmm1, xmm1, xmm1
	LONG $0xc1eff9c5               // vpxor	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0   // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0xd0f7                   // not	eax
	WORD $0xc189                   // mov	ecx, eax
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB9_15

LBB9_14:
	LONG $0x0cb70f42; BYTE $0x57 // movzx	ecx, word ptr [rdi + 2*r10]
	WORD $0x3966; BYTE $0xc1     // cmp	cx, ax
	WORD $0x460f; BYTE $0xc8     // cmovbe	ecx, eax
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0xc889                 // mov	eax, ecx
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB9_14
	JMP  LBB9_15

LBB9_9:
	WORD $0xc189             // mov	ecx, eax
	WORD $0x8966; BYTE $0x0e // mov	word ptr [rsi], cx
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint16_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB10_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB10_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB10_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB10_16

LBB10_15:
	LONG $0x04b70f42; BYTE $0x5e // movzx	eax, word ptr [rsi + 2*r11]
	LONG $0x04034266; BYTE $0x5f // add	ax, word ptr [rdi + 2*r11]
	LONG $0x04894266; BYTE $0x5a // mov	word ptr [rdx + 2*r11], ax
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB10_15

LBB10_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB10_18

LBB10_17:
	LONG $0x04b70f42; BYTE $0x5e   // movzx	eax, word ptr [rsi + 2*r11]
	LONG $0x04034266; BYTE $0x5f   // add	ax, word ptr [rdi + 2*r11]
	LONG $0x04894266; BYTE $0x5a   // mov	word ptr [rdx + 2*r11], ax
	LONG $0x44b70f42; WORD $0x025e // movzx	eax, word ptr [rsi + 2*r11 + 2]
	LONG $0x44034266; WORD $0x025f // add	ax, word ptr [rdi + 2*r11 + 2]
	LONG $0x44894266; WORD $0x025a // mov	word ptr [rdx + 2*r11 + 2], ax
	LONG $0x44b70f42; WORD $0x045e // movzx	eax, word ptr [rsi + 2*r11 + 4]
	LONG $0x44034266; WORD $0x045f // add	ax, word ptr [rdi + 2*r11 + 4]
	LONG $0x44894266; WORD $0x045a // mov	word ptr [rdx + 2*r11 + 4], ax
	LONG $0x44b70f42; WORD $0x065e // movzx	eax, word ptr [rsi + 2*r11 + 6]
	LONG $0x44034266; WORD $0x065f // add	ax, word ptr [rdi + 2*r11 + 6]
	LONG $0x44894266; WORD $0x065a // mov	word ptr [rdx + 2*r11 + 6], ax
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB10_17

LBB10_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB10_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB10_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB10_14
	LONG $0x40f88341                           // cmp	r8d, 64
	JAE  LBB10_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB10_11

LBB10_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x3fe18341         // and	r9d, 63
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB10_8:
	LONG $0x6f7ea1c4; WORD $0x5604             // vmovdqu	ymm0, ymmword ptr [rsi + 2*r10]
	LONG $0x6f7ea1c4; WORD $0x564c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 2*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x5654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 2*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x565c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 2*r10 + 96]
	LONG $0xfd7da1c4; WORD $0x5704             // vpaddw	ymm0, ymm0, ymmword ptr [rdi + 2*r10]
	LONG $0xfd75a1c4; WORD $0x574c; BYTE $0x20 // vpaddw	ymm1, ymm1, ymmword ptr [rdi + 2*r10 + 32]
	LONG $0xfd6da1c4; WORD $0x5754; BYTE $0x40 // vpaddw	ymm2, ymm2, ymmword ptr [rdi + 2*r10 + 64]
	LONG $0xfd65a1c4; WORD $0x575c; BYTE $0x60 // vpaddw	ymm3, ymm3, ymmword ptr [rdi + 2*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x5204             // vmovdqu	ymmword ptr [rdx + 2*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x524c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 2*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x5254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 2*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x525c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 2*r10 + 96], ymm3
	LONG $0x40c28349                           // add	r10, 64
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB10_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB10_18
	LONG $0x08f98341                           // cmp	r9d, 8
	JB   LBB10_14

LBB10_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x07e28341         // and	r10d, 7
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB10_12:
	LONG $0x6f7aa1c4; WORD $0x4e04 // vmovdqu	xmm0, xmmword ptr [rsi + 2*r9]
	LONG $0xfd79a1c4; WORD $0x4f04 // vpaddw	xmm0, xmm0, xmmword ptr [rdi + 2*r9]
	LONG $0x7f7aa1c4; WORD $0x4a04 // vmovdqu	xmmword ptr [rdx + 2*r9], xmm0
	LONG $0x08c18349               // add	r9, 8
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB10_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB10_14
	JMP  LBB10_18

TEXT ·_uint16_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB11_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB11_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB11_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB11_16

LBB11_15:
	LONG $0x04b70f42; BYTE $0x5f // movzx	eax, word ptr [rdi + 2*r11]
	LONG $0x042b4266; BYTE $0x5e // sub	ax, word ptr [rsi + 2*r11]
	LONG $0x04894266; BYTE $0x5a // mov	word ptr [rdx + 2*r11], ax
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB11_15

LBB11_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB11_18

LBB11_17:
	LONG $0x04b70f42; BYTE $0x5f   // movzx	eax, word ptr [rdi + 2*r11]
	LONG $0x042b4266; BYTE $0x5e   // sub	ax, word ptr [rsi + 2*r11]
	LONG $0x04894266; BYTE $0x5a   // mov	word ptr [rdx + 2*r11], ax
	LONG $0x44b70f42; WORD $0x025f // movzx	eax, word ptr [rdi + 2*r11 + 2]
	LONG $0x442b4266; WORD $0x025e // sub	ax, word ptr [rsi + 2*r11 + 2]
	LONG $0x44894266; WORD $0x025a // mov	word ptr [rdx + 2*r11 + 2], ax
	LONG $0x44b70f42; WORD $0x045f // movzx	eax, word ptr [rdi + 2*r11 + 4]
	LONG $0x442b4266; WORD $0x045e // sub	ax, word ptr [rsi + 2*r11 + 4]
	LONG $0x44894266; WORD $0x045a // mov	word ptr [rdx + 2*r11 + 4], ax
	LONG $0x44b70f42; WORD $0x065f // movzx	eax, word ptr [rdi + 2*r11 + 6]
	LONG $0x442b4266; WORD $0x065e // sub	ax, word ptr [rsi + 2*r11 + 6]
	LONG $0x44894266; WORD $0x065a // mov	word ptr [rdx + 2*r11 + 6], ax
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB11_17

LBB11_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB11_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB11_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB11_14
	LONG $0x40f88341                           // cmp	r8d, 64
	JAE  LBB11_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB11_11

LBB11_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x3fe18341         // and	r9d, 63
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB11_8:
	LONG $0x6f7ea1c4; WORD $0x5704             // vmovdqu	ymm0, ymmword ptr [rdi + 2*r10]
	LONG $0x6f7ea1c4; WORD $0x574c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rdi + 2*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x5754; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rdi + 2*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x575c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rdi + 2*r10 + 96]
	LONG $0xf97da1c4; WORD $0x5604             // vpsubw	ymm0, ymm0, ymmword ptr [rsi + 2*r10]
	LONG $0xf975a1c4; WORD $0x564c; BYTE $0x20 // vpsubw	ymm1, ymm1, ymmword ptr [rsi + 2*r10 + 32]
	LONG $0xf96da1c4; WORD $0x5654; BYTE $0x40 // vpsubw	ymm2, ymm2, ymmword ptr [rsi + 2*r10 + 64]
	LONG $0xf965a1c4; WORD $0x565c; BYTE $0x60 // vpsubw	ymm3, ymm3, ymmword ptr [rsi + 2*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x5204             // vmovdqu	ymmword ptr [rdx + 2*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x524c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 2*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x5254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 2*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x525c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 2*r10 + 96], ymm3
	LONG $0x40c28349                           // add	r10, 64
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB11_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB11_18
	LONG $0x08f98341                           // cmp	r9d, 8
	JB   LBB11_14

LBB11_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x07e28341         // and	r10d, 7
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB11_12:
	LONG $0x6f7aa1c4; WORD $0x4f04 // vmovdqu	xmm0, xmmword ptr [rdi + 2*r9]
	LONG $0xf979a1c4; WORD $0x4e04 // vpsubw	xmm0, xmm0, xmmword ptr [rsi + 2*r9]
	LONG $0x7f7aa1c4; WORD $0x4a04 // vmovdqu	xmmword ptr [rdx + 2*r9], xmm0
	LONG $0x08c18349               // add	r9, 8
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB11_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB11_14
	JMP  LBB11_18

TEXT ·_uint16_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB12_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB12_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB12_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB12_16

LBB12_15:
	LONG $0x04b70f42; BYTE $0x5e   // movzx	eax, word ptr [rsi + 2*r11]
	LONG $0xaf0f4266; WORD $0x5f04 // imul	ax, word ptr [rdi + 2*r11]
	LONG $0x04894266; BYTE $0x5a   // mov	word ptr [rdx + 2*r11], ax
	WORD $0xff49; BYTE $0xc3       // inc	r11
	WORD $0xff48; BYTE $0xc9       // dec	rcx
	JNE  LBB12_15

LBB12_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB12_18

LBB12_17:
	LONG $0x04b70f42; BYTE $0x5e               // movzx	eax, word ptr [rsi + 2*r11]
	LONG $0xaf0f4266; WORD $0x5f04             // imul	ax, word ptr [rdi + 2*r11]
	LONG $0x04894266; BYTE $0x5a               // mov	word ptr [rdx + 2*r11], ax
	LONG $0x44b70f42; WORD $0x025e             // movzx	eax, word ptr [rsi + 2*r11 + 2]
	LONG $0xaf0f4266; WORD $0x5f44; BYTE $0x02 // imul	ax, word ptr [rdi + 2*r11 + 2]
	LONG $0x44894266; WORD $0x025a             // mov	word ptr [rdx + 2*r11 + 2], ax
	LONG $0x44b70f42; WORD $0x045e             // movzx	eax, word ptr [rsi + 2*r11 + 4]
	LONG $0xaf0f4266; WORD $0x5f44; BYTE $0x04 // imul	ax, word ptr [rdi + 2*r11 + 4]
	LONG $0x44894266; WORD $0x045a             // mov	word ptr [rdx + 2*r11 + 4], ax
	LONG $0x44b70f42; WORD $0x065e             // movzx	eax, word ptr [rsi + 2*r11 + 6]
	LONG $0xaf0f4266; WORD $0x5f44; BYTE $0x06 // imul	ax, word ptr [rdi + 2*r11 + 6]
	LONG $0x44894266; WORD $0x065a             // mov	word ptr [rdx + 2*r11 + 6], ax
	LONG $0x04c38349                           // add	r11, 4
	WORD $0x394d; BYTE $0xd8                   // cmp	r8, r11
	JNE  LBB12_17

LBB12_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB12_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB12_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB12_14
	LONG $0x40f88341                           // cmp	r8d, 64
	JAE  LBB12_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB12_11

LBB12_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x3fe18341         // and	r9d, 63
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB12_8:
	LONG $0x6f7ea1c4; WORD $0x5604             // vmovdqu	ymm0, ymmword ptr [rsi + 2*r10]
	LONG $0x6f7ea1c4; WORD $0x564c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 2*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x5654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 2*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x565c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 2*r10 + 96]
	LONG $0xd57da1c4; WORD $0x5704             // vpmullw	ymm0, ymm0, ymmword ptr [rdi + 2*r10]
	LONG $0xd575a1c4; WORD $0x574c; BYTE $0x20 // vpmullw	ymm1, ymm1, ymmword ptr [rdi + 2*r10 + 32]
	LONG $0xd56da1c4; WORD $0x5754; BYTE $0x40 // vpmullw	ymm2, ymm2, ymmword ptr [rdi + 2*r10 + 64]
	LONG $0xd565a1c4; WORD $0x575c; BYTE $0x60 // vpmullw	ymm3, ymm3, ymmword ptr [rdi + 2*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x5204             // vmovdqu	ymmword ptr [rdx + 2*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x524c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 2*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x5254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 2*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x525c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 2*r10 + 96], ymm3
	LONG $0x40c28349                           // add	r10, 64
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB12_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB12_18
	LONG $0x08f98341                           // cmp	r9d, 8
	JB   LBB12_14

LBB12_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x07e28341         // and	r10d, 7
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB12_12:
	LONG $0x6f7aa1c4; WORD $0x4e04 // vmovdqu	xmm0, xmmword ptr [rsi + 2*r9]
	LONG $0xd579a1c4; WORD $0x4f04 // vpmullw	xmm0, xmm0, xmmword ptr [rdi + 2*r9]
	LONG $0x7f7aa1c4; WORD $0x4a04 // vmovdqu	xmmword ptr [rdx + 2*r9], xmm0
	LONG $0x08c18349               // add	r9, 8
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB12_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB12_14
	JMP  LBB12_18

TEXT ·_uint16_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	WORD $0x5741             // push	r15
	WORD $0x5641             // push	r14
	BYTE $0x53               // push	rbx
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB13_12
	WORD $0x8949; BYTE $0xd0 // mov	r8, rdx
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x10fa8349         // cmp	r10, 16
	JAE  LBB13_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB13_8

LBB13_3:
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf8 // sub	rax, rdi
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB13_8
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf0 // sub	rax, rsi
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB13_8
	WORD $0x8941; BYTE $0xce // mov	r14d, ecx
	LONG $0x0fe68341         // and	r14d, 15
	WORD $0x894d; BYTE $0xd3 // mov	r11, r10
	WORD $0x294d; BYTE $0xf3 // sub	r11, r14
	WORD $0x3145; BYTE $0xff // xor	r15d, r15d

LBB13_6:
	LONG $0x6f7aa1c4; WORD $0x7f14             // vmovdqu	xmm2, xmmword ptr [rdi + 2*r15]
	LONG $0xc2c5f9c5; BYTE $0x01               // vpextrw	eax, xmm2, 1
	LONG $0x6f7aa1c4; WORD $0x7f44; BYTE $0x10 // vmovdqu	xmm0, xmmword ptr [rdi + 2*r15 + 16]
	LONG $0x6f7aa1c4; WORD $0x7e1c             // vmovdqu	xmm3, xmmword ptr [rsi + 2*r15]
	LONG $0xdbc5f9c5; BYTE $0x01               // vpextrw	ebx, xmm3, 1
	LONG $0x6f7aa1c4; WORD $0x7e4c; BYTE $0x10 // vmovdqu	xmm1, xmmword ptr [rsi + 2*r15 + 16]
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xd07ef9c5                           // vmovd	eax, xmm2
	LONG $0xdb7ef9c5                           // vmovd	ebx, xmm3
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xe06ef9c5                           // vmovd	xmm4, eax
	LONG $0xc459c1c4; WORD $0x01e1             // vpinsrw	xmm4, xmm4, r9d, 1
	LONG $0xc2c5f9c5; BYTE $0x02               // vpextrw	eax, xmm2, 2
	LONG $0xdbc5f9c5; BYTE $0x02               // vpextrw	ebx, xmm3, 2
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xe0c4d9c5; BYTE $0x02               // vpinsrw	xmm4, xmm4, eax, 2
	LONG $0xc2c5f9c5; BYTE $0x03               // vpextrw	eax, xmm2, 3
	LONG $0xdbc5f9c5; BYTE $0x03               // vpextrw	ebx, xmm3, 3
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xe0c4d9c5; BYTE $0x03               // vpinsrw	xmm4, xmm4, eax, 3
	LONG $0xc2c5f9c5; BYTE $0x04               // vpextrw	eax, xmm2, 4
	LONG $0xdbc5f9c5; BYTE $0x04               // vpextrw	ebx, xmm3, 4
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xe0c4d9c5; BYTE $0x04               // vpinsrw	xmm4, xmm4, eax, 4
	LONG $0xc2c5f9c5; BYTE $0x05               // vpextrw	eax, xmm2, 5
	LONG $0xdbc5f9c5; BYTE $0x05               // vpextrw	ebx, xmm3, 5
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xe0c4d9c5; BYTE $0x05               // vpinsrw	xmm4, xmm4, eax, 5
	LONG $0xc2c5f9c5; BYTE $0x06               // vpextrw	eax, xmm2, 6
	LONG $0xdbc5f9c5; BYTE $0x06               // vpextrw	ebx, xmm3, 6
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xe0c4d9c5; BYTE $0x06               // vpinsrw	xmm4, xmm4, eax, 6
	LONG $0xc2c5f9c5; BYTE $0x07               // vpextrw	eax, xmm2, 7
	LONG $0xdbc5f9c5; BYTE $0x07               // vpextrw	ebx, xmm3, 7
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xd0c4d9c5; BYTE $0x07               // vpinsrw	xmm2, xmm4, eax, 7
	LONG $0xc0c5f9c5; BYTE $0x01               // vpextrw	eax, xmm0, 1
	LONG $0xd9c5f9c5; BYTE $0x01               // vpextrw	ebx, xmm1, 1
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xc07ef9c5                           // vmovd	eax, xmm0
	LONG $0xcb7ef9c5                           // vmovd	ebx, xmm1
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xd86ef9c5                           // vmovd	xmm3, eax
	LONG $0xc461c1c4; WORD $0x01d9             // vpinsrw	xmm3, xmm3, r9d, 1
	LONG $0xc0c5f9c5; BYTE $0x02               // vpextrw	eax, xmm0, 2
	LONG $0xd9c5f9c5; BYTE $0x02               // vpextrw	ebx, xmm1, 2
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xd8c4e1c5; BYTE $0x02               // vpinsrw	xmm3, xmm3, eax, 2
	LONG $0xc0c5f9c5; BYTE $0x03               // vpextrw	eax, xmm0, 3
	LONG $0xd9c5f9c5; BYTE $0x03               // vpextrw	ebx, xmm1, 3
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xd8c4e1c5; BYTE $0x03               // vpinsrw	xmm3, xmm3, eax, 3
	LONG $0xc0c5f9c5; BYTE $0x04               // vpextrw	eax, xmm0, 4
	LONG $0xd9c5f9c5; BYTE $0x04               // vpextrw	ebx, xmm1, 4
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xd8c4e1c5; BYTE $0x04               // vpinsrw	xmm3, xmm3, eax, 4
	LONG $0xc0c5f9c5; BYTE $0x05               // vpextrw	eax, xmm0, 5
	LONG $0xd9c5f9c5; BYTE $0x05               // vpextrw	ebx, xmm1, 5
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xd8c4e1c5; BYTE $0x05               // vpinsrw	xmm3, xmm3, eax, 5
	LONG $0xc0c5f9c5; BYTE $0x06               // vpextrw	eax, xmm0, 6
	LONG $0xd9c5f9c5; BYTE $0x06               // vpextrw	ebx, xmm1, 6
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xd8c4e1c5; BYTE $0x06               // vpinsrw	xmm3, xmm3, eax, 6
	LONG $0xc0c5f9c5; BYTE $0x07               // vpextrw	eax, xmm0, 7
	LONG $0xd9c5f9c5; BYTE $0x07               // vpextrw	ebx, xmm1, 7
	WORD $0xd231                               // xor	edx, edx
	WORD $0xf766; BYTE $0xf3                   // div	bx
	LONG $0xc0c4e1c5; BYTE $0x07               // vpinsrw	xmm0, xmm3, eax, 7
	LONG $0x7f7a81c4; WORD $0x7844; BYTE $0x10 // vmovdqu	xmmword ptr [r8 + 2*r15 + 16], xmm0
	LONG $0x7f7a81c4; WORD $0x7814             // vmovdqu	xmmword ptr [r8 + 2*r15], xmm2
	LONG $0x10c78349                           // add	r15, 16
	WORD $0x394d; BYTE $0xfb                   // cmp	r11, r15
	JNE  LBB13_6
	WORD $0x854d; BYTE $0xf6                   // test	r14, r14
	JE   LBB13_12

LBB13_8:
	WORD $0x2944; BYTE $0xd9     // sub	ecx, r11d
	LONG $0x015b8d49             // lea	rbx, [r11 + 1]
	WORD $0xc1f6; BYTE $0x01     // test	cl, 1
	JE   LBB13_10
	LONG $0x04b70f42; BYTE $0x5f // movzx	eax, word ptr [rdi + 2*r11]
	WORD $0xd231                 // xor	edx, edx
	LONG $0x34f74266; BYTE $0x5e // div	word ptr [rsi + 2*r11]
	LONG $0x04894366; BYTE $0x58 // mov	word ptr [r8 + 2*r11], ax
	WORD $0x8949; BYTE $0xdb     // mov	r11, rbx

LBB13_10:
	WORD $0x3949; BYTE $0xda // cmp	r10, rbx
	JE   LBB13_12

LBB13_11:
	LONG $0x04b70f42; BYTE $0x5f   // movzx	eax, word ptr [rdi + 2*r11]
	WORD $0xd231                   // xor	edx, edx
	LONG $0x34f74266; BYTE $0x5e   // div	word ptr [rsi + 2*r11]
	LONG $0x04894366; BYTE $0x58   // mov	word ptr [r8 + 2*r11], ax
	LONG $0x44b70f42; WORD $0x025f // movzx	eax, word ptr [rdi + 2*r11 + 2]
	WORD $0xd231                   // xor	edx, edx
	LONG $0x74f74266; WORD $0x025e // div	word ptr [rsi + 2*r11 + 2]
	LONG $0x44894366; WORD $0x0258 // mov	word ptr [r8 + 2*r11 + 2], ax
	LONG $0x02c38349               // add	r11, 2
	WORD $0x394d; BYTE $0xda       // cmp	r10, r11
	JNE  LBB13_11

LBB13_12:
	LONG $0xe8658d48 // lea	rsp, [rbp - 24]
	BYTE $0x5b       // pop	rbx
	WORD $0x5e41     // pop	r14
	WORD $0x5f41     // pop	r15
	BYTE $0x5d       // pop	rbp
	BYTE $0xc3       // ret

TEXT ·_uint32_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB14_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB14_4
	WORD $0xc931             // xor	ecx, ecx
	WORD $0xc031             // xor	eax, eax
	JMP  LBB14_7

LBB14_1:
	WORD $0xc031 // xor	eax, eax
	JMP  LBB14_8

LBB14_4:
	WORD $0xe283; BYTE $0x1f // and	edx, 31
	WORD $0x894c; BYTE $0xc1 // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1 // sub	rcx, rdx
	LONG $0xc0eff9c5         // vpxor	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc9eff1c5         // vpxor	xmm1, xmm1, xmm1
	LONG $0xd2efe9c5         // vpxor	xmm2, xmm2, xmm2
	LONG $0xdbefe1c5         // vpxor	xmm3, xmm3, xmm3

LBB14_5:
	LONG $0x04fefdc5; BYTE $0x87   // vpaddd	ymm0, ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x4cfef5c5; WORD $0x2087 // vpaddd	ymm1, ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x54feedc5; WORD $0x4087 // vpaddd	ymm2, ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x5cfee5c5; WORD $0x6087 // vpaddd	ymm3, ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x20c08348               // add	rax, 32
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB14_5
	LONG $0xc0fef5c5               // vpaddd	ymm0, ymm1, ymm0
	LONG $0xc0feedc5               // vpaddd	ymm0, ymm2, ymm0
	LONG $0xc0fee5c5               // vpaddd	ymm0, ymm3, ymm0
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1fef9c5               // vpaddd	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee   // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fef9c5               // vpaddd	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55   // vpshufd	xmm1, xmm0, 85
	LONG $0xc1fef9c5               // vpaddd	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB14_8

LBB14_7:
	WORD $0x0403; BYTE $0x8f // add	eax, dword ptr [rdi + 4*rcx]
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB14_7

LBB14_8:
	WORD $0x0689             // mov	dword ptr [rsi], eax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint32_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x078b             // mov	eax, dword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB15_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB15_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB15_6

LBB15_3:
	WORD $0xe283; BYTE $0x1f     // and	edx, 31
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x587de2c4; BYTE $0xc0 // vpbroadcastd	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB15_4:
	LONG $0x3b7de2c4; WORD $0x8704             // vpminud	ymm0, ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x3b75e2c4; WORD $0x874c; BYTE $0x20 // vpminud	ymm1, ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x3b6de2c4; WORD $0x8754; BYTE $0x40 // vpminud	ymm2, ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x3b65e2c4; WORD $0x875c; BYTE $0x60 // vpminud	ymm3, ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x20c08348                           // add	rax, 32
	WORD $0x3948; BYTE $0xc1                   // cmp	rcx, rax
	JNE  LBB15_4
	LONG $0x3b7de2c4; BYTE $0xc1               // vpminud	ymm0, ymm0, ymm1
	LONG $0x3b7de2c4; BYTE $0xc2               // vpminud	ymm0, ymm0, ymm2
	LONG $0x3b7de2c4; BYTE $0xc3               // vpminud	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	xmm1, ymm0, 1
	LONG $0x3b79e2c4; BYTE $0xc1               // vpminud	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee               // vpshufd	xmm1, xmm0, 238
	LONG $0x3b79e2c4; BYTE $0xc1               // vpminud	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55               // vpshufd	xmm1, xmm0, 85
	LONG $0x3b79e2c4; BYTE $0xc1               // vpminud	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5                           // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2                   // test	rdx, rdx
	JE   LBB15_7

LBB15_6:
	WORD $0x148b; BYTE $0x8f // mov	edx, dword ptr [rdi + 4*rcx]
	WORD $0xc239             // cmp	edx, eax
	WORD $0x420f; BYTE $0xc2 // cmovb	eax, edx
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB15_6

LBB15_7:
	WORD $0x0689             // mov	dword ptr [rsi], eax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint32_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x078b             // mov	eax, dword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB16_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB16_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB16_6

LBB16_3:
	WORD $0xe283; BYTE $0x1f     // and	edx, 31
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x587de2c4; BYTE $0xc0 // vpbroadcastd	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB16_4:
	LONG $0x3f7de2c4; WORD $0x8704             // vpmaxud	ymm0, ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x3f75e2c4; WORD $0x874c; BYTE $0x20 // vpmaxud	ymm1, ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x3f6de2c4; WORD $0x8754; BYTE $0x40 // vpmaxud	ymm2, ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x3f65e2c4; WORD $0x875c; BYTE $0x60 // vpmaxud	ymm3, ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x20c08348                           // add	rax, 32
	WORD $0x3948; BYTE $0xc1                   // cmp	rcx, rax
	JNE  LBB16_4
	LONG $0x3f7de2c4; BYTE $0xc1               // vpmaxud	ymm0, ymm0, ymm1
	LONG $0x3f7de2c4; BYTE $0xc2               // vpmaxud	ymm0, ymm0, ymm2
	LONG $0x3f7de2c4; BYTE $0xc3               // vpmaxud	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	xmm1, ymm0, 1
	LONG $0x3f79e2c4; BYTE $0xc1               // vpmaxud	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee               // vpshufd	xmm1, xmm0, 238
	LONG $0x3f79e2c4; BYTE $0xc1               // vpmaxud	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55               // vpshufd	xmm1, xmm0, 85
	LONG $0x3f79e2c4; BYTE $0xc1               // vpmaxud	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5                           // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2                   // test	rdx, rdx
	JE   LBB16_7

LBB16_6:
	WORD $0x148b; BYTE $0x8f // mov	edx, dword ptr [rdi + 4*rcx]
	WORD $0xc239             // cmp	edx, eax
	WORD $0x470f; BYTE $0xc2 // cmova	eax, edx
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB16_6

LBB16_7:
	WORD $0x0689             // mov	dword ptr [rsi], eax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint32_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB17_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB17_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB17_8

LBB17_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB17_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB17_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x1fe18341                           // and	r9d, 31
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB17_6:
	LONG $0x6f7ea1c4; WORD $0x9604             // vmovdqu	ymm0, ymmword ptr [rsi + 4*r10]
	LONG $0x6f7ea1c4; WORD $0x964c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 4*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x9654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 4*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x965c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 4*r10 + 96]
	LONG $0xfe7da1c4; WORD $0x9704             // vpaddd	ymm0, ymm0, ymmword ptr [rdi + 4*r10]
	LONG $0xfe75a1c4; WORD $0x974c; BYTE $0x20 // vpaddd	ymm1, ymm1, ymmword ptr [rdi + 4*r10 + 32]
	LONG $0xfe6da1c4; WORD $0x9754; BYTE $0x40 // vpaddd	ymm2, ymm2, ymmword ptr [rdi + 4*r10 + 64]
	LONG $0xfe65a1c4; WORD $0x975c; BYTE $0x60 // vpaddd	ymm3, ymm3, ymmword ptr [rdi + 4*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x9204             // vmovdqu	ymmword ptr [rdx + 4*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x924c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 4*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x9254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 4*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x925c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 4*r10 + 96], ymm3
	LONG $0x20c28349                           // add	r10, 32
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB17_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB17_12

LBB17_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB17_10

LBB17_9:
	LONG $0x9e048b42         // mov	eax, dword ptr [rsi + 4*r11]
	LONG $0x9f040342         // add	eax, dword ptr [rdi + 4*r11]
	LONG $0x9a048942         // mov	dword ptr [rdx + 4*r11], eax
	WORD $0xff49; BYTE $0xc3 // inc	r11
	WORD $0xff48; BYTE $0xc9 // dec	rcx
	JNE  LBB17_9

LBB17_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB17_12

LBB17_11:
	LONG $0x9e048b42             // mov	eax, dword ptr [rsi + 4*r11]
	LONG $0x9f040342             // add	eax, dword ptr [rdi + 4*r11]
	LONG $0x9a048942             // mov	dword ptr [rdx + 4*r11], eax
	LONG $0x9e448b42; BYTE $0x04 // mov	eax, dword ptr [rsi + 4*r11 + 4]
	LONG $0x9f440342; BYTE $0x04 // add	eax, dword ptr [rdi + 4*r11 + 4]
	LONG $0x9a448942; BYTE $0x04 // mov	dword ptr [rdx + 4*r11 + 4], eax
	LONG $0x9e448b42; BYTE $0x08 // mov	eax, dword ptr [rsi + 4*r11 + 8]
	LONG $0x9f440342; BYTE $0x08 // add	eax, dword ptr [rdi + 4*r11 + 8]
	LONG $0x9a448942; BYTE $0x08 // mov	dword ptr [rdx + 4*r11 + 8], eax
	LONG $0x9e448b42; BYTE $0x0c // mov	eax, dword ptr [rsi + 4*r11 + 12]
	LONG $0x9f440342; BYTE $0x0c // add	eax, dword ptr [rdi + 4*r11 + 12]
	LONG $0x9a448942; BYTE $0x0c // mov	dword ptr [rdx + 4*r11 + 12], eax
	LONG $0x04c38349             // add	r11, 4
	WORD $0x394d; BYTE $0xd8     // cmp	r8, r11
	JNE  LBB17_11

LBB17_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint32_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB18_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB18_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB18_8

LBB18_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB18_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB18_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x1fe18341                           // and	r9d, 31
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB18_6:
	LONG $0x6f7ea1c4; WORD $0x9704             // vmovdqu	ymm0, ymmword ptr [rdi + 4*r10]
	LONG $0x6f7ea1c4; WORD $0x974c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rdi + 4*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x9754; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rdi + 4*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x975c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rdi + 4*r10 + 96]
	LONG $0xfa7da1c4; WORD $0x9604             // vpsubd	ymm0, ymm0, ymmword ptr [rsi + 4*r10]
	LONG $0xfa75a1c4; WORD $0x964c; BYTE $0x20 // vpsubd	ymm1, ymm1, ymmword ptr [rsi + 4*r10 + 32]
	LONG $0xfa6da1c4; WORD $0x9654; BYTE $0x40 // vpsubd	ymm2, ymm2, ymmword ptr [rsi + 4*r10 + 64]
	LONG $0xfa65a1c4; WORD $0x965c; BYTE $0x60 // vpsubd	ymm3, ymm3, ymmword ptr [rsi + 4*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x9204             // vmovdqu	ymmword ptr [rdx + 4*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x924c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 4*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x9254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 4*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x925c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 4*r10 + 96], ymm3
	LONG $0x20c28349                           // add	r10, 32
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB18_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB18_12

LBB18_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB18_10

LBB18_9:
	LONG $0x9f048b42         // mov	eax, dword ptr [rdi + 4*r11]
	LONG $0x9e042b42         // sub	eax, dword ptr [rsi + 4*r11]
	LONG $0x9a048942         // mov	dword ptr [rdx + 4*r11], eax
	WORD $0xff49; BYTE $0xc3 // inc	r11
	WORD $0xff48; BYTE $0xc9 // dec	rcx
	JNE  LBB18_9

LBB18_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB18_12

LBB18_11:
	LONG $0x9f048b42             // mov	eax, dword ptr [rdi + 4*r11]
	LONG $0x9e042b42             // sub	eax, dword ptr [rsi + 4*r11]
	LONG $0x9a048942             // mov	dword ptr [rdx + 4*r11], eax
	LONG $0x9f448b42; BYTE $0x04 // mov	eax, dword ptr [rdi + 4*r11 + 4]
	LONG $0x9e442b42; BYTE $0x04 // sub	eax, dword ptr [rsi + 4*r11 + 4]
	LONG $0x9a448942; BYTE $0x04 // mov	dword ptr [rdx + 4*r11 + 4], eax
	LONG $0x9f448b42; BYTE $0x08 // mov	eax, dword ptr [rdi + 4*r11 + 8]
	LONG $0x9e442b42; BYTE $0x08 // sub	eax, dword ptr [rsi + 4*r11 + 8]
	LONG $0x9a448942; BYTE $0x08 // mov	dword ptr [rdx + 4*r11 + 8], eax
	LONG $0x9f448b42; BYTE $0x0c // mov	eax, dword ptr [rdi + 4*r11 + 12]
	LONG $0x9e442b42; BYTE $0x0c // sub	eax, dword ptr [rsi + 4*r11 + 12]
	LONG $0x9a448942; BYTE $0x0c // mov	dword ptr [rdx + 4*r11 + 12], eax
	LONG $0x04c38349             // add	r11, 4
	WORD $0x394d; BYTE $0xd8     // cmp	r8, r11
	JNE  LBB18_11

LBB18_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint32_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB19_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB19_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB19_8

LBB19_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB19_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB19_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x1fe18341                           // and	r9d, 31
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB19_6:
	LONG $0x6f7ea1c4; WORD $0x9604             // vmovdqu	ymm0, ymmword ptr [rsi + 4*r10]
	LONG $0x6f7ea1c4; WORD $0x964c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 4*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x9654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 4*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x965c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 4*r10 + 96]
	LONG $0x407da2c4; WORD $0x9704             // vpmulld	ymm0, ymm0, ymmword ptr [rdi + 4*r10]
	LONG $0x4075a2c4; WORD $0x974c; BYTE $0x20 // vpmulld	ymm1, ymm1, ymmword ptr [rdi + 4*r10 + 32]
	LONG $0x406da2c4; WORD $0x9754; BYTE $0x40 // vpmulld	ymm2, ymm2, ymmword ptr [rdi + 4*r10 + 64]
	LONG $0x4065a2c4; WORD $0x975c; BYTE $0x60 // vpmulld	ymm3, ymm3, ymmword ptr [rdi + 4*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x9204             // vmovdqu	ymmword ptr [rdx + 4*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x924c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 4*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x9254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 4*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x925c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 4*r10 + 96], ymm3
	LONG $0x20c28349                           // add	r10, 32
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB19_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB19_12

LBB19_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB19_10

LBB19_9:
	LONG $0x9e048b42             // mov	eax, dword ptr [rsi + 4*r11]
	LONG $0x04af0f42; BYTE $0x9f // imul	eax, dword ptr [rdi + 4*r11]
	LONG $0x9a048942             // mov	dword ptr [rdx + 4*r11], eax
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB19_9

LBB19_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB19_12

LBB19_11:
	LONG $0x9e048b42               // mov	eax, dword ptr [rsi + 4*r11]
	LONG $0x04af0f42; BYTE $0x9f   // imul	eax, dword ptr [rdi + 4*r11]
	LONG $0x9a048942               // mov	dword ptr [rdx + 4*r11], eax
	LONG $0x9e448b42; BYTE $0x04   // mov	eax, dword ptr [rsi + 4*r11 + 4]
	LONG $0x44af0f42; WORD $0x049f // imul	eax, dword ptr [rdi + 4*r11 + 4]
	LONG $0x9a448942; BYTE $0x04   // mov	dword ptr [rdx + 4*r11 + 4], eax
	LONG $0x9e448b42; BYTE $0x08   // mov	eax, dword ptr [rsi + 4*r11 + 8]
	LONG $0x44af0f42; WORD $0x089f // imul	eax, dword ptr [rdi + 4*r11 + 8]
	LONG $0x9a448942; BYTE $0x08   // mov	dword ptr [rdx + 4*r11 + 8], eax
	LONG $0x9e448b42; BYTE $0x0c   // mov	eax, dword ptr [rsi + 4*r11 + 12]
	LONG $0x44af0f42; WORD $0x0c9f // imul	eax, dword ptr [rdi + 4*r11 + 12]
	LONG $0x9a448942; BYTE $0x0c   // mov	dword ptr [rdx + 4*r11 + 12], eax
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB19_11

LBB19_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint32_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	WORD $0x5741             // push	r15
	WORD $0x5641             // push	r14
	BYTE $0x53               // push	rbx
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB20_12
	WORD $0x8949; BYTE $0xd0 // mov	r8, rdx
	WORD $0x8941; BYTE $0xcb // mov	r11d, ecx
	LONG $0x08fb8349         // cmp	r11, 8
	JAE  LBB20_3
	WORD $0x3145; BYTE $0xff // xor	r15d, r15d
	JMP  LBB20_8

LBB20_3:
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf8 // sub	rax, rdi
	WORD $0x3145; BYTE $0xff // xor	r15d, r15d
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB20_8
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf0 // sub	rax, rsi
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB20_8
	WORD $0x8941; BYTE $0xce // mov	r14d, ecx
	LONG $0x07e68341         // and	r14d, 7
	WORD $0x894d; BYTE $0xdf // mov	r15, r11
	WORD $0x294d; BYTE $0xf7 // sub	r15, r14
	WORD $0xdb31             // xor	ebx, ebx

LBB20_6:
	LONG $0x9f0c8b44                           // mov	r9d, dword ptr [rdi + 4*rbx]
	LONG $0x049f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 4]
	WORD $0xd231                               // xor	edx, edx
	LONG $0x049e74f7                           // div	dword ptr [rsi + 4*rbx + 4]
	WORD $0x8941; BYTE $0xc2                   // mov	r10d, eax
	WORD $0x8944; BYTE $0xc8                   // mov	eax, r9d
	WORD $0xd231                               // xor	edx, edx
	WORD $0x34f7; BYTE $0x9e                   // div	dword ptr [rsi + 4*rbx]
	LONG $0xc06ef9c5                           // vmovd	xmm0, eax
	LONG $0x2279c3c4; WORD $0x01c2             // vpinsrd	xmm0, xmm0, r10d, 1
	LONG $0x089f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 8]
	WORD $0xd231                               // xor	edx, edx
	LONG $0x089e74f7                           // div	dword ptr [rsi + 4*rbx + 8]
	LONG $0x2279e3c4; WORD $0x02c0             // vpinsrd	xmm0, xmm0, eax, 2
	LONG $0x0c9f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 12]
	WORD $0xd231                               // xor	edx, edx
	LONG $0x0c9e74f7                           // div	dword ptr [rsi + 4*rbx + 12]
	LONG $0x2279e3c4; WORD $0x03c0             // vpinsrd	xmm0, xmm0, eax, 3
	LONG $0x149f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 20]
	WORD $0xd231                               // xor	edx, edx
	LONG $0x149e74f7                           // div	dword ptr [rsi + 4*rbx + 20]
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0x109f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 16]
	WORD $0xd231                               // xor	edx, edx
	LONG $0x109e74f7                           // div	dword ptr [rsi + 4*rbx + 16]
	LONG $0xc86ef9c5                           // vmovd	xmm1, eax
	LONG $0x2271c3c4; WORD $0x01c9             // vpinsrd	xmm1, xmm1, r9d, 1
	LONG $0x189f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 24]
	WORD $0xd231                               // xor	edx, edx
	LONG $0x189e74f7                           // div	dword ptr [rsi + 4*rbx + 24]
	LONG $0x2271e3c4; WORD $0x02c8             // vpinsrd	xmm1, xmm1, eax, 2
	LONG $0x1c9f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 28]
	WORD $0xd231                               // xor	edx, edx
	LONG $0x1c9e74f7                           // div	dword ptr [rsi + 4*rbx + 28]
	LONG $0x2271e3c4; WORD $0x03c8             // vpinsrd	xmm1, xmm1, eax, 3
	LONG $0x7f7ac1c4; WORD $0x984c; BYTE $0x10 // vmovdqu	xmmword ptr [r8 + 4*rbx + 16], xmm1
	LONG $0x7f7ac1c4; WORD $0x9804             // vmovdqu	xmmword ptr [r8 + 4*rbx], xmm0
	LONG $0x08c38348                           // add	rbx, 8
	WORD $0x3949; BYTE $0xdf                   // cmp	r15, rbx
	JNE  LBB20_6
	WORD $0x854d; BYTE $0xf6                   // test	r14, r14
	JE   LBB20_12

LBB20_8:
	WORD $0x2944; BYTE $0xf9 // sub	ecx, r15d
	LONG $0x015f8d49         // lea	rbx, [r15 + 1]
	WORD $0xc1f6; BYTE $0x01 // test	cl, 1
	JE   LBB20_10
	LONG $0xbf048b42         // mov	eax, dword ptr [rdi + 4*r15]
	WORD $0xd231             // xor	edx, edx
	LONG $0xbe34f742         // div	dword ptr [rsi + 4*r15]
	LONG $0xb8048943         // mov	dword ptr [r8 + 4*r15], eax
	WORD $0x8949; BYTE $0xdf // mov	r15, rbx

LBB20_10:
	WORD $0x3949; BYTE $0xdb // cmp	r11, rbx
	JE   LBB20_12

LBB20_11:
	LONG $0xbf048b42             // mov	eax, dword ptr [rdi + 4*r15]
	WORD $0xd231                 // xor	edx, edx
	LONG $0xbe34f742             // div	dword ptr [rsi + 4*r15]
	LONG $0xb8048943             // mov	dword ptr [r8 + 4*r15], eax
	LONG $0xbf448b42; BYTE $0x04 // mov	eax, dword ptr [rdi + 4*r15 + 4]
	WORD $0xd231                 // xor	edx, edx
	LONG $0xbe74f742; BYTE $0x04 // div	dword ptr [rsi + 4*r15 + 4]
	LONG $0xb8448943; BYTE $0x04 // mov	dword ptr [r8 + 4*r15 + 4], eax
	LONG $0x02c78349             // add	r15, 2
	WORD $0x394d; BYTE $0xfb     // cmp	r11, r15
	JNE  LBB20_11

LBB20_12:
	LONG $0xe8658d48 // lea	rsp, [rbp - 24]
	BYTE $0x5b       // pop	rbx
	WORD $0x5e41     // pop	r14
	WORD $0x5f41     // pop	r15
	BYTE $0x5d       // pop	rbp
	BYTE $0xc3       // ret

TEXT ·_uint64_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB21_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB21_4
	WORD $0xc931             // xor	ecx, ecx
	WORD $0xc031             // xor	eax, eax
	JMP  LBB21_7

LBB21_1:
	WORD $0xc031 // xor	eax, eax
	JMP  LBB21_8

LBB21_4:
	WORD $0xe283; BYTE $0x0f // and	edx, 15
	WORD $0x894c; BYTE $0xc1 // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1 // sub	rcx, rdx
	LONG $0xc0eff9c5         // vpxor	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc9eff1c5         // vpxor	xmm1, xmm1, xmm1
	LONG $0xd2efe9c5         // vpxor	xmm2, xmm2, xmm2
	LONG $0xdbefe1c5         // vpxor	xmm3, xmm3, xmm3

LBB21_5:
	LONG $0x04d4fdc5; BYTE $0xc7   // vpaddq	ymm0, ymm0, ymmword ptr [rdi + 8*rax]
	LONG $0x4cd4f5c5; WORD $0x20c7 // vpaddq	ymm1, ymm1, ymmword ptr [rdi + 8*rax + 32]
	LONG $0x54d4edc5; WORD $0x40c7 // vpaddq	ymm2, ymm2, ymmword ptr [rdi + 8*rax + 64]
	LONG $0x5cd4e5c5; WORD $0x60c7 // vpaddq	ymm3, ymm3, ymmword ptr [rdi + 8*rax + 96]
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB21_5
	LONG $0xc0d4f5c5               // vpaddq	ymm0, ymm1, ymm0
	LONG $0xc0d4edc5               // vpaddq	ymm0, ymm2, ymm0
	LONG $0xc0d4e5c5               // vpaddq	ymm0, ymm3, ymm0
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1d4f9c5               // vpaddq	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee   // vpshufd	xmm1, xmm0, 238
	LONG $0xc1d4f9c5               // vpaddq	xmm0, xmm0, xmm1
	LONG $0x7ef9e1c4; BYTE $0xc0   // vmovq	rax, xmm0
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB21_8

LBB21_7:
	LONG $0xcf040348         // add	rax, qword ptr [rdi + 8*rcx]
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB21_7

LBB21_8:
	WORD $0x8948; BYTE $0x06 // mov	qword ptr [rsi], rax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LCPI22_0:
	//

TEXT ·_uint64_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x8b48; BYTE $0x07 // mov	rax, qword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB22_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB22_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB22_6

LBB22_3:
	WORD $0xe283; BYTE $0x0f             // and	edx, 15
	WORD $0x894c; BYTE $0xc1             // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1             // sub	rcx, rdx
	LONG $0x6ef9e1c4; BYTE $0xc0         // vmovq	xmm0, rax
	LONG $0x597de2c4; BYTE $0xc8         // vpbroadcastq	ymm1, xmm0
	QUAD $0x00010d05597de2c4; BYTE $0x00 // vpbroadcastq	ymm0, qword ptr [rip + .LCPI22_0]
	WORD $0xc031                         // xor	eax, eax
	LONG $0xe16ffdc5                     // vmovdqa	ymm4, ymm1
	LONG $0xd96ffdc5                     // vmovdqa	ymm3, ymm1
	LONG $0xd16ffdc5                     // vmovdqa	ymm2, ymm1

LBB22_4:
	LONG $0x2c6ffec5; BYTE $0xc7   // vmovdqu	ymm5, ymmword ptr [rdi + 8*rax]
	LONG $0x746ffec5; WORD $0x20c7 // vmovdqu	ymm6, ymmword ptr [rdi + 8*rax + 32]
	LONG $0x7c6ffec5; WORD $0x40c7 // vmovdqu	ymm7, ymmword ptr [rdi + 8*rax + 64]
	LONG $0xc0ef75c5               // vpxor	ymm8, ymm1, ymm0
	LONG $0xc8ef55c5               // vpxor	ymm9, ymm5, ymm0
	LONG $0x373d42c4; BYTE $0xc1   // vpcmpgtq	ymm8, ymm8, ymm9
	LONG $0x4b75e3c4; WORD $0x80cd // vblendvpd	ymm1, ymm1, ymm5, ymm8
	LONG $0xe8efddc5               // vpxor	ymm5, ymm4, ymm0
	LONG $0xc0ef4dc5               // vpxor	ymm8, ymm6, ymm0
	LONG $0x3755c2c4; BYTE $0xe8   // vpcmpgtq	ymm5, ymm5, ymm8
	LONG $0x4b5de3c4; WORD $0x50e6 // vblendvpd	ymm4, ymm4, ymm6, ymm5
	LONG $0xe8efe5c5               // vpxor	ymm5, ymm3, ymm0
	LONG $0xf0efc5c5               // vpxor	ymm6, ymm7, ymm0
	LONG $0x3755e2c4; BYTE $0xee   // vpcmpgtq	ymm5, ymm5, ymm6
	LONG $0x4b65e3c4; WORD $0x50df // vblendvpd	ymm3, ymm3, ymm7, ymm5
	LONG $0x6c6ffec5; WORD $0x60c7 // vmovdqu	ymm5, ymmword ptr [rdi + 8*rax + 96]
	LONG $0xf0efedc5               // vpxor	ymm6, ymm2, ymm0
	LONG $0xf8efd5c5               // vpxor	ymm7, ymm5, ymm0
	LONG $0x374de2c4; BYTE $0xf7   // vpcmpgtq	ymm6, ymm6, ymm7
	LONG $0x4b6de3c4; WORD $0x60d5 // vblendvpd	ymm2, ymm2, ymm5, ymm6
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB22_4
	LONG $0xe8eff5c5               // vpxor	ymm5, ymm1, ymm0
	LONG $0xf0efddc5               // vpxor	ymm6, ymm4, ymm0
	LONG $0x374de2c4; BYTE $0xed   // vpcmpgtq	ymm5, ymm6, ymm5
	LONG $0x4b5de3c4; WORD $0x50c9 // vblendvpd	ymm1, ymm4, ymm1, ymm5
	LONG $0xe057f5c5               // vxorpd	ymm4, ymm1, ymm0
	LONG $0xe8efe5c5               // vpxor	ymm5, ymm3, ymm0
	LONG $0x3755e2c4; BYTE $0xe4   // vpcmpgtq	ymm4, ymm5, ymm4
	LONG $0x4b65e3c4; WORD $0x40c9 // vblendvpd	ymm1, ymm3, ymm1, ymm4
	LONG $0xd857f5c5               // vxorpd	ymm3, ymm1, ymm0
	LONG $0xe0efedc5               // vpxor	ymm4, ymm2, ymm0
	LONG $0x375de2c4; BYTE $0xdb   // vpcmpgtq	ymm3, ymm4, ymm3
	LONG $0x4b6de3c4; WORD $0x30c9 // vblendvpd	ymm1, ymm2, ymm1, ymm3
	LONG $0x197de3c4; WORD $0x01ca // vextractf128	xmm2, ymm1, 1
	LONG $0xd857f1c5               // vxorpd	xmm3, xmm1, xmm0
	LONG $0xe057e9c5               // vxorpd	xmm4, xmm2, xmm0
	LONG $0x3759e2c4; BYTE $0xdb   // vpcmpgtq	xmm3, xmm4, xmm3
	LONG $0x4b69e3c4; WORD $0x30c9 // vblendvpd	xmm1, xmm2, xmm1, xmm3
	LONG $0x0479e3c4; WORD $0xeed1 // vpermilps	xmm2, xmm1, 238
	LONG $0xd857f1c5               // vxorpd	xmm3, xmm1, xmm0
	LONG $0xc057e9c5               // vxorpd	xmm0, xmm2, xmm0
	LONG $0x3779e2c4; BYTE $0xc3   // vpcmpgtq	xmm0, xmm0, xmm3
	LONG $0x4b69e3c4; WORD $0x00c1 // vblendvpd	xmm0, xmm2, xmm1, xmm0
	LONG $0x7ef9e1c4; BYTE $0xc0   // vmovq	rax, xmm0
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB22_7

LBB22_6:
	LONG $0xcf148b48         // mov	rdx, qword ptr [rdi + 8*rcx]
	WORD $0x3948; BYTE $0xc2 // cmp	rdx, rax
	LONG $0xc2420f48         // cmovb	rax, rdx
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB22_6

LBB22_7:
	WORD $0x8948; BYTE $0x06 // mov	qword ptr [rsi], rax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LCPI23_0:
	//
	QUAD $0x8000000000000000

TEXT ·_uint64_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x8b48; BYTE $0x07 // mov	rax, qword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB23_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB23_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB23_6

LBB23_3:
	WORD $0xe283; BYTE $0x0f             // and	edx, 15
	WORD $0x894c; BYTE $0xc1             // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1             // sub	rcx, rdx
	LONG $0x6ef9e1c4; BYTE $0xc0         // vmovq	xmm0, rax
	LONG $0x597de2c4; BYTE $0xc8         // vpbroadcastq	ymm1, xmm0
	QUAD $0x00010d05597de2c4; BYTE $0x00 // vpbroadcastq	ymm0, qword ptr [rip + .LCPI23_0]
	WORD $0xc031                         // xor	eax, eax
	LONG $0xe16ffdc5                     // vmovdqa	ymm4, ymm1
	LONG $0xd96ffdc5                     // vmovdqa	ymm3, ymm1
	LONG $0xd16ffdc5                     // vmovdqa	ymm2, ymm1

LBB23_4:
	LONG $0x2c6ffec5; BYTE $0xc7   // vmovdqu	ymm5, ymmword ptr [rdi + 8*rax]
	LONG $0x746ffec5; WORD $0x20c7 // vmovdqu	ymm6, ymmword ptr [rdi + 8*rax + 32]
	LONG $0x7c6ffec5; WORD $0x40c7 // vmovdqu	ymm7, ymmword ptr [rdi + 8*rax + 64]
	LONG $0xc0ef75c5               // vpxor	ymm8, ymm1, ymm0
	LONG $0xc8ef55c5               // vpxor	ymm9, ymm5, ymm0
	LONG $0x373542c4; BYTE $0xc0   // vpcmpgtq	ymm8, ymm9, ymm8
	LONG $0x4b75e3c4; WORD $0x80cd // vblendvpd	ymm1, ymm1, ymm5, ymm8
	LONG $0xe8efddc5               // vpxor	ymm5, ymm4, ymm0
	LONG $0xc0ef4dc5               // vpxor	ymm8, ymm6, ymm0
	LONG $0x373de2c4; BYTE $0xed   // vpcmpgtq	ymm5, ymm8, ymm5
	LONG $0x4b5de3c4; WORD $0x50e6 // vblendvpd	ymm4, ymm4, ymm6, ymm5
	LONG $0xe8efe5c5               // vpxor	ymm5, ymm3, ymm0
	LONG $0xf0efc5c5               // vpxor	ymm6, ymm7, ymm0
	LONG $0x374de2c4; BYTE $0xed   // vpcmpgtq	ymm5, ymm6, ymm5
	LONG $0x4b65e3c4; WORD $0x50df // vblendvpd	ymm3, ymm3, ymm7, ymm5
	LONG $0x6c6ffec5; WORD $0x60c7 // vmovdqu	ymm5, ymmword ptr [rdi + 8*rax + 96]
	LONG $0xf0efedc5               // vpxor	ymm6, ymm2, ymm0
	LONG $0xf8efd5c5               // vpxor	ymm7, ymm5, ymm0
	LONG $0x3745e2c4; BYTE $0xf6   // vpcmpgtq	ymm6, ymm7, ymm6
	LONG $0x4b6de3c4; WORD $0x60d5 // vblendvpd	ymm2, ymm2, ymm5, ymm6
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB23_4
	LONG $0xe8efddc5               // vpxor	ymm5, ymm4, ymm0
	LONG $0xf0eff5c5               // vpxor	ymm6, ymm1, ymm0
	LONG $0x374de2c4; BYTE $0xed   // vpcmpgtq	ymm5, ymm6, ymm5
	LONG $0x4b5de3c4; WORD $0x50c9 // vblendvpd	ymm1, ymm4, ymm1, ymm5
	LONG $0xe057f5c5               // vxorpd	ymm4, ymm1, ymm0
	LONG $0xe8efe5c5               // vpxor	ymm5, ymm3, ymm0
	LONG $0x375de2c4; BYTE $0xe5   // vpcmpgtq	ymm4, ymm4, ymm5
	LONG $0x4b65e3c4; WORD $0x40c9 // vblendvpd	ymm1, ymm3, ymm1, ymm4
	LONG $0xd857f5c5               // vxorpd	ymm3, ymm1, ymm0
	LONG $0xe0efedc5               // vpxor	ymm4, ymm2, ymm0
	LONG $0x3765e2c4; BYTE $0xdc   // vpcmpgtq	ymm3, ymm3, ymm4
	LONG $0x4b6de3c4; WORD $0x30c9 // vblendvpd	ymm1, ymm2, ymm1, ymm3
	LONG $0x197de3c4; WORD $0x01ca // vextractf128	xmm2, ymm1, 1
	LONG $0xd857e9c5               // vxorpd	xmm3, xmm2, xmm0
	LONG $0xe057f1c5               // vxorpd	xmm4, xmm1, xmm0
	LONG $0x3759e2c4; BYTE $0xdb   // vpcmpgtq	xmm3, xmm4, xmm3
	LONG $0x4b69e3c4; WORD $0x30c9 // vblendvpd	xmm1, xmm2, xmm1, xmm3
	LONG $0x0479e3c4; WORD $0xeed1 // vpermilps	xmm2, xmm1, 238
	LONG $0xd857f1c5               // vxorpd	xmm3, xmm1, xmm0
	LONG $0xc057e9c5               // vxorpd	xmm0, xmm2, xmm0
	LONG $0x3761e2c4; BYTE $0xc0   // vpcmpgtq	xmm0, xmm3, xmm0
	LONG $0x4b69e3c4; WORD $0x00c1 // vblendvpd	xmm0, xmm2, xmm1, xmm0
	LONG $0x7ef9e1c4; BYTE $0xc0   // vmovq	rax, xmm0
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB23_7

LBB23_6:
	LONG $0xcf148b48         // mov	rdx, qword ptr [rdi + 8*rcx]
	WORD $0x3948; BYTE $0xc2 // cmp	rdx, rax
	LONG $0xc2470f48         // cmova	rax, rdx
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB23_6

LBB23_7:
	WORD $0x8948; BYTE $0x06 // mov	qword ptr [rsi], rax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret
	QUAD $0x8000000000000000

TEXT ·_uint64_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB24_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB24_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB24_8

LBB24_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB24_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB24_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x0fe18341                           // and	r9d, 15
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB24_6:
	LONG $0x6f7ea1c4; WORD $0xd604             // vmovdqu	ymm0, ymmword ptr [rsi + 8*r10]
	LONG $0x6f7ea1c4; WORD $0xd64c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 8*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0xd654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 8*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0xd65c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 8*r10 + 96]
	LONG $0xd47da1c4; WORD $0xd704             // vpaddq	ymm0, ymm0, ymmword ptr [rdi + 8*r10]
	LONG $0xd475a1c4; WORD $0xd74c; BYTE $0x20 // vpaddq	ymm1, ymm1, ymmword ptr [rdi + 8*r10 + 32]
	LONG $0xd46da1c4; WORD $0xd754; BYTE $0x40 // vpaddq	ymm2, ymm2, ymmword ptr [rdi + 8*r10 + 64]
	LONG $0xd465a1c4; WORD $0xd75c; BYTE $0x60 // vpaddq	ymm3, ymm3, ymmword ptr [rdi + 8*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0xd204             // vmovdqu	ymmword ptr [rdx + 8*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0xd24c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 8*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0xd254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 8*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0xd25c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 8*r10 + 96], ymm3
	LONG $0x10c28349                           // add	r10, 16
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB24_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB24_12

LBB24_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB24_10

LBB24_9:
	LONG $0xde048b4a         // mov	rax, qword ptr [rsi + 8*r11]
	LONG $0xdf04034a         // add	rax, qword ptr [rdi + 8*r11]
	LONG $0xda04894a         // mov	qword ptr [rdx + 8*r11], rax
	WORD $0xff49; BYTE $0xc3 // inc	r11
	WORD $0xff48; BYTE $0xc9 // dec	rcx
	JNE  LBB24_9

LBB24_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB24_12

LBB24_11:
	LONG $0xde048b4a             // mov	rax, qword ptr [rsi + 8*r11]
	LONG $0xdf04034a             // add	rax, qword ptr [rdi + 8*r11]
	LONG $0xda04894a             // mov	qword ptr [rdx + 8*r11], rax
	LONG $0xde448b4a; BYTE $0x08 // mov	rax, qword ptr [rsi + 8*r11 + 8]
	LONG $0xdf44034a; BYTE $0x08 // add	rax, qword ptr [rdi + 8*r11 + 8]
	LONG $0xda44894a; BYTE $0x08 // mov	qword ptr [rdx + 8*r11 + 8], rax
	LONG $0xde448b4a; BYTE $0x10 // mov	rax, qword ptr [rsi + 8*r11 + 16]
	LONG $0xdf44034a; BYTE $0x10 // add	rax, qword ptr [rdi + 8*r11 + 16]
	LONG $0xda44894a; BYTE $0x10 // mov	qword ptr [rdx + 8*r11 + 16], rax
	LONG $0xde448b4a; BYTE $0x18 // mov	rax, qword ptr [rsi + 8*r11 + 24]
	LONG $0xdf44034a; BYTE $0x18 // add	rax, qword ptr [rdi + 8*r11 + 24]
	LONG $0xda44894a; BYTE $0x18 // mov	qword ptr [rdx + 8*r11 + 24], rax
	LONG $0x04c38349             // add	r11, 4
	WORD $0x394d; BYTE $0xd8     // cmp	r8, r11
	JNE  LBB24_11

LBB24_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint64_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB25_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB25_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB25_8

LBB25_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB25_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB25_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x0fe18341                           // and	r9d, 15
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB25_6:
	LONG $0x6f7ea1c4; WORD $0xd704             // vmovdqu	ymm0, ymmword ptr [rdi + 8*r10]
	LONG $0x6f7ea1c4; WORD $0xd74c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rdi + 8*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0xd754; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rdi + 8*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0xd75c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rdi + 8*r10 + 96]
	LONG $0xfb7da1c4; WORD $0xd604             // vpsubq	ymm0, ymm0, ymmword ptr [rsi + 8*r10]
	LONG $0xfb75a1c4; WORD $0xd64c; BYTE $0x20 // vpsubq	ymm1, ymm1, ymmword ptr [rsi + 8*r10 + 32]
	LONG $0xfb6da1c4; WORD $0xd654; BYTE $0x40 // vpsubq	ymm2, ymm2, ymmword ptr [rsi + 8*r10 + 64]
	LONG $0xfb65a1c4; WORD $0xd65c; BYTE $0x60 // vpsubq	ymm3, ymm3, ymmword ptr [rsi + 8*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0xd204             // vmovdqu	ymmword ptr [rdx + 8*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0xd24c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 8*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0xd254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 8*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0xd25c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 8*r10 + 96], ymm3
	LONG $0x10c28349                           // add	r10, 16
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB25_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB25_12

LBB25_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB25_10

LBB25_9:
	LONG $0xdf048b4a         // mov	rax, qword ptr [rdi + 8*r11]
	LONG $0xde042b4a         // sub	rax, qword ptr [rsi + 8*r11]
	LONG $0xda04894a         // mov	qword ptr [rdx + 8*r11], rax
	WORD $0xff49; BYTE $0xc3 // inc	r11
	WORD $0xff48; BYTE $0xc9 // dec	rcx
	JNE  LBB25_9

LBB25_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB25_12

LBB25_11:
	LONG $0xdf048b4a             // mov	rax, qword ptr [rdi + 8*r11]
	LONG $0xde042b4a             // sub	rax, qword ptr [rsi + 8*r11]
	LONG $0xda04894a             // mov	qword ptr [rdx + 8*r11], rax
	LONG $0xdf448b4a; BYTE $0x08 // mov	rax, qword ptr [rdi + 8*r11 + 8]
	LONG $0xde442b4a; BYTE $0x08 // sub	rax, qword ptr [rsi + 8*r11 + 8]
	LONG $0xda44894a; BYTE $0x08 // mov	qword ptr [rdx + 8*r11 + 8], rax
	LONG $0xdf448b4a; BYTE $0x10 // mov	rax, qword ptr [rdi + 8*r11 + 16]
	LONG $0xde442b4a; BYTE $0x10 // sub	rax, qword ptr [rsi + 8*r11 + 16]
	LONG $0xda44894a; BYTE $0x10 // mov	qword ptr [rdx + 8*r11 + 16], rax
	LONG $0xdf448b4a; BYTE $0x18 // mov	rax, qword ptr [rdi + 8*r11 + 24]
	LONG $0xde442b4a; BYTE $0x18 // sub	rax, qword ptr [rsi + 8*r11 + 24]
	LONG $0xda44894a; BYTE $0x18 // mov	qword ptr [rdx + 8*r11 + 24], rax
	LONG $0x04c38349             // add	r11, 4
	WORD $0x394d; BYTE $0xd8     // cmp	r8, r11
	JNE  LBB25_11

LBB25_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint64_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB26_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB26_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB26_8

LBB26_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB26_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB26_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x0fe18341                           // and	r9d, 15
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB26_6:
	LONG $0x6f7ea1c4; WORD $0xd70c             // vmovdqu	ymm1, ymmword ptr [rdi + 8*r10]
	LONG $0x6f7ea1c4; WORD $0xd754; BYTE $0x20 // vmovdqu	ymm2, ymmword ptr [rdi + 8*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0xd75c; BYTE $0x40 // vmovdqu	ymm3, ymmword ptr [rdi + 8*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0xd744; BYTE $0x60 // vmovdqu	ymm0, ymmword ptr [rdi + 8*r10 + 96]
	LONG $0x6f7ea1c4; WORD $0xd624             // vmovdqu	ymm4, ymmword ptr [rsi + 8*r10]
	LONG $0x6f7ea1c4; WORD $0xd66c; BYTE $0x20 // vmovdqu	ymm5, ymmword ptr [rsi + 8*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0xd674; BYTE $0x40 // vmovdqu	ymm6, ymmword ptr [rsi + 8*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0xd67c; BYTE $0x60 // vmovdqu	ymm7, ymmword ptr [rsi + 8*r10 + 96]
	LONG $0xd473bdc5; BYTE $0x20               // vpsrlq	ymm8, ymm4, 32
	LONG $0xc1f43dc5                           // vpmuludq	ymm8, ymm8, ymm1
	LONG $0xd173b5c5; BYTE $0x20               // vpsrlq	ymm9, ymm1, 32
	LONG $0xccf435c5                           // vpmuludq	ymm9, ymm9, ymm4
	LONG $0xd43541c4; BYTE $0xc0               // vpaddq	ymm8, ymm9, ymm8
	LONG $0x733dc1c4; WORD $0x20f0             // vpsllq	ymm8, ymm8, 32
	LONG $0xc9f4ddc5                           // vpmuludq	ymm1, ymm4, ymm1
	LONG $0xc9d4bdc5                           // vpaddq	ymm1, ymm8, ymm1
	LONG $0xd573ddc5; BYTE $0x20               // vpsrlq	ymm4, ymm5, 32
	LONG $0xe2f4ddc5                           // vpmuludq	ymm4, ymm4, ymm2
	LONG $0xd273bdc5; BYTE $0x20               // vpsrlq	ymm8, ymm2, 32
	LONG $0xc5f43dc5                           // vpmuludq	ymm8, ymm8, ymm5
	LONG $0xe4d4bdc5                           // vpaddq	ymm4, ymm8, ymm4
	LONG $0xf473ddc5; BYTE $0x20               // vpsllq	ymm4, ymm4, 32
	LONG $0xd2f4d5c5                           // vpmuludq	ymm2, ymm5, ymm2
	LONG $0xd4d4edc5                           // vpaddq	ymm2, ymm2, ymm4
	LONG $0xd673ddc5; BYTE $0x20               // vpsrlq	ymm4, ymm6, 32
	LONG $0xe3f4ddc5                           // vpmuludq	ymm4, ymm4, ymm3
	LONG $0xd373d5c5; BYTE $0x20               // vpsrlq	ymm5, ymm3, 32
	LONG $0xedf4cdc5                           // vpmuludq	ymm5, ymm6, ymm5
	LONG $0xe4d4d5c5                           // vpaddq	ymm4, ymm5, ymm4
	LONG $0xf473ddc5; BYTE $0x20               // vpsllq	ymm4, ymm4, 32
	LONG $0xdbf4cdc5                           // vpmuludq	ymm3, ymm6, ymm3
	LONG $0xdcd4e5c5                           // vpaddq	ymm3, ymm3, ymm4
	LONG $0xd773ddc5; BYTE $0x20               // vpsrlq	ymm4, ymm7, 32
	LONG $0xe0f4ddc5                           // vpmuludq	ymm4, ymm4, ymm0
	LONG $0xd073d5c5; BYTE $0x20               // vpsrlq	ymm5, ymm0, 32
	LONG $0xedf4c5c5                           // vpmuludq	ymm5, ymm7, ymm5
	LONG $0xe4d4d5c5                           // vpaddq	ymm4, ymm5, ymm4
	LONG $0xf473ddc5; BYTE $0x20               // vpsllq	ymm4, ymm4, 32
	LONG $0xc0f4c5c5                           // vpmuludq	ymm0, ymm7, ymm0
	LONG $0xc4d4fdc5                           // vpaddq	ymm0, ymm0, ymm4
	LONG $0x7f7ea1c4; WORD $0xd20c             // vmovdqu	ymmword ptr [rdx + 8*r10], ymm1
	LONG $0x7f7ea1c4; WORD $0xd254; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 8*r10 + 32], ymm2
	LONG $0x7f7ea1c4; WORD $0xd25c; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 8*r10 + 64], ymm3
	LONG $0x7f7ea1c4; WORD $0xd244; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 8*r10 + 96], ymm0
	LONG $0x10c28349                           // add	r10, 16
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB26_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB26_12

LBB26_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB26_10

LBB26_9:
	LONG $0xde048b4a             // mov	rax, qword ptr [rsi + 8*r11]
	LONG $0x04af0f4a; BYTE $0xdf // imul	rax, qword ptr [rdi + 8*r11]
	LONG $0xda04894a             // mov	qword ptr [rdx + 8*r11], rax
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB26_9

LBB26_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB26_12

LBB26_11:
	LONG $0xde048b4a               // mov	rax, qword ptr [rsi + 8*r11]
	LONG $0x04af0f4a; BYTE $0xdf   // imul	rax, qword ptr [rdi + 8*r11]
	LONG $0xda04894a               // mov	qword ptr [rdx + 8*r11], rax
	LONG $0xde448b4a; BYTE $0x08   // mov	rax, qword ptr [rsi + 8*r11 + 8]
	LONG $0x44af0f4a; WORD $0x08df // imul	rax, qword ptr [rdi + 8*r11 + 8]
	LONG $0xda44894a; BYTE $0x08   // mov	qword ptr [rdx + 8*r11 + 8], rax
	LONG $0xde448b4a; BYTE $0x10   // mov	rax, qword ptr [rsi + 8*r11 + 16]
	LONG $0x44af0f4a; WORD $0x10df // imul	rax, qword ptr [rdi + 8*r11 + 16]
	LONG $0xda44894a; BYTE $0x10   // mov	qword ptr [rdx + 8*r11 + 16], rax
	LONG $0xde448b4a; BYTE $0x18   // mov	rax, qword ptr [rsi + 8*r11 + 24]
	LONG $0x44af0f4a; WORD $0x18df // imul	rax, qword ptr [rdi + 8*r11 + 24]
	LONG $0xda44894a; BYTE $0x18   // mov	qword ptr [rdx + 8*r11 + 24], rax
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB26_11

LBB26_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_uint64_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	WORD $0x5641             // push	r14
	BYTE $0x53               // push	rbx
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB27_21
	WORD $0x8949; BYTE $0xd0 // mov	r8, rdx
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x04fa8349         // cmp	r10, 4
	JAE  LBB27_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB27_8

LBB27_3:
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf8 // sub	rax, rdi
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB27_8
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf0 // sub	rax, rsi
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB27_8
	WORD $0x8941; BYTE $0xce // mov	r14d, ecx
	LONG $0x03e68341         // and	r14d, 3
	WORD $0x894d; BYTE $0xd3 // mov	r11, r10
	WORD $0x294d; BYTE $0xf3 // sub	r11, r14
	WORD $0xdb31             // xor	ebx, ebx

LBB27_6:
	LONG $0xdf0c8b4c                           // mov	r9, qword ptr [rdi + 8*rbx]
	LONG $0xdf448b48; BYTE $0x08               // mov	rax, qword ptr [rdi + 8*rbx + 8]
	WORD $0xd231                               // xor	edx, edx
	LONG $0xde74f748; BYTE $0x08               // div	qword ptr [rsi + 8*rbx + 8]
	LONG $0x6ef9e1c4; BYTE $0xc0               // vmovq	xmm0, rax
	WORD $0x894c; BYTE $0xc8                   // mov	rax, r9
	WORD $0xd231                               // xor	edx, edx
	LONG $0xde34f748                           // div	qword ptr [rsi + 8*rbx]
	LONG $0x6ef9e1c4; BYTE $0xc8               // vmovq	xmm1, rax
	LONG $0xc06cf1c5                           // vpunpcklqdq	xmm0, xmm1, xmm0
	LONG $0xdf448b48; BYTE $0x18               // mov	rax, qword ptr [rdi + 8*rbx + 24]
	WORD $0xd231                               // xor	edx, edx
	LONG $0xde74f748; BYTE $0x18               // div	qword ptr [rsi + 8*rbx + 24]
	WORD $0x8949; BYTE $0xc1                   // mov	r9, rax
	LONG $0xdf448b48; BYTE $0x10               // mov	rax, qword ptr [rdi + 8*rbx + 16]
	WORD $0xd231                               // xor	edx, edx
	LONG $0xde74f748; BYTE $0x10               // div	qword ptr [rsi + 8*rbx + 16]
	LONG $0x6ef9c1c4; BYTE $0xc9               // vmovq	xmm1, r9
	LONG $0x6ef9e1c4; BYTE $0xd0               // vmovq	xmm2, rax
	LONG $0xc96ce9c5                           // vpunpcklqdq	xmm1, xmm2, xmm1
	LONG $0x7f7ac1c4; WORD $0xd84c; BYTE $0x10 // vmovdqu	xmmword ptr [r8 + 8*rbx + 16], xmm1
	LONG $0x7f7ac1c4; WORD $0xd804             // vmovdqu	xmmword ptr [r8 + 8*rbx], xmm0
	LONG $0x04c38348                           // add	rbx, 4
	WORD $0x3949; BYTE $0xdb                   // cmp	r11, rbx
	JNE  LBB27_6
	WORD $0x854d; BYTE $0xf6                   // test	r14, r14
	JE   LBB27_21

LBB27_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	LONG $0x015b8d49         // lea	rbx, [r11 + 1]
	WORD $0xc1f6; BYTE $0x01 // test	cl, 1
	JE   LBB27_13
	LONG $0xdf048b4a         // mov	rax, qword ptr [rdi + 8*r11]
	LONG $0xde0c8b4a         // mov	rcx, qword ptr [rsi + 8*r11]
	WORD $0x8948; BYTE $0xc2 // mov	rdx, rax
	WORD $0x0948; BYTE $0xca // or	rdx, rcx
	LONG $0x20eac148         // shr	rdx, 32
	JE   LBB27_10
	WORD $0xd231             // xor	edx, edx
	WORD $0xf748; BYTE $0xf1 // div	rcx
	JMP  LBB27_12

LBB27_10:
	WORD $0xd231 // xor	edx, edx
	WORD $0xf1f7 // div	ecx

LBB27_12:
	LONG $0xd804894b         // mov	qword ptr [r8 + 8*r11], rax
	WORD $0x8949; BYTE $0xdb // mov	r11, rbx

LBB27_13:
	WORD $0x3949; BYTE $0xda // cmp	r10, rbx
	JNE  LBB27_14
	JMP  LBB27_21

LBB27_19:
	WORD $0xd231                 // xor	edx, edx
	WORD $0xf748; BYTE $0xf1     // div	rcx
	LONG $0xd844894b; BYTE $0x08 // mov	qword ptr [r8 + 8*r11 + 8], rax
	LONG $0x02c38349             // add	r11, 2
	WORD $0x394d; BYTE $0xda     // cmp	r10, r11
	JE   LBB27_21

LBB27_14:
	LONG $0xdf048b4a         // mov	rax, qword ptr [rdi + 8*r11]
	LONG $0xde0c8b4a         // mov	rcx, qword ptr [rsi + 8*r11]
	WORD $0x8948; BYTE $0xc2 // mov	rdx, rax
	WORD $0x0948; BYTE $0xca // or	rdx, rcx
	LONG $0x20eac148         // shr	rdx, 32
	JE   LBB27_15
	WORD $0xd231             // xor	edx, edx
	WORD $0xf748; BYTE $0xf1 // div	rcx
	JMP  LBB27_17

LBB27_15:
	WORD $0xd231 // xor	edx, edx
	WORD $0xf1f7 // div	ecx

LBB27_17:
	LONG $0xd804894b             // mov	qword ptr [r8 + 8*r11], rax
	LONG $0xdf448b4a; BYTE $0x08 // mov	rax, qword ptr [rdi + 8*r11 + 8]
	LONG $0xde4c8b4a; BYTE $0x08 // mov	rcx, qword ptr [rsi + 8*r11 + 8]
	WORD $0x8948; BYTE $0xc2     // mov	rdx, rax
	WORD $0x0948; BYTE $0xca     // or	rdx, rcx
	LONG $0x20eac148             // shr	rdx, 32
	JNE  LBB27_19
	WORD $0xd231                 // xor	edx, edx
	WORD $0xf1f7                 // div	ecx
	LONG $0xd844894b; BYTE $0x08 // mov	qword ptr [r8 + 8*r11 + 8], rax
	LONG $0x02c38349             // add	r11, 2
	WORD $0x394d; BYTE $0xda     // cmp	r10, r11
	JNE  LBB27_14

LBB27_21:
	LONG $0xf0658d48 // lea	rsp, [rbp - 16]
	BYTE $0x5b       // pop	rbx
	WORD $0x5e41     // pop	r14
	BYTE $0x5d       // pop	rbp
	BYTE $0xc3       // ret

TEXT ·_int8_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB28_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB28_4
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	WORD $0xc031             // xor	eax, eax
	JMP  LBB28_13

LBB28_1:
	WORD $0xc031  // xor	eax, eax
	JMP  LBB28_14

LBB28_4:
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB28_6
	WORD $0xc031                               // xor	eax, eax
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d
	JMP  LBB28_10

LBB28_6:
	WORD $0x8941; BYTE $0xd1 // mov	r9d, edx
	LONG $0x7fe18341         // and	r9d, 127
	WORD $0x894d; BYTE $0xc2 // mov	r10, r8
	WORD $0x294d; BYTE $0xca // sub	r10, r9
	LONG $0xc0eff9c5         // vpxor	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc9eff1c5         // vpxor	xmm1, xmm1, xmm1
	LONG $0xd2efe9c5         // vpxor	xmm2, xmm2, xmm2
	LONG $0xdbefe1c5         // vpxor	xmm3, xmm3, xmm3

LBB28_7:
	LONG $0x04fcfdc5; BYTE $0x07   // vpaddb	ymm0, ymm0, ymmword ptr [rdi + rax]
	LONG $0x4cfcf5c5; WORD $0x2007 // vpaddb	ymm1, ymm1, ymmword ptr [rdi + rax + 32]
	LONG $0x54fcedc5; WORD $0x4007 // vpaddb	ymm2, ymm2, ymmword ptr [rdi + rax + 64]
	LONG $0x5cfce5c5; WORD $0x6007 // vpaddb	ymm3, ymm3, ymmword ptr [rdi + rax + 96]
	LONG $0x80e88348               // sub	rax, -128
	WORD $0x3949; BYTE $0xc2       // cmp	r10, rax
	JNE  LBB28_7
	LONG $0xc0fcf5c5               // vpaddb	ymm0, ymm1, ymm0
	LONG $0xc0fcedc5               // vpaddb	ymm0, ymm2, ymm0
	LONG $0xc0fce5c5               // vpaddb	ymm0, ymm3, ymm0
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1fcf9c5               // vpaddb	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee   // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fcf9c5               // vpaddb	xmm0, xmm0, xmm1
	LONG $0xc9eff1c5               // vpxor	xmm1, xmm1, xmm1
	LONG $0xc1f6f9c5               // vpsadbw	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0x854d; BYTE $0xc9       // test	r9, r9
	JE   LBB28_14
	LONG $0x10f98341               // cmp	r9d, 16
	JB   LBB28_13

LBB28_10:
	WORD $0x894c; BYTE $0xd1 // mov	rcx, r10
	WORD $0xe283; BYTE $0x0f // and	edx, 15
	WORD $0x894d; BYTE $0xc2 // mov	r10, r8
	WORD $0x2949; BYTE $0xd2 // sub	r10, rdx
	WORD $0xb60f; BYTE $0xc0 // movzx	eax, al
	LONG $0xc06ef9c5         // vmovd	xmm0, eax

LBB28_11:
	LONG $0x04fcf9c5; BYTE $0x0f // vpaddb	xmm0, xmm0, xmmword ptr [rdi + rcx]
	LONG $0x10c18348             // add	rcx, 16
	WORD $0x3949; BYTE $0xca     // cmp	r10, rcx
	JNE  LBB28_11
	LONG $0xc870f9c5; BYTE $0xee // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fcf9c5             // vpaddb	xmm0, xmm0, xmm1
	LONG $0xc9eff1c5             // vpxor	xmm1, xmm1, xmm1
	LONG $0xc1f6f9c5             // vpsadbw	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5             // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2     // test	rdx, rdx
	JE   LBB28_14

LBB28_13:
	LONG $0x17040242         // add	al, byte ptr [rdi + r10]
	WORD $0xff49; BYTE $0xc2 // inc	r10
	WORD $0x394d; BYTE $0xd0 // cmp	r8, r10
	JNE  LBB28_13

LBB28_14:
	WORD $0x0688             // mov	byte ptr [rsi], al
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LCPI29_0:
	//

TEXT ·_int8_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xb60f; BYTE $0x07 // movzx	eax, byte ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB29_13
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB29_3
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB29_12

LBB29_3:
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB29_5
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d
	JMP  LBB29_9

LBB29_5:
	WORD $0x8941; BYTE $0xd1     // mov	r9d, edx
	LONG $0x7fe18341             // and	r9d, 127
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x294d; BYTE $0xca     // sub	r10, r9
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB29_6:
	LONG $0x387de2c4; WORD $0x0704             // vpminsb	ymm0, ymm0, ymmword ptr [rdi + rax]
	LONG $0x3875e2c4; WORD $0x074c; BYTE $0x20 // vpminsb	ymm1, ymm1, ymmword ptr [rdi + rax + 32]
	LONG $0x386de2c4; WORD $0x0754; BYTE $0x40 // vpminsb	ymm2, ymm2, ymmword ptr [rdi + rax + 64]
	LONG $0x3865e2c4; WORD $0x075c; BYTE $0x60 // vpminsb	ymm3, ymm3, ymmword ptr [rdi + rax + 96]
	LONG $0x80e88348                           // sub	rax, -128
	WORD $0x3949; BYTE $0xc2                   // cmp	r10, rax
	JNE  LBB29_6
	LONG $0x387de2c4; BYTE $0xc1               // vpminsb	ymm0, ymm0, ymm1
	LONG $0x387de2c4; BYTE $0xc2               // vpminsb	ymm0, ymm0, ymm2
	LONG $0x387de2c4; BYTE $0xc3               // vpminsb	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	xmm1, ymm0, 1
	LONG $0x3879e2c4; BYTE $0xc1               // vpminsb	xmm0, xmm0, xmm1
	QUAD $0x0000008305eff9c5                   // vpxor	xmm0, xmm0, xmmword ptr [rip + .LCPI29_0]
	LONG $0xd071f1c5; BYTE $0x08               // vpsrlw	xmm1, xmm0, 8
	LONG $0xc1daf9c5                           // vpminub	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0               // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5                           // vmovd	eax, xmm0
	WORD $0x8004                               // add	al, -128
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB29_13
	LONG $0x10f98341                           // cmp	r9d, 16
	JB   LBB29_12

LBB29_9:
	WORD $0x894c; BYTE $0xd1     // mov	rcx, r10
	WORD $0xe283; BYTE $0x0f     // and	edx, 15
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x2949; BYTE $0xd2     // sub	r10, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x7879e2c4; BYTE $0xc0 // vpbroadcastb	xmm0, xmm0

LBB29_10:
	LONG $0x3879e2c4; WORD $0x0f04 // vpminsb	xmm0, xmm0, xmmword ptr [rdi + rcx]
	LONG $0x10c18348               // add	rcx, 16
	WORD $0x3949; BYTE $0xca       // cmp	r10, rcx
	JNE  LBB29_10
	QUAD $0x0000003805eff9c5       // vpxor	xmm0, xmm0, xmmword ptr [rip + .LCPI29_0]
	LONG $0xd071f1c5; BYTE $0x08   // vpsrlw	xmm1, xmm0, 8
	LONG $0xc1daf9c5               // vpminub	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0   // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0x8004                   // add	al, -128
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB29_13

LBB29_12:
	LONG $0x0cb60f42; BYTE $0x17 // movzx	ecx, byte ptr [rdi + r10]
	WORD $0xb60f; BYTE $0xc0     // movzx	eax, al
	WORD $0xc138                 // cmp	cl, al
	WORD $0x4c0f; BYTE $0xc1     // cmovl	eax, ecx
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB29_12

LBB29_13:
	WORD $0x0688             // mov	byte ptr [rsi], al
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LCPI30_0:
	//
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80
	BYTE $0x80

TEXT ·_int8_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xb60f; BYTE $0x07 // movzx	eax, byte ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB30_13
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB30_3
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB30_12

LBB30_3:
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB30_5
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d
	JMP  LBB30_9

LBB30_5:
	WORD $0x8941; BYTE $0xd1     // mov	r9d, edx
	LONG $0x7fe18341             // and	r9d, 127
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x294d; BYTE $0xca     // sub	r10, r9
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB30_6:
	LONG $0x3c7de2c4; WORD $0x0704             // vpmaxsb	ymm0, ymm0, ymmword ptr [rdi + rax]
	LONG $0x3c75e2c4; WORD $0x074c; BYTE $0x20 // vpmaxsb	ymm1, ymm1, ymmword ptr [rdi + rax + 32]
	LONG $0x3c6de2c4; WORD $0x0754; BYTE $0x40 // vpmaxsb	ymm2, ymm2, ymmword ptr [rdi + rax + 64]
	LONG $0x3c65e2c4; WORD $0x075c; BYTE $0x60 // vpmaxsb	ymm3, ymm3, ymmword ptr [rdi + rax + 96]
	LONG $0x80e88348                           // sub	rax, -128
	WORD $0x3949; BYTE $0xc2                   // cmp	r10, rax
	JNE  LBB30_6
	LONG $0x3c7de2c4; BYTE $0xc1               // vpmaxsb	ymm0, ymm0, ymm1
	LONG $0x3c7de2c4; BYTE $0xc2               // vpmaxsb	ymm0, ymm0, ymm2
	LONG $0x3c7de2c4; BYTE $0xc3               // vpmaxsb	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	xmm1, ymm0, 1
	LONG $0x3c79e2c4; BYTE $0xc1               // vpmaxsb	xmm0, xmm0, xmm1
	QUAD $0x0000008305eff9c5                   // vpxor	xmm0, xmm0, xmmword ptr [rip + .LCPI30_0]
	LONG $0xd071f1c5; BYTE $0x08               // vpsrlw	xmm1, xmm0, 8
	LONG $0xc1daf9c5                           // vpminub	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0               // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5                           // vmovd	eax, xmm0
	WORD $0x7f34                               // xor	al, 127
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB30_13
	LONG $0x10f98341                           // cmp	r9d, 16
	JB   LBB30_12

LBB30_9:
	WORD $0x894c; BYTE $0xd1     // mov	rcx, r10
	WORD $0xe283; BYTE $0x0f     // and	edx, 15
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x2949; BYTE $0xd2     // sub	r10, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x7879e2c4; BYTE $0xc0 // vpbroadcastb	xmm0, xmm0

LBB30_10:
	LONG $0x3c79e2c4; WORD $0x0f04 // vpmaxsb	xmm0, xmm0, xmmword ptr [rdi + rcx]
	LONG $0x10c18348               // add	rcx, 16
	WORD $0x3949; BYTE $0xca       // cmp	r10, rcx
	JNE  LBB30_10
	QUAD $0x0000003805eff9c5       // vpxor	xmm0, xmm0, xmmword ptr [rip + .LCPI30_0]
	LONG $0xd071f1c5; BYTE $0x08   // vpsrlw	xmm1, xmm0, 8
	LONG $0xc1daf9c5               // vpminub	xmm0, xmm0, xmm1
	LONG $0x4179e2c4; BYTE $0xc0   // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0x7f34                   // xor	al, 127
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB30_13

LBB30_12:
	LONG $0x0cb60f42; BYTE $0x17 // movzx	ecx, byte ptr [rdi + r10]
	WORD $0xb60f; BYTE $0xc0     // movzx	eax, al
	WORD $0xc138                 // cmp	cl, al
	WORD $0x4f0f; BYTE $0xc1     // cmovg	eax, ecx
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB30_12

LBB30_13:
	WORD $0x0688             // mov	byte ptr [rsi], al
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f
	BYTE $0x7f

TEXT ·_int8_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB31_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB31_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB31_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB31_16

LBB31_15:
	LONG $0x04b60f42; BYTE $0x1e // movzx	eax, byte ptr [rsi + r11]
	LONG $0x1f040242             // add	al, byte ptr [rdi + r11]
	LONG $0x1a048842             // mov	byte ptr [rdx + r11], al
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB31_15

LBB31_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB31_18

LBB31_17:
	LONG $0x04b60f42; BYTE $0x1e   // movzx	eax, byte ptr [rsi + r11]
	LONG $0x1f040242               // add	al, byte ptr [rdi + r11]
	LONG $0x1a048842               // mov	byte ptr [rdx + r11], al
	LONG $0x44b60f42; WORD $0x011e // movzx	eax, byte ptr [rsi + r11 + 1]
	LONG $0x1f440242; BYTE $0x01   // add	al, byte ptr [rdi + r11 + 1]
	LONG $0x1a448842; BYTE $0x01   // mov	byte ptr [rdx + r11 + 1], al
	LONG $0x44b60f42; WORD $0x021e // movzx	eax, byte ptr [rsi + r11 + 2]
	LONG $0x1f440242; BYTE $0x02   // add	al, byte ptr [rdi + r11 + 2]
	LONG $0x1a448842; BYTE $0x02   // mov	byte ptr [rdx + r11 + 2], al
	LONG $0x44b60f42; WORD $0x031e // movzx	eax, byte ptr [rsi + r11 + 3]
	LONG $0x1f440242; BYTE $0x03   // add	al, byte ptr [rdi + r11 + 3]
	LONG $0x1a448842; BYTE $0x03   // mov	byte ptr [rdx + r11 + 3], al
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB31_17

LBB31_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB31_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB31_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB31_14
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB31_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB31_11

LBB31_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x7fe18341         // and	r9d, 127
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB31_8:
	LONG $0x6f7ea1c4; WORD $0x1604             // vmovdqu	ymm0, ymmword ptr [rsi + r10]
	LONG $0x6f7ea1c4; WORD $0x164c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x1654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x165c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + r10 + 96]
	LONG $0xfc7da1c4; WORD $0x1704             // vpaddb	ymm0, ymm0, ymmword ptr [rdi + r10]
	LONG $0xfc75a1c4; WORD $0x174c; BYTE $0x20 // vpaddb	ymm1, ymm1, ymmword ptr [rdi + r10 + 32]
	LONG $0xfc6da1c4; WORD $0x1754; BYTE $0x40 // vpaddb	ymm2, ymm2, ymmword ptr [rdi + r10 + 64]
	LONG $0xfc65a1c4; WORD $0x175c; BYTE $0x60 // vpaddb	ymm3, ymm3, ymmword ptr [rdi + r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x1204             // vmovdqu	ymmword ptr [rdx + r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x124c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x1254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x125c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + r10 + 96], ymm3
	LONG $0x80ea8349                           // sub	r10, -128
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB31_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB31_18
	LONG $0x10f98341                           // cmp	r9d, 16
	JB   LBB31_14

LBB31_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x0fe28341         // and	r10d, 15
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB31_12:
	LONG $0x6f7aa1c4; WORD $0x0e04 // vmovdqu	xmm0, xmmword ptr [rsi + r9]
	LONG $0xfc79a1c4; WORD $0x0f04 // vpaddb	xmm0, xmm0, xmmword ptr [rdi + r9]
	LONG $0x7f7aa1c4; WORD $0x0a04 // vmovdqu	xmmword ptr [rdx + r9], xmm0
	LONG $0x10c18349               // add	r9, 16
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB31_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB31_14
	JMP  LBB31_18

TEXT ·_int8_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB32_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB32_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB32_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB32_16

LBB32_15:
	LONG $0x04b60f42; BYTE $0x1f // movzx	eax, byte ptr [rdi + r11]
	LONG $0x1e042a42             // sub	al, byte ptr [rsi + r11]
	LONG $0x1a048842             // mov	byte ptr [rdx + r11], al
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB32_15

LBB32_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB32_18

LBB32_17:
	LONG $0x04b60f42; BYTE $0x1f   // movzx	eax, byte ptr [rdi + r11]
	LONG $0x1e042a42               // sub	al, byte ptr [rsi + r11]
	LONG $0x1a048842               // mov	byte ptr [rdx + r11], al
	LONG $0x44b60f42; WORD $0x011f // movzx	eax, byte ptr [rdi + r11 + 1]
	LONG $0x1e442a42; BYTE $0x01   // sub	al, byte ptr [rsi + r11 + 1]
	LONG $0x1a448842; BYTE $0x01   // mov	byte ptr [rdx + r11 + 1], al
	LONG $0x44b60f42; WORD $0x021f // movzx	eax, byte ptr [rdi + r11 + 2]
	LONG $0x1e442a42; BYTE $0x02   // sub	al, byte ptr [rsi + r11 + 2]
	LONG $0x1a448842; BYTE $0x02   // mov	byte ptr [rdx + r11 + 2], al
	LONG $0x44b60f42; WORD $0x031f // movzx	eax, byte ptr [rdi + r11 + 3]
	LONG $0x1e442a42; BYTE $0x03   // sub	al, byte ptr [rsi + r11 + 3]
	LONG $0x1a448842; BYTE $0x03   // mov	byte ptr [rdx + r11 + 3], al
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB32_17

LBB32_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB32_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB32_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB32_14
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB32_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB32_11

LBB32_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x7fe18341         // and	r9d, 127
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB32_8:
	LONG $0x6f7ea1c4; WORD $0x1704             // vmovdqu	ymm0, ymmword ptr [rdi + r10]
	LONG $0x6f7ea1c4; WORD $0x174c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rdi + r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x1754; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rdi + r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x175c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rdi + r10 + 96]
	LONG $0xf87da1c4; WORD $0x1604             // vpsubb	ymm0, ymm0, ymmword ptr [rsi + r10]
	LONG $0xf875a1c4; WORD $0x164c; BYTE $0x20 // vpsubb	ymm1, ymm1, ymmword ptr [rsi + r10 + 32]
	LONG $0xf86da1c4; WORD $0x1654; BYTE $0x40 // vpsubb	ymm2, ymm2, ymmword ptr [rsi + r10 + 64]
	LONG $0xf865a1c4; WORD $0x165c; BYTE $0x60 // vpsubb	ymm3, ymm3, ymmword ptr [rsi + r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x1204             // vmovdqu	ymmword ptr [rdx + r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x124c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x1254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x125c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + r10 + 96], ymm3
	LONG $0x80ea8349                           // sub	r10, -128
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB32_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB32_18
	LONG $0x10f98341                           // cmp	r9d, 16
	JB   LBB32_14

LBB32_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x0fe28341         // and	r10d, 15
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB32_12:
	LONG $0x6f7aa1c4; WORD $0x0f04 // vmovdqu	xmm0, xmmword ptr [rdi + r9]
	LONG $0xf879a1c4; WORD $0x0e04 // vpsubb	xmm0, xmm0, xmmword ptr [rsi + r9]
	LONG $0x7f7aa1c4; WORD $0x0a04 // vmovdqu	xmmword ptr [rdx + r9], xmm0
	LONG $0x10c18349               // add	r9, 16
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB32_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB32_14
	JMP  LBB32_18

LCPI33_0:
	//

TEXT ·_int8_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB33_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB33_3
	WORD $0x3145; BYTE $0xc9 // xor	r9d, r9d

LBB33_14:
	WORD $0x2944; BYTE $0xc9 // sub	ecx, r9d
	WORD $0x894d; BYTE $0xca // mov	r10, r9
	WORD $0xf749; BYTE $0xd2 // not	r10
	WORD $0x014d; BYTE $0xc2 // add	r10, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB33_16

LBB33_15:
	LONG $0x04b60f42; BYTE $0x0e // movzx	eax, byte ptr [rsi + r9]
	LONG $0x0f24f642             // mul	byte ptr [rdi + r9]
	LONG $0x0a048842             // mov	byte ptr [rdx + r9], al
	WORD $0xff49; BYTE $0xc1     // inc	r9
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB33_15

LBB33_16:
	LONG $0x03fa8349 // cmp	r10, 3
	JB   LBB33_18

LBB33_17:
	LONG $0x04b60f42; BYTE $0x0e   // movzx	eax, byte ptr [rsi + r9]
	LONG $0x0f24f642               // mul	byte ptr [rdi + r9]
	LONG $0x0a048842               // mov	byte ptr [rdx + r9], al
	LONG $0x44b60f42; WORD $0x010e // movzx	eax, byte ptr [rsi + r9 + 1]
	LONG $0x0f64f642; BYTE $0x01   // mul	byte ptr [rdi + r9 + 1]
	LONG $0x0a448842; BYTE $0x01   // mov	byte ptr [rdx + r9 + 1], al
	LONG $0x44b60f42; WORD $0x020e // movzx	eax, byte ptr [rsi + r9 + 2]
	LONG $0x0f64f642; BYTE $0x02   // mul	byte ptr [rdi + r9 + 2]
	LONG $0x0a448842; BYTE $0x02   // mov	byte ptr [rdx + r9 + 2], al
	LONG $0x44b60f42; WORD $0x030e // movzx	eax, byte ptr [rsi + r9 + 3]
	LONG $0x0f64f642; BYTE $0x03   // mul	byte ptr [rdi + r9 + 3]
	LONG $0x0a448842; BYTE $0x03   // mov	byte ptr [rdx + r9 + 3], al
	LONG $0x04c18349               // add	r9, 4
	WORD $0x394d; BYTE $0xc8       // cmp	r8, r9
	JNE  LBB33_17

LBB33_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB33_3:
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf8                   // sub	rax, rdi
	WORD $0x3145; BYTE $0xc9                   // xor	r9d, r9d
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB33_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB33_14
	LONG $0x80f88141; WORD $0x0000; BYTE $0x00 // cmp	r8d, 128
	JAE  LBB33_7
	WORD $0x3145; BYTE $0xc9                   // xor	r9d, r9d
	JMP  LBB33_11

LBB33_7:
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x7fe28341         // and	r10d, 127
	WORD $0x894d; BYTE $0xc1 // mov	r9, r8
	WORD $0x294d; BYTE $0xd1 // sub	r9, r10
	WORD $0xc031             // xor	eax, eax
	QUAD $0x0000014b056ffec5 // vmovdqu	ymm0, ymmword ptr [rip + .LCPI33_0]

LBB33_8:
	LONG $0x1c6ffec5; BYTE $0x07   // vmovdqu	ymm3, ymmword ptr [rdi + rax]
	LONG $0x646ffec5; WORD $0x2007 // vmovdqu	ymm4, ymmword ptr [rdi + rax + 32]
	LONG $0x6c6ffec5; WORD $0x4007 // vmovdqu	ymm5, ymmword ptr [rdi + rax + 64]
	LONG $0x4c6ffec5; WORD $0x6007 // vmovdqu	ymm1, ymmword ptr [rdi + rax + 96]
	LONG $0x346ffec5; BYTE $0x06   // vmovdqu	ymm6, ymmword ptr [rsi + rax]
	LONG $0x7c6ffec5; WORD $0x2006 // vmovdqu	ymm7, ymmword ptr [rsi + rax + 32]
	LONG $0x446f7ec5; WORD $0x4006 // vmovdqu	ymm8, ymmword ptr [rsi + rax + 64]
	LONG $0x546ffec5; WORD $0x6006 // vmovdqu	ymm2, ymmword ptr [rsi + rax + 96]
	LONG $0xcb6865c5               // vpunpckhbw	ymm9, ymm3, ymm3
	LONG $0xd6684dc5               // vpunpckhbw	ymm10, ymm6, ymm6
	LONG $0xd52d41c4; BYTE $0xc9   // vpmullw	ymm9, ymm10, ymm9
	LONG $0xc8db35c5               // vpand	ymm9, ymm9, ymm0
	LONG $0xdb60e5c5               // vpunpcklbw	ymm3, ymm3, ymm3
	LONG $0xf660cdc5               // vpunpcklbw	ymm6, ymm6, ymm6
	LONG $0xdbd5cdc5               // vpmullw	ymm3, ymm6, ymm3
	LONG $0xd8dbe5c5               // vpand	ymm3, ymm3, ymm0
	LONG $0x6765c1c4; BYTE $0xd9   // vpackuswb	ymm3, ymm3, ymm9
	LONG $0xf468ddc5               // vpunpckhbw	ymm6, ymm4, ymm4
	LONG $0xcf6845c5               // vpunpckhbw	ymm9, ymm7, ymm7
	LONG $0xf6d5b5c5               // vpmullw	ymm6, ymm9, ymm6
	LONG $0xf0dbcdc5               // vpand	ymm6, ymm6, ymm0
	LONG $0xe460ddc5               // vpunpcklbw	ymm4, ymm4, ymm4
	LONG $0xff60c5c5               // vpunpcklbw	ymm7, ymm7, ymm7
	LONG $0xe4d5c5c5               // vpmullw	ymm4, ymm7, ymm4
	LONG $0xe0dbddc5               // vpand	ymm4, ymm4, ymm0
	LONG $0xe667ddc5               // vpackuswb	ymm4, ymm4, ymm6
	LONG $0xf568d5c5               // vpunpckhbw	ymm6, ymm5, ymm5
	LONG $0x683dc1c4; BYTE $0xf8   // vpunpckhbw	ymm7, ymm8, ymm8
	LONG $0xf6d5c5c5               // vpmullw	ymm6, ymm7, ymm6
	LONG $0xf0dbcdc5               // vpand	ymm6, ymm6, ymm0
	LONG $0xed60d5c5               // vpunpcklbw	ymm5, ymm5, ymm5
	LONG $0x603dc1c4; BYTE $0xf8   // vpunpcklbw	ymm7, ymm8, ymm8
	LONG $0xedd5c5c5               // vpmullw	ymm5, ymm7, ymm5
	LONG $0xe8dbd5c5               // vpand	ymm5, ymm5, ymm0
	LONG $0xee67d5c5               // vpackuswb	ymm5, ymm5, ymm6
	LONG $0xf168f5c5               // vpunpckhbw	ymm6, ymm1, ymm1
	LONG $0xfa68edc5               // vpunpckhbw	ymm7, ymm2, ymm2
	LONG $0xf6d5c5c5               // vpmullw	ymm6, ymm7, ymm6
	LONG $0xf0dbcdc5               // vpand	ymm6, ymm6, ymm0
	LONG $0xc960f5c5               // vpunpcklbw	ymm1, ymm1, ymm1
	LONG $0xd260edc5               // vpunpcklbw	ymm2, ymm2, ymm2
	LONG $0xc9d5edc5               // vpmullw	ymm1, ymm2, ymm1
	LONG $0xc8dbf5c5               // vpand	ymm1, ymm1, ymm0
	LONG $0xce67f5c5               // vpackuswb	ymm1, ymm1, ymm6
	LONG $0x1c7ffec5; BYTE $0x02   // vmovdqu	ymmword ptr [rdx + rax], ymm3
	LONG $0x647ffec5; WORD $0x2002 // vmovdqu	ymmword ptr [rdx + rax + 32], ymm4
	LONG $0x6c7ffec5; WORD $0x4002 // vmovdqu	ymmword ptr [rdx + rax + 64], ymm5
	LONG $0x4c7ffec5; WORD $0x6002 // vmovdqu	ymmword ptr [rdx + rax + 96], ymm1
	LONG $0x80e88348               // sub	rax, -128
	WORD $0x3949; BYTE $0xc1       // cmp	r9, rax
	JNE  LBB33_8
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JE   LBB33_18
	LONG $0x10fa8341               // cmp	r10d, 16
	JB   LBB33_14

LBB33_11:
	WORD $0x894c; BYTE $0xc8 // mov	rax, r9
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x0fe28341         // and	r10d, 15
	WORD $0x894d; BYTE $0xc1 // mov	r9, r8
	WORD $0x294d; BYTE $0xd1 // sub	r9, r10
	QUAD $0x0000003a056ffec5 // vmovdqu	ymm0, ymmword ptr [rip + .LCPI33_0]

LBB33_12:
	LONG $0x307de2c4; WORD $0x070c // vpmovzxbw	ymm1, xmmword ptr [rdi + rax]
	LONG $0x307de2c4; WORD $0x0614 // vpmovzxbw	ymm2, xmmword ptr [rsi + rax]
	LONG $0xc9d5edc5               // vpmullw	ymm1, ymm2, ymm1
	LONG $0xc8dbf5c5               // vpand	ymm1, ymm1, ymm0
	LONG $0x397de3c4; WORD $0x01ca // vextracti128	xmm2, ymm1, 1
	LONG $0xca67f1c5               // vpackuswb	xmm1, xmm1, xmm2
	LONG $0x0c7ffac5; BYTE $0x02   // vmovdqu	xmmword ptr [rdx + rax], xmm1
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3949; BYTE $0xc1       // cmp	r9, rax
	JNE  LBB33_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB33_14
	JMP  LBB33_18

LCPI34_0:
	//
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff
	WORD $0x00ff

TEXT ·_int8_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	WORD $0x5741             // push	r15
	WORD $0x5641             // push	r14
	BYTE $0x53               // push	rbx
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB34_12
	WORD $0x8949; BYTE $0xd0 // mov	r8, rdx
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x20fa8349         // cmp	r10, 32
	JAE  LBB34_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB34_8

LBB34_3:
	WORD $0x894c; BYTE $0xc0             // mov	rax, r8
	WORD $0x2948; BYTE $0xf8             // sub	rax, rdi
	WORD $0x3145; BYTE $0xdb             // xor	r11d, r11d
	LONG $0x20f88348                     // cmp	rax, 32
	JB   LBB34_8
	WORD $0x894c; BYTE $0xc0             // mov	rax, r8
	WORD $0x2948; BYTE $0xf0             // sub	rax, rsi
	LONG $0x20f88348                     // cmp	rax, 32
	JB   LBB34_8
	WORD $0x8941; BYTE $0xce             // mov	r14d, ecx
	LONG $0x1fe68341                     // and	r14d, 31
	WORD $0x894d; BYTE $0xd3             // mov	r11, r10
	WORD $0x294d; BYTE $0xf3             // sub	r11, r14
	WORD $0x3145; BYTE $0xff             // xor	r15d, r15d
	QUAD $0x00035305797de2c4; BYTE $0x00 // vpbroadcastw	ymm0, word ptr [rip + .LCPI34_0]

LBB34_6:
	LONG $0x207da2c4; WORD $0x3f4c; BYTE $0x10 // vpmovsxbw	ymm1, xmmword ptr [rdi + r15 + 16]
	LONG $0x207da2c4; WORD $0x3f24             // vpmovsxbw	ymm4, xmmword ptr [rdi + r15]
	LONG $0x207da2c4; WORD $0x3e54; BYTE $0x10 // vpmovsxbw	ymm2, xmmword ptr [rsi + r15 + 16]
	LONG $0x207da2c4; WORD $0x3e2c             // vpmovsxbw	ymm5, xmmword ptr [rsi + r15]
	LONG $0x397de3c4; WORD $0x01e3             // vextracti128	xmm3, ymm4, 1
	LONG $0xc3c5f9c5; BYTE $0x01               // vpextrw	eax, xmm3, 1
	LONG $0x397de3c4; WORD $0x01ee             // vextracti128	xmm6, ymm5, 1
	LONG $0xdec5f9c5; BYTE $0x01               // vpextrw	ebx, xmm6, 1
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xd87ef9c5                           // vmovd	eax, xmm3
	LONG $0xf37ef9c5                           // vmovd	ebx, xmm6
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf86ef9c5                           // vmovd	xmm7, eax
	LONG $0xc441c1c4; WORD $0x01f9             // vpinsrw	xmm7, xmm7, r9d, 1
	LONG $0xc3c5f9c5; BYTE $0x02               // vpextrw	eax, xmm3, 2
	LONG $0xdec5f9c5; BYTE $0x02               // vpextrw	ebx, xmm6, 2
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x02               // vpinsrw	xmm7, xmm7, eax, 2
	LONG $0xc3c5f9c5; BYTE $0x03               // vpextrw	eax, xmm3, 3
	LONG $0xdec5f9c5; BYTE $0x03               // vpextrw	ebx, xmm6, 3
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x03               // vpinsrw	xmm7, xmm7, eax, 3
	LONG $0xc3c5f9c5; BYTE $0x04               // vpextrw	eax, xmm3, 4
	LONG $0xdec5f9c5; BYTE $0x04               // vpextrw	ebx, xmm6, 4
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x04               // vpinsrw	xmm7, xmm7, eax, 4
	LONG $0xc3c5f9c5; BYTE $0x05               // vpextrw	eax, xmm3, 5
	LONG $0xdec5f9c5; BYTE $0x05               // vpextrw	ebx, xmm6, 5
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x05               // vpinsrw	xmm7, xmm7, eax, 5
	LONG $0xc3c5f9c5; BYTE $0x06               // vpextrw	eax, xmm3, 6
	LONG $0xdec5f9c5; BYTE $0x06               // vpextrw	ebx, xmm6, 6
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x06               // vpinsrw	xmm7, xmm7, eax, 6
	LONG $0xc3c5f9c5; BYTE $0x07               // vpextrw	eax, xmm3, 7
	LONG $0xdec5f9c5; BYTE $0x07               // vpextrw	ebx, xmm6, 7
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xd8c4c1c5; BYTE $0x07               // vpinsrw	xmm3, xmm7, eax, 7
	LONG $0xc4c5f9c5; BYTE $0x01               // vpextrw	eax, xmm4, 1
	LONG $0xddc5f9c5; BYTE $0x01               // vpextrw	ebx, xmm5, 1
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xe07ef9c5                           // vmovd	eax, xmm4
	LONG $0xeb7ef9c5                           // vmovd	ebx, xmm5
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf06ef9c5                           // vmovd	xmm6, eax
	LONG $0xc449c1c4; WORD $0x01f1             // vpinsrw	xmm6, xmm6, r9d, 1
	LONG $0xc4c5f9c5; BYTE $0x02               // vpextrw	eax, xmm4, 2
	LONG $0xddc5f9c5; BYTE $0x02               // vpextrw	ebx, xmm5, 2
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x02               // vpinsrw	xmm6, xmm6, eax, 2
	LONG $0xc4c5f9c5; BYTE $0x03               // vpextrw	eax, xmm4, 3
	LONG $0xddc5f9c5; BYTE $0x03               // vpextrw	ebx, xmm5, 3
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x03               // vpinsrw	xmm6, xmm6, eax, 3
	LONG $0xc4c5f9c5; BYTE $0x04               // vpextrw	eax, xmm4, 4
	LONG $0xddc5f9c5; BYTE $0x04               // vpextrw	ebx, xmm5, 4
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x04               // vpinsrw	xmm6, xmm6, eax, 4
	LONG $0xc4c5f9c5; BYTE $0x05               // vpextrw	eax, xmm4, 5
	LONG $0xddc5f9c5; BYTE $0x05               // vpextrw	ebx, xmm5, 5
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x05               // vpinsrw	xmm6, xmm6, eax, 5
	LONG $0xc4c5f9c5; BYTE $0x06               // vpextrw	eax, xmm4, 6
	LONG $0xddc5f9c5; BYTE $0x06               // vpextrw	ebx, xmm5, 6
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x06               // vpinsrw	xmm6, xmm6, eax, 6
	LONG $0xc4c5f9c5; BYTE $0x07               // vpextrw	eax, xmm4, 7
	LONG $0xddc5f9c5; BYTE $0x07               // vpextrw	ebx, xmm5, 7
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xe0c4c9c5; BYTE $0x07               // vpinsrw	xmm4, xmm6, eax, 7
	LONG $0x397de3c4; WORD $0x01cd             // vextracti128	xmm5, ymm1, 1
	LONG $0xc5c5f9c5; BYTE $0x01               // vpextrw	eax, xmm5, 1
	LONG $0x397de3c4; WORD $0x01d6             // vextracti128	xmm6, ymm2, 1
	LONG $0xdec5f9c5; BYTE $0x01               // vpextrw	ebx, xmm6, 1
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xe87ef9c5                           // vmovd	eax, xmm5
	LONG $0xf37ef9c5                           // vmovd	ebx, xmm6
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf86ef9c5                           // vmovd	xmm7, eax
	LONG $0xc441c1c4; WORD $0x01f9             // vpinsrw	xmm7, xmm7, r9d, 1
	LONG $0xc5c5f9c5; BYTE $0x02               // vpextrw	eax, xmm5, 2
	LONG $0xdec5f9c5; BYTE $0x02               // vpextrw	ebx, xmm6, 2
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x02               // vpinsrw	xmm7, xmm7, eax, 2
	LONG $0xc5c5f9c5; BYTE $0x03               // vpextrw	eax, xmm5, 3
	LONG $0xdec5f9c5; BYTE $0x03               // vpextrw	ebx, xmm6, 3
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x03               // vpinsrw	xmm7, xmm7, eax, 3
	LONG $0xc5c5f9c5; BYTE $0x04               // vpextrw	eax, xmm5, 4
	LONG $0xdec5f9c5; BYTE $0x04               // vpextrw	ebx, xmm6, 4
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x04               // vpinsrw	xmm7, xmm7, eax, 4
	LONG $0xc5c5f9c5; BYTE $0x05               // vpextrw	eax, xmm5, 5
	LONG $0xdec5f9c5; BYTE $0x05               // vpextrw	ebx, xmm6, 5
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x05               // vpinsrw	xmm7, xmm7, eax, 5
	LONG $0xc5c5f9c5; BYTE $0x06               // vpextrw	eax, xmm5, 6
	LONG $0xdec5f9c5; BYTE $0x06               // vpextrw	ebx, xmm6, 6
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf8c4c1c5; BYTE $0x06               // vpinsrw	xmm7, xmm7, eax, 6
	LONG $0xc5c5f9c5; BYTE $0x07               // vpextrw	eax, xmm5, 7
	LONG $0xdec5f9c5; BYTE $0x07               // vpextrw	ebx, xmm6, 7
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xe8c4c1c5; BYTE $0x07               // vpinsrw	xmm5, xmm7, eax, 7
	LONG $0xc1c5f9c5; BYTE $0x01               // vpextrw	eax, xmm1, 1
	LONG $0xdac5f9c5; BYTE $0x01               // vpextrw	ebx, xmm2, 1
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xc87ef9c5                           // vmovd	eax, xmm1
	LONG $0xd37ef9c5                           // vmovd	ebx, xmm2
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf06ef9c5                           // vmovd	xmm6, eax
	LONG $0xc449c1c4; WORD $0x01f1             // vpinsrw	xmm6, xmm6, r9d, 1
	LONG $0xc1c5f9c5; BYTE $0x02               // vpextrw	eax, xmm1, 2
	LONG $0xdac5f9c5; BYTE $0x02               // vpextrw	ebx, xmm2, 2
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x02               // vpinsrw	xmm6, xmm6, eax, 2
	LONG $0xc1c5f9c5; BYTE $0x03               // vpextrw	eax, xmm1, 3
	LONG $0xdac5f9c5; BYTE $0x03               // vpextrw	ebx, xmm2, 3
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x03               // vpinsrw	xmm6, xmm6, eax, 3
	LONG $0xc1c5f9c5; BYTE $0x04               // vpextrw	eax, xmm1, 4
	LONG $0xdac5f9c5; BYTE $0x04               // vpextrw	ebx, xmm2, 4
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x04               // vpinsrw	xmm6, xmm6, eax, 4
	LONG $0xc1c5f9c5; BYTE $0x05               // vpextrw	eax, xmm1, 5
	LONG $0xdac5f9c5; BYTE $0x05               // vpextrw	ebx, xmm2, 5
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x05               // vpinsrw	xmm6, xmm6, eax, 5
	LONG $0xc1c5f9c5; BYTE $0x06               // vpextrw	eax, xmm1, 6
	LONG $0xdac5f9c5; BYTE $0x06               // vpextrw	ebx, xmm2, 6
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xf0c4c9c5; BYTE $0x06               // vpinsrw	xmm6, xmm6, eax, 6
	LONG $0xc1c5f9c5; BYTE $0x07               // vpextrw	eax, xmm1, 7
	LONG $0xdac5f9c5; BYTE $0x07               // vpextrw	ebx, xmm2, 7
	LONG $0x385de3c4; WORD $0x01cb             // vinserti128	ymm1, ymm4, xmm3, 1
	WORD $0x9966                               // cwd
	WORD $0xf766; BYTE $0xfb                   // idiv	bx
	LONG $0xd0c4c9c5; BYTE $0x07               // vpinsrw	xmm2, xmm6, eax, 7
	LONG $0x386de3c4; WORD $0x01d5             // vinserti128	ymm2, ymm2, xmm5, 1
	LONG $0xd0dbedc5                           // vpand	ymm2, ymm2, ymm0
	LONG $0xc8dbf5c5                           // vpand	ymm1, ymm1, ymm0
	LONG $0xca67f5c5                           // vpackuswb	ymm1, ymm1, ymm2
	LONG $0x00fde3c4; WORD $0xd8c9             // vpermq	ymm1, ymm1, 216
	LONG $0x7f7e81c4; WORD $0x380c             // vmovdqu	ymmword ptr [r8 + r15], ymm1
	LONG $0x20c78349                           // add	r15, 32
	WORD $0x394d; BYTE $0xfb                   // cmp	r11, r15
	JNE  LBB34_6
	WORD $0x854d; BYTE $0xf6                   // test	r14, r14
	JE   LBB34_12

LBB34_8:
	WORD $0x2944; BYTE $0xd9     // sub	ecx, r11d
	LONG $0x015b8d49             // lea	rbx, [r11 + 1]
	WORD $0xc1f6; BYTE $0x01     // test	cl, 1
	JE   LBB34_10
	LONG $0x04be0f42; BYTE $0x1f // movsx	eax, byte ptr [rdi + r11]
	LONG $0x0cbe0f42; BYTE $0x1e // movsx	ecx, byte ptr [rsi + r11]
	WORD $0x9966                 // cwd
	WORD $0xf766; BYTE $0xf9     // idiv	cx
	LONG $0x18048843             // mov	byte ptr [r8 + r11], al
	WORD $0x8949; BYTE $0xdb     // mov	r11, rbx

LBB34_10:
	WORD $0x3949; BYTE $0xda // cmp	r10, rbx
	JE   LBB34_12

LBB34_11:
	LONG $0x04be0f42; BYTE $0x1f   // movsx	eax, byte ptr [rdi + r11]
	LONG $0x0cbe0f42; BYTE $0x1e   // movsx	ecx, byte ptr [rsi + r11]
	WORD $0x9966                   // cwd
	WORD $0xf766; BYTE $0xf9       // idiv	cx
	LONG $0x18048843               // mov	byte ptr [r8 + r11], al
	LONG $0x44be0f42; WORD $0x011f // movsx	eax, byte ptr [rdi + r11 + 1]
	LONG $0x4cbe0f42; WORD $0x011e // movsx	ecx, byte ptr [rsi + r11 + 1]
	WORD $0x9966                   // cwd
	WORD $0xf766; BYTE $0xf9       // idiv	cx
	LONG $0x18448843; BYTE $0x01   // mov	byte ptr [r8 + r11 + 1], al
	LONG $0x02c38349               // add	r11, 2
	WORD $0x394d; BYTE $0xda       // cmp	r10, r11
	JNE  LBB34_11

LBB34_12:
	LONG $0xe8658d48         // lea	rsp, [rbp - 24]
	BYTE $0x5b               // pop	rbx
	WORD $0x5e41             // pop	r14
	WORD $0x5f41             // pop	r15
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret
	WORD $0x00ff

TEXT ·_int16_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB35_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB35_4
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	WORD $0xc031             // xor	eax, eax
	JMP  LBB35_13

LBB35_1:
	WORD $0xc031  // xor	eax, eax
	JMP  LBB35_14

LBB35_4:
	LONG $0x40f88341         // cmp	r8d, 64
	JAE  LBB35_6
	WORD $0xc031             // xor	eax, eax
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB35_10

LBB35_6:
	WORD $0x8941; BYTE $0xd1 // mov	r9d, edx
	LONG $0x3fe18341         // and	r9d, 63
	WORD $0x894d; BYTE $0xc2 // mov	r10, r8
	WORD $0x294d; BYTE $0xca // sub	r10, r9
	LONG $0xc0eff9c5         // vpxor	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc9eff1c5         // vpxor	xmm1, xmm1, xmm1
	LONG $0xd2efe9c5         // vpxor	xmm2, xmm2, xmm2
	LONG $0xdbefe1c5         // vpxor	xmm3, xmm3, xmm3

LBB35_7:
	LONG $0x04fdfdc5; BYTE $0x47   // vpaddw	ymm0, ymm0, ymmword ptr [rdi + 2*rax]
	LONG $0x4cfdf5c5; WORD $0x2047 // vpaddw	ymm1, ymm1, ymmword ptr [rdi + 2*rax + 32]
	LONG $0x54fdedc5; WORD $0x4047 // vpaddw	ymm2, ymm2, ymmword ptr [rdi + 2*rax + 64]
	LONG $0x5cfde5c5; WORD $0x6047 // vpaddw	ymm3, ymm3, ymmword ptr [rdi + 2*rax + 96]
	LONG $0x40c08348               // add	rax, 64
	WORD $0x3949; BYTE $0xc2       // cmp	r10, rax
	JNE  LBB35_7
	LONG $0xc0fdf5c5               // vpaddw	ymm0, ymm1, ymm0
	LONG $0xc0fdedc5               // vpaddw	ymm0, ymm2, ymm0
	LONG $0xc0fde5c5               // vpaddw	ymm0, ymm3, ymm0
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1fdf9c5               // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee   // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fdf9c5               // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55   // vpshufd	xmm1, xmm0, 85
	LONG $0xc1fdf9c5               // vpaddw	xmm0, xmm0, xmm1
	LONG $0xd072f1c5; BYTE $0x10   // vpsrld	xmm1, xmm0, 16
	LONG $0xc1fdf9c5               // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0x854d; BYTE $0xc9       // test	r9, r9
	JE   LBB35_14
	LONG $0x08f98341               // cmp	r9d, 8
	JB   LBB35_13

LBB35_10:
	WORD $0x894c; BYTE $0xd1 // mov	rcx, r10
	WORD $0xe283; BYTE $0x07 // and	edx, 7
	WORD $0x894d; BYTE $0xc2 // mov	r10, r8
	WORD $0x2949; BYTE $0xd2 // sub	r10, rdx
	WORD $0xb70f; BYTE $0xc0 // movzx	eax, ax
	LONG $0xc06ef9c5         // vmovd	xmm0, eax

LBB35_11:
	LONG $0x04fdf9c5; BYTE $0x4f // vpaddw	xmm0, xmm0, xmmword ptr [rdi + 2*rcx]
	LONG $0x08c18348             // add	rcx, 8
	WORD $0x3949; BYTE $0xca     // cmp	r10, rcx
	JNE  LBB35_11
	LONG $0xc870f9c5; BYTE $0xee // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fdf9c5             // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55 // vpshufd	xmm1, xmm0, 85
	LONG $0xc1fdf9c5             // vpaddw	xmm0, xmm0, xmm1
	LONG $0xd072f1c5; BYTE $0x10 // vpsrld	xmm1, xmm0, 16
	LONG $0xc1fdf9c5             // vpaddw	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5             // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2     // test	rdx, rdx
	JE   LBB35_14

LBB35_13:
	LONG $0x04034266; BYTE $0x57 // add	ax, word ptr [rdi + 2*r10]
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB35_13

LBB35_14:
	WORD $0x8966; BYTE $0x06 // mov	word ptr [rsi], ax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LCPI36_0:
	//

TEXT ·_int16_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xb70f; BYTE $0x07 // movzx	eax, word ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB36_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB36_4
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB36_14

LBB36_1:
	WORD $0xc189 // mov	ecx, eax

LBB36_15:
	WORD $0x8966; BYTE $0x0e // mov	word ptr [rsi], cx
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB36_4:
	LONG $0x40f88341         // cmp	r8d, 64
	JAE  LBB36_6
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB36_11

LBB36_6:
	WORD $0x8941; BYTE $0xd1     // mov	r9d, edx
	LONG $0x3fe18341             // and	r9d, 63
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x294d; BYTE $0xca     // sub	r10, r9
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x797de2c4; BYTE $0xc0 // vpbroadcastw	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB36_7:
	LONG $0x04eafdc5; BYTE $0x47   // vpminsw	ymm0, ymm0, ymmword ptr [rdi + 2*rax]
	LONG $0x4ceaf5c5; WORD $0x2047 // vpminsw	ymm1, ymm1, ymmword ptr [rdi + 2*rax + 32]
	LONG $0x54eaedc5; WORD $0x4047 // vpminsw	ymm2, ymm2, ymmword ptr [rdi + 2*rax + 64]
	LONG $0x5ceae5c5; WORD $0x6047 // vpminsw	ymm3, ymm3, ymmword ptr [rdi + 2*rax + 96]
	LONG $0x40c08348               // add	rax, 64
	WORD $0x3949; BYTE $0xc2       // cmp	r10, rax
	JNE  LBB36_7
	LONG $0xc1eafdc5               // vpminsw	ymm0, ymm0, ymm1
	LONG $0xc2eafdc5               // vpminsw	ymm0, ymm0, ymm2
	LONG $0xc3eafdc5               // vpminsw	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1eaf9c5               // vpminsw	xmm0, xmm0, xmm1
	QUAD $0x0000008405eff9c5       // vpxor	xmm0, xmm0, xmmword ptr [rip + .LCPI36_0]
	LONG $0x4179e2c4; BYTE $0xc0   // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	LONG $0x00800035; BYTE $0x00   // xor	eax, 32768
	WORD $0x854d; BYTE $0xc9       // test	r9, r9
	JE   LBB36_9
	LONG $0x08f98341               // cmp	r9d, 8
	JB   LBB36_14

LBB36_11:
	WORD $0x894c; BYTE $0xd1     // mov	rcx, r10
	WORD $0xe283; BYTE $0x07     // and	edx, 7
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x2949; BYTE $0xd2     // sub	r10, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x7979e2c4; BYTE $0xc0 // vpbroadcastw	xmm0, xmm0

LBB36_12:
	LONG $0x04eaf9c5; BYTE $0x4f // vpminsw	xmm0, xmm0, xmmword ptr [rdi + 2*rcx]
	LONG $0x08c18348             // add	rcx, 8
	WORD $0x3949; BYTE $0xca     // cmp	r10, rcx
	JNE  LBB36_12
	QUAD $0x0000004005eff9c5     // vpxor	xmm0, xmm0, xmmword ptr [rip + .LCPI36_0]
	LONG $0x4179e2c4; BYTE $0xc0 // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5             // vmovd	eax, xmm0
	LONG $0x00800035; BYTE $0x00 // xor	eax, 32768
	WORD $0xc189                 // mov	ecx, eax
	WORD $0x8548; BYTE $0xd2     // test	rdx, rdx
	JE   LBB36_15

LBB36_14:
	LONG $0x0cb70f42; BYTE $0x57 // movzx	ecx, word ptr [rdi + 2*r10]
	WORD $0x3966; BYTE $0xc1     // cmp	cx, ax
	WORD $0x4d0f; BYTE $0xc8     // cmovge	ecx, eax
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0xc889                 // mov	eax, ecx
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB36_14
	JMP  LBB36_15

LBB36_9:
	WORD $0xc189             // mov	ecx, eax
	WORD $0x8966; BYTE $0x0e // mov	word ptr [rsi], cx
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LCPI37_0:
	//
	WORD $0x8000
	WORD $0x8000
	WORD $0x8000
	WORD $0x8000
	WORD $0x8000
	WORD $0x8000
	WORD $0x8000
	WORD $0x8000

TEXT ·_int16_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xb70f; BYTE $0x07 // movzx	eax, word ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB37_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB37_4
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB37_14

LBB37_1:
	WORD $0xc189 // mov	ecx, eax

LBB37_15:
	WORD $0x8966; BYTE $0x0e // mov	word ptr [rsi], cx
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB37_4:
	LONG $0x40f88341         // cmp	r8d, 64
	JAE  LBB37_6
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB37_11

LBB37_6:
	WORD $0x8941; BYTE $0xd1     // mov	r9d, edx
	LONG $0x3fe18341             // and	r9d, 63
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x294d; BYTE $0xca     // sub	r10, r9
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x797de2c4; BYTE $0xc0 // vpbroadcastw	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB37_7:
	LONG $0x04eefdc5; BYTE $0x47   // vpmaxsw	ymm0, ymm0, ymmword ptr [rdi + 2*rax]
	LONG $0x4ceef5c5; WORD $0x2047 // vpmaxsw	ymm1, ymm1, ymmword ptr [rdi + 2*rax + 32]
	LONG $0x54eeedc5; WORD $0x4047 // vpmaxsw	ymm2, ymm2, ymmword ptr [rdi + 2*rax + 64]
	LONG $0x5ceee5c5; WORD $0x6047 // vpmaxsw	ymm3, ymm3, ymmword ptr [rdi + 2*rax + 96]
	LONG $0x40c08348               // add	rax, 64
	WORD $0x3949; BYTE $0xc2       // cmp	r10, rax
	JNE  LBB37_7
	LONG $0xc1eefdc5               // vpmaxsw	ymm0, ymm0, ymm1
	LONG $0xc2eefdc5               // vpmaxsw	ymm0, ymm0, ymm2
	LONG $0xc3eefdc5               // vpmaxsw	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1eef9c5               // vpmaxsw	xmm0, xmm0, xmm1
	QUAD $0x0000008405eff9c5       // vpxor	xmm0, xmm0, xmmword ptr [rip + .LCPI37_0]
	LONG $0x4179e2c4; BYTE $0xc0   // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	LONG $0x007fff35; BYTE $0x00   // xor	eax, 32767
	WORD $0x854d; BYTE $0xc9       // test	r9, r9
	JE   LBB37_9
	LONG $0x08f98341               // cmp	r9d, 8
	JB   LBB37_14

LBB37_11:
	WORD $0x894c; BYTE $0xd1     // mov	rcx, r10
	WORD $0xe283; BYTE $0x07     // and	edx, 7
	WORD $0x894d; BYTE $0xc2     // mov	r10, r8
	WORD $0x2949; BYTE $0xd2     // sub	r10, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x7979e2c4; BYTE $0xc0 // vpbroadcastw	xmm0, xmm0

LBB37_12:
	LONG $0x04eef9c5; BYTE $0x4f // vpmaxsw	xmm0, xmm0, xmmword ptr [rdi + 2*rcx]
	LONG $0x08c18348             // add	rcx, 8
	WORD $0x3949; BYTE $0xca     // cmp	r10, rcx
	JNE  LBB37_12
	QUAD $0x0000004005eff9c5     // vpxor	xmm0, xmm0, xmmword ptr [rip + .LCPI37_0]
	LONG $0x4179e2c4; BYTE $0xc0 // vphminposuw	xmm0, xmm0
	LONG $0xc07ef9c5             // vmovd	eax, xmm0
	LONG $0x007fff35; BYTE $0x00 // xor	eax, 32767
	WORD $0xc189                 // mov	ecx, eax
	WORD $0x8548; BYTE $0xd2     // test	rdx, rdx
	JE   LBB37_15

LBB37_14:
	LONG $0x0cb70f42; BYTE $0x57 // movzx	ecx, word ptr [rdi + 2*r10]
	WORD $0x3966; BYTE $0xc1     // cmp	cx, ax
	WORD $0x4e0f; BYTE $0xc8     // cmovle	ecx, eax
	WORD $0xff49; BYTE $0xc2     // inc	r10
	WORD $0xc889                 // mov	eax, ecx
	WORD $0x394d; BYTE $0xd0     // cmp	r8, r10
	JNE  LBB37_14
	JMP  LBB37_15

LBB37_9:
	WORD $0xc189             // mov	ecx, eax
	WORD $0x8966; BYTE $0x0e // mov	word ptr [rsi], cx
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret
	WORD $0x7fff
	WORD $0x7fff
	WORD $0x7fff
	WORD $0x7fff
	WORD $0x7fff
	WORD $0x7fff
	WORD $0x7fff
	WORD $0x7fff

TEXT ·_int16_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB38_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB38_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB38_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB38_16

LBB38_15:
	LONG $0x04b70f42; BYTE $0x5e // movzx	eax, word ptr [rsi + 2*r11]
	LONG $0x04034266; BYTE $0x5f // add	ax, word ptr [rdi + 2*r11]
	LONG $0x04894266; BYTE $0x5a // mov	word ptr [rdx + 2*r11], ax
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB38_15

LBB38_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB38_18

LBB38_17:
	LONG $0x04b70f42; BYTE $0x5e   // movzx	eax, word ptr [rsi + 2*r11]
	LONG $0x04034266; BYTE $0x5f   // add	ax, word ptr [rdi + 2*r11]
	LONG $0x04894266; BYTE $0x5a   // mov	word ptr [rdx + 2*r11], ax
	LONG $0x44b70f42; WORD $0x025e // movzx	eax, word ptr [rsi + 2*r11 + 2]
	LONG $0x44034266; WORD $0x025f // add	ax, word ptr [rdi + 2*r11 + 2]
	LONG $0x44894266; WORD $0x025a // mov	word ptr [rdx + 2*r11 + 2], ax
	LONG $0x44b70f42; WORD $0x045e // movzx	eax, word ptr [rsi + 2*r11 + 4]
	LONG $0x44034266; WORD $0x045f // add	ax, word ptr [rdi + 2*r11 + 4]
	LONG $0x44894266; WORD $0x045a // mov	word ptr [rdx + 2*r11 + 4], ax
	LONG $0x44b70f42; WORD $0x065e // movzx	eax, word ptr [rsi + 2*r11 + 6]
	LONG $0x44034266; WORD $0x065f // add	ax, word ptr [rdi + 2*r11 + 6]
	LONG $0x44894266; WORD $0x065a // mov	word ptr [rdx + 2*r11 + 6], ax
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB38_17

LBB38_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB38_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB38_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB38_14
	LONG $0x40f88341                           // cmp	r8d, 64
	JAE  LBB38_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB38_11

LBB38_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x3fe18341         // and	r9d, 63
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB38_8:
	LONG $0x6f7ea1c4; WORD $0x5604             // vmovdqu	ymm0, ymmword ptr [rsi + 2*r10]
	LONG $0x6f7ea1c4; WORD $0x564c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 2*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x5654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 2*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x565c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 2*r10 + 96]
	LONG $0xfd7da1c4; WORD $0x5704             // vpaddw	ymm0, ymm0, ymmword ptr [rdi + 2*r10]
	LONG $0xfd75a1c4; WORD $0x574c; BYTE $0x20 // vpaddw	ymm1, ymm1, ymmword ptr [rdi + 2*r10 + 32]
	LONG $0xfd6da1c4; WORD $0x5754; BYTE $0x40 // vpaddw	ymm2, ymm2, ymmword ptr [rdi + 2*r10 + 64]
	LONG $0xfd65a1c4; WORD $0x575c; BYTE $0x60 // vpaddw	ymm3, ymm3, ymmword ptr [rdi + 2*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x5204             // vmovdqu	ymmword ptr [rdx + 2*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x524c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 2*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x5254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 2*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x525c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 2*r10 + 96], ymm3
	LONG $0x40c28349                           // add	r10, 64
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB38_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB38_18
	LONG $0x08f98341                           // cmp	r9d, 8
	JB   LBB38_14

LBB38_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x07e28341         // and	r10d, 7
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB38_12:
	LONG $0x6f7aa1c4; WORD $0x4e04 // vmovdqu	xmm0, xmmword ptr [rsi + 2*r9]
	LONG $0xfd79a1c4; WORD $0x4f04 // vpaddw	xmm0, xmm0, xmmword ptr [rdi + 2*r9]
	LONG $0x7f7aa1c4; WORD $0x4a04 // vmovdqu	xmmword ptr [rdx + 2*r9], xmm0
	LONG $0x08c18349               // add	r9, 8
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB38_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB38_14
	JMP  LBB38_18

TEXT ·_int16_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB39_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB39_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB39_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB39_16

LBB39_15:
	LONG $0x04b70f42; BYTE $0x5f // movzx	eax, word ptr [rdi + 2*r11]
	LONG $0x042b4266; BYTE $0x5e // sub	ax, word ptr [rsi + 2*r11]
	LONG $0x04894266; BYTE $0x5a // mov	word ptr [rdx + 2*r11], ax
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB39_15

LBB39_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB39_18

LBB39_17:
	LONG $0x04b70f42; BYTE $0x5f   // movzx	eax, word ptr [rdi + 2*r11]
	LONG $0x042b4266; BYTE $0x5e   // sub	ax, word ptr [rsi + 2*r11]
	LONG $0x04894266; BYTE $0x5a   // mov	word ptr [rdx + 2*r11], ax
	LONG $0x44b70f42; WORD $0x025f // movzx	eax, word ptr [rdi + 2*r11 + 2]
	LONG $0x442b4266; WORD $0x025e // sub	ax, word ptr [rsi + 2*r11 + 2]
	LONG $0x44894266; WORD $0x025a // mov	word ptr [rdx + 2*r11 + 2], ax
	LONG $0x44b70f42; WORD $0x045f // movzx	eax, word ptr [rdi + 2*r11 + 4]
	LONG $0x442b4266; WORD $0x045e // sub	ax, word ptr [rsi + 2*r11 + 4]
	LONG $0x44894266; WORD $0x045a // mov	word ptr [rdx + 2*r11 + 4], ax
	LONG $0x44b70f42; WORD $0x065f // movzx	eax, word ptr [rdi + 2*r11 + 6]
	LONG $0x442b4266; WORD $0x065e // sub	ax, word ptr [rsi + 2*r11 + 6]
	LONG $0x44894266; WORD $0x065a // mov	word ptr [rdx + 2*r11 + 6], ax
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB39_17

LBB39_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB39_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB39_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB39_14
	LONG $0x40f88341                           // cmp	r8d, 64
	JAE  LBB39_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB39_11

LBB39_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x3fe18341         // and	r9d, 63
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB39_8:
	LONG $0x6f7ea1c4; WORD $0x5704             // vmovdqu	ymm0, ymmword ptr [rdi + 2*r10]
	LONG $0x6f7ea1c4; WORD $0x574c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rdi + 2*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x5754; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rdi + 2*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x575c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rdi + 2*r10 + 96]
	LONG $0xf97da1c4; WORD $0x5604             // vpsubw	ymm0, ymm0, ymmword ptr [rsi + 2*r10]
	LONG $0xf975a1c4; WORD $0x564c; BYTE $0x20 // vpsubw	ymm1, ymm1, ymmword ptr [rsi + 2*r10 + 32]
	LONG $0xf96da1c4; WORD $0x5654; BYTE $0x40 // vpsubw	ymm2, ymm2, ymmword ptr [rsi + 2*r10 + 64]
	LONG $0xf965a1c4; WORD $0x565c; BYTE $0x60 // vpsubw	ymm3, ymm3, ymmword ptr [rsi + 2*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x5204             // vmovdqu	ymmword ptr [rdx + 2*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x524c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 2*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x5254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 2*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x525c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 2*r10 + 96], ymm3
	LONG $0x40c28349                           // add	r10, 64
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB39_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB39_18
	LONG $0x08f98341                           // cmp	r9d, 8
	JB   LBB39_14

LBB39_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x07e28341         // and	r10d, 7
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB39_12:
	LONG $0x6f7aa1c4; WORD $0x4f04 // vmovdqu	xmm0, xmmword ptr [rdi + 2*r9]
	LONG $0xf979a1c4; WORD $0x4e04 // vpsubw	xmm0, xmm0, xmmword ptr [rsi + 2*r9]
	LONG $0x7f7aa1c4; WORD $0x4a04 // vmovdqu	xmmword ptr [rdx + 2*r9], xmm0
	LONG $0x08c18349               // add	r9, 8
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB39_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB39_14
	JMP  LBB39_18

TEXT ·_int16_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB40_18
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x08f88349         // cmp	r8, 8
	JAE  LBB40_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d

LBB40_14:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB40_16

LBB40_15:
	LONG $0x04b70f42; BYTE $0x5e   // movzx	eax, word ptr [rsi + 2*r11]
	LONG $0xaf0f4266; WORD $0x5f04 // imul	ax, word ptr [rdi + 2*r11]
	LONG $0x04894266; BYTE $0x5a   // mov	word ptr [rdx + 2*r11], ax
	WORD $0xff49; BYTE $0xc3       // inc	r11
	WORD $0xff48; BYTE $0xc9       // dec	rcx
	JNE  LBB40_15

LBB40_16:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB40_18

LBB40_17:
	LONG $0x04b70f42; BYTE $0x5e               // movzx	eax, word ptr [rsi + 2*r11]
	LONG $0xaf0f4266; WORD $0x5f04             // imul	ax, word ptr [rdi + 2*r11]
	LONG $0x04894266; BYTE $0x5a               // mov	word ptr [rdx + 2*r11], ax
	LONG $0x44b70f42; WORD $0x025e             // movzx	eax, word ptr [rsi + 2*r11 + 2]
	LONG $0xaf0f4266; WORD $0x5f44; BYTE $0x02 // imul	ax, word ptr [rdi + 2*r11 + 2]
	LONG $0x44894266; WORD $0x025a             // mov	word ptr [rdx + 2*r11 + 2], ax
	LONG $0x44b70f42; WORD $0x045e             // movzx	eax, word ptr [rsi + 2*r11 + 4]
	LONG $0xaf0f4266; WORD $0x5f44; BYTE $0x04 // imul	ax, word ptr [rdi + 2*r11 + 4]
	LONG $0x44894266; WORD $0x045a             // mov	word ptr [rdx + 2*r11 + 4], ax
	LONG $0x44b70f42; WORD $0x065e             // movzx	eax, word ptr [rsi + 2*r11 + 6]
	LONG $0xaf0f4266; WORD $0x5f44; BYTE $0x06 // imul	ax, word ptr [rdi + 2*r11 + 6]
	LONG $0x44894266; WORD $0x065a             // mov	word ptr [rdx + 2*r11 + 6], ax
	LONG $0x04c38349                           // add	r11, 4
	WORD $0x394d; BYTE $0xd8                   // cmp	r8, r11
	JNE  LBB40_17

LBB40_18:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

LBB40_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB40_14
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB40_14
	LONG $0x40f88341                           // cmp	r8d, 64
	JAE  LBB40_7
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	JMP  LBB40_11

LBB40_7:
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x3fe18341         // and	r9d, 63
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xcb // sub	r11, r9
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d

LBB40_8:
	LONG $0x6f7ea1c4; WORD $0x5604             // vmovdqu	ymm0, ymmword ptr [rsi + 2*r10]
	LONG $0x6f7ea1c4; WORD $0x564c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 2*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x5654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 2*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x565c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 2*r10 + 96]
	LONG $0xd57da1c4; WORD $0x5704             // vpmullw	ymm0, ymm0, ymmword ptr [rdi + 2*r10]
	LONG $0xd575a1c4; WORD $0x574c; BYTE $0x20 // vpmullw	ymm1, ymm1, ymmword ptr [rdi + 2*r10 + 32]
	LONG $0xd56da1c4; WORD $0x5754; BYTE $0x40 // vpmullw	ymm2, ymm2, ymmword ptr [rdi + 2*r10 + 64]
	LONG $0xd565a1c4; WORD $0x575c; BYTE $0x60 // vpmullw	ymm3, ymm3, ymmword ptr [rdi + 2*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x5204             // vmovdqu	ymmword ptr [rdx + 2*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x524c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 2*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x5254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 2*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x525c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 2*r10 + 96], ymm3
	LONG $0x40c28349                           // add	r10, 64
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB40_8
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB40_18
	LONG $0x08f98341                           // cmp	r9d, 8
	JB   LBB40_14

LBB40_11:
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x07e28341         // and	r10d, 7
	WORD $0x894d; BYTE $0xc3 // mov	r11, r8
	WORD $0x294d; BYTE $0xd3 // sub	r11, r10

LBB40_12:
	LONG $0x6f7aa1c4; WORD $0x4e04 // vmovdqu	xmm0, xmmword ptr [rsi + 2*r9]
	LONG $0xd579a1c4; WORD $0x4f04 // vpmullw	xmm0, xmm0, xmmword ptr [rdi + 2*r9]
	LONG $0x7f7aa1c4; WORD $0x4a04 // vmovdqu	xmmword ptr [rdx + 2*r9], xmm0
	LONG $0x08c18349               // add	r9, 8
	WORD $0x394d; BYTE $0xcb       // cmp	r11, r9
	JNE  LBB40_12
	WORD $0x854d; BYTE $0xd2       // test	r10, r10
	JNE  LBB40_14
	JMP  LBB40_18

TEXT ·_int16_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	WORD $0x5741             // push	r15
	WORD $0x5641             // push	r14
	BYTE $0x53               // push	rbx
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB41_12
	WORD $0x8949; BYTE $0xd0 // mov	r8, rdx
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x10fa8349         // cmp	r10, 16
	JAE  LBB41_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB41_8

LBB41_3:
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf8 // sub	rax, rdi
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB41_8
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf0 // sub	rax, rsi
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB41_8
	WORD $0x8941; BYTE $0xce // mov	r14d, ecx
	LONG $0x0fe68341         // and	r14d, 15
	WORD $0x894d; BYTE $0xd3 // mov	r11, r10
	WORD $0x294d; BYTE $0xf3 // sub	r11, r14
	WORD $0x3145; BYTE $0xff // xor	r15d, r15d
	LONG $0xc0eff9c5         // vpxor	xmm0, xmm0, xmm0

LBB41_6:
	LONG $0x237da2c4; WORD $0x7f4c; BYTE $0x10 // vpmovsxwd	ymm1, xmmword ptr [rdi + 2*r15 + 16]
	LONG $0x237da2c4; WORD $0x7f24             // vpmovsxwd	ymm4, xmmword ptr [rdi + 2*r15]
	LONG $0x237da2c4; WORD $0x7e54; BYTE $0x10 // vpmovsxwd	ymm2, xmmword ptr [rsi + 2*r15 + 16]
	LONG $0x237da2c4; WORD $0x7e2c             // vpmovsxwd	ymm5, xmmword ptr [rsi + 2*r15]
	LONG $0x397de3c4; WORD $0x01e3             // vextracti128	xmm3, ymm4, 1
	LONG $0x1679e3c4; WORD $0x01d8             // vpextrd	eax, xmm3, 1
	LONG $0x397de3c4; WORD $0x01ee             // vextracti128	xmm6, ymm5, 1
	LONG $0x1679e3c4; WORD $0x01f3             // vpextrd	ebx, xmm6, 1
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xd87ef9c5                           // vmovd	eax, xmm3
	LONG $0xf37ef9c5                           // vmovd	ebx, xmm6
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0xf86ef9c5                           // vmovd	xmm7, eax
	LONG $0x2241c3c4; WORD $0x01f9             // vpinsrd	xmm7, xmm7, r9d, 1
	LONG $0x1679e3c4; WORD $0x02d8             // vpextrd	eax, xmm3, 2
	LONG $0x1679e3c4; WORD $0x02f3             // vpextrd	ebx, xmm6, 2
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0x2241e3c4; WORD $0x02f8             // vpinsrd	xmm7, xmm7, eax, 2
	LONG $0x1679e3c4; WORD $0x03d8             // vpextrd	eax, xmm3, 3
	LONG $0x1679e3c4; WORD $0x03f3             // vpextrd	ebx, xmm6, 3
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0x2241e3c4; WORD $0x03d8             // vpinsrd	xmm3, xmm7, eax, 3
	LONG $0x1679e3c4; WORD $0x01e0             // vpextrd	eax, xmm4, 1
	LONG $0x1679e3c4; WORD $0x01eb             // vpextrd	ebx, xmm5, 1
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xe07ef9c5                           // vmovd	eax, xmm4
	LONG $0xeb7ef9c5                           // vmovd	ebx, xmm5
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0xf06ef9c5                           // vmovd	xmm6, eax
	LONG $0x2249c3c4; WORD $0x01f1             // vpinsrd	xmm6, xmm6, r9d, 1
	LONG $0x1679e3c4; WORD $0x02e0             // vpextrd	eax, xmm4, 2
	LONG $0x1679e3c4; WORD $0x02eb             // vpextrd	ebx, xmm5, 2
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0x2249e3c4; WORD $0x02f0             // vpinsrd	xmm6, xmm6, eax, 2
	LONG $0x1679e3c4; WORD $0x03e0             // vpextrd	eax, xmm4, 3
	LONG $0x1679e3c4; WORD $0x03eb             // vpextrd	ebx, xmm5, 3
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0x2249e3c4; WORD $0x03e0             // vpinsrd	xmm4, xmm6, eax, 3
	LONG $0x397de3c4; WORD $0x01cd             // vextracti128	xmm5, ymm1, 1
	LONG $0x1679e3c4; WORD $0x01e8             // vpextrd	eax, xmm5, 1
	LONG $0x397de3c4; WORD $0x01d6             // vextracti128	xmm6, ymm2, 1
	LONG $0x1679e3c4; WORD $0x01f3             // vpextrd	ebx, xmm6, 1
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xe87ef9c5                           // vmovd	eax, xmm5
	LONG $0xf37ef9c5                           // vmovd	ebx, xmm6
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0xf86ef9c5                           // vmovd	xmm7, eax
	LONG $0x2241c3c4; WORD $0x01f9             // vpinsrd	xmm7, xmm7, r9d, 1
	LONG $0x1679e3c4; WORD $0x02e8             // vpextrd	eax, xmm5, 2
	LONG $0x1679e3c4; WORD $0x02f3             // vpextrd	ebx, xmm6, 2
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0x2241e3c4; WORD $0x02f8             // vpinsrd	xmm7, xmm7, eax, 2
	LONG $0x1679e3c4; WORD $0x03e8             // vpextrd	eax, xmm5, 3
	LONG $0x1679e3c4; WORD $0x03f3             // vpextrd	ebx, xmm6, 3
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0x2241e3c4; WORD $0x03e8             // vpinsrd	xmm5, xmm7, eax, 3
	LONG $0x1679e3c4; WORD $0x01c8             // vpextrd	eax, xmm1, 1
	LONG $0x385de3c4; WORD $0x01db             // vinserti128	ymm3, ymm4, xmm3, 1
	LONG $0x1679e3c4; WORD $0x01d3             // vpextrd	ebx, xmm2, 1
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0xc87ef9c5                           // vmovd	eax, xmm1
	LONG $0xd37ef9c5                           // vmovd	ebx, xmm2
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0xe06ef9c5                           // vmovd	xmm4, eax
	LONG $0x2259c3c4; WORD $0x01e1             // vpinsrd	xmm4, xmm4, r9d, 1
	LONG $0x1679e3c4; WORD $0x02c8             // vpextrd	eax, xmm1, 2
	LONG $0x1679e3c4; WORD $0x02d3             // vpextrd	ebx, xmm2, 2
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0x2259e3c4; WORD $0x02e0             // vpinsrd	xmm4, xmm4, eax, 2
	LONG $0x1679e3c4; WORD $0x03c8             // vpextrd	eax, xmm1, 3
	LONG $0x1679e3c4; WORD $0x03d3             // vpextrd	ebx, xmm2, 3
	BYTE $0x99                                 // cdq
	WORD $0xfbf7                               // idiv	ebx
	LONG $0x2259e3c4; WORD $0x03c8             // vpinsrd	xmm1, xmm4, eax, 3
	LONG $0x3875e3c4; WORD $0x01cd             // vinserti128	ymm1, ymm1, xmm5, 1
	LONG $0x0e75e3c4; WORD $0xaac8             // vpblendw	ymm1, ymm1, ymm0, 170
	LONG $0x0e65e3c4; WORD $0xaad0             // vpblendw	ymm2, ymm3, ymm0, 170
	LONG $0x2b6de2c4; BYTE $0xc9               // vpackusdw	ymm1, ymm2, ymm1
	LONG $0x00fde3c4; WORD $0xd8c9             // vpermq	ymm1, ymm1, 216
	LONG $0x7f7e81c4; WORD $0x780c             // vmovdqu	ymmword ptr [r8 + 2*r15], ymm1
	LONG $0x10c78349                           // add	r15, 16
	WORD $0x394d; BYTE $0xfb                   // cmp	r11, r15
	JNE  LBB41_6
	WORD $0x854d; BYTE $0xf6                   // test	r14, r14
	JE   LBB41_12

LBB41_8:
	WORD $0x2944; BYTE $0xd9     // sub	ecx, r11d
	LONG $0x015b8d49             // lea	rbx, [r11 + 1]
	WORD $0xc1f6; BYTE $0x01     // test	cl, 1
	JE   LBB41_10
	LONG $0x04bf0f42; BYTE $0x5f // movsx	eax, word ptr [rdi + 2*r11]
	LONG $0x0cbf0f42; BYTE $0x5e // movsx	ecx, word ptr [rsi + 2*r11]
	BYTE $0x99                   // cdq
	WORD $0xf9f7                 // idiv	ecx
	LONG $0x04894366; BYTE $0x58 // mov	word ptr [r8 + 2*r11], ax
	WORD $0x8949; BYTE $0xdb     // mov	r11, rbx

LBB41_10:
	WORD $0x3949; BYTE $0xda // cmp	r10, rbx
	JE   LBB41_12

LBB41_11:
	LONG $0x04bf0f42; BYTE $0x5f   // movsx	eax, word ptr [rdi + 2*r11]
	LONG $0x0cbf0f42; BYTE $0x5e   // movsx	ecx, word ptr [rsi + 2*r11]
	BYTE $0x99                     // cdq
	WORD $0xf9f7                   // idiv	ecx
	LONG $0x04894366; BYTE $0x58   // mov	word ptr [r8 + 2*r11], ax
	LONG $0x44bf0f42; WORD $0x025f // movsx	eax, word ptr [rdi + 2*r11 + 2]
	LONG $0x4cbf0f42; WORD $0x025e // movsx	ecx, word ptr [rsi + 2*r11 + 2]
	BYTE $0x99                     // cdq
	WORD $0xf9f7                   // idiv	ecx
	LONG $0x44894366; WORD $0x0258 // mov	word ptr [r8 + 2*r11 + 2], ax
	LONG $0x02c38349               // add	r11, 2
	WORD $0x394d; BYTE $0xda       // cmp	r10, r11
	JNE  LBB41_11

LBB41_12:
	LONG $0xe8658d48         // lea	rsp, [rbp - 24]
	BYTE $0x5b               // pop	rbx
	WORD $0x5e41             // pop	r14
	WORD $0x5f41             // pop	r15
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int32_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB42_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB42_4
	WORD $0xc931             // xor	ecx, ecx
	WORD $0xc031             // xor	eax, eax
	JMP  LBB42_7

LBB42_1:
	WORD $0xc031 // xor	eax, eax
	JMP  LBB42_8

LBB42_4:
	WORD $0xe283; BYTE $0x1f // and	edx, 31
	WORD $0x894c; BYTE $0xc1 // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1 // sub	rcx, rdx
	LONG $0xc0eff9c5         // vpxor	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc9eff1c5         // vpxor	xmm1, xmm1, xmm1
	LONG $0xd2efe9c5         // vpxor	xmm2, xmm2, xmm2
	LONG $0xdbefe1c5         // vpxor	xmm3, xmm3, xmm3

LBB42_5:
	LONG $0x04fefdc5; BYTE $0x87   // vpaddd	ymm0, ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x4cfef5c5; WORD $0x2087 // vpaddd	ymm1, ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x54feedc5; WORD $0x4087 // vpaddd	ymm2, ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x5cfee5c5; WORD $0x6087 // vpaddd	ymm3, ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x20c08348               // add	rax, 32
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB42_5
	LONG $0xc0fef5c5               // vpaddd	ymm0, ymm1, ymm0
	LONG $0xc0feedc5               // vpaddd	ymm0, ymm2, ymm0
	LONG $0xc0fee5c5               // vpaddd	ymm0, ymm3, ymm0
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1fef9c5               // vpaddd	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee   // vpshufd	xmm1, xmm0, 238
	LONG $0xc1fef9c5               // vpaddd	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55   // vpshufd	xmm1, xmm0, 85
	LONG $0xc1fef9c5               // vpaddd	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5               // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB42_8

LBB42_7:
	WORD $0x0403; BYTE $0x8f // add	eax, dword ptr [rdi + 4*rcx]
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB42_7

LBB42_8:
	WORD $0x0689             // mov	dword ptr [rsi], eax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int32_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x078b             // mov	eax, dword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB43_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB43_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB43_6

LBB43_3:
	WORD $0xe283; BYTE $0x1f     // and	edx, 31
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x587de2c4; BYTE $0xc0 // vpbroadcastd	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB43_4:
	LONG $0x397de2c4; WORD $0x8704             // vpminsd	ymm0, ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x3975e2c4; WORD $0x874c; BYTE $0x20 // vpminsd	ymm1, ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x396de2c4; WORD $0x8754; BYTE $0x40 // vpminsd	ymm2, ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x3965e2c4; WORD $0x875c; BYTE $0x60 // vpminsd	ymm3, ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x20c08348                           // add	rax, 32
	WORD $0x3948; BYTE $0xc1                   // cmp	rcx, rax
	JNE  LBB43_4
	LONG $0x397de2c4; BYTE $0xc1               // vpminsd	ymm0, ymm0, ymm1
	LONG $0x397de2c4; BYTE $0xc2               // vpminsd	ymm0, ymm0, ymm2
	LONG $0x397de2c4; BYTE $0xc3               // vpminsd	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	xmm1, ymm0, 1
	LONG $0x3979e2c4; BYTE $0xc1               // vpminsd	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee               // vpshufd	xmm1, xmm0, 238
	LONG $0x3979e2c4; BYTE $0xc1               // vpminsd	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55               // vpshufd	xmm1, xmm0, 85
	LONG $0x3979e2c4; BYTE $0xc1               // vpminsd	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5                           // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2                   // test	rdx, rdx
	JE   LBB43_7

LBB43_6:
	WORD $0x148b; BYTE $0x8f // mov	edx, dword ptr [rdi + 4*rcx]
	WORD $0xc239             // cmp	edx, eax
	WORD $0x4c0f; BYTE $0xc2 // cmovl	eax, edx
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB43_6

LBB43_7:
	WORD $0x0689             // mov	dword ptr [rsi], eax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int32_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x078b             // mov	eax, dword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB44_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB44_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB44_6

LBB44_3:
	WORD $0xe283; BYTE $0x1f     // and	edx, 31
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0xc06ef9c5             // vmovd	xmm0, eax
	LONG $0x587de2c4; BYTE $0xc0 // vpbroadcastd	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0

LBB44_4:
	LONG $0x3d7de2c4; WORD $0x8704             // vpmaxsd	ymm0, ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x3d75e2c4; WORD $0x874c; BYTE $0x20 // vpmaxsd	ymm1, ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x3d6de2c4; WORD $0x8754; BYTE $0x40 // vpmaxsd	ymm2, ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x3d65e2c4; WORD $0x875c; BYTE $0x60 // vpmaxsd	ymm3, ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x20c08348                           // add	rax, 32
	WORD $0x3948; BYTE $0xc1                   // cmp	rcx, rax
	JNE  LBB44_4
	LONG $0x3d7de2c4; BYTE $0xc1               // vpmaxsd	ymm0, ymm0, ymm1
	LONG $0x3d7de2c4; BYTE $0xc2               // vpmaxsd	ymm0, ymm0, ymm2
	LONG $0x3d7de2c4; BYTE $0xc3               // vpmaxsd	ymm0, ymm0, ymm3
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	xmm1, ymm0, 1
	LONG $0x3d79e2c4; BYTE $0xc1               // vpmaxsd	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee               // vpshufd	xmm1, xmm0, 238
	LONG $0x3d79e2c4; BYTE $0xc1               // vpmaxsd	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0x55               // vpshufd	xmm1, xmm0, 85
	LONG $0x3d79e2c4; BYTE $0xc1               // vpmaxsd	xmm0, xmm0, xmm1
	LONG $0xc07ef9c5                           // vmovd	eax, xmm0
	WORD $0x8548; BYTE $0xd2                   // test	rdx, rdx
	JE   LBB44_7

LBB44_6:
	WORD $0x148b; BYTE $0x8f // mov	edx, dword ptr [rdi + 4*rcx]
	WORD $0xc239             // cmp	edx, eax
	WORD $0x4f0f; BYTE $0xc2 // cmovg	eax, edx
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB44_6

LBB44_7:
	WORD $0x0689             // mov	dword ptr [rsi], eax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int32_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB45_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB45_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB45_8

LBB45_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB45_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB45_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x1fe18341                           // and	r9d, 31
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB45_6:
	LONG $0x6f7ea1c4; WORD $0x9604             // vmovdqu	ymm0, ymmword ptr [rsi + 4*r10]
	LONG $0x6f7ea1c4; WORD $0x964c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 4*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x9654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 4*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x965c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 4*r10 + 96]
	LONG $0xfe7da1c4; WORD $0x9704             // vpaddd	ymm0, ymm0, ymmword ptr [rdi + 4*r10]
	LONG $0xfe75a1c4; WORD $0x974c; BYTE $0x20 // vpaddd	ymm1, ymm1, ymmword ptr [rdi + 4*r10 + 32]
	LONG $0xfe6da1c4; WORD $0x9754; BYTE $0x40 // vpaddd	ymm2, ymm2, ymmword ptr [rdi + 4*r10 + 64]
	LONG $0xfe65a1c4; WORD $0x975c; BYTE $0x60 // vpaddd	ymm3, ymm3, ymmword ptr [rdi + 4*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x9204             // vmovdqu	ymmword ptr [rdx + 4*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x924c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 4*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x9254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 4*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x925c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 4*r10 + 96], ymm3
	LONG $0x20c28349                           // add	r10, 32
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB45_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB45_12

LBB45_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB45_10

LBB45_9:
	LONG $0x9e048b42         // mov	eax, dword ptr [rsi + 4*r11]
	LONG $0x9f040342         // add	eax, dword ptr [rdi + 4*r11]
	LONG $0x9a048942         // mov	dword ptr [rdx + 4*r11], eax
	WORD $0xff49; BYTE $0xc3 // inc	r11
	WORD $0xff48; BYTE $0xc9 // dec	rcx
	JNE  LBB45_9

LBB45_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB45_12

LBB45_11:
	LONG $0x9e048b42             // mov	eax, dword ptr [rsi + 4*r11]
	LONG $0x9f040342             // add	eax, dword ptr [rdi + 4*r11]
	LONG $0x9a048942             // mov	dword ptr [rdx + 4*r11], eax
	LONG $0x9e448b42; BYTE $0x04 // mov	eax, dword ptr [rsi + 4*r11 + 4]
	LONG $0x9f440342; BYTE $0x04 // add	eax, dword ptr [rdi + 4*r11 + 4]
	LONG $0x9a448942; BYTE $0x04 // mov	dword ptr [rdx + 4*r11 + 4], eax
	LONG $0x9e448b42; BYTE $0x08 // mov	eax, dword ptr [rsi + 4*r11 + 8]
	LONG $0x9f440342; BYTE $0x08 // add	eax, dword ptr [rdi + 4*r11 + 8]
	LONG $0x9a448942; BYTE $0x08 // mov	dword ptr [rdx + 4*r11 + 8], eax
	LONG $0x9e448b42; BYTE $0x0c // mov	eax, dword ptr [rsi + 4*r11 + 12]
	LONG $0x9f440342; BYTE $0x0c // add	eax, dword ptr [rdi + 4*r11 + 12]
	LONG $0x9a448942; BYTE $0x0c // mov	dword ptr [rdx + 4*r11 + 12], eax
	LONG $0x04c38349             // add	r11, 4
	WORD $0x394d; BYTE $0xd8     // cmp	r8, r11
	JNE  LBB45_11

LBB45_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int32_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB46_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB46_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB46_8

LBB46_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB46_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB46_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x1fe18341                           // and	r9d, 31
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB46_6:
	LONG $0x6f7ea1c4; WORD $0x9704             // vmovdqu	ymm0, ymmword ptr [rdi + 4*r10]
	LONG $0x6f7ea1c4; WORD $0x974c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rdi + 4*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x9754; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rdi + 4*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x975c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rdi + 4*r10 + 96]
	LONG $0xfa7da1c4; WORD $0x9604             // vpsubd	ymm0, ymm0, ymmword ptr [rsi + 4*r10]
	LONG $0xfa75a1c4; WORD $0x964c; BYTE $0x20 // vpsubd	ymm1, ymm1, ymmword ptr [rsi + 4*r10 + 32]
	LONG $0xfa6da1c4; WORD $0x9654; BYTE $0x40 // vpsubd	ymm2, ymm2, ymmword ptr [rsi + 4*r10 + 64]
	LONG $0xfa65a1c4; WORD $0x965c; BYTE $0x60 // vpsubd	ymm3, ymm3, ymmword ptr [rsi + 4*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x9204             // vmovdqu	ymmword ptr [rdx + 4*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x924c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 4*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x9254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 4*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x925c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 4*r10 + 96], ymm3
	LONG $0x20c28349                           // add	r10, 32
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB46_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB46_12

LBB46_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB46_10

LBB46_9:
	LONG $0x9f048b42         // mov	eax, dword ptr [rdi + 4*r11]
	LONG $0x9e042b42         // sub	eax, dword ptr [rsi + 4*r11]
	LONG $0x9a048942         // mov	dword ptr [rdx + 4*r11], eax
	WORD $0xff49; BYTE $0xc3 // inc	r11
	WORD $0xff48; BYTE $0xc9 // dec	rcx
	JNE  LBB46_9

LBB46_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB46_12

LBB46_11:
	LONG $0x9f048b42             // mov	eax, dword ptr [rdi + 4*r11]
	LONG $0x9e042b42             // sub	eax, dword ptr [rsi + 4*r11]
	LONG $0x9a048942             // mov	dword ptr [rdx + 4*r11], eax
	LONG $0x9f448b42; BYTE $0x04 // mov	eax, dword ptr [rdi + 4*r11 + 4]
	LONG $0x9e442b42; BYTE $0x04 // sub	eax, dword ptr [rsi + 4*r11 + 4]
	LONG $0x9a448942; BYTE $0x04 // mov	dword ptr [rdx + 4*r11 + 4], eax
	LONG $0x9f448b42; BYTE $0x08 // mov	eax, dword ptr [rdi + 4*r11 + 8]
	LONG $0x9e442b42; BYTE $0x08 // sub	eax, dword ptr [rsi + 4*r11 + 8]
	LONG $0x9a448942; BYTE $0x08 // mov	dword ptr [rdx + 4*r11 + 8], eax
	LONG $0x9f448b42; BYTE $0x0c // mov	eax, dword ptr [rdi + 4*r11 + 12]
	LONG $0x9e442b42; BYTE $0x0c // sub	eax, dword ptr [rsi + 4*r11 + 12]
	LONG $0x9a448942; BYTE $0x0c // mov	dword ptr [rdx + 4*r11 + 12], eax
	LONG $0x04c38349             // add	r11, 4
	WORD $0x394d; BYTE $0xd8     // cmp	r8, r11
	JNE  LBB46_11

LBB46_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int32_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB47_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB47_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB47_8

LBB47_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB47_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB47_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x1fe18341                           // and	r9d, 31
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB47_6:
	LONG $0x6f7ea1c4; WORD $0x9604             // vmovdqu	ymm0, ymmword ptr [rsi + 4*r10]
	LONG $0x6f7ea1c4; WORD $0x964c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 4*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0x9654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 4*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0x965c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 4*r10 + 96]
	LONG $0x407da2c4; WORD $0x9704             // vpmulld	ymm0, ymm0, ymmword ptr [rdi + 4*r10]
	LONG $0x4075a2c4; WORD $0x974c; BYTE $0x20 // vpmulld	ymm1, ymm1, ymmword ptr [rdi + 4*r10 + 32]
	LONG $0x406da2c4; WORD $0x9754; BYTE $0x40 // vpmulld	ymm2, ymm2, ymmword ptr [rdi + 4*r10 + 64]
	LONG $0x4065a2c4; WORD $0x975c; BYTE $0x60 // vpmulld	ymm3, ymm3, ymmword ptr [rdi + 4*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0x9204             // vmovdqu	ymmword ptr [rdx + 4*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0x924c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 4*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0x9254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 4*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0x925c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 4*r10 + 96], ymm3
	LONG $0x20c28349                           // add	r10, 32
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB47_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB47_12

LBB47_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB47_10

LBB47_9:
	LONG $0x9e048b42             // mov	eax, dword ptr [rsi + 4*r11]
	LONG $0x04af0f42; BYTE $0x9f // imul	eax, dword ptr [rdi + 4*r11]
	LONG $0x9a048942             // mov	dword ptr [rdx + 4*r11], eax
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB47_9

LBB47_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB47_12

LBB47_11:
	LONG $0x9e048b42               // mov	eax, dword ptr [rsi + 4*r11]
	LONG $0x04af0f42; BYTE $0x9f   // imul	eax, dword ptr [rdi + 4*r11]
	LONG $0x9a048942               // mov	dword ptr [rdx + 4*r11], eax
	LONG $0x9e448b42; BYTE $0x04   // mov	eax, dword ptr [rsi + 4*r11 + 4]
	LONG $0x44af0f42; WORD $0x049f // imul	eax, dword ptr [rdi + 4*r11 + 4]
	LONG $0x9a448942; BYTE $0x04   // mov	dword ptr [rdx + 4*r11 + 4], eax
	LONG $0x9e448b42; BYTE $0x08   // mov	eax, dword ptr [rsi + 4*r11 + 8]
	LONG $0x44af0f42; WORD $0x089f // imul	eax, dword ptr [rdi + 4*r11 + 8]
	LONG $0x9a448942; BYTE $0x08   // mov	dword ptr [rdx + 4*r11 + 8], eax
	LONG $0x9e448b42; BYTE $0x0c   // mov	eax, dword ptr [rsi + 4*r11 + 12]
	LONG $0x44af0f42; WORD $0x0c9f // imul	eax, dword ptr [rdi + 4*r11 + 12]
	LONG $0x9a448942; BYTE $0x0c   // mov	dword ptr [rdx + 4*r11 + 12], eax
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB47_11

LBB47_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int32_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	WORD $0x5741             // push	r15
	WORD $0x5641             // push	r14
	BYTE $0x53               // push	rbx
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB48_12
	WORD $0x8949; BYTE $0xd0 // mov	r8, rdx
	WORD $0x8941; BYTE $0xcb // mov	r11d, ecx
	LONG $0x08fb8349         // cmp	r11, 8
	JAE  LBB48_3
	WORD $0x3145; BYTE $0xff // xor	r15d, r15d
	JMP  LBB48_8

LBB48_3:
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf8 // sub	rax, rdi
	WORD $0x3145; BYTE $0xff // xor	r15d, r15d
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB48_8
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf0 // sub	rax, rsi
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB48_8
	WORD $0x8941; BYTE $0xce // mov	r14d, ecx
	LONG $0x07e68341         // and	r14d, 7
	WORD $0x894d; BYTE $0xdf // mov	r15, r11
	WORD $0x294d; BYTE $0xf7 // sub	r15, r14
	WORD $0xdb31             // xor	ebx, ebx

LBB48_6:
	LONG $0x9f0c8b44                           // mov	r9d, dword ptr [rdi + 4*rbx]
	LONG $0x049f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 4]
	BYTE $0x99                                 // cdq
	LONG $0x049e7cf7                           // idiv	dword ptr [rsi + 4*rbx + 4]
	WORD $0x8941; BYTE $0xc2                   // mov	r10d, eax
	WORD $0x8944; BYTE $0xc8                   // mov	eax, r9d
	BYTE $0x99                                 // cdq
	WORD $0x3cf7; BYTE $0x9e                   // idiv	dword ptr [rsi + 4*rbx]
	LONG $0xc06ef9c5                           // vmovd	xmm0, eax
	LONG $0x2279c3c4; WORD $0x01c2             // vpinsrd	xmm0, xmm0, r10d, 1
	LONG $0x089f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 8]
	BYTE $0x99                                 // cdq
	LONG $0x089e7cf7                           // idiv	dword ptr [rsi + 4*rbx + 8]
	LONG $0x2279e3c4; WORD $0x02c0             // vpinsrd	xmm0, xmm0, eax, 2
	LONG $0x0c9f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 12]
	BYTE $0x99                                 // cdq
	LONG $0x0c9e7cf7                           // idiv	dword ptr [rsi + 4*rbx + 12]
	LONG $0x2279e3c4; WORD $0x03c0             // vpinsrd	xmm0, xmm0, eax, 3
	LONG $0x149f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 20]
	BYTE $0x99                                 // cdq
	LONG $0x149e7cf7                           // idiv	dword ptr [rsi + 4*rbx + 20]
	WORD $0x8941; BYTE $0xc1                   // mov	r9d, eax
	LONG $0x109f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 16]
	BYTE $0x99                                 // cdq
	LONG $0x109e7cf7                           // idiv	dword ptr [rsi + 4*rbx + 16]
	LONG $0xc86ef9c5                           // vmovd	xmm1, eax
	LONG $0x2271c3c4; WORD $0x01c9             // vpinsrd	xmm1, xmm1, r9d, 1
	LONG $0x189f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 24]
	BYTE $0x99                                 // cdq
	LONG $0x189e7cf7                           // idiv	dword ptr [rsi + 4*rbx + 24]
	LONG $0x2271e3c4; WORD $0x02c8             // vpinsrd	xmm1, xmm1, eax, 2
	LONG $0x1c9f448b                           // mov	eax, dword ptr [rdi + 4*rbx + 28]
	BYTE $0x99                                 // cdq
	LONG $0x1c9e7cf7                           // idiv	dword ptr [rsi + 4*rbx + 28]
	LONG $0x2271e3c4; WORD $0x03c8             // vpinsrd	xmm1, xmm1, eax, 3
	LONG $0x7f7ac1c4; WORD $0x984c; BYTE $0x10 // vmovdqu	xmmword ptr [r8 + 4*rbx + 16], xmm1
	LONG $0x7f7ac1c4; WORD $0x9804             // vmovdqu	xmmword ptr [r8 + 4*rbx], xmm0
	LONG $0x08c38348                           // add	rbx, 8
	WORD $0x3949; BYTE $0xdf                   // cmp	r15, rbx
	JNE  LBB48_6
	WORD $0x854d; BYTE $0xf6                   // test	r14, r14
	JE   LBB48_12

LBB48_8:
	WORD $0x2944; BYTE $0xf9 // sub	ecx, r15d
	LONG $0x015f8d49         // lea	rbx, [r15 + 1]
	WORD $0xc1f6; BYTE $0x01 // test	cl, 1
	JE   LBB48_10
	LONG $0xbf048b42         // mov	eax, dword ptr [rdi + 4*r15]
	BYTE $0x99               // cdq
	LONG $0xbe3cf742         // idiv	dword ptr [rsi + 4*r15]
	LONG $0xb8048943         // mov	dword ptr [r8 + 4*r15], eax
	WORD $0x8949; BYTE $0xdf // mov	r15, rbx

LBB48_10:
	WORD $0x3949; BYTE $0xdb // cmp	r11, rbx
	JE   LBB48_12

LBB48_11:
	LONG $0xbf048b42             // mov	eax, dword ptr [rdi + 4*r15]
	BYTE $0x99                   // cdq
	LONG $0xbe3cf742             // idiv	dword ptr [rsi + 4*r15]
	LONG $0xb8048943             // mov	dword ptr [r8 + 4*r15], eax
	LONG $0xbf448b42; BYTE $0x04 // mov	eax, dword ptr [rdi + 4*r15 + 4]
	BYTE $0x99                   // cdq
	LONG $0xbe7cf742; BYTE $0x04 // idiv	dword ptr [rsi + 4*r15 + 4]
	LONG $0xb8448943; BYTE $0x04 // mov	dword ptr [r8 + 4*r15 + 4], eax
	LONG $0x02c78349             // add	r15, 2
	WORD $0x394d; BYTE $0xfb     // cmp	r11, r15
	JNE  LBB48_11

LBB48_12:
	LONG $0xe8658d48 // lea	rsp, [rbp - 24]
	BYTE $0x5b       // pop	rbx
	WORD $0x5e41     // pop	r14
	WORD $0x5f41     // pop	r15
	BYTE $0x5d       // pop	rbp
	BYTE $0xc3       // ret

TEXT ·_int64_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB49_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB49_4
	WORD $0xc931             // xor	ecx, ecx
	WORD $0xc031             // xor	eax, eax
	JMP  LBB49_7

LBB49_1:
	WORD $0xc031 // xor	eax, eax
	JMP  LBB49_8

LBB49_4:
	WORD $0xe283; BYTE $0x0f // and	edx, 15
	WORD $0x894c; BYTE $0xc1 // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1 // sub	rcx, rdx
	LONG $0xc0eff9c5         // vpxor	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc9eff1c5         // vpxor	xmm1, xmm1, xmm1
	LONG $0xd2efe9c5         // vpxor	xmm2, xmm2, xmm2
	LONG $0xdbefe1c5         // vpxor	xmm3, xmm3, xmm3

LBB49_5:
	LONG $0x04d4fdc5; BYTE $0xc7   // vpaddq	ymm0, ymm0, ymmword ptr [rdi + 8*rax]
	LONG $0x4cd4f5c5; WORD $0x20c7 // vpaddq	ymm1, ymm1, ymmword ptr [rdi + 8*rax + 32]
	LONG $0x54d4edc5; WORD $0x40c7 // vpaddq	ymm2, ymm2, ymmword ptr [rdi + 8*rax + 64]
	LONG $0x5cd4e5c5; WORD $0x60c7 // vpaddq	ymm3, ymm3, ymmword ptr [rdi + 8*rax + 96]
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB49_5
	LONG $0xc0d4f5c5               // vpaddq	ymm0, ymm1, ymm0
	LONG $0xc0d4edc5               // vpaddq	ymm0, ymm2, ymm0
	LONG $0xc0d4e5c5               // vpaddq	ymm0, ymm3, ymm0
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	xmm1, ymm0, 1
	LONG $0xc1d4f9c5               // vpaddq	xmm0, xmm0, xmm1
	LONG $0xc870f9c5; BYTE $0xee   // vpshufd	xmm1, xmm0, 238
	LONG $0xc1d4f9c5               // vpaddq	xmm0, xmm0, xmm1
	LONG $0x7ef9e1c4; BYTE $0xc0   // vmovq	rax, xmm0
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB49_8

LBB49_7:
	LONG $0xcf040348         // add	rax, qword ptr [rdi + 8*rcx]
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB49_7

LBB49_8:
	WORD $0x8948; BYTE $0x06 // mov	qword ptr [rsi], rax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int64_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x8b48; BYTE $0x07 // mov	rax, qword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB50_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB50_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB50_6

LBB50_3:
	WORD $0xe283; BYTE $0x0f     // and	edx, 15
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq	xmm0, rax
	LONG $0x597de2c4; BYTE $0xc0 // vpbroadcastq	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0

LBB50_4:
	LONG $0x246ffec5; BYTE $0xc7   // vmovdqu	ymm4, ymmword ptr [rdi + 8*rax]
	LONG $0x6c6ffec5; WORD $0x20c7 // vmovdqu	ymm5, ymmword ptr [rdi + 8*rax + 32]
	LONG $0x746ffec5; WORD $0x40c7 // vmovdqu	ymm6, ymmword ptr [rdi + 8*rax + 64]
	LONG $0x377de2c4; BYTE $0xfc   // vpcmpgtq	ymm7, ymm0, ymm4
	LONG $0x4b7de3c4; WORD $0x70c4 // vblendvpd	ymm0, ymm0, ymm4, ymm7
	LONG $0x646ffec5; WORD $0x60c7 // vmovdqu	ymm4, ymmword ptr [rdi + 8*rax + 96]
	LONG $0x3765e2c4; BYTE $0xfd   // vpcmpgtq	ymm7, ymm3, ymm5
	LONG $0x4b65e3c4; WORD $0x70dd // vblendvpd	ymm3, ymm3, ymm5, ymm7
	LONG $0x376de2c4; BYTE $0xee   // vpcmpgtq	ymm5, ymm2, ymm6
	LONG $0x4b6de3c4; WORD $0x50d6 // vblendvpd	ymm2, ymm2, ymm6, ymm5
	LONG $0x3775e2c4; BYTE $0xec   // vpcmpgtq	ymm5, ymm1, ymm4
	LONG $0x4b75e3c4; WORD $0x50cc // vblendvpd	ymm1, ymm1, ymm4, ymm5
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB50_4
	LONG $0x3765e2c4; BYTE $0xe0   // vpcmpgtq	ymm4, ymm3, ymm0
	LONG $0x4b65e3c4; WORD $0x40c0 // vblendvpd	ymm0, ymm3, ymm0, ymm4
	LONG $0x376de2c4; BYTE $0xd8   // vpcmpgtq	ymm3, ymm2, ymm0
	LONG $0x4b6de3c4; WORD $0x30c0 // vblendvpd	ymm0, ymm2, ymm0, ymm3
	LONG $0x3775e2c4; BYTE $0xd0   // vpcmpgtq	ymm2, ymm1, ymm0
	LONG $0x4b75e3c4; WORD $0x20c0 // vblendvpd	ymm0, ymm1, ymm0, ymm2
	LONG $0x197de3c4; WORD $0x01c1 // vextractf128	xmm1, ymm0, 1
	LONG $0x3771e2c4; BYTE $0xd0   // vpcmpgtq	xmm2, xmm1, xmm0
	LONG $0x4b71e3c4; WORD $0x20c0 // vblendvpd	xmm0, xmm1, xmm0, xmm2
	LONG $0x0479e3c4; WORD $0xeec8 // vpermilps	xmm1, xmm0, 238
	LONG $0x3771e2c4; BYTE $0xd0   // vpcmpgtq	xmm2, xmm1, xmm0
	LONG $0x4b71e3c4; WORD $0x20c0 // vblendvpd	xmm0, xmm1, xmm0, xmm2
	LONG $0x7ef9e1c4; BYTE $0xc0   // vmovq	rax, xmm0
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB50_7

LBB50_6:
	LONG $0xcf148b48         // mov	rdx, qword ptr [rdi + 8*rcx]
	WORD $0x3948; BYTE $0xc2 // cmp	rdx, rax
	LONG $0xc24c0f48         // cmovl	rax, rdx
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB50_6

LBB50_7:
	WORD $0x8948; BYTE $0x06 // mov	qword ptr [rsi], rax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int64_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x8b48; BYTE $0x07 // mov	rax, qword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB51_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB51_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB51_6

LBB51_3:
	WORD $0xe283; BYTE $0x0f     // and	edx, 15
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq	xmm0, rax
	LONG $0x597de2c4; BYTE $0xc0 // vpbroadcastq	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xd86ffdc5             // vmovdqa	ymm3, ymm0
	LONG $0xd06ffdc5             // vmovdqa	ymm2, ymm0
	LONG $0xc86ffdc5             // vmovdqa	ymm1, ymm0

LBB51_4:
	LONG $0x246ffec5; BYTE $0xc7   // vmovdqu	ymm4, ymmword ptr [rdi + 8*rax]
	LONG $0x6c6ffec5; WORD $0x20c7 // vmovdqu	ymm5, ymmword ptr [rdi + 8*rax + 32]
	LONG $0x746ffec5; WORD $0x40c7 // vmovdqu	ymm6, ymmword ptr [rdi + 8*rax + 64]
	LONG $0x375de2c4; BYTE $0xf8   // vpcmpgtq	ymm7, ymm4, ymm0
	LONG $0x4b7de3c4; WORD $0x70c4 // vblendvpd	ymm0, ymm0, ymm4, ymm7
	LONG $0x646ffec5; WORD $0x60c7 // vmovdqu	ymm4, ymmword ptr [rdi + 8*rax + 96]
	LONG $0x3755e2c4; BYTE $0xfb   // vpcmpgtq	ymm7, ymm5, ymm3
	LONG $0x4b65e3c4; WORD $0x70dd // vblendvpd	ymm3, ymm3, ymm5, ymm7
	LONG $0x374de2c4; BYTE $0xea   // vpcmpgtq	ymm5, ymm6, ymm2
	LONG $0x4b6de3c4; WORD $0x50d6 // vblendvpd	ymm2, ymm2, ymm6, ymm5
	LONG $0x375de2c4; BYTE $0xe9   // vpcmpgtq	ymm5, ymm4, ymm1
	LONG $0x4b75e3c4; WORD $0x50cc // vblendvpd	ymm1, ymm1, ymm4, ymm5
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB51_4
	LONG $0x377de2c4; BYTE $0xe3   // vpcmpgtq	ymm4, ymm0, ymm3
	LONG $0x4b65e3c4; WORD $0x40c0 // vblendvpd	ymm0, ymm3, ymm0, ymm4
	LONG $0x377de2c4; BYTE $0xda   // vpcmpgtq	ymm3, ymm0, ymm2
	LONG $0x4b6de3c4; WORD $0x30c0 // vblendvpd	ymm0, ymm2, ymm0, ymm3
	LONG $0x377de2c4; BYTE $0xd1   // vpcmpgtq	ymm2, ymm0, ymm1
	LONG $0x4b75e3c4; WORD $0x20c0 // vblendvpd	ymm0, ymm1, ymm0, ymm2
	LONG $0x197de3c4; WORD $0x01c1 // vextractf128	xmm1, ymm0, 1
	LONG $0x3779e2c4; BYTE $0xd1   // vpcmpgtq	xmm2, xmm0, xmm1
	LONG $0x4b71e3c4; WORD $0x20c0 // vblendvpd	xmm0, xmm1, xmm0, xmm2
	LONG $0x0479e3c4; WORD $0xeec8 // vpermilps	xmm1, xmm0, 238
	LONG $0x3779e2c4; BYTE $0xd1   // vpcmpgtq	xmm2, xmm0, xmm1
	LONG $0x4b71e3c4; WORD $0x20c0 // vblendvpd	xmm0, xmm1, xmm0, xmm2
	LONG $0x7ef9e1c4; BYTE $0xc0   // vmovq	rax, xmm0
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB51_7

LBB51_6:
	LONG $0xcf148b48         // mov	rdx, qword ptr [rdi + 8*rcx]
	WORD $0x3948; BYTE $0xc2 // cmp	rdx, rax
	LONG $0xc24f0f48         // cmovg	rax, rdx
	WORD $0xff48; BYTE $0xc1 // inc	rcx
	WORD $0x3949; BYTE $0xc8 // cmp	r8, rcx
	JNE  LBB51_6

LBB51_7:
	WORD $0x8948; BYTE $0x06 // mov	qword ptr [rsi], rax
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int64_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB52_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB52_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB52_8

LBB52_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB52_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB52_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x0fe18341                           // and	r9d, 15
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB52_6:
	LONG $0x6f7ea1c4; WORD $0xd604             // vmovdqu	ymm0, ymmword ptr [rsi + 8*r10]
	LONG $0x6f7ea1c4; WORD $0xd64c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rsi + 8*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0xd654; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rsi + 8*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0xd65c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rsi + 8*r10 + 96]
	LONG $0xd47da1c4; WORD $0xd704             // vpaddq	ymm0, ymm0, ymmword ptr [rdi + 8*r10]
	LONG $0xd475a1c4; WORD $0xd74c; BYTE $0x20 // vpaddq	ymm1, ymm1, ymmword ptr [rdi + 8*r10 + 32]
	LONG $0xd46da1c4; WORD $0xd754; BYTE $0x40 // vpaddq	ymm2, ymm2, ymmword ptr [rdi + 8*r10 + 64]
	LONG $0xd465a1c4; WORD $0xd75c; BYTE $0x60 // vpaddq	ymm3, ymm3, ymmword ptr [rdi + 8*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0xd204             // vmovdqu	ymmword ptr [rdx + 8*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0xd24c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 8*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0xd254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 8*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0xd25c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 8*r10 + 96], ymm3
	LONG $0x10c28349                           // add	r10, 16
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB52_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB52_12

LBB52_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB52_10

LBB52_9:
	LONG $0xde048b4a         // mov	rax, qword ptr [rsi + 8*r11]
	LONG $0xdf04034a         // add	rax, qword ptr [rdi + 8*r11]
	LONG $0xda04894a         // mov	qword ptr [rdx + 8*r11], rax
	WORD $0xff49; BYTE $0xc3 // inc	r11
	WORD $0xff48; BYTE $0xc9 // dec	rcx
	JNE  LBB52_9

LBB52_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB52_12

LBB52_11:
	LONG $0xde048b4a             // mov	rax, qword ptr [rsi + 8*r11]
	LONG $0xdf04034a             // add	rax, qword ptr [rdi + 8*r11]
	LONG $0xda04894a             // mov	qword ptr [rdx + 8*r11], rax
	LONG $0xde448b4a; BYTE $0x08 // mov	rax, qword ptr [rsi + 8*r11 + 8]
	LONG $0xdf44034a; BYTE $0x08 // add	rax, qword ptr [rdi + 8*r11 + 8]
	LONG $0xda44894a; BYTE $0x08 // mov	qword ptr [rdx + 8*r11 + 8], rax
	LONG $0xde448b4a; BYTE $0x10 // mov	rax, qword ptr [rsi + 8*r11 + 16]
	LONG $0xdf44034a; BYTE $0x10 // add	rax, qword ptr [rdi + 8*r11 + 16]
	LONG $0xda44894a; BYTE $0x10 // mov	qword ptr [rdx + 8*r11 + 16], rax
	LONG $0xde448b4a; BYTE $0x18 // mov	rax, qword ptr [rsi + 8*r11 + 24]
	LONG $0xdf44034a; BYTE $0x18 // add	rax, qword ptr [rdi + 8*r11 + 24]
	LONG $0xda44894a; BYTE $0x18 // mov	qword ptr [rdx + 8*r11 + 24], rax
	LONG $0x04c38349             // add	r11, 4
	WORD $0x394d; BYTE $0xd8     // cmp	r8, r11
	JNE  LBB52_11

LBB52_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int64_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB53_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB53_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB53_8

LBB53_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB53_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB53_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x0fe18341                           // and	r9d, 15
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB53_6:
	LONG $0x6f7ea1c4; WORD $0xd704             // vmovdqu	ymm0, ymmword ptr [rdi + 8*r10]
	LONG $0x6f7ea1c4; WORD $0xd74c; BYTE $0x20 // vmovdqu	ymm1, ymmword ptr [rdi + 8*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0xd754; BYTE $0x40 // vmovdqu	ymm2, ymmword ptr [rdi + 8*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0xd75c; BYTE $0x60 // vmovdqu	ymm3, ymmword ptr [rdi + 8*r10 + 96]
	LONG $0xfb7da1c4; WORD $0xd604             // vpsubq	ymm0, ymm0, ymmword ptr [rsi + 8*r10]
	LONG $0xfb75a1c4; WORD $0xd64c; BYTE $0x20 // vpsubq	ymm1, ymm1, ymmword ptr [rsi + 8*r10 + 32]
	LONG $0xfb6da1c4; WORD $0xd654; BYTE $0x40 // vpsubq	ymm2, ymm2, ymmword ptr [rsi + 8*r10 + 64]
	LONG $0xfb65a1c4; WORD $0xd65c; BYTE $0x60 // vpsubq	ymm3, ymm3, ymmword ptr [rsi + 8*r10 + 96]
	LONG $0x7f7ea1c4; WORD $0xd204             // vmovdqu	ymmword ptr [rdx + 8*r10], ymm0
	LONG $0x7f7ea1c4; WORD $0xd24c; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 8*r10 + 32], ymm1
	LONG $0x7f7ea1c4; WORD $0xd254; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 8*r10 + 64], ymm2
	LONG $0x7f7ea1c4; WORD $0xd25c; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 8*r10 + 96], ymm3
	LONG $0x10c28349                           // add	r10, 16
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB53_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB53_12

LBB53_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB53_10

LBB53_9:
	LONG $0xdf048b4a         // mov	rax, qword ptr [rdi + 8*r11]
	LONG $0xde042b4a         // sub	rax, qword ptr [rsi + 8*r11]
	LONG $0xda04894a         // mov	qword ptr [rdx + 8*r11], rax
	WORD $0xff49; BYTE $0xc3 // inc	r11
	WORD $0xff48; BYTE $0xc9 // dec	rcx
	JNE  LBB53_9

LBB53_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB53_12

LBB53_11:
	LONG $0xdf048b4a             // mov	rax, qword ptr [rdi + 8*r11]
	LONG $0xde042b4a             // sub	rax, qword ptr [rsi + 8*r11]
	LONG $0xda04894a             // mov	qword ptr [rdx + 8*r11], rax
	LONG $0xdf448b4a; BYTE $0x08 // mov	rax, qword ptr [rdi + 8*r11 + 8]
	LONG $0xde442b4a; BYTE $0x08 // sub	rax, qword ptr [rsi + 8*r11 + 8]
	LONG $0xda44894a; BYTE $0x08 // mov	qword ptr [rdx + 8*r11 + 8], rax
	LONG $0xdf448b4a; BYTE $0x10 // mov	rax, qword ptr [rdi + 8*r11 + 16]
	LONG $0xde442b4a; BYTE $0x10 // sub	rax, qword ptr [rsi + 8*r11 + 16]
	LONG $0xda44894a; BYTE $0x10 // mov	qword ptr [rdx + 8*r11 + 16], rax
	LONG $0xdf448b4a; BYTE $0x18 // mov	rax, qword ptr [rdi + 8*r11 + 24]
	LONG $0xde442b4a; BYTE $0x18 // sub	rax, qword ptr [rsi + 8*r11 + 24]
	LONG $0xda44894a; BYTE $0x18 // mov	qword ptr [rdx + 8*r11 + 24], rax
	LONG $0x04c38349             // add	r11, 4
	WORD $0x394d; BYTE $0xd8     // cmp	r8, r11
	JNE  LBB53_11

LBB53_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int64_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB54_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB54_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB54_8

LBB54_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB54_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB54_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x0fe18341                           // and	r9d, 15
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB54_6:
	LONG $0x6f7ea1c4; WORD $0xd70c             // vmovdqu	ymm1, ymmword ptr [rdi + 8*r10]
	LONG $0x6f7ea1c4; WORD $0xd754; BYTE $0x20 // vmovdqu	ymm2, ymmword ptr [rdi + 8*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0xd75c; BYTE $0x40 // vmovdqu	ymm3, ymmword ptr [rdi + 8*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0xd744; BYTE $0x60 // vmovdqu	ymm0, ymmword ptr [rdi + 8*r10 + 96]
	LONG $0x6f7ea1c4; WORD $0xd624             // vmovdqu	ymm4, ymmword ptr [rsi + 8*r10]
	LONG $0x6f7ea1c4; WORD $0xd66c; BYTE $0x20 // vmovdqu	ymm5, ymmword ptr [rsi + 8*r10 + 32]
	LONG $0x6f7ea1c4; WORD $0xd674; BYTE $0x40 // vmovdqu	ymm6, ymmword ptr [rsi + 8*r10 + 64]
	LONG $0x6f7ea1c4; WORD $0xd67c; BYTE $0x60 // vmovdqu	ymm7, ymmword ptr [rsi + 8*r10 + 96]
	LONG $0xd473bdc5; BYTE $0x20               // vpsrlq	ymm8, ymm4, 32
	LONG $0xc1f43dc5                           // vpmuludq	ymm8, ymm8, ymm1
	LONG $0xd173b5c5; BYTE $0x20               // vpsrlq	ymm9, ymm1, 32
	LONG $0xccf435c5                           // vpmuludq	ymm9, ymm9, ymm4
	LONG $0xd43541c4; BYTE $0xc0               // vpaddq	ymm8, ymm9, ymm8
	LONG $0x733dc1c4; WORD $0x20f0             // vpsllq	ymm8, ymm8, 32
	LONG $0xc9f4ddc5                           // vpmuludq	ymm1, ymm4, ymm1
	LONG $0xc9d4bdc5                           // vpaddq	ymm1, ymm8, ymm1
	LONG $0xd573ddc5; BYTE $0x20               // vpsrlq	ymm4, ymm5, 32
	LONG $0xe2f4ddc5                           // vpmuludq	ymm4, ymm4, ymm2
	LONG $0xd273bdc5; BYTE $0x20               // vpsrlq	ymm8, ymm2, 32
	LONG $0xc5f43dc5                           // vpmuludq	ymm8, ymm8, ymm5
	LONG $0xe4d4bdc5                           // vpaddq	ymm4, ymm8, ymm4
	LONG $0xf473ddc5; BYTE $0x20               // vpsllq	ymm4, ymm4, 32
	LONG $0xd2f4d5c5                           // vpmuludq	ymm2, ymm5, ymm2
	LONG $0xd4d4edc5                           // vpaddq	ymm2, ymm2, ymm4
	LONG $0xd673ddc5; BYTE $0x20               // vpsrlq	ymm4, ymm6, 32
	LONG $0xe3f4ddc5                           // vpmuludq	ymm4, ymm4, ymm3
	LONG $0xd373d5c5; BYTE $0x20               // vpsrlq	ymm5, ymm3, 32
	LONG $0xedf4cdc5                           // vpmuludq	ymm5, ymm6, ymm5
	LONG $0xe4d4d5c5                           // vpaddq	ymm4, ymm5, ymm4
	LONG $0xf473ddc5; BYTE $0x20               // vpsllq	ymm4, ymm4, 32
	LONG $0xdbf4cdc5                           // vpmuludq	ymm3, ymm6, ymm3
	LONG $0xdcd4e5c5                           // vpaddq	ymm3, ymm3, ymm4
	LONG $0xd773ddc5; BYTE $0x20               // vpsrlq	ymm4, ymm7, 32
	LONG $0xe0f4ddc5                           // vpmuludq	ymm4, ymm4, ymm0
	LONG $0xd073d5c5; BYTE $0x20               // vpsrlq	ymm5, ymm0, 32
	LONG $0xedf4c5c5                           // vpmuludq	ymm5, ymm7, ymm5
	LONG $0xe4d4d5c5                           // vpaddq	ymm4, ymm5, ymm4
	LONG $0xf473ddc5; BYTE $0x20               // vpsllq	ymm4, ymm4, 32
	LONG $0xc0f4c5c5                           // vpmuludq	ymm0, ymm7, ymm0
	LONG $0xc4d4fdc5                           // vpaddq	ymm0, ymm0, ymm4
	LONG $0x7f7ea1c4; WORD $0xd20c             // vmovdqu	ymmword ptr [rdx + 8*r10], ymm1
	LONG $0x7f7ea1c4; WORD $0xd254; BYTE $0x20 // vmovdqu	ymmword ptr [rdx + 8*r10 + 32], ymm2
	LONG $0x7f7ea1c4; WORD $0xd25c; BYTE $0x40 // vmovdqu	ymmword ptr [rdx + 8*r10 + 64], ymm3
	LONG $0x7f7ea1c4; WORD $0xd244; BYTE $0x60 // vmovdqu	ymmword ptr [rdx + 8*r10 + 96], ymm0
	LONG $0x10c28349                           // add	r10, 16
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB54_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB54_12

LBB54_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB54_10

LBB54_9:
	LONG $0xde048b4a             // mov	rax, qword ptr [rsi + 8*r11]
	LONG $0x04af0f4a; BYTE $0xdf // imul	rax, qword ptr [rdi + 8*r11]
	LONG $0xda04894a             // mov	qword ptr [rdx + 8*r11], rax
	WORD $0xff49; BYTE $0xc3     // inc	r11
	WORD $0xff48; BYTE $0xc9     // dec	rcx
	JNE  LBB54_9

LBB54_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB54_12

LBB54_11:
	LONG $0xde048b4a               // mov	rax, qword ptr [rsi + 8*r11]
	LONG $0x04af0f4a; BYTE $0xdf   // imul	rax, qword ptr [rdi + 8*r11]
	LONG $0xda04894a               // mov	qword ptr [rdx + 8*r11], rax
	LONG $0xde448b4a; BYTE $0x08   // mov	rax, qword ptr [rsi + 8*r11 + 8]
	LONG $0x44af0f4a; WORD $0x08df // imul	rax, qword ptr [rdi + 8*r11 + 8]
	LONG $0xda44894a; BYTE $0x08   // mov	qword ptr [rdx + 8*r11 + 8], rax
	LONG $0xde448b4a; BYTE $0x10   // mov	rax, qword ptr [rsi + 8*r11 + 16]
	LONG $0x44af0f4a; WORD $0x10df // imul	rax, qword ptr [rdi + 8*r11 + 16]
	LONG $0xda44894a; BYTE $0x10   // mov	qword ptr [rdx + 8*r11 + 16], rax
	LONG $0xde448b4a; BYTE $0x18   // mov	rax, qword ptr [rsi + 8*r11 + 24]
	LONG $0x44af0f4a; WORD $0x18df // imul	rax, qword ptr [rdi + 8*r11 + 24]
	LONG $0xda44894a; BYTE $0x18   // mov	qword ptr [rdx + 8*r11 + 24], rax
	LONG $0x04c38349               // add	r11, 4
	WORD $0x394d; BYTE $0xd8       // cmp	r8, r11
	JNE  LBB54_11

LBB54_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_int64_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	WORD $0x5641             // push	r14
	BYTE $0x53               // push	rbx
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB55_21
	WORD $0x8949; BYTE $0xd0 // mov	r8, rdx
	WORD $0x8941; BYTE $0xca // mov	r10d, ecx
	LONG $0x04fa8349         // cmp	r10, 4
	JAE  LBB55_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB55_8

LBB55_3:
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf8 // sub	rax, rdi
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB55_8
	WORD $0x894c; BYTE $0xc0 // mov	rax, r8
	WORD $0x2948; BYTE $0xf0 // sub	rax, rsi
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB55_8
	WORD $0x8941; BYTE $0xce // mov	r14d, ecx
	LONG $0x03e68341         // and	r14d, 3
	WORD $0x894d; BYTE $0xd3 // mov	r11, r10
	WORD $0x294d; BYTE $0xf3 // sub	r11, r14
	WORD $0xdb31             // xor	ebx, ebx

LBB55_6:
	LONG $0xdf0c8b4c                           // mov	r9, qword ptr [rdi + 8*rbx]
	LONG $0xdf448b48; BYTE $0x08               // mov	rax, qword ptr [rdi + 8*rbx + 8]
	WORD $0x9948                               // cqo
	LONG $0xde7cf748; BYTE $0x08               // idiv	qword ptr [rsi + 8*rbx + 8]
	LONG $0x6ef9e1c4; BYTE $0xc0               // vmovq	xmm0, rax
	WORD $0x894c; BYTE $0xc8                   // mov	rax, r9
	WORD $0x9948                               // cqo
	LONG $0xde3cf748                           // idiv	qword ptr [rsi + 8*rbx]
	LONG $0x6ef9e1c4; BYTE $0xc8               // vmovq	xmm1, rax
	LONG $0xc06cf1c5                           // vpunpcklqdq	xmm0, xmm1, xmm0
	LONG $0xdf448b48; BYTE $0x18               // mov	rax, qword ptr [rdi + 8*rbx + 24]
	WORD $0x9948                               // cqo
	LONG $0xde7cf748; BYTE $0x18               // idiv	qword ptr [rsi + 8*rbx + 24]
	WORD $0x8949; BYTE $0xc1                   // mov	r9, rax
	LONG $0xdf448b48; BYTE $0x10               // mov	rax, qword ptr [rdi + 8*rbx + 16]
	WORD $0x9948                               // cqo
	LONG $0xde7cf748; BYTE $0x10               // idiv	qword ptr [rsi + 8*rbx + 16]
	LONG $0x6ef9c1c4; BYTE $0xc9               // vmovq	xmm1, r9
	LONG $0x6ef9e1c4; BYTE $0xd0               // vmovq	xmm2, rax
	LONG $0xc96ce9c5                           // vpunpcklqdq	xmm1, xmm2, xmm1
	LONG $0x7f7ac1c4; WORD $0xd84c; BYTE $0x10 // vmovdqu	xmmword ptr [r8 + 8*rbx + 16], xmm1
	LONG $0x7f7ac1c4; WORD $0xd804             // vmovdqu	xmmword ptr [r8 + 8*rbx], xmm0
	LONG $0x04c38348                           // add	rbx, 4
	WORD $0x3949; BYTE $0xdb                   // cmp	r11, rbx
	JNE  LBB55_6
	WORD $0x854d; BYTE $0xf6                   // test	r14, r14
	JE   LBB55_21

LBB55_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	LONG $0x015b8d49         // lea	rbx, [r11 + 1]
	WORD $0xc1f6; BYTE $0x01 // test	cl, 1
	JE   LBB55_13
	LONG $0xdf048b4a         // mov	rax, qword ptr [rdi + 8*r11]
	LONG $0xde0c8b4a         // mov	rcx, qword ptr [rsi + 8*r11]
	WORD $0x8948; BYTE $0xc2 // mov	rdx, rax
	WORD $0x0948; BYTE $0xca // or	rdx, rcx
	LONG $0x20eac148         // shr	rdx, 32
	JE   LBB55_10
	WORD $0x9948             // cqo
	WORD $0xf748; BYTE $0xf9 // idiv	rcx
	JMP  LBB55_12

LBB55_10:
	WORD $0xd231 // xor	edx, edx
	WORD $0xf1f7 // div	ecx

LBB55_12:
	LONG $0xd804894b         // mov	qword ptr [r8 + 8*r11], rax
	WORD $0x8949; BYTE $0xdb // mov	r11, rbx

LBB55_13:
	WORD $0x3949; BYTE $0xda // cmp	r10, rbx
	JNE  LBB55_14
	JMP  LBB55_21

LBB55_19:
	WORD $0x9948                 // cqo
	WORD $0xf748; BYTE $0xf9     // idiv	rcx
	LONG $0xd844894b; BYTE $0x08 // mov	qword ptr [r8 + 8*r11 + 8], rax
	LONG $0x02c38349             // add	r11, 2
	WORD $0x394d; BYTE $0xda     // cmp	r10, r11
	JE   LBB55_21

LBB55_14:
	LONG $0xdf048b4a         // mov	rax, qword ptr [rdi + 8*r11]
	LONG $0xde0c8b4a         // mov	rcx, qword ptr [rsi + 8*r11]
	WORD $0x8948; BYTE $0xc2 // mov	rdx, rax
	WORD $0x0948; BYTE $0xca // or	rdx, rcx
	LONG $0x20eac148         // shr	rdx, 32
	JE   LBB55_15
	WORD $0x9948             // cqo
	WORD $0xf748; BYTE $0xf9 // idiv	rcx
	JMP  LBB55_17

LBB55_15:
	WORD $0xd231 // xor	edx, edx
	WORD $0xf1f7 // div	ecx

LBB55_17:
	LONG $0xd804894b             // mov	qword ptr [r8 + 8*r11], rax
	LONG $0xdf448b4a; BYTE $0x08 // mov	rax, qword ptr [rdi + 8*r11 + 8]
	LONG $0xde4c8b4a; BYTE $0x08 // mov	rcx, qword ptr [rsi + 8*r11 + 8]
	WORD $0x8948; BYTE $0xc2     // mov	rdx, rax
	WORD $0x0948; BYTE $0xca     // or	rdx, rcx
	LONG $0x20eac148             // shr	rdx, 32
	JNE  LBB55_19
	WORD $0xd231                 // xor	edx, edx
	WORD $0xf1f7                 // div	ecx
	LONG $0xd844894b; BYTE $0x08 // mov	qword ptr [r8 + 8*r11 + 8], rax
	LONG $0x02c38349             // add	r11, 2
	WORD $0x394d; BYTE $0xda     // cmp	r10, r11
	JNE  LBB55_14

LBB55_21:
	LONG $0xf0658d48 // lea	rsp, [rbp - 16]
	BYTE $0x5b       // pop	rbx
	WORD $0x5e41     // pop	r14
	BYTE $0x5d       // pop	rbp
	BYTE $0xc3       // ret

TEXT ·_float32_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB56_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB56_4
	LONG $0xc057f8c5         // vxorps	xmm0, xmm0, xmm0
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB56_7

LBB56_1:
	LONG $0xc057f8c5 // vxorps	xmm0, xmm0, xmm0
	JMP  LBB56_8

LBB56_4:
	WORD $0xe283; BYTE $0x1f // and	edx, 31
	WORD $0x894c; BYTE $0xc1 // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1 // sub	rcx, rdx
	LONG $0xc057f8c5         // vxorps	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc957f0c5         // vxorps	xmm1, xmm1, xmm1
	LONG $0xd257e8c5         // vxorps	xmm2, xmm2, xmm2
	LONG $0xdb57e0c5         // vxorps	xmm3, xmm3, xmm3

LBB56_5:
	LONG $0x0458fcc5; BYTE $0x87   // vaddps	ymm0, ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x4c58f4c5; WORD $0x2087 // vaddps	ymm1, ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x5458ecc5; WORD $0x4087 // vaddps	ymm2, ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x5c58e4c5; WORD $0x6087 // vaddps	ymm3, ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x20c08348               // add	rax, 32
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB56_5
	LONG $0xc058f4c5               // vaddps	ymm0, ymm1, ymm0
	LONG $0xc058ecc5               // vaddps	ymm0, ymm2, ymm0
	LONG $0xc058e4c5               // vaddps	ymm0, ymm3, ymm0
	LONG $0x197de3c4; WORD $0x01c1 // vextractf128	xmm1, ymm0, 1
	LONG $0xc158f8c5               // vaddps	xmm0, xmm0, xmm1
	LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd	xmm1, xmm0, 1
	LONG $0xc158f8c5               // vaddps	xmm0, xmm0, xmm1
	LONG $0xc816fac5               // vmovshdup	xmm1, xmm0
	LONG $0xc158fac5               // vaddss	xmm0, xmm0, xmm1
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB56_8

LBB56_7:
	LONG $0x0458fac5; BYTE $0x8f // vaddss	xmm0, xmm0, dword ptr [rdi + 4*rcx]
	WORD $0xff48; BYTE $0xc1     // inc	rcx
	WORD $0x3949; BYTE $0xc8     // cmp	r8, rcx
	JNE  LBB56_7

LBB56_8:
	LONG $0x0611fac5         // vmovss	dword ptr [rsi], xmm0
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float32_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	LONG $0x0710fac5         // vmovss	xmm0, dword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB57_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB57_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB57_6

LBB57_3:
	WORD $0xe283; BYTE $0x1f     // and	edx, 31
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0x187de2c4; BYTE $0xc0 // vbroadcastss	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc828fcc5             // vmovaps	ymm1, ymm0
	LONG $0xd028fcc5             // vmovaps	ymm2, ymm0
	LONG $0xd828fcc5             // vmovaps	ymm3, ymm0

LBB57_4:
	LONG $0x045dfcc5; BYTE $0x87   // vminps	ymm0, ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x4c5df4c5; WORD $0x2087 // vminps	ymm1, ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x545decc5; WORD $0x4087 // vminps	ymm2, ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x5c5de4c5; WORD $0x6087 // vminps	ymm3, ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x20c08348               // add	rax, 32
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB57_4
	LONG $0xc15dfcc5               // vminps	ymm0, ymm0, ymm1
	LONG $0xc25dfcc5               // vminps	ymm0, ymm0, ymm2
	LONG $0xc35dfcc5               // vminps	ymm0, ymm0, ymm3
	LONG $0x197de3c4; WORD $0x01c1 // vextractf128	xmm1, ymm0, 1
	LONG $0xc15df8c5               // vminps	xmm0, xmm0, xmm1
	LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd	xmm1, xmm0, 1
	LONG $0xc15df8c5               // vminps	xmm0, xmm0, xmm1
	LONG $0xc816fac5               // vmovshdup	xmm1, xmm0
	LONG $0xc15dfac5               // vminss	xmm0, xmm0, xmm1
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB57_7

LBB57_6:
	LONG $0x045dfac5; BYTE $0x8f // vminss	xmm0, xmm0, dword ptr [rdi + 4*rcx]
	WORD $0xff48; BYTE $0xc1     // inc	rcx
	WORD $0x3949; BYTE $0xc8     // cmp	r8, rcx
	JNE  LBB57_6

LBB57_7:
	LONG $0x0611fac5         // vmovss	dword ptr [rsi], xmm0
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float32_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	LONG $0x0710fac5         // vmovss	xmm0, dword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB58_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB58_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB58_6

LBB58_3:
	WORD $0xe283; BYTE $0x1f     // and	edx, 31
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0x187de2c4; BYTE $0xc0 // vbroadcastss	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc828fcc5             // vmovaps	ymm1, ymm0
	LONG $0xd028fcc5             // vmovaps	ymm2, ymm0
	LONG $0xd828fcc5             // vmovaps	ymm3, ymm0

LBB58_4:
	LONG $0x045ffcc5; BYTE $0x87   // vmaxps	ymm0, ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x4c5ff4c5; WORD $0x2087 // vmaxps	ymm1, ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x545fecc5; WORD $0x4087 // vmaxps	ymm2, ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x5c5fe4c5; WORD $0x6087 // vmaxps	ymm3, ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x20c08348               // add	rax, 32
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB58_4
	LONG $0xc15ffcc5               // vmaxps	ymm0, ymm0, ymm1
	LONG $0xc25ffcc5               // vmaxps	ymm0, ymm0, ymm2
	LONG $0xc35ffcc5               // vmaxps	ymm0, ymm0, ymm3
	LONG $0x197de3c4; WORD $0x01c1 // vextractf128	xmm1, ymm0, 1
	LONG $0xc15ff8c5               // vmaxps	xmm0, xmm0, xmm1
	LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd	xmm1, xmm0, 1
	LONG $0xc15ff8c5               // vmaxps	xmm0, xmm0, xmm1
	LONG $0xc816fac5               // vmovshdup	xmm1, xmm0
	LONG $0xc15ffac5               // vmaxss	xmm0, xmm0, xmm1
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB58_7

LBB58_6:
	LONG $0x045ffac5; BYTE $0x8f // vmaxss	xmm0, xmm0, dword ptr [rdi + 4*rcx]
	WORD $0xff48; BYTE $0xc1     // inc	rcx
	WORD $0x3949; BYTE $0xc8     // cmp	r8, rcx
	JNE  LBB58_6

LBB58_7:
	LONG $0x0611fac5         // vmovss	dword ptr [rsi], xmm0
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float32_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB59_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB59_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB59_8

LBB59_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB59_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB59_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x1fe18341                           // and	r9d, 31
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB59_6:
	LONG $0x107ca1c4; WORD $0x9604             // vmovups	ymm0, ymmword ptr [rsi + 4*r10]
	LONG $0x107ca1c4; WORD $0x964c; BYTE $0x20 // vmovups	ymm1, ymmword ptr [rsi + 4*r10 + 32]
	LONG $0x107ca1c4; WORD $0x9654; BYTE $0x40 // vmovups	ymm2, ymmword ptr [rsi + 4*r10 + 64]
	LONG $0x107ca1c4; WORD $0x965c; BYTE $0x60 // vmovups	ymm3, ymmword ptr [rsi + 4*r10 + 96]
	LONG $0x587ca1c4; WORD $0x9704             // vaddps	ymm0, ymm0, ymmword ptr [rdi + 4*r10]
	LONG $0x5874a1c4; WORD $0x974c; BYTE $0x20 // vaddps	ymm1, ymm1, ymmword ptr [rdi + 4*r10 + 32]
	LONG $0x586ca1c4; WORD $0x9754; BYTE $0x40 // vaddps	ymm2, ymm2, ymmword ptr [rdi + 4*r10 + 64]
	LONG $0x5864a1c4; WORD $0x975c; BYTE $0x60 // vaddps	ymm3, ymm3, ymmword ptr [rdi + 4*r10 + 96]
	LONG $0x117ca1c4; WORD $0x9204             // vmovups	ymmword ptr [rdx + 4*r10], ymm0
	LONG $0x117ca1c4; WORD $0x924c; BYTE $0x20 // vmovups	ymmword ptr [rdx + 4*r10 + 32], ymm1
	LONG $0x117ca1c4; WORD $0x9254; BYTE $0x40 // vmovups	ymmword ptr [rdx + 4*r10 + 64], ymm2
	LONG $0x117ca1c4; WORD $0x925c; BYTE $0x60 // vmovups	ymmword ptr [rdx + 4*r10 + 96], ymm3
	LONG $0x20c28349                           // add	r10, 32
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB59_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB59_12

LBB59_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB59_10

LBB59_9:
	LONG $0x107aa1c4; WORD $0x9e04 // vmovss	xmm0, dword ptr [rsi + 4*r11]
	LONG $0x587aa1c4; WORD $0x9f04 // vaddss	xmm0, xmm0, dword ptr [rdi + 4*r11]
	LONG $0x117aa1c4; WORD $0x9a04 // vmovss	dword ptr [rdx + 4*r11], xmm0
	WORD $0xff49; BYTE $0xc3       // inc	r11
	WORD $0xff48; BYTE $0xc9       // dec	rcx
	JNE  LBB59_9

LBB59_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB59_12

LBB59_11:
	LONG $0x107aa1c4; WORD $0x9e04             // vmovss	xmm0, dword ptr [rsi + 4*r11]
	LONG $0x587aa1c4; WORD $0x9f04             // vaddss	xmm0, xmm0, dword ptr [rdi + 4*r11]
	LONG $0x117aa1c4; WORD $0x9a04             // vmovss	dword ptr [rdx + 4*r11], xmm0
	LONG $0x107aa1c4; WORD $0x9e44; BYTE $0x04 // vmovss	xmm0, dword ptr [rsi + 4*r11 + 4]
	LONG $0x587aa1c4; WORD $0x9f44; BYTE $0x04 // vaddss	xmm0, xmm0, dword ptr [rdi + 4*r11 + 4]
	LONG $0x117aa1c4; WORD $0x9a44; BYTE $0x04 // vmovss	dword ptr [rdx + 4*r11 + 4], xmm0
	LONG $0x107aa1c4; WORD $0x9e44; BYTE $0x08 // vmovss	xmm0, dword ptr [rsi + 4*r11 + 8]
	LONG $0x587aa1c4; WORD $0x9f44; BYTE $0x08 // vaddss	xmm0, xmm0, dword ptr [rdi + 4*r11 + 8]
	LONG $0x117aa1c4; WORD $0x9a44; BYTE $0x08 // vmovss	dword ptr [rdx + 4*r11 + 8], xmm0
	LONG $0x107aa1c4; WORD $0x9e44; BYTE $0x0c // vmovss	xmm0, dword ptr [rsi + 4*r11 + 12]
	LONG $0x587aa1c4; WORD $0x9f44; BYTE $0x0c // vaddss	xmm0, xmm0, dword ptr [rdi + 4*r11 + 12]
	LONG $0x117aa1c4; WORD $0x9a44; BYTE $0x0c // vmovss	dword ptr [rdx + 4*r11 + 12], xmm0
	LONG $0x04c38349                           // add	r11, 4
	WORD $0x394d; BYTE $0xd8                   // cmp	r8, r11
	JNE  LBB59_11

LBB59_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float32_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB60_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB60_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB60_8

LBB60_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB60_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB60_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x1fe18341                           // and	r9d, 31
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB60_6:
	LONG $0x107ca1c4; WORD $0x9704             // vmovups	ymm0, ymmword ptr [rdi + 4*r10]
	LONG $0x107ca1c4; WORD $0x974c; BYTE $0x20 // vmovups	ymm1, ymmword ptr [rdi + 4*r10 + 32]
	LONG $0x107ca1c4; WORD $0x9754; BYTE $0x40 // vmovups	ymm2, ymmword ptr [rdi + 4*r10 + 64]
	LONG $0x107ca1c4; WORD $0x975c; BYTE $0x60 // vmovups	ymm3, ymmword ptr [rdi + 4*r10 + 96]
	LONG $0x5c7ca1c4; WORD $0x9604             // vsubps	ymm0, ymm0, ymmword ptr [rsi + 4*r10]
	LONG $0x5c74a1c4; WORD $0x964c; BYTE $0x20 // vsubps	ymm1, ymm1, ymmword ptr [rsi + 4*r10 + 32]
	LONG $0x5c6ca1c4; WORD $0x9654; BYTE $0x40 // vsubps	ymm2, ymm2, ymmword ptr [rsi + 4*r10 + 64]
	LONG $0x5c64a1c4; WORD $0x965c; BYTE $0x60 // vsubps	ymm3, ymm3, ymmword ptr [rsi + 4*r10 + 96]
	LONG $0x117ca1c4; WORD $0x9204             // vmovups	ymmword ptr [rdx + 4*r10], ymm0
	LONG $0x117ca1c4; WORD $0x924c; BYTE $0x20 // vmovups	ymmword ptr [rdx + 4*r10 + 32], ymm1
	LONG $0x117ca1c4; WORD $0x9254; BYTE $0x40 // vmovups	ymmword ptr [rdx + 4*r10 + 64], ymm2
	LONG $0x117ca1c4; WORD $0x925c; BYTE $0x60 // vmovups	ymmword ptr [rdx + 4*r10 + 96], ymm3
	LONG $0x20c28349                           // add	r10, 32
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB60_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB60_12

LBB60_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB60_10

LBB60_9:
	LONG $0x107aa1c4; WORD $0x9f04 // vmovss	xmm0, dword ptr [rdi + 4*r11]
	LONG $0x5c7aa1c4; WORD $0x9e04 // vsubss	xmm0, xmm0, dword ptr [rsi + 4*r11]
	LONG $0x117aa1c4; WORD $0x9a04 // vmovss	dword ptr [rdx + 4*r11], xmm0
	WORD $0xff49; BYTE $0xc3       // inc	r11
	WORD $0xff48; BYTE $0xc9       // dec	rcx
	JNE  LBB60_9

LBB60_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB60_12

LBB60_11:
	LONG $0x107aa1c4; WORD $0x9f04             // vmovss	xmm0, dword ptr [rdi + 4*r11]
	LONG $0x5c7aa1c4; WORD $0x9e04             // vsubss	xmm0, xmm0, dword ptr [rsi + 4*r11]
	LONG $0x117aa1c4; WORD $0x9a04             // vmovss	dword ptr [rdx + 4*r11], xmm0
	LONG $0x107aa1c4; WORD $0x9f44; BYTE $0x04 // vmovss	xmm0, dword ptr [rdi + 4*r11 + 4]
	LONG $0x5c7aa1c4; WORD $0x9e44; BYTE $0x04 // vsubss	xmm0, xmm0, dword ptr [rsi + 4*r11 + 4]
	LONG $0x117aa1c4; WORD $0x9a44; BYTE $0x04 // vmovss	dword ptr [rdx + 4*r11 + 4], xmm0
	LONG $0x107aa1c4; WORD $0x9f44; BYTE $0x08 // vmovss	xmm0, dword ptr [rdi + 4*r11 + 8]
	LONG $0x5c7aa1c4; WORD $0x9e44; BYTE $0x08 // vsubss	xmm0, xmm0, dword ptr [rsi + 4*r11 + 8]
	LONG $0x117aa1c4; WORD $0x9a44; BYTE $0x08 // vmovss	dword ptr [rdx + 4*r11 + 8], xmm0
	LONG $0x107aa1c4; WORD $0x9f44; BYTE $0x0c // vmovss	xmm0, dword ptr [rdi + 4*r11 + 12]
	LONG $0x5c7aa1c4; WORD $0x9e44; BYTE $0x0c // vsubss	xmm0, xmm0, dword ptr [rsi + 4*r11 + 12]
	LONG $0x117aa1c4; WORD $0x9a44; BYTE $0x0c // vmovss	dword ptr [rdx + 4*r11 + 12], xmm0
	LONG $0x04c38349                           // add	r11, 4
	WORD $0x394d; BYTE $0xd8                   // cmp	r8, r11
	JNE  LBB60_11

LBB60_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float32_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB61_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB61_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB61_8

LBB61_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB61_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB61_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x1fe18341                           // and	r9d, 31
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB61_6:
	LONG $0x107ca1c4; WORD $0x9604             // vmovups	ymm0, ymmword ptr [rsi + 4*r10]
	LONG $0x107ca1c4; WORD $0x964c; BYTE $0x20 // vmovups	ymm1, ymmword ptr [rsi + 4*r10 + 32]
	LONG $0x107ca1c4; WORD $0x9654; BYTE $0x40 // vmovups	ymm2, ymmword ptr [rsi + 4*r10 + 64]
	LONG $0x107ca1c4; WORD $0x965c; BYTE $0x60 // vmovups	ymm3, ymmword ptr [rsi + 4*r10 + 96]
	LONG $0x597ca1c4; WORD $0x9704             // vmulps	ymm0, ymm0, ymmword ptr [rdi + 4*r10]
	LONG $0x5974a1c4; WORD $0x974c; BYTE $0x20 // vmulps	ymm1, ymm1, ymmword ptr [rdi + 4*r10 + 32]
	LONG $0x596ca1c4; WORD $0x9754; BYTE $0x40 // vmulps	ymm2, ymm2, ymmword ptr [rdi + 4*r10 + 64]
	LONG $0x5964a1c4; WORD $0x975c; BYTE $0x60 // vmulps	ymm3, ymm3, ymmword ptr [rdi + 4*r10 + 96]
	LONG $0x117ca1c4; WORD $0x9204             // vmovups	ymmword ptr [rdx + 4*r10], ymm0
	LONG $0x117ca1c4; WORD $0x924c; BYTE $0x20 // vmovups	ymmword ptr [rdx + 4*r10 + 32], ymm1
	LONG $0x117ca1c4; WORD $0x9254; BYTE $0x40 // vmovups	ymmword ptr [rdx + 4*r10 + 64], ymm2
	LONG $0x117ca1c4; WORD $0x925c; BYTE $0x60 // vmovups	ymmword ptr [rdx + 4*r10 + 96], ymm3
	LONG $0x20c28349                           // add	r10, 32
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB61_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB61_12

LBB61_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB61_10

LBB61_9:
	LONG $0x107aa1c4; WORD $0x9e04 // vmovss	xmm0, dword ptr [rsi + 4*r11]
	LONG $0x597aa1c4; WORD $0x9f04 // vmulss	xmm0, xmm0, dword ptr [rdi + 4*r11]
	LONG $0x117aa1c4; WORD $0x9a04 // vmovss	dword ptr [rdx + 4*r11], xmm0
	WORD $0xff49; BYTE $0xc3       // inc	r11
	WORD $0xff48; BYTE $0xc9       // dec	rcx
	JNE  LBB61_9

LBB61_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB61_12

LBB61_11:
	LONG $0x107aa1c4; WORD $0x9e04             // vmovss	xmm0, dword ptr [rsi + 4*r11]
	LONG $0x597aa1c4; WORD $0x9f04             // vmulss	xmm0, xmm0, dword ptr [rdi + 4*r11]
	LONG $0x117aa1c4; WORD $0x9a04             // vmovss	dword ptr [rdx + 4*r11], xmm0
	LONG $0x107aa1c4; WORD $0x9e44; BYTE $0x04 // vmovss	xmm0, dword ptr [rsi + 4*r11 + 4]
	LONG $0x597aa1c4; WORD $0x9f44; BYTE $0x04 // vmulss	xmm0, xmm0, dword ptr [rdi + 4*r11 + 4]
	LONG $0x117aa1c4; WORD $0x9a44; BYTE $0x04 // vmovss	dword ptr [rdx + 4*r11 + 4], xmm0
	LONG $0x107aa1c4; WORD $0x9e44; BYTE $0x08 // vmovss	xmm0, dword ptr [rsi + 4*r11 + 8]
	LONG $0x597aa1c4; WORD $0x9f44; BYTE $0x08 // vmulss	xmm0, xmm0, dword ptr [rdi + 4*r11 + 8]
	LONG $0x117aa1c4; WORD $0x9a44; BYTE $0x08 // vmovss	dword ptr [rdx + 4*r11 + 8], xmm0
	LONG $0x107aa1c4; WORD $0x9e44; BYTE $0x0c // vmovss	xmm0, dword ptr [rsi + 4*r11 + 12]
	LONG $0x597aa1c4; WORD $0x9f44; BYTE $0x0c // vmulss	xmm0, xmm0, dword ptr [rdi + 4*r11 + 12]
	LONG $0x117aa1c4; WORD $0x9a44; BYTE $0x0c // vmovss	dword ptr [rdx + 4*r11 + 12], xmm0
	LONG $0x04c38349                           // add	r11, 4
	WORD $0x394d; BYTE $0xd8                   // cmp	r8, r11
	JNE  LBB61_11

LBB61_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float32_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB62_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x20f88349         // cmp	r8, 32
	JAE  LBB62_3
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB62_8

LBB62_3:
	WORD $0x8948; BYTE $0xd0       // mov	rax, rdx
	WORD $0x2948; BYTE $0xf8       // sub	rax, rdi
	WORD $0x3145; BYTE $0xd2       // xor	r10d, r10d
	LONG $0x00803d48; WORD $0x0000 // cmp	rax, 128
	JB   LBB62_8
	WORD $0x8948; BYTE $0xd0       // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0       // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000 // cmp	rax, 128
	JB   LBB62_8
	WORD $0x8941; BYTE $0xc9       // mov	r9d, ecx
	LONG $0x1fe18341               // and	r9d, 31
	WORD $0x894d; BYTE $0xc2       // mov	r10, r8
	WORD $0x294d; BYTE $0xca       // sub	r10, r9
	WORD $0xc031                   // xor	eax, eax

LBB62_6:
	LONG $0x0410fcc5; BYTE $0x87   // vmovups	ymm0, ymmword ptr [rdi + 4*rax]
	LONG $0x4c10fcc5; WORD $0x2087 // vmovups	ymm1, ymmword ptr [rdi + 4*rax + 32]
	LONG $0x5410fcc5; WORD $0x4087 // vmovups	ymm2, ymmword ptr [rdi + 4*rax + 64]
	LONG $0x5c10fcc5; WORD $0x6087 // vmovups	ymm3, ymmword ptr [rdi + 4*rax + 96]
	LONG $0x2410fcc5; BYTE $0x86   // vmovups	ymm4, ymmword ptr [rsi + 4*rax]
	LONG $0x6c10fcc5; WORD $0x2086 // vmovups	ymm5, ymmword ptr [rsi + 4*rax + 32]
	LONG $0x7410fcc5; WORD $0x4086 // vmovups	ymm6, ymmword ptr [rsi + 4*rax + 64]
	LONG $0xfc53fcc5               // vrcpps	ymm7, ymm4
	LONG $0x44107cc5; WORD $0x6086 // vmovups	ymm8, ymmword ptr [rsi + 4*rax + 96]
	LONG $0xcf597cc5               // vmulps	ymm9, ymm0, ymm7
	LONG $0xaa35e2c4; BYTE $0xe0   // vfmsub213ps	ymm4, ymm9, ymm0
	LONG $0xac45c2c4; BYTE $0xe1   // vfnmadd213ps	ymm4, ymm7, ymm9
	LONG $0xc553fcc5               // vrcpps	ymm0, ymm5
	LONG $0xf859f4c5               // vmulps	ymm7, ymm1, ymm0
	LONG $0xaa45e2c4; BYTE $0xe9   // vfmsub213ps	ymm5, ymm7, ymm1
	LONG $0xce53fcc5               // vrcpps	ymm1, ymm6
	LONG $0xac7de2c4; BYTE $0xef   // vfnmadd213ps	ymm5, ymm0, ymm7
	LONG $0xc159ecc5               // vmulps	ymm0, ymm2, ymm1
	LONG $0xaa7de2c4; BYTE $0xf2   // vfmsub213ps	ymm6, ymm0, ymm2
	LONG $0xac75e2c4; BYTE $0xf0   // vfnmadd213ps	ymm6, ymm1, ymm0
	LONG $0x537cc1c4; BYTE $0xc0   // vrcpps	ymm0, ymm8
	LONG $0xc859e4c5               // vmulps	ymm1, ymm3, ymm0
	LONG $0xaa7562c4; BYTE $0xc3   // vfmsub213ps	ymm8, ymm1, ymm3
	LONG $0xac7d62c4; BYTE $0xc1   // vfnmadd213ps	ymm8, ymm0, ymm1
	LONG $0x2411fcc5; BYTE $0x82   // vmovups	ymmword ptr [rdx + 4*rax], ymm4
	LONG $0x6c11fcc5; WORD $0x2082 // vmovups	ymmword ptr [rdx + 4*rax + 32], ymm5
	LONG $0x7411fcc5; WORD $0x4082 // vmovups	ymmword ptr [rdx + 4*rax + 64], ymm6
	LONG $0x44117cc5; WORD $0x6082 // vmovups	ymmword ptr [rdx + 4*rax + 96], ymm8
	LONG $0x20c08348               // add	rax, 32
	WORD $0x3949; BYTE $0xc2       // cmp	r10, rax
	JNE  LBB62_6
	WORD $0x854d; BYTE $0xc9       // test	r9, r9
	JE   LBB62_12

LBB62_8:
	WORD $0x2944; BYTE $0xd1       // sub	ecx, r10d
	LONG $0x01428d49               // lea	rax, [r10 + 1]
	WORD $0xc1f6; BYTE $0x01       // test	cl, 1
	JE   LBB62_10
	LONG $0x107aa1c4; WORD $0x9704 // vmovss	xmm0, dword ptr [rdi + 4*r10]
	LONG $0x5e7aa1c4; WORD $0x9604 // vdivss	xmm0, xmm0, dword ptr [rsi + 4*r10]
	LONG $0x117aa1c4; WORD $0x9204 // vmovss	dword ptr [rdx + 4*r10], xmm0
	WORD $0x8949; BYTE $0xc2       // mov	r10, rax

LBB62_10:
	WORD $0x3949; BYTE $0xc0 // cmp	r8, rax
	JE   LBB62_12

LBB62_11:
	LONG $0x107aa1c4; WORD $0x9704             // vmovss	xmm0, dword ptr [rdi + 4*r10]
	LONG $0x5e7aa1c4; WORD $0x9604             // vdivss	xmm0, xmm0, dword ptr [rsi + 4*r10]
	LONG $0x117aa1c4; WORD $0x9204             // vmovss	dword ptr [rdx + 4*r10], xmm0
	LONG $0x107aa1c4; WORD $0x9744; BYTE $0x04 // vmovss	xmm0, dword ptr [rdi + 4*r10 + 4]
	LONG $0x5e7aa1c4; WORD $0x9644; BYTE $0x04 // vdivss	xmm0, xmm0, dword ptr [rsi + 4*r10 + 4]
	LONG $0x117aa1c4; WORD $0x9244; BYTE $0x04 // vmovss	dword ptr [rdx + 4*r10 + 4], xmm0
	LONG $0x02c28349                           // add	r10, 2
	WORD $0x394d; BYTE $0xd0                   // cmp	r8, r10
	JNE  LBB62_11

LBB62_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float64_sum(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xd285             // test	edx, edx
	JLE  LBB63_1
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB63_4
	LONG $0xc057f9c5         // vxorpd	xmm0, xmm0, xmm0
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB63_7

LBB63_1:
	LONG $0xc057f9c5 // vxorpd	xmm0, xmm0, xmm0
	JMP  LBB63_8

LBB63_4:
	WORD $0xe283; BYTE $0x0f // and	edx, 15
	WORD $0x894c; BYTE $0xc1 // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1 // sub	rcx, rdx
	LONG $0xc057f9c5         // vxorpd	xmm0, xmm0, xmm0
	WORD $0xc031             // xor	eax, eax
	LONG $0xc957f1c5         // vxorpd	xmm1, xmm1, xmm1
	LONG $0xd257e9c5         // vxorpd	xmm2, xmm2, xmm2
	LONG $0xdb57e1c5         // vxorpd	xmm3, xmm3, xmm3

LBB63_5:
	LONG $0x0458fdc5; BYTE $0xc7   // vaddpd	ymm0, ymm0, ymmword ptr [rdi + 8*rax]
	LONG $0x4c58f5c5; WORD $0x20c7 // vaddpd	ymm1, ymm1, ymmword ptr [rdi + 8*rax + 32]
	LONG $0x5458edc5; WORD $0x40c7 // vaddpd	ymm2, ymm2, ymmword ptr [rdi + 8*rax + 64]
	LONG $0x5c58e5c5; WORD $0x60c7 // vaddpd	ymm3, ymm3, ymmword ptr [rdi + 8*rax + 96]
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB63_5
	LONG $0xc058f5c5               // vaddpd	ymm0, ymm1, ymm0
	LONG $0xc058edc5               // vaddpd	ymm0, ymm2, ymm0
	LONG $0xc058e5c5               // vaddpd	ymm0, ymm3, ymm0
	LONG $0x197de3c4; WORD $0x01c1 // vextractf128	xmm1, ymm0, 1
	LONG $0xc158f9c5               // vaddpd	xmm0, xmm0, xmm1
	LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd	xmm1, xmm0, 1
	LONG $0xc158fbc5               // vaddsd	xmm0, xmm0, xmm1
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB63_8

LBB63_7:
	LONG $0x0458fbc5; BYTE $0xcf // vaddsd	xmm0, xmm0, qword ptr [rdi + 8*rcx]
	WORD $0xff48; BYTE $0xc1     // inc	rcx
	WORD $0x3949; BYTE $0xc8     // cmp	r8, rcx
	JNE  LBB63_7

LBB63_8:
	LONG $0x0611fbc5         // vmovsd	qword ptr [rsi], xmm0
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float64_min(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	LONG $0x0710fbc5         // vmovsd	xmm0, qword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB64_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB64_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB64_6

LBB64_3:
	WORD $0xe283; BYTE $0x0f     // and	edx, 15
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0x197de2c4; BYTE $0xc0 // vbroadcastsd	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc828fdc5             // vmovapd	ymm1, ymm0
	LONG $0xd028fdc5             // vmovapd	ymm2, ymm0
	LONG $0xd828fdc5             // vmovapd	ymm3, ymm0

LBB64_4:
	LONG $0x045dfdc5; BYTE $0xc7   // vminpd	ymm0, ymm0, ymmword ptr [rdi + 8*rax]
	LONG $0x4c5df5c5; WORD $0x20c7 // vminpd	ymm1, ymm1, ymmword ptr [rdi + 8*rax + 32]
	LONG $0x545dedc5; WORD $0x40c7 // vminpd	ymm2, ymm2, ymmword ptr [rdi + 8*rax + 64]
	LONG $0x5c5de5c5; WORD $0x60c7 // vminpd	ymm3, ymm3, ymmword ptr [rdi + 8*rax + 96]
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB64_4
	LONG $0xc15dfdc5               // vminpd	ymm0, ymm0, ymm1
	LONG $0xc25dfdc5               // vminpd	ymm0, ymm0, ymm2
	LONG $0xc35dfdc5               // vminpd	ymm0, ymm0, ymm3
	LONG $0x197de3c4; WORD $0x01c1 // vextractf128	xmm1, ymm0, 1
	LONG $0xc15df9c5               // vminpd	xmm0, xmm0, xmm1
	LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd	xmm1, xmm0, 1
	LONG $0xc15dfbc5               // vminsd	xmm0, xmm0, xmm1
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB64_7

LBB64_6:
	LONG $0x045dfbc5; BYTE $0xcf // vminsd	xmm0, xmm0, qword ptr [rdi + 8*rcx]
	WORD $0xff48; BYTE $0xc1     // inc	rcx
	WORD $0x3949; BYTE $0xc8     // cmp	r8, rcx
	JNE  LBB64_6

LBB64_7:
	LONG $0x0611fbc5         // vmovsd	qword ptr [rsi], xmm0
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float64_max(SB), $0-32
	MOVQ input+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ size+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	LONG $0x0710fbc5         // vmovsd	xmm0, qword ptr [rdi]
	WORD $0xd285             // test	edx, edx
	JLE  LBB65_7
	WORD $0x8941; BYTE $0xd0 // mov	r8d, edx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB65_3
	WORD $0xc931             // xor	ecx, ecx
	JMP  LBB65_6

LBB65_3:
	WORD $0xe283; BYTE $0x0f     // and	edx, 15
	WORD $0x894c; BYTE $0xc1     // mov	rcx, r8
	WORD $0x2948; BYTE $0xd1     // sub	rcx, rdx
	LONG $0x197de2c4; BYTE $0xc0 // vbroadcastsd	ymm0, xmm0
	WORD $0xc031                 // xor	eax, eax
	LONG $0xc828fdc5             // vmovapd	ymm1, ymm0
	LONG $0xd028fdc5             // vmovapd	ymm2, ymm0
	LONG $0xd828fdc5             // vmovapd	ymm3, ymm0

LBB65_4:
	LONG $0x045ffdc5; BYTE $0xc7   // vmaxpd	ymm0, ymm0, ymmword ptr [rdi + 8*rax]
	LONG $0x4c5ff5c5; WORD $0x20c7 // vmaxpd	ymm1, ymm1, ymmword ptr [rdi + 8*rax + 32]
	LONG $0x545fedc5; WORD $0x40c7 // vmaxpd	ymm2, ymm2, ymmword ptr [rdi + 8*rax + 64]
	LONG $0x5c5fe5c5; WORD $0x60c7 // vmaxpd	ymm3, ymm3, ymmword ptr [rdi + 8*rax + 96]
	LONG $0x10c08348               // add	rax, 16
	WORD $0x3948; BYTE $0xc1       // cmp	rcx, rax
	JNE  LBB65_4
	LONG $0xc15ffdc5               // vmaxpd	ymm0, ymm0, ymm1
	LONG $0xc25ffdc5               // vmaxpd	ymm0, ymm0, ymm2
	LONG $0xc35ffdc5               // vmaxpd	ymm0, ymm0, ymm3
	LONG $0x197de3c4; WORD $0x01c1 // vextractf128	xmm1, ymm0, 1
	LONG $0xc15ff9c5               // vmaxpd	xmm0, xmm0, xmm1
	LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd	xmm1, xmm0, 1
	LONG $0xc15ffbc5               // vmaxsd	xmm0, xmm0, xmm1
	WORD $0x8548; BYTE $0xd2       // test	rdx, rdx
	JE   LBB65_7

LBB65_6:
	LONG $0x045ffbc5; BYTE $0xcf // vmaxsd	xmm0, xmm0, qword ptr [rdi + 8*rcx]
	WORD $0xff48; BYTE $0xc1     // inc	rcx
	WORD $0x3949; BYTE $0xc8     // cmp	r8, rcx
	JNE  LBB65_6

LBB65_7:
	LONG $0x0611fbc5         // vmovsd	qword ptr [rsi], xmm0
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float64_add(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB66_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB66_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB66_8

LBB66_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB66_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB66_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x0fe18341                           // and	r9d, 15
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB66_6:
	LONG $0x107da1c4; WORD $0xd604             // vmovupd	ymm0, ymmword ptr [rsi + 8*r10]
	LONG $0x107da1c4; WORD $0xd64c; BYTE $0x20 // vmovupd	ymm1, ymmword ptr [rsi + 8*r10 + 32]
	LONG $0x107da1c4; WORD $0xd654; BYTE $0x40 // vmovupd	ymm2, ymmword ptr [rsi + 8*r10 + 64]
	LONG $0x107da1c4; WORD $0xd65c; BYTE $0x60 // vmovupd	ymm3, ymmword ptr [rsi + 8*r10 + 96]
	LONG $0x587da1c4; WORD $0xd704             // vaddpd	ymm0, ymm0, ymmword ptr [rdi + 8*r10]
	LONG $0x5875a1c4; WORD $0xd74c; BYTE $0x20 // vaddpd	ymm1, ymm1, ymmword ptr [rdi + 8*r10 + 32]
	LONG $0x586da1c4; WORD $0xd754; BYTE $0x40 // vaddpd	ymm2, ymm2, ymmword ptr [rdi + 8*r10 + 64]
	LONG $0x5865a1c4; WORD $0xd75c; BYTE $0x60 // vaddpd	ymm3, ymm3, ymmword ptr [rdi + 8*r10 + 96]
	LONG $0x117da1c4; WORD $0xd204             // vmovupd	ymmword ptr [rdx + 8*r10], ymm0
	LONG $0x117da1c4; WORD $0xd24c; BYTE $0x20 // vmovupd	ymmword ptr [rdx + 8*r10 + 32], ymm1
	LONG $0x117da1c4; WORD $0xd254; BYTE $0x40 // vmovupd	ymmword ptr [rdx + 8*r10 + 64], ymm2
	LONG $0x117da1c4; WORD $0xd25c; BYTE $0x60 // vmovupd	ymmword ptr [rdx + 8*r10 + 96], ymm3
	LONG $0x10c28349                           // add	r10, 16
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB66_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB66_12

LBB66_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB66_10

LBB66_9:
	LONG $0x107ba1c4; WORD $0xde04 // vmovsd	xmm0, qword ptr [rsi + 8*r11]
	LONG $0x587ba1c4; WORD $0xdf04 // vaddsd	xmm0, xmm0, qword ptr [rdi + 8*r11]
	LONG $0x117ba1c4; WORD $0xda04 // vmovsd	qword ptr [rdx + 8*r11], xmm0
	WORD $0xff49; BYTE $0xc3       // inc	r11
	WORD $0xff48; BYTE $0xc9       // dec	rcx
	JNE  LBB66_9

LBB66_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB66_12

LBB66_11:
	LONG $0x107ba1c4; WORD $0xde04             // vmovsd	xmm0, qword ptr [rsi + 8*r11]
	LONG $0x587ba1c4; WORD $0xdf04             // vaddsd	xmm0, xmm0, qword ptr [rdi + 8*r11]
	LONG $0x117ba1c4; WORD $0xda04             // vmovsd	qword ptr [rdx + 8*r11], xmm0
	LONG $0x107ba1c4; WORD $0xde44; BYTE $0x08 // vmovsd	xmm0, qword ptr [rsi + 8*r11 + 8]
	LONG $0x587ba1c4; WORD $0xdf44; BYTE $0x08 // vaddsd	xmm0, xmm0, qword ptr [rdi + 8*r11 + 8]
	LONG $0x117ba1c4; WORD $0xda44; BYTE $0x08 // vmovsd	qword ptr [rdx + 8*r11 + 8], xmm0
	LONG $0x107ba1c4; WORD $0xde44; BYTE $0x10 // vmovsd	xmm0, qword ptr [rsi + 8*r11 + 16]
	LONG $0x587ba1c4; WORD $0xdf44; BYTE $0x10 // vaddsd	xmm0, xmm0, qword ptr [rdi + 8*r11 + 16]
	LONG $0x117ba1c4; WORD $0xda44; BYTE $0x10 // vmovsd	qword ptr [rdx + 8*r11 + 16], xmm0
	LONG $0x107ba1c4; WORD $0xde44; BYTE $0x18 // vmovsd	xmm0, qword ptr [rsi + 8*r11 + 24]
	LONG $0x587ba1c4; WORD $0xdf44; BYTE $0x18 // vaddsd	xmm0, xmm0, qword ptr [rdi + 8*r11 + 24]
	LONG $0x117ba1c4; WORD $0xda44; BYTE $0x18 // vmovsd	qword ptr [rdx + 8*r11 + 24], xmm0
	LONG $0x04c38349                           // add	r11, 4
	WORD $0x394d; BYTE $0xd8                   // cmp	r8, r11
	JNE  LBB66_11

LBB66_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float64_sub(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB67_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB67_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB67_8

LBB67_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB67_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB67_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x0fe18341                           // and	r9d, 15
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB67_6:
	LONG $0x107da1c4; WORD $0xd704             // vmovupd	ymm0, ymmword ptr [rdi + 8*r10]
	LONG $0x107da1c4; WORD $0xd74c; BYTE $0x20 // vmovupd	ymm1, ymmword ptr [rdi + 8*r10 + 32]
	LONG $0x107da1c4; WORD $0xd754; BYTE $0x40 // vmovupd	ymm2, ymmword ptr [rdi + 8*r10 + 64]
	LONG $0x107da1c4; WORD $0xd75c; BYTE $0x60 // vmovupd	ymm3, ymmword ptr [rdi + 8*r10 + 96]
	LONG $0x5c7da1c4; WORD $0xd604             // vsubpd	ymm0, ymm0, ymmword ptr [rsi + 8*r10]
	LONG $0x5c75a1c4; WORD $0xd64c; BYTE $0x20 // vsubpd	ymm1, ymm1, ymmword ptr [rsi + 8*r10 + 32]
	LONG $0x5c6da1c4; WORD $0xd654; BYTE $0x40 // vsubpd	ymm2, ymm2, ymmword ptr [rsi + 8*r10 + 64]
	LONG $0x5c65a1c4; WORD $0xd65c; BYTE $0x60 // vsubpd	ymm3, ymm3, ymmword ptr [rsi + 8*r10 + 96]
	LONG $0x117da1c4; WORD $0xd204             // vmovupd	ymmword ptr [rdx + 8*r10], ymm0
	LONG $0x117da1c4; WORD $0xd24c; BYTE $0x20 // vmovupd	ymmword ptr [rdx + 8*r10 + 32], ymm1
	LONG $0x117da1c4; WORD $0xd254; BYTE $0x40 // vmovupd	ymmword ptr [rdx + 8*r10 + 64], ymm2
	LONG $0x117da1c4; WORD $0xd25c; BYTE $0x60 // vmovupd	ymmword ptr [rdx + 8*r10 + 96], ymm3
	LONG $0x10c28349                           // add	r10, 16
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB67_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB67_12

LBB67_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB67_10

LBB67_9:
	LONG $0x107ba1c4; WORD $0xdf04 // vmovsd	xmm0, qword ptr [rdi + 8*r11]
	LONG $0x5c7ba1c4; WORD $0xde04 // vsubsd	xmm0, xmm0, qword ptr [rsi + 8*r11]
	LONG $0x117ba1c4; WORD $0xda04 // vmovsd	qword ptr [rdx + 8*r11], xmm0
	WORD $0xff49; BYTE $0xc3       // inc	r11
	WORD $0xff48; BYTE $0xc9       // dec	rcx
	JNE  LBB67_9

LBB67_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB67_12

LBB67_11:
	LONG $0x107ba1c4; WORD $0xdf04             // vmovsd	xmm0, qword ptr [rdi + 8*r11]
	LONG $0x5c7ba1c4; WORD $0xde04             // vsubsd	xmm0, xmm0, qword ptr [rsi + 8*r11]
	LONG $0x117ba1c4; WORD $0xda04             // vmovsd	qword ptr [rdx + 8*r11], xmm0
	LONG $0x107ba1c4; WORD $0xdf44; BYTE $0x08 // vmovsd	xmm0, qword ptr [rdi + 8*r11 + 8]
	LONG $0x5c7ba1c4; WORD $0xde44; BYTE $0x08 // vsubsd	xmm0, xmm0, qword ptr [rsi + 8*r11 + 8]
	LONG $0x117ba1c4; WORD $0xda44; BYTE $0x08 // vmovsd	qword ptr [rdx + 8*r11 + 8], xmm0
	LONG $0x107ba1c4; WORD $0xdf44; BYTE $0x10 // vmovsd	xmm0, qword ptr [rdi + 8*r11 + 16]
	LONG $0x5c7ba1c4; WORD $0xde44; BYTE $0x10 // vsubsd	xmm0, xmm0, qword ptr [rsi + 8*r11 + 16]
	LONG $0x117ba1c4; WORD $0xda44; BYTE $0x10 // vmovsd	qword ptr [rdx + 8*r11 + 16], xmm0
	LONG $0x107ba1c4; WORD $0xdf44; BYTE $0x18 // vmovsd	xmm0, qword ptr [rdi + 8*r11 + 24]
	LONG $0x5c7ba1c4; WORD $0xde44; BYTE $0x18 // vsubsd	xmm0, xmm0, qword ptr [rsi + 8*r11 + 24]
	LONG $0x117ba1c4; WORD $0xda44; BYTE $0x18 // vmovsd	qword ptr [rdx + 8*r11 + 24], xmm0
	LONG $0x04c38349                           // add	r11, 4
	WORD $0x394d; BYTE $0xd8                   // cmp	r8, r11
	JNE  LBB67_11

LBB67_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float64_mul(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB68_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x10f88349         // cmp	r8, 16
	JAE  LBB68_3
	WORD $0x3145; BYTE $0xdb // xor	r11d, r11d
	JMP  LBB68_8

LBB68_3:
	WORD $0x8949; BYTE $0xd1                   // mov	r9, rdx
	WORD $0x2949; BYTE $0xf9                   // sub	r9, rdi
	WORD $0x3145; BYTE $0xdb                   // xor	r11d, r11d
	LONG $0x80f98149; WORD $0x0000; BYTE $0x00 // cmp	r9, 128
	JB   LBB68_8
	WORD $0x8948; BYTE $0xd0                   // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0                   // sub	rax, rsi
	LONG $0x00803d48; WORD $0x0000             // cmp	rax, 128
	JB   LBB68_8
	WORD $0x8941; BYTE $0xc9                   // mov	r9d, ecx
	LONG $0x0fe18341                           // and	r9d, 15
	WORD $0x894d; BYTE $0xc3                   // mov	r11, r8
	WORD $0x294d; BYTE $0xcb                   // sub	r11, r9
	WORD $0x3145; BYTE $0xd2                   // xor	r10d, r10d

LBB68_6:
	LONG $0x107da1c4; WORD $0xd604             // vmovupd	ymm0, ymmword ptr [rsi + 8*r10]
	LONG $0x107da1c4; WORD $0xd64c; BYTE $0x20 // vmovupd	ymm1, ymmword ptr [rsi + 8*r10 + 32]
	LONG $0x107da1c4; WORD $0xd654; BYTE $0x40 // vmovupd	ymm2, ymmword ptr [rsi + 8*r10 + 64]
	LONG $0x107da1c4; WORD $0xd65c; BYTE $0x60 // vmovupd	ymm3, ymmword ptr [rsi + 8*r10 + 96]
	LONG $0x597da1c4; WORD $0xd704             // vmulpd	ymm0, ymm0, ymmword ptr [rdi + 8*r10]
	LONG $0x5975a1c4; WORD $0xd74c; BYTE $0x20 // vmulpd	ymm1, ymm1, ymmword ptr [rdi + 8*r10 + 32]
	LONG $0x596da1c4; WORD $0xd754; BYTE $0x40 // vmulpd	ymm2, ymm2, ymmword ptr [rdi + 8*r10 + 64]
	LONG $0x5965a1c4; WORD $0xd75c; BYTE $0x60 // vmulpd	ymm3, ymm3, ymmword ptr [rdi + 8*r10 + 96]
	LONG $0x117da1c4; WORD $0xd204             // vmovupd	ymmword ptr [rdx + 8*r10], ymm0
	LONG $0x117da1c4; WORD $0xd24c; BYTE $0x20 // vmovupd	ymmword ptr [rdx + 8*r10 + 32], ymm1
	LONG $0x117da1c4; WORD $0xd254; BYTE $0x40 // vmovupd	ymmword ptr [rdx + 8*r10 + 64], ymm2
	LONG $0x117da1c4; WORD $0xd25c; BYTE $0x60 // vmovupd	ymmword ptr [rdx + 8*r10 + 96], ymm3
	LONG $0x10c28349                           // add	r10, 16
	WORD $0x394d; BYTE $0xd3                   // cmp	r11, r10
	JNE  LBB68_6
	WORD $0x854d; BYTE $0xc9                   // test	r9, r9
	JE   LBB68_12

LBB68_8:
	WORD $0x2944; BYTE $0xd9 // sub	ecx, r11d
	WORD $0x894d; BYTE $0xd9 // mov	r9, r11
	WORD $0xf749; BYTE $0xd1 // not	r9
	WORD $0x014d; BYTE $0xc1 // add	r9, r8
	LONG $0x03e18348         // and	rcx, 3
	JE   LBB68_10

LBB68_9:
	LONG $0x107ba1c4; WORD $0xde04 // vmovsd	xmm0, qword ptr [rsi + 8*r11]
	LONG $0x597ba1c4; WORD $0xdf04 // vmulsd	xmm0, xmm0, qword ptr [rdi + 8*r11]
	LONG $0x117ba1c4; WORD $0xda04 // vmovsd	qword ptr [rdx + 8*r11], xmm0
	WORD $0xff49; BYTE $0xc3       // inc	r11
	WORD $0xff48; BYTE $0xc9       // dec	rcx
	JNE  LBB68_9

LBB68_10:
	LONG $0x03f98349 // cmp	r9, 3
	JB   LBB68_12

LBB68_11:
	LONG $0x107ba1c4; WORD $0xde04             // vmovsd	xmm0, qword ptr [rsi + 8*r11]
	LONG $0x597ba1c4; WORD $0xdf04             // vmulsd	xmm0, xmm0, qword ptr [rdi + 8*r11]
	LONG $0x117ba1c4; WORD $0xda04             // vmovsd	qword ptr [rdx + 8*r11], xmm0
	LONG $0x107ba1c4; WORD $0xde44; BYTE $0x08 // vmovsd	xmm0, qword ptr [rsi + 8*r11 + 8]
	LONG $0x597ba1c4; WORD $0xdf44; BYTE $0x08 // vmulsd	xmm0, xmm0, qword ptr [rdi + 8*r11 + 8]
	LONG $0x117ba1c4; WORD $0xda44; BYTE $0x08 // vmovsd	qword ptr [rdx + 8*r11 + 8], xmm0
	LONG $0x107ba1c4; WORD $0xde44; BYTE $0x10 // vmovsd	xmm0, qword ptr [rsi + 8*r11 + 16]
	LONG $0x597ba1c4; WORD $0xdf44; BYTE $0x10 // vmulsd	xmm0, xmm0, qword ptr [rdi + 8*r11 + 16]
	LONG $0x117ba1c4; WORD $0xda44; BYTE $0x10 // vmovsd	qword ptr [rdx + 8*r11 + 16], xmm0
	LONG $0x107ba1c4; WORD $0xde44; BYTE $0x18 // vmovsd	xmm0, qword ptr [rsi + 8*r11 + 24]
	LONG $0x597ba1c4; WORD $0xdf44; BYTE $0x18 // vmulsd	xmm0, xmm0, qword ptr [rdi + 8*r11 + 24]
	LONG $0x117ba1c4; WORD $0xda44; BYTE $0x18 // vmovsd	qword ptr [rdx + 8*r11 + 24], xmm0
	LONG $0x04c38349                           // add	r11, 4
	WORD $0x394d; BYTE $0xd8                   // cmp	r8, r11
	JNE  LBB68_11

LBB68_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_float64_div(SB), $0-32
	MOVQ input1+0(FP), DI
	MOVQ input2+8(FP), SI
	MOVQ output+16(FP), DX
	MOVQ size+24(FP), CX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0xc985             // test	ecx, ecx
	JLE  LBB69_12
	WORD $0x8941; BYTE $0xc8 // mov	r8d, ecx
	LONG $0x04f88349         // cmp	r8, 4
	JAE  LBB69_3
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	JMP  LBB69_8

LBB69_3:
	WORD $0x8948; BYTE $0xd0 // mov	rax, rdx
	WORD $0x2948; BYTE $0xf8 // sub	rax, rdi
	WORD $0x3145; BYTE $0xd2 // xor	r10d, r10d
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB69_8
	WORD $0x8948; BYTE $0xd0 // mov	rax, rdx
	WORD $0x2948; BYTE $0xf0 // sub	rax, rsi
	LONG $0x20f88348         // cmp	rax, 32
	JB   LBB69_8
	WORD $0x8941; BYTE $0xc9 // mov	r9d, ecx
	LONG $0x03e18341         // and	r9d, 3
	WORD $0x894d; BYTE $0xc2 // mov	r10, r8
	WORD $0x294d; BYTE $0xca // sub	r10, r9
	WORD $0xc031             // xor	eax, eax

LBB69_6:
	LONG $0x0410fdc5; BYTE $0xc7 // vmovupd	ymm0, ymmword ptr [rdi + 8*rax]
	LONG $0x045efdc5; BYTE $0xc6 // vdivpd	ymm0, ymm0, ymmword ptr [rsi + 8*rax]
	LONG $0x0411fdc5; BYTE $0xc2 // vmovupd	ymmword ptr [rdx + 8*rax], ymm0
	LONG $0x04c08348             // add	rax, 4
	WORD $0x3949; BYTE $0xc2     // cmp	r10, rax
	JNE  LBB69_6
	WORD $0x854d; BYTE $0xc9     // test	r9, r9
	JE   LBB69_12

LBB69_8:
	WORD $0x2944; BYTE $0xd1       // sub	ecx, r10d
	LONG $0x014a8d4d               // lea	r9, [r10 + 1]
	WORD $0xc1f6; BYTE $0x01       // test	cl, 1
	JE   LBB69_10
	LONG $0x107ba1c4; WORD $0xd704 // vmovsd	xmm0, qword ptr [rdi + 8*r10]
	LONG $0x5e7ba1c4; WORD $0xd604 // vdivsd	xmm0, xmm0, qword ptr [rsi + 8*r10]
	LONG $0x117ba1c4; WORD $0xd204 // vmovsd	qword ptr [rdx + 8*r10], xmm0
	WORD $0x894d; BYTE $0xca       // mov	r10, r9

LBB69_10:
	WORD $0x394d; BYTE $0xc8 // cmp	r8, r9
	JE   LBB69_12

LBB69_11:
	LONG $0x107ba1c4; WORD $0xd704             // vmovsd	xmm0, qword ptr [rdi + 8*r10]
	LONG $0x5e7ba1c4; WORD $0xd604             // vdivsd	xmm0, xmm0, qword ptr [rsi + 8*r10]
	LONG $0x117ba1c4; WORD $0xd204             // vmovsd	qword ptr [rdx + 8*r10], xmm0
	LONG $0x107ba1c4; WORD $0xd744; BYTE $0x08 // vmovsd	xmm0, qword ptr [rdi + 8*r10 + 8]
	LONG $0x5e7ba1c4; WORD $0xd644; BYTE $0x08 // vdivsd	xmm0, xmm0, qword ptr [rsi + 8*r10 + 8]
	LONG $0x117ba1c4; WORD $0xd244; BYTE $0x08 // vmovsd	qword ptr [rdx + 8*r10 + 8], xmm0
	LONG $0x02c28349                           // add	r10, 2
	WORD $0x394d; BYTE $0xd0                   // cmp	r8, r10
	JNE  LBB69_11

LBB69_12:
	WORD $0x8948; BYTE $0xec // mov	rsp, rbp
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret
