user: Please show me the C implementation that matches the assembly code listed below:

```asm
<vec3_hermite>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  movss  %xmm0,-0x44(%rbp)
  movss  -0x44(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x44(%rbp),%xmm0
  addss  %xmm0,%xmm0
  movss  D8(%rip),%xmm1
  subss  %xmm1,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x14(%rbp),%xmm1
  movss  D38(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x10(%rbp)
  movss  -0x44(%rbp),%xmm0
  movss  D34(%rip),%xmm1
  subss  %xmm1,%xmm0
  mulss  -0x14(%rbp),%xmm0
  movss  -0x44(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0x44(%rbp),%xmm0
  movss  D38(%rip),%xmm1
  subss  %xmm1,%xmm0
  movss  -0x14(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0x44(%rbp),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  movss  D8(%rip),%xmm0
  subss  %xmm1,%xmm0
  movss  -0x14(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    -0x28(%rbp),%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x10(%rbp),%xmm1
  mov    -0x30(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  -0xc(%rbp),%xmm0
  addss  %xmm0,%xmm1
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  -0x8(%rbp),%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  -0x4(%rbp),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x10(%rbp),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  -0xc(%rbp),%xmm0
  addss  %xmm0,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  -0x8(%rbp),%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  -0x4(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x10(%rbp),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  -0xc(%rbp),%xmm0
  addss  %xmm0,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  -0x8(%rbp),%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  -0x4(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  nop
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D8
type: f32
name: retrieve_data
arguments: tag: D38
type: f32
name: retrieve_data
arguments: tag: D34
type: f32

tool: D8: 3

tool: D38: 1

tool: D34: 2

assistant: ```c
void vec3_hermite(float *dst, float *b, float *c, float *d, float t) {
  float factorTimes2 = t * t;
  float factor1 = factorTimes2 * (2 * t - 3) + 1;
  float factor2 = factorTimes2 * (t - 2) + t;
  float factor3 = factorTimes2 * (t - 1);
  float factor4 = factorTimes2 * (3 - 2 * t);
  dst[0] = dst[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
  dst[1] = dst[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
  dst[2] = dst[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
}
```