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

```asm
<ruinv>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  movl   $0x0,-0x3c(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L66:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  movq   D37(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  comisd -0x38(%rbp),%xmm0
  jbe    L19
  movsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
L19:
  addl   $0x1,-0x3c(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  add    $0x1,%rax
  shl    $0x3,%rax
  add    %rax,-0x28(%rbp)
L58:
  mov    -0x3c(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jl     L66
  movsd  -0x38(%rbp),%xmm1
  movsd  D26(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movl   $0x0,-0x3c(%rbp)
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L4
L1:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  movq   D37(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  -0x38(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L100
  mov    $0xffffffff,%eax
  jmp    L80
L100:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D9(%rip),%xmm0
  divsd  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L27
L74:
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  jmp    L83
L21:
  mov    -0x10(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x18(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x30(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,-0x10(%rbp)
L83:
  mov    -0x10(%rbp),%rax
  cmp    -0x28(%rbp),%rax
  jb     L21
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x4c(%rbp),%eax
  cltq
  add    $0x1,%rax
  shl    $0x3,%rax
  add    %rax,-0x8(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,-0x20(%rbp)
L27:
  mov    -0x20(%rbp),%rax
  cmp    -0x28(%rbp),%rax
  jb     L74
  addl   $0x1,-0x3c(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  add    $0x1,%rax
  shl    $0x3,%rax
  add    %rax,-0x28(%rbp)
L4:
  mov    -0x3c(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jl     L1
  mov    $0x0,%eax
L80:
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D37
data_type: qword
name: disassemble_data
arguments: data_label: D26
data_type: byte[8]
name: disassemble_data
arguments: data_label: D9
data_type: f64

tool: D37: 9223372036854775807

tool: {"D26": [0xbc,0x89,0xd8,0x97,0xb2,0xd2,0x9c,0x3c]}

tool: D9: 1

assistant: ```c
int ruinv(double *a, int n) {
  int j;
  double fabs();
  double tt, z, *p, *q, *r, *s, *t;
  for (j = 0, tt = 0., p = a; j < n; ++j, p += n + 1)
    if ((z = fabs(*p)) > tt)
      tt = z;
  tt *= 1.e-16;
  for (j = 0, p = a; j < n; ++j, p += n + 1) {
    if (fabs(*p) < tt)
      return -1;
    *p = 1. / *p;
    for (q = a + j, t = a; q < p; t += n + 1, q += n) {
      for (s = q, r = t, z = 0.; s < p; s += n)
        z -= *s * *r++;
      *q = z * *p;
    }
  }
  return 0;
}
```