// File: /workspace/github_c_makefile_star2_O2/PoulinV[P]AxiCLASS/build/../source/background.c
// Function: background_z_of_tau
int background_z_of_tau(
                        struct background *pba,
                        double tau,
                        double * z
                        ) {

  /** Summary: */

  /** - define local variables */

  /* necessary for calling array_interpolate(), but never used */
  int last_index;

  /** - check that \f$ tau \f$ is in the pre-computed range */
  class_test(tau < pba->tau_table[0],
             pba->error_message,
             "out of range: tau=%e < tau_min=%e\n",tau,pba->tau_table[0]);

  class_test(tau > pba->tau_table[pba->bt_size-1],
             pba->error_message,
             "out of range: tau=%e > tau_max=%e\n",tau,pba->tau_table[pba->bt_size-1]);

  /** - interpolate from pre-computed table with array_interpolate() */
  class_call(array_interpolate_spline(
                                      pba->tau_table,
                                      pba->bt_size,
                                      pba->z_table,
                                      pba->d2z_dtau2_table,
                                      1,
                                      tau,
                                      &last_index,
                                      z,
                                      1,
                                      pba->error_message),
             pba->error_message,
             pba->error_message);

  return _SUCCESS_;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x1008, %rsp           # imm = 0x1008
movq %rdi, %r14
movq 0x450(%rdi), %rdi
movsd (%rdi), %xmm1
ucomisd %xmm0, %xmm1
jbe 0x589d9
leaq 0xa955f(%rip), %rsi     # 0x101ee9
leaq 0x800(%rsp), %rbx
movq %rbx, %rdi
movb $0x2, %al
callq 0x2e014
leaq 0x8c6df(%rip), %rsi     # 0xe5082
leaq 0xa9562(%rip), %rdx     # 0x101f0c
movq %rsp, %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x2e014
addq $0xd1c, %r14            # imm = 0xD1C
leaq 0x8c66c(%rip), %rsi     # 0xe5034
leaq 0xa9555(%rip), %rdx     # 0x101f24
movq %r14, %rdi
movl $0x150, %ecx            # imm = 0x150
jmp 0x58a43
movq %rsi, %rax
movslq 0x440(%r14), %rsi
movsd -0x8(%rdi,%rsi,8), %xmm1
leaq 0xd1c(%r14), %rbx
ucomisd %xmm1, %xmm0
jbe 0x58a5e
leaq 0xa953b(%rip), %rsi     # 0x101f38
leaq 0x800(%rsp), %r14
movq %r14, %rdi
movb $0x2, %al
callq 0x2e014
leaq 0x8c66c(%rip), %rsi     # 0xe5082
leaq 0xa953e(%rip), %rdx     # 0x101f5b
movq %rsp, %r15
movq %r15, %rdi
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x8c600(%rip), %rsi     # 0xe5034
leaq 0xa94e9(%rip), %rdx     # 0x101f24
movq %rbx, %rdi
movl $0x154, %ecx            # imm = 0x154
movq %r15, %r8
xorl %eax, %eax
callq 0x2e014
pushq $0x1
popq %rax
addq $0x1008, %rsp           # imm = 0x1008
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq 0x458(%r14), %rdx
movq 0x470(%r14), %rcx
subq $0x8, %rsp
pushq $0x1
popq %rbp
leaq 0x8(%rsp), %r9
movl %ebp, %r8d
pushq %rbx
pushq $0x1
pushq %rax
callq 0x1604b
addq $0x20, %rsp
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x1, %ecx
jne 0x58a50
leaq 0x8c958(%rip), %rsi     # 0xe53f0
leaq 0xa94e1(%rip), %rdx     # 0x101f80
leaq 0x800(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x8c579(%rip), %rsi     # 0xe5034
leaq 0xa9462(%rip), %rdx     # 0x101f24
movq %rbx, %rdi
movl $0x163, %ecx            # imm = 0x163
movq %r14, %r8
xorl %eax, %eax
callq 0x2e014
movl %ebp, %eax
jmp 0x58a50