// File: /workspace/github_c_makefile_star2_O1/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 0x1f23b2
movl %ecx, %ebp
movl %edx, %ebx
movq %rsi, %r15
movl %edi, %r13d
movq 0x98(%rsp), %rdi
movq 0x90(%rsp), %r14
testq %rdi, %rdi
je 0x1f1f96
cmpq $0x0, 0x10(%rsp)
leaq 0x1ce0ee(%rip), %rax    # 0x3c006a
leaq 0x1ce107(%rip), %rsi    # 0x3c008a
cmoveq %rax, %rsi
movq 0x2d1f5a(%rip), %rax    # 0x4c3ee8
movq (%rax), %rdx
callq 0x1229c8
movq 0xa0(%rsp), %r12
movl %r13d, %edi
movq %r15, %rsi
movl %ebx, %edx
movl %ebp, %ecx
movq %r14, %r8
callq 0x1f1b80
testq %rax, %rax
je 0x1f1fdf
movq %rax, %rbx
movl (%rax), %edx
cmpl 0x18(%rax), %edx
jae 0x1f1ffa
leaq 0x1ce32c(%rip), %rsi    # 0x3c02f2
movq %r12, %rdi
xorl %eax, %eax
callq 0x1019cf
movq %rbx, %rdi
callq 0x1f1e44
xorl %ebx, %ebx
jmp 0x1f23a0
leaq 0x1ce0e3(%rip), %rsi    # 0x3c00c9
xorl %ebx, %ebx
movq %r12, %rdi
movl %r13d, %edx
xorl %eax, %eax
callq 0x1019cf
jmp 0x1f23a0
movq 0x18(%rsp), %r12
testq %r12, %r12
je 0x1f23bf
leaq 0x1ce0de(%rip), %rsi    # 0x3c00ed
xorl %r15d, %r15d
movq %r14, %rdi
movl %r13d, %edx
xorl %eax, %eax
callq 0x10906e
movb 0x32(%r12), %al
testl %ebp, %ebp
je 0x1f2049
movzbl %al, %r8d
movq %rbx, %rdi
movq 0x10(%rsp), %rsi
movq %r12, %rdx
movq 0x98(%rsp), %rcx
callq 0x1f23c9
jmp 0x1f23a0
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 0x1f471a
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 0x1f20cf
cmpw %r15w, (%r14)
jne 0x1f20cf
incq 0x70(%rbx)
movl $0x1, %ecx
cmpq %rax, %r13
jae 0x1f20c8
movq 0x60(%rbx), %rdi
movl 0x68(%rbx), %edx
movq %r13, %rsi
callq 0xec1f8
xorl %ecx, %ecx
cmpb $-0x2, %al
setae %cl
addq %rcx, %r12
addq $0x2, %r14
cmpl 0xc(%rbx), %r15d
jae 0x1f20da
incl %r15d
jmp 0x1f20e1
movq 0x30(%rbx), %r14
xorl %r15d, %r15d
incq %r13
movq 0x48(%rbx), %rax
cmpq %rax, %r13
jbe 0x1f2099
movq 0x70(%rbx), %rdx
movq %rdx, %rcx
subq %r12, %rcx
movq %rcx, 0x78(%rbx)
movq 0x140(%rbx), %rdi
movq %rdx, %xmm1
movq 0x15e7d1(%rip), %xmm2   # 0x3508e0
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x15e7d5(%rip), %xmm3   # 0x3508f0
subpd %xmm3, %xmm1
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x1606bd(%rip), %xmm0   # 0x3527f0
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 0x1ceaaf(%rip), %rsi    # 0x3c0c0c
movb $0x1, %al
callq 0x10906e
movq 0x140(%rbx), %rdi
leaq 0x1ce2eb(%rip), %rsi    # 0x3c045d
xorl %r14d, %r14d
movq %r12, %rdx
xorl %eax, %eax
callq 0x10906e
movq 0x48(%rbx), %rsi
movq 0x78(%rbx), %rdi
movzbl 0x4f(%rsp), %edx
movq 0x140(%rbx), %rcx
callq 0x205c84
movq %rax, 0x148(%rbx)
cmpq $0x0, 0x48(%rbx)
je 0x1f2219
movq 0x30(%rbx), %r15
movl 0x8(%rbx), %eax
leaq (%r15,%rax,2), %rbp
xorl %r13d, %r13d
xorl %r12d, %r12d
cmpq %rbp, %r15
jae 0x1f21fc
cmpw %r14w, (%r15)
jne 0x1f21fc
movq 0x60(%rbx), %rdi
movl 0x68(%rbx), %edx
movq %r13, %rsi
callq 0xec1f8
cmpb $-0x3, %al
ja 0x1f21f8
movq 0x148(%rbx), %rdi
callq 0x205ed1
movq 0x148(%rbx), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r13, %rcx
callq 0x2060df
incq %r12
addq $0x2, %r15
cmpl 0xc(%rbx), %r14d
jae 0x1f2207
incl %r14d
jmp 0x1f220e
movq 0x30(%rbx), %r15
xorl %r14d, %r14d
incq %r13
cmpq 0x48(%rbx), %r13
jb 0x1f21b7
jmp 0x1f221c
xorl %r12d, %r12d
cmpq 0x78(%rbx), %r12
jne 0x1f23c4
movq 0x60(%rbx), %rdi
callq 0xef298
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 0x1f4972
movl 0x14(%rbx), %esi
movl 0x18(%rbx), %edx
movq 0x78(%rbx), %rcx
movq 0x10(%rsp), %r15
movq %r15, %rdi
callq 0x1f5d68
movq 0x148(%rbx), %rdi
movq 0x78(%rbx), %rsi
movq 0x60(%rbx), %rdx
movl 0x68(%rbx), %ecx
movl (%rbx), %r9d
leaq 0x290e(%rip), %rax      # 0x1f4b96
movq %r15, %r8
pushq 0x140(%rbx)
pushq %rbx
pushq %rax
pushq %r14
callq 0x1ee49b
addq $0x20, %rsp
cmpb $0x0, 0xf(%rsp)
je 0x1f2377
movq 0x78(%rbx), %rax
testq %rax, %rax
je 0x1f22e5
movq 0x60(%rbx), %rdx
movl 0x68(%rbx), %ecx
movq 0x148(%rbx), %r8
movl (%rbx), %r10d
xorl %r11d, %r11d
leaq 0x1cdc83(%rip), %rdi    # 0x3bff50
movl $0x6b9, %esi            # imm = 0x6B9
xorl %r9d, %r9d
pushq %r10
pushq %r11
pushq %r11
pushq %rax
callq 0x2068a9
addq $0x20, %rsp
movq %rbx, %rdi
callq 0x1f4c33
movq 0x78(%rbx), %rax
testq %rax, %rax
je 0x1f237f
movq 0x60(%rbx), %rdx
movl 0x68(%rbx), %ecx
movq 0x148(%rbx), %r8
xorl %r10d, %r10d
leaq 0x1cdc3e(%rip), %rdi    # 0x3bff50
movl $0x6c9, %esi            # imm = 0x6C9
xorl %r9d, %r9d
pushq $0x0
pushq %r10
pushq %r10
pushq %rax
callq 0x2068a9
addq $0x20, %rsp
cmpq $0x0, 0x78(%rbx)
je 0x1f237f
xorl %r14d, %r14d
movq 0x148(%rbx), %rdi
callq 0x205ed1
movq 0x148(%rbx), %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x206063
movq 0x98(%rbx), %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x1f4f82
movl (%r15,%rax,4), %esi
cmpq %rsi, %r14
jne 0x1f23b7
incq %r14
cmpq 0x78(%rbx), %r14
jb 0x1f2334
jmp 0x1f237f
movq %rbx, %rdi
callq 0x1f4c33
movq 0x148(%rbx), %rdi
xorl %esi, %esi
callq 0x205e63
movq $0x0, 0x148(%rbx)
movq %rbx, %rdi
callq 0x1f4edb
movq %rbx, %rax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x78e9b
movq %r14, %rdi
callq 0x78e3b
callq 0x78e62
callq 0x78e02