//go:build !noasm && amd64
// Code generated by GoAT. DO NOT EDIT.

TEXT ·dot_byte_256(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ res+16(FP), DX
	MOVQ len+24(FP), CX
	BYTE $0x55               // pushq	%rbp
	WORD $0x8948; BYTE $0xe5 // movq	%rsp, %rbp
	WORD $0x5741             // pushq	%r15
	WORD $0x5641             // pushq	%r14
	BYTE $0x53               // pushq	%rbx
	LONG $0xf8e48348         // andq	$-8, %rsp
	WORD $0x8b4c; BYTE $0x19 // movq	(%rcx), %r11
	WORD $0x8945; BYTE $0xd9 // movl	%r11d, %r9d
	LONG $0x20fb8341         // cmpl	$32, %r11d
	JGE  LBB0_1
	WORD $0x8545; BYTE $0xdb // testl	%r11d, %r11d
	JLE  LBB0_7
	LONG $0x20f98341         // cmpl	$32, %r9d
	JAE  LBB0_10
	WORD $0xc931             // xorl	%ecx, %ecx
	WORD $0x3145; BYTE $0xff // xorl	%r15d, %r15d
	JMP  LBB0_13

LBB0_1:
	WORD $0x6349; BYTE $0xc1     // movslq	%r9d, %rax
	LONG $0xc0eff9c5             // vpxor	%xmm0, %xmm0, %xmm0
	LONG $0x00001fb9; BYTE $0x00 // movl	$31, %ecx

LBB0_2:
	LONG $0x4c6ffec5; WORD $0xe10f // vmovdqu	-31(%rdi,%rcx), %ymm1
	LONG $0xd171edc5; BYTE $0x08   // vpsrlw	$8, %ymm1, %ymm2
	LONG $0xf171f5c5; BYTE $0x08   // vpsllw	$8, %ymm1, %ymm1
	LONG $0xd171f5c5; BYTE $0x08   // vpsrlw	$8, %ymm1, %ymm1
	LONG $0x5c6ffec5; WORD $0xe10e // vmovdqu	-31(%rsi,%rcx), %ymm3
	LONG $0xd371ddc5; BYTE $0x08   // vpsrlw	$8, %ymm3, %ymm4
	LONG $0xd4f5edc5               // vpmaddwd	%ymm4, %ymm2, %ymm2
	LONG $0xc0feedc5               // vpaddd	%ymm0, %ymm2, %ymm0
	LONG $0xf371edc5; BYTE $0x08   // vpsllw	$8, %ymm3, %ymm2
	LONG $0xd271edc5; BYTE $0x08   // vpsrlw	$8, %ymm2, %ymm2
	LONG $0xcaf5f5c5               // vpmaddwd	%ymm2, %ymm1, %ymm1
	LONG $0xc1fefdc5               // vpaddd	%ymm1, %ymm0, %ymm0
	LONG $0x20c18348               // addq	$32, %rcx
	WORD $0x3948; BYTE $0xc1       // cmpq	%rax, %rcx
	JL   LBB0_2
	WORD $0x8945; BYTE $0xc8       // movl	%r9d, %r8d
	LONG $0xe0e08341               // andl	$-32, %r8d
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	$1, %ymm0, %xmm1
	LONG $0xc0fef1c5               // vpaddd	%xmm0, %xmm1, %xmm0
	LONG $0xc870f9c5; BYTE $0x1b   // vpshufd	$27, %xmm0, %xmm1               # xmm1 = xmm0[3,2,1,0]
	LONG $0xc0fef1c5               // vpaddd	%xmm0, %xmm1, %xmm0
	LONG $0xc870f9c5; BYTE $0x55   // vpshufd	$85, %xmm0, %xmm1               # xmm1 = xmm0[1,1,1,1]
	LONG $0xc0fef1c5               // vpaddd	%xmm0, %xmm1, %xmm0
	LONG $0x7e79c1c4; BYTE $0xc7   // vmovd	%xmm0, %r15d
	WORD $0x3945; BYTE $0xd8       // cmpl	%r11d, %r8d
	JGE  LBB0_25
	WORD $0x8945; BYTE $0xce       // movl	%r9d, %r14d
	LONG $0xe0e68341               // andl	$-32, %r14d
	LONG $0x01468d41               // leal	1(%r14), %eax
	WORD $0x3944; BYTE $0xd8       // cmpl	%r11d, %eax
	LONG $0xc34e0f41               // cmovlel	%r11d, %eax
	WORD $0xf741; BYTE $0xd6       // notl	%r14d
	WORD $0x0141; BYTE $0xc6       // addl	%eax, %r14d
	LONG $0x07fe8341               // cmpl	$7, %r14d
	JAE  LBB0_14
	WORD $0x894c; BYTE $0xc3       // movq	%r8, %rbx
	JMP  LBB0_24

LBB0_7:
	WORD $0x3145; BYTE $0xff // xorl	%r15d, %r15d
	JMP  LBB0_25

LBB0_10:
	WORD $0x8944; BYTE $0xcb // movl	%r9d, %ebx
	WORD $0xe383; BYTE $0x1f // andl	$31, %ebx
	WORD $0x8944; BYTE $0xc9 // movl	%r9d, %ecx
	WORD $0xe183; BYTE $0xe0 // andl	$-32, %ecx
	LONG $0xc0eff9c5         // vpxor	%xmm0, %xmm0, %xmm0
	WORD $0xc031             // xorl	%eax, %eax
	LONG $0xc9eff1c5         // vpxor	%xmm1, %xmm1, %xmm1
	LONG $0xd2efe9c5         // vpxor	%xmm2, %xmm2, %xmm2
	LONG $0xdbefe1c5         // vpxor	%xmm3, %xmm3, %xmm3

LBB0_11:
	LONG $0x487df262; WORD $0x2432; BYTE $0x07 // vpmovzxbq	(%rdi,%rax), %zmm4      # zmm4 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
	QUAD $0x01076c32487df262                   // vpmovzxbq	8(%rdi,%rax), %zmm5     # zmm5 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
	QUAD $0x02077432487df262                   // vpmovzxbq	16(%rdi,%rax), %zmm6    # zmm6 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
	QUAD $0x03077c32487df262                   // vpmovzxbq	24(%rdi,%rax), %zmm7    # zmm7 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
	LONG $0x487d7262; WORD $0x0432; BYTE $0x06 // vpmovzxbq	(%rsi,%rax), %zmm8      # zmm8 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
	LONG $0x48bdf262; WORD $0xe428             // vpmuldq	%zmm4, %zmm8, %zmm4
	LONG $0x48ddf162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm4, %zmm0
	QUAD $0x01066432487df262                   // vpmovzxbq	8(%rsi,%rax), %zmm4     # zmm4 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
	LONG $0x48ddf262; WORD $0xe528             // vpmuldq	%zmm5, %zmm4, %zmm4
	LONG $0x48ddf162; WORD $0xc9d4             // vpaddq	%zmm1, %zmm4, %zmm1
	QUAD $0x02066432487df262                   // vpmovzxbq	16(%rsi,%rax), %zmm4    # zmm4 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
	LONG $0x48ddf262; WORD $0xe628             // vpmuldq	%zmm6, %zmm4, %zmm4
	LONG $0x48ddf162; WORD $0xd2d4             // vpaddq	%zmm2, %zmm4, %zmm2
	QUAD $0x03066432487df262                   // vpmovzxbq	24(%rsi,%rax), %zmm4    # zmm4 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
	LONG $0x48ddf262; WORD $0xe728             // vpmuldq	%zmm7, %zmm4, %zmm4
	LONG $0x48ddf162; WORD $0xdbd4             // vpaddq	%zmm3, %zmm4, %zmm3
	LONG $0x20c08348                           // addq	$32, %rax
	WORD $0x3948; BYTE $0xc1                   // cmpq	%rax, %rcx
	JNE  LBB0_11
	LONG $0x48f5f162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm1, %zmm0
	LONG $0x48edf162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm2, %zmm0
	LONG $0x48e5f162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm3, %zmm0
	LONG $0x48fdf362; WORD $0xc13b; BYTE $0x01 // vextracti64x4	$1, %zmm0, %ymm1
	LONG $0x48fdf162; WORD $0xc1d4             // vpaddq	%zmm1, %zmm0, %zmm0
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	$1, %ymm0, %xmm1
	LONG $0xc1d4f9c5                           // vpaddq	%xmm1, %xmm0, %xmm0
	LONG $0xc870f9c5; BYTE $0xee               // vpshufd	$238, %xmm0, %xmm1              # xmm1 = xmm0[2,3,2,3]
	LONG $0xc1d4f9c5                           // vpaddq	%xmm1, %xmm0, %xmm0
	LONG $0x7ef9c1c4; BYTE $0xc7               // vmovq	%xmm0, %r15
	WORD $0x8548; BYTE $0xdb                   // testq	%rbx, %rbx
	JE   LBB0_25

LBB0_13:
	LONG $0x0f1cb60f         // movzbl	(%rdi,%rcx), %ebx
	LONG $0x0e04b60f         // movzbl	(%rsi,%rcx), %eax
	LONG $0xc3af0f48         // imulq	%rbx, %rax
	WORD $0x0149; BYTE $0xc7 // addq	%rax, %r15
	LONG $0x01c18348         // addq	$1, %rcx
	WORD $0x3949; BYTE $0xc9 // cmpq	%rcx, %r9
	JNE  LBB0_13
	JMP  LBB0_25

LBB0_14:
	QUAD $0x0001ffffffc0ba49; WORD $0x0000 // movabsq	$8589934528, %r10               # imm = 0x1FFFFFFC0
	LONG $0x3ffe8341                       // cmpl	$63, %r14d
	JAE  LBB0_19
	WORD $0xc931                           // xorl	%ecx, %ecx
	JMP  LBB0_16

LBB0_19:
	LONG $0x01c68349             // addq	$1, %r14
	WORD $0x894c; BYTE $0xf1     // movq	%r14, %rcx
	WORD $0x214c; BYTE $0xd1     // andq	%r10, %rcx
	LONG $0x6e79c1c4; BYTE $0xc7 // vmovd	%r15d, %xmm0
	LONG $0x073c8d4e             // leaq	(%rdi,%r8), %r15
	LONG $0x30c78349             // addq	$48, %r15
	LONG $0x061c8d4a             // leaq	(%rsi,%r8), %rbx
	LONG $0x30c38348             // addq	$48, %rbx
	LONG $0xc9eff1c5             // vpxor	%xmm1, %xmm1, %xmm1
	WORD $0xc031                 // xorl	%eax, %eax
	LONG $0xd2efe9c5             // vpxor	%xmm2, %xmm2, %xmm2
	LONG $0xdbefe1c5             // vpxor	%xmm3, %xmm3, %xmm3

LBB0_20:
	QUAD $0xfd076431487dd262                   // vpmovzxbd	-48(%r15,%rax), %zmm4   # zmm4 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
	QUAD $0xfe076c31487dd262                   // vpmovzxbd	-32(%r15,%rax), %zmm5   # zmm5 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
	QUAD $0xff077431487dd262                   // vpmovzxbd	-16(%r15,%rax), %zmm6   # zmm6 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
	LONG $0x487dd262; WORD $0x3c31; BYTE $0x07 // vpmovzxbd	(%r15,%rax), %zmm7      # zmm7 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
	QUAD $0xfd034431487d7262                   // vpmovzxbd	-48(%rbx,%rax), %zmm8   # zmm8 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
	LONG $0x483df262; WORD $0xe440             // vpmulld	%zmm4, %zmm8, %zmm4
	LONG $0x485df162; WORD $0xc0fe             // vpaddd	%zmm0, %zmm4, %zmm0
	QUAD $0xfe036431487df262                   // vpmovzxbd	-32(%rbx,%rax), %zmm4   # zmm4 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
	LONG $0x485df262; WORD $0xe540             // vpmulld	%zmm5, %zmm4, %zmm4
	LONG $0x485df162; WORD $0xc9fe             // vpaddd	%zmm1, %zmm4, %zmm1
	QUAD $0xff036431487df262                   // vpmovzxbd	-16(%rbx,%rax), %zmm4   # zmm4 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
	LONG $0x485df262; WORD $0xe640             // vpmulld	%zmm6, %zmm4, %zmm4
	LONG $0x485df162; WORD $0xd2fe             // vpaddd	%zmm2, %zmm4, %zmm2
	LONG $0x487df262; WORD $0x2431; BYTE $0x03 // vpmovzxbd	(%rbx,%rax), %zmm4      # zmm4 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
	LONG $0x485df262; WORD $0xe740             // vpmulld	%zmm7, %zmm4, %zmm4
	LONG $0x485df162; WORD $0xdbfe             // vpaddd	%zmm3, %zmm4, %zmm3
	LONG $0x40c08348                           // addq	$64, %rax
	WORD $0x3948; BYTE $0xc1                   // cmpq	%rax, %rcx
	JNE  LBB0_20
	LONG $0x4875f162; WORD $0xc0fe             // vpaddd	%zmm0, %zmm1, %zmm0
	LONG $0x486df162; WORD $0xc0fe             // vpaddd	%zmm0, %zmm2, %zmm0
	LONG $0x4865f162; WORD $0xc0fe             // vpaddd	%zmm0, %zmm3, %zmm0
	LONG $0x48fdf362; WORD $0xc13b; BYTE $0x01 // vextracti64x4	$1, %zmm0, %ymm1
	LONG $0x487df162; WORD $0xc1fe             // vpaddd	%zmm1, %zmm0, %zmm0
	LONG $0x397de3c4; WORD $0x01c1             // vextracti128	$1, %ymm0, %xmm1
	LONG $0xc1fef9c5                           // vpaddd	%xmm1, %xmm0, %xmm0
	LONG $0xc870f9c5; BYTE $0xee               // vpshufd	$238, %xmm0, %xmm1              # xmm1 = xmm0[2,3,2,3]
	LONG $0xc1fef9c5                           // vpaddd	%xmm1, %xmm0, %xmm0
	LONG $0xc870f9c5; BYTE $0x55               // vpshufd	$85, %xmm0, %xmm1               # xmm1 = xmm0[1,1,1,1]
	LONG $0xc1fef9c5                           // vpaddd	%xmm1, %xmm0, %xmm0
	LONG $0x7e79c1c4; BYTE $0xc7               // vmovd	%xmm0, %r15d
	WORD $0x3949; BYTE $0xce                   // cmpq	%rcx, %r14
	JE   LBB0_25
	LONG $0x38c6f641                           // testb	$56, %r14b
	JE   LBB0_23

LBB0_16:
	LONG $0xe0e18341             // andl	$-32, %r9d
	LONG $0x01418d41             // leal	1(%r9), %eax
	WORD $0x3944; BYTE $0xd8     // cmpl	%r11d, %eax
	LONG $0xc34e0f41             // cmovlel	%r11d, %eax
	WORD $0xf741; BYTE $0xd1     // notl	%r9d
	WORD $0x0141; BYTE $0xc1     // addl	%eax, %r9d
	LONG $0x01c18349             // addq	$1, %r9
	LONG $0x38c28349             // addq	$56, %r10
	WORD $0x214d; BYTE $0xca     // andq	%r9, %r10
	LONG $0x021c8d4b             // leaq	(%r10,%r8), %rbx
	LONG $0x6e79c1c4; BYTE $0xc7 // vmovd	%r15d, %xmm0
	LONG $0x07048d4a             // leaq	(%rdi,%r8), %rax
	WORD $0x0149; BYTE $0xf0     // addq	%rsi, %r8

LBB0_17:
	LONG $0x3079e2c4; WORD $0x080c // vpmovzxbw	(%rax,%rcx), %xmm1      # xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
	LONG $0x3079c2c4; WORD $0x0814 // vpmovzxbw	(%r8,%rcx), %xmm2       # xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
	LONG $0xc9f5e9c5               // vpmaddwd	%xmm1, %xmm2, %xmm1
	LONG $0xc0fef5c5               // vpaddd	%ymm0, %ymm1, %ymm0
	LONG $0x08c18348               // addq	$8, %rcx
	WORD $0x3949; BYTE $0xca       // cmpq	%rcx, %r10
	JNE  LBB0_17
	LONG $0x397de3c4; WORD $0x01c1 // vextracti128	$1, %ymm0, %xmm1
	LONG $0xc1fef9c5               // vpaddd	%xmm1, %xmm0, %xmm0
	LONG $0xc870f9c5; BYTE $0xee   // vpshufd	$238, %xmm0, %xmm1              # xmm1 = xmm0[2,3,2,3]
	LONG $0xc1fef9c5               // vpaddd	%xmm1, %xmm0, %xmm0
	LONG $0xc870f9c5; BYTE $0x55   // vpshufd	$85, %xmm0, %xmm1               # xmm1 = xmm0[1,1,1,1]
	LONG $0xc1fef9c5               // vpaddd	%xmm1, %xmm0, %xmm0
	LONG $0x7e79c1c4; BYTE $0xc7   // vmovd	%xmm0, %r15d
	WORD $0x394d; BYTE $0xd1       // cmpq	%r10, %r9
	JNE  LBB0_24
	JMP  LBB0_25

LBB0_23:
	WORD $0x014c; BYTE $0xc1 // addq	%r8, %rcx
	WORD $0x8948; BYTE $0xcb // movq	%rcx, %rbx

LBB0_24:
	LONG $0x1f04b60f         // movzbl	(%rdi,%rbx), %eax
	LONG $0x1e0cb60f         // movzbl	(%rsi,%rbx), %ecx
	WORD $0xaf0f; BYTE $0xc8 // imull	%eax, %ecx
	WORD $0x0141; BYTE $0xcf // addl	%ecx, %r15d
	LONG $0x01c38348         // addq	$1, %rbx
	WORD $0x3944; BYTE $0xdb // cmpl	%r11d, %ebx
	JL   LBB0_24

LBB0_25:
	WORD $0x8944; BYTE $0x3a // movl	%r15d, (%rdx)
	LONG $0xe8658d48         // leaq	-24(%rbp), %rsp
	BYTE $0x5b               // popq	%rbx
	WORD $0x5e41             // popq	%r14
	WORD $0x5f41             // popq	%r15
	BYTE $0x5d               // popq	%rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // retq
