user: What is the c source code of the assembly code below?

```asm
<julday>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %edi,-0x74(%rbp)
  mov    %esi,-0x78(%rbp)
  mov    %edx,-0x7c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x64(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x5c(%rbp)
  movss  D17(%rip),%xmm0
  movss  %xmm0,-0x58(%rbp)
  movl   $0x1,-0x3c(%rbp)
  movl   $0x20,-0x38(%rbp)
  movl   $0x3c,-0x34(%rbp)
  movl   $0x5b,-0x30(%rbp)
  movl   $0x79,-0x2c(%rbp)
  movl   $0x98,-0x28(%rbp)
  movl   $0xb6,-0x24(%rbp)
  movl   $0xd5,-0x20(%rbp)
  movl   $0xf4,-0x1c(%rbp)
  movl   $0x112,-0x18(%rbp)
  movl   $0x131,-0x14(%rbp)
  movl   $0x14f,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x7c(%rbp),%xmm0
  movss  %xmm0,-0x54(%rbp)
  cmpl   $0x76c,-0x7c(%rbp)
  je     L52
  cmpl   $0x834,-0x7c(%rbp)
  je     L52
  movss  -0x54(%rbp),%xmm0
  divss  -0x58(%rbp),%xmm0
  movss  %xmm0,-0x50(%rbp)
  movss  -0x50(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x4c(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x4c(%rbp),%xmm1
  movss  -0x50(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  movss  -0x48(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  %xmm0,-0x5c(%rbp)
  movss  -0x5c(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L29
  cmpl   $0x2,-0x74(%rbp)
  jle    L29
  movl   $0x1,-0x64(%rbp)
  jmp    L52
L29:
  movl   $0x0,-0x64(%rbp)
L52:
  mov    -0x74(%rbp),%eax
  cltq
  mov    -0x40(%rbp,%rax,4),%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  lea    -0x1(%rax),%edx
  mov    -0x64(%rbp),%eax
  add    %edx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x44(%rbp)
  cmpl   $0x0,-0x64(%rbp)
  je     L59
  pxor   %xmm1,%xmm1
  cvtss2sd -0x54(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd -0x44(%rbp),%xmm0
  movsd  D7(%rip),%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x60(%rbp)
  jmp    L57
L59:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x54(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd -0x44(%rbp),%xmm0
  movsd  D14(%rip),%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x60(%rbp)
L57:
  movss  -0x60(%rbp),%xmm0
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L53
  call   <__stack_chk_fail@plt>
L53:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D17
datatype: f32
name: extract_symbolic_data
arguments: label: D7
datatype: f64
name: extract_symbolic_data
arguments: label: D14
datatype: f64

tool: D17: 4

tool: D7: 366

tool: D14: 365

assistant: ```c
float julday(i_month, i_day, i_year)
int i_month;
int i_day;
int i_year;
{
  int aggregate_first_day_of_month[13];
  int leap_year = 0;
  int truncated_dividend;
  float year;
  float day;
  float decimal_date;
  float remainder = 0.0;
  float divisor = 4.0;
  float dividend;
  float left_over;
  aggregate_first_day_of_month[1] = 1;
  aggregate_first_day_of_month[2] = 32;
  aggregate_first_day_of_month[3] = 60;
  aggregate_first_day_of_month[4] = 91;
  aggregate_first_day_of_month[5] = 121;
  aggregate_first_day_of_month[6] = 152;
  aggregate_first_day_of_month[7] = 182;
  aggregate_first_day_of_month[8] = 213;
  aggregate_first_day_of_month[9] = 244;
  aggregate_first_day_of_month[10] = 274;
  aggregate_first_day_of_month[11] = 305;
  aggregate_first_day_of_month[12] = 335;
  year = i_year;
  if ((i_year != 1900) && (i_year != 2100)) {
    dividend = year / divisor;
    truncated_dividend = dividend;
    left_over = dividend - truncated_dividend;
    remainder = left_over * divisor;
    if ((remainder > 0.0) && (i_month > 2)) {
      leap_year = 1;
    } else {
      leap_year = 0;
    }
  }
  day = aggregate_first_day_of_month[i_month] + i_day - 1 + leap_year;
  if (leap_year) {
    decimal_date = year + (day / 366.0);
  } else {
    decimal_date = year + (day / 365.0);
  }
  return (decimal_date);
}
```