user: What would the C source look like for the assembly code provided here?

```asm
<su_solar_params2>:
  endbr64
  push   %r15
  movq   %xmm2,%r15
  push   %r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rcx,%rbx
  sub    $0x58,%rsp
  movsd  %xmm1,0x8(%rsp)
  lea    0x40(%rsp),%rdx
  lea    0x38(%rsp),%rsi
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  lea    0x30(%rsp),%rdi
  movsd  %xmm0,0x18(%rsp)
  call   <solar_coords_and_times@plt>
  movsd  0x38(%rsp),%xmm1
  movq   %r15,%xmm0
  call   <greenwich_to_local_time@plt>
  movsd  0x40(%rsp),%xmm1
  movsd  %xmm0,0x10(%rsp)
  movq   %r15,%xmm0
  call   <greenwich_to_local_time@plt>
  movsd  0x18(%rsp),%xmm4
  pxor   %xmm1,%xmm1
  movsd  D5(%rip),%xmm5
  movsd  0x10(%rsp),%xmm3
  cvttsd2si %xmm4,%eax
  movapd %xmm4,%xmm2
  cvtsi2sd %eax,%xmm1
  movslq %eax,%r14
  subsd  %xmm1,%xmm2
  comisd %xmm2,%xmm5
  jbe    L2
  addsd  %xmm5,%xmm2
L10:
  subsd  %xmm0,%xmm3
  movq   %r15,%xmm1
  mov    $0x1,%edi
  divsd  D13(%rip),%xmm1
  mulsd  D17(%rip),%xmm2
  movsd  %xmm4,0x18(%rsp)
  movapd %xmm3,%xmm0
  addsd  %xmm1,%xmm2
  movsd  %xmm2,0x10(%rsp)
  call   <fmod@plt>
  mov    %r13,%rdx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movapd %xmm0,%xmm3
  movsd  0x10(%rsp),%xmm2
  movsd  0x8(%rsp),%xmm1
  movsd  0x30(%rsp),%xmm0
  call   <solar_angles@plt>
  test   %rbx,%rbx
  je     L4
  lea    0x2c(%rsp),%rcx
  lea    0x28(%rsp),%rdx
  mov    %r14,%rdi
  lea    0x24(%rsp),%rsi
  call   <su_jul_to_cal_date@plt>
  mov    0x24(%rsp),%edi
  mov    $0x1,%edx
  mov    $0x1,%esi
  call   <su_cal_to_jul_day@plt>
  subsd  D5(%rip),%xmm0
  movsd  0x18(%rsp),%xmm4
  movsd  0x10(%rsp),%xmm2
  divsd  D17(%rip),%xmm2
  subsd  %xmm0,%xmm4
  pxor   %xmm0,%xmm0
  cvttsd2si %xmm4,%eax
  cvtsi2sd %eax,%xmm0
  addsd  %xmm2,%xmm0
  call   <su_solar_distance_factor2@plt>
  movsd  %xmm0,(%rbx)
L4:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L19
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L2:
  subsd  D5(%rip),%xmm2
  add    $0x1,%r14
  jmp    L10
L19:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D5
type_infered: byte[8]
name: read_data
arguments: label: D13
type_infered: byte[8]
name: read_data
arguments: label: D17
type_infered: f64

tool: {"D5": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: {"D13": [0x65,0x73,0x2d,0x38,0x52,0xc1,0xd0,0x3f]}

tool: D17: 24

assistant: ```c
void su_solar_params2(double jtime, double lat, double lon, double *mu0, double *theta0, double *phi0, double *solar_dist_fac) {
  int year;
  int month;
  int day;
  long jwhole;
  double jfrac;
  double delta;
  double gw_mean_sol_time;
  double gw_appar_sol_time;
  double loc_mean_sol_time;
  double loc_appar_sol_time;
  double local_hour;
  double eot;
  double jday;
  solar_coords_and_times(jtime, &delta, &gw_mean_sol_time, &gw_appar_sol_time);
  loc_mean_sol_time = greenwich_to_local_time(lon, gw_mean_sol_time);
  loc_appar_sol_time = greenwich_to_local_time(lon, gw_appar_sol_time);
  jwhole = (int)jtime;
  jfrac = jtime - jwhole;
  if (jfrac < .5)
    jfrac = jfrac + .5;
  else {
    jfrac = jfrac - .5;
    jwhole = jwhole + 1;
  }
  local_hour = jfrac * 24. + lon / (15. * (3.14159265358979323846264338327 / 180.0));
  eot = fmod(loc_mean_sol_time - loc_appar_sol_time, 1.);
  solar_angles(delta, lat, local_hour, eot, mu0, theta0, phi0);
  if (solar_dist_fac) {
    su_jul_to_cal_date(jwhole, &year, &month, &day);
    jday = (int)(jtime - (su_cal_to_jul_day(year, 1, 1) - .5));
    *solar_dist_fac = su_solar_distance_factor2(jday + local_hour / 24.);
  }
}
```