// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/rdj-ovlfind-gusfield.c
// Function: rdj_gusfield_processleafedge
static inline
void rdj_gusfield_processleafedge(GtUword leafnumber,
                                  const GtEncseq *encseq,
                                  GtUword nofsequences,
                                  GtArrayGtUword *matchlen_stacks,
                                  GtBitsequence *has_match,
                                  GtBitsequence *sspbittab,
                                  bool find_submaximal,
                                  GtUword firstrevcompl,
                                  GtSpmproc proc,
                                  void* procdata)
{
  GtUword prefix_seqnum, suffix_seqnum, corrected_suffix_seqnum;
  bool suffixseq_direct = true, prefixseq_direct = true;
  GtUword *matchlen;
  GtUword stack_pos;
  gt_assert(encseq != NULL);

  if (leafnumber == 0 || (bool)GT_ISIBITSET(sspbittab, leafnumber-1))
  {
    prefix_seqnum = gt_encseq_seqnum(encseq, leafnumber);
    if (firstrevcompl != 0)
    {
      GT_READJOINER_CORRECT_REVCOMPL(prefix_seqnum, firstrevcompl,
        nofsequences, prefixseq_direct);
    }
    for (suffix_seqnum = 0; suffix_seqnum < nofsequences; suffix_seqnum++)
    {
      if ((bool)GT_ISIBITSET(has_match, suffix_seqnum))
      {
        corrected_suffix_seqnum = suffix_seqnum;
        if (firstrevcompl != 0)
        {
          GT_READJOINER_CORRECT_REVCOMPL(corrected_suffix_seqnum,
            firstrevcompl, nofsequences, suffixseq_direct);
          if (!GT_READJOINER_IS_CORRECT_REVCOMPL_CASE(corrected_suffix_seqnum,
            suffixseq_direct, prefix_seqnum, prefixseq_direct))
            continue;
        }
        if (!find_submaximal)
        {
          matchlen = matchlen_stacks[suffix_seqnum].spaceGtUword +
                     matchlen_stacks[suffix_seqnum].nextfreeGtUword - 1;
          gt_assert(matchlen != NULL);
          if (suffix_seqnum == prefix_seqnum)
          {
            if (*matchlen == gt_encseq_seqlength(encseq, suffix_seqnum))
            {
              /* read overlaps with whole itself */
              if (matchlen_stacks[suffix_seqnum].nextfreeGtUword == 1UL)
              {
                /* no other overlap */
                continue;
              }
              else
              {
                matchlen = matchlen_stacks[suffix_seqnum].spaceGtUword +
                           matchlen_stacks[suffix_seqnum].nextfreeGtUword - 2;
              }
            }
          }
          proc(corrected_suffix_seqnum, prefix_seqnum,
               (GtUword) *matchlen, suffixseq_direct,
               prefixseq_direct, procdata);
        }
        else /* process whole stack, not only the top */
        {
          for (stack_pos = 0;
               stack_pos < matchlen_stacks[suffix_seqnum].nextfreeGtUword;
               stack_pos++)
          {
            matchlen = matchlen_stacks[suffix_seqnum].spaceGtUword + stack_pos;
            gt_assert(matchlen != NULL);
            if (suffix_seqnum == prefix_seqnum)
            {
              if (*matchlen == gt_encseq_seqlength(encseq, suffix_seqnum))
                /* skip ovl of read with whole itself */
                continue;
            }
            proc(corrected_suffix_seqnum, prefix_seqnum,
                 (GtUword) *matchlen, suffixseq_direct,
                 prefixseq_direct, procdata);
          }
        }
      }
    }
  }
}

// Assembly:
subq $0x78, %rsp
movq 0x98(%rsp), %rax
movq 0x90(%rsp), %rax
movq 0x88(%rsp), %rax
movb 0x80(%rsp), %al
movq %rdi, 0x70(%rsp)
movq %rsi, 0x68(%rsp)
movq %rdx, 0x60(%rsp)
movq %rcx, 0x58(%rsp)
movq %r8, 0x50(%rsp)
movq %r9, 0x48(%rsp)
andb $0x1, %al
movb %al, 0x47(%rsp)
movb $0x1, 0x27(%rsp)
movb $0x1, 0x26(%rsp)
cmpq $0x0, 0x68(%rsp)
jne 0x285b51
movq 0x3b6480(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2904e9(%rip), %rsi    # 0x516013
leaq 0x2ec8b1(%rip), %rdx    # 0x5723e2
leaq 0x2fb1eb(%rip), %rcx    # 0x580d23
leaq 0x2fb11f(%rip), %r8     # 0x580c5e
movl $0x47, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x285b53
cmpq $0x0, 0x70(%rsp)
je 0x285b9b
movq 0x48(%rsp), %rax
movq 0x70(%rsp), %rcx
subq $0x1, %rcx
shrq $0x6, %rcx
movq (%rax,%rcx,8), %rax
movq 0x70(%rsp), %rcx
subq $0x1, %rcx
andq $0x3f, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
shrq %cl, %rdx
movq %rdx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
je 0x28600d
movq 0x68(%rsp), %rdi
movq 0x70(%rsp), %rsi
callq 0xb03a0
movq %rax, 0x38(%rsp)
cmpq $0x0, 0x88(%rsp)
je 0x285c48
cmpq $0x0, 0x88(%rsp)
jbe 0x285c41
movq 0x38(%rsp), %rax
cmpq 0x88(%rsp), %rax
jb 0x285c41
jmp 0x285bda
movq 0x38(%rsp), %rax
movq 0x60(%rsp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jbe 0x285c25
movq 0x3b63ac(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x290415(%rip), %rsi    # 0x516013
leaq 0x2fb13b(%rip), %rdx    # 0x580d40
leaq 0x2fb117(%rip), %rcx    # 0x580d23
leaq 0x2fb04b(%rip), %r8     # 0x580c5e
movl $0x4f, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x285c27
movq 0x60(%rsp), %rax
subq $0x1, %rax
subq 0x38(%rsp), %rax
movq %rax, 0x38(%rsp)
movb $0x0, 0x26(%rsp)
jmp 0x285c46
movb $0x1, 0x26(%rsp)
jmp 0x285c48
movq $0x0, 0x30(%rsp)
movq 0x30(%rsp), %rax
cmpq 0x60(%rsp), %rax
jae 0x28600b
movq 0x50(%rsp), %rax
movq 0x30(%rsp), %rcx
shrq $0x6, %rcx
movq (%rax,%rcx,8), %rax
movq 0x30(%rsp), %rcx
andq $0x3f, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
shrq %cl, %rdx
movq %rdx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
je 0x285ff6
movq 0x30(%rsp), %rax
movq %rax, 0x28(%rsp)
cmpq $0x0, 0x88(%rsp)
je 0x285d9d
cmpq $0x0, 0x88(%rsp)
jbe 0x285d35
movq 0x28(%rsp), %rax
cmpq 0x88(%rsp), %rax
jb 0x285d35
jmp 0x285cce
movq 0x28(%rsp), %rax
movq 0x60(%rsp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jbe 0x285d19
movq 0x3b62b8(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x290321(%rip), %rsi    # 0x516013
leaq 0x2fb06d(%rip), %rdx    # 0x580d66
leaq 0x2fb023(%rip), %rcx    # 0x580d23
leaq 0x2faf57(%rip), %r8     # 0x580c5e
movl $0x59, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x285d1b
movq 0x60(%rsp), %rax
subq $0x1, %rax
subq 0x28(%rsp), %rax
movq %rax, 0x28(%rsp)
movb $0x0, 0x27(%rsp)
jmp 0x285d3a
movb $0x1, 0x27(%rsp)
testb $0x1, 0x27(%rsp)
je 0x285d48
testb $0x1, 0x26(%rsp)
jne 0x285d9b
movq 0x28(%rsp), %rax
cmpq 0x38(%rsp), %rax
jne 0x285d62
testb $0x1, 0x27(%rsp)
jne 0x285d9b
testb $0x1, 0x26(%rsp)
jne 0x285d9b
testb $0x1, 0x27(%rsp)
je 0x285d7c
testb $0x1, 0x26(%rsp)
jne 0x285d7c
movq 0x38(%rsp), %rax
cmpq 0x28(%rsp), %rax
ja 0x285d9b
testb $0x1, 0x27(%rsp)
jne 0x285d96
testb $0x1, 0x26(%rsp)
je 0x285d96
movq 0x38(%rsp), %rax
cmpq 0x28(%rsp), %rax
jb 0x285d9b
jmp 0x285ff8
jmp 0x285d9d
testb $0x1, 0x47(%rsp)
jne 0x285ee3
movq 0x58(%rsp), %rax
imulq $0x18, 0x30(%rsp), %rcx
addq %rcx, %rax
movq (%rax), %rax
movq 0x58(%rsp), %rcx
imulq $0x18, 0x30(%rsp), %rdx
addq %rdx, %rcx
movq 0x10(%rcx), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x8, %rax
movq %rax, 0x18(%rsp)
cmpq $0x0, 0x18(%rsp)
jne 0x285e1b
movq 0x3b61b6(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x29021f(%rip), %rsi    # 0x516013
leaq 0x2faf9b(%rip), %rdx    # 0x580d96
leaq 0x2faf21(%rip), %rcx    # 0x580d23
leaq 0x2fae55(%rip), %r8     # 0x580c5e
movl $0x62, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x285e1d
movq 0x30(%rsp), %rax
cmpq 0x38(%rsp), %rax
jne 0x285ea3
movq 0x18(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x68(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0xb09f0
movq %rax, %rcx
movq 0x8(%rsp), %rax
cmpq %rcx, %rax
jne 0x285ea1
movq 0x58(%rsp), %rax
imulq $0x18, 0x30(%rsp), %rcx
addq %rcx, %rax
cmpq $0x1, 0x10(%rax)
jne 0x285e6c
jmp 0x285ff8
movq 0x58(%rsp), %rax
imulq $0x18, 0x30(%rsp), %rcx
addq %rcx, %rax
movq (%rax), %rax
movq 0x58(%rsp), %rcx
imulq $0x18, 0x30(%rsp), %rdx
addq %rdx, %rcx
movq 0x10(%rcx), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x10, %rax
movq %rax, 0x18(%rsp)
jmp 0x285ea1
jmp 0x285ea3
movq 0x90(%rsp), %rax
movq 0x28(%rsp), %rdi
movq 0x38(%rsp), %rsi
movq 0x18(%rsp), %rcx
movq (%rcx), %rdx
movb 0x27(%rsp), %cl
movb 0x26(%rsp), %r8b
movq 0x98(%rsp), %r9
andb $0x1, %cl
andb $0x1, %r8b
movzbl %cl, %ecx
movzbl %r8b, %r8d
callq *%rax
jmp 0x285ff4
movq $0x0, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq 0x58(%rsp), %rcx
imulq $0x18, 0x30(%rsp), %rdx
addq %rdx, %rcx
cmpq 0x10(%rcx), %rax
jae 0x285ff2
movq 0x58(%rsp), %rax
imulq $0x18, 0x30(%rsp), %rcx
addq %rcx, %rax
movq (%rax), %rax
movq 0x10(%rsp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x18(%rsp)
cmpq $0x0, 0x18(%rsp)
jne 0x285f6b
movq 0x3b6066(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2900cf(%rip), %rsi    # 0x516013
leaq 0x2fae4b(%rip), %rdx    # 0x580d96
leaq 0x2fadd1(%rip), %rcx    # 0x580d23
leaq 0x2fad05(%rip), %r8     # 0x580c5e
movl $0x7f, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x285f6d
movq 0x30(%rsp), %rax
cmpq 0x38(%rsp), %rax
jne 0x285fa4
movq 0x18(%rsp), %rax
movq (%rax), %rax
movq %rax, (%rsp)
movq 0x68(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0xb09f0
movq %rax, %rcx
movq (%rsp), %rax
cmpq %rcx, %rax
jne 0x285fa2
jmp 0x285fdf
jmp 0x285fa4
movq 0x90(%rsp), %rax
movq 0x28(%rsp), %rdi
movq 0x38(%rsp), %rsi
movq 0x18(%rsp), %rcx
movq (%rcx), %rdx
movb 0x27(%rsp), %cl
movb 0x26(%rsp), %r8b
movq 0x98(%rsp), %r9
andb $0x1, %cl
andb $0x1, %r8b
movzbl %cl, %ecx
movzbl %r8b, %r8d
callq *%rax
movq 0x10(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x10(%rsp)
jmp 0x285eec
jmp 0x285ff4
jmp 0x285ff6
jmp 0x285ff8
movq 0x30(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x30(%rsp)
jmp 0x285c51
jmp 0x28600d
addq $0x78, %rsp
retq
nopw %cs:(%rax,%rax)