// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/sfx-diffcov.c
// Function: dc_derivespecialcodesonthefly
static GtUword dc_derivespecialcodesonthefly(GtDifferencecover *dcov,
                                             const GtArrayCodeatposition
                                                           *codelist)
{
  unsigned int prefixindex, unitsnotspecial;
  Enumcodeatposition *ecp;
  Specialcontext specialcontext;
  GtUword countderived = 0, pos, sampleindex;
  GtCodetype code;
  GtEncseqReader *esr1 = gt_encseq_create_reader_with_readmode(dcov->encseq,
                                                               dcov->readmode,
                                                               0);

  for (prefixindex=1U; prefixindex < dcov->prefixlength; prefixindex++)
  {
    /* XXX use one structure and reinit it */
    ecp = gt_Enumcodeatposition_new(dcov->encseq,dcov->readmode,
                                    dcov->prefixlength,
                                    dcov->numofchars);
    while (gt_Enumcodeatposition_next(&specialcontext,ecp))
    {
      if (prefixindex <= specialcontext.maxprefixindex)
      {
        gt_assert(specialcontext.position >= (GtUword) prefixindex);
        pos = (GtUword) (specialcontext.position - prefixindex);
        if (dc_is_in_differencecover(dcov,(GtUword) GT_MODV(pos)))
        {
          if (codelist != NULL)
          {
            gt_assert(countderived < codelist->nextfreeCodeatposition);
            gt_assert(codelist->spaceCodeatposition[countderived].maxprefixindex
                      == prefixindex);
            gt_assert(codelist->spaceCodeatposition[countderived].position
                      == pos);
          }
          code = gt_encseq_extractprefixcode(&unitsnotspecial,
                                             dcov->encseq,
                                             dcov->filltable,
                                             dcov->readmode,
                                             esr1,
                                             dcov->multimappower,
                                             pos,
                                             dcov->prefixlength);
          if (codelist != NULL)
          {
            gt_assert((GtCodetype) codelist->spaceCodeatposition[
                                           countderived].code == code);
          }
          /*
          printf("%u "GT_WU"\n",prefixindex,
                            (GtUword)
                            (specialcontext.position-prefixindex));
          */
          countderived++;
          gt_bcktab_updatespecials(dcov->bcktab,code,prefixindex);
          gt_assert(code > 0);
          sampleindex = gt_bcktab_leftborder_insertionindex(dcov->leftborder,
                                                            code);
          gt_assert(sampleindex < dcov->effectivesamplesize);
          dc_suffixptrset(dcov,sampleindex,pos);
        }
      }
    }
    gt_Enumcodeatposition_delete(ecp);
    ecp = NULL;
  }
  if (codelist != NULL)
  {
    gt_assert(countderived == codelist->nextfreeCodeatposition);
  }
  gt_encseq_reader_delete(esr1);
  return countderived;
}

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
movq %rsi, 0x58(%rsp)
movq $0x0, 0x30(%rsp)
movq 0x60(%rsp), %rax
movq 0x60(%rax), %rdi
movq 0x60(%rsp), %rax
movl 0x68(%rax), %esi
xorl %eax, %eax
movl %eax, %edx
callq 0xac380
movq %rax, 0x10(%rsp)
movl $0x1, 0x54(%rsp)
movl 0x54(%rsp), %eax
movq 0x60(%rsp), %rcx
cmpl 0x18(%rcx), %eax
jae 0x2c2780
movq 0x60(%rsp), %rax
movq 0x60(%rax), %rdi
movq 0x60(%rsp), %rax
movl 0x68(%rax), %esi
movq 0x60(%rsp), %rax
movl 0x18(%rax), %edx
movq 0x60(%rsp), %rax
movl 0x14(%rax), %ecx
callq 0x2c56f0
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rsi
leaq 0x38(%rsp), %rdi
callq 0x2c5860
testb $0x1, %al
jne 0x2c2423
jmp 0x2c275d
movl 0x54(%rsp), %eax
cmpl 0x38(%rsp), %eax
ja 0x2c2758
jmp 0x2c2433
movq 0x40(%rsp), %rax
movl 0x54(%rsp), %ecx
cmpq %rcx, %rax
jae 0x2c2479
movq 0x379b58(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x253bc1(%rip), %rsi    # 0x516013
leaq 0x2c79f9(%rip), %rdx    # 0x589e52
leaq 0x2c7a23(%rip), %rcx    # 0x589e83
leaq 0x2c7354(%rip), %r8     # 0x5897bb
movl $0x243, %r9d            # imm = 0x243
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2c247b
movq 0x40(%rsp), %rax
movl 0x54(%rsp), %ecx
subq %rcx, %rax
movq %rax, 0x28(%rsp)
movq 0x60(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x60(%rsp), %rax
movl 0xc(%rax), %eax
andq %rax, %rsi
callq 0x2c3d50
testb $0x1, %al
jne 0x2c24af
jmp 0x2c2756
cmpq $0x0, 0x58(%rsp)
je 0x2c25bf
jmp 0x2c24bd
movq 0x30(%rsp), %rax
movq 0x58(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jb 0x2c2505
movq 0x379acc(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x253b35(%rip), %rsi    # 0x516013
leaq 0x2c79bc(%rip), %rdx    # 0x589ea1
leaq 0x2c7997(%rip), %rcx    # 0x589e83
leaq 0x2c72c8(%rip), %r8     # 0x5897bb
movl $0x249, %r9d            # imm = 0x249
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2c2507
jmp 0x2c2509
movq 0x58(%rsp), %rax
movq (%rax), %rax
movq 0x30(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl (%rax), %eax
andl $0xf, %eax
cmpl 0x54(%rsp), %eax
je 0x2c2560
movq 0x379a71(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x253ada(%rip), %rsi    # 0x516013
leaq 0x2c7991(%rip), %rdx    # 0x589ed1
leaq 0x2c793c(%rip), %rcx    # 0x589e83
leaq 0x2c726d(%rip), %r8     # 0x5897bb
movl $0x24b, %r9d            # imm = 0x24B
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2c2562
jmp 0x2c2564
movq 0x58(%rsp), %rax
movq (%rax), %rax
movq 0x30(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
cmpq 0x28(%rsp), %rax
je 0x2c25bb
movq 0x379a16(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x253a7f(%rip), %rsi    # 0x516013
leaq 0x2c7980(%rip), %rdx    # 0x589f1b
leaq 0x2c78e1(%rip), %rcx    # 0x589e83
leaq 0x2c7212(%rip), %r8     # 0x5897bb
movl $0x24d, %r9d            # imm = 0x24D
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2c25bd
jmp 0x2c25bf
movq 0x60(%rsp), %rax
movq 0x60(%rax), %rsi
movq 0x60(%rsp), %rax
movq 0x90(%rax), %rdx
movq 0x60(%rsp), %rax
movl 0x68(%rax), %ecx
movq 0x10(%rsp), %r8
movq 0x60(%rsp), %rax
movq 0x88(%rax), %r9
movq 0x28(%rsp), %r10
movq 0x60(%rsp), %rax
movl 0x18(%rax), %eax
leaq 0x50(%rsp), %rdi
movq %r10, (%rsp)
movl %eax, 0x8(%rsp)
callq 0xb5a30
movq %rax, 0x18(%rsp)
cmpq $0x0, 0x58(%rsp)
je 0x2c2679
jmp 0x2c261b
movq 0x58(%rsp), %rax
movq (%rax), %rax
movq 0x30(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl (%rax), %eax
shrl $0x4, %eax
movl %eax, %eax
cmpq 0x18(%rsp), %rax
je 0x2c2675
movq 0x37995c(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2539c5(%rip), %rsi    # 0x516013
leaq 0x2c7902(%rip), %rdx    # 0x589f57
leaq 0x2c7827(%rip), %rcx    # 0x589e83
leaq 0x2c7158(%rip), %r8     # 0x5897bb
movl $0x25a, %r9d            # imm = 0x25A
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2c2677
jmp 0x2c2679
movq 0x30(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x30(%rsp)
movq 0x60(%rsp), %rax
movq 0x58(%rax), %rdi
movq 0x18(%rsp), %rsi
movl 0x54(%rsp), %edx
callq 0x205410
cmpq $0x0, 0x18(%rsp)
ja 0x2c26de
movq 0x3798f3(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x25395c(%rip), %rsi    # 0x516013
leaq 0x2cb5de(%rip), %rdx    # 0x58dc9c
leaq 0x2c77be(%rip), %rcx    # 0x589e83
leaq 0x2c70ef(%rip), %r8     # 0x5897bb
movl $0x263, %r9d            # imm = 0x263
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2c26e0
movq 0x60(%rsp), %rax
movq 0x50(%rax), %rdi
movq 0x18(%rsp), %rsi
callq 0x2c27f0
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq 0x60(%rsp), %rcx
cmpq 0x78(%rcx), %rax
jb 0x2c2740
movq 0x379891(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2538fa(%rip), %rsi    # 0x516013
leaq 0x2c75d1(%rip), %rdx    # 0x589cf1
leaq 0x2c775c(%rip), %rcx    # 0x589e83
leaq 0x2c708d(%rip), %r8     # 0x5897bb
movl $0x266, %r9d            # imm = 0x266
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2c2742
movq 0x60(%rsp), %rdi
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
callq 0x2c28e0
jmp 0x2c2758
jmp 0x2c240b
movq 0x48(%rsp), %rdi
callq 0x2c5b00
movq $0x0, 0x48(%rsp)
movl 0x54(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x54(%rsp)
jmp 0x2c23ce
cmpq $0x0, 0x58(%rsp)
je 0x2c27d6
jmp 0x2c278a
movq 0x30(%rsp), %rax
movq 0x58(%rsp), %rcx
cmpq 0x10(%rcx), %rax
je 0x2c27d2
movq 0x3797ff(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x253868(%rip), %rsi    # 0x516013
leaq 0x2c77ec(%rip), %rdx    # 0x589f9e
leaq 0x2c76ca(%rip), %rcx    # 0x589e83
leaq 0x2c6ffb(%rip), %r8     # 0x5897bb
movl $0x270, %r9d            # imm = 0x270
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2c27d4
jmp 0x2c27d6
movq 0x10(%rsp), %rdi
callq 0xac3f0
movq 0x30(%rsp), %rax
addq $0x68, %rsp
retq
nopw (%rax,%rax)