// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/firstcodes.c
// Function: gt_firstcodes_collectcodes
static void gt_firstcodes_collectcodes(GtFirstcodesinfo *fci,
                                       const GtEncseq *encseq,
                                       GtReadmode readmode,
                                       unsigned int kmersize,
                                       unsigned int minmatchlength,
                                       unsigned int addbscache_depth,
                                       bool withdistbits,
                                       GtLogger *logger,
                                       GtTimer *timer)
{
  unsigned int numofchars;

  getencseqkmers_twobitencoding(encseq,
                                readmode,
                                kmersize,
                                minmatchlength,
                                true,
                                gt_storefirstcodes,
                                fci,
                                NULL,
                                NULL);
  fci->numofsequences = fci->countsequences;
  gt_logger_log(logger,"have stored "GT_WU" prefix codes",fci->numofsequences);
  if (timer != NULL)
  {
    gt_timer_show_progress(timer, "to sort initial prefixes",stdout);
  }
  gt_radixsort_inplace_ulong(fci->allfirstcodes,fci->numofsequences);
  if (timer != NULL)
  {
    gt_timer_show_progress(timer, "to remove duplicates",stdout);
  }
  numofchars = gt_encseq_alphabetnumofchars(encseq);
  gt_assert(numofchars == 4U);
  fci->buf.markprefix = gt_marksubstring_new(numofchars,kmersize,false,
                                            fci->markprefixunits);
  fci->shiftright2index = gt_marksubstring_shiftright(fci->buf.markprefix)
                          + GT_LOGWORDSIZE;
  GT_FCI_ADDSPLITSPACE(fci->fcsl,"markprefix",
                      (size_t) gt_marksubstring_size(fci->buf.markprefix));
  fci->buf.marksuffix = gt_marksubstring_new(numofchars,kmersize,true,
                                            fci->marksuffixunits);
  GT_FCI_ADDWORKSPACE(fci->fcsl,"marksuffix",
                      (size_t) gt_marksubstring_size(fci->buf.marksuffix));
  gt_assert(fci->allfirstcodes != NULL);
  fci->allfirstcodes0_save = fci->allfirstcodes[0];
  fci->differentcodes = gt_firstcodes_remdups(fci->allfirstcodes,
                                             fci->fcsl,
                                             &fci->tab,
                                             fci->numofsequences,
                                             fci->buf.markprefix,
                                             fci->buf.marksuffix,
                                             &fci->binsearchcache,
                                             addbscache_depth,
                                             withdistbits,
                                             logger);
  if (fci->differentcodes > 0 && fci->differentcodes < fci->numofsequences)
  {
    fci->allfirstcodes = gt_realloc(fci->allfirstcodes,
                                    sizeof (*fci->allfirstcodes) *
                                    fci->differentcodes);
    GT_FCI_SUBTRACTADDSPLITSPACE(fci->fcsl,"allfirstcodes",
                                 sizeof (*fci->allfirstcodes) *
                                 fci->differentcodes);
  }
}

// Assembly:
pushq %rbx
subq $0x60, %rsp
movq 0x80(%rsp), %rax
movq 0x78(%rsp), %rax
movb 0x70(%rsp), %al
movq %rdi, 0x58(%rsp)
movq %rsi, 0x50(%rsp)
movl %edx, 0x4c(%rsp)
movl %ecx, 0x48(%rsp)
movl %r8d, 0x44(%rsp)
movl %r9d, 0x40(%rsp)
andb $0x1, %al
movb %al, 0x3f(%rsp)
movq 0x50(%rsp), %rdi
movl 0x4c(%rsp), %esi
movl 0x48(%rsp), %edx
movl 0x44(%rsp), %ecx
movq 0x58(%rsp), %rax
movl $0x1, %r8d
leaq 0x2245(%rip), %r9       # 0x249850
xorl %r10d, %r10d
movq %rax, (%rsp)
movq $0x0, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
callq 0x2de9c0
movq 0x58(%rsp), %rax
movq 0x10(%rax), %rcx
movq 0x58(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x78(%rsp), %rdi
movq 0x58(%rsp), %rax
movq 0x18(%rax), %rdx
leaq 0x330e42(%rip), %rsi    # 0x578492
movb $0x0, %al
callq 0xe7cd0
cmpq $0x0, 0x80(%rsp)
je 0x247680
movq 0x80(%rsp), %rdi
movq 0x3f48c7(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x330e34(%rip), %rsi    # 0x5784af
callq 0x121930
movq 0x58(%rsp), %rax
movq 0x98(%rax), %rdi
movq 0x58(%rsp), %rax
movq 0x18(%rax), %rsi
callq 0x100d90
cmpq $0x0, 0x80(%rsp)
je 0x2476c3
movq 0x80(%rsp), %rdi
movq 0x3f4884(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x330e0a(%rip), %rsi    # 0x5784c8
callq 0x121930
movq 0x50(%rsp), %rdi
callq 0xb0e80
movl %eax, 0x38(%rsp)
cmpl $0x4, 0x38(%rsp)
je 0x247710
movq 0x3f48c1(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2ce92a(%rip), %rsi    # 0x516013
leaq 0x330ded(%rip), %rdx    # 0x5784dd
leaq 0x330df7(%rip), %rcx    # 0x5784ee
leaq 0x330afe(%rip), %r8     # 0x5781fc
movl $0x31e, %r9d            # imm = 0x31E
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x247712
movl 0x38(%rsp), %edi
movl 0x48(%rsp), %esi
movq 0x58(%rsp), %rax
movl 0x5c(%rax), %ecx
xorl %edx, %edx
callq 0x260e60
movq %rax, %rcx
movq 0x58(%rsp), %rax
movq %rcx, 0xd0(%rax)
movq 0x58(%rsp), %rax
movq 0xd0(%rax), %rdi
callq 0x2611e0
movl %eax, %ecx
addl $0x6, %ecx
movq 0x58(%rsp), %rax
movl %ecx, 0x54(%rax)
movq 0x58(%rsp), %rax
movq 0xa8(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x58(%rsp), %rax
movq 0xd0(%rax), %rdi
callq 0x261200
movq 0x28(%rsp), %rdi
movl $0x324, %esi            # imm = 0x324
leaq 0x330a73(%rip), %rdx    # 0x5781fc
movl $0x1, %ecx
leaq 0x330d74(%rip), %r8     # 0x578509
xorl %r9d, %r9d
movq %rax, (%rsp)
callq 0x4bea60
movl 0x38(%rsp), %edi
movl 0x48(%rsp), %esi
movq 0x58(%rsp), %rax
movl 0x58(%rax), %ecx
movl $0x1, %edx
callq 0x260e60
movq %rax, %rcx
movq 0x58(%rsp), %rax
movq %rcx, 0xd8(%rax)
movq 0x58(%rsp), %rax
movq 0xa8(%rax), %rax
movq %rax, 0x30(%rsp)
movq 0x58(%rsp), %rax
movq 0xd8(%rax), %rdi
callq 0x261200
movq 0x30(%rsp), %rdi
movl $0x328, %esi            # imm = 0x328
leaq 0x3309ff(%rip), %rdx    # 0x5781fc
movl $0x1, %r9d
leaq 0x330d0a(%rip), %r8     # 0x578514
movl %r9d, %ecx
movq %rax, (%rsp)
callq 0x4bea60
movq 0x58(%rsp), %rax
cmpq $0x0, 0x98(%rax)
jne 0x24785d
movq 0x3f4774(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2ce7dd(%rip), %rsi    # 0x516013
leaq 0x330ce2(%rip), %rdx    # 0x57851f
leaq 0x330caa(%rip), %rcx    # 0x5784ee
leaq 0x3309b1(%rip), %r8     # 0x5781fc
movl $0x329, %r9d            # imm = 0x329
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x24785f
movq 0x58(%rsp), %rax
movq 0x98(%rax), %rax
movq (%rax), %rcx
movq 0x58(%rsp), %rax
movq %rcx, 0xa0(%rax)
movq 0x58(%rsp), %rax
movq 0x98(%rax), %rdi
movq 0x58(%rsp), %rax
movq 0xa8(%rax), %rsi
movq 0x58(%rsp), %rdx
addq $0x110, %rdx            # imm = 0x110
movq 0x58(%rsp), %rax
movq 0x18(%rax), %rcx
movq 0x58(%rsp), %rax
movq 0xd0(%rax), %r8
movq 0x58(%rsp), %rax
movq 0xd8(%rax), %r9
movq 0x58(%rsp), %rbx
addq $0x48, %rbx
movl 0x40(%rsp), %r11d
movb 0x3f(%rsp), %r10b
movq 0x78(%rsp), %rax
andb $0x1, %r10b
movq %rbx, (%rsp)
movl %r11d, 0x8(%rsp)
movzbl %r10b, %r10d
movl %r10d, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x4bf200
movq %rax, %rcx
movq 0x58(%rsp), %rax
movq %rcx, 0x38(%rax)
movq 0x58(%rsp), %rax
cmpq $0x0, 0x38(%rax)
jbe 0x24799b
movq 0x58(%rsp), %rax
movq 0x38(%rax), %rax
movq 0x58(%rsp), %rcx
cmpq 0x18(%rcx), %rax
jae 0x24799b
movq 0x58(%rsp), %rax
movq 0x98(%rax), %rdi
movq 0x58(%rsp), %rax
movq 0x38(%rax), %rsi
shlq $0x3, %rsi
leaq 0x3308b5(%rip), %rdx    # 0x5781fc
movl $0x339, %ecx            # imm = 0x339
callq 0xe8540
movq %rax, %rcx
movq 0x58(%rsp), %rax
movq %rcx, 0x98(%rax)
movq 0x58(%rsp), %rax
movq 0xa8(%rax), %rdi
movq 0x58(%rsp), %rax
movq 0x38(%rax), %rax
shlq $0x3, %rax
movl $0x33c, %esi            # imm = 0x33C
leaq 0x330877(%rip), %rdx    # 0x5781fc
xorl %r9d, %r9d
leaq 0x2d3f17(%rip), %r8     # 0x51b8a6
movl %r9d, %ecx
movq %rax, (%rsp)
callq 0x4bea60
addq $0x60, %rsp
popq %rbx
retq
nopw %cs:(%rax,%rax)