// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/sfx-sain.c
// Function: gt_sain_induceStypes2fromspecialranges
static void gt_sain_induceStypes2fromspecialranges(const GtSainseq *sainseq,
                                                   GtSsainindextype *suftab,
                                                   GtUword nonspecialentries)
{
  if (sainseq->seqtype == GT_SAIN_ENCSEQ)
  {
    if (gt_encseq_has_specialranges(sainseq->seq.encseq))
    {
      GtSpecialrangeiterator *sri;
      GtRange range;
      sri = gt_specialrangeiterator_new(sainseq->seq.encseq,
                                        GT_ISDIRREVERSE(sainseq->readmode)
                                          ? true : false);
      while (gt_specialrangeiterator_next(sri,&range))
      {
        if (GT_ISDIRREVERSE(sainseq->readmode))
        {
          gt_range_reverse(sainseq->totallength,&range);
        }
        if (range.start > 0)
        {
          gt_sain_special_singleSinduction2(sainseq,
                                            suftab,
                                            (GtSsainindextype) range.start,
                                            nonspecialentries);
        }
      }
      gt_specialrangeiterator_delete(sri);
    }
  } else
  {
    gt_assert(sainseq->seqtype == GT_SAIN_BARE_ENCSEQ &&
              sainseq->bare_encseq != NULL);
    if (gt_bare_encseq_specialcharacters(sainseq->bare_encseq) > 0)
    {
      GtRange range;
      GtBareSpecialrangeiterator *sri
        = gt_bare_encseq_specialrangeiterator_new(sainseq->bare_encseq,
                                        GT_ISDIRREVERSE(sainseq->readmode)
                                          ? true : false);

      gt_assert(sri != NULL);
      while (gt_bare_encseq_specialrangeiterator_next(sri,&range))
      {
        if (GT_ISDIRREVERSE(sainseq->readmode))
        {
          gt_range_reverse(sainseq->totallength,&range);
        }
        if (range.start > 0)
        {
          gt_sain_special_singleSinduction2(sainseq,
                                            suftab,
                                            (GtSsainindextype) range.start,
                                            nonspecialentries);
        }
      }
      gt_bare_encseq_specialrangeiterator_delete(sri);
    }
  }
}

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
movq %rsi, 0x58(%rsp)
movq %rdx, 0x50(%rsp)
movq 0x60(%rsp), %rax
cmpl $0x2, 0x50(%rax)
jne 0x2da435
movq 0x60(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0xaf360
testb $0x1, %al
jne 0x2da369
jmp 0x2da430
movq 0x60(%rsp), %rax
movq 0x38(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x60(%rsp), %rcx
movb $0x1, %al
cmpl $0x1, 0x40(%rcx)
movb %al, 0x1f(%rsp)
je 0x2da398
movq 0x60(%rsp), %rax
cmpl $0x3, 0x40(%rax)
sete %al
movb %al, 0x1f(%rsp)
movq 0x10(%rsp), %rdi
movb 0x1f(%rsp), %dl
xorl %eax, %eax
movl $0x1, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
cmpl $0x0, %eax
setne %al
movzbl %al, %esi
andl $0x1, %esi
callq 0xaf650
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0xaf770
testb $0x1, %al
jne 0x2da3d9
jmp 0x2da426
movq 0x60(%rsp), %rax
cmpl $0x1, 0x40(%rax)
je 0x2da3ef
movq 0x60(%rsp), %rax
cmpl $0x3, 0x40(%rax)
jne 0x2da401
movq 0x60(%rsp), %rax
movq (%rax), %rdi
leaq 0x38(%rsp), %rsi
callq 0xc2f20
cmpq $0x0, 0x38(%rsp)
jbe 0x2da424
movq 0x60(%rsp), %rdi
movq 0x58(%rsp), %rsi
movq 0x38(%rsp), %rax
movl %eax, %edx
movq 0x50(%rsp), %rcx
callq 0x2da230
jmp 0x2da3c4
movq 0x48(%rsp), %rdi
callq 0xafc80
jmp 0x2da5ab
jmp 0x2da437
movq 0x60(%rsp), %rax
cmpl $0x3, 0x50(%rax)
jne 0x2da44e
movq 0x60(%rsp), %rax
cmpq $0x0, 0x48(%rax)
jne 0x2da486
movq 0x361b4b(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x23bbb4(%rip), %rsi    # 0x516013
leaq 0x2b22cf(%rip), %rdx    # 0x58c735
leaq 0x2b2a7a(%rip), %rcx    # 0x58cee7
leaq 0x2b1bf4(%rip), %r8     # 0x58c068
movl $0x27e, %r9d            # imm = 0x27E
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2da488
movq 0x60(%rsp), %rax
movq 0x48(%rax), %rdi
callq 0x203210
cmpq $0x0, %rax
jbe 0x2da5a9
movq 0x60(%rsp), %rax
movq 0x48(%rax), %rax
movq %rax, (%rsp)
movq 0x60(%rsp), %rcx
movb $0x1, %al
cmpl $0x1, 0x40(%rcx)
movb %al, 0xf(%rsp)
je 0x2da4ce
movq 0x60(%rsp), %rax
cmpl $0x3, 0x40(%rax)
sete %al
movb %al, 0xf(%rsp)
movq (%rsp), %rdi
movb 0xf(%rsp), %dl
xorl %eax, %eax
movl $0x1, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
cmpl $0x0, %eax
setne %al
movzbl %al, %esi
andl $0x1, %esi
callq 0x203260
movq %rax, 0x20(%rsp)
cmpq $0x0, 0x20(%rsp)
jne 0x2da539
movq 0x361a98(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x23bb01(%rip), %rsi    # 0x516013
leaq 0x25b1b9(%rip), %rdx    # 0x5356d2
leaq 0x2b29c7(%rip), %rcx    # 0x58cee7
leaq 0x2b1b41(%rip), %r8     # 0x58c068
movl $0x287, %r9d            # imm = 0x287
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2da53b
jmp 0x2da53d
movq 0x20(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x2033b0
testb $0x1, %al
jne 0x2da552
jmp 0x2da59f
movq 0x60(%rsp), %rax
cmpl $0x1, 0x40(%rax)
je 0x2da568
movq 0x60(%rsp), %rax
cmpl $0x3, 0x40(%rax)
jne 0x2da57a
movq 0x60(%rsp), %rax
movq (%rax), %rdi
leaq 0x28(%rsp), %rsi
callq 0xc2f20
cmpq $0x0, 0x28(%rsp)
jbe 0x2da59d
movq 0x60(%rsp), %rdi
movq 0x58(%rsp), %rsi
movq 0x28(%rsp), %rax
movl %eax, %edx
movq 0x50(%rsp), %rcx
callq 0x2da230
jmp 0x2da53d
movq 0x20(%rsp), %rdi
callq 0x203380
jmp 0x2da5ab
addq $0x68, %rsp
retq