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

```asm
<solve_linear_system>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%r9d
  mov    %rsi,-0x20(%rsp)
  mov    %rdx,%rdi
  mov    %rdx,-0x18(%rsp)
  movslq %r9d,%rbx
  mov    %rbx,-0x10(%rsp)
  lea    -0x1(%r9),%edx
  mov    %edx,-0x4(%rsp)
  test   %edx,%edx
  jle    L104
  lea    0x8(,%rbx,8),%rdx
  mov    %rdx,-0x40(%rsp)
  lea    0x0(,%rbx,8),%rdx
  lea    (%rsi,%rdx,1),%r15
  mov    %rsi,-0x50(%rsp)
  lea    0x8(%rdi),%r8
  lea    0x8(%rsi),%r13
  lea    -0x2(%r9),%eax
  add    $0x2,%rax
  mov    %rax,-0x38(%rsp)
  shl    $0x4,%rbx
  mov    %rbx,-0x30(%rsp)
  mov    $0x1,%ebx
  mov    $0x0,%r12d
  movq   D31(%rip),%xmm4
  movapd %xmm4,%xmm2
  pxor   %xmm6,%xmm6
  lea    -0x1(%r9),%eax
  mov    %eax,-0x8(%rsp)
  mov    %rdi,%rax
  add    $0x10,%rax
  mov    %rax,-0x28(%rsp)
  movq   D36(%rip),%xmm3
  movapd %xmm6,%xmm5
  jmp    L131
L232:
  mov    %edi,%eax
L81:
  movsd  (%rcx),%xmm0
  andpd  %xmm2,%xmm0
  comisd %xmm1,%xmm0
  maxsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  cmova  %eax,%esi
  lea    0x1(%rax),%edi
  add    %rdx,%rcx
  cmp    %edi,%r9d
  jne    L232
  ucomisd %xmm6,%xmm0
  jp     L182
  ucomisd %xmm5,%xmm0
  je     L44
L182:
  cmp    %r12d,%esi
  jne    L129
L8:
  cmp    %r14d,%r9d
  jle    L113
  lea    0x8(%r15),%r10
  mov    -0x50(%rsp),%r11
  add    -0x30(%rsp),%r11
  mov    -0x8(%rsp),%eax
  sub    -0x44(%rsp),%eax
  add    %r12,%rax
  mov    -0x28(%rsp),%rdi
  lea    (%rdi,%rax,8),%r14
  mov    %r8,%rdi
L183:
  mov    %r10,%rax
  movsd  -0x8(%r10),%xmm1
  xorpd  %xmm3,%xmm1
  divsd  -0x8(%rbp),%xmm1
  mov    %r11,%rsi
  cmp    %r11,%r10
  jae    L133
  mov    %rbp,%rcx
L248:
  add    $0x8,%rcx
  add    $0x8,%rax
  movapd %xmm1,%xmm0
  mulsd  -0x8(%rcx),%xmm0
  addsd  -0x8(%rax),%xmm0
  movsd  %xmm0,-0x8(%rax)
  cmp    %rsi,%rax
  jb     L248
L133:
  mulsd  -0x8(%r8),%xmm1
  addsd  (%rdi),%xmm1
  movsd  %xmm1,(%rdi)
  add    %rdx,%r10
  add    %rdx,%r11
  add    $0x8,%rdi
  cmp    %r14,%rdi
  jne    L183
L113:
  add    $0x1,%r12
  add    $0x1,%rbx
  mov    -0x40(%rsp),%rdi
  add    %rdi,%r15
  add    %rdx,-0x50(%rsp)
  add    $0x8,%r8
  add    %rdi,%r13
  cmp    -0x38(%rsp),%rbx
  je     L104
L131:
  mov    %r12d,%esi
  mov    -0x50(%rsp),%r10
  mov    %r13,%rbp
  movsd  -0x8(%r13),%xmm0
  movapd %xmm0,%xmm1
  andpd  %xmm4,%xmm1
  mov    %ebx,-0x44(%rsp)
  mov    %ebx,%eax
  mov    %ebx,%r14d
  cmp    %ebx,%r9d
  jle    L72
  mov    %r15,%rcx
  jmp    L81
L129:
  test   %edi,%edi
  jle    L89
  movslq %esi,%rdi
  imul   %rdx,%rdi
  add    -0x20(%rsp),%rdi
  mov    %eax,%eax
  mov    $0x0,%ecx
L130:
  movsd  (%r10,%rcx,8),%xmm0
  movsd  (%rdi,%rcx,8),%xmm1
  movsd  %xmm1,(%r10,%rcx,8)
  movsd  %xmm0,(%rdi,%rcx,8)
  mov    %rcx,%r11
  add    $0x1,%rcx
  cmp    %rax,%r11
  jne    L130
L89:
  movsd  -0x8(%r8),%xmm0
  movslq %esi,%rsi
  mov    -0x18(%rsp),%rax
  lea    (%rax,%rsi,8),%rax
  movsd  (%rax),%xmm1
  movsd  %xmm1,-0x8(%r8)
  movsd  %xmm0,(%rax)
  jmp    L8
L104:
  mov    -0x10(%rsp),%rax
  lea    0x0(,%rax,8),%rdx
  movslq -0x4(%rsp),%rax
  mov    %rax,%rcx
  imul   %rdx,%rcx
  mov    -0x20(%rsp),%rbx
  lea    (%rbx,%rax,8),%rax
  movsd  (%rax,%rcx,1),%xmm1
  ucomisd D8(%rip),%xmm1
  jp     L121
  mov    $0x0,%eax
  je     L25
L121:
  mov    -0x18(%rsp),%r14
  lea    -0x8(%r14,%rdx,1),%rax
  movsd  (%rax),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    %r9d,%eax
  sub    $0x2,%eax
  js     L68
  cltq
  lea    0x1(%rax),%rcx
  lea    0x0(,%rcx,8),%rsi
  lea    (%r14,%rsi,1),%rdi
  mov    -0x10(%rsp),%r15
  lea    0x1(%r15),%r10
  mov    %r15,%rbx
  not    %rbx
  shl    $0x3,%rbx
  imul   %r15,%rcx
  mov    -0x20(%rsp),%rbp
  lea    0x0(%rbp,%rcx,8),%r11
  mov    %rbx,%r8
  imul   %r10,%rax
  lea    0x8(%rbp,%rax,8),%r10
  lea    -0x8(%r14,%rsi,1),%rax
  lea    -0x2(%r9),%ecx
  shl    $0x3,%rcx
  sub    %rcx,%rax
  mov    %rax,%r9
  lea    (%r14,%rdx,1),%rsi
L5:
  mov    %rdi,%rcx
  mov    %r10,%rdx
  cmp    %rsi,%rdi
  jae    L234
  mov    %rdi,%rax
L222:
  add    $0x8,%rax
  add    $0x8,%rdx
  movsd  -0x8(%rax),%xmm1
  mulsd  -0x8(%rdx),%xmm1
  movsd  -0x8(%rcx),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rcx)
  cmp    %rsi,%rax
  jb     L222
L234:
  movsd  -0x8(%rcx),%xmm0
  divsd  -0x10(%r11),%xmm0
  movsd  %xmm0,-0x8(%rcx)
  sub    $0x8,%rdi
  add    %rbx,%r11
  add    %r8,%r10
  cmp    %r9,%rdi
  jne    L5
  mov    $0x1,%eax
  jmp    L25
L44:
  mov    $0x0,%eax
L25:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L68:
  mov    $0x1,%eax
  jmp    L25
L72:
  ucomisd D8(%rip),%xmm0
  jp     L113
  jne    L113
  mov    $0x0,%eax
  jmp    L25
```

tool_calls: name: parse_data
arguments: tag: D31
type_infered: qword
name: parse_data
arguments: tag: D36
type_infered: f32[2]
name: parse_data
arguments: tag: D8
type_infered: f32[2]

tool: D31: 9223372036854775807

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

tool: {"D8": [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;
}
```