// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/sfx-suffixer.c
// Function: sfx_derivespecialcodesfromtable
static void sfx_derivespecialcodesfromtable(Sfxiterator *sfi,bool deletevalues)
{
  GtCodetype code;
  unsigned int prefixindex;
  GtUword insertindex, j, stidx;

  for (prefixindex=1U; prefixindex < sfi->prefixlength; prefixindex++)
  {
    for (j=0, insertindex = 0; j < sfi->nextfreeCodeatposition; j++)
    {
      if (prefixindex <= sfi->spaceCodeatposition[j].maxprefixindex)
      {
        code = gt_bcktab_codedownscale(sfi->bcktab,
                                       (GtCodetype)
                                       sfi->spaceCodeatposition[j].code,
                                       prefixindex,
                                       sfi->spaceCodeatposition[j].
                                            maxprefixindex);
        if (code >= sfi->currentmincode && code <= sfi->currentmaxcode)
        {
          gt_bcktab_updatespecials(sfi->bcktab,code,prefixindex);
          stidx = gt_bcktab_leftborder_insertionindex(sfi->leftborder,code);
          /* from right to left */
          gt_suffixsortspace_set(sfi->suffixsortspace,0,stidx,
                                 sfi->spaceCodeatposition[j].position
                                 - prefixindex);
        }
      }
      if (deletevalues)
      {
        if (prefixindex < sfi->prefixlength - 1 &&
            prefixindex < sfi->spaceCodeatposition[j].maxprefixindex)
        {
          if (insertindex < j)
          {
            sfi->spaceCodeatposition[insertindex] =
              sfi->spaceCodeatposition[j];
          }
          insertindex++;
        }
      }
    }
    if (deletevalues)
    {
      sfi->nextfreeCodeatposition = insertindex;
    }
  }
}

// Assembly:
subq $0x38, %rsp
movb %sil, %al
movq %rdi, 0x30(%rsp)
andb $0x1, %al
movb %al, 0x2f(%rsp)
movl $0x1, 0x1c(%rsp)
movl 0x1c(%rsp), %eax
movq 0x30(%rsp), %rcx
cmpl 0x24(%rcx), %eax
jae 0x2e7718
movq $0x0, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movq 0x8(%rsp), %rax
movq 0x30(%rsp), %rcx
cmpq 0x100(%rcx), %rax
jae 0x2e76ee
movl 0x1c(%rsp), %eax
movq 0x30(%rsp), %rcx
movq 0x108(%rcx), %rcx
movq 0x8(%rsp), %rdx
shlq $0x4, %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
andl $0xf, %ecx
cmpl %ecx, %eax
ja 0x2e763c
movq 0x30(%rsp), %rax
movq 0x78(%rax), %rdi
movq 0x30(%rsp), %rax
movq 0x108(%rax), %rax
movq 0x8(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl (%rax), %eax
shrl $0x4, %eax
movl %eax, %eax
movl %eax, %esi
movl 0x1c(%rsp), %edx
movq 0x30(%rsp), %rax
movq 0x108(%rax), %rax
movq 0x8(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl (%rax), %ecx
andl $0xf, %ecx
callq 0x205cc0
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq 0x30(%rsp), %rcx
cmpq 0x98(%rcx), %rax
jb 0x2e763a
movq 0x20(%rsp), %rax
movq 0x30(%rsp), %rcx
cmpq 0xa0(%rcx), %rax
ja 0x2e763a
movq 0x30(%rsp), %rax
movq 0x78(%rax), %rdi
movq 0x20(%rsp), %rsi
movl 0x1c(%rsp), %edx
callq 0x205410
movq 0x30(%rsp), %rax
movq 0x80(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x2e2960
movq %rax, (%rsp)
movq 0x30(%rsp), %rax
movq 0x90(%rax), %rdi
movq (%rsp), %rdx
movq 0x30(%rsp), %rax
movq 0x108(%rax), %rax
movq 0x8(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rcx
movl 0x1c(%rsp), %eax
subq %rax, %rcx
xorl %eax, %eax
movl %eax, %esi
callq 0x2ea0a0
jmp 0x2e763c
testb $0x1, 0x2f(%rsp)
je 0x2e76d9
movl 0x1c(%rsp), %eax
movq 0x30(%rsp), %rcx
movl 0x24(%rcx), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jae 0x2e76d7
movl 0x1c(%rsp), %eax
movq 0x30(%rsp), %rcx
movq 0x108(%rcx), %rcx
movq 0x8(%rsp), %rdx
shlq $0x4, %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
andl $0xf, %ecx
cmpl %ecx, %eax
jae 0x2e76d7
movq 0x10(%rsp), %rax
cmpq 0x8(%rsp), %rax
jae 0x2e76c9
movq 0x30(%rsp), %rax
movq 0x108(%rax), %rax
movq 0x10(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x30(%rsp), %rcx
movq 0x108(%rcx), %rcx
movq 0x8(%rsp), %rdx
shlq $0x4, %rdx
addq %rdx, %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq 0x10(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x10(%rsp)
jmp 0x2e76d9
jmp 0x2e76db
movq 0x8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x8(%rsp)
jmp 0x2e750e
testb $0x1, 0x2f(%rsp)
je 0x2e7706
movq 0x10(%rsp), %rcx
movq 0x30(%rsp), %rax
movq %rcx, 0x100(%rax)
jmp 0x2e7708
movl 0x1c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1c(%rsp)
jmp 0x2e74ea
addq $0x38, %rsp
retq
nopl (%rax)