// File: /workspace/github_c_makefile_star2_O2/PoulinV[P]AxiCLASS/build/../source/harmonic.c
// Function: harmonic_init
int harmonic_init(
                  struct precision * ppr,
                  struct background * pba,
                  struct perturbations * ppt,
                  struct primordial * ppm,
                  struct fourier * pfo,
                  struct transfer * ptr,
                  struct harmonic * phr
                  ) {

  /** Summary: */

  /** - check that we really want to compute at least one spectrum */

  if (ppt->has_cls == _FALSE_) {
    phr->md_size = 0;
    if (phr->harmonic_verbose > 0)
      printf("No spectra requested. Spectra module skipped.\n");
    return _SUCCESS_;
  }
  else {
    if (phr->harmonic_verbose > 0)
      printf("Computing unlensed harmonic spectra\n");
  }

  /** - initialize indices and allocate some of the arrays in the
      harmonic structure */

  class_call(harmonic_indices(pba,ppt,ptr,ppm,phr),
             phr->error_message,
             phr->error_message);

  /** - deal with \f$ C_l\f$'s, if any */

  if (ppt->has_cls == _TRUE_) {

    class_call(harmonic_cls(ppr,pba,ppt,ptr,ppm,phr),
               phr->error_message,
               phr->error_message);

  }
  else {
    phr->ct_size=0;
  }

  /** - a pointer to the fourier structure is stored in the spectra
      structure. This odd, unusual and unelegant feature has been
      introduced in v2.8 in order to keep in use some deprecated
      functions harmonic_pk_...() that are now pointing at new
      function fourier_pk_...(). In the future, if the deprecated
      functions are removed, it will be possible to remove also this
      pointer. */

  phr->pfo = pfo;
  phr->is_allocated = _TRUE_;

  return _SUCCESS_;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x818, %rsp            # imm = 0x818
movq 0x850(%rsp), %rbx
cmpw $0x0, 0xc(%rdx)
je 0xad08e
movq %r9, %r15
movq %rcx, %r12
movq %rdx, %r13
movq %rsi, %rbp
movq %rdi, %r14
movq %r8, 0x8(%rsp)
cmpw $0x0, 0xe8(%rbx)
jle 0xad02d
leaq 0x6c4b9(%rip), %rdi     # 0x1194e1
callq 0x8540
movq %r13, %rsi
movq %r12, %rcx
movq %rbx, %r8
callq 0xad150
testl %eax, %eax
je 0xad0b3
addq $0xea, %rbx
leaq 0x383a3(%rip), %rsi     # 0xe53f0
leaq 0x6b784(%rip), %rdx     # 0x1187d8
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x37fc7(%rip), %rsi     # 0xe5034
leaq 0x6b78a(%rip), %rdx     # 0x1187fe
movq %rbx, %rdi
movl $0x124, %ecx            # imm = 0x124
movq %r14, %r8
xorl %eax, %eax
callq 0x2e014
pushq $0x1
popq %rbp
jmp 0xad13c
andl $0x0, 0x10(%rbx)
xorl %ebp, %ebp
cmpw $0x0, 0xe8(%rbx)
jle 0xad13c
leaq 0x6c45c(%rip), %rdi     # 0x119505
callq 0x8540
jmp 0xad13c
cmpw $0x1, 0xc(%r13)
jne 0xad11e
movq %r14, %rdi
movq %rbp, %rsi
movq %r13, %rdx
movq %r15, %rcx
movq %r12, %r8
movq %rbx, %r9
callq 0xadb7d
cmpl $0x1, %eax
movq 0x8(%rsp), %rax
jne 0xad12a
addq $0xea, %rbx
leaq 0x38306(%rip), %rsi     # 0xe53f0
leaq 0x6b71b(%rip), %rdx     # 0x11880c
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x37f2a(%rip), %rsi     # 0xe5034
leaq 0x6b6ed(%rip), %rdx     # 0x1187fe
movq %rbx, %rdi
movl $0x12c, %ecx            # imm = 0x12C
jmp 0xad07c
andl $0x0, 0x9c(%rbx)
movq 0x8(%rsp), %rax
movq %rax, 0xe0(%rbx)
movw $0x1, 0x8ea(%rbx)
xorl %ebp, %ebp
movl %ebp, %eax
addq $0x818, %rsp            # imm = 0x818
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq