user: 请从给定的汇编指令推导出C源代码：

```asm
<calc_interpolation_params>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0x18000(%rsp),%r11
L8:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L8
  sub    $0x40,%rsp
  movapd %xmm0,%xmm6
  movapd %xmm1,%xmm7
  mov    %rsi,%rbx
  mov    %rdx,%r13
  movapd %xmm6,%xmm1
  movapd %xmm4,%xmm5
  mov    %rcx,%r14
  mov    %rdi,%rbp
  maxsd  %xmm7,%xmm1
  mov    %r8,%rcx
  movapd %xmm2,%xmm0
  mov    %r14,%rdx
  movsd  D30(%rip),%xmm4
  movapd %xmm5,%xmm2
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x18038(%rsp)
  xor    %eax,%eax
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm5,0x18(%rsp)
  movsd  %xmm6,0x10(%rsp)
  movsd  %xmm7,(%rsp)
  call   <calc_2d_angles@plt>
  movsd  0x18(%rsp),%xmm5
  movslq (%rbx),%rdx
  lea    0x10030(%rsp),%rcx
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm7
  lea    0x2c(%rsp),%rdi
  addsd  %xmm5,%xmm5
  movsd  D28(%rip),%xmm0
  mov    D30(%rip),%rsi
  mov    %rdx,%rax
  add    $0x1,%eax
  movsd  0x10(%rsp),%xmm6
  movapd %xmm3,%xmm2
  movapd %xmm7,%xmm1
  mov    %rsi,0x0(%r13,%rdx,8)
  movsd  D27(%rip),%xmm4
  lea    0x30(%rsp),%rsi
  divsd  %xmm5,%xmm0
  movsd  %xmm0,(%r14,%rdx,8)
  lea    0x8030(%rsp),%rdx
  movapd %xmm6,%xmm0
  mov    %eax,(%rbx)
  call   <calc_2d_angles@plt>
  mov    (%rbx),%eax
  movq   $0x0,0x0(%rbp)
  cmp    $0x1,%eax
  jle    L11
  pxor   %xmm7,%xmm7
  lea    -0x2(%rax),%r12d
  pxor   %xmm2,%xmm2
  xor    %ebx,%ebx
  cvtsi2sdl 0x2c(%rsp),%xmm7
  shl    $0x3,%r12
  movsd  %xmm7,0x10(%rsp)
  jmp    L2
  nopw   0x0(%rax,%rax,1)
L30:
  add    $0x8,%rbx
L2:
  movsd  0x8(%r13,%rbx,1),%xmm0
  addsd  0x0(%r13,%rbx,1),%xmm0
  movsd  %xmm2,(%rsp)
  mulsd  D41(%rip),%xmm0
  call   <sin@plt>
  mulsd  0x10(%rsp),%xmm0
  movsd  (%rsp),%xmm2
  movsd  0x8(%r14,%rbx,1),%xmm1
  addsd  (%r14,%rbx,1),%xmm1
  mulsd  %xmm0,%xmm1
  mulsd  0x8(%rsp),%xmm1
  addsd  %xmm1,%xmm2
  movsd  %xmm2,0x8(%rbp,%rbx,1)
  cmp    %r12,%rbx
  jne    L30
L11:
  mov    0x18038(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L15
  add    $0x18040,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L15:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D30
data_type: f64
name: unpack_data
arguments: tag: D28
data_type: f64
name: unpack_data
arguments: tag: D27
data_type: byte[8]
name: unpack_data
arguments: tag: D41
data_type: f32[2]

tool: D30: 3.141592653589793

tool: D28: 1

tool: {"D27": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0x40]}

tool: {"D41": [0.0,1.75]}

assistant: ```c
void calc_interpolation_params(double *t, int *ncones, double *theta_cones, double *kmax_cones, double *dcf_cones, double fov1, double fov2, double fov3, double res12, double res3) {
  int nphiest, count;
  double theta_temp[4096], kmax_temp[4096], dcf_temp[4096];
  double fov12;
  fov12 = (fov1 > fov2) ? fov1 : fov2;
  calc_2d_angles(ncones, theta_cones, kmax_cones, dcf_cones, fov3, fov12, res3, res12, 3.1415926535897932384626433832795028841971);
  theta_cones[*ncones] = 3.1415926535897932384626433832795028841971;
  kmax_cones[*ncones] = 1.0 / (2.0 * res3);
  (*ncones)++;
  calc_2d_angles(&nphiest, theta_temp, kmax_temp, dcf_temp, fov1, fov2, res12, res12, 2.0 * 3.1415926535897932384626433832795028841971);
  t[0] = 0.0;
  for (count = 1; count < *ncones; count++)
    t[count] = t[count - 1] + (double)nphiest * sin((theta_cones[count] + theta_cones[count - 1]) / 2.0) * (kmax_cones[count] + kmax_cones[count - 1]) * res12;
  return;
}
```