// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/match/sfx-mappedstr.c
// Function: gt_kmerstream_updatespecialpositions
static void gt_kmerstream_updatespecialpositions(GtKmerstream *spwp,
                                                 GtUchar charcode,
                                                 bool doshift,
                                                 GtUchar leftchar)
{
  if (doshift && !special_queue_is_empty(&spwp->specialqueue))
  {
    GtSpecialcontext *head = special_queue_head_get(&spwp->specialqueue);

    if (head->lengthofleftcontext > 0)
    {
      GT_SUBTRACTLCHARANDSHIFT(head->codeofleftcontext,leftchar,
                               spwp->numofchars,
                               spwp->multimappower[0]);
      head->lengthofleftcontext--;
    } else
    {
      special_queueu_head_delete(&spwp->specialqueue);
    }
  }
  if (GT_ISNOTSPECIAL(charcode))
  {
    if (spwp->lengthwithoutspecial == spwp->kmersize)
    {
      GT_SUBTRACTLCHARSHIFTADDNEXT(spwp->codewithoutspecial,
                                   leftchar,
                                   spwp->numofchars,
                                   spwp->multimappower[0],
                                   charcode);
    } else
    {
      spwp->codewithoutspecial
        += spwp->multimappower[spwp->lengthwithoutspecial][charcode];
      spwp->lengthwithoutspecial++;
    }
  } else
  {
    /* only here we add some element to the queue */
    unsigned int newelem_lengthofleftcontext
      = special_queue_is_empty(&spwp->specialqueue)
          ? (spwp->windowwidth - 1U)
          : spwp->lengthwithoutspecial;
    if (spwp->lengthwithoutspecial == spwp->kmersize)
    {
      GT_SUBTRACTLCHARANDSHIFT(spwp->codewithoutspecial,
                               leftchar,
                               spwp->numofchars,
                               spwp->multimappower[0]);
    }
    /* only here we add some element to the queue */
    gt_assert(newelem_lengthofleftcontext < spwp->kmersize);
    special_queue_enqueue(&spwp->specialqueue,
                          newelem_lengthofleftcontext,
                          spwp->codewithoutspecial);
    spwp->lengthwithoutspecial = 0;
    spwp->codewithoutspecial = 0;
  }
}

// Assembly:
testl %edx, %edx
je 0x1f7cf5
movl 0x1c(%rdi), %r8d
testl %r8d, %r8d
je 0x1f7cf5
movq 0x10(%rdi), %rax
movl (%rax), %edx
testl %edx, %edx
je 0x1f7cd1
movq 0x8(%rax), %r8
movq 0x68(%rdi), %r9
movq (%r9), %r9
movzbl %cl, %r10d
subq (%r9,%r10,8), %r8
movl 0x40(%rdi), %r9d
imulq %r8, %r9
movq %r9, 0x8(%rax)
decl %edx
movl %edx, (%rax)
jmp 0x1f7cf5
decl %r8d
movl %r8d, 0x1c(%rdi)
movq (%rdi), %rdx
cmpq %rdx, %rax
ja 0x1f7ced
movl 0x18(%rdi), %eax
shlq $0x4, %rax
addq %rax, %rdx
movq %rdx, %rax
addq $-0x10, %rax
movq %rax, 0x10(%rdi)
cmpb $-0x3, %sil
ja 0x1f7d28
movl 0x50(%rdi), %eax
cmpl 0x44(%rdi), %eax
jne 0x1f7d34
movq 0x58(%rdi), %rax
movq 0x68(%rdi), %rdx
movq (%rdx), %rdx
movzbl %cl, %ecx
subq (%rdx,%rcx,8), %rax
movl 0x40(%rdi), %ecx
imulq %rax, %rcx
movzbl %sil, %eax
addq %rcx, %rax
movq %rax, 0x58(%rdi)
retq
movl 0x1c(%rdi), %eax
testl %eax, %eax
je 0x1f7d4e
movl 0x50(%rdi), %edx
jmp 0x1f7d53
movq 0x68(%rdi), %rcx
movq (%rcx,%rax,8), %rcx
movzbl %sil, %edx
movq (%rcx,%rdx,8), %rcx
addq %rcx, 0x58(%rdi)
incl %eax
movl %eax, 0x50(%rdi)
retq
movl 0x48(%rdi), %edx
decl %edx
movl 0x44(%rdi), %esi
cmpl %esi, 0x50(%rdi)
jne 0x1f7d78
movq 0x58(%rdi), %r8
movq 0x68(%rdi), %r9
movq (%r9), %r9
movzbl %cl, %ecx
subq (%r9,%rcx,8), %r8
movl 0x40(%rdi), %ecx
imulq %r8, %rcx
movq %rcx, 0x58(%rdi)
cmpl %esi, %edx
jae 0x1f7dbc
movq 0x8(%rdi), %rcx
movq 0x58(%rdi), %rsi
incl %eax
movl %eax, 0x1c(%rdi)
movq %rsi, 0x8(%rcx)
movl %edx, (%rcx)
movq (%rdi), %rax
cmpq %rax, %rcx
ja 0x1f7da4
movl 0x18(%rdi), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, %rcx
addq $-0x10, %rcx
movq %rcx, 0x8(%rdi)
movl $0x0, 0x50(%rdi)
movq $0x0, 0x58(%rdi)
retq
pushq %rax
callq 0x7af67