// File: BenLangmead[P]bowtie/./sstring.h
// Function: bool sstr_suf_upto_lt<S2bDnaString, S2bDnaString>(S2bDnaString const&, unsigned long, S2bDnaString const&, unsigned long, unsigned long, bool)
static inline bool sstr_suf_upto_lt(
	const T1& s1, size_t suf1,
	const T2& s2, size_t suf2,
	size_t upto,
	bool endlt = true)
{
	assert_leq(suf1, Class_sstr_len<T1>::sstr_len(s1));
	assert_leq(suf2, Class_sstr_len<T2>::sstr_len(s2));
	size_t len1 = Class_sstr_len<T1>::sstr_len(s1) - suf1;
	size_t len2 = Class_sstr_len<T2>::sstr_len(s2) - suf2;
	if(len1 > upto) len1 = upto;
	if(len2 > upto) len2 = upto;
	size_t minlen = (len1 < len2 ? len1 : len2);
	for(size_t i = 0; i < minlen; i++) {
		if(s1[suf1+i] < s2[suf2+i]) {
			return true;
		} else if(s1[suf1+i] > s2[suf2+i]) {
			return false;
		}
	}
	if(len1 == len2) return false;
	return (len1 < len2) == endlt;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movb %r9b, %al
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
andb $0x1, %al
movb %al, -0x31(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rdi
callq 0x37c90
movq %rax, %rcx
movq -0x60(%rbp), %rax
cmpq %rcx, %rax
jbe 0x1768a
movq 0x329f1(%rip), %rdi     # 0x49fc0
leaq 0x27bcd(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x27bc9(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, -0x68(%rbp)
movq -0x10(%rbp), %rdi
callq 0x37c90
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x29f9f(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x32958(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x3298c(%rip), %rdi     # 0x49fc0
leaq 0x2ae06(%rip), %rsi     # 0x42441
callq 0x5360
movq %rax, %rdi
leaq 0x29140(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0xe7, %esi
callq 0x5750
movq %rax, %rdi
movq 0x3291a(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x28ff8(%rip), %rdi     # 0x4066a
leaq 0x2adc8(%rip), %rsi     # 0x42441
movl $0xe7, %edx
leaq 0x2b4d4(%rip), %rcx     # 0x42b59
callq 0x51e0
movq -0x28(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x20(%rbp), %rdi
callq 0x37c90
movq %rax, %rcx
movq -0x70(%rbp), %rax
cmpq %rcx, %rax
jbe 0x1776d
movq 0x3290e(%rip), %rdi     # 0x49fc0
leaq 0x27aea(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x27ae6(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, -0x78(%rbp)
movq -0x20(%rbp), %rdi
callq 0x37c90
movq -0x78(%rbp), %rdi
movq %rax, %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x29ebc(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x32875(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x328a9(%rip), %rdi     # 0x49fc0
leaq 0x2ad23(%rip), %rsi     # 0x42441
callq 0x5360
movq %rax, %rdi
leaq 0x2905d(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0xe8, %esi
callq 0x5750
movq %rax, %rdi
movq 0x32837(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x28f15(%rip), %rdi     # 0x4066a
leaq 0x2ace5(%rip), %rsi     # 0x42441
movl $0xe8, %edx
leaq 0x2b3f1(%rip), %rcx     # 0x42b59
callq 0x51e0
movq -0x10(%rbp), %rdi
callq 0x37c90
subq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rdi
callq 0x37c90
subq -0x28(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x30(%rbp), %rax
jbe 0x177a1
movq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x30(%rbp), %rax
jbe 0x177b3
movq -0x30(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
jae 0x177c7
movq -0x40(%rbp), %rax
movq %rax, -0x80(%rbp)
jmp 0x177cf
movq -0x48(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x50(%rbp), %rax
jae 0x17885
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq -0x58(%rbp), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x84(%rbp)
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
addq -0x58(%rbp), %rsi
callq 0x356a0
movb %al, %cl
movl -0x84(%rbp), %eax
movsbl %cl, %ecx
cmpl %ecx, %eax
jge 0x17830
movb $0x1, -0x1(%rbp)
jmp 0x178b8
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq -0x58(%rbp), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x88(%rbp)
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
addq -0x58(%rbp), %rsi
callq 0x356a0
movb %al, %cl
movl -0x88(%rbp), %eax
movsbl %cl, %ecx
cmpl %ecx, %eax
jle 0x17870
movb $0x0, -0x1(%rbp)
jmp 0x178b8
jmp 0x17872
jmp 0x17874
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x177df
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
jne 0x17895
movb $0x0, -0x1(%rbp)
jmp 0x178b8
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
setb %al
andb $0x1, %al
movzbl %al, %eax
movb -0x31(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
sete %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x90, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)