// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/greedyedist.c
// Function: greedyunitedist
GtUword greedyunitedist(GtFrontResource *ftres,
                        const GtSeqabstract *useq,
                        const GtSeqabstract *vseq)
{
  GtUword realdistance, kval;
  GtWord r;
  GtFrontspec frontspecspace[2], *fspec, *prevfspec;
  GtFrontvalue *fptr;

#ifdef SKDEBUG
  printf("unitedistcheckSEPgeneric(ulen=" GT_WU ",vlen=" GT_WU ")\n",
         ulenvalue,vlenvalue);
#endif
  gt_assert(gt_seqabstract_length(useq) < (GtUword) LONG_MAX);
  gt_assert(gt_seqabstract_length(vseq) < (GtUword) LONG_MAX);
  ftres->ulen = (GtWord) gt_seqabstract_length(useq);
  ftres->vlen = (GtWord) gt_seqabstract_length(vseq);
  ftres->integermin = -GT_MAX(ftres->ulen,ftres->vlen);
  prevfspec = &frontspecspace[0];
  firstfrontforward(useq,vseq,ftres,prevfspec);
  if (ftres->ulen == ftres->vlen &&
      GT_FRONT_ROWVALUE(ftres->frontspace) == ftres->vlen)
  {
    realdistance = 0;
  } else
  {
    for (kval=1UL, r=1-GT_MIN(ftres->ulen,ftres->vlen);
         /* Nothing */ ; kval++, r++)
    {
      if (prevfspec == &frontspecspace[0])
      {
        fspec = &frontspecspace[1];
      } else
      {
        fspec = &frontspecspace[0];
      }
      fspec->offset = prevfspec->offset + prevfspec->width;
      frontspecparms(ftres,fspec,(GtWord) kval,r);
      while ((GtUword) (fspec->offset + fspec->width)
             >= ftres->currentallocated)
      {
        ftres->currentallocated += kval+1;
        ftres->frontspace
          = gt_realloc(ftres->frontspace,
                       sizeof *ftres->frontspace * ftres->currentallocated);
      }
      (void) evalfrontforward(useq,vseq,ftres,prevfspec,fspec,r);
      fptr = ftres->frontspace + fspec->offset - fspec->left;
      if (accessfront(ftres,fptr,fspec,ftres->vlen - ftres->ulen)
          == ftres->ulen)
      {
        realdistance = kval;
        break;
      }
      if (prevfspec == &frontspecspace[0])
      {
        prevfspec = &frontspecspace[1];
      } else
      {
        prevfspec = &frontspecspace[0];
      }
    }
  }
#ifdef SKDEBUG
  printf("unitedistfrontSEP returns "GT_WD"\n",realdistance);
#endif
  return realdistance;
}

// Assembly:
subq $0x98, %rsp
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq %rdx, 0x80(%rsp)
movq 0x88(%rsp), %rdi
callq 0x2b0cd0
movabsq $0x7fffffffffffffff, %rcx # imm = 0x7FFFFFFFFFFFFFFF
cmpq %rcx, %rax
jb 0x253953
movq 0x3e867e(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2c26e7(%rip), %rsi    # 0x516013
leaq 0x326547(%rip), %rdx    # 0x579e7a
leaq 0x2cf601(%rip), %rcx    # 0x522f3b
leaq 0x326521(%rip), %r8     # 0x579e62
movl $0x125, %r9d            # imm = 0x125
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x253955
jmp 0x253957
movq 0x80(%rsp), %rdi
callq 0x2b0cd0
movabsq $0x7fffffffffffffff, %rcx # imm = 0x7FFFFFFFFFFFFFFF
cmpq %rcx, %rax
jb 0x2539ab
movq 0x3e8626(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2c268f(%rip), %rsi    # 0x516013
leaq 0x326520(%rip), %rdx    # 0x579eab
leaq 0x2cf5a9(%rip), %rcx    # 0x522f3b
leaq 0x3264c9(%rip), %r8     # 0x579e62
movl $0x126, %r9d            # imm = 0x126
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2539ad
movq 0x88(%rsp), %rdi
callq 0x2b0cd0
movq %rax, %rcx
movq 0x90(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x80(%rsp), %rdi
callq 0x2b0cd0
movq %rax, %rcx
movq 0x90(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x90(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x90(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jle 0x253a12
movq 0x90(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
jmp 0x253a23
movq 0x90(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
xorl %ecx, %ecx
subq %rax, %rcx
movq 0x90(%rsp), %rax
movq %rcx, 0x18(%rax)
leaq 0x30(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x88(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x90(%rsp), %rdx
movq 0x20(%rsp), %rcx
callq 0x253ce0
movq 0x90(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x90(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jne 0x253aaa
movq 0x90(%rsp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rax
movq 0x90(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jne 0x253aaa
movq $0x0, 0x78(%rsp)
jmp 0x253cc8
movq $0x1, 0x70(%rsp)
movq 0x90(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x90(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jge 0x253ae0
movq 0x90(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x8(%rsp)
jmp 0x253af1
movq 0x90(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rcx
movl $0x1, %eax
subq %rcx, %rax
movq %rax, 0x68(%rsp)
movq 0x20(%rsp), %rax
leaq 0x30(%rsp), %rcx
cmpq %rcx, %rax
jne 0x253b22
leaq 0x30(%rsp), %rax
addq $0x18, %rax
movq %rax, 0x28(%rsp)
jmp 0x253b2c
leaq 0x30(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x20(%rsp), %rax
movq (%rax), %rcx
movq 0x20(%rsp), %rax
addq 0x8(%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x70(%rsp), %rdx
movq 0x68(%rsp), %rcx
callq 0x253d80
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq 0x28(%rsp), %rcx
addq 0x8(%rcx), %rax
movq 0x90(%rsp), %rcx
cmpq (%rcx), %rax
jb 0x253bd3
movq 0x70(%rsp), %rcx
addq $0x1, %rcx
movq 0x90(%rsp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
movq 0x20(%rax), %rdi
movq 0x90(%rsp), %rax
movq (%rax), %rsi
shlq $0x3, %rsi
leaq 0x3262aa(%rip), %rdx    # 0x579e62
movl $0x144, %ecx            # imm = 0x144
callq 0xe8540
movq %rax, %rcx
movq 0x90(%rsp), %rax
movq %rcx, 0x20(%rax)
jmp 0x253b61
movq 0x88(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x90(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x28(%rsp), %r8
movq 0x68(%rsp), %r9
callq 0x253e60
movq 0x90(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rsp), %rcx
movq (%rcx), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq 0x28(%rsp), %rdx
xorl %ecx, %ecx
subq 0x10(%rdx), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x18(%rsp)
movq 0x90(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x90(%rsp), %rax
movq 0x10(%rax), %rcx
movq 0x90(%rsp), %rax
subq 0x8(%rax), %rcx
callq 0x253f70
movq 0x90(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x253c7a
movq 0x70(%rsp), %rax
movq %rax, 0x78(%rsp)
jmp 0x253cc6
movq 0x20(%rsp), %rax
leaq 0x30(%rsp), %rcx
cmpq %rcx, %rax
jne 0x253c99
leaq 0x30(%rsp), %rax
addq $0x18, %rax
movq %rax, 0x20(%rsp)
jmp 0x253ca3
leaq 0x30(%rsp), %rax
movq %rax, 0x20(%rsp)
jmp 0x253ca5
movq 0x70(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x70(%rsp)
movq 0x68(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x68(%rsp)
jmp 0x253b03
jmp 0x253cc8
movq 0x78(%rsp), %rax
addq $0x98, %rsp
retq
nopw %cs:(%rax,%rax)