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

```asm
<m_shadow>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm2
  mov    -0x20(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  addss  -0x4(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0xc,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x10,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x14,%rax
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x18,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x1c,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x20,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x24,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x28,%rax
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x2c,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x30,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x34,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x38,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movss  D68(%rip),%xmm1
  xorps  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x3c,%rax
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  nop
  pop    %rbp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D68
type_infered: byte[4]

tool: {"D68": [0x00,0x00,0x00,0x80]}

assistant: ```c
void m_shadow(const float *plane, const float *light, float *out) {
  float dot;
  dot = plane[0] * light[0] + plane[1] * light[1] + plane[2] * light[2] + plane[3] * light[3];
  out[0] = -light[0] * plane[0] + dot;
  out[1] = -light[1] * plane[0];
  out[2] = -light[2] * plane[0];
  out[3] = -light[3] * plane[0];
  out[4] = -light[0] * plane[1];
  out[5] = -light[1] * plane[1] + dot;
  out[6] = -light[2] * plane[1];
  out[7] = -light[3] * plane[1];
  out[8] = -light[0] * plane[2];
  out[9] = -light[1] * plane[2];
  out[10] = -light[2] * plane[2] + dot;
  out[11] = -light[3] * plane[2];
  out[12] = -light[0] * plane[3];
  out[13] = -light[1] * plane[3];
  out[14] = -light[2] * plane[3];
  out[15] = -light[3] * plane[3] + dot;
}
```