// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/esa-mmsearch.c
// Function: gt_mmsearch
static bool gt_mmsearch(const GtEncseq *dbencseq,
                        GtEncseqReader *esr,
                        const ESASuffixptr *suftab,
                        GtReadmode readmode,
                        Lcpinterval *lcpitv,
                        const GtQuerysubstring *querysubstring,
                        GtUword minmatchlength)
{
  GtUword left, leftsave, mid, right, lpref, rpref,
                totallength, lcplen, sidx;
  int retcode = 0;
  GtUchar currentdbchar, currentquerychar;

  totallength = gt_encseq_total_length(dbencseq);
  leftsave = left = lcpitv->left;
  right = lcpitv->right;
  lcplen = lcpitv->offset;
  GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,left),lcplen);
  if (retcode > 0)
  {
    lpref = lcplen;
    lcplen = lcpitv->offset;
    GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,right),lcplen);
    if (retcode > 0)
    {
      return false;
    } else
    {
      rpref = lcplen;
      while (right > left + 1)
      {
        mid = GT_DIV2(left+right);
        lcplen = GT_MIN(lpref,rpref);
        GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,mid),lcplen);
        if (retcode <= 0)
        {
          right = mid;
          rpref = lcplen;
        } else
        {
          left = mid;
          lpref = lcplen;
        }
      }
      lcpitv->left = right;
    }
  }

  left = leftsave;
  right = lcpitv->right;
  lcplen = lcpitv->offset;
  GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,left),lcplen);
  if (retcode < 0)
  {
    return false;
  } else
  {
    lpref = lcplen;
    lcplen = lcpitv->offset;
    GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,right),lcplen);
    if (retcode >= 0)
    {
      lcpitv->right = right;
    } else
    {
      rpref = lcplen;
      while (right > left + 1)
      {
        mid = GT_DIV2(left+right);
        lcplen = GT_MIN(lpref,rpref);
        GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,mid),lcplen);
        if (retcode >= 0)
        {
          left = mid;
          lpref = lcplen;
        } else
        {
          right = mid;
          rpref = lcplen;
        }
      }
      lcpitv->right = left;
    }
  }
  return true;
}

// Assembly:
subq $0x98, %rsp
movq 0xa0(%rsp), %rax
movq %rdi, 0x88(%rsp)
movq %rsi, 0x80(%rsp)
movq %rdx, 0x78(%rsp)
movl %ecx, 0x74(%rsp)
movq %r8, 0x68(%rsp)
movq %r9, 0x60(%rsp)
movl $0x0, 0x14(%rsp)
movq 0x88(%rsp), %rdi
callq 0xa9d00
movq %rax, 0x28(%rsp)
movq 0x68(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x58(%rsp)
movq %rax, 0x50(%rsp)
movq 0x68(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x68(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x78(%rsp), %rax
movq 0x58(%rsp), %rcx
movq (%rax,%rcx,8), %rax
addq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jae 0x23a19c
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rsi
movl 0x74(%rsp), %edx
movq 0x18(%rsp), %rcx
callq 0xabdb0
jmp 0x23a19e
movq 0x20(%rsp), %rax
cmpq 0xa0(%rsp), %rax
jb 0x23a1ba
movl $0x0, 0x14(%rsp)
jmp 0x23a263
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jb 0x23a1d3
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a263
movq 0x80(%rsp), %rdi
callq 0xaae30
movb %al, 0x13(%rsp)
movq 0x60(%rsp), %rax
movq (%rax), %rdi
movq 0x60(%rsp), %rax
movq 0x8(%rax), %rsi
addq 0x20(%rsp), %rsi
callq 0x239f20
movb %al, 0x12(%rsp)
movzbl 0x12(%rsp), %eax
movzbl 0x13(%rsp), %ecx
subl %ecx, %eax
movl %eax, 0x14(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x23a23e
movzbl 0x13(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a23c
movzbl 0x12(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a23c
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a263
jmp 0x23a240
jmp 0x23a263
jmp 0x23a242
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x20(%rsp)
jmp 0x23a19e
cmpl $0x0, 0x14(%rsp)
jle 0x23a550
movq 0x20(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x68(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x78(%rsp), %rax
movq 0x40(%rsp), %rcx
movq (%rax,%rcx,8), %rax
addq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jae 0x23a2c7
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rsi
movl 0x74(%rsp), %edx
movq 0x18(%rsp), %rcx
callq 0xabdb0
jmp 0x23a2c9
movq 0x20(%rsp), %rax
cmpq 0xa0(%rsp), %rax
jb 0x23a2e5
movl $0x0, 0x14(%rsp)
jmp 0x23a38e
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jb 0x23a2fe
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a38e
movq 0x80(%rsp), %rdi
callq 0xaae30
movb %al, 0x13(%rsp)
movq 0x60(%rsp), %rax
movq (%rax), %rdi
movq 0x60(%rsp), %rax
movq 0x8(%rax), %rsi
addq 0x20(%rsp), %rsi
callq 0x239f20
movb %al, 0x12(%rsp)
movzbl 0x12(%rsp), %eax
movzbl 0x13(%rsp), %ecx
subl %ecx, %eax
movl %eax, 0x14(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x23a369
movzbl 0x13(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a367
movzbl 0x12(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a367
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a38e
jmp 0x23a36b
jmp 0x23a38e
jmp 0x23a36d
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x20(%rsp)
jmp 0x23a2c9
cmpl $0x0, 0x14(%rsp)
jle 0x23a3a2
movb $0x0, 0x97(%rsp)
jmp 0x23a97f
movq 0x20(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x40(%rsp), %rax
movq 0x58(%rsp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jbe 0x23a540
movq 0x58(%rsp), %rax
addq 0x40(%rsp), %rax
shrq %rax
movq %rax, 0x48(%rsp)
movq 0x38(%rsp), %rax
cmpq 0x30(%rsp), %rax
jae 0x23a3ed
movq 0x38(%rsp), %rax
movq %rax, 0x8(%rsp)
jmp 0x23a3f7
movq 0x30(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x78(%rsp), %rax
movq 0x48(%rsp), %rcx
movq (%rax,%rcx,8), %rax
addq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jae 0x23a443
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rsi
movl 0x74(%rsp), %edx
movq 0x18(%rsp), %rcx
callq 0xabdb0
jmp 0x23a445
movq 0x20(%rsp), %rax
cmpq 0xa0(%rsp), %rax
jb 0x23a461
movl $0x0, 0x14(%rsp)
jmp 0x23a50a
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jb 0x23a47a
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a50a
movq 0x80(%rsp), %rdi
callq 0xaae30
movb %al, 0x13(%rsp)
movq 0x60(%rsp), %rax
movq (%rax), %rdi
movq 0x60(%rsp), %rax
movq 0x8(%rax), %rsi
addq 0x20(%rsp), %rsi
callq 0x239f20
movb %al, 0x12(%rsp)
movzbl 0x12(%rsp), %eax
movzbl 0x13(%rsp), %ecx
subl %ecx, %eax
movl %eax, 0x14(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x23a4e5
movzbl 0x13(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a4e3
movzbl 0x12(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a4e3
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a50a
jmp 0x23a4e7
jmp 0x23a50a
jmp 0x23a4e9
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x20(%rsp)
jmp 0x23a445
cmpl $0x0, 0x14(%rsp)
jg 0x23a527
movq 0x48(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x23a53b
movq 0x48(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x38(%rsp)
jmp 0x23a3ac
movq 0x40(%rsp), %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0x8(%rax)
jmp 0x23a550
movq 0x50(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x68(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x68(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x78(%rsp), %rax
movq 0x58(%rsp), %rcx
movq (%rax,%rcx,8), %rax
addq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jae 0x23a5b7
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rsi
movl 0x74(%rsp), %edx
movq 0x18(%rsp), %rcx
callq 0xabdb0
jmp 0x23a5b9
movq 0x20(%rsp), %rax
cmpq 0xa0(%rsp), %rax
jb 0x23a5d5
movl $0x0, 0x14(%rsp)
jmp 0x23a67e
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jb 0x23a5ee
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a67e
movq 0x80(%rsp), %rdi
callq 0xaae30
movb %al, 0x13(%rsp)
movq 0x60(%rsp), %rax
movq (%rax), %rdi
movq 0x60(%rsp), %rax
movq 0x8(%rax), %rsi
addq 0x20(%rsp), %rsi
callq 0x239f20
movb %al, 0x12(%rsp)
movzbl 0x12(%rsp), %eax
movzbl 0x13(%rsp), %ecx
subl %ecx, %eax
movl %eax, 0x14(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x23a659
movzbl 0x13(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a657
movzbl 0x12(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a657
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a67e
jmp 0x23a65b
jmp 0x23a67e
jmp 0x23a65d
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x20(%rsp)
jmp 0x23a5b9
cmpl $0x0, 0x14(%rsp)
jge 0x23a692
movb $0x0, 0x97(%rsp)
jmp 0x23a97f
movq 0x20(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x68(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x78(%rsp), %rax
movq 0x40(%rsp), %rcx
movq (%rax,%rcx,8), %rax
addq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jae 0x23a6eb
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rsi
movl 0x74(%rsp), %edx
movq 0x18(%rsp), %rcx
callq 0xabdb0
jmp 0x23a6ed
movq 0x20(%rsp), %rax
cmpq 0xa0(%rsp), %rax
jb 0x23a709
movl $0x0, 0x14(%rsp)
jmp 0x23a7b2
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jb 0x23a722
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a7b2
movq 0x80(%rsp), %rdi
callq 0xaae30
movb %al, 0x13(%rsp)
movq 0x60(%rsp), %rax
movq (%rax), %rdi
movq 0x60(%rsp), %rax
movq 0x8(%rax), %rsi
addq 0x20(%rsp), %rsi
callq 0x239f20
movb %al, 0x12(%rsp)
movzbl 0x12(%rsp), %eax
movzbl 0x13(%rsp), %ecx
subl %ecx, %eax
movl %eax, 0x14(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x23a78d
movzbl 0x13(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a78b
movzbl 0x12(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a78b
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a7b2
jmp 0x23a78f
jmp 0x23a7b2
jmp 0x23a791
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x20(%rsp)
jmp 0x23a6ed
cmpl $0x0, 0x14(%rsp)
jl 0x23a7cc
movq 0x40(%rsp), %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0x10(%rax)
jmp 0x23a975
movq 0x20(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x40(%rsp), %rax
movq 0x58(%rsp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jbe 0x23a967
movq 0x58(%rsp), %rax
addq 0x40(%rsp), %rax
shrq %rax
movq %rax, 0x48(%rsp)
movq 0x38(%rsp), %rax
cmpq 0x30(%rsp), %rax
jae 0x23a816
movq 0x38(%rsp), %rax
movq %rax, (%rsp)
jmp 0x23a81f
movq 0x30(%rsp), %rax
movq %rax, (%rsp)
movq (%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x78(%rsp), %rax
movq 0x48(%rsp), %rcx
movq (%rax,%rcx,8), %rax
addq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jae 0x23a86a
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rsi
movl 0x74(%rsp), %edx
movq 0x18(%rsp), %rcx
callq 0xabdb0
jmp 0x23a86c
movq 0x20(%rsp), %rax
cmpq 0xa0(%rsp), %rax
jb 0x23a888
movl $0x0, 0x14(%rsp)
jmp 0x23a931
movq 0x18(%rsp), %rax
cmpq 0x28(%rsp), %rax
jb 0x23a8a1
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a931
movq 0x80(%rsp), %rdi
callq 0xaae30
movb %al, 0x13(%rsp)
movq 0x60(%rsp), %rax
movq (%rax), %rdi
movq 0x60(%rsp), %rax
movq 0x8(%rax), %rsi
addq 0x20(%rsp), %rsi
callq 0x239f20
movb %al, 0x12(%rsp)
movzbl 0x12(%rsp), %eax
movzbl 0x13(%rsp), %ecx
subl %ecx, %eax
movl %eax, 0x14(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x23a90c
movzbl 0x13(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a90a
movzbl 0x12(%rsp), %eax
cmpl $0xfe, %eax
jl 0x23a90a
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
jmp 0x23a931
jmp 0x23a90e
jmp 0x23a931
jmp 0x23a910
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x20(%rsp)
jmp 0x23a86c
cmpl $0x0, 0x14(%rsp)
jl 0x23a94e
movq 0x48(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x38(%rsp)
jmp 0x23a962
movq 0x48(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x23a7d6
movq 0x58(%rsp), %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0x10(%rax)
jmp 0x23a977
movb $0x1, 0x97(%rsp)
movb 0x97(%rsp), %al
andb $0x1, %al
addq $0x98, %rsp
retq