user: 这段汇编代码用C语言表示是什么样的?

```asm
<bansol>:
  endbr64
  push   %r15
  lea    (%rcx,%rcx,1),%eax
  push   %r14
  push   %r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  lea    0x1(%rax),%ebp
  push   %rbx
  mov    %rsi,%rbx
  mov    %eax,-0x4(%rsp)
  test   %ecx,%ecx
  jne    L120
  test   %r8d,%r8d
  jle    L113
  movslq %ebp,%rbp
  movslq %r8d,%r8
  xor    %eax,%eax
  shl    $0x3,%rbp
  nopl   0x0(%rax,%rax,1)
L5:
  movsd  (%rbx,%rax,8),%xmm0
  divsd  (%rdi),%xmm0
  movsd  %xmm0,(%r12,%rax,8)
  add    $0x1,%rax
  add    %rbp,%rdi
  cmp    %r8,%rax
  jne    L5
L113:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L120:
  movsd  (%rsi),%xmm0
  mov    %ecx,%r9d
  lea    -0x1(%r8),%r11d
  movsd  %xmm0,(%rdx)
  cmp    $0x1,%ecx
  je     L123
  cmp    $0x1,%r8d
  jle    L29
  lea    0x10(%rdx),%rcx
  lea    0x1(%r8),%r14d
  mov    %ebp,%r13d
  movslq %r9d,%r15
  mov    $0x2,%r10d
  cs nopw 0x0(%rax,%rax,1)
L107:
  lea    -0x1(%r10),%eax
  movsd  -0x8(%rbx,%r10,8),%xmm1
  cmp    %r9d,%eax
  cmovg  %r9d,%eax
  test   %eax,%eax
  jle    L80
  cltq
  neg    %rax
  lea    0x0(,%rax,8),%rdx
  movslq %r13d,%rax
  add    %r15,%rax
  lea    (%rdi,%rax,8),%rsi
  xor    %eax,%eax
  nop
L87:
  movsd  -0x8(%rsi,%rax,1),%xmm0
  mulsd  -0x10(%rcx,%rax,1),%xmm0
  sub    $0x8,%rax
  subsd  %xmm0,%xmm1
  cmp    %rax,%rdx
  jne    L87
L80:
  add    $0x1,%r10
  movsd  %xmm1,-0x8(%rcx)
  add    %ebp,%r13d
  add    $0x8,%rcx
  cmp    %r10,%r14
  jne    L107
L29:
  movslq %r8d,%rax
  lea    -0x8(%r12,%rax,8),%rcx
  mov    %ebp,%eax
  imul   %r11d,%eax
  movsd  (%rcx),%xmm0
  lea    (%rax,%r9,1),%edx
  movslq %edx,%rdx
  divsd  (%rdi,%rdx,8),%xmm0
  movsd  %xmm0,(%rcx)
  test   %r11d,%r11d
  jle    L113
  mov    -0x4(%rsp),%r10d
  sub    %ebp,%eax
  movslq %r9d,%rcx
  movslq %r11d,%rdx
  cltq
  lea    (%r12,%rdx,8),%rdx
  not    %r10d
  add    %rcx,%rax
  movslq %r10d,%r10
  lea    (%rdi,%rax,8),%rcx
  shl    $0x3,%r10
  nopl   (%rax)
L164:
  mov    %r8d,%eax
  movsd  -0x8(%rdx),%xmm1
  sub    %r11d,%eax
  cmp    %r9d,%eax
  cmovg  %r9d,%eax
  sub    $0x1,%r11d
  test   %eax,%eax
  jle    L154
  lea    0x1(%rax),%esi
  mov    $0x1,%eax
  nopw   0x0(%rax,%rax,1)
L63:
  movsd  (%rcx,%rax,8),%xmm0
  mulsd  -0x8(%rdx,%rax,8),%xmm0
  add    $0x1,%rax
  subsd  %xmm0,%xmm1
  cmp    %rax,%rsi
  jne    L63
L154:
  divsd  (%rcx),%xmm1
  sub    $0x8,%rdx
  movsd  %xmm1,(%rdx)
  add    %r10,%rcx
  test   %r11d,%r11d
  jne    L164
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L123:
  cmp    $0x1,%r8d
  jle    L32
  movslq %ebp,%rcx
  lea    -0x2(%r8),%esi
  xor    %eax,%eax
  shl    $0x3,%rcx
  shl    $0x3,%rsi
  lea    (%rdi,%rcx,1),%rdx
  jmp    L18
  nopl   0x0(%rax)
L145:
  add    $0x8,%rax
L18:
  movsd  (%rdx),%xmm1
  add    %rcx,%rdx
  mulsd  %xmm0,%xmm1
  movsd  0x8(%rbx,%rax,1),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%r12,%rax,1)
  cmp    %rax,%rsi
  jne    L145
L32:
  mov    %ebp,%eax
  movslq %r8d,%rsi
  imul   %r11d,%eax
  shl    $0x3,%rsi
  lea    -0x8(%r12,%rsi,1),%rcx
  movsd  (%rcx),%xmm0
  lea    0x1(%rax),%edx
  movslq %edx,%rdx
  divsd  (%rdi,%rdx,8),%xmm0
  movsd  %xmm0,(%rcx)
  test   %r11d,%r11d
  jle    L113
  mov    -0x4(%rsp),%ecx
  sub    %ebp,%eax
  movslq %r11d,%r11
  lea    -0x18(%r12,%rsi,1),%rsi
  cltq
  lea    0x8(%rdi,%rax,8),%rdx
  not    %ecx
  lea    -0x2(%r8),%edi
  movslq %ecx,%rcx
  shl    $0x3,%rdi
  lea    -0x8(%r12,%r11,8),%rax
  shl    $0x3,%rcx
  sub    %rdi,%rsi
  nopl   0x0(%rax)
L72:
  movsd  0x8(%rdx),%xmm1
  mulsd  0x8(%rax),%xmm1
  sub    $0x8,%rax
  movsd  0x8(%rax),%xmm0
  subsd  %xmm1,%xmm0
  divsd  (%rdx),%xmm0
  add    %rcx,%rdx
  movsd  %xmm0,0x8(%rax)
  cmp    %rax,%rsi
  jne    L72
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void bansol(double *e, double *y, double *c, int m, int n) {
  int i, k, nm1, mi, m2p1;
  double d;
  m2p1 = 2 * m + 1;
  nm1 = n - 1;
  if (m == 0) {
    for (i = 1; i <= n; i++) {
      c[i - 1] = y[i - 1] / e[(i - 1) * m2p1 + m];
    }
  } else {
    if (m == 1) {
      c[0] = y[0];
      for (i = 2; i <= n; i++) {
        c[i - 1] = y[i - 1] - e[(i - 1) * m2p1 - 1 + m] * c[i - 2];
      }
      c[n - 1] = c[n - 1] / e[(n - 1) * m2p1 + m];
      for (i = nm1; i >= 1; i--) {
        c[i - 1] = (c[i - 1] - e[(i - 1) * m2p1 + 1 + m] * c[i]) / e[(i - 1) * m2p1 + m];
      }
    } else {
      c[0] = y[0];
      for (i = 2; i <= n; i++) {
        mi = (m < (i - 1)) ? m : i - 1;
        d = y[i - 1];
        for (k = 1; k <= mi; k++) {
          d -= e[(i - 1) * m2p1 - k + m] * c[i - k - 1];
        }
        c[i - 1] = d;
      }
      c[n - 1] /= e[(n - 1) * m2p1 + m];
      for (i = nm1; i >= 1; i--) {
        mi = (m < (n - i)) ? m : n - i;
        d = c[i - 1];
        for (k = 1; k <= mi; k++) {
          d -= e[(i - 1) * m2p1 + k + m] * c[i + k - 1];
        }
        c[i - 1] = d / e[(i - 1) * m2p1 + m];
      }
    }
  }
}
```