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

```asm
<mat4_invert>:
  endbr64
  movss  0x4(%rdi),%xmm6
  movss  (%rdi),%xmm4
  mov    %rdi,%rax
  movss  0x34(%rdi),%xmm3
  movss  0x38(%rdi),%xmm2
  movss  0x14(%rdi),%xmm0
  movss  0x8(%rdi),%xmm5
  movss  %xmm6,-0x20(%rsp)
  movss  %xmm3,-0x58(%rsp)
  movss  0x10(%rdi),%xmm10
  movaps %xmm4,%xmm3
  movss  0x28(%rdi),%xmm1
  movss  %xmm2,-0x54(%rsp)
  movaps %xmm6,%xmm2
  movss  0x18(%rdi),%xmm9
  movss  0x1c(%rdi),%xmm14
  mulss  %xmm10,%xmm2
  movss  %xmm1,-0x50(%rsp)
  movss  0xc(%rdi),%xmm13
  movss  0x20(%rdi),%xmm15
  mulss  %xmm0,%xmm3
  movss  %xmm5,-0x34(%rsp)
  movss  0x24(%rdi),%xmm7
  movss  0x30(%rdi),%xmm8
  movss  0x2c(%rdi),%xmm11
  movss  0x3c(%rdi),%xmm12
  movss  %xmm15,-0x1c(%rsp)
  movss  %xmm7,-0x30(%rsp)
  subss  %xmm2,%xmm3
  movaps %xmm5,%xmm2
  mulss  %xmm10,%xmm2
  movaps %xmm3,%xmm1
  movss  %xmm3,-0x2c(%rsp)
  movaps %xmm4,%xmm3
  mulss  %xmm9,%xmm3
  subss  %xmm2,%xmm3
  movaps %xmm4,%xmm2
  mulss  %xmm14,%xmm2
  movss  %xmm3,-0x38(%rsp)
  movaps %xmm2,%xmm3
  movaps %xmm13,%xmm2
  mulss  %xmm10,%xmm2
  subss  %xmm2,%xmm3
  movaps %xmm5,%xmm2
  mulss  %xmm0,%xmm2
  mulss  %xmm14,%xmm5
  movss  %xmm3,-0x24(%rsp)
  movaps %xmm6,%xmm3
  mulss  %xmm9,%xmm3
  mulss  %xmm14,%xmm6
  subss  %xmm2,%xmm3
  movaps %xmm13,%xmm2
  mulss  %xmm0,%xmm2
  movss  %xmm3,-0x4c(%rsp)
  movss  -0x58(%rsp),%xmm3
  mulss  %xmm15,%xmm3
  subss  %xmm2,%xmm6
  movaps %xmm13,%xmm2
  mulss  %xmm9,%xmm2
  movss  %xmm6,-0x48(%rsp)
  movaps %xmm5,%xmm6
  movaps %xmm11,%xmm5
  mulss  %xmm8,%xmm5
  subss  %xmm2,%xmm6
  movaps %xmm7,%xmm2
  mulss  %xmm8,%xmm2
  movss  %xmm6,-0x44(%rsp)
  movaps %xmm7,%xmm6
  movaps %xmm3,%xmm7
  movss  -0x54(%rsp),%xmm3
  mulss  %xmm15,%xmm3
  subss  %xmm2,%xmm7
  mulss  %xmm12,%xmm15
  movss  %xmm7,-0x28(%rsp)
  movss  -0x50(%rsp),%xmm2
  mulss  %xmm8,%xmm2
  subss  %xmm2,%xmm3
  movaps %xmm15,%xmm2
  movss  -0x50(%rsp),%xmm15
  subss  %xmm5,%xmm2
  movss  -0x54(%rsp),%xmm5
  movss  %xmm3,-0x40(%rsp)
  movss  -0x58(%rsp),%xmm3
  mulss  %xmm6,%xmm5
  mulss  %xmm12,%xmm6
  mulss  %xmm15,%xmm3
  subss  %xmm3,%xmm5
  movaps %xmm15,%xmm3
  mulss  %xmm12,%xmm3
  movss  %xmm5,-0x3c(%rsp)
  movss  -0x58(%rsp),%xmm5
  mulss  %xmm11,%xmm5
  subss  %xmm5,%xmm6
  movss  -0x54(%rsp),%xmm5
  mulss  %xmm11,%xmm5
  subss  %xmm5,%xmm3
  movss  -0x38(%rsp),%xmm5
  mulss  %xmm6,%xmm5
  mulss  %xmm3,%xmm1
  movaps %xmm1,%xmm15
  subss  %xmm5,%xmm15
  movss  -0x24(%rsp),%xmm5
  mulss  -0x3c(%rsp),%xmm5
  addss  %xmm15,%xmm5
  movss  -0x4c(%rsp),%xmm15
  mulss  %xmm2,%xmm15
  addss  %xmm15,%xmm5
  movss  -0x48(%rsp),%xmm15
  mulss  -0x40(%rsp),%xmm15
  subss  %xmm15,%xmm5
  movss  -0x44(%rsp),%xmm15
  mulss  %xmm7,%xmm15
  addss  %xmm15,%xmm5
  ucomiss D7(%rip),%xmm5
  jp     L9
  je     L1
L9:
  movss  D9(%rip),%xmm15
  movaps %xmm0,%xmm7
  movss  -0x3c(%rsp),%xmm1
  mulss  %xmm3,%xmm7
  divss  %xmm5,%xmm15
  movaps %xmm15,%xmm5
  movaps %xmm1,%xmm15
  shufps $0x0,%xmm5,%xmm5
  movaps %xmm5,-0x18(%rsp)
  movaps %xmm7,%xmm5
  movaps %xmm9,%xmm7
  mulss  %xmm6,%xmm7
  mulss  %xmm14,%xmm15
  subss  %xmm7,%xmm5
  movss  -0x20(%rsp),%xmm7
  mulss  %xmm3,%xmm7
  addss  %xmm15,%xmm5
  movss  -0x34(%rsp),%xmm15
  mulss  %xmm6,%xmm15
  movd   %xmm15,%edx
  movaps %xmm7,%xmm15
  movd   %edx,%xmm7
  subss  %xmm15,%xmm7
  movaps %xmm1,%xmm15
  movss  -0x48(%rsp),%xmm1
  mulss  %xmm13,%xmm15
  mulss  -0x54(%rsp),%xmm1
  subss  %xmm15,%xmm7
  movss  -0x44(%rsp),%xmm15
  mulss  -0x58(%rsp),%xmm15
  movd   %xmm7,%edx
  movss  -0x50(%rsp),%xmm7
  mulss  -0x48(%rsp),%xmm7
  subss  %xmm1,%xmm15
  movss  -0x4c(%rsp),%xmm1
  mulss  %xmm12,%xmm1
  movd   %xmm7,%ecx
  movss  -0x30(%rsp),%xmm7
  mulss  -0x44(%rsp),%xmm7
  addss  %xmm1,%xmm15
  movd   %ecx,%xmm1
  subss  %xmm7,%xmm1
  movd   %xmm1,%ecx
  movss  -0x4c(%rsp),%xmm1
  movd   %ecx,%xmm7
  mulss  %xmm11,%xmm1
  subss  %xmm1,%xmm7
  movss  -0x24(%rsp),%xmm1
  unpcklps %xmm7,%xmm15
  movd   %edx,%xmm7
  unpcklps %xmm7,%xmm5
  movss  -0x40(%rsp),%xmm7
  movlhps %xmm15,%xmm5
  mulps  -0x18(%rsp),%xmm5
  movups %xmm5,(%rax)
  movaps %xmm9,%xmm5
  mulss  %xmm2,%xmm5
  movaps %xmm5,%xmm15
  movaps %xmm10,%xmm5
  mulss  %xmm3,%xmm5
  mulss  %xmm4,%xmm3
  subss  %xmm5,%xmm15
  movaps %xmm7,%xmm5
  mulss  %xmm14,%xmm5
  subss  %xmm5,%xmm15
  movss  -0x34(%rsp),%xmm5
  mulss  %xmm2,%xmm5
  movd   %xmm15,%ecx
  subss  %xmm5,%xmm3
  movaps %xmm7,%xmm5
  movss  -0x44(%rsp),%xmm7
  mulss  %xmm13,%xmm5
  addss  %xmm5,%xmm3
  movaps %xmm7,%xmm5
  mulss  %xmm8,%xmm5
  movd   %xmm3,%esi
  movss  -0x54(%rsp),%xmm3
  mulss  %xmm1,%xmm3
  movaps %xmm3,%xmm15
  movss  -0x38(%rsp),%xmm3
  subss  %xmm5,%xmm15
  mulss  %xmm12,%xmm3
  movaps %xmm3,%xmm5
  movaps %xmm15,%xmm3
  subss  %xmm5,%xmm3
  movss  -0x1c(%rsp),%xmm5
  mulss  %xmm7,%xmm5
  movss  -0x50(%rsp),%xmm7
  mulss  %xmm1,%xmm7
  subss  %xmm7,%xmm5
  movss  -0x38(%rsp),%xmm7
  movaps %xmm7,%xmm15
  mulss  %xmm11,%xmm15
  addss  %xmm15,%xmm5
  movaps %xmm3,%xmm15
  movd   %esi,%xmm3
  unpcklps %xmm5,%xmm15
  movd   %ecx,%xmm5
  unpcklps %xmm3,%xmm5
  movaps %xmm5,%xmm3
  movaps %xmm10,%xmm5
  mulss  %xmm6,%xmm5
  movlhps %xmm15,%xmm3
  movaps -0x18(%rsp),%xmm15
  mulss  %xmm4,%xmm6
  mulps  %xmm15,%xmm3
  movups %xmm3,0x10(%rax)
  movaps %xmm5,%xmm3
  movaps %xmm0,%xmm5
  mulss  %xmm2,%xmm5
  subss  %xmm5,%xmm3
  movss  -0x28(%rsp),%xmm5
  mulss  %xmm5,%xmm14
  mulss  %xmm5,%xmm13
  addss  %xmm14,%xmm3
  movss  -0x20(%rsp),%xmm14
  mulss  %xmm14,%xmm2
  subss  %xmm6,%xmm2
  movss  -0x58(%rsp),%xmm6
  mulss  %xmm1,%xmm6
  subss  %xmm13,%xmm2
  movss  -0x48(%rsp),%xmm13
  mulss  -0x2c(%rsp),%xmm12
  mulss  -0x30(%rsp),%xmm1
  mulss  -0x2c(%rsp),%xmm11
  movaps %xmm13,%xmm5
  mulss  %xmm8,%xmm5
  unpcklps %xmm2,%xmm3
  movss  -0x34(%rsp),%xmm2
  subss  %xmm6,%xmm5
  movaps %xmm13,%xmm6
  movss  -0x1c(%rsp),%xmm13
  mulss  %xmm13,%xmm6
  addss  %xmm12,%xmm5
  movaps %xmm1,%xmm12
  movss  -0x3c(%rsp),%xmm1
  mulss  %xmm1,%xmm10
  mulss  %xmm1,%xmm4
  movss  -0x58(%rsp),%xmm1
  subss  %xmm6,%xmm12
  mulss  %xmm7,%xmm1
  subss  %xmm11,%xmm12
  movss  -0x40(%rsp),%xmm11
  mulss  %xmm11,%xmm0
  mulss  %xmm11,%xmm14
  unpcklps %xmm12,%xmm5
  movlhps %xmm5,%xmm3
  movaps %xmm7,%xmm5
  movss  -0x54(%rsp),%xmm7
  mulps  %xmm15,%xmm3
  subss  %xmm10,%xmm0
  movss  -0x28(%rsp),%xmm10
  subss  %xmm14,%xmm4
  mulss  %xmm10,%xmm2
  movups %xmm3,0x20(%rax)
  movss  -0x4c(%rsp),%xmm3
  mulss  %xmm10,%xmm9
  mulss  %xmm3,%xmm8
  addss  %xmm2,%xmm4
  movaps %xmm13,%xmm2
  mulss  %xmm3,%xmm2
  movss  -0x30(%rsp),%xmm3
  subss  %xmm9,%xmm0
  mulss  %xmm5,%xmm3
  subss  %xmm8,%xmm1
  movss  -0x2c(%rsp),%xmm8
  unpcklps %xmm4,%xmm0
  mulss  %xmm8,%xmm7
  subss  %xmm3,%xmm2
  movss  -0x50(%rsp),%xmm3
  mulss  %xmm8,%xmm3
  subss  %xmm7,%xmm1
  addss  %xmm3,%xmm2
  unpcklps %xmm2,%xmm1
  movlhps %xmm1,%xmm0
  mulps  %xmm15,%xmm0
  movups %xmm0,0x30(%rax)
L1:
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D7
type_infered: f32
name: extract_symbolic_data
arguments: data_tag: D9
type_infered: f32

tool: D7: 0

tool: D9: 1

assistant: ```c
void mat4_invert(float *dst) {
  float a00 = dst[0], a01 = dst[1], a02 = dst[2], a03 = dst[3];
  float a10 = dst[4], a11 = dst[5], a12 = dst[6], a13 = dst[7];
  float a20 = dst[8], a21 = dst[9], a22 = dst[10], a23 = dst[11];
  float a30 = dst[12], a31 = dst[13], a32 = dst[14], a33 = dst[15];
  float b00 = (a00 * a11) - (a01 * a10);
  float b01 = (a00 * a12) - (a02 * a10);
  float b02 = (a00 * a13) - (a03 * a10);
  float b03 = (a01 * a12) - (a02 * a11);
  float b04 = (a01 * a13) - (a03 * a11);
  float b05 = (a02 * a13) - (a03 * a12);
  float b06 = (a20 * a31) - (a21 * a30);
  float b07 = (a20 * a32) - (a22 * a30);
  float b08 = (a20 * a33) - (a23 * a30);
  float b09 = (a21 * a32) - (a22 * a31);
  float b10 = (a21 * a33) - (a23 * a31);
  float b11 = (a22 * a33) - (a23 * a32);
  float det = (b00 * b11) - (b01 * b10) + (b02 * b09) + (b03 * b08) - (b04 * b07) + (b05 * b06);
  if (!det) {
    return;
  }
  det = 1.0 / det;
  dst[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
  dst[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
  dst[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
  dst[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
  dst[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
  dst[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
  dst[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
  dst[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
  dst[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
  dst[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
  dst[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
  dst[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
  dst[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
  dst[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
  dst[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
  dst[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
}
```