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

```asm
<glmComputeBarycentricCoordinates3f>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %rcx,-0x70(%rbp)
  mov    %r8,-0x78(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x60(%rbp),%rdx
  mov    -0x70(%rbp),%rcx
  lea    -0x2c(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <glmMakeVector3f@plt>
  mov    -0x68(%rbp),%rdx
  mov    -0x70(%rbp),%rcx
  lea    -0x20(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <glmMakeVector3f@plt>
  lea    -0x2c(%rbp),%rdx
  lea    -0x2c(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <glmDotProduct3f@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x44(%rbp)
  lea    -0x2c(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <glmDotProduct3f@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x40(%rbp)
  lea    -0x20(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <glmDotProduct3f@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x78(%rbp),%rdx
  mov    -0x70(%rbp),%rcx
  lea    -0x14(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <glmMakeVector3f@plt>
  lea    -0x2c(%rbp),%rdx
  lea    -0x14(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <glmDotProduct3f@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x38(%rbp)
  lea    -0x20(%rbp),%rdx
  lea    -0x14(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <glmDotProduct3f@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x34(%rbp)
  movss  -0x44(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x3c(%rbp),%xmm1
  movss  -0x40(%rbp),%xmm0
  movaps %xmm0,%xmm2
  mulss  %xmm0,%xmm2
  subss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  ucomiss -0x30(%rbp),%xmm0
  jp     L29
  pxor   %xmm0,%xmm0
  ucomiss -0x30(%rbp),%xmm0
  jne    L29
  mov    -0x58(%rbp),%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x58(%rbp),%rax
  add    $0x4,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  jmp    L37
L29:
  movss  D4(%rip),%xmm0
  divss  -0x30(%rbp),%xmm0
  movss  %xmm0,-0x30(%rbp)
  movss  -0x3c(%rbp),%xmm0
  mulss  -0x38(%rbp),%xmm0
  movss  -0x40(%rbp),%xmm1
  mulss  -0x34(%rbp),%xmm1
  subss  %xmm1,%xmm0
  mulss  -0x30(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x40(%rbp),%xmm0
  movss  D20(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x38(%rbp),%xmm1
  movss  -0x44(%rbp),%xmm0
  mulss  -0x34(%rbp),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x4,%rax
  mulss  -0x30(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x58(%rbp),%rax
  movss  (%rax),%xmm1
  movss  D4(%rip),%xmm0
  subss  %xmm1,%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L37:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L3
  call   <__stack_chk_fail@plt>
L3:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D4
type_infered: f32
name: parse_data
arguments: data_label: D20
type_infered: byte[4]

tool: D4: 1

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

assistant: ```c
void glmComputeBarycentricCoordinates3f(float result[3], const float v1[3], const float v2[3], const float v3[3], const float p[3]) {
  float a, b, c, u, v, D;
  float tv1[3], tv2[3], tv3[3];
  glmMakeVector3f(tv1, v3, v1);
  glmMakeVector3f(tv2, v3, v2);
  a = glmDotProduct3f(tv1, tv1);
  b = glmDotProduct3f(tv2, tv1);
  c = glmDotProduct3f(tv2, tv2);
  glmMakeVector3f(tv3, v3, p);
  u = glmDotProduct3f(tv3, tv1);
  v = glmDotProduct3f(tv3, tv2);
  D = a * c - b * b;
  if (D == 0) {
    result[0] = 0;
    result[1] = 0;
    result[2] = 0;
    return;
  }
  D = 1.0 / D;
  result[0] = (c * u - b * v) * D;
  result[1] = (-b * u + a * v) * D;
  result[2] = 1 - result[0] - result[1];
}
```