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

```asm
<kernel_ludcmp>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    %r8,-0x48(%rbp)
  movl   $0x0,-0x14(%rbp)
  jmp    L143
L17:
  movl   $0x0,-0x10(%rbp)
  jmp    L132
L138:
  mov    -0x14(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0xc(%rbp)
  jmp    L15
L91:
  mov    -0x14(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  mov    -0xc(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  addl   $0x1,-0xc(%rbp)
L15:
  mov    -0xc(%rbp),%eax
  cmp    -0x10(%rbp),%eax
  jl     L91
  mov    -0x10(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  mov    -0x14(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  movsd  -0x8(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  mov    -0x10(%rbp),%eax
  cltq
  movsd  %xmm0,(%rdx,%rax,8)
  addl   $0x1,-0x10(%rbp)
L132:
  mov    -0x10(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L138
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L47
L32:
  mov    -0x14(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0xc(%rbp)
  jmp    L102
L177:
  mov    -0x14(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  mov    -0xc(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  addl   $0x1,-0xc(%rbp)
L102:
  mov    -0xc(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L177
  mov    -0x14(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
  addl   $0x1,-0x10(%rbp)
L47:
  mov    -0x10(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L32
  addl   $0x1,-0x14(%rbp)
L143:
  mov    -0x14(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L17
  movl   $0x0,-0x14(%rbp)
  jmp    L139
L133:
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L0
L6:
  mov    -0x14(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  addl   $0x1,-0x10(%rbp)
L0:
  mov    -0x10(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L6
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x14(%rbp)
L139:
  mov    -0x14(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L133
  mov    -0x24(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x14(%rbp)
  jmp    L127
L97:
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x10(%rbp)
  jmp    L41
L113:
  mov    -0x14(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  addl   $0x1,-0x10(%rbp)
L41:
  mov    -0x10(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L113
  mov    -0x14(%rbp),%eax
  cltq
  imul   $0x3e80,%rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  subl   $0x1,-0x14(%rbp)
L127:
  cmpl   $0x0,-0x14(%rbp)
  jns    L97
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void kernel_ludcmp(int n, double A[2000 + 0][2000 + 0], double b[2000 + 0], double x[2000 + 0], double y[2000 + 0]) {
  int i, j, k;
  double w;
#pragma scop
  for (i = 0; i < n; i++) {
    for (j = 0; j < i; j++) {
      w = A[i][j];
      for (k = 0; k < j; k++) {
        w -= A[i][k] * A[k][j];
      }
      A[i][j] = w / A[j][j];
    }
    for (j = i; j < n; j++) {
      w = A[i][j];
      for (k = 0; k < i; k++) {
        w -= A[i][k] * A[k][j];
      }
      A[i][j] = w;
    }
  }
  for (i = 0; i < n; i++) {
    w = b[i];
    for (j = 0; j < i; j++)
      w -= A[i][j] * y[j];
    y[i] = w;
  }
  for (i = n - 1; i >= 0; i--) {
    w = y[i];
    for (j = i + 1; j < n; j++)
      w -= A[i][j] * x[j];
    x[i] = w / A[i][i];
  }
#pragma endscop
}
```