user: Translate the below assembly code into C programming language:

```asm
<julian_day>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %esi,-0x28(%rbp)
  mov    %edx,-0x2c(%rbp)
  mov    %ecx,-0x30(%rbp)
  mov    %r8d,-0x34(%rbp)
  mov    %r9d,-0x38(%rbp)
  movss  %xmm0,-0x3c(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x2c(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x30(%rbp),%xmm0
  subss  -0x3c(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  pxor   %xmm3,%xmm3
  cvtsi2sdl -0x34(%rbp),%xmm3
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x38(%rbp),%xmm0
  movsd  D75(%rip),%xmm4
  divsd  %xmm4,%xmm0
  addsd  %xmm3,%xmm0
  movsd  D75(%rip),%xmm3
  divsd  %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  movsd  D63(%rip),%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  cmpl   $0x2,-0x28(%rbp)
  jg     L14
  addl   $0xc,-0x28(%rbp)
  subl   $0x1,-0x24(%rbp)
L14:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x24(%rbp),%xmm1
  movsd  D4(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  D77(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x28(%rbp),%eax
  add    $0x1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D61(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  addsd  -0x48(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movsd  D57(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  comisd D55(%rip),%xmm0
  jbe    L17
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  D78(%rip),%xmm0
  subsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  D87(%rip),%xmm1
  movapd %xmm0,%xmm6
  divsd  %xmm1,%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  addsd  -0x48(%rbp),%xmm0
  movsd  -0x18(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L17:
  movsd  -0x18(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D75
type_guessed: f64
name: extract_symbolic_data
arguments: tag: D63
type_guessed: f64
name: extract_symbolic_data
arguments: tag: D4
type_guessed: f64
name: extract_symbolic_data
arguments: tag: D77
type_guessed: f64
name: extract_symbolic_data
arguments: tag: D61
type_guessed: f64
name: extract_symbolic_data
arguments: tag: D57
type_guessed: f64
name: extract_symbolic_data
arguments: tag: D55
type_guessed: f64[2]
name: extract_symbolic_data
arguments: tag: D78
type_guessed: byte[8]
name: extract_symbolic_data
arguments: tag: D87
type_guessed: byte[8]

tool: D75: 60

tool: D63: 24

tool: D4: 4716

tool: D77: 365.25

tool: D61: 30.6001

tool: D57: 1524.5

tool: {"D55": [2299160.0,2.0]}

tool: {"D78": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: {"D87": [0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40]}

assistant: ```c
double julian_day(int year, int month, int day, int hour, int minute, int second, float tz) {
  double day_decimal, julian_day, a;
  day_decimal = day + (hour - tz + (minute + second / 60.0) / 60.0) / 24.0;
  if (month < 3) {
    month += 12;
    year--;
  }
  julian_day = floor(365.25 * (year + 4716.0)) + floor(30.6001 * (month + 1)) + day_decimal - 1524.5;
  if (julian_day > 2299160.0) {
    a = floor(year / 100);
    julian_day += (2 - a + floor(a / 4));
  }
  return julian_day;
}
```