user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<Project>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  movss  %xmm0,-0x4c(%rbp)
  movss  %xmm1,-0x50(%rbp)
  movss  %xmm2,-0x54(%rbp)
  movss  %xmm3,-0x58(%rbp)
  movss  %xmm4,-0x5c(%rbp)
  movss  %xmm5,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movss  -0x60(%rbp),%xmm4
  movss  -0x5c(%rbp),%xmm3
  movss  -0x58(%rbp),%xmm2
  movss  -0x54(%rbp),%xmm1
  movss  -0x50(%rbp),%xmm0
  mov    -0x4c(%rbp),%esi
  lea    -0x28(%rbp),%rdx
  lea    -0x2c(%rbp),%rcx
  lea    -0x30(%rbp),%rax
  movaps %xmm4,%xmm5
  movaps %xmm3,%xmm4
  movaps %xmm2,%xmm3
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %esi,%xmm0
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <UnitVectorVV@plt>
  movss  -0x28(%rbp),%xmm4
  movss  -0x2c(%rbp),%xmm3
  movss  -0x30(%rbp),%xmm2
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x40(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0x38(%rbp),%rax
  mov    (%rax),%esi
  lea    -0x1c(%rbp),%rdx
  lea    -0x20(%rbp),%rcx
  lea    -0x24(%rbp),%rax
  movaps %xmm4,%xmm5
  movaps %xmm3,%xmm4
  movaps %xmm2,%xmm3
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %esi,%xmm0
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <UnitVectorVV@plt>
  movss  -0x28(%rbp),%xmm4
  movss  -0x2c(%rbp),%xmm3
  movss  -0x30(%rbp),%xmm2
  movss  -0x1c(%rbp),%xmm1
  movss  -0x20(%rbp),%xmm0
  mov    -0x24(%rbp),%esi
  lea    -0x10(%rbp),%rdx
  lea    -0x14(%rbp),%rcx
  lea    -0x18(%rbp),%rax
  movaps %xmm4,%xmm5
  movaps %xmm3,%xmm4
  movaps %xmm2,%xmm3
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %esi,%xmm0
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <UnitVectorVV@plt>
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm1
  movss  -0x18(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x40(%rbp),%rax
  movss  (%rax),%xmm2
  movss  -0x14(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm2
  movss  -0x10(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
  pxor   %xmm0,%xmm0
  comiss -0xc(%rbp),%xmm0
  jbe    L13
  movss  -0x18(%rbp),%xmm0
  movss  D5(%rip),%xmm1
  xorps  %xmm1,%xmm0
  mov    -0x38(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm0
  movss  D5(%rip),%xmm1
  xorps  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x10(%rbp),%xmm0
  movss  D5(%rip),%xmm1
  xorps  %xmm1,%xmm0
  mov    -0x48(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L22
L13:
  movss  -0x18(%rbp),%xmm0
  mov    -0x38(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm0
  mov    -0x40(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x10(%rbp),%xmm0
  mov    -0x48(%rbp),%rax
  movss  %xmm0,(%rax)
L22:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L5
  call   <__stack_chk_fail@plt>
L5:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D5
data_type: byte[4]

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

assistant: ```c
void Project(float *vX, float *vY, float *vZ, float rX, float rY, float rZ, float sX, float sY, float sZ) {
  float nrsX, nrsY, nrsZ;
  float vrsX, vrsY, vrsZ;
  float prsX, prsY, prsZ;
  float prod;
  UnitVectorVV(&nrsX, &nrsY, &nrsZ, rX, rY, rZ, sX, sY, sZ);
  UnitVectorVV(&vrsX, &vrsY, &vrsZ, *vX, *vY, *vZ, nrsX, nrsY, nrsZ);
  UnitVectorVV(&prsX, &prsY, &prsZ, vrsX, vrsY, vrsZ, nrsX, nrsY, nrsZ);
  prod = *vX * prsX + *vY * prsY + *vZ * prsZ;
  if (prod < 0.0f) {
    *vX = -prsX;
    *vY = -prsY;
    *vZ = -prsZ;
  } else {
    *vX = prsX;
    *vY = prsY;
    *vZ = prsZ;
  }
}
```