// File: /workspace/github_c_makefile_star2_O0/PoulinV[P]AxiCLASS/build/../source/background.c
// Function: background_sources
int background_sources(
                       double loga,
                       double * y,
                       double * dy,
                       int index_loga,
                       void * parameters_and_workspace,
                       ErrorMsg error_message
                       ) {

  struct background_parameters_and_workspace * pbpaw;
  struct background * pba;
  double a;
  double * bg_table_row;

  pbpaw = parameters_and_workspace;
  pba =  pbpaw->pba;

  /** - localize the row inside background_table where the current values must be stored */
  bg_table_row = pba->background_table + index_loga*pba->bg_size;

  /** - scale factor a (in fact, given our normalisation conventions, this stands for a/a_0) */
  a = exp(loga);

  /** - corresponding redhsift 1/a-1 */
  pba->z_table[index_loga] = MAX(0.,1./a-1.);

  /** - corresponding conformal time */
  pba->tau_table[index_loga] = y[pba->index_bi_tau];

  /** -> compute all other quantities depending only on a + {B} variables and get them stored
      in one row of background_table
      The value of {B} variables in pData are also copied to pvecback.*/
  class_call(background_functions(pba, a, y, long_info, bg_table_row),
             pba->error_message,
             pba->error_message);

  return _SUCCESS_;

}

// Assembly:
subq $0x868, %rsp            # imm = 0x868
movsd %xmm0, 0x858(%rsp)
movq %rdi, 0x850(%rsp)
movq %rsi, 0x848(%rsp)
movl %edx, 0x844(%rsp)
movq %rcx, 0x838(%rsp)
movq %r8, 0x830(%rsp)
movq 0x838(%rsp), %rax
movq %rax, 0x828(%rsp)
movq 0x828(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x820(%rsp)
movq 0x820(%rsp), %rax
movq 0x460(%rax), %rax
movl 0x844(%rsp), %ecx
movq 0x820(%rsp), %rdx
imull 0x43c(%rdx), %ecx
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x810(%rsp)
movsd 0x858(%rsp), %xmm0
callq 0x8670
movsd %xmm0, 0x818(%rsp)
movsd 0x123f38(%rip), %xmm0   # 0x1d2248
divsd 0x818(%rsp), %xmm0
movsd 0x123f27(%rip), %xmm1   # 0x1d2248
subsd %xmm1, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xae353
movsd 0x123f12(%rip), %xmm0   # 0x1d2248
divsd 0x818(%rsp), %xmm0
movsd 0x123f01(%rip), %xmm1   # 0x1d2248
subsd %xmm1, %xmm0
movsd %xmm0, 0x8(%rsp)
jmp 0xae35e
xorps %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
jmp 0xae35e
movsd 0x8(%rsp), %xmm0
movq 0x820(%rsp), %rax
movq 0x458(%rax), %rax
movslq 0x844(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq 0x850(%rsp), %rax
movq 0x820(%rsp), %rcx
movslq 0x4a0(%rcx), %rcx
movsd (%rax,%rcx,8), %xmm0
movq 0x820(%rsp), %rax
movq 0x450(%rax), %rax
movslq 0x844(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq 0x820(%rsp), %rdi
movsd 0x818(%rsp), %xmm0
movq 0x850(%rsp), %rsi
movq 0x810(%rsp), %rcx
movl $0x2, %edx
callq 0x9f0d0
cmpl $0x1, %eax
jne 0xae44c
leaq 0x10(%rsp), %rdi
movq 0x820(%rsp), %rcx
addq $0xd1c, %rcx            # imm = 0xD1C
leaq 0x123fd5(%rip), %rsi    # 0x1d23d8
leaq 0x142c18(%rip), %rdx    # 0x1f1022
movb $0x0, %al
callq 0x5b9c0
movq 0x820(%rsp), %rdi
addq $0xd1c, %rdi            # imm = 0xD1C
leaq 0x10(%rsp), %r8
leaq 0x123c08(%rip), %rsi    # 0x1d2034
leaq 0x142c28(%rip), %rdx    # 0x1f105b
movl $0xd1b, %ecx            # imm = 0xD1B
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x864(%rsp)
jmp 0xae457
movl $0x0, 0x864(%rsp)
movl 0x864(%rsp), %eax
addq $0x868, %rsp            # imm = 0x868
retq
nopw %cs:(%rax,%rax)