// File: /workspace/github_c_makefile_star2_O3/PoulinV[P]AxiCLASS/build/../source/fourier.c
// Function: fourier_free
int fourier_free(
                 struct fourier *pfo
                 ) {
  int index_pk;

  if ((pfo->has_pk_matter == _TRUE_) || (pfo->method > nl_none)) {

    free(pfo->k);
    free(pfo->ln_k);

    for (index_pk=0; index_pk<pfo->pk_size; index_pk++) {
      free(pfo->ln_pk_ic_l[index_pk]);
      free(pfo->ln_pk_l[index_pk]);
      free(pfo->ln_pk_l_extra[index_pk]);
      if (pfo->ln_tau_size>1) {
        free(pfo->ddln_pk_ic_l[index_pk]);
        free(pfo->ddln_pk_l[index_pk]);
        free(pfo->ddln_pk_l_extra[index_pk]);
      }
    }
    free(pfo->ln_pk_ic_l);
    free(pfo->ln_pk_l);
    free(pfo->ln_pk_l_extra);

    if (pfo->has_pk_analytic_nowiggle == _TRUE_) {
      free(pfo->ln_pk_l_an_extra);
      free(pfo->ddln_pk_l_an_extra);
    }

    free (pfo->sigma8);

    if (pfo->ln_tau_size>1) {
      free(pfo->ddln_pk_ic_l);
      free(pfo->ddln_pk_l);
      free(pfo->ddln_pk_l_extra);
      free(pfo->ln_tau);
    }

    free(pfo->is_non_zero);
  }

  if (pfo->method > nl_none) {

    free(pfo->tau);
    for (index_pk=0;index_pk<pfo->pk_size;index_pk++){
      free(pfo->nl_corr_density[index_pk]);
      free(pfo->k_nl[index_pk]);
      free(pfo->ln_pk_nl[index_pk]);
      if (pfo->ln_tau_size > 1)
        free(pfo->ddln_pk_nl[index_pk]);
    }
    free(pfo->nl_corr_density);
    free(pfo->k_nl);
    free(pfo->ln_pk_nl);
    if (pfo->ln_tau_size > 1)
      free(pfo->ddln_pk_nl);
  }

  if (pfo->has_pk_eq == _TRUE_) {
    free(pfo->pk_eq_tau);
    free(pfo->pk_eq_w_and_Omega);
    free(pfo->pk_eq_ddw_and_ddOmega);
  }

  if (pfo->has_pk_numerical_nowiggle) {
    free(pfo->ln_pk_l_nw_extra);
    if (pfo->ln_tau_size > 1)
      free(pfo->ddln_pk_l_nw_extra);
  }

  pfo->is_allocated = _FALSE_;
  return _SUCCESS_;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpw $0x1, 0x68(%rdi)
je 0xa3195
cmpl $0x0, (%rbx)
je 0xa3365
movq 0x78(%rbx), %rdi
callq 0x8410
movq 0x80(%rbx), %rdi
callq 0x8410
cmpl $0x0, 0x64(%rbx)
jle 0xa3228
xorl %r14d, %r14d
movq 0x98(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
movq 0xa8(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
movq 0x108(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
cmpl $0x2, 0x90(%rbx)
jl 0xa321c
movq 0xa0(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
movq 0xb0(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
movq 0x110(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
incq %r14
movslq 0x64(%rbx), %rax
cmpq %rax, %r14
jl 0xa31b3
movq 0x98(%rbx), %rdi
callq 0x8410
movq 0xa8(%rbx), %rdi
callq 0x8410
movq 0x108(%rbx), %rdi
callq 0x8410
cmpw $0x1, 0x38(%rbx)
jne 0xa326b
movq 0x118(%rbx), %rdi
callq 0x8410
movq 0x120(%rbx), %rdi
callq 0x8410
movq 0xc8(%rbx), %rdi
callq 0x8410
cmpl $0x2, 0x90(%rbx)
jl 0xa32b0
movq 0xa0(%rbx), %rdi
callq 0x8410
movq 0xb0(%rbx), %rdi
callq 0x8410
movq 0x110(%rbx), %rdi
callq 0x8410
movq 0x88(%rbx), %rdi
callq 0x8410
movq 0x48(%rbx), %rdi
callq 0x8410
cmpl $0x0, (%rbx)
je 0xa3365
movq 0x148(%rbx), %rdi
callq 0x8410
cmpl $0x0, 0x64(%rbx)
jle 0xa332c
xorl %r14d, %r14d
movq 0x150(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
movq 0x158(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
movq 0xb8(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
cmpl $0x2, 0x90(%rbx)
jl 0xa3320
movq 0xc0(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0x8410
incq %r14
movslq 0x64(%rbx), %rax
cmpq %rax, %r14
jl 0xa32d7
movq 0x150(%rbx), %rdi
callq 0x8410
movq 0x158(%rbx), %rdi
callq 0x8410
movq 0xb8(%rbx), %rdi
callq 0x8410
cmpl $0x2, 0x90(%rbx)
jl 0xa3365
movq 0xc0(%rbx), %rdi
callq 0x8410
cmpw $0x1, 0x28(%rbx)
jne 0xa3390
movq 0x178(%rbx), %rdi
callq 0x8410
movq 0x180(%rbx), %rdi
callq 0x8410
movq 0x188(%rbx), %rdi
callq 0x8410
cmpw $0x0, 0x3a(%rbx)
je 0xa33b8
movq 0x130(%rbx), %rdi
callq 0x8410
cmpl $0x2, 0x90(%rbx)
jl 0xa33b8
movq 0x138(%rbx), %rdi
callq 0x8410
movw $0x0, 0x992(%rbx)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq