// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/ft-front-generation.c
// Function: gt_front_trace2eoplist_full_front_directed
void gt_front_trace2eoplist_full_front_directed(GtEoplist *eoplist,
                                                const GtFrontTrace *front_trace,
                                                GtUword distance,
                                                const GtUchar *useq,
                                                GtUword ulen,
                                                const GtUchar *vseq,
                                                GtUword vlen)
{
  const GtBackreftable *basefront, *current;
  GtUword firstindex;
  GtWord diagonal = (GtWord) vlen - (GtWord) ulen;
  uint32_t row;
  uint8_t preferred_eop = FT_EOP_MISMATCH;

  gt_assert(front_trace != NULL &&
            front_trace->backref_nextfree >= 2 * distance + 1);
  basefront = front_trace->backref_table + front_trace->backref_nextfree
                                         - (2 * distance + 1);
  current = basefront + distance + diagonal;
  firstindex = gt_eoplist_length(eoplist);
  gt_assert(ulen <= (GtUword) UINT32_MAX);
  row = ulen;
  while (distance > 0)
  {
    GtUword nextrowadd;

    if (eoplist != NULL)
    {
      if (current->lcs > 0)
      {
        gt_eoplist_match_add(eoplist,current->lcs);
      }
    } else
    {
      gt_check_diagonal_run(useq, vseq, diagonal, row - current->lcs, row);
    }
    if (current->bits & preferred_eop)
    {
      if (preferred_eop == FT_EOP_MISMATCH)
      {
        nextrowadd = 1;
      } else
      {
        if (preferred_eop == FT_EOP_INSERTION)
        {
          gt_assert(-(GtWord) ulen < diagonal);
          diagonal--;
          nextrowadd = 0;
        } else
        {
          gt_assert(preferred_eop == FT_EOP_DELETION);
          gt_assert(diagonal < (GtWord) vlen);
          diagonal++;
          nextrowadd = 1;
        }
      }
    } else
    {
      if (current->bits & FT_EOP_MISMATCH)
      {
        preferred_eop = FT_EOP_MISMATCH;
        nextrowadd = 1;
      } else
      {
        if (current->bits & FT_EOP_INSERTION)
        {
          gt_assert(-(GtWord) ulen < diagonal);
          diagonal--;
          preferred_eop = FT_EOP_INSERTION;
          nextrowadd = 0;
        } else
        {
          gt_assert(current->bits & FT_EOP_DELETION);
          gt_assert(diagonal < (GtWord) vlen);
          diagonal++;
          preferred_eop = FT_EOP_DELETION;
          nextrowadd = 1;
        }
      }
    }
    if (eoplist != NULL)
    {
      if (preferred_eop == FT_EOP_DELETION)
      {
        gt_eoplist_deletion_add(eoplist);
      } else
      {
        if (preferred_eop == FT_EOP_INSERTION)
        {
          gt_eoplist_insertion_add(eoplist);
        } else
        {
          gt_eoplist_mismatch_add(eoplist);
        }
      }
    }
    distance--;
    basefront -= (2 * distance + 1);
    gt_assert(basefront >= front_trace->backref_table);
    gt_assert(row >= current->lcs + nextrowadd);
    row -= current->lcs + nextrowadd;
    current = basefront + distance + diagonal;
  }
  gt_assert(basefront == front_trace->backref_table && current->bits == 0);
  if (eoplist != NULL)
  {
    if (current->lcs > 0)
    {
      gt_eoplist_match_add(eoplist,current->lcs);
    }
    gt_eoplist_reverse_end(eoplist,firstindex);
  }
}

// Assembly:
subq $0x68, %rsp
movq 0x70(%rsp), %rax
movq %rdi, 0x60(%rsp)
movq %rsi, 0x58(%rsp)
movq %rdx, 0x50(%rsp)
movq %rcx, 0x48(%rsp)
movq %r8, 0x40(%rsp)
movq %r9, 0x38(%rsp)
movq 0x70(%rsp), %rax
subq 0x40(%rsp), %rax
movq %rax, 0x18(%rsp)
movb $0x1, 0x13(%rsp)
cmpq $0x0, 0x58(%rsp)
je 0x4c7e6d
movq 0x58(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x50(%rsp), %rcx
shlq %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jae 0x4c7ea5
movq 0x17412c(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4e195(%rip), %rsi     # 0x516013
leaq 0xf0df8(%rip), %rdx     # 0x5b8c7d
leaq 0xf0e3a(%rip), %rcx     # 0x5b8cc6
leaq 0xf0c20(%rip), %r8      # 0x5b8ab3
movl $0x2f4, %r9d            # imm = 0x2F4
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c7ea7
movq 0x58(%rsp), %rax
movq (%rax), %rax
movq 0x58(%rsp), %rcx
movq 0x10(%rcx), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq 0x50(%rsp), %rdx
shlq %rdx
addq $0x1, %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq 0x50(%rsp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq 0x18(%rsp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, 0x28(%rsp)
movq 0x60(%rsp), %rdi
callq 0x4c2fe0
movq %rax, 0x20(%rsp)
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpq %rax, 0x40(%rsp)
jbe 0x4c7f51
movq 0x174080(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4e0e9(%rip), %rsi     # 0x516013
leaq 0xf0dc0(%rip), %rdx     # 0x5b8cf1
leaq 0xf0d8e(%rip), %rcx     # 0x5b8cc6
leaq 0xf0b74(%rip), %r8      # 0x5b8ab3
movl $0x2f9, %r9d            # imm = 0x2F9
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c7f53
movq 0x40(%rsp), %rax
movl %eax, 0x14(%rsp)
cmpq $0x0, 0x50(%rsp)
jbe 0x4c83be
cmpq $0x0, 0x60(%rsp)
je 0x4c7f99
movq 0x28(%rsp), %rax
movl (%rax), %eax
shrl $0x3, %eax
cmpl $0x0, %eax
jle 0x4c7f97
movq 0x60(%rsp), %rdi
movq 0x28(%rsp), %rax
movl (%rax), %eax
shrl $0x3, %eax
movl %eax, %eax
movl %eax, %esi
callq 0x4c28f0
jmp 0x4c7fc2
movq 0x48(%rsp), %rdi
movq 0x38(%rsp), %rsi
movq 0x18(%rsp), %rdx
movl 0x14(%rsp), %ecx
movq 0x28(%rsp), %rax
movl (%rax), %eax
shrl $0x3, %eax
subl %eax, %ecx
movl 0x14(%rsp), %r8d
callq 0x4c8460
movq 0x28(%rsp), %rax
movl (%rax), %eax
andl $0x7, %eax
movzbl 0x13(%rsp), %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x4c8110
movzbl 0x13(%rsp), %eax
cmpl $0x1, %eax
jne 0x4c7ff4
movq $0x1, 0x8(%rsp)
jmp 0x4c810b
movzbl 0x13(%rsp), %eax
cmpl $0x2, %eax
jne 0x4c8064
jmp 0x4c8000
xorl %eax, %eax
subq 0x40(%rsp), %rax
cmpq 0x18(%rsp), %rax
jl 0x4c8046
movq 0x173f8b(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4dff4(%rip), %rsi     # 0x516013
leaq 0xf0ce8(%rip), %rdx     # 0x5b8d0e
leaq 0xf0c99(%rip), %rcx     # 0x5b8cc6
leaq 0xf0a7f(%rip), %r8      # 0x5b8ab3
movl $0x312, %r9d            # imm = 0x312
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c8048
movq 0x18(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x18(%rsp)
movq $0x0, 0x8(%rsp)
jmp 0x4c8109
jmp 0x4c8066
movzbl 0x13(%rsp), %eax
cmpl $0x4, %eax
je 0x4c80a8
movq 0x173f29(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4df92(%rip), %rsi     # 0x516013
leaq 0xf0ca0(%rip), %rdx     # 0x5b8d28
leaq 0xf0c37(%rip), %rcx     # 0x5b8cc6
leaq 0xf0a1d(%rip), %r8      # 0x5b8ab3
movl $0x317, %r9d            # imm = 0x317
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c80aa
jmp 0x4c80ac
movq 0x18(%rsp), %rax
cmpq 0x70(%rsp), %rax
jl 0x4c80f0
movq 0x173ee1(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4df4a(%rip), %rsi     # 0x516013
leaq 0xf0c79(%rip), %rdx     # 0x5b8d49
leaq 0xf0bef(%rip), %rcx     # 0x5b8cc6
leaq 0xf09d5(%rip), %r8      # 0x5b8ab3
movl $0x318, %r9d            # imm = 0x318
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c80f2
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq $0x1, 0x8(%rsp)
jmp 0x4c810b
jmp 0x4c8268
movq 0x28(%rsp), %rax
movl (%rax), %eax
andl $0x7, %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x4c8135
movb $0x1, 0x13(%rsp)
movq $0x1, 0x8(%rsp)
jmp 0x4c8266
movq 0x28(%rsp), %rax
movl (%rax), %eax
andl $0x7, %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x4c81b2
jmp 0x4c8149
xorl %eax, %eax
subq 0x40(%rsp), %rax
cmpq 0x18(%rsp), %rax
jl 0x4c818f
movq 0x173e42(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4deab(%rip), %rsi     # 0x516013
leaq 0xf0b9f(%rip), %rdx     # 0x5b8d0e
leaq 0xf0b50(%rip), %rcx     # 0x5b8cc6
leaq 0xf0936(%rip), %r8      # 0x5b8ab3
movl $0x327, %r9d            # imm = 0x327
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c8191
movq 0x18(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x18(%rsp)
movb $0x2, 0x13(%rsp)
movq $0x0, 0x8(%rsp)
jmp 0x4c8264
jmp 0x4c81b4
movq 0x28(%rsp), %rax
movl (%rax), %eax
andl $0x7, %eax
andl $0x4, %eax
cmpl $0x0, %eax
jne 0x4c81fe
movq 0x173dd3(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4de3c(%rip), %rsi     # 0x516013
leaq 0xf0b84(%rip), %rdx     # 0x5b8d62
leaq 0xf0ae1(%rip), %rcx     # 0x5b8cc6
leaq 0xf08c7(%rip), %r8      # 0x5b8ab3
movl $0x32d, %r9d            # imm = 0x32D
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c8200
jmp 0x4c8202
movq 0x18(%rsp), %rax
cmpq 0x70(%rsp), %rax
jl 0x4c8246
movq 0x173d8b(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4ddf4(%rip), %rsi     # 0x516013
leaq 0xf0b23(%rip), %rdx     # 0x5b8d49
leaq 0xf0a99(%rip), %rcx     # 0x5b8cc6
leaq 0xf087f(%rip), %r8      # 0x5b8ab3
movl $0x32e, %r9d            # imm = 0x32E
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c8248
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movb $0x4, 0x13(%rsp)
movq $0x1, 0x8(%rsp)
jmp 0x4c8266
jmp 0x4c8268
cmpq $0x0, 0x60(%rsp)
je 0x4c82aa
movzbl 0x13(%rsp), %eax
cmpl $0x4, %eax
jne 0x4c8286
movq 0x60(%rsp), %rdi
callq 0x4c24d0
jmp 0x4c82a8
movzbl 0x13(%rsp), %eax
cmpl $0x2, %eax
jne 0x4c829c
movq 0x60(%rsp), %rdi
callq 0x4c26c0
jmp 0x4c82a6
movq 0x60(%rsp), %rdi
callq 0x4c2d60
jmp 0x4c82a8
jmp 0x4c82aa
movq 0x50(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rdx
shlq %rdx
addq $0x1, %rdx
movq 0x30(%rsp), %rax
xorl %ecx, %ecx
subq %rdx, %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq 0x58(%rsp), %rcx
cmpq (%rcx), %rax
jae 0x4c8321
movq 0x173cb0(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4dd19(%rip), %rsi     # 0x516013
leaq 0xf0a81(%rip), %rdx     # 0x5b8d82
leaq 0xf09be(%rip), %rcx     # 0x5b8cc6
leaq 0xf07a4(%rip), %r8      # 0x5b8ab3
movl $0x347, %r9d            # imm = 0x347
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c8323
jmp 0x4c8325
movl 0x14(%rsp), %eax
movq 0x28(%rsp), %rcx
movl (%rcx), %ecx
shrl $0x3, %ecx
movl %ecx, %ecx
addq 0x8(%rsp), %rcx
cmpq %rcx, %rax
jae 0x4c8377
movq 0x173c5a(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4dcc3(%rip), %rsi     # 0x516013
leaq 0xf0a53(%rip), %rdx     # 0x5b8daa
leaq 0xf0968(%rip), %rcx     # 0x5b8cc6
leaq 0xf074e(%rip), %r8      # 0x5b8ab3
movl $0x348, %r9d            # imm = 0x348
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c8379
movq 0x28(%rsp), %rax
movl (%rax), %eax
shrl $0x3, %eax
movl %eax, %eax
movl %eax, %ecx
addq 0x8(%rsp), %rcx
movl 0x14(%rsp), %eax
subq %rcx, %rax
movl %eax, 0x14(%rsp)
movq 0x30(%rsp), %rax
movq 0x50(%rsp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq 0x18(%rsp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, 0x28(%rsp)
jmp 0x4c7f5c
jmp 0x4c83c0
movq 0x30(%rsp), %rax
movq 0x58(%rsp), %rcx
cmpq (%rcx), %rax
jne 0x4c83de
movq 0x28(%rsp), %rax
movl (%rax), %eax
andl $0x7, %eax
cmpl $0x0, %eax
je 0x4c8416
movq 0x173bbb(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4dc24(%rip), %rsi     # 0x516013
leaq 0xf09d5(%rip), %rdx     # 0x5b8dcb
leaq 0xf08c9(%rip), %rcx     # 0x5b8cc6
leaq 0xf06af(%rip), %r8      # 0x5b8ab3
movl $0x34c, %r9d            # imm = 0x34C
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x4c8418
cmpq $0x0, 0x60(%rsp)
je 0x4c8456
movq 0x28(%rsp), %rax
movl (%rax), %eax
shrl $0x3, %eax
cmpl $0x0, %eax
jle 0x4c8447
movq 0x60(%rsp), %rdi
movq 0x28(%rsp), %rax
movl (%rax), %eax
shrl $0x3, %eax
movl %eax, %eax
movl %eax, %esi
callq 0x4c28f0
movq 0x60(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x4c3010
addq $0x68, %rsp
retq
nopl (%rax,%rax)