// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/eis-voiditf.c
// Function: gt_bwtrangesplitallwithspecial
GtUword gt_bwtrangesplitallwithspecial(Mbtab *mbtab,
                                             GtUword *rangeOccs,
                                             const FMindex *voidBwtSeq,
                                             GtUword lbound,
                                             GtUword ubound)
{
  GtUword char_idx, range_idx, rangebase;
  const BWTSeq *bwtseq = (const BWTSeq *) voidBwtSeq;
  const MRAEnc *alphabet = BWTSeqGetAlphabet(bwtseq);
  AlphabetRangeID numofranges = MRAEncGetNumRanges(alphabet);
  AlphabetRangeSize rangesize = 0, totalrange = 0;

  for (range_idx = 0; range_idx < (GtUword) numofranges; range_idx++)
  {
    GtUword rangeOcc_idx = 0;
    rangesize = MRAEncGetRangeSize(alphabet, range_idx);
    totalrange += rangesize;
    BWTSeqPosPairRangeOcc(bwtseq, range_idx, lbound, ubound,rangeOccs);
    rangebase = (GtUword) MRAEncGetRangeBase(alphabet, range_idx);
    for (char_idx = rangebase;
         char_idx < rangebase + rangesize; char_idx++)
    {
      if (rangeOccs[rangeOcc_idx] < rangeOccs[rangesize+rangeOcc_idx])
      {
        mbtab[char_idx].lowerbound = bwtseq->count[char_idx] +
                                     rangeOccs[rangeOcc_idx];
        mbtab[char_idx].upperbound = bwtseq->count[char_idx] +
                                     rangeOccs[rangesize+rangeOcc_idx];
      } else
      {
        mbtab[char_idx].lowerbound = mbtab[char_idx].upperbound = 0;
      }
      rangeOcc_idx++;
    }
  }
  return totalrange;
}

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
movq %rsi, 0x58(%rsp)
movq %rdx, 0x50(%rsp)
movq %rcx, 0x48(%rsp)
movq %r8, 0x40(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
callq 0x230810
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rdi
callq 0x230820
movl %eax, 0x14(%rsp)
movw $0x0, 0x12(%rsp)
movw $0x0, 0x10(%rsp)
movq $0x0, 0x30(%rsp)
movq 0x30(%rsp), %rax
movl 0x14(%rsp), %ecx
cmpq %rcx, %rax
jae 0x230805
movq $0x0, 0x8(%rsp)
movq 0x18(%rsp), %rdi
movq 0x30(%rsp), %rax
movl %eax, %esi
callq 0x230070
movw %ax, 0x12(%rsp)
movzwl 0x12(%rsp), %ecx
movzwl 0x10(%rsp), %eax
addl %ecx, %eax
movw %ax, 0x10(%rsp)
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rax
movl %eax, %esi
movq 0x48(%rsp), %rdx
movq 0x40(%rsp), %rcx
movq 0x58(%rsp), %r8
callq 0x230170
movq 0x18(%rsp), %rdi
movq 0x30(%rsp), %rax
movl %eax, %esi
callq 0x230830
movzbl %al, %eax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
movq 0x28(%rsp), %rcx
movzwl 0x12(%rsp), %edx
addq %rdx, %rcx
cmpq %rcx, %rax
jae 0x2307f0
movq 0x58(%rsp), %rax
movq 0x8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rsp), %rcx
movzwl 0x12(%rsp), %edx
addq 0x8(%rsp), %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x23079e
movq 0x20(%rsp), %rax
movq 0x38(%rax), %rax
movq 0x38(%rsp), %rcx
movq (%rax,%rcx,8), %rcx
movq 0x58(%rsp), %rax
movq 0x8(%rsp), %rdx
addq (%rax,%rdx,8), %rcx
movq 0x60(%rsp), %rax
movq 0x38(%rsp), %rdx
shlq $0x4, %rdx
addq %rdx, %rax
movq %rcx, (%rax)
movq 0x20(%rsp), %rax
movq 0x38(%rax), %rax
movq 0x38(%rsp), %rcx
movq (%rax,%rcx,8), %rcx
movq 0x58(%rsp), %rax
movzwl 0x12(%rsp), %edx
addq 0x8(%rsp), %rdx
addq (%rax,%rdx,8), %rcx
movq 0x60(%rsp), %rax
movq 0x38(%rsp), %rdx
shlq $0x4, %rdx
addq %rdx, %rax
movq %rcx, 0x8(%rax)
jmp 0x2307cf
movq 0x60(%rsp), %rax
movq 0x38(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq $0x0, 0x8(%rax)
movq 0x60(%rsp), %rax
movq 0x38(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq $0x0, (%rax)
movq 0x8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x8(%rsp)
movq 0x38(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x38(%rsp)
jmp 0x2306f0
jmp 0x2307f2
movq 0x30(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x30(%rsp)
jmp 0x23066b
movzwl 0x10(%rsp), %eax
addq $0x68, %rsp
retq
nop