// File: /workspace/github_c_makefile_star2_O0/gplessis[P]dotdeb-redis/src/pqsort.c
// Function: pqsort
static void
_pqsort(void *a, size_t n, size_t es,
    int (*cmp) (const void *, const void *), void *lrange, void *rrange)
{
	char *pa, *pb, *pc, *pd, *pl, *pm, *pn;
	size_t d, r;
	int swaptype, cmp_result;

loop:	SWAPINIT(a, es);
	if (n < 7) {
		for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
			for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
			     pl -= es)
				swap(pl, pl - es);
		return;
	}
	pm = (char *) a + (n / 2) * es;
	if (n > 7) {
		pl = (char *) a;
		pn = (char *) a + (n - 1) * es;
		if (n > 40) {
			d = (n / 8) * es;
			pl = med3(pl, pl + d, pl + 2 * d, cmp);
			pm = med3(pm - d, pm, pm + d, cmp);
			pn = med3(pn - 2 * d, pn - d, pn, cmp);
		}
		pm = med3(pl, pm, pn, cmp);
	}
	swap(a, pm);
	pa = pb = (char *) a + es;

	pc = pd = (char *) a + (n - 1) * es;
	for (;;) {
		while (pb <= pc && (cmp_result = cmp(pb, a)) <= 0) {
			if (cmp_result == 0) {
				swap(pa, pb);
				pa += es;
			}
			pb += es;
		}
		while (pb <= pc && (cmp_result = cmp(pc, a)) >= 0) {
			if (cmp_result == 0) {
				swap(pc, pd);
				pd -= es;
			}
			pc -= es;
		}
		if (pb > pc)
			break;
		swap(pb, pc);
		pb += es;
		pc -= es;
	}

	pn = (char *) a + n * es;
	r = min(pa - (char *) a, pb - pa);
	vecswap(a, pb - r, r);
	r = min((size_t)(pd - pc), pn - pd - es);
	vecswap(pb, pn - r, r);
	if ((r = pb - pa) > es) {
                void *_l = a, *_r = ((unsigned char*)a)+r-1;
                if (!((lrange < _l && rrange < _l) ||
                    (lrange > _r && rrange > _r)))
		    _pqsort(a, r / es, es, cmp, lrange, rrange);
        }
	if ((r = pd - pc) > es) {
                void *_l, *_r;

		/* Iterate rather than recurse to save stack space */
		a = pn - r;
		n = r / es;

                _l = a;
                _r = ((unsigned char*)a)+r-1;
                if (!((lrange < _l && rrange < _l) ||
                    (lrange > _r && rrange > _r)))
		    goto loop;
	}
/*		qsort(pn - r, r / es, es, cmp);*/
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xe0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x8(%rbp), %rax
subq $0x0, %rax
andq $0x7, %rax
cmpq $0x0, %rax
jne 0x3c9b3
movq -0x18(%rbp), %rax
andq $0x7, %rax
cmpq $0x0, %rax
je 0x3c9c0
movl $0x2, %eax
movl %eax, -0xcc(%rbp)
jmp 0x3c9d8
movq -0x18(%rbp), %rdx
movl $0x1, %eax
xorl %ecx, %ecx
cmpq $0x8, %rdx
cmovel %ecx, %eax
movl %eax, -0xcc(%rbp)
movl -0xcc(%rbp), %eax
movl %eax, -0x7c(%rbp)
cmpq $0x7, -0x10(%rbp)
jae 0x3caee
movq -0x8(%rbp), %rax
addq -0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq -0x8(%rbp), %rcx
movq -0x10(%rbp), %rdx
imulq -0x18(%rbp), %rdx
addq %rdx, %rcx
cmpq %rcx, %rax
jae 0x3cae9
movq -0x60(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rcx
xorl %eax, %eax
cmpq -0x8(%rbp), %rcx
movb %al, -0xcd(%rbp)
jbe 0x3ca52
movq -0x20(%rbp), %rax
movq -0x58(%rbp), %rdi
xorl %ecx, %ecx
subq -0x18(%rbp), %rcx
addq %rcx, %rdi
movq -0x58(%rbp), %rsi
callq *%rax
cmpl $0x0, %eax
setg %al
movb %al, -0xcd(%rbp)
movb -0xcd(%rbp), %al
testb $0x1, %al
jne 0x3ca5e
jmp 0x3cad6
cmpl $0x0, -0x7c(%rbp)
jne 0x3ca9e
movq -0x58(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rax
xorl %ecx, %ecx
subq -0x18(%rbp), %rcx
movq (%rax,%rcx), %rcx
movq -0x58(%rbp), %rax
movq %rcx, (%rax)
movq -0x88(%rbp), %rdx
movq -0x58(%rbp), %rax
xorl %ecx, %ecx
subq -0x18(%rbp), %rcx
movq %rdx, (%rax,%rcx)
jmp 0x3cabb
movq -0x58(%rbp), %rdi
movq -0x58(%rbp), %rsi
xorl %eax, %eax
subq -0x18(%rbp), %rax
addq %rax, %rsi
movq -0x18(%rbp), %rdx
movl -0x7c(%rbp), %ecx
callq 0x3d050
jmp 0x3cabd
movq -0x18(%rbp), %rdx
movq -0x58(%rbp), %rax
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
jmp 0x3ca1d
jmp 0x3cad8
movq -0x18(%rbp), %rax
addq -0x60(%rbp), %rax
movq %rax, -0x60(%rbp)
jmp 0x3c9f8
jmp 0x3d044
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
shrq %rcx
imulq -0x18(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
cmpq $0x7, -0x10(%rbp)
jbe 0x3cbe3
movq -0x8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
subq $0x1, %rcx
imulq -0x18(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
cmpq $0x28, -0x10(%rbp)
jbe 0x3cbca
movq -0x10(%rbp), %rax
shrq $0x3, %rax
imulq -0x18(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x58(%rbp), %rdi
movq -0x58(%rbp), %rsi
addq -0x70(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq -0x70(%rbp), %rax
shlq %rax
addq %rax, %rdx
movq -0x20(%rbp), %rcx
callq 0x3d140
movq %rax, -0x58(%rbp)
movq -0x60(%rbp), %rdi
xorl %eax, %eax
subq -0x70(%rbp), %rax
addq %rax, %rdi
movq -0x60(%rbp), %rsi
movq -0x60(%rbp), %rdx
addq -0x70(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x3d140
movq %rax, -0x60(%rbp)
movq -0x68(%rbp), %rdi
movq -0x70(%rbp), %rcx
shlq %rcx
xorl %eax, %eax
subq %rcx, %rax
addq %rax, %rdi
movq -0x68(%rbp), %rsi
xorl %eax, %eax
subq -0x70(%rbp), %rax
addq %rax, %rsi
movq -0x68(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x3d140
movq %rax, -0x68(%rbp)
movq -0x58(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x68(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x3d140
movq %rax, -0x60(%rbp)
cmpl $0x0, -0x7c(%rbp)
jne 0x3cc15
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x90(%rbp)
movq -0x60(%rbp), %rax
movq (%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
movq -0x90(%rbp), %rcx
movq -0x60(%rbp), %rax
movq %rcx, (%rax)
jmp 0x3cc29
movq -0x8(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x18(%rbp), %rdx
movl -0x7c(%rbp), %ecx
callq 0x3d050
movq -0x8(%rbp), %rax
addq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
subq $0x1, %rcx
imulq -0x18(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movq %rax, -0x48(%rbp)
jmp 0x3cc57
movq -0x40(%rbp), %rcx
xorl %eax, %eax
cmpq -0x48(%rbp), %rcx
movb %al, -0xce(%rbp)
ja 0x3cc86
movq -0x20(%rbp), %rax
movq -0x40(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq *%rax
movl %eax, -0x80(%rbp)
cmpl $0x0, %eax
setle %al
movb %al, -0xce(%rbp)
movb -0xce(%rbp), %al
testb $0x1, %al
jne 0x3cc92
jmp 0x3ccfb
cmpl $0x0, -0x80(%rbp)
jne 0x3ccea
cmpl $0x0, -0x7c(%rbp)
jne 0x3ccca
movq -0x38(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x98(%rbp)
movq -0x40(%rbp), %rax
movq (%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, (%rax)
movq -0x98(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, (%rax)
jmp 0x3ccde
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x18(%rbp), %rdx
movl -0x7c(%rbp), %ecx
callq 0x3d050
movq -0x18(%rbp), %rax
addq -0x38(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
jmp 0x3cc57
jmp 0x3ccfd
movq -0x40(%rbp), %rcx
xorl %eax, %eax
cmpq -0x48(%rbp), %rcx
movb %al, -0xcf(%rbp)
ja 0x3cd2c
movq -0x20(%rbp), %rax
movq -0x48(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq *%rax
movl %eax, -0x80(%rbp)
cmpl $0x0, %eax
setge %al
movb %al, -0xcf(%rbp)
movb -0xcf(%rbp), %al
testb $0x1, %al
jne 0x3cd38
jmp 0x3cdb1
cmpl $0x0, -0x80(%rbp)
jne 0x3cd98
cmpl $0x0, -0x7c(%rbp)
jne 0x3cd70
movq -0x48(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa0(%rbp)
movq -0x50(%rbp), %rax
movq (%rax), %rcx
movq -0x48(%rbp), %rax
movq %rcx, (%rax)
movq -0xa0(%rbp), %rcx
movq -0x50(%rbp), %rax
movq %rcx, (%rax)
jmp 0x3cd84
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x18(%rbp), %rdx
movl -0x7c(%rbp), %ecx
callq 0x3d050
movq -0x18(%rbp), %rdx
movq -0x50(%rbp), %rax
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movq -0x18(%rbp), %rdx
movq -0x48(%rbp), %rax
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
jmp 0x3ccfd
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
jbe 0x3cdbd
jmp 0x3ce28
cmpl $0x0, -0x7c(%rbp)
jne 0x3cdef
movq -0x40(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa8(%rbp)
movq -0x48(%rbp), %rax
movq (%rax), %rcx
movq -0x40(%rbp), %rax
movq %rcx, (%rax)
movq -0xa8(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, (%rax)
jmp 0x3ce03
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq -0x18(%rbp), %rdx
movl -0x7c(%rbp), %ecx
callq 0x3d050
movq -0x18(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rdx
movq -0x48(%rbp), %rax
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
jmp 0x3cc55
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
imulq -0x18(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
movq -0x38(%rbp), %rax
movq -0x8(%rbp), %rcx
subq %rcx, %rax
movq -0x40(%rbp), %rcx
movq -0x38(%rbp), %rdx
subq %rdx, %rcx
cmpq %rcx, %rax
jge 0x3ce6b
movq -0x38(%rbp), %rax
movq -0x8(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0xd8(%rbp)
jmp 0x3ce7d
movq -0x40(%rbp), %rax
movq -0x38(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0xd8(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
jbe 0x3ceac
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
xorl %eax, %eax
subq -0x78(%rbp), %rax
addq %rax, %rsi
movq -0x78(%rbp), %rdx
movl -0x7c(%rbp), %ecx
callq 0x3d050
movq -0x50(%rbp), %rax
movq -0x48(%rbp), %rcx
subq %rcx, %rax
movq -0x68(%rbp), %rcx
movq -0x50(%rbp), %rdx
subq %rdx, %rcx
subq -0x18(%rbp), %rcx
cmpq %rcx, %rax
jae 0x3cedf
movq -0x50(%rbp), %rax
movq -0x48(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0xe0(%rbp)
jmp 0x3cef5
movq -0x68(%rbp), %rax
movq -0x50(%rbp), %rcx
subq %rcx, %rax
subq -0x18(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rax
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
jbe 0x3cf24
movq -0x40(%rbp), %rdi
movq -0x68(%rbp), %rsi
xorl %eax, %eax
subq -0x78(%rbp), %rax
addq %rax, %rsi
movq -0x78(%rbp), %rdx
movl -0x7c(%rbp), %ecx
callq 0x3d050
movq -0x40(%rbp), %rax
movq -0x38(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x78(%rbp)
cmpq -0x18(%rbp), %rax
jbe 0x3cfb5
movq -0x8(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0x8(%rbp), %rax
addq -0x78(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xb8(%rbp)
movq -0x28(%rbp), %rax
cmpq -0xb0(%rbp), %rax
jae 0x3cf71
movq -0x30(%rbp), %rax
cmpq -0xb0(%rbp), %rax
jb 0x3cfb3
movq -0x28(%rbp), %rax
cmpq -0xb8(%rbp), %rax
jbe 0x3cf8b
movq -0x30(%rbp), %rax
cmpq -0xb8(%rbp), %rax
ja 0x3cfb3
movq -0x8(%rbp), %rdi
movq -0x78(%rbp), %rax
xorl %ecx, %ecx
movl %ecx, %edx
divq -0x18(%rbp)
movq %rax, %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0x3c970
jmp 0x3cfb5
movq -0x50(%rbp), %rax
movq -0x48(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x78(%rbp)
cmpq -0x18(%rbp), %rax
jbe 0x3d044
movq -0x68(%rbp), %rax
xorl %ecx, %ecx
subq -0x78(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x8(%rbp)
movq -0x78(%rbp), %rax
xorl %ecx, %ecx
movl %ecx, %edx
divq -0x18(%rbp)
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0x8(%rbp), %rax
addq -0x78(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xc8(%rbp)
movq -0x28(%rbp), %rax
cmpq -0xc0(%rbp), %rax
jae 0x3d023
movq -0x30(%rbp), %rax
cmpq -0xc0(%rbp), %rax
jb 0x3d042
movq -0x28(%rbp), %rax
cmpq -0xc8(%rbp), %rax
jbe 0x3d03d
movq -0x30(%rbp), %rax
cmpq -0xc8(%rbp), %rax
ja 0x3d042
jmp 0x3c993
jmp 0x3d044
addq $0xe0, %rsp
popq %rbp
retq
nopl (%rax)