// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/match/diagbandseed.c
// Function: gt_diagbandseed_process_mem
static bool gt_diagbandseed_process_mem(
                                    bool forward,
                                    GtUword aseqnum,
                                    GtUword bseqnum,
                                    GtArrayGtDiagbandseedMaximalmatch *memstore,
                                    GtUword amaxlen,
                                    const GtSeedpairPositions *previous,
                                    GtUword previous_matchlength,
                                    GtUword userdefinedleastlength,
                                    FILE *fpout)
{
  if (memstore == NULL)
  {
    if (previous_matchlength >= userdefinedleastlength)
    {
      fprintf(fpout,"%8" GT_WUS "  %8" GT_WUS "  %8" GT_WUS "  %c  %8" GT_WUS
                    "  %8" GT_WUS "\n",
                  previous_matchlength,
                  aseqnum,
                  previous->apos + 2 - previous_matchlength,
                  forward ? 'F' : 'P',
                  bseqnum,
                  GT_DIAGBANDSEED_DIAGONAL2BPOS(amaxlen,
                                                previous->apos,
                                                previous->bpos)
                                                + 2 - previous_matchlength);
      return true;
    }
  } else
  {
    GtDiagbandseedMaximalmatch *memstore_ptr;

    GT_GETNEXTFREEINARRAY(memstore_ptr,memstore,
                          GtDiagbandseedMaximalmatch,
                          memstore->allocatedGtDiagbandseedMaximalmatch
                          * 0.2 + 256);
    memstore_ptr->apos = previous->apos;
    memstore_ptr->bpos = GT_DIAGBANDSEED_DIAGONAL2BPOS(amaxlen,
                                                       previous->apos,
                                                       previous->bpos);
    memstore_ptr->len = previous_matchlength;
  }
  return false;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %r9, %r15
movq %r8, %r14
movq %rcx, %r12
movq 0x30(%rsp), %rbx
testq %rcx, %rcx
je 0x1987dd
movq 0x8(%r12), %rax
cmpq %rax, 0x10(%r12)
jae 0x198844
movq (%r12), %rax
jmp 0x1988bd
cmpq 0x38(%rsp), %rbx
jb 0x1988e9
movq %rdx, %r10
movq %rsi, %rcx
movq 0x40(%rsp), %rax
movl (%r15), %edx
leal 0x2(%rdx), %r8d
subq %rbx, %r8
testb %dil, %dil
movl $0x46, %esi
movl $0x50, %r9d
cmovnel %esi, %r9d
movl 0x4(%r15), %esi
addq %rbx, %r14
subq %r14, %rdx
leaq (%rsi,%rdx), %r11
addq $0x2, %r11
leaq 0x208f08(%rip), %rsi    # 0x3a1730
movq %rax, %rdi
movq %rbx, %rdx
xorl %eax, %eax
pushq %r11
pushq %r10
callq 0x17ab0
addq $0x10, %rsp
movb $0x1, %al
jmp 0x1988eb
movq %rax, %xmm0
punpckldq 0x1af08f(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x1af097(%rip), %xmm0   # 0x3478f0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
mulsd 0x2072ab(%rip), %xmm1   # 0x39fb18
addsd 0x207293(%rip), %xmm1   # 0x39fb08
cvttsd2si %xmm1, %rcx
movq %rcx, %rdx
subsd 0x1af49b(%rip), %xmm1   # 0x347d20
cvttsd2si %xmm1, %rsi
sarq $0x3f, %rdx
andq %rdx, %rsi
orq %rcx, %rsi
addq %rax, %rsi
movq %rsi, 0x8(%r12)
movq (%r12), %rdi
shlq $0x2, %rsi
leaq (%rsi,%rsi,2), %rsi
leaq 0x20732d(%rip), %rdx    # 0x39fbdc
movl $0xb86, %ecx            # imm = 0xB86
callq 0x104461
movq %rax, (%r12)
testq %rax, %rax
je 0x1988f7
movq 0x10(%r12), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x10(%r12)
leaq (%rcx,%rcx,2), %rcx
movl (%r15), %edx
movl %edx, (%rax,%rcx,4)
subl %r14d, %edx
addl 0x4(%r15), %edx
movl %edx, 0x4(%rax,%rcx,4)
movl %ebx, 0x8(%rax,%rcx,4)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
callq 0x5e14a