// File: /workspace/github_c_makefile_star2_O3/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 0xb3379
movq %r9, %r15
movq %rcx, %r12
movq %rdx, %r13
movq %rsi, %rbp
movq %rdi, %r14
movq %r8, 0x8(%rsp)
cmpw $0x0, 0xe8(%rbx)
jle 0xb3316
leaq 0x6f340(%rip), %rdi     # 0x122651
callq 0x8510
movq %r13, %rsi
movq %r12, %rcx
movq %rbx, %r8
callq 0xb3441
testl %eax, %eax
je 0xb33a1
addq $0xea, %rbx
leaq 0x3b0ba(%rip), %rsi     # 0xee3f0
leaq 0x6e60b(%rip), %rdx     # 0x121948
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x30af0
leaq 0x3acde(%rip), %rsi     # 0xee034
leaq 0x6e611(%rip), %rdx     # 0x12196e
movq %rbx, %rdi
movl $0x124, %ecx            # imm = 0x124
movq %r14, %r8
xorl %eax, %eax
callq 0x30af0
movl $0x1, %ebp
jmp 0xb342d
movl $0x0, 0x10(%rbx)
xorl %ebp, %ebp
cmpw $0x0, 0xe8(%rbx)
jle 0xb342d
leaq 0x6f2de(%rip), %rdi     # 0x122675
callq 0x8510
jmp 0xb342d
cmpw $0x1, 0xc(%r13)
jne 0xb340c
movq %r14, %rdi
movq %rbp, %rsi
movq %r13, %rdx
movq %r15, %rcx
movq %r12, %r8
movq %rbx, %r9
callq 0xb3e95
cmpl $0x1, %eax
movq 0x8(%rsp), %rax
jne 0xb341b
addq $0xea, %rbx
leaq 0x3b018(%rip), %rsi     # 0xee3f0
leaq 0x6e59d(%rip), %rdx     # 0x12197c
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x30af0
leaq 0x3ac3c(%rip), %rsi     # 0xee034
leaq 0x6e56f(%rip), %rdx     # 0x12196e
movq %rbx, %rdi
movl $0x12c, %ecx            # imm = 0x12C
jmp 0xb3365
movl $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