user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<harmonicEvaluate>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movss  D12(%rip),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm1
  movss  D55(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  movss  D55(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  movss  D55(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm1
  movss  D84(%rip),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x20(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  movss  D84(%rip),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  movss  D84(%rip),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  movss  D30(%rip),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  D31(%rip),%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  movss  D21(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mulss  %xmm1,%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  movss  D99(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x10(%rbp)
  mov    -0x40(%rbp),%rax
  movss  (%rax),%xmm1
  movss  -0x30(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  movss  -0x2c(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  movss  -0x28(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  movss  (%rax),%xmm2
  movss  -0x20(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x14,%rax
  movss  (%rax),%xmm2
  movss  -0x1c(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm2
  movss  -0x18(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x1c,%rax
  movss  (%rax),%xmm2
  movss  -0x14(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x20,%rax
  movss  (%rax),%xmm2
  movss  -0x10(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x38(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x40(%rbp),%rax
  add    $0x24,%rax
  movss  (%rax),%xmm1
  movss  -0x30(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x28,%rax
  movss  (%rax),%xmm2
  movss  -0x2c(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x2c,%rax
  movss  (%rax),%xmm2
  movss  -0x28(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x30,%rax
  movss  (%rax),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x34,%rax
  movss  (%rax),%xmm2
  movss  -0x20(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  movss  (%rax),%xmm2
  movss  -0x1c(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x3c,%rax
  movss  (%rax),%xmm2
  movss  -0x18(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x40,%rax
  movss  (%rax),%xmm2
  movss  -0x14(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x44,%rax
  movss  (%rax),%xmm2
  movss  -0x10(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x40(%rbp),%rax
  add    $0x48,%rax
  movss  (%rax),%xmm1
  movss  -0x30(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x4c,%rax
  movss  (%rax),%xmm2
  movss  -0x2c(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x50,%rax
  movss  (%rax),%xmm2
  movss  -0x28(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x54,%rax
  movss  (%rax),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x58,%rax
  movss  (%rax),%xmm2
  movss  -0x20(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x5c,%rax
  movss  (%rax),%xmm2
  movss  -0x1c(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x60,%rax
  movss  (%rax),%xmm2
  movss  -0x18(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x64,%rax
  movss  (%rax),%xmm2
  movss  -0x14(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  add    $0x68,%rax
  movss  (%rax),%xmm2
  movss  -0x10(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L6
  call   <__stack_chk_fail@plt>
L6:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_label: D12
type_infered: f32
name: read_data
arguments: data_label: D55
type_infered: f32
name: read_data
arguments: data_label: D84
type_infered: f32
name: read_data
arguments: data_label: D30
type_infered: byte[4]
name: read_data
arguments: data_label: D31
type_infered: byte[4]
name: read_data
arguments: data_label: D21
type_infered: f32
name: read_data
arguments: data_label: D99
type_infered: f32

tool: D12: 0.282095

tool: D55: 0.488603

tool: D84: 1.092548

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

tool: {"D31": [0x00,0x00,0x80,0x3f]}

tool: D21: 0.315392

tool: D99: 0.546274

assistant: ```c
void harmonicEvaluate(float *C, const float *Y, const float *D) {
  float y[9];
  y[0] = (float)0.282095;
  y[1] = (float)0.488603 * D[0];
  y[2] = (float)0.488603 * D[1];
  y[3] = (float)0.488603 * D[2];
  y[4] = (float)1.092548 * D[0] * D[1];
  y[5] = (float)1.092548 * D[1] * D[2];
  y[6] = (float)1.092548 * D[2] * D[0];
  y[7] = (float)0.315392 * (3 * D[2] * D[2] - 1);
  y[8] = (float)0.546274 * (D[0] * D[0] - D[1] * D[1]);
  C[0] = Y[0 * 9 + 0] * y[0] + Y[0 * 9 + 1] * y[1] + Y[0 * 9 + 2] * y[2] + Y[0 * 9 + 3] * y[3] + Y[0 * 9 + 4] * y[4] + Y[0 * 9 + 5] * y[5] + Y[0 * 9 + 6] * y[6] + Y[0 * 9 + 7] * y[7] + Y[0 * 9 + 8] * y[8];
  C[1] = Y[1 * 9 + 0] * y[0] + Y[1 * 9 + 1] * y[1] + Y[1 * 9 + 2] * y[2] + Y[1 * 9 + 3] * y[3] + Y[1 * 9 + 4] * y[4] + Y[1 * 9 + 5] * y[5] + Y[1 * 9 + 6] * y[6] + Y[1 * 9 + 7] * y[7] + Y[1 * 9 + 8] * y[8];
  C[2] = Y[2 * 9 + 0] * y[0] + Y[2 * 9 + 1] * y[1] + Y[2 * 9 + 2] * y[2] + Y[2 * 9 + 3] * y[3] + Y[2 * 9 + 4] * y[4] + Y[2 * 9 + 5] * y[5] + Y[2 * 9 + 6] * y[6] + Y[2 * 9 + 7] * y[7] + Y[2 * 9 + 8] * y[8];
}
```