// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/eis-voiditf.c
// Function: gt_pck_exactpatternmatching
bool gt_pck_exactpatternmatching(const FMindex *fmindex,
                                 const GtUchar *pattern,
                                 GtUword patternlength,
                                 GtUword totallength,
                                 const GtUchar *dbsubstring,
                                 ProcessIdxMatch processmatch,
                                 void *processmatchinfo)
{
  BWTSeqExactMatchesIterator *bsemi;
  GtUword dbstartpos, numofmatches;
  GtIdxMatch match;

  bsemi = gt_newEMIterator((const BWTSeq *) fmindex,
                           pattern,(size_t) patternlength, true);
  gt_assert(bsemi != NULL);
  numofmatches = gt_EMINumMatchesTotal(bsemi);
  match.dbabsolute = true;
  match.dblen = patternlength;
  match.dbsubstring = dbsubstring;
  match.querystartpos = 0;
  match.querylen = patternlength;
  match.distance = 0;
  match.alignment = NULL;
  while (EMIGetNextMatch(bsemi,&dbstartpos,(const BWTSeq *) fmindex))
  {
    gt_assert(totallength >= (dbstartpos + patternlength));
    match.dbstartpos = totallength - (dbstartpos + patternlength);
    processmatch(processmatchinfo,&match);
  }
  if (bsemi != NULL)
  {
    gt_deleteEMIterator(bsemi);
    bsemi = NULL;
  }
  return numofmatches > 0 ? true : false;
}

// Assembly:
subq $0x98, %rsp
movq 0xa0(%rsp), %rax
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq %rdx, 0x80(%rsp)
movq %rcx, 0x78(%rsp)
movq %r8, 0x70(%rsp)
movq %r9, 0x68(%rsp)
movq 0x90(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq 0x80(%rsp), %rdx
movl $0x1, %ecx
callq 0x226fa0
movq %rax, 0x60(%rsp)
cmpq $0x0, 0x60(%rsp)
jne 0x230add
movq 0x40b4f4(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2e555d(%rip), %rsi    # 0x516013
leaq 0x345b77(%rip), %rdx    # 0x576634
leaq 0x345b7e(%rip), %rcx    # 0x576642
leaq 0x345a56(%rip), %r8     # 0x576521
movl $0x1db, %r9d            # imm = 0x1DB
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x230adf
movq 0x60(%rsp), %rdi
callq 0x227190
movq %rax, 0x50(%rsp)
movb $0x1, 0x8(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x38(%rsp)
movq $0x0, 0x40(%rsp)
movq $0x0, 0x48(%rsp)
movq 0x60(%rsp), %rdi
movq 0x90(%rsp), %rdx
leaq 0x58(%rsp), %rsi
callq 0x230c20
testb $0x1, %al
jne 0x230b52
jmp 0x230bd8
jmp 0x230b54
movq 0x78(%rsp), %rax
movq 0x58(%rsp), %rcx
addq 0x80(%rsp), %rcx
cmpq %rcx, %rax
jae 0x230ba3
movq 0x40b42e(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2e5497(%rip), %rsi    # 0x516013
leaq 0x345adb(%rip), %rdx    # 0x57665e
leaq 0x345ab8(%rip), %rcx    # 0x576642
leaq 0x345990(%rip), %r8     # 0x576521
movl $0x1e6, %r9d            # imm = 0x1E6
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x230ba5
movq 0x78(%rsp), %rax
movq 0x58(%rsp), %rcx
addq 0x80(%rsp), %rcx
subq %rcx, %rax
movq %rax, 0x18(%rsp)
movq 0x68(%rsp), %rax
movq 0xa0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq *%rax
jmp 0x230b32
cmpq $0x0, 0x60(%rsp)
je 0x230bf3
movq 0x60(%rsp), %rdi
callq 0x227170
movq $0x0, 0x60(%rsp)
movq 0x50(%rsp), %rdx
xorl %eax, %eax
movl $0x1, %ecx
cmpq $0x0, %rdx
cmoval %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
addq $0x98, %rsp
retq
nopw %cs:(%rax,%rax)