// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/match/fmi-locate.c
// Function: gt_fmfindtextpos
GtUword gt_fmfindtextpos (const Fmindex *fm,GtUword idx)
{
  GtUword offset = 0;
  GtUchar cc;

  while ((idx & fm->markdistminus1) != 0)
  {
    if (idx == fm->longestsuffixpos || GT_ISSPECIAL(cc = ACCESSBWTTEXT(idx)))
    {
      GtUword smallestgeq
               = searchsmallestgeq(fm->specpos.spaceGtPairBwtidx,
                                   fm->specpos.spaceGtPairBwtidx +
                                   fm->specpos.nextfreeGtPairBwtidx - 1,
                                   idx);
      return (smallestgeq + offset) % fm->bwtlength;
    }
    idx = fm->tfreq[cc] + fmoccurrence (fm, cc, idx);
    offset++;
  }
  return (fm->markpostable[idx / fm->markdist] + offset) % fm->bwtlength;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
xorl %r12d, %r12d
testq %r14, 0x48(%rbx)
je 0x15b0c8
cmpq 0x30(%rbx), %r14
je 0x15b06e
movq (%rbx), %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x705e4
cmpb $-0x2, %al
jae 0x15b06e
movl %eax, %ebp
movq %r12, (%rsp)
movzbl %al, %edi
movq 0x18(%rbx), %rax
movq (%rax,%rdi,8), %r13
movq 0xa8(%rbx), %rdx
imulq %rdi, %rdx
movl 0x88(%rbx), %eax
movq %r14, %r12
movl %eax, %ecx
shrq %cl, %r12
imulq 0xb0(%rbx), %rdi
movb 0x8c(%rbx), %cl
movq %r14, %r8
shrq %cl, %r8
movq 0x30(%rbx), %rcx
movq %rcx, %r9
movl 0x7c(%rbx), %esi
subq %r14, %r9
jae 0x15ae80
movq %r14, %r9
subq %rcx, %r9
cmpq %rsi, %r9
jae 0x15aeeb
addq %rdx, %r12
shlq $0x3, %rdi
addq 0x20(%rbx), %rdi
movq (%rdi,%r8,8), %r15
movq 0x40(%rbx), %rsi
andq %r14, %rsi
movl %eax, %ecx
shrq %cl, %rsi
addq %rdx, %rsi
cmpq %r12, %rsi
jae 0x15aeb8
movq 0x8(%rbx), %rax
movzbl (%rax,%rsi), %eax
addq %rax, %r15
incq %rsi
jmp 0x15aea3
movq 0x38(%rbx), %r12
andq %r14, %r12
cmpq %r14, %r12
jae 0x15b05c
cmpq 0x30(%rbx), %r12
je 0x15aee6
movq (%rbx), %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0x705e4
xorl %ecx, %ecx
cmpb %bpl, %al
sete %cl
addq %rcx, %r15
incq %r12
jmp 0x15aebf
movl 0x84(%rbx), %ecx
movl %ecx, %r9d
shrl %r9d
testl %r9d, %r14d
je 0x15af44
movq 0x10(%rbx), %r9
subq %r14, %r9
cmpq %rcx, %r9
jbe 0x15af44
leaq 0x1(%r8), %rsi
movb 0x90(%rbx), %cl
shlq %cl, %rsi
shlq $0x3, %rdi
addq 0x20(%rbx), %rdi
addq %rdx, %rsi
movq 0x8(%rdi,%r8,8), %r15
addq %r12, %rdx
movq %rdx, %rcx
cmpq %rsi, %rcx
jae 0x15aff5
movq 0x8(%rbx), %rdi
movzbl (%rdi,%rcx), %edi
subq %rdi, %r15
incq %rcx
jmp 0x15af2b
addq %rdx, %r12
shlq $0x3, %rdi
addq 0x20(%rbx), %rdi
movq (%rdi,%r8,8), %r15
movq 0x40(%rbx), %rdi
andq %r14, %rdi
movl %eax, %ecx
shrq %cl, %rdi
addq %rdx, %rdi
cmpq %r12, %rdi
jae 0x15af77
movq 0x8(%rbx), %rax
movzbl (%rax,%rdi), %eax
addq %rax, %r15
incq %rdi
jmp 0x15af62
testl %r14d, 0x80(%rbx)
je 0x15afc8
movq 0x10(%rbx), %rax
subq %r14, %rax
cmpq %rsi, %rax
jbe 0x15afc8
movq 0x8(%rbx), %rax
movzbl (%rax,%r12), %eax
addq %rax, %r15
movq 0x38(%rbx), %r12
andq %r14, %r12
addq %rsi, %r12
cmpq %r12, %r14
jae 0x15b05c
movq (%rbx), %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x705e4
xorl %ecx, %ecx
cmpb %bpl, %al
sete %cl
subq %rcx, %r15
incq %r14
jmp 0x15afa2
movq 0x38(%rbx), %r12
andq %r14, %r12
cmpq %r14, %r12
jae 0x15b05c
movq (%rbx), %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0x705e4
xorl %ecx, %ecx
cmpb %bpl, %al
sete %cl
addq %rcx, %r15
incq %r12
jmp 0x15afcf
testl %r14d, 0x80(%rbx)
je 0x15b033
movq 0x8(%rbx), %rcx
movzbl (%rcx,%rdx), %ecx
addq %rcx, %r15
incq %r12
movl %eax, %ecx
shlq %cl, %r12
cmpq %r12, %r14
jae 0x15b05c
movq (%rbx), %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x705e4
xorl %ecx, %ecx
cmpb %bpl, %al
sete %cl
subq %rcx, %r15
incq %r14
jmp 0x15b011
movq 0x38(%rbx), %r12
andq %r14, %r12
cmpq %r14, %r12
jae 0x15b05c
movq (%rbx), %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0x705e4
xorl %ecx, %ecx
cmpb %bpl, %al
sete %cl
addq %rcx, %r15
incq %r12
jmp 0x15b03a
addq %r13, %r15
movq (%rsp), %r12
incq %r12
movq %r15, %r14
jmp 0x15ae04
movq 0x50(%rbx), %rcx
testq %rcx, %rcx
je 0x15b0ff
movq 0x60(%rbx), %rax
shlq $0x4, %rax
leaq (%rcx,%rax), %rdx
addq $-0x10, %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
ja 0x15b0bd
movq %rdx, %rdi
subq %rcx, %rdi
sarq %rdi
andq $-0x10, %rdi
leaq (%rcx,%rdi), %rsi
cmpq %r14, (%rcx,%rdi)
jbe 0x15b0b2
leaq -0x10(%rsi), %rdx
movq %rsi, %rax
jmp 0x15b08d
jae 0x15b0fa
addq $0x10, %rsi
movq %rsi, %rcx
jmp 0x15b08d
testq %rax, %rax
je 0x15b129
addq $0x8, %rax
jmp 0x15b0dc
movq %r14, %rax
xorl %edx, %edx
divq 0xb8(%rbx)
shlq $0x3, %rax
addq 0x28(%rbx), %rax
addq (%rax), %r12
movq %r12, %rax
xorl %edx, %edx
divq 0x10(%rbx)
movq %rdx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rsi, %rax
jmp 0x15b0c2
movq 0x2dce62(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x189f03(%rip), %rsi    # 0x2e5013
leaq 0x1eb7fb(%rip), %rdx    # 0x346912
leaq 0x1eb801(%rip), %rcx    # 0x34691f
leaq 0x1eb80c(%rip), %r8     # 0x346931
pushq $0x1f
jmp 0x15b151
movq 0x2dce38(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x189ed9(%rip), %rsi    # 0x2e5013
leaq 0x1eb807(%rip), %rdx    # 0x346948
leaq 0x1eb7d7(%rip), %rcx    # 0x34691f
leaq 0x1eb7e2(%rip), %r8     # 0x346931
pushq $0x36
popq %r9
xorl %eax, %eax
callq 0x17a50
callq 0x17390
nop