// File: /workspace/github_cpp_makefile_star2_O3/mitchellsayer[P]FastPointCloudSegmentation/src/./nanoflann.hpp
// Function: nanoflann::KDTreeSingleIndexAdaptor<nanoflann::L2_Simple_Adaptor<float, ScanlinePointCloud, float>, ScanlinePointCloud, 3, unsigned long>::planeSplit(unsigned long*, unsigned long, int, float&, unsigned long&, unsigned long&)
void planeSplit(IndexType* ind, const IndexType count, int cutfeat, DistanceType &cutval, IndexType& lim1, IndexType& lim2)
		{
			/* Move vector indices for left subtree to front of list. */
			IndexType left = 0;
			IndexType right = count-1;
			for (;; ) {
				while (left<=right && dataset_get(ind[left],cutfeat)<cutval) ++left;
				while (right && left<=right && dataset_get(ind[right],cutfeat)>=cutval) --right;
				if (left>right || !right) break;  // "!right" was added to support unsigned Index types
				std::swap(ind[left], ind[right]);
				++left;
				--right;
			}
			/* If either list is empty, it means that all remaining features
			 * are identical. Split in the middle to maintain a balanced tree.
			 */
			lim1 = left;
			right = count-1;
			for (;; ) {
				while (left<=right && dataset_get(ind[left],cutfeat)<=cutval) ++left;
				while (right && left<=right && dataset_get(ind[right],cutfeat)>cutval) --right;
				if (left>right || !right) break;  // "!right" was added to support unsigned Index types
				std::swap(ind[left], ind[right]);
				++left;
				--right;
			}
			lim2 = left;
		}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq 0x10(%rbp), %rax
decq %rdx
movq 0x20(%rdi), %r11
movss (%r8), %xmm0
xorl %r10d, %r10d
movq %rdx, %rbx
cmpq %rbx, %r10
ja 0x7345
movq 0x8(%r11), %r14
movq (%rsi,%r10,8), %r15
leaq (%r15,%r15,4), %r15
cmpl $0x1, %ecx
je 0x7325
testl %ecx, %ecx
jne 0x732f
leaq (%r14,%r15,8), %r15
jmp 0x7337
leaq (%r14,%r15,8), %r15
addq $0x4, %r15
jmp 0x7337
leaq (%r14,%r15,8), %r15
addq $0x8, %r15
ucomiss (%r15), %xmm0
jbe 0x7345
incq %r10
cmpq %rbx, %r10
jbe 0x730e
testq %rbx, %rbx
setne %r12b
sete %r14b
cmpq %rbx, %r10
seta %r15b
orb %r14b, %r15b
jne 0x73b2
movq 0x8(%r11), %r14
movq (%rsi,%rbx,8), %r15
leaq (%r15,%r15,4), %r15
cmpl $0x1, %ecx
je 0x7377
testl %ecx, %ecx
jne 0x7381
leaq (%r14,%r15,8), %r15
jmp 0x7389
leaq (%r14,%r15,8), %r15
addq $0x4, %r15
jmp 0x7389
leaq (%r14,%r15,8), %r15
addq $0x8, %r15
movss (%r15), %xmm1
ucomiss %xmm0, %xmm1
jb 0x73af
leaq -0x1(%rbx), %r15
cmpq $0x1, %rbx
setne %r12b
cmpq %r15, %r10
ja 0x73b5
cmpq $0x1, %rbx
movq %r15, %rbx
jne 0x7360
jmp 0x73b5
movb $0x1, %r12b
movq %rbx, %r15
cmpq %r15, %r10
ja 0x73dd
testb %r12b, %r12b
je 0x73dd
movq (%rsi,%r10,8), %rbx
movq (%rsi,%r15,8), %r14
movq %r14, (%rsi,%r10,8)
movq %rbx, (%rsi,%r15,8)
incq %r10
decq %r15
movq %r15, %rbx
jmp 0x7305
movq %r10, (%r9)
movq 0x20(%rdi), %rdi
movss (%r8), %xmm0
cmpq %rdx, %r10
ja 0x7429
movq 0x8(%rdi), %r8
movq (%rsi,%r10,8), %r9
leaq (%r9,%r9,4), %r9
cmpl $0x1, %ecx
je 0x7409
testl %ecx, %ecx
jne 0x7413
leaq (%r8,%r9,8), %r9
jmp 0x741b
leaq (%r8,%r9,8), %r9
addq $0x4, %r9
jmp 0x741b
leaq (%r8,%r9,8), %r9
addq $0x8, %r9
ucomiss (%r9), %xmm0
jb 0x7429
incq %r10
cmpq %rdx, %r10
jbe 0x73f2
testq %rdx, %rdx
setne %r11b
cmpq %rdx, %r10
ja 0x7490
testq %rdx, %rdx
je 0x7490
movq 0x8(%rdi), %r9
movq (%rsi,%rdx,8), %r8
leaq (%r8,%r8,4), %r8
cmpl $0x1, %ecx
je 0x7455
testl %ecx, %ecx
jne 0x745f
leaq (%r9,%r8,8), %r8
jmp 0x7467
leaq (%r9,%r8,8), %r8
addq $0x4, %r8
jmp 0x7467
leaq (%r9,%r8,8), %r8
addq $0x8, %r8
movss (%r8), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x748d
leaq -0x1(%rdx), %r8
cmpq $0x1, %rdx
setne %r11b
cmpq %r8, %r10
ja 0x7493
cmpq $0x1, %rdx
movq %r8, %rdx
jne 0x743e
jmp 0x7493
movb $0x1, %r11b
movq %rdx, %r8
cmpq %r8, %r10
ja 0x74bb
testb %r11b, %r11b
je 0x74bb
movq (%rsi,%r10,8), %rdx
movq (%rsi,%r8,8), %r9
movq %r9, (%rsi,%r10,8)
movq %rdx, (%rsi,%r8,8)
incq %r10
decq %r8
movq %r8, %rdx
jmp 0x73e9
movq %r10, (%rax)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq