user: 请将以下的汇编代码转换成C语言代码:

```asm
<nx_dmat3_inv>:
  endbr64
  movsd  (%rsi),%xmm1
  movsd  0x20(%rsi),%xmm2
  movsd  0x38(%rsi),%xmm8
  movsd  0x18(%rsi),%xmm4
  movapd %xmm1,%xmm6
  movsd  0x10(%rsi),%xmm0
  movsd  0x8(%rsi),%xmm3
  mulsd  %xmm2,%xmm6
  movsd  0x30(%rsi),%xmm5
  movsd  0x40(%rsi),%xmm10
  movapd %xmm4,%xmm7
  mulsd  %xmm8,%xmm1
  movsd  0x28(%rsi),%xmm9
  mulsd  %xmm3,%xmm7
  mulsd  %xmm0,%xmm4
  movapd %xmm9,%xmm11
  mulsd  %xmm5,%xmm3
  mulsd  %xmm0,%xmm5
  movapd %xmm10,%xmm0
  mulsd  %xmm1,%xmm11
  mulsd  %xmm6,%xmm0
  subsd  %xmm11,%xmm0
  movapd %xmm10,%xmm11
  mulsd  %xmm7,%xmm11
  subsd  %xmm11,%xmm0
  movapd %xmm9,%xmm11
  mulsd  %xmm3,%xmm11
  addsd  %xmm11,%xmm0
  movapd %xmm8,%xmm11
  mulsd  %xmm4,%xmm11
  addsd  %xmm11,%xmm0
  movapd %xmm2,%xmm11
  mulsd  %xmm5,%xmm11
  subsd  %xmm11,%xmm0
  movapd %xmm0,%xmm11
  andpd  D3(%rip),%xmm11
  comisd D7(%rip),%xmm11
  jbe    L8
  mulsd  %xmm9,%xmm8
  subsd  %xmm3,%xmm1
  subsd  %xmm7,%xmm6
  movsd  D9(%rip),%xmm11
  mulsd  %xmm10,%xmm2
  divsd  %xmm0,%xmm11
  subsd  %xmm8,%xmm2
  mulsd  %xmm11,%xmm2
  mulsd  %xmm11,%xmm6
  movsd  %xmm2,(%rdi)
  movsd  0x8(%rsi),%xmm2
  movsd  0x38(%rsi),%xmm8
  mulsd  0x40(%rsi),%xmm2
  mulsd  0x10(%rsi),%xmm8
  subsd  %xmm8,%xmm2
  movq   D26(%rip),%xmm8
  xorpd  %xmm8,%xmm1
  mulsd  %xmm11,%xmm1
  xorpd  %xmm8,%xmm2
  mulsd  %xmm11,%xmm2
  movsd  %xmm2,0x8(%rdi)
  movsd  0x8(%rsi),%xmm2
  movsd  0x20(%rsi),%xmm9
  mulsd  0x28(%rsi),%xmm2
  mulsd  0x10(%rsi),%xmm9
  subsd  %xmm9,%xmm2
  mulsd  %xmm11,%xmm2
  movsd  %xmm2,0x10(%rdi)
  movsd  0x18(%rsi),%xmm2
  movsd  0x30(%rsi),%xmm9
  mulsd  0x40(%rsi),%xmm2
  mulsd  0x28(%rsi),%xmm9
  subsd  %xmm9,%xmm2
  xorpd  %xmm8,%xmm2
  mulsd  %xmm11,%xmm2
  movsd  %xmm2,0x18(%rdi)
  movsd  (%rsi),%xmm2
  mulsd  0x40(%rsi),%xmm2
  subsd  %xmm5,%xmm2
  mulsd  %xmm11,%xmm2
  movsd  %xmm2,0x20(%rdi)
  movsd  (%rsi),%xmm2
  mulsd  0x28(%rsi),%xmm2
  subsd  %xmm4,%xmm2
  xorpd  %xmm8,%xmm2
  mulsd  %xmm11,%xmm2
  movsd  %xmm2,0x28(%rdi)
  movsd  0x18(%rsi),%xmm2
  movsd  0x30(%rsi),%xmm4
  mulsd  0x38(%rsi),%xmm2
  mulsd  0x20(%rsi),%xmm4
  movsd  %xmm1,0x38(%rdi)
  movsd  %xmm6,0x40(%rdi)
  subsd  %xmm4,%xmm2
  mulsd  %xmm11,%xmm2
  movsd  %xmm2,0x30(%rdi)
L8:
  ret
```

tool_calls: name: read_data
arguments: data_label: D3
data_type: qword[2]
name: read_data
arguments: data_label: D7
data_type: f64[2]
name: read_data
arguments: data_label: D9
data_type: f64
name: read_data
arguments: data_label: D26
data_type: byte[8]

tool: {"D3": [0x7fffffffffffffff,0x0000000000000000]}

tool: {"D7": [0.0,-0.0]}

tool: D9: 1

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

assistant: ```c
double nx_dmat3_inv(double *M3i, const double *M3) {
  const double t4 = M3[0] * M3[4];
  const double t6 = M3[0] * M3[7];
  const double t8 = M3[3] * M3[1];
  const double t10 = M3[6] * M3[1];
  const double t12 = M3[3] * M3[2];
  const double t14 = M3[6] * M3[2];
  double detM3 = t4 * M3[8] - t6 * M3[5] - t8 * M3[8] + t10 * M3[5] + t12 * M3[7] - t14 * M3[4];
  if (fabs(detM3) > 0.0) {
    const double t17 = 1.0 / detM3;
    M3i[0] = (M3[4] * M3[8] - M3[7] * M3[5]) * t17;
    M3i[1] = -(M3[1] * M3[8] - M3[7] * M3[2]) * t17;
    M3i[2] = (M3[1] * M3[5] - M3[4] * M3[2]) * t17;
    M3i[3] = -(M3[3] * M3[8] - M3[6] * M3[5]) * t17;
    M3i[4] = (M3[0] * M3[8] - t14) * t17;
    M3i[5] = -(M3[0] * M3[5] - t12) * t17;
    M3i[6] = (M3[3] * M3[7] - M3[6] * M3[4]) * t17;
    M3i[7] = -(t6 - t10) * t17;
    M3i[8] = (t4 - t8) * t17;
  }
  return detM3;
}
```