// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/mgth/mg_compute_gene_prediction.c
// Function: merge_array
static void merge_array(RegionStruct **regionmatrix,
                        GtArray * real_from_ar,
                        GtArray * real_to_ar,
                        GtArray * real_fromtmp,
                        GtArray * real_totmp,
                        GtUword real_index,
                        GtUword tmp_index,
                        short real_frame, unsigned short row_index)
{
  GtUword real_from,
    real_to,
    tmp_from,
    tmp_to;

  /* Fall 1: Eintraege im GtArray des realen Frames sind abgearbeitet,
     Eintraege im tmp-Array noch nicht */
  if (!(real_index < gt_array_size(regionmatrix[real_frame][0].from))
      && tmp_index < gt_array_size(real_fromtmp))
  {
    /* Bereichsgrenzen des Realtmp-Arrays - from/to-Werte */
    real_from = *(GtUword *) gt_array_get(real_fromtmp, tmp_index);
    real_to = *(GtUword *) gt_array_get(real_totmp, tmp_index);

    /* solange sich noch Eintraege im realtmp-Array befinden */
    while (tmp_index < gt_array_size(real_fromtmp))
    {
      /* hinzufuegen der Bereichsgrenzen */
      gt_array_add(real_from_ar, real_from);
      gt_array_add(real_to_ar, real_to);

      tmp_index++;

      /* nur wenn noch weitere Eintraege vorhanden sind, werden die
         naechsten Bereichsgrenzen ausgelesen */
      if (tmp_index < gt_array_size(real_fromtmp))
      {
        real_from = *(GtUword *) gt_array_get(real_fromtmp, tmp_index);
        real_to = *(GtUword *) gt_array_get(real_totmp, tmp_index);
      }
    }
  }
  /* Fall 2: Eintraege im GtArray des realen Frames sind noch nicht
     abgearbeitet, Eintraege im tmp-Array abgearbeitet */
  else if (!(tmp_index < gt_array_size(real_fromtmp))
           && real_index < gt_array_size(regionmatrix[real_frame][0].from))
  {
    /* Bereichsgrenzen des Real-Arrays - from/to-Werte */
    tmp_from =
      *(GtUword *) gt_array_get(regionmatrix[real_frame][0].from,
                                   real_index);
    tmp_to =
      *(GtUword *) gt_array_get(regionmatrix[real_frame][0].to,
                                   real_index);

    /* solange sich noch Eintraege im real-Array befinden */
    while (real_index < gt_array_size(regionmatrix[real_frame][0].from))
    {
      /* hinzufuegen der Bereichsgrenzen */
      gt_array_add(real_from_ar, tmp_from);
      gt_array_add(real_to_ar, tmp_to);

      real_index++;

      /* nur wenn noch weitere Eintraege vorhanden sind, werden die
         naechsten Bereichsgrenzen ausgelesen */
      if (real_index < gt_array_size(regionmatrix[real_frame][0].from))
      {
        tmp_from =
          *(GtUword *) gt_array_get(regionmatrix[real_frame][0].from,
                                       real_index);
        tmp_to =
          *(GtUword *) gt_array_get(regionmatrix[real_frame][0].to,
                                       real_index);
      }
    }
  }
  /* Fall 3: Es sind noch Eintraege in beiden GtArrays vorhanden */
  else if ((tmp_index < gt_array_size(real_fromtmp))
           && real_index < gt_array_size(regionmatrix[real_frame][0].from))
  {
    /* Bereichsgrenzen des Realtmp- und des real-Arrays - from/to-Werte */
    tmp_from =
      *(GtUword *) gt_array_get(regionmatrix[real_frame][0].from,
                                   real_index);
    tmp_to =
      *(GtUword *) gt_array_get(regionmatrix[real_frame][0].to,
                                   real_index);
    real_from = *(GtUword *) gt_array_get(real_fromtmp, tmp_index);
    real_to = *(GtUword *) gt_array_get(real_totmp, tmp_index);

    /* Fall: realtmp-Abschnitt liegt vor dem real_frame Abschnitt */
    if (real_from < tmp_from)
    {
      /* solange es noch Eintraege gibt, die vor dem real_frame-Abschnitt
         liegen... */
      while (tmp_index < gt_array_size(real_fromtmp) && real_from < tmp_from)
      {
        /* ... werden die bereichsgrenzen Eingetragen... */
        gt_array_add(real_from_ar, real_from);
        gt_array_add(real_to_ar, real_to);

        tmp_index++;

        /* und der naechste realtmp-Eintrag eingelesen */
        if (tmp_index < gt_array_size(real_fromtmp))
        {
          real_from =
            *(GtUword *) gt_array_get(real_fromtmp, tmp_index);
          real_to = *(GtUword *) gt_array_get(real_totmp, tmp_index);
        }
      }
      /* rekursiver Aufruf der Sortierfunktion unter Beruecksichtigung der
         neu Eingetragenen Abschnitte */
      merge_array(regionmatrix,
                  real_from_ar,
                  real_to_ar,
                  real_fromtmp,
                  real_totmp,
                  real_index, tmp_index, real_frame, row_index);
    }
    /* real_frame- vor dem realtmp-Abschnitt */
    else if (tmp_from < real_from)
    {
      /* solange es noch Eintraege gibt, die vor dem realtmp-Abschnitt
         liegen... */
      while (real_index < gt_array_size(regionmatrix[real_frame][0].from)
             && tmp_from < real_from)
      {
        /* ... werden die bereichsgrenzen Eingetragen... */
        gt_array_add(real_from_ar, tmp_from);
        gt_array_add(real_to_ar, tmp_to);

        real_index++;

        /* und der naechste real_frame-Eintrag eingelesen */
        if (real_index < gt_array_size(regionmatrix[real_frame][0].from))
        {
          tmp_from =
            *(GtUword *) gt_array_get(regionmatrix[real_frame][0].from,
                                         real_index);
          tmp_to =
            *(GtUword *) gt_array_get(regionmatrix[real_frame][0].to,
                                         real_index);
        }
      }
      /* rekursiver Aufruf der Sortierfunktion unter Beruecksichtigung der
         neu Eingetragenen Abschnitte */
      merge_array(regionmatrix,
                  real_from_ar,
                  real_to_ar,
                  real_fromtmp,
                  real_totmp,
                  real_index, tmp_index, real_frame, row_index);
    }
  }
}

// Assembly:
subq $0xe8, %rsp
movw 0x100(%rsp), %ax
movw 0xf8(%rsp), %ax
movq 0xf0(%rsp), %rax
movq %rdi, 0xe0(%rsp)
movq %rsi, 0xd8(%rsp)
movq %rdx, 0xd0(%rsp)
movq %rcx, 0xc8(%rsp)
movq %r8, 0xc0(%rsp)
movq %r9, 0xb8(%rsp)
movq 0xb8(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x90(%rsp), %rax
cmpq %rcx, %rax
jb 0x4edf2b
movq 0xf0(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0xc8(%rsp), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x88(%rsp), %rax
cmpq %rcx, %rax
jae 0x4edf2b
movq 0xc8(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xb0(%rsp)
movq 0xc0(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xa8(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0xc8(%rsp), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x80(%rsp), %rax
cmpq %rcx, %rax
jae 0x4edf26
movq 0xd8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
movq 0xd0(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
movq 0xf0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf0(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, 0x78(%rsp)
movq 0xc8(%rsp), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x78(%rsp), %rax
cmpq %rcx, %rax
jae 0x4edf21
movq 0xc8(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xb0(%rsp)
movq 0xc0(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xa8(%rsp)
jmp 0x4ede41
jmp 0x4ee55a
movq 0xf0(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0xc8(%rsp), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x70(%rsp), %rax
cmpq %rcx, %rax
jb 0x4ee117
movq 0xb8(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x68(%rsp), %rax
cmpq %rcx, %rax
jae 0x4ee117
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
movq 0xb8(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xa0(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rdi
movq 0xb8(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0x98(%rsp)
movq 0xb8(%rsp), %rax
movq %rax, 0x60(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x60(%rsp), %rax
cmpq %rcx, %rax
jae 0x4ee112
movq 0xd8(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
movq 0xd0(%rsp), %rdi
leaq 0x98(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
movq 0xb8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xb8(%rsp)
movq 0xb8(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x58(%rsp), %rax
cmpq %rcx, %rax
jae 0x4ee10d
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
movq 0xb8(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xa0(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rdi
movq 0xb8(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0x98(%rsp)
jmp 0x4edff2
jmp 0x4ee558
movq 0xf0(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0xc8(%rsp), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x50(%rsp), %rax
cmpq %rcx, %rax
jae 0x4ee556
movq 0xb8(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x48(%rsp), %rax
cmpq %rcx, %rax
jae 0x4ee556
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
movq 0xb8(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xa0(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rdi
movq 0xb8(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0x98(%rsp)
movq 0xc8(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xb0(%rsp)
movq 0xc0(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xa8(%rsp)
movq 0xb0(%rsp), %rax
cmpq 0xa0(%rsp), %rax
jae 0x4ee39a
jmp 0x4ee236
movq 0xf0(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0xc8(%rsp), %rdi
callq 0x81370
movq 0x38(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, 0x47(%rsp)
jae 0x4ee27a
movq 0xb0(%rsp), %rax
cmpq 0xa0(%rsp), %rax
setb %al
movb %al, 0x47(%rsp)
movb 0x47(%rsp), %al
testb $0x1, %al
jne 0x4ee287
jmp 0x4ee33b
movq 0xd8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
movq 0xd0(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
movq 0xf0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf0(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0xc8(%rsp), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x30(%rsp), %rax
cmpq %rcx, %rax
jae 0x4ee336
movq 0xc8(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xb0(%rsp)
movq 0xc0(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xa8(%rsp)
jmp 0x4ee236
movq 0xe0(%rsp), %rdi
movq 0xd8(%rsp), %rsi
movq 0xd0(%rsp), %rdx
movq 0xc8(%rsp), %rcx
movq 0xc0(%rsp), %r8
movq 0xb8(%rsp), %r9
movq 0xf0(%rsp), %r10
movw 0xf8(%rsp), %ax
movq %r10, (%rsp)
cwtl
movl %eax, 0x8(%rsp)
movzwl 0x100(%rsp), %eax
movl %eax, 0x10(%rsp)
callq 0x4edd40
jmp 0x4ee554
movq 0xa0(%rsp), %rax
cmpq 0xb0(%rsp), %rax
jae 0x4ee552
jmp 0x4ee3b2
movq 0xb8(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
callq 0x81370
movq 0x20(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, 0x2f(%rsp)
jae 0x4ee406
movq 0xa0(%rsp), %rax
cmpq 0xb0(%rsp), %rax
setb %al
movb %al, 0x2f(%rsp)
movb 0x2f(%rsp), %al
testb $0x1, %al
jne 0x4ee413
jmp 0x4ee4f8
movq 0xd8(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
movq 0xd0(%rsp), %rdi
leaq 0x98(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
movq 0xb8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xb8(%rsp)
movq 0xb8(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x18(%rsp), %rax
cmpq %rcx, %rax
jae 0x4ee4f3
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
movq 0xb8(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0xa0(%rsp)
movq 0xe0(%rsp), %rax
movswq 0xf8(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rdi
movq 0xb8(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0x98(%rsp)
jmp 0x4ee3b2
movq 0xe0(%rsp), %rdi
movq 0xd8(%rsp), %rsi
movq 0xd0(%rsp), %rdx
movq 0xc8(%rsp), %rcx
movq 0xc0(%rsp), %r8
movq 0xb8(%rsp), %r9
movq 0xf0(%rsp), %r10
movw 0xf8(%rsp), %ax
movq %r10, (%rsp)
cwtl
movl %eax, 0x8(%rsp)
movzwl 0x100(%rsp), %eax
movl %eax, 0x10(%rsp)
callq 0x4edd40
jmp 0x4ee554
jmp 0x4ee556
jmp 0x4ee558
jmp 0x4ee55a
addq $0xe8, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)