user: Translate the below assembly code into C programming language:

```asm
<fz_invert3x3>:
  endbr64
  movss  0x10(%rsi),%xmm4
  movss  0x1c(%rsi),%xmm1
  mov    %rdi,%rax
  mov    %rsi,%rdx
  movss  0x20(%rsi),%xmm2
  movss  0x14(%rsi),%xmm5
  movaps %xmm4,%xmm0
  movaps %xmm1,%xmm3
  movss  0xc(%rsi),%xmm7
  movss  0x18(%rsi),%xmm6
  mulss  %xmm5,%xmm3
  mulss  %xmm2,%xmm0
  mulss  %xmm6,%xmm5
  mulss  %xmm7,%xmm2
  mulss  %xmm7,%xmm1
  mulss  %xmm6,%xmm4
  subss  %xmm3,%xmm0
  movss  (%rsi),%xmm3
  subss  %xmm5,%xmm2
  mulss  0x4(%rsi),%xmm2
  mulss  %xmm0,%xmm3
  subss  %xmm4,%xmm1
  mulss  0x8(%rsi),%xmm1
  subss  %xmm2,%xmm3
  addss  %xmm1,%xmm3
  ucomiss D14(%rip),%xmm3
  movaps %xmm3,%xmm2
  jp     L28
  movss  D25(%rip),%xmm1
  jne    L28
L11:
  movss  %xmm0,(%rax)
  movss  0x4(%rdx),%xmm3
  movss  0x8(%rdx),%xmm2
  mulss  0x20(%rdx),%xmm3
  mulss  0x1c(%rdx),%xmm2
  subss  %xmm3,%xmm2
  movss  %xmm2,0x4(%rax)
  movss  0x4(%rdx),%xmm2
  movss  0x8(%rdx),%xmm3
  mulss  0x14(%rdx),%xmm2
  mulss  0x10(%rdx),%xmm3
  subss  %xmm3,%xmm2
  movss  %xmm2,0x8(%rax)
  movss  0xc(%rdx),%xmm3
  movss  0x14(%rdx),%xmm2
  mulss  0x20(%rdx),%xmm3
  mulss  0x18(%rdx),%xmm2
  subss  %xmm3,%xmm2
  movss  %xmm2,0xc(%rax)
  movss  (%rdx),%xmm2
  movss  0x8(%rdx),%xmm3
  mulss  0x20(%rdx),%xmm2
  mulss  0x18(%rdx),%xmm3
  subss  %xmm3,%xmm2
  movss  %xmm2,0x10(%rax)
  movss  (%rdx),%xmm3
  movss  0x8(%rdx),%xmm2
  mulss  0x14(%rdx),%xmm3
  mulss  0xc(%rdx),%xmm2
  subss  %xmm3,%xmm2
  movss  %xmm2,0x14(%rax)
  movss  0xc(%rdx),%xmm2
  movss  0x10(%rdx),%xmm3
  mulss  0x1c(%rdx),%xmm2
  mulss  0x18(%rdx),%xmm3
  subss  %xmm3,%xmm2
  movss  %xmm2,0x18(%rax)
  movss  (%rdx),%xmm3
  mulss  0x1c(%rdx),%xmm3
  movss  0x4(%rdx),%xmm2
  mulss  0x18(%rdx),%xmm2
  subss  %xmm3,%xmm2
  movss  %xmm2,0x1c(%rax)
  movss  (%rdx),%xmm2
  movss  0x4(%rdx),%xmm3
  mulss  0x10(%rdx),%xmm2
  mulss  0xc(%rdx),%xmm3
  lea    0x24(%rax),%rdx
  subss  %xmm3,%xmm2
  movss  %xmm2,0x20(%rax)
  jmp    L26
  nopl   0x0(%rax,%rax,1)
L39:
  movss  (%rax),%xmm0
L26:
  mulss  %xmm1,%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax)
  cmp    %rdx,%rax
  jne    L39
  ret
  nopw   0x0(%rax,%rax,1)
L28:
  movss  D25(%rip),%xmm1
  divss  %xmm2,%xmm1
  jmp    L11
```

tool_calls: name: disassemble_data
arguments: label: D14
data_type: byte[4]
name: disassemble_data
arguments: label: D25
data_type: f32

tool: {"D14": [0x00,0x00,0x00,0x00]}

tool: D25: 1

assistant: ```c
void fz_invert3x3(float *dst, float *m) {
  float det;
  int i;
  det = ((m)[3 * 0 + 0] * ((m)[3 * 1 + 1] * (m)[3 * 2 + 2] - (m)[3 * 2 + 1] * (m)[3 * 1 + 2])) - ((m)[3 * 0 + 1] * ((m)[3 * 1 + 0] * (m)[3 * 2 + 2] - (m)[3 * 2 + 0] * (m)[3 * 1 + 2])) + ((m)[3 * 0 + 2] * ((m)[3 * 1 + 0] * (m)[3 * 2 + 1] - (m)[3 * 2 + 0] * (m)[3 * 1 + 1]));
  if (det == 0)
    det = 1.0;
  det = 1.0 / det;
  (dst)[3 * 0 + 0] = (m)[3 * 1 + 1] * (m)[3 * 2 + 2] - (m)[3 * 1 + 2] * (m)[3 * 2 + 1];
  (dst)[3 * 0 + 1] = -(m)[3 * 0 + 1] * (m)[3 * 2 + 2] + (m)[3 * 0 + 2] * (m)[3 * 2 + 1];
  (dst)[3 * 0 + 2] = (m)[3 * 0 + 1] * (m)[3 * 1 + 2] - (m)[3 * 0 + 2] * (m)[3 * 1 + 1];
  (dst)[3 * 1 + 0] = -(m)[3 * 1 + 0] * (m)[3 * 2 + 2] + (m)[3 * 1 + 2] * (m)[3 * 2 + 0];
  (dst)[3 * 1 + 1] = (m)[3 * 0 + 0] * (m)[3 * 2 + 2] - (m)[3 * 0 + 2] * (m)[3 * 2 + 0];
  (dst)[3 * 1 + 2] = -(m)[3 * 0 + 0] * (m)[3 * 1 + 2] + (m)[3 * 0 + 2] * (m)[3 * 1 + 0];
  (dst)[3 * 2 + 0] = (m)[3 * 1 + 0] * (m)[3 * 2 + 1] - (m)[3 * 1 + 1] * (m)[3 * 2 + 0];
  (dst)[3 * 2 + 1] = -(m)[3 * 0 + 0] * (m)[3 * 2 + 1] + (m)[3 * 0 + 1] * (m)[3 * 2 + 0];
  (dst)[3 * 2 + 2] = (m)[3 * 0 + 0] * (m)[3 * 1 + 1] - (m)[3 * 0 + 1] * (m)[3 * 1 + 0];
  for (i = 0; i < 9; i++)
    dst[i] *= det;
}
```