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

TEXT ·popcnt_AVX2_lookup_512(SB), $0-32
	MOVQ vec+0(FP), DI
	MOVQ low_mask_vec+8(FP), SI
	MOVQ lookup_vec+16(FP), DX

TEXT ·popcount(SB), $0-32
	MOVQ v_ptr+0(FP), DI
	MOVQ result+8(FP), SI
	MOVQ constants_avx512+16(FP), DX
	BYTE $0x55                                 // pushq	%rbp
	WORD $0x8948; BYTE $0xe5                   // movq	%rsp, %rbp
	LONG $0xf8e48348                           // andq	$-8, %rsp
	LONG $0x48fdf262; WORD $0x4259; BYTE $0x01 // vpbroadcastq	8(%rdx), %zmm0
	LONG $0x48fdf262; WORD $0x4a59; BYTE $0x02 // vpbroadcastq	16(%rdx), %zmm1
	LONG $0x48fdf162; WORD $0x176f             // vmovdqa64	(%rdi), %zmm2
	LONG $0x4865f162; WORD $0xd271; BYTE $0x01 // vpsrlw	$1, %zmm2, %zmm3
	LONG $0x58e5f162; WORD $0x1adb             // vpandq	(%rdx){1to8}, %zmm3, %zmm3
	LONG $0x486df162; WORD $0xd3f8             // vpsubb	%zmm3, %zmm2, %zmm2
	LONG $0x4865f162; WORD $0xd271; BYTE $0x02 // vpsrlw	$2, %zmm2, %zmm3
	LONG $0x48fdf162; WORD $0xdbdb             // vpandq	%zmm3, %zmm0, %zmm3
	LONG $0x48edf162; WORD $0xc0db             // vpandq	%zmm0, %zmm2, %zmm0
	LONG $0x487df162; WORD $0xc3fc             // vpaddb	%zmm3, %zmm0, %zmm0
	LONG $0x486df162; WORD $0xd071; BYTE $0x04 // vpsrlw	$4, %zmm0, %zmm2
	LONG $0x487df162; WORD $0xc2fc             // vpaddb	%zmm2, %zmm0, %zmm0
	LONG $0x48fdf162; WORD $0xc1db             // vpandq	%zmm1, %zmm0, %zmm0
	LONG $0xc9eff1c5                           // vpxor	%xmm1, %xmm1, %xmm1
	LONG $0x487df162; WORD $0xc1f6             // vpsadbw	%zmm1, %zmm0, %zmm0
	LONG $0x48fdf162; WORD $0x067f             // vmovdqa64	%zmm0, (%rsi)
	WORD $0x8948; BYTE $0xec                   // movq	%rbp, %rsp
	BYTE $0x5d                                 // popq	%rbp
	WORD $0xf8c5; BYTE $0x77                   // vzeroupper
	BYTE $0xc3                                 // retq

TEXT ·CSA(SB), $0-32
	MOVQ h+0(FP), DI
	MOVQ l+8(FP), SI
	MOVQ a_ptr+16(FP), DX
	MOVQ b_ptr+24(FP), CX
	MOVQ c_ptr+32(FP), R8
	BYTE $0x55                                 // pushq	%rbp
	WORD $0x8948; BYTE $0xe5                   // movq	%rsp, %rbp
	LONG $0xf8e48348                           // andq	$-8, %rsp
	LONG $0x48fdf162; WORD $0x026f             // vmovdqa64	(%rdx), %zmm0
	LONG $0x48fdf162; WORD $0x096f             // vmovdqa64	(%rcx), %zmm1
	LONG $0x48fdd162; WORD $0x106f             // vmovdqa64	(%r8), %zmm2
	LONG $0x48fdf162; WORD $0xda6f             // vmovdqa64	%zmm2, %zmm3
	LONG $0x4875f362; WORD $0xd825; BYTE $0x96 // vpternlogd	$150, %zmm0, %zmm1, %zmm3
	LONG $0x48fdf162; WORD $0x1e7f             // vmovdqa64	%zmm3, (%rsi)
	LONG $0x4875f362; WORD $0xd025; BYTE $0xe8 // vpternlogd	$232, %zmm0, %zmm1, %zmm2
	LONG $0x48fdf162; WORD $0x177f             // vmovdqa64	%zmm2, (%rdi)
	WORD $0x8948; BYTE $0xec                   // movq	%rbp, %rsp
	BYTE $0x5d                                 // popq	%rbp
	WORD $0xf8c5; BYTE $0x77                   // vzeroupper
	BYTE $0xc3                                 // retq

TEXT ·simd_sum_epu64_256(SB), $0-32
	MOVQ v_ptr+0(FP), DI
	BYTE $0x55                   // pushq	%rbp
	WORD $0x8948; BYTE $0xe5     // movq	%rsp, %rbp
	LONG $0xf8e48348             // andq	$-8, %rsp
	LONG $0x076ff9c5             // vmovdqa	(%rdi), %xmm0
	LONG $0x47d4f9c5; BYTE $0x10 // vpaddq	16(%rdi), %xmm0, %xmm0
	LONG $0xc870f9c5; BYTE $0xee // vpshufd	$238, %xmm0, %xmm1              # xmm1 = xmm0[2,3,2,3]
	LONG $0xc1d4f9c5             // vpaddq	%xmm1, %xmm0, %xmm0
	LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq	%xmm0, %rax
	WORD $0x8948; BYTE $0xec     // movq	%rbp, %rsp
	BYTE $0x5d                   // popq	%rbp
	BYTE $0xc3                   // retq

TEXT ·simd_sum_epu64_512(SB), $0-32
	MOVQ v_ptr+0(FP), DI
	BYTE $0x55                     // pushq	%rbp
	WORD $0x8948; BYTE $0xe5       // movq	%rsp, %rbp
	LONG $0xf8e48348               // andq	$-8, %rsp
	LONG $0x476ffdc5; BYTE $0x20   // vmovdqa	32(%rdi), %ymm0
	LONG $0x48fdf162; WORD $0x07d4 // vpaddq	(%rdi), %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 $0x7ef9e1c4; BYTE $0xc0   // vmovq	%xmm0, %rax
	WORD $0x8948; BYTE $0xec       // movq	%rbp, %rsp
	BYTE $0x5d                     // popq	%rbp
	WORD $0xf8c5; BYTE $0x77       // vzeroupper
	BYTE $0xc3                     // retq

TEXT ·popcnt_AVX512_harleyseal(SB), $0-32
	MOVQ data+0(FP), DI
	MOVQ size_ptr+8(FP), SI
	MOVQ constants_avx512+16(FP), DX
	BYTE $0x55                                 // pushq	%rbp
	WORD $0x8948; BYTE $0xe5                   // movq	%rsp, %rbp
	LONG $0xf8e48348                           // andq	$-8, %rsp
	WORD $0x8b48; BYTE $0x06                   // movq	(%rsi), %rax
	WORD $0x8949; BYTE $0xc0                   // movq	%rax, %r8
	LONG $0xc0eff9c5                           // vpxor	%xmm0, %xmm0, %xmm0
	LONG $0xf0e08349                           // andq	$-16, %r8
	JE   LBB4_1
	LONG $0x48fdf262; WORD $0x1259             // vpbroadcastq	(%rdx), %zmm2
	LONG $0x48fdf262; WORD $0x5a59; BYTE $0x01 // vpbroadcastq	8(%rdx), %zmm3
	LONG $0x48fdf262; WORD $0x6259; BYTE $0x02 // vpbroadcastq	16(%rdx), %zmm4
	LONG $0xc0b78d48; WORD $0x0003; BYTE $0x00 // leaq	960(%rdi), %rsi
	LONG $0xf6efc9c5                           // vpxor	%xmm6, %xmm6, %xmm6
	LONG $0xc9eff1c5                           // vpxor	%xmm1, %xmm1, %xmm1
	WORD $0xc931                               // xorl	%ecx, %ecx
	LONG $0xedefd1c5                           // vpxor	%xmm5, %xmm5, %xmm5
	LONG $0xef3941c4; BYTE $0xc0               // vpxor	%xmm8, %xmm8, %xmm8
	LONG $0xffefc1c5                           // vpxor	%xmm7, %xmm7, %xmm7
	LONG $0xef2941c4; BYTE $0xd2               // vpxor	%xmm10, %xmm10, %xmm10

LBB4_3:
	LONG $0x48fd5162; WORD $0xca6f             // vmovdqa64	%zmm10, %zmm9
	LONG $0x48fd7162; WORD $0x566f; BYTE $0xf1 // vmovdqa64	-960(%rsi), %zmm10
	LONG $0x48fd7162; WORD $0x5e6f; BYTE $0xf2 // vmovdqa64	-896(%rsi), %zmm11
	LONG $0x48fd7162; WORD $0x666f; BYTE $0xf3 // vmovdqa64	-832(%rsi), %zmm12
	LONG $0x48fd7162; WORD $0x6e6f; BYTE $0xf4 // vmovdqa64	-768(%rsi), %zmm13
	LONG $0x48fd5162; WORD $0xf36f             // vmovdqa64	%zmm11, %zmm14
	LONG $0x482d7362; WORD $0xf525; BYTE $0x96 // vpternlogd	$150, %zmm5, %zmm10, %zmm14
	LONG $0x482d7362; WORD $0xdd25; BYTE $0xe8 // vpternlogd	$232, %zmm5, %zmm10, %zmm11
	LONG $0x48fdd162; WORD $0xed6f             // vmovdqa64	%zmm13, %zmm5
	LONG $0x481dd362; WORD $0xee25; BYTE $0x96 // vpternlogd	$150, %zmm14, %zmm12, %zmm5
	LONG $0x481d5362; WORD $0xf525; BYTE $0xe8 // vpternlogd	$232, %zmm13, %zmm12, %zmm14
	LONG $0x48fd5162; WORD $0xd66f             // vmovdqa64	%zmm14, %zmm10
	LONG $0x48255362; WORD $0xd025; BYTE $0x96 // vpternlogd	$150, %zmm8, %zmm11, %zmm10
	LONG $0x48255362; WORD $0xf025; BYTE $0xe8 // vpternlogd	$232, %zmm8, %zmm11, %zmm14
	LONG $0x48fd7162; WORD $0x466f; BYTE $0xf5 // vmovdqa64	-704(%rsi), %zmm8
	LONG $0x48fd7162; WORD $0x5e6f; BYTE $0xf6 // vmovdqa64	-640(%rsi), %zmm11
	LONG $0x48fd5162; WORD $0xe36f             // vmovdqa64	%zmm11, %zmm12
	LONG $0x483d7362; WORD $0xe525; BYTE $0x96 // vpternlogd	$150, %zmm5, %zmm8, %zmm12
	LONG $0x483dd362; WORD $0xeb25; BYTE $0xe8 // vpternlogd	$232, %zmm11, %zmm8, %zmm5
	LONG $0x48fd7162; WORD $0x466f; BYTE $0xf7 // vmovdqa64	-576(%rsi), %zmm8
	LONG $0x48fd7162; WORD $0x5e6f; BYTE $0xf8 // vmovdqa64	-512(%rsi), %zmm11
	LONG $0x48fd5162; WORD $0xeb6f             // vmovdqa64	%zmm11, %zmm13
	LONG $0x483d5362; WORD $0xec25; BYTE $0x96 // vpternlogd	$150, %zmm12, %zmm8, %zmm13
	LONG $0x483d5362; WORD $0xe325; BYTE $0xe8 // vpternlogd	$232, %zmm11, %zmm8, %zmm12
	LONG $0x48fd5162; WORD $0xc46f             // vmovdqa64	%zmm12, %zmm8
	LONG $0x48555362; WORD $0xc225; BYTE $0x96 // vpternlogd	$150, %zmm10, %zmm5, %zmm8
	LONG $0x48555362; WORD $0xe225; BYTE $0xe8 // vpternlogd	$232, %zmm10, %zmm5, %zmm12
	LONG $0x48fd5162; WORD $0xd46f             // vmovdqa64	%zmm12, %zmm10
	LONG $0x480d7362; WORD $0xd725; BYTE $0x96 // vpternlogd	$150, %zmm7, %zmm14, %zmm10
	LONG $0x480d7362; WORD $0xe725; BYTE $0xe8 // vpternlogd	$232, %zmm7, %zmm14, %zmm12
	LONG $0x48fdf162; WORD $0x6e6f; BYTE $0xf9 // vmovdqa64	-448(%rsi), %zmm5
	LONG $0x48fdf162; WORD $0x7e6f; BYTE $0xfa // vmovdqa64	-384(%rsi), %zmm7
	LONG $0x48fd7162; WORD $0xdf6f             // vmovdqa64	%zmm7, %zmm11
	LONG $0x48555362; WORD $0xdd25; BYTE $0x96 // vpternlogd	$150, %zmm13, %zmm5, %zmm11
	LONG $0x48557362; WORD $0xef25; BYTE $0xe8 // vpternlogd	$232, %zmm7, %zmm5, %zmm13
	LONG $0x48fdf162; WORD $0x6e6f; BYTE $0xfb // vmovdqa64	-320(%rsi), %zmm5
	LONG $0x48fdf162; WORD $0x7e6f; BYTE $0xfc // vmovdqa64	-256(%rsi), %zmm7
	LONG $0x48fd7162; WORD $0xf76f             // vmovdqa64	%zmm7, %zmm14
	LONG $0x48555362; WORD $0xf325; BYTE $0x96 // vpternlogd	$150, %zmm11, %zmm5, %zmm14
	LONG $0x48557362; WORD $0xdf25; BYTE $0xe8 // vpternlogd	$232, %zmm7, %zmm5, %zmm11
	LONG $0x48fdd162; WORD $0xfb6f             // vmovdqa64	%zmm11, %zmm7
	LONG $0x4815d362; WORD $0xf825; BYTE $0x96 // vpternlogd	$150, %zmm8, %zmm13, %zmm7
	LONG $0x48155362; WORD $0xd825; BYTE $0xe8 // vpternlogd	$232, %zmm8, %zmm13, %zmm11
	LONG $0x48fdf162; WORD $0x6e6f; BYTE $0xfd // vmovdqa64	-192(%rsi), %zmm5
	LONG $0x48fd7162; WORD $0x466f; BYTE $0xfe // vmovdqa64	-128(%rsi), %zmm8
	LONG $0x48fd5162; WORD $0xe86f             // vmovdqa64	%zmm8, %zmm13
	LONG $0x48555362; WORD $0xee25; BYTE $0x96 // vpternlogd	$150, %zmm14, %zmm5, %zmm13
	LONG $0x48555362; WORD $0xf025; BYTE $0xe8 // vpternlogd	$232, %zmm8, %zmm5, %zmm14
	LONG $0x48fd7162; WORD $0x466f; BYTE $0xff // vmovdqa64	-64(%rsi), %zmm8
	LONG $0x48fd7162; WORD $0x3e6f             // vmovdqa64	(%rsi), %zmm15
	LONG $0x48fdd162; WORD $0xef6f             // vmovdqa64	%zmm15, %zmm5
	LONG $0x483dd362; WORD $0xed25; BYTE $0x96 // vpternlogd	$150, %zmm13, %zmm8, %zmm5
	LONG $0x483d5362; WORD $0xef25; BYTE $0xe8 // vpternlogd	$232, %zmm15, %zmm8, %zmm13
	LONG $0x48fd5162; WORD $0xc56f             // vmovdqa64	%zmm13, %zmm8
	LONG $0x480d7362; WORD $0xc725; BYTE $0x96 // vpternlogd	$150, %zmm7, %zmm14, %zmm8
	LONG $0x480d7362; WORD $0xef25; BYTE $0xe8 // vpternlogd	$232, %zmm7, %zmm14, %zmm13
	LONG $0x48fdd162; WORD $0xfd6f             // vmovdqa64	%zmm13, %zmm7
	LONG $0x4825d362; WORD $0xfa25; BYTE $0x96 // vpternlogd	$150, %zmm10, %zmm11, %zmm7
	LONG $0x48255362; WORD $0xea25; BYTE $0xe8 // vpternlogd	$232, %zmm10, %zmm11, %zmm13
	LONG $0x48fd5162; WORD $0xd56f             // vmovdqa64	%zmm13, %zmm10
	LONG $0x481d5362; WORD $0xd125; BYTE $0x96 // vpternlogd	$150, %zmm9, %zmm12, %zmm10
	LONG $0x481d5362; WORD $0xe925; BYTE $0xe8 // vpternlogd	$232, %zmm9, %zmm12, %zmm13
	LONG $0x4835d162; WORD $0xd571; BYTE $0x01 // vpsrlw	$1, %zmm13, %zmm9
	LONG $0x48ed5162; WORD $0xc9db             // vpandq	%zmm9, %zmm2, %zmm9
	LONG $0x48155162; WORD $0xc9f8             // vpsubb	%zmm9, %zmm13, %zmm9
	LONG $0x4825d162; WORD $0xd171; BYTE $0x02 // vpsrlw	$2, %zmm9, %zmm11
	LONG $0x48e55162; WORD $0xdbdb             // vpandq	%zmm11, %zmm3, %zmm11
	LONG $0x48b57162; WORD $0xcbdb             // vpandq	%zmm3, %zmm9, %zmm9
	LONG $0x48355162; WORD $0xcbfc             // vpaddb	%zmm11, %zmm9, %zmm9
	LONG $0x4825d162; WORD $0xd171; BYTE $0x04 // vpsrlw	$4, %zmm9, %zmm11
	LONG $0x48355162; WORD $0xcbfc             // vpaddb	%zmm11, %zmm9, %zmm9
	LONG $0x48b57162; WORD $0xccdb             // vpandq	%zmm4, %zmm9, %zmm9
	LONG $0x48357162; WORD $0xcef6             // vpsadbw	%zmm6, %zmm9, %zmm9
	LONG $0x48b5f162; WORD $0xc9d4             // vpaddq	%zmm1, %zmm9, %zmm1
	LONG $0x10c18348                           // addq	$16, %rcx
	LONG $0x00c68148; WORD $0x0004; BYTE $0x00 // addq	$1024, %rsi                     # imm = 0x400
	WORD $0x394c; BYTE $0xc1                   // cmpq	%r8, %rcx
	JB   LBB4_3
	LONG $0x48ddf162; WORD $0xf173; BYTE $0x04 // vpsllq	$4, %zmm1, %zmm4
	JMP  LBB4_5

LBB4_1:
	WORD $0x3145; BYTE $0xc0     // xorl	%r8d, %r8d
	LONG $0xef2941c4; BYTE $0xd2 // vpxor	%xmm10, %xmm10, %xmm10
	LONG $0xffefc1c5             // vpxor	%xmm7, %xmm7, %xmm7
	LONG $0xef3941c4; BYTE $0xc0 // vpxor	%xmm8, %xmm8, %xmm8
	LONG $0xedefd1c5             // vpxor	%xmm5, %xmm5, %xmm5
	LONG $0xe4efd9c5             // vpxor	%xmm4, %xmm4, %xmm4

LBB4_5:
	LONG $0x48fdf262; WORD $0x0a59             // vpbroadcastq	(%rdx), %zmm1
	LONG $0x48fdf262; WORD $0x5259; BYTE $0x01 // vpbroadcastq	8(%rdx), %zmm2
	LONG $0x48fdf262; WORD $0x5a59; BYTE $0x02 // vpbroadcastq	16(%rdx), %zmm3
	LONG $0x484dd162; WORD $0xd271; BYTE $0x01 // vpsrlw	$1, %zmm10, %zmm6
	LONG $0x48f5f162; WORD $0xf6db             // vpandq	%zmm6, %zmm1, %zmm6
	LONG $0x482df162; WORD $0xf6f8             // vpsubb	%zmm6, %zmm10, %zmm6
	LONG $0x4835f162; WORD $0xd671; BYTE $0x02 // vpsrlw	$2, %zmm6, %zmm9
	LONG $0x48ed5162; WORD $0xc9db             // vpandq	%zmm9, %zmm2, %zmm9
	LONG $0x48cdf162; WORD $0xf2db             // vpandq	%zmm2, %zmm6, %zmm6
	LONG $0x484dd162; WORD $0xf1fc             // vpaddb	%zmm9, %zmm6, %zmm6
	LONG $0x4835f162; WORD $0xd671; BYTE $0x04 // vpsrlw	$4, %zmm6, %zmm9
	LONG $0x484dd162; WORD $0xf1fc             // vpaddb	%zmm9, %zmm6, %zmm6
	LONG $0x48cdf162; WORD $0xf3db             // vpandq	%zmm3, %zmm6, %zmm6
	LONG $0x484df162; WORD $0xf0f6             // vpsadbw	%zmm0, %zmm6, %zmm6
	LONG $0x4835f162; WORD $0xd771; BYTE $0x01 // vpsrlw	$1, %zmm7, %zmm9
	LONG $0x48f55162; WORD $0xc9db             // vpandq	%zmm9, %zmm1, %zmm9
	LONG $0x4845d162; WORD $0xf9f8             // vpsubb	%zmm9, %zmm7, %zmm7
	LONG $0x4835f162; WORD $0xd771; BYTE $0x02 // vpsrlw	$2, %zmm7, %zmm9
	LONG $0x48ed5162; WORD $0xc9db             // vpandq	%zmm9, %zmm2, %zmm9
	LONG $0x48c5f162; WORD $0xfadb             // vpandq	%zmm2, %zmm7, %zmm7
	LONG $0x4845d162; WORD $0xf9fc             // vpaddb	%zmm9, %zmm7, %zmm7
	LONG $0x4835f162; WORD $0xd771; BYTE $0x04 // vpsrlw	$4, %zmm7, %zmm9
	LONG $0x4845d162; WORD $0xf9fc             // vpaddb	%zmm9, %zmm7, %zmm7
	LONG $0x48c5f162; WORD $0xfbdb             // vpandq	%zmm3, %zmm7, %zmm7
	LONG $0x4845f162; WORD $0xf8f6             // vpsadbw	%zmm0, %zmm7, %zmm7
	LONG $0x4835d162; WORD $0xd071; BYTE $0x01 // vpsrlw	$1, %zmm8, %zmm9
	LONG $0x48f55162; WORD $0xc9db             // vpandq	%zmm9, %zmm1, %zmm9
	LONG $0x483d5162; WORD $0xc1f8             // vpsubb	%zmm9, %zmm8, %zmm8
	LONG $0x4835d162; WORD $0xd071; BYTE $0x02 // vpsrlw	$2, %zmm8, %zmm9
	LONG $0x48ed5162; WORD $0xc9db             // vpandq	%zmm9, %zmm2, %zmm9
	LONG $0x48bd7162; WORD $0xc2db             // vpandq	%zmm2, %zmm8, %zmm8
	LONG $0x483d5162; WORD $0xc1fc             // vpaddb	%zmm9, %zmm8, %zmm8
	LONG $0x4835d162; WORD $0xd071; BYTE $0x04 // vpsrlw	$4, %zmm8, %zmm9
	LONG $0x483d5162; WORD $0xc1fc             // vpaddb	%zmm9, %zmm8, %zmm8
	LONG $0x48bd7162; WORD $0xc3db             // vpandq	%zmm3, %zmm8, %zmm8
	LONG $0x483d7162; WORD $0xc0f6             // vpsadbw	%zmm0, %zmm8, %zmm8
	LONG $0x4835f162; WORD $0xd571; BYTE $0x01 // vpsrlw	$1, %zmm5, %zmm9
	LONG $0x48f55162; WORD $0xc9db             // vpandq	%zmm9, %zmm1, %zmm9
	LONG $0x4855d162; WORD $0xe9f8             // vpsubb	%zmm9, %zmm5, %zmm5
	LONG $0x4835f162; WORD $0xd571; BYTE $0x02 // vpsrlw	$2, %zmm5, %zmm9
	LONG $0x48ed5162; WORD $0xc9db             // vpandq	%zmm9, %zmm2, %zmm9
	LONG $0x48d5f162; WORD $0xeadb             // vpandq	%zmm2, %zmm5, %zmm5
	LONG $0x4855d162; WORD $0xe9fc             // vpaddb	%zmm9, %zmm5, %zmm5
	LONG $0x4835f162; WORD $0xd571; BYTE $0x04 // vpsrlw	$4, %zmm5, %zmm9
	LONG $0x4855d162; WORD $0xe9fc             // vpaddb	%zmm9, %zmm5, %zmm5
	LONG $0x48d5f162; WORD $0xebdb             // vpandq	%zmm3, %zmm5, %zmm5
	LONG $0x4855f162; WORD $0xc0f6             // vpsadbw	%zmm0, %zmm5, %zmm0
	LONG $0x48d5f162; WORD $0xf673; BYTE $0x03 // vpsllq	$3, %zmm6, %zmm5
	LONG $0x48d5f162; WORD $0xe4d4             // vpaddq	%zmm4, %zmm5, %zmm4
	LONG $0x48d5f162; WORD $0xf773; BYTE $0x02 // vpsllq	$2, %zmm7, %zmm5
	LONG $0x48bdd162; WORD $0xf0d4             // vpaddq	%zmm8, %zmm8, %zmm6
	LONG $0x48d5f162; WORD $0xeed4             // vpaddq	%zmm6, %zmm5, %zmm5
	LONG $0x48ddf162; WORD $0xe5d4             // vpaddq	%zmm5, %zmm4, %zmm4
	LONG $0x48ddf162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm4, %zmm0
	WORD $0x3949; BYTE $0xc0                   // cmpq	%rax, %r8
	JAE  LBB4_8
	WORD $0x294c; BYTE $0xc0                   // subq	%r8, %rax
	LONG $0x06e0c149                           // shlq	$6, %r8
	WORD $0x014c; BYTE $0xc7                   // addq	%r8, %rdi
	LONG $0xe4efd9c5                           // vpxor	%xmm4, %xmm4, %xmm4

LBB4_7:
	LONG $0x48fdf162; WORD $0x2f6f             // vmovdqa64	(%rdi), %zmm5
	LONG $0x484df162; WORD $0xd571; BYTE $0x01 // vpsrlw	$1, %zmm5, %zmm6
	LONG $0x48f5f162; WORD $0xf6db             // vpandq	%zmm6, %zmm1, %zmm6
	LONG $0x4855f162; WORD $0xeef8             // vpsubb	%zmm6, %zmm5, %zmm5
	LONG $0x484df162; WORD $0xd571; BYTE $0x02 // vpsrlw	$2, %zmm5, %zmm6
	LONG $0x48edf162; WORD $0xf6db             // vpandq	%zmm6, %zmm2, %zmm6
	LONG $0x48d5f162; WORD $0xeadb             // vpandq	%zmm2, %zmm5, %zmm5
	LONG $0x4855f162; WORD $0xeefc             // vpaddb	%zmm6, %zmm5, %zmm5
	LONG $0x484df162; WORD $0xd571; BYTE $0x04 // vpsrlw	$4, %zmm5, %zmm6
	LONG $0x4855f162; WORD $0xeefc             // vpaddb	%zmm6, %zmm5, %zmm5
	LONG $0x48d5f162; WORD $0xebdb             // vpandq	%zmm3, %zmm5, %zmm5
	LONG $0x4855f162; WORD $0xecf6             // vpsadbw	%zmm4, %zmm5, %zmm5
	LONG $0x48d5f162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm5, %zmm0
	LONG $0x40c78348                           // addq	$64, %rdi
	LONG $0xffc08348                           // addq	$-1, %rax
	JNE  LBB4_7

LBB4_8:
	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 $0x7ef9e1c4; BYTE $0xc0               // vmovq	%xmm0, %rax
	WORD $0x8948; BYTE $0xec                   // movq	%rbp, %rsp
	BYTE $0x5d                                 // popq	%rbp
	WORD $0xf8c5; BYTE $0x77                   // vzeroupper
	BYTE $0xc3                                 // retq

TEXT ·popcnt_64bit_512(SB), $0-32
	MOVQ src+0(FP), DI
	MOVQ popcnt_constants+8(FP), SI

TEXT ·hamming_bitwise_512(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ res+16(FP), DX
	MOVQ len+24(FP), CX
	MOVQ popcnt_constants+32(FP), R8
	BYTE $0x55                       // pushq	%rbp
	WORD $0x8948; BYTE $0xe5         // movq	%rsp, %rbp
	WORD $0x5741                     // pushq	%r15
	WORD $0x5641                     // pushq	%r14
	WORD $0x5541                     // pushq	%r13
	WORD $0x5441                     // pushq	%r12
	BYTE $0x53                       // pushq	%rbx
	LONG $0xf8e48348                 // andq	$-8, %rsp
	WORD $0x8b48; BYTE $0x01         // movq	(%rcx), %rax
	WORD $0xf883; BYTE $0x08         // cmpl	$8, %eax
	JGE  LBB5_1
	WORD $0x8b4d; BYTE $0x08         // movq	(%r8), %r9
	LONG $0x08508b4d                 // movq	8(%r8), %r10
	LONG $0x10588b4d                 // movq	16(%r8), %r11
	LONG $0x18408b4d                 // movq	24(%r8), %r8
	WORD $0x8941; BYTE $0xc7         // movl	%eax, %r15d
	LONG $0xffc78341                 // addl	$-1, %r15d
	LONG $0x1fff8341                 // cmpl	$31, %r15d
	JAE  LBB5_5
	WORD $0xc931                     // xorl	%ecx, %ecx
	WORD $0x8949; BYTE $0xf6         // movq	%rsi, %r14
	WORD $0x8949; BYTE $0xfd         // movq	%rdi, %r13
	JMP  LBB5_8

LBB5_1:
	LONG $0x0000803d; BYTE $0x00               // cmpl	$128, %eax
	JB   LBB5_2
	LONG $0x48fdd262; WORD $0x0059             // vpbroadcastq	(%r8), %zmm0
	LONG $0x48fdd262; WORD $0x4859; BYTE $0x01 // vpbroadcastq	8(%r8), %zmm1
	LONG $0x48fdd262; WORD $0x5059; BYTE $0x02 // vpbroadcastq	16(%r8), %zmm2
	WORD $0xc931                               // xorl	%ecx, %ecx
	LONG $0xdbefe1c5                           // vpxor	%xmm3, %xmm3, %xmm3

LBB5_20:
	LONG $0x48fef162; WORD $0x266f             // vmovdqu64	(%rsi), %zmm4
	LONG $0x48fef162; WORD $0x6e6f; BYTE $0x01 // vmovdqu64	64(%rsi), %zmm5
	LONG $0x48fef162; WORD $0x766f; BYTE $0x02 // vmovdqu64	128(%rsi), %zmm6
	LONG $0x48fef162; WORD $0x7e6f; BYTE $0x03 // vmovdqu64	192(%rsi), %zmm7
	LONG $0x48fe7162; WORD $0x466f; BYTE $0x04 // vmovdqu64	256(%rsi), %zmm8
	LONG $0x48fe7162; WORD $0x4e6f; BYTE $0x05 // vmovdqu64	320(%rsi), %zmm9
	LONG $0x48fe7162; WORD $0x566f; BYTE $0x06 // vmovdqu64	384(%rsi), %zmm10
	LONG $0x48fe7162; WORD $0x5e6f; BYTE $0x07 // vmovdqu64	448(%rsi), %zmm11
	LONG $0x48fe7162; WORD $0x666f; BYTE $0x08 // vmovdqu64	512(%rsi), %zmm12
	LONG $0x48fe7162; WORD $0x6e6f; BYTE $0x09 // vmovdqu64	576(%rsi), %zmm13
	LONG $0x48fe7162; WORD $0x766f; BYTE $0x0a // vmovdqu64	640(%rsi), %zmm14
	LONG $0x48fe7162; WORD $0x7e6f; BYTE $0x0b // vmovdqu64	704(%rsi), %zmm15
	LONG $0x48fee162; WORD $0x466f; BYTE $0x0c // vmovdqu64	768(%rsi), %zmm16
	LONG $0x48fee162; WORD $0x4e6f; BYTE $0x0d // vmovdqu64	832(%rsi), %zmm17
	LONG $0x48fee162; WORD $0x566f; BYTE $0x0e // vmovdqu64	896(%rsi), %zmm18
	LONG $0x48ddf162; WORD $0x27ef             // vpxorq	(%rdi), %zmm4, %zmm4
	LONG $0x48d5f162; WORD $0x6fef; BYTE $0x01 // vpxorq	64(%rdi), %zmm5, %zmm5
	LONG $0x48cdf162; WORD $0x77ef; BYTE $0x02 // vpxorq	128(%rdi), %zmm6, %zmm6
	LONG $0x48c5f162; WORD $0x7fef; BYTE $0x03 // vpxorq	192(%rdi), %zmm7, %zmm7
	LONG $0x48bd7162; WORD $0x47ef; BYTE $0x04 // vpxorq	256(%rdi), %zmm8, %zmm8
	LONG $0x48b57162; WORD $0x4fef; BYTE $0x05 // vpxorq	320(%rdi), %zmm9, %zmm9
	LONG $0x48ad7162; WORD $0x57ef; BYTE $0x06 // vpxorq	384(%rdi), %zmm10, %zmm10
	LONG $0x48a57162; WORD $0x5fef; BYTE $0x07 // vpxorq	448(%rdi), %zmm11, %zmm11
	LONG $0x489d7162; WORD $0x67ef; BYTE $0x08 // vpxorq	512(%rdi), %zmm12, %zmm12
	LONG $0x48957162; WORD $0x6fef; BYTE $0x09 // vpxorq	576(%rdi), %zmm13, %zmm13
	LONG $0x488d7162; WORD $0x77ef; BYTE $0x0a // vpxorq	640(%rdi), %zmm14, %zmm14
	LONG $0x48857162; WORD $0x7fef; BYTE $0x0b // vpxorq	704(%rdi), %zmm15, %zmm15
	LONG $0x40fde162; WORD $0x47ef; BYTE $0x0c // vpxorq	768(%rdi), %zmm16, %zmm16
	LONG $0x40f5e162; WORD $0x4fef; BYTE $0x0d // vpxorq	832(%rdi), %zmm17, %zmm17
	LONG $0x40ede162; WORD $0x57ef; BYTE $0x0e // vpxorq	896(%rdi), %zmm18, %zmm18
	LONG $0x48fee162; WORD $0x5e6f; BYTE $0x0f // vmovdqu64	960(%rsi), %zmm19
	LONG $0x40e5e162; WORD $0x5fef; BYTE $0x0f // vpxorq	960(%rdi), %zmm19, %zmm19
	LONG $0x48fde162; WORD $0xe56f             // vmovdqa64	%zmm5, %zmm20
	LONG $0x485de362; WORD $0xe325; BYTE $0x96 // vpternlogd	$150, %zmm3, %zmm4, %zmm20
	LONG $0x485df362; WORD $0xeb25; BYTE $0xe8 // vpternlogd	$232, %zmm3, %zmm4, %zmm5
	LONG $0x48fdf162; WORD $0xe76f             // vmovdqa64	%zmm7, %zmm4
	LONG $0x484db362; WORD $0xe425; BYTE $0x96 // vpternlogd	$150, %zmm20, %zmm6, %zmm4
	LONG $0x484de362; WORD $0xe725; BYTE $0xe8 // vpternlogd	$232, %zmm7, %zmm6, %zmm20
	LONG $0x48fdb162; WORD $0xf46f             // vmovdqa64	%zmm20, %zmm6
	LONG $0x4855f362; WORD $0xf325; BYTE $0x96 // vpternlogd	$150, %zmm3, %zmm5, %zmm6
	LONG $0x4855e362; WORD $0xe325; BYTE $0xe8 // vpternlogd	$232, %zmm3, %zmm5, %zmm20
	LONG $0x48fdd162; WORD $0xe96f             // vmovdqa64	%zmm9, %zmm5
	LONG $0x483df362; WORD $0xec25; BYTE $0x96 // vpternlogd	$150, %zmm4, %zmm8, %zmm5
	LONG $0x48fdd162; WORD $0xfb6f             // vmovdqa64	%zmm11, %zmm7
	LONG $0x482df362; WORD $0xfd25; BYTE $0x96 // vpternlogd	$150, %zmm5, %zmm10, %zmm7
	LONG $0x483dd362; WORD $0xe125; BYTE $0xe8 // vpternlogd	$232, %zmm9, %zmm8, %zmm4
	LONG $0x482dd362; WORD $0xeb25; BYTE $0xe8 // vpternlogd	$232, %zmm11, %zmm10, %zmm5
	LONG $0x48fd7162; WORD $0xc56f             // vmovdqa64	%zmm5, %zmm8
	LONG $0x485d7362; WORD $0xc625; BYTE $0x96 // vpternlogd	$150, %zmm6, %zmm4, %zmm8
	LONG $0x485df362; WORD $0xee25; BYTE $0xe8 // vpternlogd	$232, %zmm6, %zmm4, %zmm5
	LONG $0x48fdf162; WORD $0xe56f             // vmovdqa64	%zmm5, %zmm4
	LONG $0x48fdd162; WORD $0xf56f             // vmovdqa64	%zmm13, %zmm6
	LONG $0x405df362; WORD $0xe325; BYTE $0x96 // vpternlogd	$150, %zmm3, %zmm20, %zmm4
	LONG $0x481df362; WORD $0xf725; BYTE $0x96 // vpternlogd	$150, %zmm7, %zmm12, %zmm6
	LONG $0x481dd362; WORD $0xfd25; BYTE $0xe8 // vpternlogd	$232, %zmm13, %zmm12, %zmm7
	LONG $0x48fd5162; WORD $0xcf6f             // vmovdqa64	%zmm15, %zmm9
	LONG $0x480d7362; WORD $0xce25; BYTE $0x96 // vpternlogd	$150, %zmm6, %zmm14, %zmm9
	LONG $0x405df362; WORD $0xeb25; BYTE $0xe8 // vpternlogd	$232, %zmm3, %zmm20, %zmm5
	LONG $0x480dd362; WORD $0xf725; BYTE $0xe8 // vpternlogd	$232, %zmm15, %zmm14, %zmm6
	LONG $0x48fd7162; WORD $0xd66f             // vmovdqa64	%zmm6, %zmm10
	LONG $0x48455362; WORD $0xd025; BYTE $0x96 // vpternlogd	$150, %zmm8, %zmm7, %zmm10
	LONG $0x48fd3162; WORD $0xd96f             // vmovdqa64	%zmm17, %zmm11
	LONG $0x407d5362; WORD $0xd925; BYTE $0x96 // vpternlogd	$150, %zmm9, %zmm16, %zmm11
	LONG $0x4845d362; WORD $0xf025; BYTE $0xe8 // vpternlogd	$232, %zmm8, %zmm7, %zmm6
	LONG $0x407d3362; WORD $0xc925; BYTE $0xe8 // vpternlogd	$232, %zmm17, %zmm16, %zmm9
	LONG $0x48fdb162; WORD $0xfb6f             // vmovdqa64	%zmm19, %zmm7
	LONG $0x406dd362; WORD $0xfb25; BYTE $0x96 // vpternlogd	$150, %zmm11, %zmm18, %zmm7
	LONG $0x406d3362; WORD $0xdb25; BYTE $0xe8 // vpternlogd	$232, %zmm19, %zmm18, %zmm11
	LONG $0x48fd5162; WORD $0xc36f             // vmovdqa64	%zmm11, %zmm8
	LONG $0x48355362; WORD $0xc225; BYTE $0x96 // vpternlogd	$150, %zmm10, %zmm9, %zmm8
	LONG $0x48355362; WORD $0xda25; BYTE $0xe8 // vpternlogd	$232, %zmm10, %zmm9, %zmm11
	LONG $0x48fd5162; WORD $0xcb6f             // vmovdqa64	%zmm11, %zmm9
	LONG $0x484d7362; WORD $0xcc25; BYTE $0x96 // vpternlogd	$150, %zmm4, %zmm6, %zmm9
	LONG $0x484d7362; WORD $0xdc25; BYTE $0xe8 // vpternlogd	$232, %zmm4, %zmm6, %zmm11
	LONG $0x48fdd162; WORD $0xe36f             // vmovdqa64	%zmm11, %zmm4
	LONG $0x4855f362; WORD $0xe325; BYTE $0x96 // vpternlogd	$150, %zmm3, %zmm5, %zmm4
	LONG $0x48557362; WORD $0xdb25; BYTE $0xe8 // vpternlogd	$232, %zmm3, %zmm5, %zmm11
	LONG $0x4855d162; WORD $0xd371; BYTE $0x01 // vpsrlw	$1, %zmm11, %zmm5
	LONG $0x48fdf162; WORD $0xeddb             // vpandq	%zmm5, %zmm0, %zmm5
	LONG $0x4825f162; WORD $0xedf8             // vpsubb	%zmm5, %zmm11, %zmm5
	LONG $0x484df162; WORD $0xd571; BYTE $0x02 // vpsrlw	$2, %zmm5, %zmm6
	LONG $0x48d5f162; WORD $0xe9db             // vpandq	%zmm1, %zmm5, %zmm5
	LONG $0x482df162; WORD $0xd471; BYTE $0x01 // vpsrlw	$1, %zmm4, %zmm10
	LONG $0x48f5f162; WORD $0xf6db             // vpandq	%zmm6, %zmm1, %zmm6
	LONG $0x48fd5162; WORD $0xd2db             // vpandq	%zmm10, %zmm0, %zmm10
	LONG $0x485dd162; WORD $0xe2f8             // vpsubb	%zmm10, %zmm4, %zmm4
	LONG $0x482df162; WORD $0xd471; BYTE $0x02 // vpsrlw	$2, %zmm4, %zmm10
	LONG $0x4855f162; WORD $0xeefc             // vpaddb	%zmm6, %zmm5, %zmm5
	LONG $0x48f5d162; WORD $0xf2db             // vpandq	%zmm10, %zmm1, %zmm6
	LONG $0x48ddf162; WORD $0xe1db             // vpandq	%zmm1, %zmm4, %zmm4
	LONG $0x485df162; WORD $0xe6fc             // vpaddb	%zmm6, %zmm4, %zmm4
	LONG $0x484df162; WORD $0xd571; BYTE $0x04 // vpsrlw	$4, %zmm5, %zmm6
	LONG $0x482dd162; WORD $0xd171; BYTE $0x01 // vpsrlw	$1, %zmm9, %zmm10
	LONG $0x48fd5162; WORD $0xd2db             // vpandq	%zmm10, %zmm0, %zmm10
	LONG $0x48355162; WORD $0xcaf8             // vpsubb	%zmm10, %zmm9, %zmm9
	LONG $0x482df162; WORD $0xd471; BYTE $0x04 // vpsrlw	$4, %zmm4, %zmm10
	LONG $0x4825d162; WORD $0xd171; BYTE $0x02 // vpsrlw	$2, %zmm9, %zmm11
	LONG $0x48f55162; WORD $0xdbdb             // vpandq	%zmm11, %zmm1, %zmm11
	LONG $0x48b57162; WORD $0xc9db             // vpandq	%zmm1, %zmm9, %zmm9
	LONG $0x4855f162; WORD $0xeefc             // vpaddb	%zmm6, %zmm5, %zmm5
	LONG $0x4835d162; WORD $0xf3fc             // vpaddb	%zmm11, %zmm9, %zmm6
	LONG $0x4835f162; WORD $0xd671; BYTE $0x04 // vpsrlw	$4, %zmm6, %zmm9
	LONG $0x484dd162; WORD $0xf1fc             // vpaddb	%zmm9, %zmm6, %zmm6
	LONG $0x485dd162; WORD $0xe2fc             // vpaddb	%zmm10, %zmm4, %zmm4
	LONG $0x4835d162; WORD $0xd071; BYTE $0x01 // vpsrlw	$1, %zmm8, %zmm9
	LONG $0x48fd5162; WORD $0xc9db             // vpandq	%zmm9, %zmm0, %zmm9
	LONG $0x483d5162; WORD $0xc1f8             // vpsubb	%zmm9, %zmm8, %zmm8
	LONG $0x48cdf162; WORD $0xf2db             // vpandq	%zmm2, %zmm6, %zmm6
	LONG $0x4835d162; WORD $0xd071; BYTE $0x02 // vpsrlw	$2, %zmm8, %zmm9
	LONG $0x48f55162; WORD $0xc9db             // vpandq	%zmm9, %zmm1, %zmm9
	LONG $0x48bd7162; WORD $0xc1db             // vpandq	%zmm1, %zmm8, %zmm8
	LONG $0x48d5f162; WORD $0xeadb             // vpandq	%zmm2, %zmm5, %zmm5
	LONG $0x483d5162; WORD $0xc1fc             // vpaddb	%zmm9, %zmm8, %zmm8
	LONG $0x4835d162; WORD $0xd071; BYTE $0x04 // vpsrlw	$4, %zmm8, %zmm9
	LONG $0x483d5162; WORD $0xc1fc             // vpaddb	%zmm9, %zmm8, %zmm8
	LONG $0x48ddf162; WORD $0xe2db             // vpandq	%zmm2, %zmm4, %zmm4
	LONG $0x48bd7162; WORD $0xc2db             // vpandq	%zmm2, %zmm8, %zmm8
	LONG $0x483d7162; WORD $0xc3f6             // vpsadbw	%zmm3, %zmm8, %zmm8
	LONG $0x4835f162; WORD $0xd771; BYTE $0x01 // vpsrlw	$1, %zmm7, %zmm9
	LONG $0x484df162; WORD $0xf3f6             // vpsadbw	%zmm3, %zmm6, %zmm6
	LONG $0x48fd5162; WORD $0xc9db             // vpandq	%zmm9, %zmm0, %zmm9
	LONG $0x4845d162; WORD $0xf9f8             // vpsubb	%zmm9, %zmm7, %zmm7
	LONG $0x4835f162; WORD $0xd771; BYTE $0x02 // vpsrlw	$2, %zmm7, %zmm9
	LONG $0x4855f162; WORD $0xebf6             // vpsadbw	%zmm3, %zmm5, %zmm5
	LONG $0x48f55162; WORD $0xc9db             // vpandq	%zmm9, %zmm1, %zmm9
	LONG $0x48c5f162; WORD $0xf9db             // vpandq	%zmm1, %zmm7, %zmm7
	LONG $0x4845d162; WORD $0xf9fc             // vpaddb	%zmm9, %zmm7, %zmm7
	LONG $0x485df162; WORD $0xe3f6             // vpsadbw	%zmm3, %zmm4, %zmm4
	LONG $0x4835f162; WORD $0xd771; BYTE $0x04 // vpsrlw	$4, %zmm7, %zmm9
	LONG $0x4845d162; WORD $0xf9fc             // vpaddb	%zmm9, %zmm7, %zmm7
	LONG $0x48c5f162; WORD $0xfadb             // vpandq	%zmm2, %zmm7, %zmm7
	LONG $0x48d5f162; WORD $0xf573; BYTE $0x04 // vpsllq	$4, %zmm5, %zmm5
	LONG $0x4845f162; WORD $0xfbf6             // vpsadbw	%zmm3, %zmm7, %zmm7
	LONG $0x48ddf162; WORD $0xf473; BYTE $0x03 // vpsllq	$3, %zmm4, %zmm4
	LONG $0x48cdf162; WORD $0xf673; BYTE $0x02 // vpsllq	$2, %zmm6, %zmm6
	LONG $0x48ddf162; WORD $0xe5d4             // vpaddq	%zmm5, %zmm4, %zmm4
	LONG $0x48bdd162; WORD $0xe8d4             // vpaddq	%zmm8, %zmm8, %zmm5
	LONG $0x48cdf162; WORD $0xedd4             // vpaddq	%zmm5, %zmm6, %zmm5
	LONG $0x48d5f162; WORD $0xefd4             // vpaddq	%zmm7, %zmm5, %zmm5
	LONG $0x48ddf162; WORD $0xe5d4             // vpaddq	%zmm5, %zmm4, %zmm4
	LONG $0x48fdf362; WORD $0xe53b; BYTE $0x01 // vextracti64x4	$1, %zmm4, %ymm5
	LONG $0x48ddf162; WORD $0xe5d4             // vpaddq	%zmm5, %zmm4, %zmm4
	LONG $0x397de3c4; WORD $0x01e5             // vextracti128	$1, %ymm4, %xmm5
	LONG $0xe5d4d9c5                           // vpaddq	%xmm5, %xmm4, %xmm4
	LONG $0xec70f9c5; BYTE $0xee               // vpshufd	$238, %xmm4, %xmm5              # xmm5 = xmm4[2,3,2,3]
	LONG $0xe5d4d9c5                           // vpaddq	%xmm5, %xmm4, %xmm4
	LONG $0x7ef9e1c4; BYTE $0xe3               // vmovq	%xmm4, %rbx
	WORD $0x0148; BYTE $0xd9                   // addq	%rbx, %rcx
	WORD $0xc083; BYTE $0x80                   // addl	$-128, %eax
	LONG $0x00c78148; WORD $0x0004; BYTE $0x00 // addq	$1024, %rdi                     # imm = 0x400
	LONG $0x00c68148; WORD $0x0004; BYTE $0x00 // addq	$1024, %rsi                     # imm = 0x400
	WORD $0xf883; BYTE $0x7f                   // cmpl	$127, %eax
	JA   LBB5_20
	WORD $0xc085                               // testl	%eax, %eax
	JNE  LBB5_11
	JMP  LBB5_18

LBB5_5:
	LONG $0x01c78349                           // addq	$1, %r15
	WORD $0x894d; BYTE $0xfc                   // movq	%r15, %r12
	LONG $0xe0e48349                           // andq	$-32, %r12
	WORD $0x2944; BYTE $0xe0                   // subl	%r12d, %eax
	LONG $0xe6348d4e                           // leaq	(%rsi,%r12,8), %r14
	LONG $0xe72c8d4e                           // leaq	(%rdi,%r12,8), %r13
	LONG $0x48fdd262; WORD $0xc17c             // vpbroadcastq	%r9, %zmm0
	LONG $0x48fdd262; WORD $0xca7c             // vpbroadcastq	%r10, %zmm1
	LONG $0x48fdd262; WORD $0xd37c             // vpbroadcastq	%r11, %zmm2
	LONG $0x48fdd262; WORD $0xd87c             // vpbroadcastq	%r8, %zmm3
	QUAD $0x00000000fd0c8d4a                   // leaq	(,%r15,8), %rcx
	LONG $0x00e18148; WORD $0xffff; BYTE $0xff // andq	$-256, %rcx
	LONG $0xe4efd9c5                           // vpxor	%xmm4, %xmm4, %xmm4
	WORD $0xdb31                               // xorl	%ebx, %ebx
	LONG $0xedefd1c5                           // vpxor	%xmm5, %xmm5, %xmm5
	LONG $0xf6efc9c5                           // vpxor	%xmm6, %xmm6, %xmm6
	LONG $0xffefc1c5                           // vpxor	%xmm7, %xmm7, %xmm7

LBB5_6:
	LONG $0x48fe7162; WORD $0x046f; BYTE $0x1e // vmovdqu64	(%rsi,%rbx), %zmm8
	QUAD $0x011e4c6f48fe7162                   // vmovdqu64	64(%rsi,%rbx), %zmm9
	QUAD $0x021e546f48fe7162                   // vmovdqu64	128(%rsi,%rbx), %zmm10
	QUAD $0x031e5c6f48fe7162                   // vmovdqu64	192(%rsi,%rbx), %zmm11
	LONG $0x48bd7162; WORD $0x04ef; BYTE $0x1f // vpxorq	(%rdi,%rbx), %zmm8, %zmm8
	QUAD $0x011f4cef48b57162                   // vpxorq	64(%rdi,%rbx), %zmm9, %zmm9
	QUAD $0x021f54ef48ad7162                   // vpxorq	128(%rdi,%rbx), %zmm10, %zmm10
	QUAD $0x031f5cef48a57162                   // vpxorq	192(%rdi,%rbx), %zmm11, %zmm11
	LONG $0x48fd5162; WORD $0xe0db             // vpandq	%zmm8, %zmm0, %zmm12
	LONG $0x48fd5162; WORD $0xe9db             // vpandq	%zmm9, %zmm0, %zmm13
	LONG $0x48fd5162; WORD $0xf2db             // vpandq	%zmm10, %zmm0, %zmm14
	LONG $0x48fd5162; WORD $0xfbdb             // vpandq	%zmm11, %zmm0, %zmm15
	LONG $0x48bdd162; WORD $0xd073; BYTE $0x01 // vpsrlq	$1, %zmm8, %zmm8
	LONG $0x48b5d162; WORD $0xd173; BYTE $0x01 // vpsrlq	$1, %zmm9, %zmm9
	LONG $0x48add162; WORD $0xd273; BYTE $0x01 // vpsrlq	$1, %zmm10, %zmm10
	LONG $0x48a5d162; WORD $0xd373; BYTE $0x01 // vpsrlq	$1, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xc0db             // vpandq	%zmm0, %zmm8, %zmm8
	LONG $0x48bd5162; WORD $0xc4d4             // vpaddq	%zmm12, %zmm8, %zmm8
	LONG $0x48b57162; WORD $0xc8db             // vpandq	%zmm0, %zmm9, %zmm9
	LONG $0x48b55162; WORD $0xcdd4             // vpaddq	%zmm13, %zmm9, %zmm9
	LONG $0x48ad7162; WORD $0xd0db             // vpandq	%zmm0, %zmm10, %zmm10
	LONG $0x48ad5162; WORD $0xd6d4             // vpaddq	%zmm14, %zmm10, %zmm10
	LONG $0x48a57162; WORD $0xd8db             // vpandq	%zmm0, %zmm11, %zmm11
	LONG $0x48a55162; WORD $0xdfd4             // vpaddq	%zmm15, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xe1db             // vpandq	%zmm1, %zmm8, %zmm12
	LONG $0x48b57162; WORD $0xe9db             // vpandq	%zmm1, %zmm9, %zmm13
	LONG $0x48ad7162; WORD $0xf1db             // vpandq	%zmm1, %zmm10, %zmm14
	LONG $0x48a57162; WORD $0xf9db             // vpandq	%zmm1, %zmm11, %zmm15
	LONG $0x48bdd162; WORD $0xd073; BYTE $0x02 // vpsrlq	$2, %zmm8, %zmm8
	LONG $0x48b5d162; WORD $0xd173; BYTE $0x02 // vpsrlq	$2, %zmm9, %zmm9
	LONG $0x48add162; WORD $0xd273; BYTE $0x02 // vpsrlq	$2, %zmm10, %zmm10
	LONG $0x48a5d162; WORD $0xd373; BYTE $0x02 // vpsrlq	$2, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xc1db             // vpandq	%zmm1, %zmm8, %zmm8
	LONG $0x48bd5162; WORD $0xc4d4             // vpaddq	%zmm12, %zmm8, %zmm8
	LONG $0x48b57162; WORD $0xc9db             // vpandq	%zmm1, %zmm9, %zmm9
	LONG $0x48b55162; WORD $0xcdd4             // vpaddq	%zmm13, %zmm9, %zmm9
	LONG $0x48ad7162; WORD $0xd1db             // vpandq	%zmm1, %zmm10, %zmm10
	LONG $0x48ad5162; WORD $0xd6d4             // vpaddq	%zmm14, %zmm10, %zmm10
	LONG $0x48a57162; WORD $0xd9db             // vpandq	%zmm1, %zmm11, %zmm11
	LONG $0x48a55162; WORD $0xdfd4             // vpaddq	%zmm15, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xe2db             // vpandq	%zmm2, %zmm8, %zmm12
	LONG $0x48b57162; WORD $0xeadb             // vpandq	%zmm2, %zmm9, %zmm13
	LONG $0x48ad7162; WORD $0xf2db             // vpandq	%zmm2, %zmm10, %zmm14
	LONG $0x48a57162; WORD $0xfadb             // vpandq	%zmm2, %zmm11, %zmm15
	LONG $0x48bdd162; WORD $0xd073; BYTE $0x04 // vpsrlq	$4, %zmm8, %zmm8
	LONG $0x48b5d162; WORD $0xd173; BYTE $0x04 // vpsrlq	$4, %zmm9, %zmm9
	LONG $0x48add162; WORD $0xd273; BYTE $0x04 // vpsrlq	$4, %zmm10, %zmm10
	LONG $0x48a5d162; WORD $0xd373; BYTE $0x04 // vpsrlq	$4, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xc2db             // vpandq	%zmm2, %zmm8, %zmm8
	LONG $0x48bd5162; WORD $0xc4d4             // vpaddq	%zmm12, %zmm8, %zmm8
	LONG $0x48b57162; WORD $0xcadb             // vpandq	%zmm2, %zmm9, %zmm9
	LONG $0x48b55162; WORD $0xcdd4             // vpaddq	%zmm13, %zmm9, %zmm9
	LONG $0x48ad7162; WORD $0xd2db             // vpandq	%zmm2, %zmm10, %zmm10
	LONG $0x48ad5162; WORD $0xd6d4             // vpaddq	%zmm14, %zmm10, %zmm10
	LONG $0x48a57162; WORD $0xdadb             // vpandq	%zmm2, %zmm11, %zmm11
	LONG $0x48a55162; WORD $0xdfd4             // vpaddq	%zmm15, %zmm11, %zmm11
	LONG $0x48bd7262; WORD $0xc340             // vpmullq	%zmm3, %zmm8, %zmm8
	LONG $0x48b57262; WORD $0xcb40             // vpmullq	%zmm3, %zmm9, %zmm9
	LONG $0x48ad7262; WORD $0xd340             // vpmullq	%zmm3, %zmm10, %zmm10
	LONG $0x48a57262; WORD $0xdb40             // vpmullq	%zmm3, %zmm11, %zmm11
	LONG $0x48bdd162; WORD $0xd073; BYTE $0x38 // vpsrlq	$56, %zmm8, %zmm8
	LONG $0x48bdf162; WORD $0xe4d4             // vpaddq	%zmm4, %zmm8, %zmm4
	LONG $0x48bdd162; WORD $0xd173; BYTE $0x38 // vpsrlq	$56, %zmm9, %zmm8
	LONG $0x48bdf162; WORD $0xedd4             // vpaddq	%zmm5, %zmm8, %zmm5
	LONG $0x48bdd162; WORD $0xd273; BYTE $0x38 // vpsrlq	$56, %zmm10, %zmm8
	LONG $0x48bdf162; WORD $0xf6d4             // vpaddq	%zmm6, %zmm8, %zmm6
	LONG $0x48bdd162; WORD $0xd373; BYTE $0x38 // vpsrlq	$56, %zmm11, %zmm8
	LONG $0x48bdf162; WORD $0xffd4             // vpaddq	%zmm7, %zmm8, %zmm7
	LONG $0x00c38148; WORD $0x0001; BYTE $0x00 // addq	$256, %rbx                      # imm = 0x100
	WORD $0x3948; BYTE $0xd9                   // cmpq	%rbx, %rcx
	JNE  LBB5_6
	LONG $0x48d5f162; WORD $0xc4d4             // vpaddq	%zmm4, %zmm5, %zmm0
	LONG $0x48cdf162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm6, %zmm0
	LONG $0x48c5f162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm7, %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 $0x7ef9e1c4; BYTE $0xc1               // vmovq	%xmm0, %rcx
	WORD $0x394d; BYTE $0xe7                   // cmpq	%r12, %r15
	JE   LBB5_18

LBB5_8:
	WORD $0xc089 // movl	%eax, %eax
	WORD $0xf631 // xorl	%esi, %esi

LBB5_9:
	LONG $0xf63c8b49             // movq	(%r14,%rsi,8), %rdi
	LONG $0xf57c3349; BYTE $0x00 // xorq	(%r13,%rsi,8), %rdi
	WORD $0x894c; BYTE $0xcb     // movq	%r9, %rbx
	WORD $0x2148; BYTE $0xfb     // andq	%rdi, %rbx
	WORD $0xd148; BYTE $0xef     // shrq	%rdi
	WORD $0x214c; BYTE $0xcf     // andq	%r9, %rdi
	WORD $0x0148; BYTE $0xdf     // addq	%rbx, %rdi
	WORD $0x8948; BYTE $0xfb     // movq	%rdi, %rbx
	WORD $0x214c; BYTE $0xd3     // andq	%r10, %rbx
	LONG $0x02efc148             // shrq	$2, %rdi
	WORD $0x214c; BYTE $0xd7     // andq	%r10, %rdi
	WORD $0x0148; BYTE $0xdf     // addq	%rbx, %rdi
	WORD $0x8948; BYTE $0xfb     // movq	%rdi, %rbx
	WORD $0x214c; BYTE $0xdb     // andq	%r11, %rbx
	LONG $0x04efc148             // shrq	$4, %rdi
	WORD $0x214c; BYTE $0xdf     // andq	%r11, %rdi
	WORD $0x0148; BYTE $0xdf     // addq	%rbx, %rdi
	LONG $0xf8af0f49             // imulq	%r8, %rdi
	LONG $0x38efc148             // shrq	$56, %rdi
	WORD $0x0148; BYTE $0xf9     // addq	%rdi, %rcx
	LONG $0x01c68348             // addq	$1, %rsi
	WORD $0xf039                 // cmpl	%esi, %eax
	JNE  LBB5_9
	JMP  LBB5_18

LBB5_2:
	WORD $0xc931 // xorl	%ecx, %ecx

LBB5_11:
	WORD $0x8b4d; BYTE $0x08 // movq	(%r8), %r9
	LONG $0x08508b4d         // movq	8(%r8), %r10
	LONG $0x10588b4d         // movq	16(%r8), %r11
	LONG $0x18408b4d         // movq	24(%r8), %r8
	LONG $0xff788d44         // leal	-1(%rax), %r15d
	LONG $0x1fff8341         // cmpl	$31, %r15d
	JAE  LBB5_13
	WORD $0x8949; BYTE $0xfe // movq	%rdi, %r14
	WORD $0x8949; BYTE $0xf4 // movq	%rsi, %r12
	JMP  LBB5_16

LBB5_13:
	LONG $0x01c78349               // addq	$1, %r15
	WORD $0x894c; BYTE $0xfb       // movq	%r15, %rbx
	LONG $0xe0e38348               // andq	$-32, %rbx
	LONG $0xdf348d4c               // leaq	(%rdi,%rbx,8), %r14
	LONG $0xde248d4c               // leaq	(%rsi,%rbx,8), %r12
	WORD $0xd829                   // subl	%ebx, %eax
	LONG $0x6ef9e1c4; BYTE $0xc1   // vmovq	%rcx, %xmm0
	LONG $0x48fdd262; WORD $0xc97c // vpbroadcastq	%r9, %zmm1
	LONG $0x48fdd262; WORD $0xd27c // vpbroadcastq	%r10, %zmm2
	LONG $0x48fdd262; WORD $0xdb7c // vpbroadcastq	%r11, %zmm3
	LONG $0x48fdd262; WORD $0xe87c // vpbroadcastq	%r8, %zmm5
	LONG $0xe4efd9c5               // vpxor	%xmm4, %xmm4, %xmm4
	WORD $0xc931                   // xorl	%ecx, %ecx
	LONG $0xf6efc9c5               // vpxor	%xmm6, %xmm6, %xmm6
	LONG $0xffefc1c5               // vpxor	%xmm7, %xmm7, %xmm7

LBB5_14:
	LONG $0x48fe7162; WORD $0x046f; BYTE $0xce // vmovdqu64	(%rsi,%rcx,8), %zmm8
	QUAD $0x01ce4c6f48fe7162                   // vmovdqu64	64(%rsi,%rcx,8), %zmm9
	QUAD $0x02ce546f48fe7162                   // vmovdqu64	128(%rsi,%rcx,8), %zmm10
	QUAD $0x03ce5c6f48fe7162                   // vmovdqu64	192(%rsi,%rcx,8), %zmm11
	LONG $0x48bd7162; WORD $0x04ef; BYTE $0xcf // vpxorq	(%rdi,%rcx,8), %zmm8, %zmm8
	QUAD $0x01cf4cef48b57162                   // vpxorq	64(%rdi,%rcx,8), %zmm9, %zmm9
	QUAD $0x02cf54ef48ad7162                   // vpxorq	128(%rdi,%rcx,8), %zmm10, %zmm10
	QUAD $0x03cf5cef48a57162                   // vpxorq	192(%rdi,%rcx,8), %zmm11, %zmm11
	LONG $0x48f55162; WORD $0xe0db             // vpandq	%zmm8, %zmm1, %zmm12
	LONG $0x48f55162; WORD $0xe9db             // vpandq	%zmm9, %zmm1, %zmm13
	LONG $0x48f55162; WORD $0xf2db             // vpandq	%zmm10, %zmm1, %zmm14
	LONG $0x48f55162; WORD $0xfbdb             // vpandq	%zmm11, %zmm1, %zmm15
	LONG $0x48bdd162; WORD $0xd073; BYTE $0x01 // vpsrlq	$1, %zmm8, %zmm8
	LONG $0x48b5d162; WORD $0xd173; BYTE $0x01 // vpsrlq	$1, %zmm9, %zmm9
	LONG $0x48add162; WORD $0xd273; BYTE $0x01 // vpsrlq	$1, %zmm10, %zmm10
	LONG $0x48a5d162; WORD $0xd373; BYTE $0x01 // vpsrlq	$1, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xc1db             // vpandq	%zmm1, %zmm8, %zmm8
	LONG $0x48bd5162; WORD $0xc4d4             // vpaddq	%zmm12, %zmm8, %zmm8
	LONG $0x48b57162; WORD $0xc9db             // vpandq	%zmm1, %zmm9, %zmm9
	LONG $0x48b55162; WORD $0xcdd4             // vpaddq	%zmm13, %zmm9, %zmm9
	LONG $0x48ad7162; WORD $0xd1db             // vpandq	%zmm1, %zmm10, %zmm10
	LONG $0x48ad5162; WORD $0xd6d4             // vpaddq	%zmm14, %zmm10, %zmm10
	LONG $0x48a57162; WORD $0xd9db             // vpandq	%zmm1, %zmm11, %zmm11
	LONG $0x48a55162; WORD $0xdfd4             // vpaddq	%zmm15, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xe2db             // vpandq	%zmm2, %zmm8, %zmm12
	LONG $0x48b57162; WORD $0xeadb             // vpandq	%zmm2, %zmm9, %zmm13
	LONG $0x48ad7162; WORD $0xf2db             // vpandq	%zmm2, %zmm10, %zmm14
	LONG $0x48a57162; WORD $0xfadb             // vpandq	%zmm2, %zmm11, %zmm15
	LONG $0x48bdd162; WORD $0xd073; BYTE $0x02 // vpsrlq	$2, %zmm8, %zmm8
	LONG $0x48b5d162; WORD $0xd173; BYTE $0x02 // vpsrlq	$2, %zmm9, %zmm9
	LONG $0x48add162; WORD $0xd273; BYTE $0x02 // vpsrlq	$2, %zmm10, %zmm10
	LONG $0x48a5d162; WORD $0xd373; BYTE $0x02 // vpsrlq	$2, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xc2db             // vpandq	%zmm2, %zmm8, %zmm8
	LONG $0x48bd5162; WORD $0xc4d4             // vpaddq	%zmm12, %zmm8, %zmm8
	LONG $0x48b57162; WORD $0xcadb             // vpandq	%zmm2, %zmm9, %zmm9
	LONG $0x48b55162; WORD $0xcdd4             // vpaddq	%zmm13, %zmm9, %zmm9
	LONG $0x48ad7162; WORD $0xd2db             // vpandq	%zmm2, %zmm10, %zmm10
	LONG $0x48ad5162; WORD $0xd6d4             // vpaddq	%zmm14, %zmm10, %zmm10
	LONG $0x48a57162; WORD $0xdadb             // vpandq	%zmm2, %zmm11, %zmm11
	LONG $0x48a55162; WORD $0xdfd4             // vpaddq	%zmm15, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xe3db             // vpandq	%zmm3, %zmm8, %zmm12
	LONG $0x48b57162; WORD $0xebdb             // vpandq	%zmm3, %zmm9, %zmm13
	LONG $0x48ad7162; WORD $0xf3db             // vpandq	%zmm3, %zmm10, %zmm14
	LONG $0x48a57162; WORD $0xfbdb             // vpandq	%zmm3, %zmm11, %zmm15
	LONG $0x48bdd162; WORD $0xd073; BYTE $0x04 // vpsrlq	$4, %zmm8, %zmm8
	LONG $0x48b5d162; WORD $0xd173; BYTE $0x04 // vpsrlq	$4, %zmm9, %zmm9
	LONG $0x48add162; WORD $0xd273; BYTE $0x04 // vpsrlq	$4, %zmm10, %zmm10
	LONG $0x48a5d162; WORD $0xd373; BYTE $0x04 // vpsrlq	$4, %zmm11, %zmm11
	LONG $0x48bd7162; WORD $0xc3db             // vpandq	%zmm3, %zmm8, %zmm8
	LONG $0x48bd5162; WORD $0xc4d4             // vpaddq	%zmm12, %zmm8, %zmm8
	LONG $0x48b57162; WORD $0xcbdb             // vpandq	%zmm3, %zmm9, %zmm9
	LONG $0x48b55162; WORD $0xcdd4             // vpaddq	%zmm13, %zmm9, %zmm9
	LONG $0x48ad7162; WORD $0xd3db             // vpandq	%zmm3, %zmm10, %zmm10
	LONG $0x48ad5162; WORD $0xd6d4             // vpaddq	%zmm14, %zmm10, %zmm10
	LONG $0x48a57162; WORD $0xdbdb             // vpandq	%zmm3, %zmm11, %zmm11
	LONG $0x48a55162; WORD $0xdfd4             // vpaddq	%zmm15, %zmm11, %zmm11
	LONG $0x48bd7262; WORD $0xc540             // vpmullq	%zmm5, %zmm8, %zmm8
	LONG $0x48b57262; WORD $0xcd40             // vpmullq	%zmm5, %zmm9, %zmm9
	LONG $0x48ad7262; WORD $0xd540             // vpmullq	%zmm5, %zmm10, %zmm10
	LONG $0x48a57262; WORD $0xdd40             // vpmullq	%zmm5, %zmm11, %zmm11
	LONG $0x48bdd162; WORD $0xd073; BYTE $0x38 // vpsrlq	$56, %zmm8, %zmm8
	LONG $0x48bdf162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm8, %zmm0
	LONG $0x48bdd162; WORD $0xd173; BYTE $0x38 // vpsrlq	$56, %zmm9, %zmm8
	LONG $0x48bdf162; WORD $0xe4d4             // vpaddq	%zmm4, %zmm8, %zmm4
	LONG $0x48bdd162; WORD $0xd273; BYTE $0x38 // vpsrlq	$56, %zmm10, %zmm8
	LONG $0x48bdf162; WORD $0xf6d4             // vpaddq	%zmm6, %zmm8, %zmm6
	LONG $0x48bdd162; WORD $0xd373; BYTE $0x38 // vpsrlq	$56, %zmm11, %zmm8
	LONG $0x48bdf162; WORD $0xffd4             // vpaddq	%zmm7, %zmm8, %zmm7
	LONG $0x20c18348                           // addq	$32, %rcx
	WORD $0x3948; BYTE $0xcb                   // cmpq	%rcx, %rbx
	JNE  LBB5_14
	LONG $0x48ddf162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm4, %zmm0
	LONG $0x48cdf162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm6, %zmm0
	LONG $0x48c5f162; WORD $0xc0d4             // vpaddq	%zmm0, %zmm7, %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 $0x7ef9e1c4; BYTE $0xc1               // vmovq	%xmm0, %rcx
	WORD $0x3949; BYTE $0xdf                   // cmpq	%rbx, %r15
	JE   LBB5_18

LBB5_16:
	WORD $0xc089 // movl	%eax, %eax
	WORD $0xf631 // xorl	%esi, %esi

LBB5_17:
	LONG $0xf43c8b49         // movq	(%r12,%rsi,8), %rdi
	LONG $0xf63c3349         // xorq	(%r14,%rsi,8), %rdi
	WORD $0x894c; BYTE $0xcb // movq	%r9, %rbx
	WORD $0x2148; BYTE $0xfb // andq	%rdi, %rbx
	WORD $0xd148; BYTE $0xef // shrq	%rdi
	WORD $0x214c; BYTE $0xcf // andq	%r9, %rdi
	WORD $0x0148; BYTE $0xdf // addq	%rbx, %rdi
	WORD $0x8948; BYTE $0xfb // movq	%rdi, %rbx
	WORD $0x214c; BYTE $0xd3 // andq	%r10, %rbx
	LONG $0x02efc148         // shrq	$2, %rdi
	WORD $0x214c; BYTE $0xd7 // andq	%r10, %rdi
	WORD $0x0148; BYTE $0xdf // addq	%rbx, %rdi
	WORD $0x8948; BYTE $0xfb // movq	%rdi, %rbx
	WORD $0x214c; BYTE $0xdb // andq	%r11, %rbx
	LONG $0x04efc148         // shrq	$4, %rdi
	WORD $0x214c; BYTE $0xdf // andq	%r11, %rdi
	WORD $0x0148; BYTE $0xdf // addq	%rbx, %rdi
	LONG $0xf8af0f49         // imulq	%r8, %rdi
	LONG $0x38efc148         // shrq	$56, %rdi
	WORD $0x0148; BYTE $0xf9 // addq	%rdi, %rcx
	LONG $0x01c68348         // addq	$1, %rsi
	WORD $0xf039             // cmpl	%esi, %eax
	JNE  LBB5_17

LBB5_18:
	WORD $0x8948; BYTE $0x0a // movq	%rcx, (%rdx)
	LONG $0xd8658d48         // leaq	-40(%rbp), %rsp
	BYTE $0x5b               // popq	%rbx
	WORD $0x5c41             // popq	%r12
	WORD $0x5d41             // popq	%r13
	WORD $0x5e41             // popq	%r14
	WORD $0x5f41             // popq	%r15
	BYTE $0x5d               // popq	%rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // retq
