// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/match/sfx-diffcov.c
// Function: gt_differencecover_prepare_sample
GtDifferencecover *gt_differencecover_prepare_sample(
                                        unsigned int vparam,
                                        const GtEncseq *encseq,
                                        GtReadmode readmode,
                                        unsigned int prefixlength,
                                        const Sfxstrategy *sfxstrategy,
                                        GtOutlcpinfo *outlcpinfosample,
                                        GtLogger *logger,
                                        GtTimer *sfxprogress,
                                        GtError *err)
{
  GtDifferencecover *dcov = NULL;

  gt_assert(vparam > 0);
  if (sfxprogress != NULL)
  {
    gt_timer_show_progress(sfxprogress,
                           (outlcpinfosample == NULL)
                           ? "sorting difference cover sample"
                           : ("sorting difference cover sample "
                             "and determine their lcp values"),
                           stdout);
  }
  dcov = gt_differencecover_new(vparam,encseq,readmode,
                                prefixlength,logger);
  if (dcov == NULL)
  {
    gt_error_set(err,"no difference cover modulo %u found",vparam);
  } else
  {
    if (gt_differencecover_vparamverify(dcov,err) != 0)
    {
      gt_differencecover_delete(dcov);
      dcov = NULL;
    } else
    {
      gt_assert(sfxstrategy != NULL);
      gt_logger_log(logger,"presorting sample suffixes according to "
                           "difference cover modulo %u",vparam);
      if (prefixlength > 0)
      {
        dc_differencecover_sortsample(dcov,outlcpinfosample,sfxstrategy,
                                      sfxprogress,sfxstrategy->dccheck);
      } else
      {
        dc_differencecover_sortsample0(dcov,outlcpinfosample,sfxstrategy,
                                       sfxprogress,sfxstrategy->dccheck);
      }
    }
  }
  return dcov;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %r9, 0x10(%rsp)
movq %r8, 0x18(%rsp)
testl %edi, %edi
je 0x1e8c58
movl %ecx, %ebp
movl %edx, %ebx
movq %rsi, %r15
movl %edi, %r13d
movq 0x98(%rsp), %rdi
movq 0x90(%rsp), %r14
testq %rdi, %rdi
je 0x1e883f
cmpq $0x0, 0x10(%rsp)
leaq 0x1ce225(%rip), %rax    # 0x3b6a4a
leaq 0x1ce23e(%rip), %rsi    # 0x3b6a6a
cmoveq %rax, %rsi
movq 0x2d06a1(%rip), %rax    # 0x4b8ed8
movq (%rax), %rdx
callq 0x11cc90
movq 0xa0(%rsp), %r12
movl %r13d, %edi
movq %r15, %rsi
movl %ebx, %edx
movl %ebp, %ecx
movq %r14, %r8
callq 0x1e841c
testq %rax, %rax
je 0x1e8888
movq %rax, %rbx
movl (%rax), %edx
cmpl 0x18(%rax), %edx
jae 0x1e88a3
leaq 0x1ce463(%rip), %rsi    # 0x3b6cd2
movq %r12, %rdi
xorl %eax, %eax
callq 0xfcb67
movq %rbx, %rdi
callq 0x1e86ed
xorl %ebx, %ebx
jmp 0x1e8c46
leaq 0x1ce21a(%rip), %rsi    # 0x3b6aa9
xorl %ebx, %ebx
movq %r12, %rdi
movl %r13d, %edx
xorl %eax, %eax
callq 0xfcb67
jmp 0x1e8c46
movq 0x18(%rsp), %r12
testq %r12, %r12
je 0x1e8c65
leaq 0x1ce215(%rip), %rsi    # 0x3b6acd
xorl %r15d, %r15d
movq %r14, %rdi
movl %r13d, %edx
xorl %eax, %eax
callq 0x103fe1
movb 0x32(%r12), %al
testl %ebp, %ebp
je 0x1e88f2
movzbl %al, %r8d
movq %rbx, %rdi
movq 0x10(%rsp), %rsi
movq %r12, %rdx
movq 0x98(%rsp), %rcx
callq 0x1e8c6f
jmp 0x1e8c46
movb %al, 0xf(%rsp)
movb $0x0, 0x4f(%rsp)
movq %r15, 0x70(%rbx)
movq %r15, 0x58(%rbx)
movq %r15, 0x88(%rbx)
movq %r15, 0xc0(%rbx)
movl $0x10, %edi
callq 0x1eaf42
movq %rax, 0x100(%rbx)
movq %r15, 0x90(%rbx)
movq %r15, 0x50(%rbx)
movq 0x30(%rbx), %r14
movl 0x8(%rbx), %eax
leaq (%r14,%rax,2), %rbp
movq 0x48(%rbx), %rax
xorl %r13d, %r13d
xorl %r12d, %r12d
cmpq %rbp, %r14
jae 0x1e8978
cmpw %r15w, (%r14)
jne 0x1e8978
incq 0x70(%rbx)
movl $0x1, %ecx
cmpq %rax, %r13
jae 0x1e8971
movq 0x60(%rbx), %rdi
movl 0x68(%rbx), %edx
movq %r13, %rsi
callq 0xe7bbc
xorl %ecx, %ecx
cmpb $-0x2, %al
setae %cl
addq %rcx, %r12
addq $0x2, %r14
cmpl 0xc(%rbx), %r15d
jae 0x1e8983
incl %r15d
jmp 0x1e898a
movq 0x30(%rbx), %r14
xorl %r15d, %r15d
incq %r13
movq 0x48(%rbx), %rax
cmpq %rax, %r13
jbe 0x1e8942
movq 0x70(%rbx), %rdx
movq %rdx, %rcx
subq %r12, %rcx
movq %rcx, 0x78(%rbx)
movq 0x140(%rbx), %rdi
movq %rdx, %xmm1
movq 0x15ef28(%rip), %xmm2   # 0x3478e0
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x15ef2c(%rip), %xmm3   # 0x3478f0
subpd %xmm3, %xmm1
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x160e04(%rip), %xmm0   # 0x3497e0
incq %rax
movq %rax, %xmm1
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
subpd %xmm3, %xmm1
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
divsd %xmm2, %xmm0
movl 0x18(%rbx), %ecx
leaq 0x1cebe6(%rip), %rsi    # 0x3b75ec
movb $0x1, %al
callq 0x103fe1
movq 0x140(%rbx), %rdi
leaq 0x1ce422(%rip), %rsi    # 0x3b6e3d
xorl %r14d, %r14d
movq %r12, %rdx
xorl %eax, %eax
callq 0x103fe1
movq 0x48(%rbx), %rsi
movq 0x78(%rbx), %rdi
movq 0x140(%rbx), %rcx
xorl %edx, %edx
callq 0x1fc578
movq %rax, 0x148(%rbx)
cmpq $0x0, 0x48(%rbx)
je 0x1e8abf
movq 0x30(%rbx), %r15
movl 0x8(%rbx), %eax
leaq (%r15,%rax,2), %rbp
xorl %r13d, %r13d
xorl %r12d, %r12d
cmpq %rbp, %r15
jae 0x1e8aa2
cmpw %r14w, (%r15)
jne 0x1e8aa2
movq 0x60(%rbx), %rdi
movl 0x68(%rbx), %edx
movq %r13, %rsi
callq 0xe7bbc
cmpb $-0x3, %al
ja 0x1e8a9e
movq 0x148(%rbx), %rdi
callq 0x1fc7d3
movq 0x148(%rbx), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r13, %rcx
callq 0x1fc9e1
incq %r12
addq $0x2, %r15
cmpl 0xc(%rbx), %r14d
jae 0x1e8aad
incl %r14d
jmp 0x1e8ab4
movq 0x30(%rbx), %r15
xorl %r14d, %r14d
incq %r13
cmpq 0x48(%rbx), %r13
jb 0x1e8a5d
jmp 0x1e8ac2
xorl %r12d, %r12d
cmpq 0x78(%rbx), %r12
jne 0x1e8c6a
movq 0x60(%rbx), %rdi
callq 0xeace6
xorb $0x1, %al
movq 0x48(%rbx), %r8
movq 0x78(%rbx), %rcx
movq 0x140(%rbx), %r9
movzbl %al, %edx
leaq 0x20(%rsp), %r14
movq %r14, %rdi
movq 0x18(%rsp), %rsi
callq 0x1eb191
movl 0x14(%rbx), %esi
movl 0x18(%rbx), %edx
movq 0x78(%rbx), %rcx
movq 0x10(%rsp), %r15
movq %r15, %rdi
callq 0x1ec58a
movq 0x148(%rbx), %rdi
movq 0x78(%rbx), %rsi
movq 0x60(%rbx), %rdx
movl 0x68(%rbx), %ecx
movl (%rbx), %r9d
leaq 0x288e(%rip), %rax      # 0x1eb3bc
movq %r15, %r8
pushq 0x140(%rbx)
pushq %rbx
pushq %rax
pushq %r14
callq 0x1e4c41
addq $0x20, %rsp
cmpb $0x0, 0xf(%rsp)
je 0x1e8c1d
movq 0x78(%rbx), %rax
testq %rax, %rax
je 0x1e8b8b
movq 0x60(%rbx), %rdx
movl 0x68(%rbx), %ecx
movq 0x148(%rbx), %r8
movl (%rbx), %r10d
xorl %r11d, %r11d
leaq 0x1cddbd(%rip), %rdi    # 0x3b6930
movl $0x6b9, %esi            # imm = 0x6B9
xorl %r9d, %r9d
pushq %r10
pushq %r11
pushq %r11
pushq %rax
callq 0x1fd1cf
addq $0x20, %rsp
movq %rbx, %rdi
callq 0x1eb45b
movq 0x78(%rbx), %rax
testq %rax, %rax
je 0x1e8c25
movq 0x60(%rbx), %rdx
movl 0x68(%rbx), %ecx
movq 0x148(%rbx), %r8
xorl %r10d, %r10d
leaq 0x1cdd78(%rip), %rdi    # 0x3b6930
movl $0x6c9, %esi            # imm = 0x6C9
xorl %r9d, %r9d
pushq $0x0
pushq %r10
pushq %r10
pushq %rax
callq 0x1fd1cf
addq $0x20, %rsp
cmpq $0x0, 0x78(%rbx)
je 0x1e8c25
xorl %r14d, %r14d
movq 0x148(%rbx), %rdi
callq 0x1fc7d3
movq 0x148(%rbx), %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x1fc965
movq 0x98(%rbx), %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x1eb7b2
movl (%r15,%rax,4), %esi
cmpq %rsi, %r14
jne 0x1e8c5d
incq %r14
cmpq 0x78(%rbx), %r14
jb 0x1e8bda
jmp 0x1e8c25
movq %rbx, %rdi
callq 0x1eb45b
movq 0x148(%rbx), %rdi
xorl %esi, %esi
callq 0x1fc765
movq $0x0, 0x148(%rbx)
movq %rbx, %rdi
callq 0x1eb70c
movq %rbx, %rax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x7720e
movq %r14, %rdi
callq 0x771ae
callq 0x771d5
callq 0x77175