user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<_matrix_3x3_invert>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_3x3_determinant@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x34(%rbp)
  pxor   %xmm0,%xmm0
  ucomiss -0x34(%rbp),%xmm0
  jp     L6
  pxor   %xmm0,%xmm0
  ucomiss -0x34(%rbp),%xmm0
  je     L13
L6:
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_2x2_determinant@plt>
  movd   %xmm0,%eax
  mov    -0x50(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_2x2_determinant@plt>
  movd   %xmm0,%eax
  mov    -0x50(%rbp),%rdx
  mov    %eax,0x4(%rdx)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_2x2_determinant@plt>
  movd   %xmm0,%eax
  mov    -0x50(%rbp),%rdx
  mov    %eax,0x8(%rdx)
  mov    -0x48(%rbp),%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x50(%rbp),%rax
  lea    0xc(%rax),%rbx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_2x2_determinant@plt>
  movd   %xmm0,%eax
  mov    %eax,(%rbx)
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x50(%rbp),%rax
  lea    0xc(%rax),%rbx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_2x2_determinant@plt>
  movd   %xmm0,%eax
  mov    %eax,0x4(%rbx)
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x50(%rbp),%rax
  lea    0xc(%rax),%rbx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_2x2_determinant@plt>
  movd   %xmm0,%eax
  mov    %eax,0x8(%rbx)
  mov    -0x48(%rbp),%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x50(%rbp),%rax
  lea    0x18(%rax),%rbx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_2x2_determinant@plt>
  movd   %xmm0,%eax
  mov    %eax,(%rbx)
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x50(%rbp),%rax
  lea    0x18(%rax),%rbx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_2x2_determinant@plt>
  movd   %xmm0,%eax
  mov    %eax,0x4(%rbx)
  mov    -0x48(%rbp),%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x50(%rbp),%rax
  lea    0x18(%rax),%rbx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <_matrix_2x2_determinant@plt>
  movd   %xmm0,%eax
  mov    %eax,0x8(%rbx)
  movss  D2(%rip),%xmm0
  divss  -0x34(%rbp),%xmm0
  movd   %xmm0,%edx
  mov    -0x50(%rbp),%rax
  movd   %edx,%xmm0
  mov    %rax,%rdi
  call   <_matrix_3x3_mul_constant@plt>
  jmp    L4
L13:
  nop
L4:
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L35
  call   <__stack_chk_fail@plt>
L35:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D2
datatype: byte[4]

tool: {"D2": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void _matrix_3x3_invert(float m1[3][3], float m2[3][3]) {
  float tmp[2][2];
  float determinant = _matrix_3x3_determinant(m1);
  if (determinant == 0.0f)
    return;
  tmp[0][0] = m1[1][1];
  tmp[0][1] = m1[1][2];
  tmp[1][0] = m1[2][1];
  tmp[1][1] = m1[2][2];
  m2[0][0] = _matrix_2x2_determinant(tmp);
  tmp[0][0] = m1[1][0];
  tmp[0][1] = m1[1][2];
  tmp[1][0] = m1[2][0];
  tmp[1][1] = m1[2][2];
  m2[0][1] = _matrix_2x2_determinant(tmp);
  tmp[0][0] = m1[1][0];
  tmp[0][1] = m1[1][1];
  tmp[1][0] = m1[2][0];
  tmp[1][1] = m1[2][1];
  m2[0][2] = _matrix_2x2_determinant(tmp);
  tmp[0][0] = m1[0][1];
  tmp[0][1] = m1[0][2];
  tmp[1][0] = m1[2][1];
  tmp[1][1] = m1[2][2];
  m2[1][0] = _matrix_2x2_determinant(tmp);
  tmp[0][0] = m1[0][0];
  tmp[0][1] = m1[0][2];
  tmp[1][0] = m1[2][0];
  tmp[1][1] = m1[2][2];
  m2[1][1] = _matrix_2x2_determinant(tmp);
  tmp[0][0] = m1[0][0];
  tmp[0][1] = m1[0][1];
  tmp[1][0] = m1[2][0];
  tmp[1][1] = m1[2][1];
  m2[1][2] = _matrix_2x2_determinant(tmp);
  tmp[0][0] = m1[0][1];
  tmp[0][1] = m1[0][2];
  tmp[1][0] = m1[1][1];
  tmp[1][1] = m1[1][2];
  m2[2][0] = _matrix_2x2_determinant(tmp);
  tmp[0][0] = m1[0][0];
  tmp[0][1] = m1[0][2];
  tmp[1][0] = m1[1][0];
  tmp[1][1] = m1[1][2];
  m2[2][1] = _matrix_2x2_determinant(tmp);
  tmp[0][0] = m1[0][0];
  tmp[0][1] = m1[0][1];
  tmp[1][0] = m1[1][0];
  tmp[1][1] = m1[1][1];
  m2[2][2] = _matrix_2x2_determinant(tmp);
  _matrix_3x3_mul_constant(m2, 1.0f / determinant);
}
```