// File: /workspace/github_cpp_makefile_star2_O3/cjc12[P]ezSTL/src/../include/algorithm.h
// Function: void ezSTL::__intro_sort_loop<double*, ezSTL::less<double>>(double*, double*, unsigned int, ezSTL::less<double>)
void __intro_sort_loop(Iterator First, Iterator Last, unsigned int depth, Compare cmp) {
		unsigned int count;
		while ((count = Last - First) > insertion_threshold && depth > 0) {
			--depth;
			Iterator Medium = __quick_sort_partition(First, Last, cmp);
			if (Medium - First < Last - Medium) {
				__intro_sort_loop(First, Medium, depth, cmp);
				First = Medium;
			}
			else {
				__intro_sort_loop(Medium, Last, depth, cmp);
				Last = Medium;
			}
		}
		// if exceed recursive depth limitation
		if (depth <= 0)
			__heap_sort(First, Last, cmp);
		// if < insertion_threshold, change to insertion sort
		else if (count >= 2)
			__insertion_sort(First, Last, cmp);
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rcx
subq %rdi, %rcx
movq %rcx, %rdx
shrq $0x3, %rdx
cmpl $0x15, %edx
setb %al
testl %ebp, %ebp
sete %sil
orb %al, %sil
jne 0xce59
movq %rbx, %rax
movq %rcx, %rdx
sarq $0x3, %rdx
shrq $0x3f, %rcx
addq %rdx, %rcx
andq $-0x2, %rcx
leaq (%r14,%rcx,4), %rdx
movsd (%rdx), %xmm2
movsd (%r14), %xmm0
leaq -0x8(%rbx), %rcx
ucomisd %xmm2, %xmm0
movsd -0x8(%rbx), %xmm1
jbe 0xcd2d
ucomisd %xmm1, %xmm2
ja 0xcd41
ucomisd %xmm0, %xmm2
jbe 0xce0a
ucomisd %xmm2, %xmm1
jbe 0xce0a
movapd %xmm2, %xmm1
movsd %xmm1, (%r14)
movsd %xmm0, (%rdx)
movsd (%r14), %xmm0
movq %r14, %r15
cmpq %r14, %rcx
jbe 0xcdb1
movq %r14, %r15
movq %rbx, %rdx
addq $-0x8, %rdx
movq %rdx, %rcx
movsd (%rdx), %xmm1
cmpq %rdx, %r15
jae 0xcd9f
leaq -0x8(%rcx), %rdx
ucomisd %xmm1, %xmm0
jbe 0xcd65
movsd %xmm1, (%r15)
addq $0x8, %rdx
movsd (%r15), %xmm1
ucomisd %xmm0, %xmm1
ja 0xcda4
addq $0x8, %r15
cmpq %rdx, %r15
jb 0xcd84
movsd (%r15), %xmm1
jmp 0xcda4
movsd %xmm1, (%r15)
movsd %xmm1, (%rcx)
leaq 0x8(%rcx), %rdx
cmpq %rcx, %r15
jb 0xcd61
decl %ebp
movsd %xmm0, (%r15)
movq %r15, %rcx
subq %r14, %rcx
subq %r15, %rax
cmpq %rax, %rcx
jge 0xcddb
movq %r14, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xccc5
movq %r15, %r14
movq %rbx, %rax
jmp 0xcdee
movq %r15, %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0xccc5
movq %r15, %rax
movq %r15, %rbx
movq %rax, %rcx
subq %r14, %rcx
movq %rcx, %rdx
shrq $0x3, %rdx
cmpl $0x15, %edx
jb 0xce59
testl %ebp, %ebp
jne 0xccf9
jmp 0xce59
movapd %xmm1, %xmm3
cmpltpd %xmm2, %xmm3
movapd %xmm0, %xmm4
cmpltpd %xmm1, %xmm4
andpd %xmm3, %xmm4
movd %xmm4, %edx
testb $0x1, %dl
jne 0xce51
movapd %xmm1, %xmm3
cmpltpd %xmm0, %xmm3
cmpltpd %xmm1, %xmm2
andpd %xmm3, %xmm2
movd %xmm2, %esi
movq %rcx, %rdx
testb $0x1, %sil
je 0xcd53
jmp 0xcd45
movq %rcx, %rdx
jmp 0xcd45
testl %ebp, %ebp
je 0xced5
cmpl $0x2, %edx
jb 0xceca
leaq 0x8(%r14), %rax
cmpq %rbx, %rax
je 0xceca
movsd (%rax), %xmm0
movsd (%r14), %xmm1
ucomisd %xmm0, %xmm1
jbe 0xce9f
movq %r14, %rcx
cmpq %r14, %rax
jbe 0xcec0
movq %rax, %rcx
movsd -0x8(%rcx), %xmm1
movsd %xmm1, (%rcx)
leaq -0x8(%rcx), %rdx
movq %rdx, %rcx
cmpq %r14, %rdx
ja 0xce85
movq %r14, %rcx
jmp 0xcec0
movsd -0x8(%rax), %xmm1
ucomisd %xmm0, %xmm1
movq %rax, %rcx
jbe 0xcec0
movsd %xmm1, (%rcx)
movsd -0x10(%rcx), %xmm1
addq $-0x8, %rcx
ucomisd %xmm0, %xmm1
ja 0xcead
movsd %xmm0, (%rcx)
addq $0x8, %rax
jmp 0xce66
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0xceea