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

```asm
<m_inv6>:
  endbr64
  push   %r15
  movq   D23(%rip),%xmm2
  pxor   %xmm0,%xmm0
  mov    %rdi,%r10
  push   %r14
  movapd D32(%rip),%xmm1
  xor    %r14d,%r14d
  mov    $0x6,%r15d
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  neg    %r12
  push   %rbx
  mov    %r12,%r13
  movups %xmm2,(%rsi)
  movups %xmm2,0x70(%rsi)
  movups %xmm2,0xe0(%rsi)
  movq   D29(%rip),%xmm2
  mov    %rdi,-0x30(%rsp)
  movq   $0x0,-0x20(%rsp)
  movq   $0x4,-0x40(%rsp)
  movq   $0x3,-0x48(%rsp)
  movq   $0x5,-0x38(%rsp)
  movups %xmm0,0x10(%rsi)
  movups %xmm0,0x20(%rsi)
  movups %xmm1,0x30(%rsi)
  movups %xmm0,0x40(%rsi)
  movups %xmm0,0x50(%rsi)
  movups %xmm0,0x60(%rsi)
  movups %xmm0,0x80(%rsi)
  movups %xmm0,0x90(%rsi)
  movups %xmm1,0xa0(%rsi)
  movups %xmm0,0xb0(%rsi)
  movups %xmm0,0xc0(%rsi)
  movups %xmm0,0xd0(%rsi)
  movups %xmm0,0xf0(%rsi)
  movups %xmm0,0x100(%rsi)
  movups %xmm1,0x110(%rsi)
  movsd  D7(%rip),%xmm4
  movq   D46(%rip),%xmm3
  mov    %rsi,-0x18(%rsp)
L161:
  movsd  (%r10),%xmm1
  mov    %r13,%r9
  lea    0x1(%r14),%ebx
  mov    %r14d,%ecx
  mov    %ebx,-0x24(%rsp)
  mov    %r14d,%eax
  neg    %r9
  movapd %xmm1,%xmm5
  andpd  %xmm2,%xmm5
  cmp    $0x5,%r14d
  je     L182
  movsd  0x30(%r10),%xmm0
  lea    0x2(%r14),%ebp
  andpd  %xmm2,%xmm0
  comisd %xmm5,%xmm0
  movapd %xmm0,%xmm6
  maxsd  %xmm5,%xmm6
  cmovbe %r14d,%ebx
  movapd %xmm6,%xmm0
  movslq %ebx,%rdx
  cmp    $0x4,%r14d
  je     L265
  movsd  0x60(%r10),%xmm5
  andpd  %xmm2,%xmm5
  comisd %xmm6,%xmm5
  ja     L371
  mov    -0x48(%rsp),%rbx
  movapd %xmm6,%xmm5
  movslq %ebx,%rdi
  cmp    $0x6,%rbx
  je     L78
L225:
  movsd  0x90(%r10),%xmm0
  mov    -0x40(%rsp),%rbx
  andpd  %xmm2,%xmm0
  comisd %xmm5,%xmm0
  maxsd  %xmm5,%xmm0
  cmovbe %rdx,%rdi
  movslq %ebx,%rdx
  cmp    $0x6,%rbx
  je     L69
  movsd  0xc0(%r10),%xmm5
  mov    -0x38(%rsp),%rbx
  andpd  %xmm2,%xmm5
  comisd %xmm0,%xmm5
  movapd %xmm5,%xmm6
  maxsd  %xmm0,%xmm6
  cmova  %rdx,%rdi
  movslq %ebx,%rdx
  cmp    $0x6,%rbx
  je     L195
  movsd  0xf0(%r10),%xmm0
  andpd  %xmm2,%xmm0
  comisd %xmm6,%xmm0
  maxsd  %xmm6,%xmm0
  cmovbe %rdi,%rdx
L265:
  comisd %xmm0,%xmm4
  ja     L291
  cmp    %r14d,%edx
  je     L44
  lea    (%rdx,%rdx,2),%rdx
  mov    -0x20(%rsp),%r11
  mov    -0x30(%rsp),%rdi
  mov    %rdx,%r12
  lea    (%r14,%rdx,2),%rdx
  shl    $0x3,%rdx
  lea    0x10(,%r11,8),%r8
  shl    $0x4,%r12
  shl    $0x3,%r11
  lea    0x10(%rdx),%rbx
  add    %r12,%rdi
  cmp    %r11,%rbx
  setle  %r11b
  cmp    %r8,%rdx
  setge  %r8b
  or     %r11b,%r8b
  je     L30
  mov    $0x5,%r8d
  sub    %ecx,%r8d
  cmp    $0x1,%r8d
  jbe    L30
  add    -0x30(%rsp),%rdx
  movupd (%r10),%xmm0
  mov    %r15d,%r8d
  movupd (%rdx),%xmm7
  shr    %r8d
  movups %xmm7,(%r10)
  movups %xmm0,(%rdx)
  cmp    $0x1,%r8d
  je     L356
  movupd 0x10(%r10),%xmm0
  movupd 0x10(%rdx),%xmm7
  movups %xmm7,0x10(%r10)
  movups %xmm0,0x10(%rdx)
  cmp    $0x3,%r8d
  jne    L356
  movupd 0x20(%r10),%xmm0
  movupd 0x20(%rdx),%xmm7
  movups %xmm7,0x20(%r10)
  movups %xmm0,0x20(%rdx)
L356:
  mov    %r15d,%r8d
  and    $0xfffffffe,%r8d
  lea    (%r8,%rax,1),%edx
  cmp    %r15d,%r8d
  je     L292
  movslq %edx,%rdx
  movsd  (%r9,%rdx,8),%xmm0
  movsd  (%rdi,%rdx,8),%xmm1
  movsd  %xmm1,(%r9,%rdx,8)
  movsd  %xmm0,(%rdi,%rdx,8)
L292:
  add    -0x18(%rsp),%r12
  movsd  (%rsi),%xmm0
  movsd  (%r12),%xmm1
  movsd  %xmm1,(%rsi)
  movsd  0x8(%r12),%xmm1
  movsd  %xmm0,(%r12)
  movsd  0x8(%rsi),%xmm0
  movsd  %xmm1,0x8(%rsi)
  movsd  0x10(%r12),%xmm1
  movsd  %xmm0,0x8(%r12)
  movsd  0x10(%rsi),%xmm0
  movsd  %xmm1,0x10(%rsi)
  movsd  0x18(%r12),%xmm1
  movsd  %xmm0,0x10(%r12)
  movsd  0x18(%rsi),%xmm0
  movsd  %xmm1,0x18(%rsi)
  movsd  0x20(%r12),%xmm1
  movsd  %xmm0,0x18(%r12)
  movsd  0x20(%rsi),%xmm0
  movsd  %xmm1,0x20(%rsi)
  movsd  0x28(%r12),%xmm1
  movsd  %xmm0,0x20(%r12)
  movsd  0x28(%rsi),%xmm0
  movsd  %xmm1,0x28(%rsi)
  movsd  %xmm0,0x28(%r12)
  movsd  (%r10),%xmm1
L44:
  movapd %xmm1,%xmm5
  mov    %r14d,%r11d
  unpcklpd %xmm5,%xmm5
  cmp    $0x5,%r14
  je     L383
  movupd (%r10),%xmm0
  mov    %r15d,%edx
  shr    %edx
  divpd  %xmm5,%xmm0
  movups %xmm0,(%r10)
  cmp    $0x1,%edx
  je     L348
  movupd 0x10(%r10),%xmm0
  divpd  %xmm5,%xmm0
  movups %xmm0,0x10(%r10)
  cmp    $0x3,%edx
  jne    L348
  movupd 0x20(%r10),%xmm0
  divpd  %xmm5,%xmm0
  movups %xmm0,0x20(%r10)
L348:
  mov    %r15d,%edx
  and    $0xfffffffe,%edx
  add    %edx,%eax
  cmp    %r15d,%edx
  je     L70
L383:
  cltq
  movsd  (%r9,%rax,8),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%r9,%rax,8)
L70:
  movupd 0x10(%rsi),%xmm1
  movupd 0x20(%rsi),%xmm0
  mov    %r15d,%r12d
  mov    %r15d,%ebp
  movupd (%rsi),%xmm6
  lea    0x1(%r14),%rbx
  mov    -0x30(%rsp),%rdx
  shr    %ebp
  divpd  %xmm5,%xmm1
  mov    %rbx,-0x50(%rsp)
  lea    0x2(%r14),%rbx
  xor    %r8d,%r8d
  and    $0xfffffffe,%r12d
  mov    %rbx,-0x10(%rsp)
  mov    -0x18(%rsp),%rax
  lea    (%rdx,%r14,8),%rdi
  add    %r12d,%ecx
  movslq %ecx,%rcx
  divpd  %xmm5,%xmm0
  movups %xmm1,0x10(%rsi)
  divpd  %xmm5,%xmm6
  movups %xmm0,0x20(%rsi)
  movups %xmm6,(%rsi)
  nopl   0x0(%rax,%rax,1)
L355:
  cmp    %r11d,%r8d
  je     L201
  movsd  (%rdi),%xmm1
  lea    0x0(%r13,%rdx,1),%rbx
  movapd %xmm1,%xmm0
  xorpd  %xmm3,%xmm0
  movapd %xmm0,%xmm5
  cmp    $0x8,%rbx
  je     L84
  cmp    $0x5,%r11d
  je     L84
  movupd (%r10),%xmm1
  unpcklpd %xmm5,%xmm5
  movupd (%rdi),%xmm7
  mulpd  %xmm5,%xmm1
  addpd  %xmm7,%xmm1
  movups %xmm1,(%rdi)
  cmp    $0x1,%ebp
  jbe    L341
  movupd 0x10(%r10),%xmm1
  movupd 0x10(%rdi),%xmm7
  mulpd  %xmm5,%xmm1
  addpd  %xmm7,%xmm1
  movups %xmm1,0x10(%rdi)
  cmp    $0x3,%ebp
  jne    L341
  movupd 0x20(%r10),%xmm1
  movupd 0x20(%rdi),%xmm7
  mulpd  %xmm5,%xmm1
  addpd  %xmm7,%xmm1
  movups %xmm1,0x20(%rdi)
L341:
  cmp    %r15d,%r12d
  je     L342
  movsd  (%r9,%rcx,8),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  (%rdx,%rcx,8),%xmm1
  movsd  %xmm1,(%rdx,%rcx,8)
L342:
  movsd  (%rsi),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  (%rax),%xmm1
  movsd  %xmm1,(%rax)
  movsd  0x8(%rsi),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  0x8(%rax),%xmm1
  movsd  %xmm1,0x8(%rax)
  movsd  0x10(%rsi),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  0x10(%rax),%xmm1
  movsd  %xmm1,0x10(%rax)
  movsd  0x18(%rsi),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  0x18(%rax),%xmm1
  movsd  %xmm1,0x18(%rax)
  movsd  0x20(%rsi),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  0x20(%rax),%xmm1
  movsd  %xmm1,0x20(%rax)
  mulsd  0x28(%rsi),%xmm0
  addsd  0x28(%rax),%xmm0
  movsd  %xmm0,0x28(%rax)
L201:
  add    $0x1,%r8d
  add    $0x30,%rax
  add    $0x30,%rdi
  add    $0x30,%rdx
  cmp    $0x6,%r8d
  jne    L355
  addq   $0x1,-0x38(%rsp)
  mov    -0x50(%rsp),%r14
  add    $0x38,%r10
  sub    $0x30,%r13
  addq   $0x1,-0x48(%rsp)
  add    $0x30,%rsi
  addq   $0x1,-0x40(%rsp)
  addq   $0x7,-0x20(%rsp)
  sub    $0x1,%r15d
  jne    L161
L291:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L84:
  mulsd  (%r10),%xmm5
  cmpl   $0x6,-0x24(%rsp)
  addsd  %xmm5,%xmm1
  movsd  %xmm1,(%rdi)
  je     L342
  movsd  0x8(%r10),%xmm1
  mov    -0x50(%rsp),%rbx
  mulsd  %xmm0,%xmm1
  addsd  (%rdx,%rbx,8),%xmm1
  movsd  %xmm1,(%rdx,%rbx,8)
  cmp    $0x4,%r14
  je     L342
  movsd  0x10(%r10),%xmm1
  mov    -0x10(%rsp),%rbx
  mulsd  %xmm0,%xmm1
  addsd  (%rdx,%rbx,8),%xmm1
  movsd  %xmm1,(%rdx,%rbx,8)
  mov    -0x48(%rsp),%rbx
  cmp    $0x6,%rbx
  je     L342
  movsd  0x18(%r10),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  (%rdx,%rbx,8),%xmm1
  movsd  %xmm1,(%rdx,%rbx,8)
  mov    -0x40(%rsp),%rbx
  cmp    $0x6,%rbx
  je     L342
  movsd  0x20(%r10),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  (%rdx,%rbx,8),%xmm1
  movsd  %xmm1,(%rdx,%rbx,8)
  mov    -0x38(%rsp),%rbx
  cmp    $0x6,%rbx
  je     L342
  movsd  0x28(%r10),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  (%rdx,%rbx,8),%xmm1
  movsd  %xmm1,(%rdx,%rbx,8)
  jmp    L342
  nopw   0x0(%rax,%rax,1)
L371:
  mov    -0x48(%rsp),%rbx
  movslq %ebp,%rdx
  movslq %ebx,%rdi
  cmp    $0x6,%rbx
  jne    L225
L78:
  movapd %xmm5,%xmm0
  jmp    L265
L195:
  movapd %xmm6,%xmm0
L69:
  movslq %edi,%rdx
  jmp    L265
L182:
  comisd %xmm5,%xmm4
  jbe    L44
  jmp    L291
L30:
  movslq %eax,%rdx
  movsd  (%rdi,%rdx,8),%xmm0
  movsd  %xmm0,(%r10)
  movsd  %xmm1,(%rdi,%rdx,8)
  movslq -0x24(%rsp),%rdx
  movsd  0x8(%r10),%xmm0
  movsd  (%rdi,%rdx,8),%xmm1
  movsd  %xmm1,0x8(%r10)
  movsd  %xmm0,(%rdi,%rdx,8)
  cmp    $0x6,%ebp
  je     L292
  movslq %ebp,%rbp
  movsd  0x10(%r10),%xmm0
  mov    -0x48(%rsp),%rbx
  movsd  (%rdi,%rbp,8),%xmm1
  movsd  %xmm1,0x10(%r10)
  movsd  %xmm0,(%rdi,%rbp,8)
  cmp    $0x6,%rbx
  je     L292
  movslq %ebx,%rdx
  movsd  0x18(%r10),%xmm0
  mov    -0x40(%rsp),%rbx
  movsd  (%rdi,%rdx,8),%xmm1
  movsd  %xmm1,0x18(%r10)
  movsd  %xmm0,(%rdi,%rdx,8)
  cmp    $0x6,%rbx
  je     L292
  movslq %ebx,%rdx
  movsd  0x20(%r10),%xmm0
  mov    -0x38(%rsp),%rbx
  movsd  (%rdi,%rdx,8),%xmm1
  movsd  %xmm1,0x20(%r10)
  movsd  %xmm0,(%rdi,%rdx,8)
  cmp    $0x6,%rbx
  je     L292
  movslq %ebx,%rdx
  movsd  0x28(%r10),%xmm0
  movsd  (%rdi,%rdx,8),%xmm1
  movsd  %xmm1,0x28(%r10)
  movsd  %xmm0,(%rdi,%rdx,8)
  jmp    L292
```

tool_calls: name: disassemble_data
arguments: label: D23
data_type: f64
name: disassemble_data
arguments: label: D32
data_type: f64[2]
name: disassemble_data
arguments: label: D29
data_type: qword
name: disassemble_data
arguments: label: D7
data_type: f64
name: disassemble_data
arguments: label: D46
data_type: byte[8]

tool: D23: 1

tool: {"D32": [0.0,1.0]}

tool: D29: 9223372036854775807

tool: D7: 1e-07

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

assistant: ```c
void m_inv6(double mat[6][6], double id[6][6]) {
  const double Epsilon = 0.0000001;
  int i, j, s = 0, pindex, pivot = 1;
  double f, Maximum, h;
  for (i = 0; i < 6; i++)
    for (j = 0; j < 6; j++) {
      if (i == j)
        id[i][j] = 1.0;
      else
        id[i][j] = 0.;
    }
  do {
    Maximum = fabs(mat[s][s]);
    if (pivot) {
      pindex = s;
      for (i = s + 1; i < 6; i++)
        if (fabs(mat[i][s]) > Maximum) {
          Maximum = fabs(mat[i][s]);
          pindex = i;
        }
    }
    if (Maximum < Epsilon)
      break;
    if (pivot) {
      if (pindex != s) {
        for (j = s; j < 6; j++) {
          h = mat[s][j];
          mat[s][j] = mat[pindex][j];
          mat[pindex][j] = h;
        }
        for (j = 0; j < 6; j++) {
          h = id[s][j];
          id[s][j] = id[pindex][j];
          id[pindex][j] = h;
        }
      }
    }
    f = mat[s][s];
    for (j = s; j < 6; j++)
      mat[s][j] = mat[s][j] / f;
    for (j = 0; j < 6; j++)
      id[s][j] = id[s][j] / f;
    for (i = 0; i < 6; i++) {
      if (i != s) {
        f = -mat[i][s];
        for (j = s; j < 6; j++)
          mat[i][j] += f * mat[s][j];
        for (j = 0; j < 6; j++)
          id[i][j] += f * id[s][j];
      }
    }
    s++;
  } while (s < 6);
}
```