// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/greedyedist.c
// Function: evalentryforward
static void evalentryforward(const GtSeqabstract *useq,
                             const GtSeqabstract *vseq,
                             GtFrontResource *ftres,
                             GtFrontvalue *fval,
                             const GtFrontspec *fspec,
                             GtWord k)
{
  GtWord value, t;
  GtFrontvalue *fptr;

#ifdef SKDEBUG
  printf("evalentryforward(k="GT_WD")\n",k);
#endif
  fptr = ftres->frontspace + fspec->offset - fspec->left;
  t = accessfront(ftres,fptr,fspec,k) + 1;         /* same diagonal */
#ifdef SKDEBUG
  printf("same: access(k="GT_WD")="GT_WD"\n",k,t-1);
#endif

  value = accessfront(ftres,fptr,fspec,k-1);       /* diagonal below */
#ifdef SKDEBUG
  printf("below: access(k="GT_WD")="GT_WD"\n",k-1,value);
#endif
  if (t < value)
  {
    t = value;
  }
  value = accessfront(ftres,fptr,fspec,k+1) + 1;     /* diagonal above */
#ifdef SKDEBUG
  printf("above: access(k="GT_WD")="GT_WD"\n",k+1,value-1);
#endif
  if (t < value)
  {
    t = value;
  }
#ifdef SKDEBUG
  printf("maximum: t="GT_WD"\n",t);   /* the maximum over three values */
#endif
  if (t < 0 || t+k < 0)             /* no negative value */
  {
    GT_FRONT_STORE(ftres,GT_FRONT_ROWVALUE(fval),GT_FRONT_MINUSINFINITY(ftres));
  } else
  {
    if (ftres->ulen != 0 && ftres->vlen != 0 &&
        t < ftres->ulen && t + k < ftres->vlen)
    {
      GtUword lcp;
      lcp = gt_seqabstract_lcp(true,
                               useq,
                               vseq,
                               (GtUword) t,
                               (GtUword) (t + k));
      t += lcp;
    }
    if (t > ftres->ulen || t + k > ftres->vlen)
    {
      GT_FRONT_STORE(ftres,GT_FRONT_ROWVALUE(fval),
                     GT_FRONT_MINUSINFINITY(ftres));
    } else
    {
      GT_FRONT_STORE(ftres,GT_FRONT_ROWVALUE(fval),t);
    }
  }
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movq %rsi, 0x48(%rsp)
movq %rdx, 0x40(%rsp)
movq %rcx, 0x38(%rsp)
movq %r8, 0x30(%rsp)
movq %r9, 0x28(%rsp)
movq 0x40(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x30(%rsp), %rcx
movq (%rcx), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq 0x30(%rsp), %rdx
xorl %ecx, %ecx
subq 0x10(%rdx), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x10(%rsp)
movq 0x40(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x28(%rsp), %rcx
callq 0x253f70
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq 0x40(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x28(%rsp), %rcx
subq $0x1, %rcx
callq 0x253f70
movq %rax, 0x20(%rsp)
movq 0x18(%rsp), %rax
cmpq 0x20(%rsp), %rax
jge 0x25408b
movq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x40(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x28(%rsp), %rcx
addq $0x1, %rcx
callq 0x253f70
addq $0x1, %rax
movq %rax, 0x20(%rsp)
movq 0x18(%rsp), %rax
cmpq 0x20(%rsp), %rax
jge 0x2540c7
movq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpq $0x0, 0x18(%rsp)
jl 0x2540df
movq 0x18(%rsp), %rax
addq 0x28(%rsp), %rax
cmpq $0x0, %rax
jge 0x2540f5
movq 0x40(%rsp), %rax
movq 0x18(%rax), %rcx
movq 0x38(%rsp), %rax
movq %rcx, (%rax)
jmp 0x2541b0
movq 0x40(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x254169
movq 0x40(%rsp), %rax
cmpq $0x0, 0x10(%rax)
je 0x254169
movq 0x18(%rsp), %rax
movq 0x40(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jge 0x254169
movq 0x18(%rsp), %rax
addq 0x28(%rsp), %rax
movq 0x40(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jge 0x254169
movq 0x50(%rsp), %rsi
movq 0x48(%rsp), %rdx
movq 0x18(%rsp), %rcx
movq 0x18(%rsp), %r8
addq 0x28(%rsp), %r8
movl $0x1, %edi
callq 0x2b0d50
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rax
addq 0x18(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq 0x40(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jg 0x25418e
movq 0x18(%rsp), %rax
addq 0x28(%rsp), %rax
movq 0x40(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jle 0x2541a1
movq 0x40(%rsp), %rax
movq 0x18(%rax), %rcx
movq 0x38(%rsp), %rax
movq %rcx, (%rax)
jmp 0x2541ae
movq 0x18(%rsp), %rcx
movq 0x38(%rsp), %rax
movq %rcx, (%rax)
jmp 0x2541b0
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)
nop