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

TEXT ·_and_avx512(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ n+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x8548; BYTE $0xd2 // test	rdx, rdx
	JE   LBB0_13
	LONG $0x20fa8348         // cmp	rdx, 32
	JB   LBB0_2
	LONG $0xd6048d48         // lea	rax, [rsi + 8*rdx]
	WORD $0x3948; BYTE $0xf8 // cmp	rax, rdi
	JBE  LBB0_6
	LONG $0xd7048d48         // lea	rax, [rdi + 8*rdx]
	WORD $0x3948; BYTE $0xf0 // cmp	rax, rsi
	JBE  LBB0_6

LBB0_2:
	WORD $0xc031 // xor	eax, eax

LBB0_9:
	WORD $0x8949; BYTE $0xc0 // mov	r8, rax
	WORD $0xf749; BYTE $0xd0 // not	r8
	WORD $0x0149; BYTE $0xd0 // add	r8, rdx
	WORD $0x8949; BYTE $0xd1 // mov	r9, rdx
	LONG $0x03e18349         // and	r9, 3
	JE   LBB0_11

LBB0_10:
	LONG $0xc60c8b48         // mov	rcx, qword ptr [rsi + 8*rax]
	LONG $0xc70c2148         // and	qword ptr [rdi + 8*rax], rcx
	WORD $0xff48; BYTE $0xc0 // inc	rax
	WORD $0xff49; BYTE $0xc9 // dec	r9
	JNE  LBB0_10

LBB0_11:
	LONG $0x03f88349 // cmp	r8, 3
	JB   LBB0_13

LBB0_12:
	LONG $0xc60c8b48             // mov	rcx, qword ptr [rsi + 8*rax]
	LONG $0xc70c2148             // and	qword ptr [rdi + 8*rax], rcx
	LONG $0xc64c8b48; BYTE $0x08 // mov	rcx, qword ptr [rsi + 8*rax + 8]
	LONG $0xc74c2148; BYTE $0x08 // and	qword ptr [rdi + 8*rax + 8], rcx
	LONG $0xc64c8b48; BYTE $0x10 // mov	rcx, qword ptr [rsi + 8*rax + 16]
	LONG $0xc74c2148; BYTE $0x10 // and	qword ptr [rdi + 8*rax + 16], rcx
	LONG $0xc64c8b48; BYTE $0x18 // mov	rcx, qword ptr [rsi + 8*rax + 24]
	LONG $0xc74c2148; BYTE $0x18 // and	qword ptr [rdi + 8*rax + 24], rcx
	LONG $0x04c08348             // add	rax, 4
	WORD $0x3948; BYTE $0xc2     // cmp	rdx, rax
	JNE  LBB0_12
	JMP  LBB0_13

LBB0_6:
	WORD $0x8948; BYTE $0xd0 // mov	rax, rdx
	LONG $0xe0e08348         // and	rax, -32
	WORD $0xc931             // xor	ecx, ecx

LBB0_7:
	LONG $0x487cf162; WORD $0x0410; BYTE $0xcf // vmovups	zmm0, zmmword ptr [rdi + 8*rcx]
	QUAD $0x01cf4c10487cf162                   // vmovups	zmm1, zmmword ptr [rdi + 8*rcx + 64]
	QUAD $0x02cf5410487cf162                   // vmovups	zmm2, zmmword ptr [rdi + 8*rcx + 128]
	QUAD $0x03cf5c10487cf162                   // vmovups	zmm3, zmmword ptr [rdi + 8*rcx + 192]
	LONG $0x487cf162; WORD $0x0454; BYTE $0xce // vandps	zmm0, zmm0, zmmword ptr [rsi + 8*rcx]
	QUAD $0x01ce4c544874f162                   // vandps	zmm1, zmm1, zmmword ptr [rsi + 8*rcx + 64]
	QUAD $0x02ce5454486cf162                   // vandps	zmm2, zmm2, zmmword ptr [rsi + 8*rcx + 128]
	QUAD $0x03ce5c544864f162                   // vandps	zmm3, zmm3, zmmword ptr [rsi + 8*rcx + 192]
	LONG $0x487cf162; WORD $0x0411; BYTE $0xcf // vmovups	zmmword ptr [rdi + 8*rcx], zmm0
	QUAD $0x01cf4c11487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 64], zmm1
	QUAD $0x02cf5411487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 128], zmm2
	QUAD $0x03cf5c11487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 192], zmm3
	LONG $0x20c18348                           // add	rcx, 32
	WORD $0x3948; BYTE $0xc8                   // cmp	rax, rcx
	JNE  LBB0_7
	WORD $0x3948; BYTE $0xd0                   // cmp	rax, rdx
	JNE  LBB0_9

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

TEXT ·_andn_avx512(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ n+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x8548; BYTE $0xd2 // test	rdx, rdx
	JE   LBB1_13
	LONG $0x20fa8348         // cmp	rdx, 32
	JB   LBB1_2
	LONG $0xd6048d48         // lea	rax, [rsi + 8*rdx]
	WORD $0x3948; BYTE $0xf8 // cmp	rax, rdi
	JBE  LBB1_6
	LONG $0xd7048d48         // lea	rax, [rdi + 8*rdx]
	WORD $0x3948; BYTE $0xf0 // cmp	rax, rsi
	JBE  LBB1_6

LBB1_2:
	WORD $0xc031 // xor	eax, eax

LBB1_9:
	WORD $0x8949; BYTE $0xc0 // mov	r8, rax
	WORD $0xf749; BYTE $0xd0 // not	r8
	WORD $0xc2f6; BYTE $0x01 // test	dl, 1
	JE   LBB1_11
	LONG $0xc60c8b48         // mov	rcx, qword ptr [rsi + 8*rax]
	WORD $0xf748; BYTE $0xd1 // not	rcx
	LONG $0xc70c2148         // and	qword ptr [rdi + 8*rax], rcx
	LONG $0x01c88348         // or	rax, 1

LBB1_11:
	WORD $0x0149; BYTE $0xd0 // add	r8, rdx
	JE   LBB1_13

LBB1_12:
	LONG $0xc60c8b48             // mov	rcx, qword ptr [rsi + 8*rax]
	WORD $0xf748; BYTE $0xd1     // not	rcx
	LONG $0xc70c2148             // and	qword ptr [rdi + 8*rax], rcx
	LONG $0xc64c8b48; BYTE $0x08 // mov	rcx, qword ptr [rsi + 8*rax + 8]
	WORD $0xf748; BYTE $0xd1     // not	rcx
	LONG $0xc74c2148; BYTE $0x08 // and	qword ptr [rdi + 8*rax + 8], rcx
	LONG $0x02c08348             // add	rax, 2
	WORD $0x3948; BYTE $0xc2     // cmp	rdx, rax
	JNE  LBB1_12
	JMP  LBB1_13

LBB1_6:
	WORD $0x8948; BYTE $0xd0 // mov	rax, rdx
	LONG $0xe0e08348         // and	rax, -32
	WORD $0xc931             // xor	ecx, ecx

LBB1_7:
	LONG $0x487cf162; WORD $0x0410; BYTE $0xce // vmovups	zmm0, zmmword ptr [rsi + 8*rcx]
	QUAD $0x01ce4c10487cf162                   // vmovups	zmm1, zmmword ptr [rsi + 8*rcx + 64]
	QUAD $0x02ce5410487cf162                   // vmovups	zmm2, zmmword ptr [rsi + 8*rcx + 128]
	QUAD $0x03ce5c10487cf162                   // vmovups	zmm3, zmmword ptr [rsi + 8*rcx + 192]
	LONG $0x487cf162; WORD $0x0455; BYTE $0xcf // vandnps	zmm0, zmm0, zmmword ptr [rdi + 8*rcx]
	QUAD $0x01cf4c554874f162                   // vandnps	zmm1, zmm1, zmmword ptr [rdi + 8*rcx + 64]
	QUAD $0x02cf5455486cf162                   // vandnps	zmm2, zmm2, zmmword ptr [rdi + 8*rcx + 128]
	QUAD $0x03cf5c554864f162                   // vandnps	zmm3, zmm3, zmmword ptr [rdi + 8*rcx + 192]
	LONG $0x487cf162; WORD $0x0411; BYTE $0xcf // vmovups	zmmword ptr [rdi + 8*rcx], zmm0
	QUAD $0x01cf4c11487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 64], zmm1
	QUAD $0x02cf5411487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 128], zmm2
	QUAD $0x03cf5c11487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 192], zmm3
	LONG $0x20c18348                           // add	rcx, 32
	WORD $0x3948; BYTE $0xc8                   // cmp	rax, rcx
	JNE  LBB1_7
	WORD $0x3948; BYTE $0xd0                   // cmp	rax, rdx
	JNE  LBB1_9

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

TEXT ·_or_avx512(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ n+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x8548; BYTE $0xd2 // test	rdx, rdx
	JE   LBB2_13
	LONG $0x20fa8348         // cmp	rdx, 32
	JB   LBB2_2
	LONG $0xd6048d48         // lea	rax, [rsi + 8*rdx]
	WORD $0x3948; BYTE $0xf8 // cmp	rax, rdi
	JBE  LBB2_6
	LONG $0xd7048d48         // lea	rax, [rdi + 8*rdx]
	WORD $0x3948; BYTE $0xf0 // cmp	rax, rsi
	JBE  LBB2_6

LBB2_2:
	WORD $0xc031 // xor	eax, eax

LBB2_9:
	WORD $0x8949; BYTE $0xc0 // mov	r8, rax
	WORD $0xf749; BYTE $0xd0 // not	r8
	WORD $0x0149; BYTE $0xd0 // add	r8, rdx
	WORD $0x8949; BYTE $0xd1 // mov	r9, rdx
	LONG $0x03e18349         // and	r9, 3
	JE   LBB2_11

LBB2_10:
	LONG $0xc60c8b48         // mov	rcx, qword ptr [rsi + 8*rax]
	LONG $0xc70c0948         // or	qword ptr [rdi + 8*rax], rcx
	WORD $0xff48; BYTE $0xc0 // inc	rax
	WORD $0xff49; BYTE $0xc9 // dec	r9
	JNE  LBB2_10

LBB2_11:
	LONG $0x03f88349 // cmp	r8, 3
	JB   LBB2_13

LBB2_12:
	LONG $0xc60c8b48             // mov	rcx, qword ptr [rsi + 8*rax]
	LONG $0xc70c0948             // or	qword ptr [rdi + 8*rax], rcx
	LONG $0xc64c8b48; BYTE $0x08 // mov	rcx, qword ptr [rsi + 8*rax + 8]
	LONG $0xc74c0948; BYTE $0x08 // or	qword ptr [rdi + 8*rax + 8], rcx
	LONG $0xc64c8b48; BYTE $0x10 // mov	rcx, qword ptr [rsi + 8*rax + 16]
	LONG $0xc74c0948; BYTE $0x10 // or	qword ptr [rdi + 8*rax + 16], rcx
	LONG $0xc64c8b48; BYTE $0x18 // mov	rcx, qword ptr [rsi + 8*rax + 24]
	LONG $0xc74c0948; BYTE $0x18 // or	qword ptr [rdi + 8*rax + 24], rcx
	LONG $0x04c08348             // add	rax, 4
	WORD $0x3948; BYTE $0xc2     // cmp	rdx, rax
	JNE  LBB2_12
	JMP  LBB2_13

LBB2_6:
	WORD $0x8948; BYTE $0xd0 // mov	rax, rdx
	LONG $0xe0e08348         // and	rax, -32
	WORD $0xc931             // xor	ecx, ecx

LBB2_7:
	LONG $0x487cf162; WORD $0x0410; BYTE $0xcf // vmovups	zmm0, zmmword ptr [rdi + 8*rcx]
	QUAD $0x01cf4c10487cf162                   // vmovups	zmm1, zmmword ptr [rdi + 8*rcx + 64]
	QUAD $0x02cf5410487cf162                   // vmovups	zmm2, zmmword ptr [rdi + 8*rcx + 128]
	QUAD $0x03cf5c10487cf162                   // vmovups	zmm3, zmmword ptr [rdi + 8*rcx + 192]
	LONG $0x487cf162; WORD $0x0456; BYTE $0xce // vorps	zmm0, zmm0, zmmword ptr [rsi + 8*rcx]
	QUAD $0x01ce4c564874f162                   // vorps	zmm1, zmm1, zmmword ptr [rsi + 8*rcx + 64]
	QUAD $0x02ce5456486cf162                   // vorps	zmm2, zmm2, zmmword ptr [rsi + 8*rcx + 128]
	QUAD $0x03ce5c564864f162                   // vorps	zmm3, zmm3, zmmword ptr [rsi + 8*rcx + 192]
	LONG $0x487cf162; WORD $0x0411; BYTE $0xcf // vmovups	zmmword ptr [rdi + 8*rcx], zmm0
	QUAD $0x01cf4c11487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 64], zmm1
	QUAD $0x02cf5411487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 128], zmm2
	QUAD $0x03cf5c11487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 192], zmm3
	LONG $0x20c18348                           // add	rcx, 32
	WORD $0x3948; BYTE $0xc8                   // cmp	rax, rcx
	JNE  LBB2_7
	WORD $0x3948; BYTE $0xd0                   // cmp	rax, rdx
	JNE  LBB2_9

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

TEXT ·_xor_avx512(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ n+16(FP), DX
	BYTE $0x55               // push	rbp
	WORD $0x8948; BYTE $0xe5 // mov	rbp, rsp
	LONG $0xf8e48348         // and	rsp, -8
	WORD $0x8548; BYTE $0xd2 // test	rdx, rdx
	JE   LBB3_13
	LONG $0x20fa8348         // cmp	rdx, 32
	JB   LBB3_2
	LONG $0xd6048d48         // lea	rax, [rsi + 8*rdx]
	WORD $0x3948; BYTE $0xf8 // cmp	rax, rdi
	JBE  LBB3_6
	LONG $0xd7048d48         // lea	rax, [rdi + 8*rdx]
	WORD $0x3948; BYTE $0xf0 // cmp	rax, rsi
	JBE  LBB3_6

LBB3_2:
	WORD $0xc031 // xor	eax, eax

LBB3_9:
	WORD $0x8949; BYTE $0xc0 // mov	r8, rax
	WORD $0xf749; BYTE $0xd0 // not	r8
	WORD $0x0149; BYTE $0xd0 // add	r8, rdx
	WORD $0x8949; BYTE $0xd1 // mov	r9, rdx
	LONG $0x03e18349         // and	r9, 3
	JE   LBB3_11

LBB3_10:
	LONG $0xc60c8b48         // mov	rcx, qword ptr [rsi + 8*rax]
	LONG $0xc70c3148         // xor	qword ptr [rdi + 8*rax], rcx
	WORD $0xff48; BYTE $0xc0 // inc	rax
	WORD $0xff49; BYTE $0xc9 // dec	r9
	JNE  LBB3_10

LBB3_11:
	LONG $0x03f88349 // cmp	r8, 3
	JB   LBB3_13

LBB3_12:
	LONG $0xc60c8b48             // mov	rcx, qword ptr [rsi + 8*rax]
	LONG $0xc70c3148             // xor	qword ptr [rdi + 8*rax], rcx
	LONG $0xc64c8b48; BYTE $0x08 // mov	rcx, qword ptr [rsi + 8*rax + 8]
	LONG $0xc74c3148; BYTE $0x08 // xor	qword ptr [rdi + 8*rax + 8], rcx
	LONG $0xc64c8b48; BYTE $0x10 // mov	rcx, qword ptr [rsi + 8*rax + 16]
	LONG $0xc74c3148; BYTE $0x10 // xor	qword ptr [rdi + 8*rax + 16], rcx
	LONG $0xc64c8b48; BYTE $0x18 // mov	rcx, qword ptr [rsi + 8*rax + 24]
	LONG $0xc74c3148; BYTE $0x18 // xor	qword ptr [rdi + 8*rax + 24], rcx
	LONG $0x04c08348             // add	rax, 4
	WORD $0x3948; BYTE $0xc2     // cmp	rdx, rax
	JNE  LBB3_12
	JMP  LBB3_13

LBB3_6:
	WORD $0x8948; BYTE $0xd0 // mov	rax, rdx
	LONG $0xe0e08348         // and	rax, -32
	WORD $0xc931             // xor	ecx, ecx

LBB3_7:
	LONG $0x487cf162; WORD $0x0410; BYTE $0xcf // vmovups	zmm0, zmmword ptr [rdi + 8*rcx]
	QUAD $0x01cf4c10487cf162                   // vmovups	zmm1, zmmword ptr [rdi + 8*rcx + 64]
	QUAD $0x02cf5410487cf162                   // vmovups	zmm2, zmmword ptr [rdi + 8*rcx + 128]
	QUAD $0x03cf5c10487cf162                   // vmovups	zmm3, zmmword ptr [rdi + 8*rcx + 192]
	LONG $0x487cf162; WORD $0x0457; BYTE $0xce // vxorps	zmm0, zmm0, zmmword ptr [rsi + 8*rcx]
	QUAD $0x01ce4c574874f162                   // vxorps	zmm1, zmm1, zmmword ptr [rsi + 8*rcx + 64]
	QUAD $0x02ce5457486cf162                   // vxorps	zmm2, zmm2, zmmword ptr [rsi + 8*rcx + 128]
	QUAD $0x03ce5c574864f162                   // vxorps	zmm3, zmm3, zmmword ptr [rsi + 8*rcx + 192]
	LONG $0x487cf162; WORD $0x0411; BYTE $0xcf // vmovups	zmmword ptr [rdi + 8*rcx], zmm0
	QUAD $0x01cf4c11487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 64], zmm1
	QUAD $0x02cf5411487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 128], zmm2
	QUAD $0x03cf5c11487cf162                   // vmovups	zmmword ptr [rdi + 8*rcx + 192], zmm3
	LONG $0x20c18348                           // add	rcx, 32
	WORD $0x3948; BYTE $0xc8                   // cmp	rax, rcx
	JNE  LBB3_7
	WORD $0x3948; BYTE $0xd0                   // cmp	rax, rdx
	JNE  LBB3_9

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

TEXT ·_and_many_avx512(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ dims+16(FP), DX
	BYTE $0x55                                 // push	rbp
	WORD $0x8948; BYTE $0xe5                   // mov	rbp, rsp
	WORD $0x5741                               // push	r15
	WORD $0x5641                               // push	r14
	WORD $0x5541                               // push	r13
	WORD $0x5441                               // push	r12
	BYTE $0x53                                 // push	rbx
	LONG $0xf8e48348                           // and	rsp, -8
	LONG $0x68ec8348                           // sub	rsp, 104
	LONG $0xffffffb9; BYTE $0xff               // mov	ecx, 4294967295
	WORD $0x2148; BYTE $0xd1                   // and	rcx, rdx
	JE   LBB4_18
	LONG $0x20eac148                           // shr	rdx, 32
	JE   LBB4_18
	LONG $0x02fa8348                           // cmp	rdx, 2
	LONG $0x0001bc41; WORD $0x0000             // mov	r12d, 1
	LONG $0xe2430f4c                           // cmovae	r12, rdx
	LONG $0xc0978d48; WORD $0x0000; BYTE $0x00 // lea	rdx, [rdi + 192]
	LONG $0x000200bb; BYTE $0x00               // mov	ebx, 512
	LONG $0x0000c0b8; BYTE $0x00               // mov	eax, 192
	LONG $0x24448948; BYTE $0x18               // mov	qword ptr [rsp + 24], rax
	WORD $0xc031                               // xor	eax, eax
	LONG $0x24448948; BYTE $0x10               // mov	qword ptr [rsp + 16], rax
	WORD $0xc031                               // xor	eax, eax
	LONG $0x24448948; BYTE $0x08               // mov	qword ptr [rsp + 8], rax
	WORD $0x3145; BYTE $0xff                   // xor	r15d, r15d
	LONG $0x244c8948; BYTE $0x20               // mov	qword ptr [rsp + 32], rcx
	JMP  LBB4_3

LBB4_17:
	LONG $0x245c8b48; BYTE $0x30               // mov	rbx, qword ptr [rsp + 48]
	LONG $0x00c38148; WORD $0x0002; BYTE $0x00 // add	rbx, 512
	LONG $0x2444ff48; BYTE $0x08               // inc	qword ptr [rsp + 8]
	QUAD $0xfffe001024448148; BYTE $0xff       // add	qword ptr [rsp + 16], -512
	QUAD $0x0010001824448148; BYTE $0x00       // add	qword ptr [rsp + 24], 4096
	LONG $0x00c28148; WORD $0x0010; BYTE $0x00 // add	rdx, 4096
	LONG $0x24448b48; BYTE $0x28               // mov	rax, qword ptr [rsp + 40]
	WORD $0x8949; BYTE $0xc7                   // mov	r15, rax
	LONG $0x244c8b48; BYTE $0x20               // mov	rcx, qword ptr [rsp + 32]
	WORD $0x3948; BYTE $0xc8                   // cmp	rax, rcx
	JAE  LBB4_18

LBB4_3:
	WORD $0x3948; BYTE $0xcb                   // cmp	rbx, rcx
	WORD $0x8948; BYTE $0xc8                   // mov	rax, rcx
	LONG $0x245c8948; BYTE $0x30               // mov	qword ptr [rsp + 48], rbx
	LONG $0xc3420f48                           // cmovb	rax, rbx
	LONG $0x009f8d49; WORD $0x0002; BYTE $0x00 // lea	rbx, [r15 + 512]
	WORD $0x3948; BYTE $0xcb                   // cmp	rbx, rcx
	LONG $0x245c8948; BYTE $0x28               // mov	qword ptr [rsp + 40], rbx
	LONG $0xcb420f48                           // cmovb	rcx, rbx
	WORD $0x3949; BYTE $0xcf                   // cmp	r15, rcx
	JAE  LBB4_17
	LONG $0x244c8b48; BYTE $0x10               // mov	rcx, qword ptr [rsp + 16]
	LONG $0x08148d4c                           // lea	r10, [rax + rcx]
	LONG $0xe0e28349                           // and	r10, -32
	LONG $0x245c8b48; BYTE $0x08               // mov	rbx, qword ptr [rsp + 8]
	WORD $0x8948; BYTE $0xd9                   // mov	rcx, rbx
	LONG $0x09e1c148                           // shl	rcx, 9
	WORD $0x8949; BYTE $0xc5                   // mov	r13, rax
	WORD $0x2949; BYTE $0xcd                   // sub	r13, rcx
	LONG $0x0ce3c148                           // shl	rbx, 12
	LONG $0x1f0c8d48                           // lea	rcx, [rdi + rbx]
	LONG $0x244c8948; BYTE $0x60               // mov	qword ptr [rsp + 96], rcx
	LONG $0x245c8948; BYTE $0x50               // mov	qword ptr [rsp + 80], rbx
	LONG $0xeb1c8d4a                           // lea	rbx, [rbx + 8*r13]
	WORD $0x8948; BYTE $0xd9                   // mov	rcx, rbx
	LONG $0x245c8948; BYTE $0x58               // mov	qword ptr [rsp + 88], rbx
	LONG $0x3b0c8d48                           // lea	rcx, [rbx + rdi]
	LONG $0x244c8948; BYTE $0x48               // mov	qword ptr [rsp + 72], rcx
	WORD $0x894c; BYTE $0xe9                   // mov	rcx, r13
	LONG $0xe0e18348                           // and	rcx, -32
	LONG $0x244c8948; BYTE $0x40               // mov	qword ptr [rsp + 64], rcx
	WORD $0x014c; BYTE $0xf9                   // add	rcx, r15
	LONG $0x244c8948; BYTE $0x38               // mov	qword ptr [rsp + 56], rcx
	WORD $0x3145; BYTE $0xc9                   // xor	r9d, r9d
	JMP  LBB4_5

LBB4_16:
	WORD $0xff49; BYTE $0xc1 // inc	r9
	WORD $0x394d; BYTE $0xe1 // cmp	r9, r12
	JE   LBB4_17

LBB4_5:
	LONG $0xce048b4e             // mov	r8, qword ptr [rsi + 8*r9]
	WORD $0x894c; BYTE $0xfb     // mov	rbx, r15
	LONG $0x20fd8349             // cmp	r13, 32
	JB   LBB4_11
	LONG $0x244c8b48; BYTE $0x58 // mov	rcx, qword ptr [rsp + 88]
	WORD $0x014c; BYTE $0xc1     // add	rcx, r8
	LONG $0x244c3948; BYTE $0x60 // cmp	qword ptr [rsp + 96], rcx
	JAE  LBB4_8
	LONG $0x244c8b48; BYTE $0x50 // mov	rcx, qword ptr [rsp + 80]
	WORD $0x014c; BYTE $0xc1     // add	rcx, r8
	WORD $0x894c; BYTE $0xfb     // mov	rbx, r15
	LONG $0x244c3b48; BYTE $0x48 // cmp	rcx, qword ptr [rsp + 72]
	JB   LBB4_11

LBB4_8:
	LONG $0x244c8b48; BYTE $0x18 // mov	rcx, qword ptr [rsp + 24]
	LONG $0x081c8d49             // lea	rbx, [r8 + rcx]
	WORD $0xc931                 // xor	ecx, ecx

LBB4_9:
	QUAD $0xfdca4410487cf162                   // vmovups	zmm0, zmmword ptr [rdx + 8*rcx - 192]
	QUAD $0xfeca4c10487cf162                   // vmovups	zmm1, zmmword ptr [rdx + 8*rcx - 128]
	QUAD $0xffca5410487cf162                   // vmovups	zmm2, zmmword ptr [rdx + 8*rcx - 64]
	LONG $0x487cf162; WORD $0x1c10; BYTE $0xca // vmovups	zmm3, zmmword ptr [rdx + 8*rcx]
	QUAD $0xfdcb4454487cf162                   // vandps	zmm0, zmm0, zmmword ptr [rbx + 8*rcx - 192]
	QUAD $0xfecb4c544874f162                   // vandps	zmm1, zmm1, zmmword ptr [rbx + 8*rcx - 128]
	QUAD $0xffcb5454486cf162                   // vandps	zmm2, zmm2, zmmword ptr [rbx + 8*rcx - 64]
	LONG $0x4864f162; WORD $0x1c54; BYTE $0xcb // vandps	zmm3, zmm3, zmmword ptr [rbx + 8*rcx]
	QUAD $0xfdca4411487cf162                   // vmovups	zmmword ptr [rdx + 8*rcx - 192], zmm0
	QUAD $0xfeca4c11487cf162                   // vmovups	zmmword ptr [rdx + 8*rcx - 128], zmm1
	QUAD $0xffca5411487cf162                   // vmovups	zmmword ptr [rdx + 8*rcx - 64], zmm2
	LONG $0x487cf162; WORD $0x1c11; BYTE $0xca // vmovups	zmmword ptr [rdx + 8*rcx], zmm3
	LONG $0x20c18348                           // add	rcx, 32
	WORD $0x3949; BYTE $0xca                   // cmp	r10, rcx
	JNE  LBB4_9
	LONG $0x245c8b48; BYTE $0x38               // mov	rbx, qword ptr [rsp + 56]
	LONG $0x246c3b4c; BYTE $0x40               // cmp	r13, qword ptr [rsp + 64]
	JE   LBB4_16

LBB4_11:
	WORD $0xc189             // mov	ecx, eax
	WORD $0xd929             // sub	ecx, ebx
	WORD $0x8949; BYTE $0xdb // mov	r11, rbx
	WORD $0xf749; BYTE $0xd3 // not	r11
	WORD $0x0149; BYTE $0xc3 // add	r11, rax
	WORD $0xc1f6; BYTE $0x03 // test	cl, 3
	JE   LBB4_14
	WORD $0xc189             // mov	ecx, eax
	WORD $0xd928             // sub	cl, bl
	LONG $0xf1b60f44         // movzx	r14d, cl
	LONG $0x03e68341         // and	r14d, 3

LBB4_13:
	LONG $0xd80c8b49         // mov	rcx, qword ptr [r8 + 8*rbx]
	LONG $0xdf0c2148         // and	qword ptr [rdi + 8*rbx], rcx
	WORD $0xff48; BYTE $0xc3 // inc	rbx
	WORD $0xff49; BYTE $0xce // dec	r14
	JNE  LBB4_13

LBB4_14:
	LONG $0x03fb8349 // cmp	r11, 3
	JB   LBB4_16

LBB4_15:
	LONG $0xd80c8b49             // mov	rcx, qword ptr [r8 + 8*rbx]
	LONG $0xdf0c2148             // and	qword ptr [rdi + 8*rbx], rcx
	LONG $0xd84c8b49; BYTE $0x08 // mov	rcx, qword ptr [r8 + 8*rbx + 8]
	LONG $0xdf4c2148; BYTE $0x08 // and	qword ptr [rdi + 8*rbx + 8], rcx
	LONG $0xd84c8b49; BYTE $0x10 // mov	rcx, qword ptr [r8 + 8*rbx + 16]
	LONG $0xdf4c2148; BYTE $0x10 // and	qword ptr [rdi + 8*rbx + 16], rcx
	LONG $0xd84c8b49; BYTE $0x18 // mov	rcx, qword ptr [r8 + 8*rbx + 24]
	LONG $0xdf4c2148; BYTE $0x18 // and	qword ptr [rdi + 8*rbx + 24], rcx
	LONG $0x04c38348             // add	rbx, 4
	WORD $0x3948; BYTE $0xd8     // cmp	rax, rbx
	JNE  LBB4_15
	JMP  LBB4_16

LBB4_18:
	LONG $0xd8658d48         // lea	rsp, [rbp - 40]
	BYTE $0x5b               // pop	rbx
	WORD $0x5c41             // pop	r12
	WORD $0x5d41             // pop	r13
	WORD $0x5e41             // pop	r14
	WORD $0x5f41             // pop	r15
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_andn_many_avx512(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ dims+16(FP), DX
	BYTE $0x55                                 // push	rbp
	WORD $0x8948; BYTE $0xe5                   // mov	rbp, rsp
	WORD $0x5741                               // push	r15
	WORD $0x5641                               // push	r14
	WORD $0x5541                               // push	r13
	WORD $0x5441                               // push	r12
	BYTE $0x53                                 // push	rbx
	LONG $0xf8e48348                           // and	rsp, -8
	LONG $0x58ec8348                           // sub	rsp, 88
	LONG $0xffffffb9; BYTE $0xff               // mov	ecx, 4294967295
	WORD $0x2148; BYTE $0xd1                   // and	rcx, rdx
	JE   LBB5_17
	LONG $0x20eac148                           // shr	rdx, 32
	JE   LBB5_17
	LONG $0x02fa8348                           // cmp	rdx, 2
	LONG $0x0001bc41; WORD $0x0000             // mov	r12d, 1
	LONG $0xe2430f4c                           // cmovae	r12, rdx
	LONG $0xc0978d48; WORD $0x0000; BYTE $0x00 // lea	rdx, [rdi + 192]
	LONG $0x000200b8; BYTE $0x00               // mov	eax, 512
	LONG $0x0000c0bb; BYTE $0x00               // mov	ebx, 192
	LONG $0x245c8948; BYTE $0x10               // mov	qword ptr [rsp + 16], rbx
	WORD $0xdb31                               // xor	ebx, ebx
	LONG $0x245c8948; BYTE $0x08               // mov	qword ptr [rsp + 8], rbx
	WORD $0xdb31                               // xor	ebx, ebx
	LONG $0x241c8948                           // mov	qword ptr [rsp], rbx
	WORD $0x3145; BYTE $0xff                   // xor	r15d, r15d
	LONG $0x244c8948; BYTE $0x18               // mov	qword ptr [rsp + 24], rcx
	JMP  LBB5_3

LBB5_16:
	LONG $0x24448b48; BYTE $0x28               // mov	rax, qword ptr [rsp + 40]
	LONG $0x02000548; WORD $0x0000             // add	rax, 512
	LONG $0x2404ff48                           // inc	qword ptr [rsp]
	QUAD $0xfffe000824448148; BYTE $0xff       // add	qword ptr [rsp + 8], -512
	QUAD $0x0010001024448148; BYTE $0x00       // add	qword ptr [rsp + 16], 4096
	LONG $0x00c28148; WORD $0x0010; BYTE $0x00 // add	rdx, 4096
	LONG $0x245c8b48; BYTE $0x20               // mov	rbx, qword ptr [rsp + 32]
	WORD $0x8949; BYTE $0xdf                   // mov	r15, rbx
	LONG $0x244c8b48; BYTE $0x18               // mov	rcx, qword ptr [rsp + 24]
	WORD $0x3948; BYTE $0xcb                   // cmp	rbx, rcx
	JAE  LBB5_17

LBB5_3:
	WORD $0x3948; BYTE $0xc8                   // cmp	rax, rcx
	WORD $0x8949; BYTE $0xcd                   // mov	r13, rcx
	LONG $0x24448948; BYTE $0x28               // mov	qword ptr [rsp + 40], rax
	LONG $0xe8420f4c                           // cmovb	r13, rax
	LONG $0x00878d49; WORD $0x0002; BYTE $0x00 // lea	rax, [r15 + 512]
	WORD $0x3948; BYTE $0xc8                   // cmp	rax, rcx
	LONG $0x24448948; BYTE $0x20               // mov	qword ptr [rsp + 32], rax
	LONG $0xc8420f48                           // cmovb	rcx, rax
	WORD $0x3949; BYTE $0xcf                   // cmp	r15, rcx
	JAE  LBB5_16
	LONG $0x24448b48; BYTE $0x08               // mov	rax, qword ptr [rsp + 8]
	LONG $0x280c8d4a                           // lea	rcx, [rax + r13]
	LONG $0xe0e18348                           // and	rcx, -32
	LONG $0x24048b48                           // mov	rax, qword ptr [rsp]
	WORD $0x8948; BYTE $0xc3                   // mov	rbx, rax
	LONG $0x09e3c148                           // shl	rbx, 9
	WORD $0x894d; BYTE $0xee                   // mov	r14, r13
	WORD $0x2949; BYTE $0xde                   // sub	r14, rbx
	LONG $0x0ce0c148                           // shl	rax, 12
	LONG $0x071c8d48                           // lea	rbx, [rdi + rax]
	LONG $0x245c8948; BYTE $0x50               // mov	qword ptr [rsp + 80], rbx
	LONG $0x24448948; BYTE $0x48               // mov	qword ptr [rsp + 72], rax
	LONG $0xf0148d4e                           // lea	r10, [rax + 8*r14]
	LONG $0x3a048d49                           // lea	rax, [r10 + rdi]
	LONG $0x24448948; BYTE $0x40               // mov	qword ptr [rsp + 64], rax
	WORD $0x894c; BYTE $0xf0                   // mov	rax, r14
	LONG $0xe0e08348                           // and	rax, -32
	LONG $0x24448948; BYTE $0x38               // mov	qword ptr [rsp + 56], rax
	WORD $0x014c; BYTE $0xf8                   // add	rax, r15
	LONG $0x24448948; BYTE $0x30               // mov	qword ptr [rsp + 48], rax
	WORD $0x3145; BYTE $0xc9                   // xor	r9d, r9d
	JMP  LBB5_5

LBB5_15:
	WORD $0xff49; BYTE $0xc1 // inc	r9
	WORD $0x394d; BYTE $0xe1 // cmp	r9, r12
	JE   LBB5_16

LBB5_5:
	LONG $0xce048b4e             // mov	r8, qword ptr [rsi + 8*r9]
	WORD $0x894c; BYTE $0xfb     // mov	rbx, r15
	LONG $0x20fe8349             // cmp	r14, 32
	JB   LBB5_11
	LONG $0x101c8d4b             // lea	rbx, [r8 + r10]
	LONG $0x245c3948; BYTE $0x50 // cmp	qword ptr [rsp + 80], rbx
	JAE  LBB5_8
	LONG $0x24448b48; BYTE $0x48 // mov	rax, qword ptr [rsp + 72]
	LONG $0x001c8d4d             // lea	r11, [r8 + rax]
	WORD $0x894c; BYTE $0xfb     // mov	rbx, r15
	LONG $0x245c3b4c; BYTE $0x40 // cmp	r11, qword ptr [rsp + 64]
	JB   LBB5_11

LBB5_8:
	LONG $0x24448b48; BYTE $0x10 // mov	rax, qword ptr [rsp + 16]
	LONG $0x001c8d49             // lea	rbx, [r8 + rax]
	WORD $0x3145; BYTE $0xdb     // xor	r11d, r11d

LBB5_9:
	QUAD $0xfddb4410487cb162                   // vmovups	zmm0, zmmword ptr [rbx + 8*r11 - 192]
	QUAD $0xfedb4c10487cb162                   // vmovups	zmm1, zmmword ptr [rbx + 8*r11 - 128]
	QUAD $0xffdb5410487cb162                   // vmovups	zmm2, zmmword ptr [rbx + 8*r11 - 64]
	LONG $0x487cb162; WORD $0x1c10; BYTE $0xdb // vmovups	zmm3, zmmword ptr [rbx + 8*r11]
	QUAD $0xfdda4455487cb162                   // vandnps	zmm0, zmm0, zmmword ptr [rdx + 8*r11 - 192]
	QUAD $0xfeda4c554874b162                   // vandnps	zmm1, zmm1, zmmword ptr [rdx + 8*r11 - 128]
	QUAD $0xffda5455486cb162                   // vandnps	zmm2, zmm2, zmmword ptr [rdx + 8*r11 - 64]
	LONG $0x4864b162; WORD $0x1c55; BYTE $0xda // vandnps	zmm3, zmm3, zmmword ptr [rdx + 8*r11]
	QUAD $0xfdda4411487cb162                   // vmovups	zmmword ptr [rdx + 8*r11 - 192], zmm0
	QUAD $0xfeda4c11487cb162                   // vmovups	zmmword ptr [rdx + 8*r11 - 128], zmm1
	QUAD $0xffda5411487cb162                   // vmovups	zmmword ptr [rdx + 8*r11 - 64], zmm2
	LONG $0x487cb162; WORD $0x1c11; BYTE $0xda // vmovups	zmmword ptr [rdx + 8*r11], zmm3
	LONG $0x20c38349                           // add	r11, 32
	WORD $0x394c; BYTE $0xd9                   // cmp	rcx, r11
	JNE  LBB5_9
	LONG $0x245c8b48; BYTE $0x30               // mov	rbx, qword ptr [rsp + 48]
	LONG $0x24743b4c; BYTE $0x38               // cmp	r14, qword ptr [rsp + 56]
	JE   LBB5_15

LBB5_11:
	WORD $0x8944; BYTE $0xe8 // mov	eax, r13d
	WORD $0xd829             // sub	eax, ebx
	LONG $0x015b8d4c         // lea	r11, [rbx + 1]
	WORD $0x01a8             // test	al, 1
	JE   LBB5_13
	LONG $0xd8048b49         // mov	rax, qword ptr [r8 + 8*rbx]
	WORD $0xf748; BYTE $0xd0 // not	rax
	LONG $0xdf042148         // and	qword ptr [rdi + 8*rbx], rax
	WORD $0x894c; BYTE $0xdb // mov	rbx, r11

LBB5_13:
	WORD $0x394d; BYTE $0xdd // cmp	r13, r11
	JE   LBB5_15

LBB5_14:
	LONG $0xd8048b49             // mov	rax, qword ptr [r8 + 8*rbx]
	WORD $0xf748; BYTE $0xd0     // not	rax
	LONG $0xdf042148             // and	qword ptr [rdi + 8*rbx], rax
	LONG $0xd8448b49; BYTE $0x08 // mov	rax, qword ptr [r8 + 8*rbx + 8]
	WORD $0xf748; BYTE $0xd0     // not	rax
	LONG $0xdf442148; BYTE $0x08 // and	qword ptr [rdi + 8*rbx + 8], rax
	LONG $0x02c38348             // add	rbx, 2
	WORD $0x3949; BYTE $0xdd     // cmp	r13, rbx
	JNE  LBB5_14
	JMP  LBB5_15

LBB5_17:
	LONG $0xd8658d48         // lea	rsp, [rbp - 40]
	BYTE $0x5b               // pop	rbx
	WORD $0x5c41             // pop	r12
	WORD $0x5d41             // pop	r13
	WORD $0x5e41             // pop	r14
	WORD $0x5f41             // pop	r15
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_or_many_avx512(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ dims+16(FP), DX
	BYTE $0x55                                 // push	rbp
	WORD $0x8948; BYTE $0xe5                   // mov	rbp, rsp
	WORD $0x5741                               // push	r15
	WORD $0x5641                               // push	r14
	WORD $0x5541                               // push	r13
	WORD $0x5441                               // push	r12
	BYTE $0x53                                 // push	rbx
	LONG $0xf8e48348                           // and	rsp, -8
	LONG $0x68ec8348                           // sub	rsp, 104
	LONG $0xffffffb9; BYTE $0xff               // mov	ecx, 4294967295
	WORD $0x2148; BYTE $0xd1                   // and	rcx, rdx
	JE   LBB6_18
	LONG $0x20eac148                           // shr	rdx, 32
	JE   LBB6_18
	LONG $0x02fa8348                           // cmp	rdx, 2
	LONG $0x0001bc41; WORD $0x0000             // mov	r12d, 1
	LONG $0xe2430f4c                           // cmovae	r12, rdx
	LONG $0xc0978d48; WORD $0x0000; BYTE $0x00 // lea	rdx, [rdi + 192]
	LONG $0x000200bb; BYTE $0x00               // mov	ebx, 512
	LONG $0x0000c0b8; BYTE $0x00               // mov	eax, 192
	LONG $0x24448948; BYTE $0x18               // mov	qword ptr [rsp + 24], rax
	WORD $0xc031                               // xor	eax, eax
	LONG $0x24448948; BYTE $0x10               // mov	qword ptr [rsp + 16], rax
	WORD $0xc031                               // xor	eax, eax
	LONG $0x24448948; BYTE $0x08               // mov	qword ptr [rsp + 8], rax
	WORD $0x3145; BYTE $0xff                   // xor	r15d, r15d
	LONG $0x244c8948; BYTE $0x20               // mov	qword ptr [rsp + 32], rcx
	JMP  LBB6_3

LBB6_17:
	LONG $0x245c8b48; BYTE $0x30               // mov	rbx, qword ptr [rsp + 48]
	LONG $0x00c38148; WORD $0x0002; BYTE $0x00 // add	rbx, 512
	LONG $0x2444ff48; BYTE $0x08               // inc	qword ptr [rsp + 8]
	QUAD $0xfffe001024448148; BYTE $0xff       // add	qword ptr [rsp + 16], -512
	QUAD $0x0010001824448148; BYTE $0x00       // add	qword ptr [rsp + 24], 4096
	LONG $0x00c28148; WORD $0x0010; BYTE $0x00 // add	rdx, 4096
	LONG $0x24448b48; BYTE $0x28               // mov	rax, qword ptr [rsp + 40]
	WORD $0x8949; BYTE $0xc7                   // mov	r15, rax
	LONG $0x244c8b48; BYTE $0x20               // mov	rcx, qword ptr [rsp + 32]
	WORD $0x3948; BYTE $0xc8                   // cmp	rax, rcx
	JAE  LBB6_18

LBB6_3:
	WORD $0x3948; BYTE $0xcb                   // cmp	rbx, rcx
	WORD $0x8948; BYTE $0xc8                   // mov	rax, rcx
	LONG $0x245c8948; BYTE $0x30               // mov	qword ptr [rsp + 48], rbx
	LONG $0xc3420f48                           // cmovb	rax, rbx
	LONG $0x009f8d49; WORD $0x0002; BYTE $0x00 // lea	rbx, [r15 + 512]
	WORD $0x3948; BYTE $0xcb                   // cmp	rbx, rcx
	LONG $0x245c8948; BYTE $0x28               // mov	qword ptr [rsp + 40], rbx
	LONG $0xcb420f48                           // cmovb	rcx, rbx
	WORD $0x3949; BYTE $0xcf                   // cmp	r15, rcx
	JAE  LBB6_17
	LONG $0x244c8b48; BYTE $0x10               // mov	rcx, qword ptr [rsp + 16]
	LONG $0x08148d4c                           // lea	r10, [rax + rcx]
	LONG $0xe0e28349                           // and	r10, -32
	LONG $0x245c8b48; BYTE $0x08               // mov	rbx, qword ptr [rsp + 8]
	WORD $0x8948; BYTE $0xd9                   // mov	rcx, rbx
	LONG $0x09e1c148                           // shl	rcx, 9
	WORD $0x8949; BYTE $0xc5                   // mov	r13, rax
	WORD $0x2949; BYTE $0xcd                   // sub	r13, rcx
	LONG $0x0ce3c148                           // shl	rbx, 12
	LONG $0x1f0c8d48                           // lea	rcx, [rdi + rbx]
	LONG $0x244c8948; BYTE $0x60               // mov	qword ptr [rsp + 96], rcx
	LONG $0x245c8948; BYTE $0x50               // mov	qword ptr [rsp + 80], rbx
	LONG $0xeb1c8d4a                           // lea	rbx, [rbx + 8*r13]
	WORD $0x8948; BYTE $0xd9                   // mov	rcx, rbx
	LONG $0x245c8948; BYTE $0x58               // mov	qword ptr [rsp + 88], rbx
	LONG $0x3b0c8d48                           // lea	rcx, [rbx + rdi]
	LONG $0x244c8948; BYTE $0x48               // mov	qword ptr [rsp + 72], rcx
	WORD $0x894c; BYTE $0xe9                   // mov	rcx, r13
	LONG $0xe0e18348                           // and	rcx, -32
	LONG $0x244c8948; BYTE $0x40               // mov	qword ptr [rsp + 64], rcx
	WORD $0x014c; BYTE $0xf9                   // add	rcx, r15
	LONG $0x244c8948; BYTE $0x38               // mov	qword ptr [rsp + 56], rcx
	WORD $0x3145; BYTE $0xc9                   // xor	r9d, r9d
	JMP  LBB6_5

LBB6_16:
	WORD $0xff49; BYTE $0xc1 // inc	r9
	WORD $0x394d; BYTE $0xe1 // cmp	r9, r12
	JE   LBB6_17

LBB6_5:
	LONG $0xce048b4e             // mov	r8, qword ptr [rsi + 8*r9]
	WORD $0x894c; BYTE $0xfb     // mov	rbx, r15
	LONG $0x20fd8349             // cmp	r13, 32
	JB   LBB6_11
	LONG $0x244c8b48; BYTE $0x58 // mov	rcx, qword ptr [rsp + 88]
	WORD $0x014c; BYTE $0xc1     // add	rcx, r8
	LONG $0x244c3948; BYTE $0x60 // cmp	qword ptr [rsp + 96], rcx
	JAE  LBB6_8
	LONG $0x244c8b48; BYTE $0x50 // mov	rcx, qword ptr [rsp + 80]
	WORD $0x014c; BYTE $0xc1     // add	rcx, r8
	WORD $0x894c; BYTE $0xfb     // mov	rbx, r15
	LONG $0x244c3b48; BYTE $0x48 // cmp	rcx, qword ptr [rsp + 72]
	JB   LBB6_11

LBB6_8:
	LONG $0x244c8b48; BYTE $0x18 // mov	rcx, qword ptr [rsp + 24]
	LONG $0x081c8d49             // lea	rbx, [r8 + rcx]
	WORD $0xc931                 // xor	ecx, ecx

LBB6_9:
	QUAD $0xfdca4410487cf162                   // vmovups	zmm0, zmmword ptr [rdx + 8*rcx - 192]
	QUAD $0xfeca4c10487cf162                   // vmovups	zmm1, zmmword ptr [rdx + 8*rcx - 128]
	QUAD $0xffca5410487cf162                   // vmovups	zmm2, zmmword ptr [rdx + 8*rcx - 64]
	LONG $0x487cf162; WORD $0x1c10; BYTE $0xca // vmovups	zmm3, zmmword ptr [rdx + 8*rcx]
	QUAD $0xfdcb4456487cf162                   // vorps	zmm0, zmm0, zmmword ptr [rbx + 8*rcx - 192]
	QUAD $0xfecb4c564874f162                   // vorps	zmm1, zmm1, zmmword ptr [rbx + 8*rcx - 128]
	QUAD $0xffcb5456486cf162                   // vorps	zmm2, zmm2, zmmword ptr [rbx + 8*rcx - 64]
	LONG $0x4864f162; WORD $0x1c56; BYTE $0xcb // vorps	zmm3, zmm3, zmmword ptr [rbx + 8*rcx]
	QUAD $0xfdca4411487cf162                   // vmovups	zmmword ptr [rdx + 8*rcx - 192], zmm0
	QUAD $0xfeca4c11487cf162                   // vmovups	zmmword ptr [rdx + 8*rcx - 128], zmm1
	QUAD $0xffca5411487cf162                   // vmovups	zmmword ptr [rdx + 8*rcx - 64], zmm2
	LONG $0x487cf162; WORD $0x1c11; BYTE $0xca // vmovups	zmmword ptr [rdx + 8*rcx], zmm3
	LONG $0x20c18348                           // add	rcx, 32
	WORD $0x3949; BYTE $0xca                   // cmp	r10, rcx
	JNE  LBB6_9
	LONG $0x245c8b48; BYTE $0x38               // mov	rbx, qword ptr [rsp + 56]
	LONG $0x246c3b4c; BYTE $0x40               // cmp	r13, qword ptr [rsp + 64]
	JE   LBB6_16

LBB6_11:
	WORD $0xc189             // mov	ecx, eax
	WORD $0xd929             // sub	ecx, ebx
	WORD $0x8949; BYTE $0xdb // mov	r11, rbx
	WORD $0xf749; BYTE $0xd3 // not	r11
	WORD $0x0149; BYTE $0xc3 // add	r11, rax
	WORD $0xc1f6; BYTE $0x03 // test	cl, 3
	JE   LBB6_14
	WORD $0xc189             // mov	ecx, eax
	WORD $0xd928             // sub	cl, bl
	LONG $0xf1b60f44         // movzx	r14d, cl
	LONG $0x03e68341         // and	r14d, 3

LBB6_13:
	LONG $0xd80c8b49         // mov	rcx, qword ptr [r8 + 8*rbx]
	LONG $0xdf0c0948         // or	qword ptr [rdi + 8*rbx], rcx
	WORD $0xff48; BYTE $0xc3 // inc	rbx
	WORD $0xff49; BYTE $0xce // dec	r14
	JNE  LBB6_13

LBB6_14:
	LONG $0x03fb8349 // cmp	r11, 3
	JB   LBB6_16

LBB6_15:
	LONG $0xd80c8b49             // mov	rcx, qword ptr [r8 + 8*rbx]
	LONG $0xdf0c0948             // or	qword ptr [rdi + 8*rbx], rcx
	LONG $0xd84c8b49; BYTE $0x08 // mov	rcx, qword ptr [r8 + 8*rbx + 8]
	LONG $0xdf4c0948; BYTE $0x08 // or	qword ptr [rdi + 8*rbx + 8], rcx
	LONG $0xd84c8b49; BYTE $0x10 // mov	rcx, qword ptr [r8 + 8*rbx + 16]
	LONG $0xdf4c0948; BYTE $0x10 // or	qword ptr [rdi + 8*rbx + 16], rcx
	LONG $0xd84c8b49; BYTE $0x18 // mov	rcx, qword ptr [r8 + 8*rbx + 24]
	LONG $0xdf4c0948; BYTE $0x18 // or	qword ptr [rdi + 8*rbx + 24], rcx
	LONG $0x04c38348             // add	rbx, 4
	WORD $0x3948; BYTE $0xd8     // cmp	rax, rbx
	JNE  LBB6_15
	JMP  LBB6_16

LBB6_18:
	LONG $0xd8658d48         // lea	rsp, [rbp - 40]
	BYTE $0x5b               // pop	rbx
	WORD $0x5c41             // pop	r12
	WORD $0x5d41             // pop	r13
	WORD $0x5e41             // pop	r14
	WORD $0x5f41             // pop	r15
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret

TEXT ·_xor_many_avx512(SB), $0-32
	MOVQ a+0(FP), DI
	MOVQ b+8(FP), SI
	MOVQ dims+16(FP), DX
	BYTE $0x55                                 // push	rbp
	WORD $0x8948; BYTE $0xe5                   // mov	rbp, rsp
	WORD $0x5741                               // push	r15
	WORD $0x5641                               // push	r14
	WORD $0x5541                               // push	r13
	WORD $0x5441                               // push	r12
	BYTE $0x53                                 // push	rbx
	LONG $0xf8e48348                           // and	rsp, -8
	LONG $0x68ec8348                           // sub	rsp, 104
	LONG $0xffffffb9; BYTE $0xff               // mov	ecx, 4294967295
	WORD $0x2148; BYTE $0xd1                   // and	rcx, rdx
	JE   LBB7_18
	LONG $0x20eac148                           // shr	rdx, 32
	JE   LBB7_18
	LONG $0x02fa8348                           // cmp	rdx, 2
	LONG $0x0001bc41; WORD $0x0000             // mov	r12d, 1
	LONG $0xe2430f4c                           // cmovae	r12, rdx
	LONG $0xc0978d48; WORD $0x0000; BYTE $0x00 // lea	rdx, [rdi + 192]
	LONG $0x000200bb; BYTE $0x00               // mov	ebx, 512
	LONG $0x0000c0b8; BYTE $0x00               // mov	eax, 192
	LONG $0x24448948; BYTE $0x18               // mov	qword ptr [rsp + 24], rax
	WORD $0xc031                               // xor	eax, eax
	LONG $0x24448948; BYTE $0x10               // mov	qword ptr [rsp + 16], rax
	WORD $0xc031                               // xor	eax, eax
	LONG $0x24448948; BYTE $0x08               // mov	qword ptr [rsp + 8], rax
	WORD $0x3145; BYTE $0xff                   // xor	r15d, r15d
	LONG $0x244c8948; BYTE $0x20               // mov	qword ptr [rsp + 32], rcx
	JMP  LBB7_3

LBB7_17:
	LONG $0x245c8b48; BYTE $0x30               // mov	rbx, qword ptr [rsp + 48]
	LONG $0x00c38148; WORD $0x0002; BYTE $0x00 // add	rbx, 512
	LONG $0x2444ff48; BYTE $0x08               // inc	qword ptr [rsp + 8]
	QUAD $0xfffe001024448148; BYTE $0xff       // add	qword ptr [rsp + 16], -512
	QUAD $0x0010001824448148; BYTE $0x00       // add	qword ptr [rsp + 24], 4096
	LONG $0x00c28148; WORD $0x0010; BYTE $0x00 // add	rdx, 4096
	LONG $0x24448b48; BYTE $0x28               // mov	rax, qword ptr [rsp + 40]
	WORD $0x8949; BYTE $0xc7                   // mov	r15, rax
	LONG $0x244c8b48; BYTE $0x20               // mov	rcx, qword ptr [rsp + 32]
	WORD $0x3948; BYTE $0xc8                   // cmp	rax, rcx
	JAE  LBB7_18

LBB7_3:
	WORD $0x3948; BYTE $0xcb                   // cmp	rbx, rcx
	WORD $0x8948; BYTE $0xc8                   // mov	rax, rcx
	LONG $0x245c8948; BYTE $0x30               // mov	qword ptr [rsp + 48], rbx
	LONG $0xc3420f48                           // cmovb	rax, rbx
	LONG $0x009f8d49; WORD $0x0002; BYTE $0x00 // lea	rbx, [r15 + 512]
	WORD $0x3948; BYTE $0xcb                   // cmp	rbx, rcx
	LONG $0x245c8948; BYTE $0x28               // mov	qword ptr [rsp + 40], rbx
	LONG $0xcb420f48                           // cmovb	rcx, rbx
	WORD $0x3949; BYTE $0xcf                   // cmp	r15, rcx
	JAE  LBB7_17
	LONG $0x244c8b48; BYTE $0x10               // mov	rcx, qword ptr [rsp + 16]
	LONG $0x08148d4c                           // lea	r10, [rax + rcx]
	LONG $0xe0e28349                           // and	r10, -32
	LONG $0x245c8b48; BYTE $0x08               // mov	rbx, qword ptr [rsp + 8]
	WORD $0x8948; BYTE $0xd9                   // mov	rcx, rbx
	LONG $0x09e1c148                           // shl	rcx, 9
	WORD $0x8949; BYTE $0xc5                   // mov	r13, rax
	WORD $0x2949; BYTE $0xcd                   // sub	r13, rcx
	LONG $0x0ce3c148                           // shl	rbx, 12
	LONG $0x1f0c8d48                           // lea	rcx, [rdi + rbx]
	LONG $0x244c8948; BYTE $0x60               // mov	qword ptr [rsp + 96], rcx
	LONG $0x245c8948; BYTE $0x50               // mov	qword ptr [rsp + 80], rbx
	LONG $0xeb1c8d4a                           // lea	rbx, [rbx + 8*r13]
	WORD $0x8948; BYTE $0xd9                   // mov	rcx, rbx
	LONG $0x245c8948; BYTE $0x58               // mov	qword ptr [rsp + 88], rbx
	LONG $0x3b0c8d48                           // lea	rcx, [rbx + rdi]
	LONG $0x244c8948; BYTE $0x48               // mov	qword ptr [rsp + 72], rcx
	WORD $0x894c; BYTE $0xe9                   // mov	rcx, r13
	LONG $0xe0e18348                           // and	rcx, -32
	LONG $0x244c8948; BYTE $0x40               // mov	qword ptr [rsp + 64], rcx
	WORD $0x014c; BYTE $0xf9                   // add	rcx, r15
	LONG $0x244c8948; BYTE $0x38               // mov	qword ptr [rsp + 56], rcx
	WORD $0x3145; BYTE $0xc9                   // xor	r9d, r9d
	JMP  LBB7_5

LBB7_16:
	WORD $0xff49; BYTE $0xc1 // inc	r9
	WORD $0x394d; BYTE $0xe1 // cmp	r9, r12
	JE   LBB7_17

LBB7_5:
	LONG $0xce048b4e             // mov	r8, qword ptr [rsi + 8*r9]
	WORD $0x894c; BYTE $0xfb     // mov	rbx, r15
	LONG $0x20fd8349             // cmp	r13, 32
	JB   LBB7_11
	LONG $0x244c8b48; BYTE $0x58 // mov	rcx, qword ptr [rsp + 88]
	WORD $0x014c; BYTE $0xc1     // add	rcx, r8
	LONG $0x244c3948; BYTE $0x60 // cmp	qword ptr [rsp + 96], rcx
	JAE  LBB7_8
	LONG $0x244c8b48; BYTE $0x50 // mov	rcx, qword ptr [rsp + 80]
	WORD $0x014c; BYTE $0xc1     // add	rcx, r8
	WORD $0x894c; BYTE $0xfb     // mov	rbx, r15
	LONG $0x244c3b48; BYTE $0x48 // cmp	rcx, qword ptr [rsp + 72]
	JB   LBB7_11

LBB7_8:
	LONG $0x244c8b48; BYTE $0x18 // mov	rcx, qword ptr [rsp + 24]
	LONG $0x081c8d49             // lea	rbx, [r8 + rcx]
	WORD $0xc931                 // xor	ecx, ecx

LBB7_9:
	QUAD $0xfdca4410487cf162                   // vmovups	zmm0, zmmword ptr [rdx + 8*rcx - 192]
	QUAD $0xfeca4c10487cf162                   // vmovups	zmm1, zmmword ptr [rdx + 8*rcx - 128]
	QUAD $0xffca5410487cf162                   // vmovups	zmm2, zmmword ptr [rdx + 8*rcx - 64]
	LONG $0x487cf162; WORD $0x1c10; BYTE $0xca // vmovups	zmm3, zmmword ptr [rdx + 8*rcx]
	QUAD $0xfdcb4457487cf162                   // vxorps	zmm0, zmm0, zmmword ptr [rbx + 8*rcx - 192]
	QUAD $0xfecb4c574874f162                   // vxorps	zmm1, zmm1, zmmword ptr [rbx + 8*rcx - 128]
	QUAD $0xffcb5457486cf162                   // vxorps	zmm2, zmm2, zmmword ptr [rbx + 8*rcx - 64]
	LONG $0x4864f162; WORD $0x1c57; BYTE $0xcb // vxorps	zmm3, zmm3, zmmword ptr [rbx + 8*rcx]
	QUAD $0xfdca4411487cf162                   // vmovups	zmmword ptr [rdx + 8*rcx - 192], zmm0
	QUAD $0xfeca4c11487cf162                   // vmovups	zmmword ptr [rdx + 8*rcx - 128], zmm1
	QUAD $0xffca5411487cf162                   // vmovups	zmmword ptr [rdx + 8*rcx - 64], zmm2
	LONG $0x487cf162; WORD $0x1c11; BYTE $0xca // vmovups	zmmword ptr [rdx + 8*rcx], zmm3
	LONG $0x20c18348                           // add	rcx, 32
	WORD $0x3949; BYTE $0xca                   // cmp	r10, rcx
	JNE  LBB7_9
	LONG $0x245c8b48; BYTE $0x38               // mov	rbx, qword ptr [rsp + 56]
	LONG $0x246c3b4c; BYTE $0x40               // cmp	r13, qword ptr [rsp + 64]
	JE   LBB7_16

LBB7_11:
	WORD $0xc189             // mov	ecx, eax
	WORD $0xd929             // sub	ecx, ebx
	WORD $0x8949; BYTE $0xdb // mov	r11, rbx
	WORD $0xf749; BYTE $0xd3 // not	r11
	WORD $0x0149; BYTE $0xc3 // add	r11, rax
	WORD $0xc1f6; BYTE $0x03 // test	cl, 3
	JE   LBB7_14
	WORD $0xc189             // mov	ecx, eax
	WORD $0xd928             // sub	cl, bl
	LONG $0xf1b60f44         // movzx	r14d, cl
	LONG $0x03e68341         // and	r14d, 3

LBB7_13:
	LONG $0xd80c8b49         // mov	rcx, qword ptr [r8 + 8*rbx]
	LONG $0xdf0c3148         // xor	qword ptr [rdi + 8*rbx], rcx
	WORD $0xff48; BYTE $0xc3 // inc	rbx
	WORD $0xff49; BYTE $0xce // dec	r14
	JNE  LBB7_13

LBB7_14:
	LONG $0x03fb8349 // cmp	r11, 3
	JB   LBB7_16

LBB7_15:
	LONG $0xd80c8b49             // mov	rcx, qword ptr [r8 + 8*rbx]
	LONG $0xdf0c3148             // xor	qword ptr [rdi + 8*rbx], rcx
	LONG $0xd84c8b49; BYTE $0x08 // mov	rcx, qword ptr [r8 + 8*rbx + 8]
	LONG $0xdf4c3148; BYTE $0x08 // xor	qword ptr [rdi + 8*rbx + 8], rcx
	LONG $0xd84c8b49; BYTE $0x10 // mov	rcx, qword ptr [r8 + 8*rbx + 16]
	LONG $0xdf4c3148; BYTE $0x10 // xor	qword ptr [rdi + 8*rbx + 16], rcx
	LONG $0xd84c8b49; BYTE $0x18 // mov	rcx, qword ptr [r8 + 8*rbx + 24]
	LONG $0xdf4c3148; BYTE $0x18 // xor	qword ptr [rdi + 8*rbx + 24], rcx
	LONG $0x04c38348             // add	rbx, 4
	WORD $0x3948; BYTE $0xd8     // cmp	rax, rbx
	JNE  LBB7_15
	JMP  LBB7_16

LBB7_18:
	LONG $0xd8658d48         // lea	rsp, [rbp - 40]
	BYTE $0x5b               // pop	rbx
	WORD $0x5c41             // pop	r12
	WORD $0x5d41             // pop	r13
	WORD $0x5e41             // pop	r14
	WORD $0x5f41             // pop	r15
	BYTE $0x5d               // pop	rbp
	WORD $0xf8c5; BYTE $0x77 // vzeroupper
	BYTE $0xc3               // ret
