// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/sfx-bentsedg.c
// Function: quickmedian
static GtMedianElem *quickmedian (bool fwd,bool complement,
                                  GtMedianElem *arr,GtUword width)
{
  GtMedianElem *low, *high, *median, *middle, *ll, *hh;
  GtCommonunits commonunits;

  gt_assert(width > 0);
  low = arr;
  high = arr + width - 1;
  median = low + GT_DIV2(width);
  for (;;)
  {
    if (high <= low)                   /* One element only */
    {
      return median;
    }
    if (high == low + 1)
    {                                  /* Two elements only */
      if (GT_MedianElemGREATER(low,high))
      {
        GT_MedianElemSWAP (low, high);
      }
      return median;
    }

    /* Find median of low, middle and high items; swap into position low */
    middle = low + GT_DIV2(high - low + 1);
    if (GT_MedianElemGREATER(middle,high))
    {
      GT_MedianElemSWAP (middle, high);
    }
    if (GT_MedianElemGREATER(low,high))
    {
      GT_MedianElemSWAP (low, high);
    }
    if (GT_MedianElemGREATER(middle,low))
    {
      GT_MedianElemSWAP (middle, low);
    }
    /* Swap low item (now in position middle) into position (low+1) */
    GT_MedianElemSWAP (middle, low + 1);

    /* Nibble from each end towards middle, swapping items when stuck */
    ll = low + 1;
    hh = high;
    for (;;)
    {
      do
      {
        ll++;
      } while (GT_MedianElemGREATER(low,ll));
      do
      {
        hh--;
      } while  (GT_MedianElemGREATER(hh,low));
      if (hh < ll)
      {
        break;
      }
      GT_MedianElemSWAP (ll, hh);
    }

    /* Swap middle item (in position low) back into correct position */
    GT_MedianElemSWAP (low, hh);

    /* Re-set active partition */
    if (hh <= median)
    {
      low = ll;
    }
    if (hh >= median)
    {
      high = hh - 1;
    }
  }
}

// Assembly:
subq $0x148, %rsp            # imm = 0x148
movb %sil, %al
movb %dil, %sil
andb $0x1, %sil
movb %sil, 0x13f(%rsp)
andb $0x1, %al
movb %al, 0x13e(%rsp)
movq %rdx, 0x130(%rsp)
movq %rcx, 0x128(%rsp)
cmpq $0x0, 0x128(%rsp)
ja 0x2b72d5
movq 0x384cfc(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x25ed65(%rip), %rsi    # 0x516013
leaq 0x300517(%rip), %rdx    # 0x5b77cc
leaq 0x2d15d1(%rip), %rcx    # 0x58888d
leaq 0x2d12ad(%rip), %r8     # 0x588570
movl $0x23a, %r9d            # imm = 0x23A
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2b72d7
movq 0x130(%rsp), %rax
movq %rax, 0x120(%rsp)
movq 0x130(%rsp), %rax
movq 0x128(%rsp), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
addq $-0x20, %rax
movq %rax, 0x118(%rsp)
movq 0x120(%rsp), %rax
movq 0x128(%rsp), %rcx
shrq %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, 0x110(%rsp)
movq 0x118(%rsp), %rax
cmpq 0x120(%rsp), %rax
ja 0x2b7353
movq 0x110(%rsp), %rax
movq %rax, 0x140(%rsp)
jmp 0x2b79e3
movq 0x118(%rsp), %rax
movq 0x120(%rsp), %rcx
addq $0x20, %rcx
cmpq %rcx, %rax
jne 0x2b7463
movb 0x13f(%rsp), %sil
movb 0x13e(%rsp), %al
movq 0x120(%rsp), %rcx
movq 0x118(%rsp), %r8
leaq 0xe8(%rsp), %rdx
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0xb4420
cmpl $0x0, %eax
jle 0x2b744e
movq 0x120(%rsp), %rax
movq (%rax), %rcx
movq %rcx, 0xc8(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0xd0(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0xd8(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0xe0(%rsp)
movq 0x120(%rsp), %rax
movq 0x118(%rsp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x118(%rsp), %rax
movq 0xc8(%rsp), %rcx
movq %rcx, (%rax)
movq 0xd0(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq 0xd8(%rsp), %rcx
movq %rcx, 0x10(%rax)
movq 0xe0(%rsp), %rcx
movq %rcx, 0x18(%rax)
movq 0x110(%rsp), %rax
movq %rax, 0x140(%rsp)
jmp 0x2b79e3
movq 0x120(%rsp), %rax
movq 0x118(%rsp), %rcx
movq 0x120(%rsp), %rdx
subq %rdx, %rcx
sarq $0x5, %rcx
addq $0x1, %rcx
sarq %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, 0x108(%rsp)
movb 0x13f(%rsp), %sil
movb 0x13e(%rsp), %al
movq 0x108(%rsp), %rcx
movq 0x118(%rsp), %r8
leaq 0xe8(%rsp), %rdx
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0xb4420
cmpl $0x0, %eax
jle 0x2b7576
movq 0x108(%rsp), %rax
movq (%rax), %rcx
movq %rcx, 0xa8(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0xb0(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0xb8(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0xc0(%rsp)
movq 0x108(%rsp), %rax
movq 0x118(%rsp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x118(%rsp), %rax
movq 0xa8(%rsp), %rcx
movq %rcx, (%rax)
movq 0xb0(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq 0xb8(%rsp), %rcx
movq %rcx, 0x10(%rax)
movq 0xc0(%rsp), %rcx
movq %rcx, 0x18(%rax)
movb 0x13f(%rsp), %sil
movb 0x13e(%rsp), %al
movq 0x120(%rsp), %rcx
movq 0x118(%rsp), %r8
leaq 0xe8(%rsp), %rdx
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0xb4420
cmpl $0x0, %eax
jle 0x2b7654
movq 0x120(%rsp), %rax
movq (%rax), %rcx
movq %rcx, 0x88(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x90(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x98(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0xa0(%rsp)
movq 0x120(%rsp), %rax
movq 0x118(%rsp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x118(%rsp), %rax
movq 0x88(%rsp), %rcx
movq %rcx, (%rax)
movq 0x90(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq 0x98(%rsp), %rcx
movq %rcx, 0x10(%rax)
movq 0xa0(%rsp), %rcx
movq %rcx, 0x18(%rax)
movb 0x13f(%rsp), %sil
movb 0x13e(%rsp), %al
movq 0x108(%rsp), %rcx
movq 0x120(%rsp), %r8
leaq 0xe8(%rsp), %rdx
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0xb4420
cmpl $0x0, %eax
jle 0x2b7720
movq 0x108(%rsp), %rax
movq (%rax), %rcx
movq %rcx, 0x68(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x70(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x78(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x80(%rsp)
movq 0x108(%rsp), %rax
movq 0x120(%rsp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x120(%rsp), %rax
movq 0x68(%rsp), %rcx
movq %rcx, (%rax)
movq 0x70(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq 0x78(%rsp), %rcx
movq %rcx, 0x10(%rax)
movq 0x80(%rsp), %rcx
movq %rcx, 0x18(%rax)
movq 0x108(%rsp), %rax
movq (%rax), %rcx
movq %rcx, 0x48(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x50(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x58(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x60(%rsp)
movq 0x108(%rsp), %rax
movq 0x120(%rsp), %rcx
movq 0x20(%rcx), %rdx
movq %rdx, (%rax)
movq 0x28(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x30(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x38(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x120(%rsp), %rax
movq 0x48(%rsp), %rcx
movq %rcx, 0x20(%rax)
movq 0x50(%rsp), %rcx
movq %rcx, 0x28(%rax)
movq 0x58(%rsp), %rcx
movq %rcx, 0x30(%rax)
movq 0x60(%rsp), %rcx
movq %rcx, 0x38(%rax)
movq 0x120(%rsp), %rax
addq $0x20, %rax
movq %rax, 0x100(%rsp)
movq 0x118(%rsp), %rax
movq %rax, 0xf8(%rsp)
jmp 0x2b77cc
movq 0x100(%rsp), %rax
addq $0x20, %rax
movq %rax, 0x100(%rsp)
movb 0x13f(%rsp), %sil
movb 0x13e(%rsp), %al
movq 0x120(%rsp), %rcx
movq 0x100(%rsp), %r8
leaq 0xe8(%rsp), %rdx
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0xb4420
cmpl $0x0, %eax
jg 0x2b77cc
jmp 0x2b7820
movq 0xf8(%rsp), %rax
addq $-0x20, %rax
movq %rax, 0xf8(%rsp)
movb 0x13f(%rsp), %sil
movb 0x13e(%rsp), %al
movq 0xf8(%rsp), %rcx
movq 0x120(%rsp), %r8
leaq 0xe8(%rsp), %rdx
andb $0x1, %sil
andb $0x1, %al
movzbl %sil, %edi
movzbl %al, %esi
callq 0xb4420
cmpl $0x0, %eax
jg 0x2b7820
movq 0xf8(%rsp), %rax
cmpq 0x100(%rsp), %rax
jae 0x2b7889
jmp 0x2b7912
movq 0x100(%rsp), %rax
movq (%rax), %rcx
movq %rcx, 0x28(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x30(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x38(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x100(%rsp), %rax
movq 0xf8(%rsp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0xf8(%rsp), %rax
movq 0x28(%rsp), %rcx
movq %rcx, (%rax)
movq 0x30(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq 0x38(%rsp), %rcx
movq %rcx, 0x10(%rax)
movq 0x40(%rsp), %rcx
movq %rcx, 0x18(%rax)
jmp 0x2b77ca
movq 0x120(%rsp), %rax
movq (%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x18(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x120(%rsp), %rax
movq 0xf8(%rsp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0xf8(%rsp), %rax
movq 0x8(%rsp), %rcx
movq %rcx, (%rax)
movq 0x10(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq 0x18(%rsp), %rcx
movq %rcx, 0x10(%rax)
movq 0x20(%rsp), %rcx
movq %rcx, 0x18(%rax)
movq 0xf8(%rsp), %rax
cmpq 0x110(%rsp), %rax
ja 0x2b79b8
movq 0x100(%rsp), %rax
movq %rax, 0x120(%rsp)
movq 0xf8(%rsp), %rax
cmpq 0x110(%rsp), %rax
jb 0x2b79de
movq 0xf8(%rsp), %rax
addq $-0x20, %rax
movq %rax, 0x118(%rsp)
jmp 0x2b732c
movq 0x140(%rsp), %rax
addq $0x148, %rsp            # imm = 0x148
retq
nopw %cs:(%rax,%rax)