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

```asm
<solve_linear_system>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  mov    %edi,-0x64(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    -0x64(%rbp),%eax
  movslq %eax,%rdx
  sub    $0x1,%rdx
  mov    %rdx,-0x30(%rbp)
  movslq %eax,%rdx
  mov    %rdx,%rcx
  mov    $0x0,%ebx
  movl   $0x0,-0x58(%rbp)
  jmp    L156
L0:
  mov    -0x58(%rbp),%edx
  mov    %edx,-0x50(%rbp)
  mov    -0x58(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm0
  movq   D22(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x58(%rbp),%edx
  add    $0x1,%edx
  mov    %edx,-0x54(%rbp)
  jmp    L152
L57:
  mov    -0x54(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm0
  movq   D22(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  comisd -0x38(%rbp),%xmm0
  jbe    L107
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x54(%rbp),%edx
  mov    %edx,-0x50(%rbp)
L107:
  addl   $0x1,-0x54(%rbp)
L152:
  mov    -0x54(%rbp),%edx
  cmp    -0x64(%rbp),%edx
  jl     L57
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jp     L45
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jne    L45
  mov    $0x0,%eax
  jmp    L128
L45:
  mov    -0x50(%rbp),%edx
  cmp    -0x58(%rbp),%edx
  je     L101
  movl   $0x0,-0x4c(%rbp)
  jmp    L115
L193:
  mov    -0x58(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x50(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x58(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rsi,%rdx,8),%xmm0
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rdx
  movsd  %xmm0,(%rcx,%rdx,8)
  mov    -0x50(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rdx
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rcx,%rdx,8)
  addl   $0x1,-0x4c(%rbp)
L115:
  mov    -0x4c(%rbp),%edx
  cmp    -0x64(%rbp),%edx
  jl     L193
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  movsd  (%rdx),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x50(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rsi
  mov    -0x78(%rbp),%rdx
  add    %rsi,%rdx
  movsd  (%rcx),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x50(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rdx)
L101:
  mov    -0x58(%rbp),%edx
  add    $0x1,%edx
  mov    %edx,-0x54(%rbp)
  jmp    L30
L126:
  mov    -0x54(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm0
  movq   D17(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mov    -0x58(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x54(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rdx,%rcx
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x1,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rdx,-0x48(%rbp)
  movslq %eax,%rdx
  lea    0x1(%rdx),%rcx
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  imul   %rcx,%rdx
  add    $0x1,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rdx,-0x40(%rbp)
  jmp    L202
L125:
  mov    -0x40(%rbp),%rdx
  lea    0x8(%rdx),%rcx
  mov    %rcx,-0x40(%rbp)
  movsd  (%rdx),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  mov    -0x48(%rbp),%rdx
  lea    0x8(%rdx),%rcx
  mov    %rcx,-0x48(%rbp)
  movsd  (%rdx),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdx)
L202:
  mov    -0x54(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rdx,%rcx
  mov    -0x64(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  cmp    %rdx,-0x48(%rbp)
  jb     L125
  mov    -0x54(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  movsd  (%rdx),%xmm1
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  movsd  (%rdx),%xmm0
  mulsd  -0x20(%rbp),%xmm0
  mov    -0x54(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdx)
  addl   $0x1,-0x54(%rbp)
L30:
  mov    -0x54(%rbp),%edx
  cmp    -0x64(%rbp),%edx
  jl     L126
  addl   $0x1,-0x58(%rbp)
L156:
  mov    -0x64(%rbp),%edx
  sub    $0x1,%edx
  cmp    %edx,-0x58(%rbp)
  jl     L0
  mov    -0x64(%rbp),%edx
  sub    $0x1,%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x64(%rbp),%edx
  sub    $0x1,%edx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L162
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jne    L162
  mov    $0x0,%eax
  jmp    L128
L162:
  mov    -0x64(%rbp),%edx
  sub    $0x1,%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x64(%rbp),%edx
  sub    $0x1,%edx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm1
  mov    -0x64(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x3,%rdx
  lea    -0x8(%rdx),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  movsd  (%rdx),%xmm0
  mov    -0x64(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x3,%rdx
  lea    -0x8(%rdx),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x64(%rbp),%edx
  sub    $0x2,%edx
  mov    %edx,-0x58(%rbp)
  jmp    L169
L102:
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  add    $0x1,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rdx,-0x48(%rbp)
  movslq %eax,%rdx
  lea    0x1(%rdx),%rcx
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  imul   %rcx,%rdx
  add    $0x1,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rdx,-0x40(%rbp)
  jmp    L38
L81:
  mov    -0x48(%rbp),%rdx
  lea    0x8(%rdx),%rcx
  mov    %rcx,-0x48(%rbp)
  movsd  (%rdx),%xmm1
  mov    -0x40(%rbp),%rdx
  lea    0x8(%rdx),%rcx
  mov    %rcx,-0x40(%rbp)
  movsd  (%rdx),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  movsd  (%rdx),%xmm0
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdx)
L38:
  mov    -0x64(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  cmp    %rdx,-0x48(%rbp)
  jb     L81
  mov    -0x58(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm1
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  movsd  (%rdx),%xmm0
  mov    -0x58(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdx)
  subl   $0x1,-0x58(%rbp)
L169:
  cmpl   $0x0,-0x58(%rbp)
  jns    L102
  mov    $0x1,%eax
L128:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D22
type_infered: qword
name: read_data
arguments: label: D17
type_infered: f32[2]

tool: D22: 9223372036854775807

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

assistant: ```c
int solve_linear_system(int n, double A[n][n], double b[n]) {
  int i, j, pivot, k;
  double temp, scale, *p, *q, maxvalue, tmp;
  for (i = 0; i < n - 1; ++i) {
    pivot = i;
    maxvalue = fabs(A[i][i]);
    for (j = i + 1; j < n; ++j) {
      temp = fabs(A[j][i]);
      if (temp > maxvalue) {
        maxvalue = temp;
        pivot = j;
      }
    }
    if (maxvalue == 0.0)
      return 0;
    if (pivot != i) {
      for (k = 0; k < n; k++) {
        tmp = A[i][k];
        A[i][k] = A[pivot][k];
        A[pivot][k] = tmp;
      }
      tmp = b[i];
      b[i] = b[pivot];
      b[pivot] = tmp;
    }
    for (j = i + 1; j < n; ++j) {
      scale = -A[j][i] / A[i][i];
      for (p = A[j] + i + 1, q = A[i] + i + 1; p < A[j] + n;)
        (*p++) += scale * (*q++);
      b[j] += scale * b[i];
    }
  }
  if (fabs(A[n - 1][n - 1]) == 0.0)
    return 0;
  b[n - 1] /= A[n - 1][n - 1];
  for (i = n - 2; i >= 0; --i) {
    for (p = b + i + 1, q = A[i] + i + 1; p < b + n;)
      b[i] -= (*p++) * (*q++);
    b[i] /= A[i][i];
  }
  return 1;
}
```