user: 下面的汇编指令对应的C源代码是什么:

```asm
<bansol>:
  endbr64
  push   %r15
  lea    (%rcx,%rcx,1),%eax
  mov    %rdi,%r9
  mov    %r8d,%r15d
  push   %r14
  mov    %rdx,%rdi
  lea    0x1(%rax),%r14d
  push   %r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  push   %rbx
  mov    %eax,-0x14(%rsp)
  test   %ecx,%ecx
  jne    L84
  test   %r8d,%r8d
  jle    L152
  movslq %r8d,%rsi
  movslq %r14d,%rdx
  xor    %r10d,%r10d
  lea    -0x8(,%rsi,8),%rcx
  mov    %r10,%r8
  mov    %rcx,%rax
  imul   %rdx,%rax
  test   %r14d,%r14d
  cmovs  %rax,%r8
  add    %rdi,%rcx
  add    %r9,%r8
  cmp    %rcx,%r8
  seta   %cl
  test   %r14d,%r14d
  cmovs  %r10,%rax
  add    %r9,%rax
  cmp    %rax,%rdi
  seta   %al
  or     %al,%cl
  je     L248
  lea    0x8(%r12),%rax
  cmp    %rax,%rdi
  setne  %cl
  cmp    $0x1,%r15d
  setne  %al
  test   %al,%cl
  je     L248
  mov    %r15d,%ecx
  mov    %rdx,%r8
  lea    0x0(,%rdx,8),%rsi
  xor    %eax,%eax
  shr    %ecx
  shl    $0x4,%r8
  mov    %r9,%rdx
  shl    $0x4,%rcx
  nopl   0x0(%rax,%rax,1)
L16:
  movsd  (%rdx),%xmm1
  movupd (%r12,%rax,1),%xmm0
  movhpd (%rdx,%rsi,1),%xmm1
  add    %r8,%rdx
  divpd  %xmm1,%xmm0
  movups %xmm0,(%rdi,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rcx
  jne    L16
  mov    %r15d,%edx
  mov    %r15d,%eax
  and    $0xfffffffe,%edx
  or     $0x1,%eax
  and    $0x1,%r15d
  je     L152
  imul   %r14d,%edx
  cltq
  shl    $0x3,%rax
  movsd  -0x8(%r12,%rax,1),%xmm0
  movslq %edx,%rdx
  divsd  (%r9,%rdx,8),%xmm0
  movsd  %xmm0,-0x8(%rdi,%rax,1)
L152:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L84:
  movsd  (%r12),%xmm0
  mov    %ecx,%esi
  lea    -0x1(%r8),%r11d
  movsd  %xmm0,(%rdx)
  cmp    $0x1,%ecx
  je     L109
  cmp    $0x1,%r8d
  jle    L91
  movslq %ecx,%rcx
  mov    %r11d,-0x10(%rsp)
  lea    0x1(%r8),%eax
  lea    -0x8(%rdx),%rbx
  mov    %rcx,-0x20(%rsp)
  mov    %r14d,%r10d
  mov    $0x2,%ebp
  mov    %rax,%r15
  mov    %r8d,-0xc(%rsp)
  nopl   0x0(%rax,%rax,1)
L214:
  lea    -0x1(%rbp),%ecx
  movsd  -0x8(%r12,%rbp,8),%xmm1
  mov    %ebp,%eax
  cmp    %esi,%ecx
  cmovg  %esi,%ecx
  test   %ecx,%ecx
  jle    L179
  mov    %ecx,%r13d
  cmp    $0x1,%ecx
  je     L229
  mov    %ecx,%r8d
  movslq %r10d,%rdx
  add    -0x20(%rsp),%rdx
  shr    %r8d
  lea    -0x10(%r9,%rdx,8),%r11
  xor    %edx,%edx
  neg    %r8
  shl    $0x4,%r8
  nopl   (%rax)
L139:
  movupd (%rbx,%rdx,1),%xmm0
  movupd (%r11,%rdx,1),%xmm2
  sub    $0x10,%rdx
  shufpd $0x1,%xmm0,%xmm0
  shufpd $0x1,%xmm2,%xmm2
  mulpd  %xmm2,%xmm0
  subsd  %xmm0,%xmm1
  unpckhpd %xmm0,%xmm0
  subsd  %xmm0,%xmm1
  cmp    %rdx,%r8
  jne    L139
  and    $0xfffffffe,%ecx
  mov    %ecx,%edx
  lea    0x1(%rcx),%ecx
  cmp    %r13d,%edx
  je     L179
L229:
  mov    %r10d,%edx
  sub    %ecx,%eax
  sub    %ecx,%edx
  cltq
  add    %esi,%edx
  movsd  -0x8(%rdi,%rax,8),%xmm0
  movslq %edx,%rdx
  mulsd  (%r9,%rdx,8),%xmm0
  subsd  %xmm0,%xmm1
L179:
  add    $0x1,%rbp
  movsd  %xmm1,0x10(%rbx)
  add    %r14d,%r10d
  add    $0x8,%rbx
  cmp    %rbp,%r15
  jne    L214
  mov    -0x10(%rsp),%r11d
  mov    -0xc(%rsp),%r15d
L91:
  mov    %r14d,%r8d
  movslq %r15d,%rax
  imul   %r11d,%r8d
  lea    -0x8(%rdi,%rax,8),%rdx
  movsd  (%rdx),%xmm0
  lea    (%r8,%rsi,1),%eax
  cltq
  divsd  (%r9,%rax,8),%xmm0
  movsd  %xmm0,(%rdx)
  test   %r11d,%r11d
  jle    L152
  mov    -0x14(%rsp),%ebx
  movslq %r11d,%rax
  sub    %r14d,%r8d
  lea    (%rdi,%rax,8),%rcx
  movslq %r8d,%rdx
  movslq %esi,%rax
  not    %ebx
  lea    0x1(%rax,%rdx,1),%rax
  movslq %ebx,%rbp
  lea    (%r9,%rax,8),%r10
  shl    $0x3,%rbp
  xchg   %ax,%ax
L51:
  mov    %r15d,%eax
  mov    %r11d,%edx
  movsd  -0x8(%rcx),%xmm0
  sub    %r11d,%eax
  cmp    %esi,%eax
  cmovg  %esi,%eax
  sub    $0x1,%r11d
  test   %eax,%eax
  jle    L116
  mov    %eax,%r14d
  cmp    $0x1,%eax
  je     L41
  mov    %eax,%r13d
  xor    %r12d,%r12d
  shr    %r13d
  shl    $0x4,%r13
L227:
  movupd (%rcx,%r12,1),%xmm1
  movupd (%r10,%r12,1),%xmm5
  add    $0x10,%r12
  mulpd  %xmm5,%xmm1
  subsd  %xmm1,%xmm0
  unpckhpd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  cmp    %r13,%r12
  jne    L227
  and    $0xfffffffe,%eax
  mov    %eax,%r12d
  lea    0x1(%rax),%eax
  cmp    %r14d,%r12d
  je     L116
L41:
  add    %eax,%edx
  add    %r8d,%eax
  add    %esi,%eax
  movslq %edx,%rdx
  cltq
  movsd  -0x8(%rdi,%rdx,8),%xmm1
  mulsd  (%r9,%rax,8),%xmm1
  subsd  %xmm1,%xmm0
L116:
  divsd  -0x8(%r10),%xmm0
  sub    $0x8,%rcx
  movsd  %xmm0,(%rcx)
  add    %ebx,%r8d
  add    %rbp,%r10
  test   %r11d,%r11d
  jne    L51
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L109:
  cmp    $0x1,%r8d
  jle    L4
  movslq %r14d,%rcx
  mov    %r11d,%esi
  xor    %eax,%eax
  shl    $0x3,%rcx
  lea    (%r9,%rcx,1),%rdx
  nopl   (%rax)
L212:
  movsd  (%rdx),%xmm1
  add    %rcx,%rdx
  mulsd  %xmm0,%xmm1
  movsd  0x8(%r12,%rax,8),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rdi,%rax,8)
  add    $0x1,%rax
  cmp    %rsi,%rax
  jne    L212
L4:
  mov    %r14d,%eax
  movslq %r15d,%rdx
  imul   %r11d,%eax
  shl    $0x3,%rdx
  lea    -0x8(%rdi,%rdx,1),%rsi
  movsd  (%rsi),%xmm0
  lea    0x1(%rax),%ecx
  movslq %ecx,%rcx
  divsd  (%r9,%rcx,8),%xmm0
  movsd  %xmm0,(%rsi)
  test   %r11d,%r11d
  jle    L152
  movsd  -0x8(%rdi,%rdx,1),%xmm0
  mov    -0x14(%rsp),%edx
  sub    %r14d,%eax
  movslq %r11d,%r11
  cltq
  not    %edx
  lea    0x8(%r9,%rax,8),%rax
  movslq %edx,%rdx
  shl    $0x3,%rdx
  nopl   (%rax)
L6:
  mulsd  0x8(%rax),%xmm0
  movsd  -0x8(%rdi,%r11,8),%xmm1
  subsd  %xmm0,%xmm1
  divsd  (%rax),%xmm1
  add    %rdx,%rax
  movapd %xmm1,%xmm0
  movsd  %xmm1,-0x8(%rdi,%r11,8)
  sub    $0x1,%r11
  test   %r11d,%r11d
  jg     L6
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L248:
  shl    $0x3,%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L10:
  movsd  (%r12,%rax,8),%xmm0
  divsd  (%r9),%xmm0
  movsd  %xmm0,(%rdi,%rax,8)
  add    $0x1,%rax
  add    %rdx,%r9
  cmp    %rsi,%rax
  jne    L10
  jmp    L152
```

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];
      }
    }
  }
}
```