// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/seed-extend.c
// Function: gt_greedy_extend_init
static void gt_greedy_extend_init(GtFTsequenceResources *ufsr,
                                  GtFTsequenceResources *vfsr,
                                  const GtSeqorEncseq *dbes,
                                  const GtSeqorEncseq *queryes,
                                  GtReadmode query_readmode,
                                  const GtUword query_seqlen,
                                  GtGreedyextendmatchinfo *ggemi)
{
  if (ggemi->left_front_trace != NULL)
  {
    front_trace_reset(ggemi->left_front_trace,0);
  }
  if (ggemi->right_front_trace != NULL)
  {
    front_trace_reset(ggemi->right_front_trace,0);
  }
  if (dbes->encseq != NULL)
  {
    if (ggemi->encseq_r_in_u == NULL)
    {
      ggemi->encseq_r_in_u
        = gt_encseq_create_reader_with_readmode(dbes->encseq,
                                                GT_READMODE_FORWARD,
                                                0);
      if (gt_encseq_wildcards(dbes->encseq) > 0)
      {
        ggemi->db_haswildcards = true;
        ggemi->db_twobit_possible = false;
      } else
      {
        ggemi->db_haswildcards = false;
        if (ggemi->db_extend_char_access == GT_EXTEND_CHAR_ACCESS_ANY &&
            gt_encseq_has_twobitencoding(dbes->encseq))
        {
          ggemi->db_twobit_possible = true;
        } else
        {
          ggemi->db_twobit_possible = false;
        }
      }
    }
  } else
  {
    ggemi->db_twobit_possible = false;
    ggemi->db_haswildcards = dbes->haswildcards;
  }
  if (queryes->encseq != NULL)
  {
    if (ggemi->encseq_r_in_v == NULL)
    {
      ggemi->encseq_r_in_v
        = gt_encseq_create_reader_with_readmode(queryes->encseq,
                                                query_readmode,0);
      if (gt_encseq_wildcards(queryes->encseq) > 0)
      {
        ggemi->query_haswildcards = true;
        ggemi->query_twobit_possible = false;
      } else
      {
        ggemi->query_haswildcards = false;
        if (ggemi->query_extend_char_access == GT_EXTEND_CHAR_ACCESS_ANY &&
            gt_encseq_has_twobitencoding(queryes->encseq))
        {
          ggemi->query_twobit_possible = true;
        } else
        {
          ggemi->query_twobit_possible = false;
        }
      }
    }
  } else
  {
    ggemi->query_twobit_possible = false;
    ggemi->query_haswildcards = queryes->haswildcards;
  }
  if (ggemi->db_totallength == GT_UWORD_MAX)
  {
    if (dbes->encseq != NULL)
    {
      ggemi->db_totallength = gt_encseq_total_length(dbes->encseq);
    } else
    {
      ggemi->db_totallength = 0;
    }
  }
  if (dbes->encseq != NULL)
  {
    gt_FTsequenceResources_init(ufsr,
                                dbes->encseq,
                                GT_READMODE_FORWARD,
                                ggemi->encseq_r_in_u,
                                &ggemi->usequence_cache,
                                NULL,
                                ggemi->db_totallength,
                                ggemi->db_totallength,
                                ggemi->db_extend_char_access,
                                ggemi->db_twobit_possible,
                                ggemi->db_haswildcards);
  } else
  {
    gt_FTsequenceResources_init(ufsr,
                                NULL,
                                GT_READMODE_FORWARD,
                                ggemi->encseq_r_in_u,
                                &ggemi->usequence_cache,
                                dbes->seq,
                                dbes->seqlength,
                                0,
                                GT_EXTEND_CHAR_ACCESS_DIRECT,
                                false,
                                ggemi->db_haswildcards);
  }
  if (queryes->encseq != NULL)
  {
    gt_FTsequenceResources_init(vfsr,
                                queryes->encseq,
                                query_readmode,
                                ggemi->encseq_r_in_v,
                                &ggemi->vsequence_cache,
                                NULL,
                                query_seqlen,
                                gt_encseq_total_length(queryes->encseq),
                                ggemi->query_extend_char_access,
                                ggemi->query_twobit_possible,
                                ggemi->query_haswildcards);
  } else
  {
    gt_FTsequenceResources_init(vfsr,
                                NULL,
                                query_readmode,
                                ggemi->encseq_r_in_v,
                                &ggemi->vsequence_cache,
                                queryes->seq,
                                query_seqlen,
                                0,
                                GT_EXTEND_CHAR_ACCESS_DIRECT,
                                false,
                                ggemi->query_haswildcards);
  }
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x88, %rsp
movq 0xa0(%rsp), %rax
movq %rdi, 0x80(%rsp)
movq %rsi, 0x78(%rsp)
movq %rdx, 0x70(%rsp)
movq %rcx, 0x68(%rsp)
movl %r8d, 0x64(%rsp)
movq %r9, 0x58(%rsp)
movq 0xa0(%rsp), %rax
cmpq $0x0, (%rax)
je 0x2ac765
movq 0xa0(%rsp), %rax
movq (%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4c68d0
movq 0xa0(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2ac789
movq 0xa0(%rsp), %rax
movq 0x8(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4c68d0
movq 0x70(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2ac85d
movq 0xa0(%rsp), %rax
cmpq $0x0, 0x58(%rax)
jne 0x2ac85b
movq 0x70(%rsp), %rax
movq 0x8(%rax), %rdi
xorl %esi, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0xac380
movq %rax, %rcx
movq 0xa0(%rsp), %rax
movq %rcx, 0x58(%rax)
movq 0x70(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0xb2880
cmpq $0x0, %rax
jbe 0x2ac803
movq 0xa0(%rsp), %rax
movb $0x1, 0xc0(%rax)
movq 0xa0(%rsp), %rax
movb $0x0, 0xbe(%rax)
jmp 0x2ac859
movq 0xa0(%rsp), %rax
movb $0x0, 0xc0(%rax)
movq 0xa0(%rsp), %rax
cmpl $0x3, 0xb4(%rax)
jne 0x2ac848
movq 0x70(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0xac6d0
testb $0x1, %al
jne 0x2ac837
jmp 0x2ac848
movq 0xa0(%rsp), %rax
movb $0x1, 0xbe(%rax)
jmp 0x2ac857
movq 0xa0(%rsp), %rax
movb $0x0, 0xbe(%rax)
jmp 0x2ac859
jmp 0x2ac85b
jmp 0x2ac885
movq 0xa0(%rsp), %rax
movb $0x0, 0xbe(%rax)
movq 0x70(%rsp), %rax
movb 0x31(%rax), %cl
movq 0xa0(%rsp), %rax
andb $0x1, %cl
movb %cl, 0xc0(%rax)
movq 0x68(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2ac95b
movq 0xa0(%rsp), %rax
cmpq $0x0, 0x60(%rax)
jne 0x2ac959
movq 0x68(%rsp), %rax
movq 0x8(%rax), %rdi
movl 0x64(%rsp), %esi
xorl %eax, %eax
movl %eax, %edx
callq 0xac380
movq %rax, %rcx
movq 0xa0(%rsp), %rax
movq %rcx, 0x60(%rax)
movq 0x68(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0xb2880
cmpq $0x0, %rax
jbe 0x2ac901
movq 0xa0(%rsp), %rax
movb $0x1, 0xc1(%rax)
movq 0xa0(%rsp), %rax
movb $0x0, 0xbf(%rax)
jmp 0x2ac957
movq 0xa0(%rsp), %rax
movb $0x0, 0xc1(%rax)
movq 0xa0(%rsp), %rax
cmpl $0x3, 0xb8(%rax)
jne 0x2ac946
movq 0x68(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0xac6d0
testb $0x1, %al
jne 0x2ac935
jmp 0x2ac946
movq 0xa0(%rsp), %rax
movb $0x1, 0xbf(%rax)
jmp 0x2ac955
movq 0xa0(%rsp), %rax
movb $0x0, 0xbf(%rax)
jmp 0x2ac957
jmp 0x2ac959
jmp 0x2ac983
movq 0xa0(%rsp), %rax
movb $0x0, 0xbf(%rax)
movq 0x68(%rsp), %rax
movb 0x31(%rax), %cl
movq 0xa0(%rsp), %rax
andb $0x1, %cl
movb %cl, 0xc1(%rax)
movq 0xa0(%rsp), %rax
cmpq $-0x1, 0x30(%rax)
jne 0x2ac9cf
movq 0x70(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2ac9bd
movq 0x70(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0xa9d00
movq %rax, %rcx
movq 0xa0(%rsp), %rax
movq %rcx, 0x30(%rax)
jmp 0x2ac9cd
movq 0xa0(%rsp), %rax
movq $0x0, 0x30(%rax)
jmp 0x2ac9cf
movq 0x70(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2aca7c
movq 0x80(%rsp), %rdi
movq 0x70(%rsp), %rax
movq 0x8(%rax), %rsi
movq 0xa0(%rsp), %rax
movq 0x58(%rax), %rcx
movq 0xa0(%rsp), %r8
addq $0x68, %r8
movq 0xa0(%rsp), %rax
movq 0x30(%rax), %r14
movq 0xa0(%rsp), %rax
movq 0x30(%rax), %rbx
movq 0xa0(%rsp), %rax
movl 0xb4(%rax), %r11d
movq 0xa0(%rsp), %rax
movb 0xbe(%rax), %r10b
movq 0xa0(%rsp), %rax
movb 0xc0(%rax), %al
xorl %edx, %edx
xorl %r9d, %r9d
andb $0x1, %r10b
andb $0x1, %al
movq %r14, (%rsp)
movq %rbx, 0x8(%rsp)
movl %r11d, 0x10(%rsp)
movzbl %r10b, %r10d
movl %r10d, 0x18(%rsp)
movzbl %al, %eax
movl %eax, 0x20(%rsp)
callq 0x2ad800
jmp 0x2acaec
movq 0x80(%rsp), %rdi
movq 0xa0(%rsp), %rax
movq 0x58(%rax), %rcx
movq 0xa0(%rsp), %r8
addq $0x68, %r8
movq 0x70(%rsp), %rax
movq (%rax), %r9
movq 0x70(%rsp), %rax
movq 0x20(%rax), %r10
movq 0xa0(%rsp), %rax
movb 0xc0(%rax), %al
xorl %edx, %edx
movl %edx, %esi
xorl %edx, %edx
andb $0x1, %al
movq %r10, (%rsp)
movq $0x0, 0x8(%rsp)
movl $0x2, 0x10(%rsp)
movl $0x0, 0x18(%rsp)
movzbl %al, %eax
movl %eax, 0x20(%rsp)
callq 0x2ad800
movq 0x68(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2acbc8
movq 0x78(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x68(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x38(%rsp)
movl 0x64(%rsp), %eax
movl %eax, 0x44(%rsp)
movq 0xa0(%rsp), %rax
movq 0x60(%rax), %rax
movq %rax, 0x48(%rsp)
movq 0xa0(%rsp), %rax
addq $0x80, %rax
movq %rax, 0x50(%rsp)
movq 0x58(%rsp), %r14
movq 0x68(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0xa9d00
movq 0x30(%rsp), %rdi
movq 0x38(%rsp), %rsi
movl 0x44(%rsp), %edx
movq 0x48(%rsp), %rcx
movq 0x50(%rsp), %r8
movq %rax, %rbx
movq 0xa0(%rsp), %rax
movl 0xb8(%rax), %r11d
movq 0xa0(%rsp), %rax
movb 0xbf(%rax), %r10b
movq 0xa0(%rsp), %rax
movb 0xc1(%rax), %al
xorl %r9d, %r9d
andb $0x1, %r10b
andb $0x1, %al
movq %r14, (%rsp)
movq %rbx, 0x8(%rsp)
movl %r11d, 0x10(%rsp)
movzbl %r10b, %r10d
movl %r10d, 0x18(%rsp)
movzbl %al, %eax
movl %eax, 0x20(%rsp)
callq 0x2ad800
jmp 0x2acc37
movq 0x78(%rsp), %rdi
movl 0x64(%rsp), %edx
movq 0xa0(%rsp), %rax
movq 0x60(%rax), %rcx
movq 0xa0(%rsp), %r8
addq $0x80, %r8
movq 0x68(%rsp), %rax
movq (%rax), %r9
movq 0x58(%rsp), %r10
movq 0xa0(%rsp), %rax
movb 0xc1(%rax), %al
xorl %esi, %esi
xorl %r11d, %r11d
andb $0x1, %al
movq %r10, (%rsp)
movq $0x0, 0x8(%rsp)
movl $0x2, 0x10(%rsp)
movl $0x0, 0x18(%rsp)
movzbl %al, %eax
movl %eax, 0x20(%rsp)
callq 0x2ad800
addq $0x88, %rsp
popq %rbx
popq %r14
retq
nopw %cs:(%rax,%rax)