// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/stat_visitor.c
// Function: compute_type_statistics
static void compute_type_statistics(GtFeatureNode *fn, GtStatVisitor *sv)
{
  GtRange range;
  gt_assert(fn && sv);
  if (gt_feature_node_has_type(fn, gt_ft_gene)) {
    sv->number_of_genes++;
    if (gt_feature_node_has_CDS(fn))
      sv->number_of_protein_coding_genes++;
    if (sv->gene_length_distribution) {
      range = gt_genome_node_get_range((GtGenomeNode*) fn);
      gt_disc_distri_add(sv->gene_length_distribution, gt_range_length(&range));
    }
    if (sv->gene_score_distribution && gt_feature_node_score_is_defined(fn)) {
      gt_disc_distri_add(sv->gene_score_distribution,
                         gt_feature_node_get_score(fn) * 100.0);
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_mRNA)) {
    sv->number_of_mRNAs++;
    if (gt_feature_node_has_CDS(fn))
      sv->number_of_protein_coding_mRNAs++;
  }
  else if (gt_feature_node_has_type(fn, gt_ft_exon)) {
    sv->number_of_exons++;
    if (sv->exon_length_distribution) {
      range = gt_genome_node_get_range((GtGenomeNode*) fn);
      gt_disc_distri_add(sv->exon_length_distribution,
                         gt_range_length(&range));
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_CDS)) {
    sv->number_of_CDSs++;
  }
  else if (gt_feature_node_has_type(fn, gt_ft_intron)) {
    gt_string_distri_add(sv->type_counts, gt_feature_node_get_type(fn));
    if (sv->intron_length_distribution) {
      range = gt_genome_node_get_range((GtGenomeNode*) fn);
      gt_disc_distri_add(sv->intron_length_distribution,
                         gt_range_length(&range));
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_LTR_retrotransposon)) {
    sv->number_of_LTR_retrotransposons++;
  } else {
    gt_string_distri_add(sv->type_counts, gt_feature_node_get_type(fn));
  }
}

// Assembly:
subq $0x88, %rsp
movq %rdi, 0x80(%rsp)
movq %rsi, 0x78(%rsp)
cmpq $0x0, 0x80(%rsp)
je 0x1e37a7
cmpq $0x0, 0x78(%rsp)
jne 0x1e37df
movq 0x4587f2(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x33285b(%rip), %rsi    # 0x516013
leaq 0x383d5c(%rip), %rdx    # 0x56751b
leaq 0x383d5e(%rip), %rcx    # 0x567524
leaq 0x383cf2(%rip), %r8     # 0x5674bf
movl $0x61, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x1e37e1
movq 0x80(%rsp), %rdi
leaq 0x3cf376(%rip), %rsi    # 0x5b2b66
callq 0x16d960
testb $0x1, %al
jne 0x1e37fe
jmp 0x1e390e
movq 0x78(%rsp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
movq 0x80(%rsp), %rdi
callq 0x16f170
testb $0x1, %al
jne 0x1e3822
jmp 0x1e3833
movq 0x78(%rsp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq 0x78(%rsp), %rax
cmpq $0x0, 0x70(%rax)
je 0x1e388f
movq 0x80(%rsp), %rdi
callq 0x171cc0
movq %rax, 0x58(%rsp)
movq %rdx, 0x60(%rsp)
movq 0x58(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x60(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rax
movq 0x70(%rax), %rax
movq %rax, 0x30(%rsp)
leaq 0x68(%rsp), %rdi
callq 0x107320
movq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0xa50a0
movq 0x78(%rsp), %rax
cmpq $0x0, 0x78(%rax)
je 0x1e3909
movq 0x80(%rsp), %rdi
callq 0x16d510
testb $0x1, %al
jne 0x1e38ae
jmp 0x1e3909
movq 0x78(%rsp), %rax
movq 0x78(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x80(%rsp), %rdi
callq 0x16df90
movq 0x28(%rsp), %rdi
cvtss2sd %xmm0, %xmm0
movsd 0x336f5e(%rip), %xmm1   # 0x51a838
mulsd %xmm1, %xmm0
movaps %xmm0, %xmm1
cvttsd2si %xmm1, %rsi
movq %rsi, %rcx
sarq $0x3f, %rcx
movsd 0x33547b(%rip), %xmm1   # 0x518d70
subsd %xmm1, %xmm0
cvttsd2si %xmm0, %rax
andq %rcx, %rax
orq %rax, %rsi
callq 0xa50a0
jmp 0x1e3b32
movq 0x80(%rsp), %rdi
leaq 0x369515(%rip), %rsi    # 0x54ce32
callq 0x16d960
testb $0x1, %al
jne 0x1e3928
jmp 0x1e3962
movq 0x78(%rsp), %rax
movq 0x30(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x30(%rax)
movq 0x80(%rsp), %rdi
callq 0x16f170
testb $0x1, %al
jne 0x1e394c
jmp 0x1e395d
movq 0x78(%rsp), %rax
movq 0x38(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x38(%rax)
jmp 0x1e3b30
movq 0x80(%rsp), %rdi
leaq 0x3837ab(%rip), %rsi    # 0x56711c
callq 0x16d960
testb $0x1, %al
jne 0x1e397c
jmp 0x1e39f4
movq 0x78(%rsp), %rax
movq 0x40(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x40(%rax)
movq 0x78(%rsp), %rax
cmpq $0x0, 0x80(%rax)
je 0x1e39ef
movq 0x80(%rsp), %rdi
callq 0x171cc0
movq %rax, 0x48(%rsp)
movq %rdx, 0x50(%rsp)
movq 0x48(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rax
movq 0x80(%rax), %rax
movq %rax, 0x20(%rsp)
leaq 0x68(%rsp), %rdi
callq 0x107320
movq 0x20(%rsp), %rdi
movq %rax, %rsi
callq 0xa50a0
jmp 0x1e3b2e
movq 0x80(%rsp), %rdi
leaq 0x3710b5(%rip), %rsi    # 0x554ab8
callq 0x16d960
testb $0x1, %al
jne 0x1e3a0e
jmp 0x1e3a24
movq 0x78(%rsp), %rax
movq 0x48(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x48(%rax)
jmp 0x1e3b2c
movq 0x80(%rsp), %rdi
leaq 0x3831ed(%rip), %rsi    # 0x566c20
callq 0x16d960
testb $0x1, %al
jne 0x1e3a41
jmp 0x1e3ad0
movq 0x78(%rsp), %rax
movq 0xa8(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x80(%rsp), %rdi
callq 0x16d430
movq 0x18(%rsp), %rdi
movq %rax, %rsi
callq 0x1201a0
movq 0x78(%rsp), %rax
cmpq $0x0, 0x90(%rax)
je 0x1e3ace
movq 0x80(%rsp), %rdi
callq 0x171cc0
movq %rax, 0x38(%rsp)
movq %rdx, 0x40(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rax
movq 0x90(%rax), %rax
movq %rax, 0x10(%rsp)
leaq 0x68(%rsp), %rdi
callq 0x107320
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0xa50a0
jmp 0x1e3b2a
movq 0x80(%rsp), %rdi
leaq 0x383a5d(%rip), %rsi    # 0x56753c
callq 0x16d960
testb $0x1, %al
jne 0x1e3aea
jmp 0x1e3afd
movq 0x78(%rsp), %rax
movq 0x50(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x50(%rax)
jmp 0x1e3b28
movq 0x78(%rsp), %rax
movq 0xa8(%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x80(%rsp), %rdi
callq 0x16d430
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x1201a0
jmp 0x1e3b2a
jmp 0x1e3b2c
jmp 0x1e3b2e
jmp 0x1e3b30
jmp 0x1e3b32
addq $0x88, %rsp
retq
nopw (%rax,%rax)