user: What would the C source look like for the assembly code provided here:

```asm
<invers>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %r8,%r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  push   %rbx
  mov    %rdx,-0x8(%rsp)
  test   %edi,%edi
  jle    L174
  mov    %rsi,%rbx
  movapd %xmm0,%xmm4
  xor    %r9d,%r9d
  movslq %edi,%rcx
  movsd  D18(%rip),%xmm1
  pxor   %xmm2,%xmm2
  nopw   0x0(%rax,%rax,1)
L44:
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L92:
  movapd %xmm1,%xmm0
  cmp    %eax,%r9d
  je     L125
  movapd %xmm2,%xmm0
L125:
  movsd  %xmm0,(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    %rcx,%rax
  jne    L92
  lea    0x1(%r9),%eax
  add    $0x50,%rdx
  cmp    %eax,%edi
  je     L172
  mov    %eax,%r9d
  jmp    L44
L172:
  movsd  %xmm1,(%r12)
  mov    %rbx,%r11
  mov    %rbx,%rsi
  xor    %r8d,%r8d
  movl   $0x0,0x0(%r13)
  mov    -0x8(%rsp),%rdi
  xor    %r10d,%r10d
  movq   D10(%rip),%xmm3
  movq   D16(%rip),%xmm5
  nopl   0x0(%rax,%rax,1)
L102:
  movsd  (%r11),%xmm2
  mov    %r8d,%ebp
  add    $0x1,%r8d
  movapd %xmm2,%xmm6
  andpd  %xmm3,%xmm6
  cmp    %r9d,%ebp
  jge    L106
  mov    %r11,%rdx
  movapd %xmm6,%xmm1
  movslq %ebp,%r14
  movslq %r8d,%rax
  jmp    L147
L175:
  movslq %r15d,%rax
L147:
  movsd  0x50(%rdx),%xmm0
  lea    0x1(%rax),%r15d
  andpd  %xmm3,%xmm0
  comisd %xmm1,%xmm0
  maxsd  %xmm1,%xmm0
  cmova  %rax,%r14
  movapd %xmm0,%xmm1
  add    $0x50,%rdx
  cmp    %r9d,%eax
  jne    L175
  cmp    %r10d,%r14d
  jne    L103
L106:
  comisd %xmm6,%xmm4
  jbe    L148
L135:
  movl   $0x1,0x0(%r13)
L11:
  add    $0x50,%rsi
  add    $0x50,%rdi
  add    $0x58,%r11
  cmp    %r9d,%ebp
  je     L79
  mov    0x0(%r13),%eax
  add    $0x1,%r10
  test   %eax,%eax
  je     L102
L79:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L103:
  lea    (%r14,%r14,4),%rdx
  xor    %eax,%eax
  shl    $0x4,%rdx
  lea    (%rbx,%rdx,1),%r14
  add    -0x8(%rsp),%rdx
  nopl   0x0(%rax,%rax,1)
L196:
  movsd  (%rsi,%rax,8),%xmm0
  movsd  (%r14,%rax,8),%xmm1
  movsd  %xmm1,(%rsi,%rax,8)
  movsd  %xmm0,(%r14,%rax,8)
  movsd  (%rdi,%rax,8),%xmm0
  movsd  (%rdx,%rax,8),%xmm1
  movsd  %xmm1,(%rdi,%rax,8)
  movsd  %xmm0,(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    %rcx,%rax
  jne    L196
  movsd  (%r12),%xmm0
  xorpd  %xmm5,%xmm0
  movsd  %xmm0,(%r12)
  movsd  (%r11),%xmm2
  movapd %xmm2,%xmm6
  andpd  %xmm3,%xmm6
  comisd %xmm6,%xmm4
  ja     L135
L148:
  mulsd  (%r12),%xmm2
  xor    %eax,%eax
  movsd  %xmm2,(%r12)
  movsd  (%r11),%xmm1
  nopl   (%rax)
L13:
  movsd  (%rsi,%rax,8),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rsi,%rax,8)
  movsd  (%rdi,%rax,8),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdi,%rax,8)
  add    $0x1,%rax
  cmp    %rcx,%rax
  jne    L13
  mov    -0x8(%rsp),%r14
  mov    %rbx,%rdx
  xor    %r15d,%r15d
  nopl   0x0(%rax,%rax,1)
L2:
  cmp    %r10d,%r15d
  je     L84
  movsd  (%rdx,%r10,8),%xmm1
  xor    %eax,%eax
  nopl   (%rax)
L34:
  movsd  (%rsi,%rax,8),%xmm2
  movsd  (%rdx,%rax,8),%xmm0
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
  movsd  (%rdi,%rax,8),%xmm2
  movsd  (%r14,%rax,8),%xmm0
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  movsd  %xmm0,(%r14,%rax,8)
  add    $0x1,%rax
  cmp    %rcx,%rax
  jne    L34
L84:
  lea    0x1(%r15),%eax
  add    $0x50,%rdx
  add    $0x50,%r14
  cmp    %r9d,%r15d
  je     L11
  mov    %eax,%r15d
  jmp    L2
L174:
  mov    D18(%rip),%rax
  mov    %rax,(%rcx)
  movl   $0x0,(%r8)
  jmp    L79
```

tool_calls: name: extract_symbolic_data
arguments: label: D18
data_type: f64
name: extract_symbolic_data
arguments: label: D10
data_type: qword
name: extract_symbolic_data
arguments: label: D16
data_type: f32[2]

tool: D18: 1

tool: D10: 9223372036854775807

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

assistant: ```c
void invers(int n, double a[10][10], double eps, double b[10][10], double *det_a, int *err) {
  int i, j, k, pozmax;
  double amax, aux;
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
      if (i == j)
        b[i][j] = 1.0;
      else
        b[i][j] = 0.0;
  *det_a = 1.0;
  k = 0;
  *err = 0;
  while ((k < n) && (*err == 0)) {
    amax = fabs(a[k][k]);
    pozmax = k;
    for (i = k + 1; i < n; i++)
      if (fabs(a[i][k]) > amax) {
        amax = fabs(a[i][k]);
        pozmax = i;
      };
    if (k != pozmax) {
      for (j = 0; j < n; j++) {
        aux = a[k][j];
        a[k][j] = a[pozmax][j];
        a[pozmax][j] = aux;
        aux = b[k][j];
        b[k][j] = b[pozmax][j];
        b[pozmax][j] = aux;
      };
      *det_a = -*det_a;
    };
    if (fabs(a[k][k]) < eps)
      *err = 1;
    else {
      *det_a = *det_a * a[k][k];
      aux = a[k][k];
      for (j = 0; j < n; j++) {
        a[k][j] = a[k][j] / aux;
        b[k][j] = b[k][j] / aux;
      };
      for (i = 0; i < n; i++)
        if (i != k) {
          aux = a[i][k];
          for (j = 0; j < n; j++) {
            a[i][j] = a[i][j] - a[k][j] * aux;
            b[i][j] = b[i][j] - b[k][j] * aux;
          }
        }
    }
    k++;
  }
}
```