// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/core/dlist.c
// Function: gt_dlist_add
void gt_dlist_add(GtDlist *dlist, void *data)
{
  GtDlistelem *oldelem, *newelem;
  gt_assert(dlist); /* data can be null */
  newelem = gt_calloc(1, sizeof (GtDlistelem));
  newelem->data = data;

  if (!dlist->first) {
    gt_assert(!dlist->last);
    dlist->first = newelem;
    dlist->last = newelem;
  }
  else {
    gt_assert(dlist->first && dlist->last);
    if (dlist->cmp_func) {
      /* compare function defined -> find place to add new element */
      if (dlist->cmp_func(data, dlist->first->data, dlist->data) < 0) {
        /* the new element is smaller then the first element */
        gt_assert(!dlist->first->previous);
        dlist->first->previous = newelem;
        newelem->next = dlist->first;
        dlist->first = newelem;
      }
      else if (dlist->cmp_func(dlist->last->data, data, dlist->data) <= 0) {
        /* the new element is larger or equal then the last element */
        gt_assert(!dlist->last->next);
        dlist->last->next = newelem;
        newelem->previous = dlist->last;
        dlist->last = newelem;
      }
      else {
        /* traverse list backwards to find a place to insert the new element */
        oldelem = dlist->last->previous;
        gt_assert(oldelem);
        while (oldelem) {
          if (dlist->cmp_func(oldelem->data, data, dlist->data) <= 0) {
            /* position found */
            gt_assert(oldelem->next);
            newelem->next = oldelem->next;
            newelem->previous = oldelem;
            oldelem->next->previous = newelem;
            oldelem->next = newelem;
            break;
          }
          oldelem = oldelem->previous;
        }
        gt_assert(oldelem); /* a position has been found */
      }
    }
    else {
      /* no compare function defined -> add new element to the end */
      gt_assert(!dlist->last->next);
      dlist->last->next = newelem;
      newelem->previous = dlist->last;
      dlist->last = newelem;
    }
  }
  dlist->size++;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
cmpq $0x0, 0x20(%rsp)
jne 0x7dafe
movq 0x13650b(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xe058f(%rip), %rsi     # 0x15e066
leaq 0xefdb9(%rip), %rdx     # 0x16d897
leaq 0xefde3(%rip), %rcx     # 0x16d8c8
leaq 0xefd9a(%rip), %r8      # 0x16d886
movl $0x66, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x7db00
movl $0x1, %edi
movl $0x18, %esi
leaq 0xefd75(%rip), %rdx     # 0x16d886
movl $0x67, %ecx
callq 0xd5b0
movq %rax, 0x8(%rsp)
movq 0x18(%rsp), %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x20(%rsp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x7dba3
jmp 0x7db3c
movq 0x20(%rsp), %rax
cmpq $0x0, 0x10(%rax)
je 0x7db80
movq 0x136489(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xe050d(%rip), %rsi     # 0x15e066
leaq 0xefd75(%rip), %rdx     # 0x16d8d5
leaq 0xefd61(%rip), %rcx     # 0x16d8c8
leaq 0xefd18(%rip), %r8      # 0x16d886
movl $0x6b, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x7db82
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x10(%rax)
jmp 0x7df53
jmp 0x7dba5
movq 0x20(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x7dbbd
movq 0x20(%rsp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x7dbf5
movq 0x136414(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xe0498(%rip), %rsi     # 0x15e066
leaq 0xefd0d(%rip), %rdx     # 0x16d8e2
leaq 0xefcec(%rip), %rcx     # 0x16d8c8
leaq 0xefca3(%rip), %r8      # 0x16d886
movl $0x70, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x7dbf7
movq 0x20(%rsp), %rax
cmpq $0x0, (%rax)
je 0x7ded4
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rcx
movq 0x8(%rcx), %rcx
movq 0x10(%rcx), %rsi
movq 0x20(%rsp), %rcx
movq 0x18(%rcx), %rdx
callq *%rax
cmpl $0x0, %eax
jge 0x7dcb5
jmp 0x7dc36
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
cmpq $0x0, (%rax)
je 0x7dc7d
movq 0x13638c(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xe0410(%rip), %rsi     # 0x15e066
leaq 0xefca1(%rip), %rdx     # 0x16d8fe
leaq 0xefc64(%rip), %rcx     # 0x16d8c8
leaq 0xefc1b(%rip), %r8      # 0x16d886
movl $0x75, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x7dc7f
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rcx, (%rax)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x8(%rax)
jmp 0x7ded2
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq 0x20(%rsp), %rcx
movq 0x10(%rcx), %rcx
movq 0x10(%rcx), %rdi
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rcx
movq 0x18(%rcx), %rdx
callq *%rax
cmpl $0x0, %eax
jg 0x7dd65
jmp 0x7dce5
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
cmpq $0x0, 0x8(%rax)
je 0x7dd2d
movq 0x1362dc(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xe0360(%rip), %rsi     # 0x15e066
leaq 0xefc09(%rip), %rdx     # 0x16d916
leaq 0xefbb4(%rip), %rcx     # 0x16d8c8
leaq 0xefb6b(%rip), %r8      # 0x16d886
movl $0x7c, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x7dd2f
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x8(%rax)
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rcx
movq 0x8(%rsp), %rax
movq %rcx, (%rax)
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x10(%rax)
jmp 0x7ded0
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
movq %rax, 0x10(%rsp)
cmpq $0x0, 0x10(%rsp)
jne 0x7ddb6
movq 0x136253(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xe02d7(%rip), %rsi     # 0x15e066
leaq 0xefb93(%rip), %rdx     # 0x16d929
leaq 0xefb2b(%rip), %rcx     # 0x16d8c8
leaq 0xefae2(%rip), %r8      # 0x16d886
movl $0x84, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x7ddb8
jmp 0x7ddba
cmpq $0x0, 0x10(%rsp)
je 0x7de8a
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rcx
movq 0x10(%rcx), %rdi
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rcx
movq 0x18(%rcx), %rdx
callq *%rax
cmpl $0x0, %eax
jg 0x7de78
jmp 0x7ddf2
movq 0x10(%rsp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x7de36
movq 0x1361d3(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xe0257(%rip), %rsi     # 0x15e066
leaq 0xefb1b(%rip), %rdx     # 0x16d931
leaq 0xefaab(%rip), %rcx     # 0x16d8c8
leaq 0xefa62(%rip), %r8      # 0x16d886
movl $0x88, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x7de38
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x10(%rsp), %rcx
movq 0x8(%rsp), %rax
movq %rcx, (%rax)
movq 0x8(%rsp), %rcx
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rax
movq %rcx, (%rax)
movq 0x8(%rsp), %rcx
movq 0x10(%rsp), %rax
movq %rcx, 0x8(%rax)
jmp 0x7de8a
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x10(%rsp)
jmp 0x7ddba
jmp 0x7de8c
cmpq $0x0, 0x10(%rsp)
jne 0x7decc
movq 0x13613d(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xe01c1(%rip), %rsi     # 0x15e066
leaq 0xefa7d(%rip), %rdx     # 0x16d929
leaq 0xefa15(%rip), %rcx     # 0x16d8c8
leaq 0xef9cc(%rip), %r8      # 0x16d886
movl $0x91, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x7dece
jmp 0x7ded0
jmp 0x7ded2
jmp 0x7df51
jmp 0x7ded6
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
cmpq $0x0, 0x8(%rax)
je 0x7df1e
movq 0x1360eb(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xe016f(%rip), %rsi     # 0x15e066
leaq 0xefa18(%rip), %rdx     # 0x16d916
leaq 0xef9c3(%rip), %rcx     # 0x16d8c8
leaq 0xef97a(%rip), %r8      # 0x16d886
movl $0x96, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x7df20
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x8(%rax)
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rcx
movq 0x8(%rsp), %rax
movq %rcx, (%rax)
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x10(%rax)
jmp 0x7df53
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
addq $0x28, %rsp
retq
nopl (%rax)