// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/rdj-ovlfind-kmp.c
// Function: gt_ovlfind_kmp
GtContfind gt_ovlfind_kmp(const char *u, GtUword u_length,
    const gt_kmp_t *u_pi, const char *v, GtUword v_length,
    const gt_kmp_t *v_pi, GtOvlfindMode m, GtUword min_length,
    bool find_nonmaximal, void(*spmproc) (GtUword /* overlap length */,
    bool /* true if suffix of u == prefix of v, false if prefix of
    u == suffix of v */, void* /* spmprocdata */), void* spmprocdata)
{
  GtContfind retval = GT_CONTFIND_OFF;
  bool self_comparison;

  gt_assert(u != NULL);
  gt_assert(u_length > 0);
  gt_assert(u_pi != NULL);
  self_comparison = (v == NULL);
  gt_assert(self_comparison || v_length > 0);
  gt_assert(self_comparison || v_pi != NULL);
  gt_assert(!self_comparison || m == GT_OVLFIND_SPM || m == GT_OVLFIND_ALL);

  if (self_comparison && m == GT_OVLFIND_ALL)
    retval = GT_CONTFIND_EQ;
  if (m != GT_OVLFIND_SPM && !self_comparison)
  {
    if (u_length == v_length)
      retval = memcmp(u, v, (size_t)u_length) == 0
               ? GT_CONTFIND_EQ : GT_CONTFIND_NO;
    else if (u_length < v_length)
      retval = contfind_kmp(u, u_length, u_pi, v, v_length)
               ? GT_CONTFIND_U : GT_CONTFIND_NO;
    else /* u_length > v_length */
      retval = contfind_kmp(v, v_length, v_pi, u, u_length)
               ? GT_CONTFIND_V : GT_CONTFIND_NO;
    if (m == GT_OVLFIND_PROPER_SPM && retval != GT_CONTFIND_NO)
      return retval;
  }
  if (m != GT_OVLFIND_CNT)
  {
    if (self_comparison)
    {
      spmfind_kmp(u, u_length, u, u_length, u_pi, min_length, find_nonmaximal,
                 self_comparison, spmproc, true, spmprocdata);
    }
    else
    {
      spmfind_kmp(u, u_length, v, v_length, v_pi, min_length, find_nonmaximal,
                 self_comparison, spmproc, true, spmprocdata);
      spmfind_kmp(v, v_length, u, u_length, u_pi, min_length, find_nonmaximal,
                 self_comparison, spmproc, false, spmprocdata);
    }
  }
  return retval;
}

// Assembly:
pushq %rbp
pushq %rbx
subq $0x78, %rsp
movq 0xb0(%rsp), %rax
movq 0xa8(%rsp), %rax
movb 0xa0(%rsp), %al
movq 0x98(%rsp), %r10
movl 0x90(%rsp), %r10d
movq %rdi, 0x68(%rsp)
movq %rsi, 0x60(%rsp)
movq %rdx, 0x58(%rsp)
movq %rcx, 0x50(%rsp)
movq %r8, 0x48(%rsp)
movq %r9, 0x40(%rsp)
andb $0x1, %al
movb %al, 0x3f(%rsp)
movl $0x0, 0x38(%rsp)
cmpq $0x0, 0x68(%rsp)
jne 0x4e1539
movq 0x15aa98(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x34b01(%rip), %rsi     # 0x516013
leaq 0xd9342(%rip), %rdx     # 0x5ba85b
leaq 0xd97ba(%rip), %rcx     # 0x5bacda
leaq 0xd9779(%rip), %r8      # 0x5baca0
movl $0x72, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4e153b
jmp 0x4e153d
cmpq $0x0, 0x60(%rsp)
ja 0x4e157d
movq 0x15aa54(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x34abd(%rip), %rsi     # 0x516013
leaq 0xd9331(%rip), %rdx     # 0x5ba88e
leaq 0xd9776(%rip), %rcx     # 0x5bacda
leaq 0xd9735(%rip), %r8      # 0x5baca0
movl $0x73, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4e157f
jmp 0x4e1581
cmpq $0x0, 0x58(%rsp)
jne 0x4e15c1
movq 0x15aa10(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x34a79(%rip), %rsi     # 0x516013
leaq 0xd9748(%rip), %rdx     # 0x5bace9
leaq 0xd9732(%rip), %rcx     # 0x5bacda
leaq 0xd96f1(%rip), %r8      # 0x5baca0
movl $0x74, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4e15c3
cmpq $0x0, 0x50(%rsp)
sete %al
andb $0x1, %al
movb %al, 0x37(%rsp)
testb $0x1, 0x37(%rsp)
jne 0x4e1619
cmpq $0x0, 0x48(%rsp)
ja 0x4e1619
movq 0x15a9b8(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x34a21(%rip), %rsi     # 0x516013
leaq 0xd92a2(%rip), %rdx     # 0x5ba89b
leaq 0xd96da(%rip), %rcx     # 0x5bacda
leaq 0xd9699(%rip), %r8      # 0x5baca0
movl $0x76, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4e161b
jmp 0x4e161d
testb $0x1, 0x37(%rsp)
jne 0x4e1664
cmpq $0x0, 0x40(%rsp)
jne 0x4e1664
movq 0x15a96d(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x349d6(%rip), %rsi     # 0x516013
leaq 0xd96b2(%rip), %rdx     # 0x5bacf6
leaq 0xd968f(%rip), %rcx     # 0x5bacda
leaq 0xd964e(%rip), %r8      # 0x5baca0
movl $0x77, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4e1666
jmp 0x4e1668
testb $0x1, 0x37(%rsp)
je 0x4e16bb
cmpl $0x0, 0x90(%rsp)
je 0x4e16bb
cmpl $0x2, 0x90(%rsp)
je 0x4e16bb
movq 0x15a916(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x3497f(%rip), %rsi     # 0x516013
leaq 0xd9220(%rip), %rdx     # 0x5ba8bb
leaq 0xd9638(%rip), %rcx     # 0x5bacda
leaq 0xd95f7(%rip), %r8      # 0x5baca0
movl $0x78, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4e16bd
testb $0x1, 0x37(%rsp)
je 0x4e16d6
cmpl $0x2, 0x90(%rsp)
jne 0x4e16d6
movl $0x2, 0x38(%rsp)
cmpl $0x0, 0x90(%rsp)
je 0x4e17bf
testb $0x1, 0x37(%rsp)
jne 0x4e17bf
movq 0x60(%rsp), %rax
cmpq 0x48(%rsp), %rax
jne 0x4e1727
movq 0x68(%rsp), %rdi
movq 0x50(%rsp), %rsi
movq 0x60(%rsp), %rdx
callq 0x192c0
movl %eax, %edx
movl $0x1, %eax
movl $0x2, %ecx
cmpl $0x0, %edx
cmovel %ecx, %eax
movl %eax, 0x38(%rsp)
jmp 0x4e179f
movq 0x60(%rsp), %rax
cmpq 0x48(%rsp), %rax
jae 0x4e1769
movq 0x68(%rsp), %rdi
movq 0x60(%rsp), %rsi
movq 0x58(%rsp), %rdx
movq 0x50(%rsp), %rcx
movq 0x48(%rsp), %r8
callq 0x4e1930
movb %al, %dl
movl $0x1, %eax
movl $0x3, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, 0x38(%rsp)
jmp 0x4e179d
movq 0x50(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq 0x40(%rsp), %rdx
movq 0x68(%rsp), %rcx
movq 0x60(%rsp), %r8
callq 0x4e1930
movb %al, %dl
movl $0x1, %eax
movl $0x4, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, 0x38(%rsp)
jmp 0x4e179f
cmpl $0x3, 0x90(%rsp)
jne 0x4e17bd
cmpl $0x1, 0x38(%rsp)
je 0x4e17bd
movl 0x38(%rsp), %eax
movl %eax, 0x74(%rsp)
jmp 0x4e191a
jmp 0x4e17bf
cmpl $0x1, 0x90(%rsp)
je 0x4e1912
testb $0x1, 0x37(%rsp)
je 0x4e1840
movq 0x68(%rsp), %rdi
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
movq 0x60(%rsp), %rcx
movq 0x58(%rsp), %r8
movq 0x98(%rsp), %r9
movb 0x3f(%rsp), %bl
movb 0x37(%rsp), %r11b
movq 0xa8(%rsp), %r10
movq 0xb0(%rsp), %rax
andb $0x1, %bl
andb $0x1, %r11b
movzbl %bl, %ebx
movl %ebx, (%rsp)
movzbl %r11b, %r11d
movl %r11d, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movl $0x1, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x4e1a80
jmp 0x4e1910
movq 0x68(%rsp), %rdi
movq 0x60(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x48(%rsp), %rcx
movq 0x40(%rsp), %r8
movq 0x98(%rsp), %r9
movb 0x3f(%rsp), %bl
movb 0x37(%rsp), %r11b
movq 0xa8(%rsp), %r10
movq 0xb0(%rsp), %rax
andb $0x1, %bl
andb $0x1, %r11b
movzbl %bl, %ebx
movl %ebx, (%rsp)
movzbl %r11b, %r11d
movl %r11d, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movl $0x1, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x4e1a80
movq 0x50(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq 0x68(%rsp), %rdx
movq 0x60(%rsp), %rcx
movq 0x58(%rsp), %r8
movq 0x98(%rsp), %r9
movb 0x3f(%rsp), %bl
movb 0x37(%rsp), %r11b
movq 0xa8(%rsp), %r10
movq 0xb0(%rsp), %rax
xorl %ebp, %ebp
andb $0x1, %bl
andb $0x1, %r11b
movzbl %bl, %ebx
movl %ebx, (%rsp)
movzbl %r11b, %r11d
movl %r11d, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movl $0x0, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x4e1a80
jmp 0x4e1912
movl 0x38(%rsp), %eax
movl %eax, 0x74(%rsp)
movl 0x74(%rsp), %eax
addq $0x78, %rsp
popq %rbx
popq %rbp
retq
nopw %cs:(%rax,%rax)