// File: /workspace/github_c_makefile_star2_O0/PoulinV[P]AxiCLASS/build/../source/lensing.c
// Function: lensing_d4m2
int lensing_d4m2(
                 double * mu,
                 int num_mu,
                 int lmax,
                 double ** d4m2
                 ) {
  double ll;
  int index_mu, l;
  double *fac1, *fac2, *fac3, *fac4;
  ErrorMsg erreur;
  class_alloc(fac1,lmax*sizeof(double),erreur);
  class_alloc(fac2,lmax*sizeof(double),erreur);
  class_alloc(fac3,lmax*sizeof(double),erreur);
  class_alloc(fac4,lmax*sizeof(double),erreur);
  for (l=4;l<lmax;l++) {
    ll = (double) l;
    fac1[l] = sqrt((2*ll+3)*(2*ll+1)/((ll-3)*(ll+5)*(ll-1)*(ll+3))) * (ll+1.);
    fac2[l] = 8./(ll*(ll+1));
    fac3[l] = sqrt((2*ll+3)*(ll-4)*(ll+4)*(ll-2)*(ll+2)/((2*ll-1)*(ll-3)*(ll+5)*(ll-1)*(ll+3)))*(ll+1)/ll;
    fac4[l] = sqrt(2./(2*ll+3));
  }

  class_setup_parallel();
  for (index_mu=0;index_mu<num_mu;index_mu++) {
    class_run_parallel(=,
      int l;
      double declare_list_of_variables_inside_parallel_region(dlm1, dl, dlp1);
      d4m2[index_mu][0]=0;
      d4m2[index_mu][1]=0;
      d4m2[index_mu][2]=0;
      dlm1=0.; /*l=3*/
      d4m2[index_mu][3]=0;
      dl=sqrt(126.)*(1+mu[index_mu])*(1-mu[index_mu])*(1-mu[index_mu])*(1-mu[index_mu])/16.; /*l=4*/
      d4m2[index_mu][4] = dl * sqrt(2./9.);
      for (l=4;l<lmax;l++){
        /* sqrt((2l+1)/2)*d22 recurrence, supposed to be more stable */
        dlp1 = fac1[l]*(mu[index_mu]+fac2[l])*dl - fac3[l]*dlm1;
        d4m2[index_mu][l+1] = dlp1 * fac4[l];
        dlm1 = dl;
        dl = dlp1;
      }
      return _SUCCESS_;
    );
  }
  class_finish_parallel();
  free(fac1); free(fac2); free(fac3); free(fac4);
  return _SUCCESS_;
}

// Assembly:
subq $0x2978, %rsp           # imm = 0x2978
movq %rdi, 0x2968(%rsp)
movl %esi, 0x2964(%rsp)
movl %edx, 0x2960(%rsp)
movq %rcx, 0x2958(%rsp)
movslq 0x2960(%rsp), %rdi
shlq $0x3, %rdi
callq 0x8460
movq %rax, 0x2940(%rsp)
cmpq $0x0, 0x2940(%rsp)
jne 0x15d20a
movslq 0x2960(%rsp), %rax
shlq $0x3, %rax
movl %eax, 0x211c(%rsp)
leaq 0x1910(%rsp), %rdi
movl 0x211c(%rsp), %ecx
leaq 0x74e42(%rip), %rsi     # 0x1d2004
leaq 0xad06d(%rip), %rdx     # 0x20a236
movb $0x0, %al
callq 0x5b9c0
leaq 0x2120(%rsp), %rdi
leaq 0x1910(%rsp), %r8
leaq 0x74e4d(%rip), %rsi     # 0x1d2034
leaq 0xad0d8(%rip), %rdx     # 0x20a2c6
movl $0x74c, %ecx            # imm = 0x74C
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x2974(%rsp)
jmp 0x15d8ab
movslq 0x2960(%rsp), %rdi
shlq $0x3, %rdi
callq 0x8460
movq %rax, 0x2938(%rsp)
cmpq $0x0, 0x2938(%rsp)
jne 0x15d29f
movslq 0x2960(%rsp), %rax
shlq $0x3, %rax
movl %eax, 0x190c(%rsp)
leaq 0x1100(%rsp), %rdi
movl 0x190c(%rsp), %ecx
leaq 0x74dad(%rip), %rsi     # 0x1d2004
leaq 0xacfe9(%rip), %rdx     # 0x20a247
movb $0x0, %al
callq 0x5b9c0
leaq 0x2120(%rsp), %rdi
leaq 0x1100(%rsp), %r8
leaq 0x74db8(%rip), %rsi     # 0x1d2034
leaq 0xad043(%rip), %rdx     # 0x20a2c6
movl $0x74d, %ecx            # imm = 0x74D
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x2974(%rsp)
jmp 0x15d8ab
movslq 0x2960(%rsp), %rdi
shlq $0x3, %rdi
callq 0x8460
movq %rax, 0x2930(%rsp)
cmpq $0x0, 0x2930(%rsp)
jne 0x15d334
movslq 0x2960(%rsp), %rax
shlq $0x3, %rax
movl %eax, 0x10fc(%rsp)
leaq 0x8f0(%rsp), %rdi
movl 0x10fc(%rsp), %ecx
leaq 0x74d18(%rip), %rsi     # 0x1d2004
leaq 0xacf59(%rip), %rdx     # 0x20a24c
movb $0x0, %al
callq 0x5b9c0
leaq 0x2120(%rsp), %rdi
leaq 0x8f0(%rsp), %r8
leaq 0x74d23(%rip), %rsi     # 0x1d2034
leaq 0xacfae(%rip), %rdx     # 0x20a2c6
movl $0x74e, %ecx            # imm = 0x74E
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x2974(%rsp)
jmp 0x15d8ab
movslq 0x2960(%rsp), %rdi
shlq $0x3, %rdi
callq 0x8460
movq %rax, 0x2928(%rsp)
cmpq $0x0, 0x2928(%rsp)
jne 0x15d3c9
movslq 0x2960(%rsp), %rax
shlq $0x3, %rax
movl %eax, 0x8ec(%rsp)
leaq 0xe0(%rsp), %rdi
movl 0x8ec(%rsp), %ecx
leaq 0x74c83(%rip), %rsi     # 0x1d2004
leaq 0xaced5(%rip), %rdx     # 0x20a25d
movb $0x0, %al
callq 0x5b9c0
leaq 0x2120(%rsp), %rdi
leaq 0xe0(%rsp), %r8
leaq 0x74c8e(%rip), %rsi     # 0x1d2034
leaq 0xacf19(%rip), %rdx     # 0x20a2c6
movl $0x74f, %ecx            # imm = 0x74F
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x2974(%rsp)
jmp 0x15d8ab
movl $0x4, 0x2948(%rsp)
movl 0x2948(%rsp), %eax
cmpl 0x2960(%rsp), %eax
jge 0x15d675
cvtsi2sdl 0x2948(%rsp), %xmm0
movsd %xmm0, 0x2950(%rsp)
movsd 0x2950(%rsp), %xmm0
addsd %xmm0, %xmm0
movsd 0x76289(%rip), %xmm1    # 0x1d3698
addsd %xmm1, %xmm0
movsd 0x2950(%rsp), %xmm1
addsd %xmm1, %xmm1
movsd 0x74e20(%rip), %xmm2    # 0x1d2248
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd 0x2950(%rsp), %xmm1
movsd 0x76257(%rip), %xmm2    # 0x1d3698
subsd %xmm2, %xmm1
movsd 0x74e23(%rip), %xmm2    # 0x1d2270
addsd 0x2950(%rsp), %xmm2
mulsd %xmm2, %xmm1
movsd 0x2950(%rsp), %xmm2
movsd 0x74ddd(%rip), %xmm3    # 0x1d2248
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
movsd 0x7621d(%rip), %xmm2    # 0x1d3698
addsd 0x2950(%rsp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
callq 0x82e0
movsd 0x74daf(%rip), %xmm1    # 0x1d2248
addsd 0x2950(%rsp), %xmm1
mulsd %xmm1, %xmm0
movq 0x2940(%rsp), %rax
movslq 0x2948(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd 0x2950(%rsp), %xmm1
movsd 0x74d7c(%rip), %xmm0    # 0x1d2248
addsd 0x2950(%rsp), %xmm0
mulsd %xmm0, %xmm1
movsd 0x77ff7(%rip), %xmm0    # 0x1d54d8
divsd %xmm1, %xmm0
movq 0x2938(%rsp), %rax
movslq 0x2948(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd 0x2950(%rsp), %xmm0
addsd %xmm0, %xmm0
movsd 0x76189(%rip), %xmm1    # 0x1d3698
addsd %xmm1, %xmm0
movsd 0x2950(%rsp), %xmm1
movsd 0x77fa4(%rip), %xmm2    # 0x1d54c8
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd 0x77f94(%rip), %xmm1    # 0x1d54c8
addsd 0x2950(%rsp), %xmm1
mulsd %xmm1, %xmm0
movsd 0x2950(%rsp), %xmm1
movsd 0x7572e(%rip), %xmm2    # 0x1d2c80
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd 0x7571e(%rip), %xmm1    # 0x1d2c80
addsd 0x2950(%rsp), %xmm1
mulsd %xmm1, %xmm0
movsd 0x2950(%rsp), %xmm1
addsd %xmm1, %xmm1
movsd 0x7524c(%rip), %xmm2    # 0x1d27d0
addsd %xmm2, %xmm1
movsd 0x2950(%rsp), %xmm2
movsd 0x760ff(%rip), %xmm3    # 0x1d3698
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
movsd 0x74cc7(%rip), %xmm2    # 0x1d2270
addsd 0x2950(%rsp), %xmm2
mulsd %xmm2, %xmm1
movsd 0x2950(%rsp), %xmm2
movsd 0x74c81(%rip), %xmm3    # 0x1d2248
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
movsd 0x760c1(%rip), %xmm2    # 0x1d3698
addsd 0x2950(%rsp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
callq 0x82e0
movsd 0x74c53(%rip), %xmm1    # 0x1d2248
addsd 0x2950(%rsp), %xmm1
mulsd %xmm1, %xmm0
divsd 0x2950(%rsp), %xmm0
movq 0x2930(%rsp), %rax
movslq 0x2948(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd 0x2950(%rsp), %xmm1
addsd %xmm1, %xmm1
movsd 0x76063(%rip), %xmm0    # 0x1d3698
addsd %xmm0, %xmm1
movsd 0x7563f(%rip), %xmm0    # 0x1d2c80
divsd %xmm1, %xmm0
callq 0x82e0
movq 0x2928(%rsp), %rax
movslq 0x2948(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x2948(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2948(%rsp)
jmp 0x15d3d4
callq 0x2edc0
movl %eax, %esi
leaq 0xa0(%rsp), %rdi
callq 0x2ef50
leaq 0x88(%rsp), %rdi
callq 0x2f070
movl $0x0, 0x294c(%rsp)
movl 0x294c(%rsp), %eax
cmpl 0x2964(%rsp), %eax
jge 0x15d796
movq 0x2958(%rsp), %rax
movq %rax, 0x38(%rsp)
movl 0x294c(%rsp), %eax
movl %eax, 0x40(%rsp)
movq 0x2968(%rsp), %rax
movq %rax, 0x48(%rsp)
movl 0x2960(%rsp), %eax
movl %eax, 0x50(%rsp)
movq 0x2940(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x2938(%rsp), %rax
movq %rax, 0x60(%rsp)
movq 0x2930(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x2928(%rsp), %rax
movq %rax, 0x70(%rsp)
leaq 0x78(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
leaq 0x38(%rsp), %rdx
callq 0x161e20
jmp 0x15d732
leaq 0x88(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x2f080
jmp 0x15d746
leaq 0x78(%rsp), %rdi
callq 0x2f0b0
movl 0x294c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x294c(%rsp)
jmp 0x15d6a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x30(%rsp)
movl %eax, 0x2c(%rsp)
jmp 0x15d88f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x30(%rsp)
movl %eax, 0x2c(%rsp)
leaq 0x78(%rsp), %rdi
callq 0x2f0b0
jmp 0x15d88f
leaq 0x88(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
callq 0x2f0c0
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rdi
callq 0x2f0f0
movq %rax, 0x10(%rsp)
leaq 0x18(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x2f120
testb $0x1, %al
jne 0x15d7d6
jmp 0x15d81f
leaq 0x18(%rsp), %rdi
callq 0x2f160
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rdi
callq 0x2f170
movl %eax, (%rsp)
jmp 0x15d7f4
movl (%rsp), %eax
cmpl $0x0, %eax
je 0x15d811
movl $0x1, 0x2974(%rsp)
movl $0x1, 0x4(%rsp)
jmp 0x15d873
jmp 0x15d813
leaq 0x18(%rsp), %rdi
callq 0x2f1f0
jmp 0x15d7c1
leaq 0x88(%rsp), %rdi
callq 0x2f210
movq 0x2940(%rsp), %rdi
callq 0x8420
movq 0x2938(%rsp), %rdi
callq 0x8420
movq 0x2930(%rsp), %rdi
callq 0x8420
movq 0x2928(%rsp), %rdi
callq 0x8420
movl $0x0, 0x2974(%rsp)
movl $0x1, 0x4(%rsp)
leaq 0x88(%rsp), %rdi
callq 0x2f230
leaq 0xa0(%rsp), %rdi
callq 0x2f290
jmp 0x15d8ab
leaq 0x88(%rsp), %rdi
callq 0x2f230
leaq 0xa0(%rsp), %rdi
callq 0x2f290
jmp 0x15d8ba
movl 0x2974(%rsp), %eax
addq $0x2978, %rsp           # imm = 0x2978
retq
movq 0x30(%rsp), %rdi
callq 0x8640
nopw %cs:(%rax,%rax)