// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/diagbandseed.c
// Function: gt_diagbandseed_extendSI_new
static GtDiagbandseedExtendSegmentInfo *gt_diagbandseed_extendSI_new(
                                         const GtDiagbandseedExtendParams *extp,
                                         void *processinfo,
                                         GtQuerymatchoutoptions *querymoutopt,
                                         const GtEncseq *aencseq,
                                         const GtSequencePartsInfo *aseqranges,
                                         GtUword aidx,
                                         const GtEncseq *bencseq,
                                         const GtSequencePartsInfo *bseqranges,
                                         GtUword bidx,
                                         const GtKarlinAltschulStat
                                           *karlin_altschul_stat,
                                         GtReadmode query_readmode,
                                         FILE *stream,
                                         GtDiagbandseedState
                                           *dbs_state,
                                         GtSegmentRejectFunc
                                           segment_reject_func,
                                         GtSegmentRejectInfo
                                           *segment_reject_info)
{
  GtDiagbandseedExtendSegmentInfo *esi = gt_malloc(sizeof *esi);

  esi->extend_relative_coords_function = extp->extendgreedy
                                            ? gt_greedy_extend_seed_relative
                                            : gt_xdrop_extend_seed_relative;
  gt_diagbandseed_plainsequence_init(&esi->plainsequence_info,
                                     gt_querymatch_subjectid_display(
                                             extp->out_display_flag),
                                     gt_querymatch_queryid_display(
                                             extp->out_display_flag),
                                     aencseq,
                                     aseqranges,
                                     aidx,
                                     extp->a_extend_char_access ==
                                         GT_EXTEND_CHAR_ACCESS_DIRECT ? true
                                                                      : false,
                                     bencseq,
                                     bseqranges,
                                     bidx,
                                     extp->b_extend_char_access ==
                                        GT_EXTEND_CHAR_ACCESS_DIRECT ? true
                                                                     : false);
  gt_diagbandseed_info_qm_set(&esi->info_querymatch,
                              extp,
                              querymoutopt,
                              query_readmode,
                              stream,
                              karlin_altschul_stat,
                              processinfo);
  esi->dbs_state = dbs_state;
  /* the following are constant and depends only on the given parameters */
  esi->userdefinedleastlength = extp->userdefinedleastlength;
  esi->errorpercentage = extp->errorpercentage;
  esi->use_apos = extp->use_apos;
  esi->mincoverage = extp->mincoverage;
  esi->only_selected_seqpairs = extp->only_selected_seqpairs;
  esi->evalue_threshold = extp->evalue_threshold;
  esi->query_readmode = query_readmode;
  esi->same_encseq = (aencseq == bencseq) ? true : false;
  esi->debug = gt_log_enabled() ? true : false;
  esi->segment_reject_func = segment_reject_func;
  esi->segment_reject_info = segment_reject_info;
  esi->karlin_altschul_stat = karlin_altschul_stat;
  esi->out_display_flag = extp->out_display_flag;
  esi->benchmark = extp->benchmark;
  if (extp->ani_accumulate != NULL)
  {
    if (GT_ISDIRREVERSE(query_readmode))
    {
      esi->ani_accumulate = extp->ani_accumulate + 1;
    } else
    {
      esi->ani_accumulate = extp->ani_accumulate;
    }
  } else
  {
    esi->ani_accumulate = NULL;
  }
  return esi;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x78, %rsp
movq 0xe0(%rsp), %rax
movq 0xd8(%rsp), %rax
movq 0xd0(%rsp), %rax
movq 0xc8(%rsp), %rax
movl 0xc0(%rsp), %eax
movq 0xb8(%rsp), %rax
movq 0xb0(%rsp), %rax
movq 0xa8(%rsp), %rax
movq 0xa0(%rsp), %rax
movq %rdi, 0x70(%rsp)
movq %rsi, 0x68(%rsp)
movq %rdx, 0x60(%rsp)
movq %rcx, 0x58(%rsp)
movq %r8, 0x50(%rsp)
movq %r9, 0x48(%rsp)
movl $0x198, %edi            # imm = 0x198
leaq 0x3566e9(%rip), %rsi    # 0x571f94
movl $0xda4, %edx            # imm = 0xDA4
callq 0xe80f0
movq %rax, 0x40(%rsp)
movq 0x70(%rsp), %rax
movb 0x78(%rax), %dl
leaq 0x91977(%rip), %rcx     # 0x2ad240
leaq 0x91b90(%rip), %rax     # 0x2ad460
testb $0x1, %dl
cmovneq %rax, %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x158(%rax)
movq 0x40(%rsp), %rax
addq $0x30, %rax
movq %rax, 0x38(%rsp)
movq 0x70(%rsp), %rax
movq 0x58(%rax), %rdi
callq 0x2658b0
movb %al, 0x37(%rsp)
movq 0x70(%rsp), %rax
movq 0x58(%rax), %rdi
callq 0x265970
movb 0x37(%rsp), %dl
movq 0x38(%rsp), %rdi
movq 0x58(%rsp), %rcx
movq 0x50(%rsp), %r8
movq 0x48(%rsp), %r9
movq 0x70(%rsp), %rsi
movl 0x50(%rsi), %r11d
xorl %esi, %esi
movl $0x1, %r10d
cmpl $0x2, %r11d
cmovel %r10d, %esi
cmpl $0x0, %esi
setne %r10b
movq 0xa0(%rsp), %rbx
movq 0xa8(%rsp), %r14
movq 0xb0(%rsp), %r15
movq 0x70(%rsp), %rsi
movl 0x54(%rsi), %ebp
xorl %esi, %esi
movl $0x1, %r11d
cmpl $0x2, %ebp
cmovel %r11d, %esi
cmpl $0x0, %esi
setne %r11b
movq %rsp, %rsi
movq %r15, 0x18(%rsi)
movq %r14, 0x10(%rsi)
movq %rbx, 0x8(%rsi)
movzbl %r11b, %r11d
andl $0x1, %r11d
movl %r11d, 0x20(%rsi)
movzbl %r10b, %r10d
andl $0x1, %r10d
movl %r10d, (%rsi)
movzbl %dl, %esi
andl $0x1, %esi
movzbl %al, %edx
andl $0x1, %edx
callq 0x21cc50
movq 0x40(%rsp), %rdi
addq $0x108, %rdi            # imm = 0x108
movq 0x70(%rsp), %rsi
movq 0x60(%rsp), %rdx
movl 0xc0(%rsp), %ecx
movq 0xc8(%rsp), %r8
movq 0xb8(%rsp), %r9
movq 0x68(%rsp), %rax
movq %rax, (%rsp)
callq 0x21d030
movq 0xd0(%rsp), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x190(%rax)
movq 0x70(%rsp), %rax
movq 0x30(%rax), %rcx
movq 0x40(%rsp), %rax
movq %rcx, (%rax)
movq 0x70(%rsp), %rax
movq 0x38(%rax), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x70(%rsp), %rax
movq 0x68(%rax), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x70(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x70(%rsp), %rax
movb 0x7e(%rax), %cl
movq 0x40(%rsp), %rax
andb $0x1, %cl
movb %cl, 0x20(%rax)
movq 0x70(%rsp), %rax
movsd 0x40(%rax), %xmm0
movq 0x40(%rsp), %rax
movsd %xmm0, 0x28(%rax)
movl 0xc0(%rsp), %ecx
movq 0x40(%rsp), %rax
movl %ecx, 0x100(%rax)
movq 0x58(%rsp), %rdx
movq 0xa0(%rsp), %rsi
xorl %eax, %eax
movl $0x1, %ecx
cmpq %rsi, %rdx
cmovel %ecx, %eax
cmpl $0x0, %eax
setne %cl
movq 0x40(%rsp), %rax
andb $0x1, %cl
movb %cl, 0x104(%rax)
callq 0xe7720
movb %al, %dl
xorl %eax, %eax
movl $0x1, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
cmpl $0x0, %eax
setne %cl
movq 0x40(%rsp), %rax
andb $0x1, %cl
movb %cl, 0x105(%rax)
movq 0xd8(%rsp), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x160(%rax)
movq 0xe0(%rsp), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x168(%rax)
movq 0xb8(%rsp), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x170(%rax)
movq 0x70(%rsp), %rax
movq 0x58(%rax), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x178(%rax)
movq 0x70(%rsp), %rax
movb 0x7b(%rax), %cl
movq 0x40(%rsp), %rax
andb $0x1, %cl
movb %cl, 0x180(%rax)
movq 0x70(%rsp), %rax
cmpq $0x0, 0x70(%rax)
je 0x21bb94
cmpl $0x1, 0xc0(%rsp)
je 0x21bb62
cmpl $0x3, 0xc0(%rsp)
jne 0x21bb7d
movq 0x70(%rsp), %rax
movq 0x70(%rax), %rcx
addq $0x10, %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x188(%rax)
jmp 0x21bb92
movq 0x70(%rsp), %rax
movq 0x70(%rax), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x188(%rax)
jmp 0x21bba4
movq 0x40(%rsp), %rax
movq $0x0, 0x188(%rax)
movq 0x40(%rsp), %rax
addq $0x78, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nopw %cs:(%rax,%rax)