// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/match/mssufpat.c
// Function: pms_fullmatchLimdfsstate
static void pms_fullmatchLimdfsstate(Limdfsresult *limdfsresult,
                                     DECLAREPTRDFSSTATE(aliascolumn),
                                     GtUword leftbound,
                                     GtUword rightbound,
                                     GT_UNUSED GtUword width,
                                     GtUword currentdepth,
                                     Limdfsconstinfo *mt)
{
  GtMssufpatLimdfsstate *limdfsstate = (GtMssufpatLimdfsstate *) aliascolumn;
  GtMssufpatLimdfsconstinfo *mti = (GtMssufpatLimdfsconstinfo*) mt;

  if (limdfsstate->prefixofsuffixbits > 0)
  {
    GtUword bitindex = 0,
                  first1,
                  tmp = limdfsstate->prefixofsuffixbits;
    do
    {
      first1 = zerosontheright(tmp);
      gt_assert(bitindex + first1 < mti->patternlength);
      if (mti->mstatlength[bitindex+first1] < currentdepth)
      {
        /*
        printf("set mstatlength["GT_WU"]="GT_WU"\n",
               bitindex+first1,currentdepth);
        printf("set mstatwitnessleftbound["GT_WU"]="GT_WU"\n",bitindex+first1,
                                                 (GtUword) leftbound);
        */
        mti->mstatlength[bitindex+first1] = currentdepth;
        mti->mstatwitnessleftbound[bitindex+first1] = leftbound;
        mti->mstatwitnessrightbound[bitindex+first1] = rightbound;
      }
      tmp >>= (first1+1);
      bitindex += (first1+1);
    } while (tmp != 0);
    limdfsresult->status = Limdfscontinue;
  } else
  {
    limdfsresult->status = Limdfsstop;
  }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq (%rsi), %rsi
testq %rsi, %rsi
je 0x2c1454
movq %rcx, %rax
movq 0x30(%rsp), %r10
xorl %r11d, %r11d
pushq $0x1
popq %r8
testb $0x1, %sil
jne 0x2c1415
movq %rsi, %rcx
shrq $0x20, %rcx
xorl %ebx, %ebx
testl $0xfffffffe, %esi       # imm = 0xFFFFFFFE
sete %bl
cmovneq %rsi, %rcx
shll $0x5, %ebx
leaq 0x1(%rbx), %r14
movq %rcx, %r15
shrq $0x10, %r15
orq $0x11, %rbx
testw %cx, %cx
cmovneq %rcx, %r15
cmovneq %r14, %rbx
movq %r15, %rcx
shrq $0x8, %rcx
leaq 0x8(%rbx), %r14
testb %r15b, %r15b
cmovneq %r15, %rcx
cmovneq %rbx, %r14
movq %rcx, %r15
shrq $0x4, %r15
leaq 0x4(%r14), %r12
testb $0xf, %cl
cmovneq %rcx, %r15
cmovneq %r14, %r12
movl %r15d, %ecx
shrl $0x2, %ecx
leaq 0x2(%r12), %rbx
testb $0x3, %r15b
cmovneq %r15, %rcx
cmovneq %r12, %rbx
andl $0x1, %ecx
subq %rcx, %rbx
jmp 0x2c1417
xorl %ebx, %ebx
leaq (%rbx,%r11), %rcx
cmpq (%r10), %rcx
jae 0x2c1467
cmpq %r9, 0x8(%r10,%rcx,8)
jae 0x2c143c
movq %r9, 0x8(%r10,%rcx,8)
movq %rdx, 0x210(%r10,%rcx,8)
movq %rax, 0x410(%r10,%rcx,8)
leaq 0x1(%rbx), %rcx
shrq %cl, %rsi
addq %rbx, %r11
incq %r11
testq %rsi, %rsi
jne 0x2c1391
jmp 0x2c1458
pushq $0x2
popq %r8
movl %r8d, (%rdi)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq 0x176afa(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x23b9b(%rip), %rsi     # 0x2e5013
leaq 0xc33da(%rip), %rdx     # 0x384859
leaq 0xc33fa(%rip), %rcx     # 0x384880
leaq 0xc3374(%rip), %r8      # 0x384801
movl $0xd0, %r9d
xorl %eax, %eax
callq 0x17a50
callq 0x17390