// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/eis-suffixerator-interface.c
// Function: gt_newSfxInterfaceWithReaders
sfxInterface *
gt_newSfxInterfaceWithReaders(GtReadmode readmode,
                              unsigned int prefixlength,
                              unsigned int numofparts,
                              GtUword maximumspace,
                              const Sfxstrategy *sfxstrategy,
                              size_t numReaders,
                              enum sfxDataRequest readerRequests[],
                              SeqDataReader readers[],
                              const GtEncseq *encseq,
                              GtTimer *sfxprogress,
                              bool withprogressbar,
                              GtUword length,
                              GtLogger *verbosity, GtError *err)
{
  sfxInterface *sfxi = NULL;
  size_t idx;

  gt_error_check(err);
  sfxi = gt_calloc(1, sizeof (*sfxi));
  {
    RandomSeqAccessor origSeqAccess = { gt_SfxIGetOrigSeq, sfxi };
    initSASeqSrc(&sfxi->baseClass, length, SfxIBaseRequest2XltorFunc, NULL,
                 SfxIBaseGetRot0Pos, SfxIBaseGetSeqStats,
                 origSeqAccess, gt_deleteSfxInterfaceBase, SfxIBaseNewMRAEnc,
                 SfxIGenerate, sfxi);
  }
  sfxi->readmode = readmode;
  sfxi->encseq = encseq;
  sfxi->alpha = gt_encseq_alphabet(encseq);
  sfxi->stats = newSeqStatsFromCharDist(encseq,sfxi->alpha, length);
  if (!(sfxi->sfi = gt_Sfxiterator_new(encseq,
                                       readmode,
                                       prefixlength,
                                       numofparts,
                                       maximumspace,
                                       sfxstrategy,
                                       sfxprogress,
                                       withprogressbar,
                                       verbosity,
                                       err)))
  {
    gt_newSfxInterfaceWithReadersErrRet();
  }
  sfxi->rot0Pos.defined = false;

  sfxi->lastGeneratedStart = sfxi->lastGeneratedLen = 0;
  sfxi->lastGeneratedSufTabSegment = NULL;

  for (idx = 0; idx < numReaders; ++idx)
  {
    readers[idx] = gt_SfxIRegisterReader(sfxi, readerRequests[idx]);
    if (!readers[idx].readData)
    {
      gt_newSfxInterfaceWithReadersErrRet();
    }
  }
  return sfxi;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0xa0, %rsp
movq 0xf8(%rsp), %rax
movq 0xf0(%rsp), %rax
movq 0xe8(%rsp), %rax
movb 0xe0(%rsp), %al
movq 0xd8(%rsp), %r10
movq 0xd0(%rsp), %r10
movq 0xc8(%rsp), %r10
movq 0xc0(%rsp), %r10
movl %edi, 0x9c(%rsp)
movl %esi, 0x98(%rsp)
movl %edx, 0x94(%rsp)
movq %rcx, 0x88(%rsp)
movq %r8, 0x80(%rsp)
movq %r9, 0x78(%rsp)
andb $0x1, %al
movb %al, 0x77(%rsp)
movq $0x0, 0x68(%rsp)
cmpq $0x0, 0xf8(%rsp)
je 0x22e06a
movq 0xf8(%rsp), %rdi
callq 0xd8a60
testb $0x1, %al
jne 0x22e032
jmp 0x22e06a
movq 0x40df67(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2e7fd0(%rip), %rsi    # 0x516013
leaq 0x2e8175(%rip), %rdx    # 0x5161bf
leaq 0x34839f(%rip), %rcx    # 0x5763f0
leaq 0x3483b6(%rip), %r8     # 0x57640e
movl $0xf1, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x22e06c
movl $0x1, %edi
movl $0x120, %esi            # imm = 0x120
leaq 0x348391(%rip), %rdx    # 0x57640e
movl $0xf2, %ecx
callq 0xe83c0
movq %rax, 0x68(%rsp)
leaq 0x2ed(%rip), %rax       # 0x22e380
movq %rax, 0x50(%rsp)
movq 0x68(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x68(%rsp), %rdi
movq 0xe8(%rsp), %rsi
movq 0x68(%rsp), %rax
leaq 0x575(%rip), %rdx       # 0x22e630
xorl %ecx, %ecx
leaq 0x5ac(%rip), %r8        # 0x22e670
leaq 0x5d5(%rip), %r9        # 0x22e6a0
leaq 0x50(%rsp), %r14
leaq 0x5e9(%rip), %rbx       # 0x22e6c0
leaq 0x602(%rip), %r11       # 0x22e6e0
leaq 0x61b(%rip), %r10       # 0x22e700
movq (%r14), %r15
movq %r15, (%rsp)
movq 0x8(%r14), %r14
movq %r14, 0x8(%rsp)
movq %rbx, 0x10(%rsp)
movq %r11, 0x18(%rsp)
movq %r10, 0x20(%rsp)
movq %rax, 0x28(%rsp)
callq 0x22e420
movl 0x9c(%rsp), %ecx
movq 0x68(%rsp), %rax
movl %ecx, 0xc0(%rax)
movq 0xd0(%rsp), %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0xe0(%rax)
movq 0xd0(%rsp), %rdi
callq 0xb0f00
movq %rax, %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0xd8(%rax)
movq 0xd0(%rsp), %rdi
movq 0x68(%rsp), %rax
movq 0xd8(%rax), %rsi
movq 0xe8(%rsp), %rdx
callq 0x22ea80
movq %rax, %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0xe8(%rax)
movq 0xd0(%rsp), %rdi
movl 0x9c(%rsp), %esi
movl 0x98(%rsp), %edx
movl 0x94(%rsp), %ecx
movq 0x88(%rsp), %r8
movq 0x80(%rsp), %r9
movq 0xd8(%rsp), %rbx
movb 0x77(%rsp), %r11b
movq 0xf0(%rsp), %r10
movq 0xf8(%rsp), %rax
andb $0x1, %r11b
movq %rbx, (%rsp)
movzbl %r11b, %r11d
movl %r11d, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x2e1ab0
movq 0x68(%rsp), %rcx
movq %rax, 0xf0(%rcx)
cmpq $0x0, %rax
jne 0x22e247
jmp 0x22e1fe
movq 0x68(%rsp), %rax
cmpq $0x0, 0xe8(%rax)
je 0x22e21e
movq 0x68(%rsp), %rax
movq 0xe8(%rax), %rdi
callq 0x22ec00
cmpq $0x0, 0x68(%rsp)
je 0x22e23c
movq 0x68(%rsp), %rdi
leaq 0x3481dc(%rip), %rsi    # 0x57640e
movl $0x109, %edx            # imm = 0x109
callq 0xe88c0
movq $0x0, 0x68(%rsp)
jmp 0x22e247
movq 0x68(%rsp), %rax
movb $0x0, 0xf8(%rax)
movq 0x68(%rsp), %rax
movq $0x0, 0x108(%rax)
movq 0x68(%rsp), %rax
movq $0x0, 0x110(%rax)
movq 0x68(%rsp), %rax
movq $0x0, 0x118(%rax)
movq $0x0, 0x60(%rsp)
movq 0x60(%rsp), %rax
cmpq 0x78(%rsp), %rax
jae 0x22e36d
movq 0xc8(%rsp), %rax
movq 0x60(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, 0x38(%rsp)
movq 0x68(%rsp), %rdi
movq 0xc0(%rsp), %rax
movq 0x60(%rsp), %rcx
movl (%rax,%rcx,4), %esi
callq 0x22ec20
movq %rax, %rcx
movq 0x38(%rsp), %rax
movq %rcx, 0x40(%rsp)
movq %rdx, 0x48(%rsp)
movq 0x40(%rsp), %rcx
movq %rcx, (%rax)
movq 0x48(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq 0xc8(%rsp), %rax
movq 0x60(%rsp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
cmpq $0x0, 0x8(%rax)
jne 0x22e358
jmp 0x22e30f
movq 0x68(%rsp), %rax
cmpq $0x0, 0xe8(%rax)
je 0x22e32f
movq 0x68(%rsp), %rax
movq 0xe8(%rax), %rdi
callq 0x22ec00
cmpq $0x0, 0x68(%rsp)
je 0x22e34d
movq 0x68(%rsp), %rdi
leaq 0x3480cb(%rip), %rsi    # 0x57640e
movl $0x115, %edx            # imm = 0x115
callq 0xe88c0
movq $0x0, 0x68(%rsp)
jmp 0x22e358
jmp 0x22e35a
movq 0x60(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x60(%rsp)
jmp 0x22e28c
movq 0x68(%rsp), %rax
addq $0xa0, %rsp
popq %rbx
popq %r14
popq %r15
retq
nop