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

```asm
<su_solar_params2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  movsd  %xmm0,-0x78(%rbp)
  movsd  %xmm1,-0x80(%rbp)
  movsd  %xmm2,-0x88(%rbp)
  mov    %rdi,-0x90(%rbp)
  mov    %rsi,-0x98(%rbp)
  mov    %rdx,-0xa0(%rbp)
  mov    %rcx,-0xa8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x48(%rbp),%rdx
  lea    -0x50(%rbp),%rsi
  lea    -0x58(%rbp),%rcx
  mov    -0x78(%rbp),%rax
  mov    %rcx,%rdi
  movq   %rax,%xmm0
  call   <solar_coords_and_times@plt>
  movsd  -0x50(%rbp),%xmm0
  mov    -0x88(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <greenwich_to_local_time@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x30(%rbp)
  movsd  -0x48(%rbp),%xmm0
  mov    -0x88(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <greenwich_to_local_time@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
  movsd  -0x78(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  cltq
  mov    %rax,-0x40(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdq -0x40(%rbp),%xmm1
  movsd  -0x78(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D6(%rip),%xmm0
  comisd -0x38(%rbp),%xmm0
  jbe    L16
  movsd  -0x38(%rbp),%xmm1
  movsd  D6(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L6
L16:
  movsd  -0x38(%rbp),%xmm0
  movsd  D6(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  addq   $0x1,-0x40(%rbp)
L6:
  movsd  -0x38(%rbp),%xmm1
  movsd  D34(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x88(%rbp),%xmm0
  movsd  D29(%rip),%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    $0x1,%edi
  movq   %rax,%xmm0
  call   <fmod@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x58(%rbp),%rax
  mov    -0xa0(%rbp),%rdx
  mov    -0x98(%rbp),%rsi
  mov    -0x90(%rbp),%rcx
  movsd  -0x18(%rbp),%xmm2
  movsd  -0x20(%rbp),%xmm1
  movsd  -0x80(%rbp),%xmm0
  mov    %rcx,%rdi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <solar_angles@plt>
  cmpq   $0x0,-0xa8(%rbp)
  je     L35
  lea    -0x5c(%rbp),%rcx
  lea    -0x60(%rbp),%rdx
  lea    -0x64(%rbp),%rsi
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <su_jul_to_cal_date@plt>
  mov    -0x64(%rbp),%eax
  mov    $0x1,%edx
  mov    $0x1,%esi
  mov    %eax,%edi
  call   <su_cal_to_jul_day@plt>
  movq   %xmm0,%rax
  movsd  D6(%rip),%xmm0
  movq   %rax,%xmm1
  subsd  %xmm0,%xmm1
  movsd  -0x78(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movsd  D34(%rip),%xmm1
  divsd  %xmm1,%xmm0
  addsd  -0x10(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <su_solar_distance_factor2@plt>
  movq   %xmm0,%rax
  mov    -0xa8(%rbp),%rdx
  mov    %rax,(%rdx)
L35:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L30
  call   <__stack_chk_fail@plt>
L30:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D6
type_infered: byte[8]
name: extract_symbolic_data
arguments: data_tag: D34
type_infered: f64
name: extract_symbolic_data
arguments: data_tag: D29
type_infered: byte[8]

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

tool: D34: 24

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

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.);
  }
}
```