// File: /workspace/github_cpp_makefile_star2_O3/BenLangmead[P]bowtie/./multikey_qsort.h
// Function: sanityCheckInputSufs(unsigned long*, unsigned long)
static inline void sanityCheckInputSufs(TIndexOffU *s, size_t slen) {
	assert_gt(slen, 0);
	// Try keeping the running time <1min
        if (slen > 4096) {
		TIndexOffU *s_copy = new TIndexOffU[slen];
		assert(s_copy != NULL);
		std::copy(s, s + slen, s_copy);
		std::sort(s_copy, s_copy + slen);
		for (size_t i = 0; i < slen - 1; i++)
			assert_neq(s_copy[i], s_copy[i + 1]);
		delete[] s_copy;
        } else {
		for(size_t i = 0; i < slen; i++) {
			// Actually, it's convenient to allow the caller to provide
			// suffix offsets thare are off the end of the host string.
			// See, e.g., build() in diff_sample.cpp.
			//assert_lt(s[i], length(host));
			for(size_t j = i+1; j < slen; j++) {
				assert_neq(s[i], s[j]);
			}
		}
	}
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
testq %rsi, %rsi
je 0xebc5
movq %rsi, %r15
movq %rdi, %rbx
cmpq $0x1000, %rsi           # imm = 0x1000
jbe 0xea55
movq %r15, %rax
shrq $0x3d, %rax
leaq (,%r15,8), %r12
xorl %r13d, %r13d
negq %rax
movl $0x0, %edi
sbbq %rdi, %rdi
orq %r12, %rdi
callq 0x4030
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x4250
leaq (%r14,%r15,8), %rbx
bsrq %r15, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x24480
movq %r14, %rdi
movq %rbx, %rsi
callq 0x24567
decq %r15
cmpq %r13, %r15
je 0xea86
movq (%r14,%r13,8), %rax
leaq 0x1(%r13), %r12
cmpq 0x8(%r14,%r13,8), %rax
movq %r12, %r13
jne 0xe90a
movq 0x2868c(%rip), %rbx     # 0x36fb8
leaq 0x1da64(%rip), %rsi     # 0x2c397
movq %rbx, %rdi
callq 0x4310
movq -0x8(%r14,%r12,8), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x1d88d(%rip), %r15     # 0x2c1dc
movq %rax, %rdi
movq %r15, %rsi
callq 0x4310
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x8, %edx
movl %edx, 0x18(%rax,%rcx)
movq -0x8(%r14,%r12,8), %rsi
movq %rax, %rdi
callq 0x40c0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x2, %edx
movl %edx, 0x18(%rax,%rcx)
leaq 0x1d849(%rip), %rsi     # 0x2c1e1
movq %rax, %rdi
callq 0x4310
movq (%r14,%r12,8), %rsi
movq %rax, %rdi
callq 0x40c0
movq %rax, %rdi
movq %r15, %rsi
callq 0x4310
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x8, %edx
movl %edx, 0x18(%rax,%rcx)
movq (%r14,%r12,8), %rsi
movq %rax, %rdi
callq 0x40c0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x2, %edx
movl %edx, 0x18(%rax,%rcx)
leaq 0x1f9b1(%rip), %rsi     # 0x2e3a5
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x2029f(%rip), %r14     # 0x2ecaa
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4310
leaq 0x1ed8b(%rip), %rsi     # 0x2d7a8
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x136, %esi            # imm = 0x136
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x1ec47(%rip), %rdi     # 0x2d688
leaq 0x20275(%rip), %rcx     # 0x2ecbd
movq %r14, %rsi
movl $0x136, %edx            # imm = 0x136
callq 0x41c0
xorl %eax, %eax
movq %rax, %r13
incq %rax
cmpq %r15, %rax
jae 0xea77
movq (%rbx,%r13,8), %rcx
movq %rax, %r12
cmpq (%rbx,%r12,8), %rcx
je 0xea97
incq %r12
cmpq %r15, %r12
jb 0xea69
cmpq %r15, %rax
jne 0xea57
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movq %r14, %rdi
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x4420
movq 0x2851a(%rip), %r14     # 0x36fb8
leaq 0x1d8f2(%rip), %rsi     # 0x2c397
movq %r14, %rdi
callq 0x4310
movq (%rbx,%r13,8), %rsi
movq %rax, %rdi
callq 0x40c0
leaq 0x1d71c(%rip), %r15     # 0x2c1dc
movq %rax, %rdi
movq %r15, %rsi
callq 0x4310
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x8, %edx
movl %edx, 0x18(%rax,%rcx)
movq (%rbx,%r13,8), %rsi
movq %rax, %rdi
callq 0x40c0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x2, %edx
movl %edx, 0x18(%rax,%rcx)
leaq 0x1d6d9(%rip), %rsi     # 0x2c1e1
movq %rax, %rdi
callq 0x4310
movq (%rbx,%r12,8), %rsi
movq %rax, %rdi
callq 0x40c0
movq %rax, %rdi
movq %r15, %rsi
callq 0x4310
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x8, %edx
movl %edx, 0x18(%rax,%rcx)
movq (%rbx,%r12,8), %rsi
movq %rax, %rdi
callq 0x40c0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x2, %edx
movl %edx, 0x18(%rax,%rcx)
leaq 0x1f841(%rip), %rsi     # 0x2e3a5
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x2012f(%rip), %rbx     # 0x2ecaa
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4310
leaq 0x1ec1b(%rip), %rsi     # 0x2d7a8
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x13f, %esi            # imm = 0x13F
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x1ead7(%rip), %rdi     # 0x2d688
leaq 0x20105(%rip), %rcx     # 0x2ecbd
movq %rbx, %rsi
movl $0x13f, %edx            # imm = 0x13F
callq 0x41c0
movq 0x283ec(%rip), %rbx     # 0x36fb8
leaq 0x1d5d2(%rip), %rsi     # 0x2c1a5
movq %rbx, %rdi
callq 0x4310
movq %rax, %rdi
xorl %esi, %esi
callq 0x40c0
leaq 0x1d5cf(%rip), %rsi     # 0x2c1bb
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
xorl %esi, %esi
callq 0x4610
leaq 0x1f7a0(%rip), %rsi     # 0x2e3a5
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4150
leaq 0x2008e(%rip), %r14     # 0x2ecaa
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4310
leaq 0x1eb7a(%rip), %rsi     # 0x2d7a8
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movl $0x12e, %esi            # imm = 0x12E
callq 0x4610
movq %rax, %rdi
callq 0x4150
leaq 0x1ea36(%rip), %rdi     # 0x2d688
leaq 0x20064(%rip), %rcx     # 0x2ecbd
movq %r14, %rsi
movl $0x12e, %edx            # imm = 0x12E
callq 0x41c0