user: 请从给定的汇编指令推导出C源代码:

```asm
<mtx3x3Invert>:
  endbr64
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rsi,%rbp
  sub    $0x48,%rsp
  movss  0x10(%rsi),%xmm3
  movss  0x1c(%rsi),%xmm0
  movss  0x20(%rsi),%xmm2
  movss  0x14(%rsi),%xmm4
  movss  0xc(%rsi),%xmm6
  movss  0x18(%rsi),%xmm5
  movaps %xmm3,%xmm1
  movaps %xmm0,%xmm7
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  mulss  %xmm4,%xmm7
  mulss  %xmm2,%xmm1
  mulss  %xmm5,%xmm4
  mulss  %xmm6,%xmm2
  mulss  %xmm6,%xmm0
  mulss  %xmm5,%xmm3
  subss  %xmm7,%xmm1
  mulss  (%rsi),%xmm1
  subss  %xmm4,%xmm2
  mulss  0x4(%rsi),%xmm2
  subss  %xmm3,%xmm0
  mulss  0x8(%rsi),%xmm0
  subss  %xmm2,%xmm1
  addss  %xmm0,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  call   <fabs@plt>
  movsd  D13(%rip),%xmm2
  movss  0xc(%rsp),%xmm1
  comisd %xmm0,%xmm2
  ja     L15
  lea    0x10(%rsp),%rdi
  mov    $0x24,%edx
  mov    %rbp,%rsi
  movss  %xmm1,0xc(%rsp)
  call   <memcpy@plt>
  movss  0x24(%rsp),%xmm2
  movss  0x2c(%rsp),%xmm0
  movss  D17(%rip),%xmm8
  movss  0xc(%rsp),%xmm1
  movss  0x20(%rsp),%xmm3
  movaps %xmm2,%xmm6
  movss  0x30(%rsp),%xmm5
  movaps %xmm0,%xmm7
  movaps %xmm2,%xmm11
  mulss  %xmm0,%xmm6
  movaps %xmm3,%xmm4
  movss  0x18(%rsp),%xmm10
  movss  0x28(%rsp),%xmm9
  mulss  %xmm5,%xmm4
  mulss  %xmm10,%xmm7
  mulss  %xmm9,%xmm11
  divss  %xmm1,%xmm6
  subss  %xmm6,%xmm4
  movaps %xmm5,%xmm6
  movss  %xmm4,(%r12)
  movss  0x14(%rsp),%xmm4
  mulss  %xmm4,%xmm6
  subss  %xmm7,%xmm6
  movaps %xmm3,%xmm7
  mulss  %xmm10,%xmm7
  xorps  %xmm8,%xmm6
  divss  %xmm1,%xmm6
  divss  %xmm1,%xmm7
  movss  %xmm6,0x4(%r12)
  movaps %xmm2,%xmm6
  mulss  %xmm4,%xmm6
  subss  %xmm7,%xmm6
  movaps %xmm5,%xmm7
  movss  %xmm6,0x8(%r12)
  movss  0x1c(%rsp),%xmm6
  mulss  %xmm6,%xmm7
  subss  %xmm11,%xmm7
  movaps %xmm10,%xmm11
  mulss  %xmm9,%xmm11
  mulss  %xmm6,%xmm10
  xorps  %xmm8,%xmm7
  divss  %xmm1,%xmm7
  divss  %xmm1,%xmm11
  movss  %xmm7,0xc(%r12)
  movss  0x10(%rsp),%xmm7
  mulss  %xmm7,%xmm2
  mulss  %xmm7,%xmm5
  subss  %xmm10,%xmm2
  xorps  %xmm8,%xmm2
  divss  %xmm1,%xmm2
  subss  %xmm11,%xmm5
  movss  %xmm5,0x10(%r12)
  movaps %xmm3,%xmm5
  mulss  %xmm9,%xmm5
  mulss  %xmm4,%xmm9
  mulss  %xmm6,%xmm4
  mulss  %xmm7,%xmm3
  divss  %xmm1,%xmm5
  movss  %xmm2,0x14(%r12)
  movaps %xmm0,%xmm2
  mulss  %xmm7,%xmm0
  mulss  %xmm6,%xmm2
  subss  %xmm9,%xmm0
  xorps  %xmm8,%xmm0
  divss  %xmm1,%xmm4
  subss  %xmm5,%xmm2
  movss  %xmm2,0x18(%r12)
  divss  %xmm1,%xmm0
  subss  %xmm4,%xmm3
  movss  %xmm3,0x20(%r12)
  movss  %xmm0,0x1c(%r12)
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0x48,%rsp
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L15:
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0x48,%rsp
  mov    %r12,%rdi
  pop    %rbp
  pop    %r12
  jmp    10b0 <mtx3x3LoadIdentity@plt>
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_tag: D13
data_type: f64
name: read_data
arguments: data_tag: D17
data_type: byte[4]

tool: D13: 0.0005

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

assistant: ```c
void mtx3x3Invert(float *mtx, const float *src) {
  float cpy[9];
  float det = src[0] * (src[4] * src[8] - src[7] * src[5]) - src[1] * (src[3] * src[8] - src[6] * src[5]) + src[2] * (src[3] * src[7] - src[6] * src[4]);
  if (fabs(det) < 0.0005) {
    mtx3x3LoadIdentity(mtx);
    return;
  }
  memcpy(cpy, src, 9 * sizeof(float));
  mtx[0] = cpy[4] * cpy[8] - cpy[5] * cpy[7] / det;
  mtx[1] = -(cpy[1] * cpy[8] - cpy[7] * cpy[2]) / det;
  mtx[2] = cpy[1] * cpy[5] - cpy[4] * cpy[2] / det;
  mtx[3] = -(cpy[3] * cpy[8] - cpy[5] * cpy[6]) / det;
  mtx[4] = cpy[0] * cpy[8] - cpy[6] * cpy[2] / det;
  mtx[5] = -(cpy[0] * cpy[5] - cpy[3] * cpy[2]) / det;
  mtx[6] = cpy[3] * cpy[7] - cpy[6] * cpy[4] / det;
  mtx[7] = -(cpy[0] * cpy[7] - cpy[6] * cpy[1]) / det;
  mtx[8] = cpy[0] * cpy[4] - cpy[1] * cpy[3] / det;
}
```