user: Converte this assembly snippet into its equivalent C code:

```asm
<HermiteInterpolate>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x48(%rbp)
  movsd  %xmm1,-0x50(%rbp)
  movsd  %xmm2,-0x58(%rbp)
  movsd  %xmm3,-0x60(%rbp)
  movsd  %xmm4,-0x68(%rbp)
  movsd  %xmm5,-0x70(%rbp)
  movsd  %xmm6,-0x78(%rbp)
  movsd  -0x68(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x50(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x48(%rbp),%xmm1
  movsd  -0x78(%rbp),%xmm2
  movsd  D125(%rip),%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D125(%rip),%xmm0
  subsd  -0x70(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D156(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x50(%rbp),%xmm1
  movsd  D125(%rip),%xmm0
  subsd  -0x78(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D125(%rip),%xmm0
  subsd  -0x70(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D156(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x30(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x50(%rbp),%xmm1
  movsd  -0x78(%rbp),%xmm2
  movsd  D125(%rip),%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D125(%rip),%xmm0
  subsd  -0x70(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D156(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x60(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x58(%rbp),%xmm1
  movsd  D125(%rip),%xmm0
  subsd  -0x78(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D125(%rip),%xmm0
  subsd  -0x70(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D156(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x38(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  -0x40(%rbp),%xmm2
  movsd  D47(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D125(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  movsd  -0x38(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  -0x68(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x38(%rbp),%xmm1
  movsd  D9(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x40(%rbp),%xmm2
  movsd  D47(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x50(%rbp),%xmm1
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x10(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x58(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D125
type: byte[8]
name: retrieve_data
arguments: data_label: D156
type: byte[8]
name: retrieve_data
arguments: data_label: D47
type: byte[8]
name: retrieve_data
arguments: data_label: D9
type: byte[8]

tool: {"D125": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

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

tool: {"D47": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

tool: {"D9": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0]}

assistant: ```c
double HermiteInterpolate(double y0, double y1, double y2, double y3, double mu, double tension, double bias) {
  double m0, m1, mu2, mu3;
  double a0, a1, a2, a3;
  mu2 = mu * mu;
  mu3 = mu2 * mu;
  m0 = (y1 - y0) * (1 + bias) * (1 - tension) / 2;
  m0 += (y2 - y1) * (1 - bias) * (1 - tension) / 2;
  m1 = (y2 - y1) * (1 + bias) * (1 - tension) / 2;
  m1 += (y3 - y2) * (1 - bias) * (1 - tension) / 2;
  a0 = 2 * mu3 - 3 * mu2 + 1;
  a1 = mu3 - 2 * mu2 + mu;
  a2 = mu3 - mu2;
  a3 = -2 * mu3 + 3 * mu2;
  return (a0 * y1 + a1 * m0 + a2 * m1 + a3 * y2);
}
```