user: 请从给定的汇编指令推导出C源代码：

```asm
<banbks>:
  endbr64
  push   %r15
  mov    %ecx,%r11d
  push   %r14
  lea    0x1(%rdx,%r11,1),%eax
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0x38(%rsp),%rcx
  mov    %eax,-0xc(%rsp)
  lea    0x4(%rcx),%rax
  mov    %rax,-0x18(%rsp)
  test   %rsi,%rsi
  je     L19
  movslq %edx,%r12
  mov    %rdi,%rbx
  mov    %rsi,%r10
  mov    %r8,%r13
  mov    %r9,%r14
  lea    0x8(%rcx),%rdx
  mov    $0x1,%r11d
  nopw   0x0(%rax,%rax,1)
L9:
  mov    (%r14,%r11,8),%rax
  cmp    %r11,%rax
  je     L198
  lea    (%rcx,%rax,4),%rax
  movss  -0x4(%rdx),%xmm0
  movss  (%rax),%xmm1
  movss  %xmm1,-0x4(%rdx)
  movss  %xmm0,(%rax)
L198:
  cmp    %r10,%r12
  mov    %r12,%r9
  lea    0x1(%r11),%rbp
  adc    $0x0,%r9
  cmp    %rbp,%r9
  jb     L220
  mov    -0x8(%r13,%rbp,8),%rdi
  mov    %rdx,%rax
  mov    %r9,%r8
  sub    %r11,%r8
  lea    0x8(%rdi),%rsi
  sub    %rsi,%rax
  cmp    $0x8,%rax
  seta   %sil
  cmp    $0xffffffffffffffff,%r9
  setne  %al
  test   %al,%sil
  je     L235
  cmp    $0x1,%r8
  je     L235
  lea    -0x1(%r8),%rax
  cmp    $0x2,%rax
  jbe    L120
  movss  -0x4(%rdx),%xmm2
  mov    %r8,%r15
  xor    %eax,%eax
  xor    %esi,%esi
  shr    $0x2,%r15
  shufps $0x0,%xmm2,%xmm2
  nop
L70:
  movups 0x4(%rdi,%rax,1),%xmm1
  movups (%rdx,%rax,1),%xmm0
  add    $0x1,%rsi
  mulps  %xmm2,%xmm1
  subps  %xmm1,%xmm0
  movups %xmm0,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rsi,%r15
  ja     L70
  mov    %r8,%rsi
  and    $0xfffffffffffffffc,%rsi
  lea    0x0(%rbp,%rsi,1),%r15
  mov    %r15,%rax
  cmp    %rsi,%r8
  je     L220
  sub    %rsi,%r8
  cmp    $0x1,%r8
  je     L26
L66:
  movq   0x4(%rdi,%rsi,4),%xmm1
  movss  -0x4(%rdx),%xmm2
  lea    (%rcx,%r15,4),%r15
  mov    %r8,%rsi
  movq   (%r15),%xmm0
  and    $0xfffffffffffffffe,%rsi
  shufps $0xe0,%xmm2,%xmm2
  mulps  %xmm2,%xmm1
  add    %rsi,%rax
  subps  %xmm1,%xmm0
  movlps %xmm0,(%r15)
  cmp    %r8,%rsi
  je     L220
L26:
  lea    (%rcx,%rax,4),%rsi
  sub    %r11,%rax
  movss  (%rdi,%rax,4),%xmm1
  mulss  -0x4(%rdx),%xmm1
  movss  (%rsi),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rsi)
L220:
  cmp    %rbp,%r10
  jb     L236
L56:
  add    $0x4,%rdx
  cmp    %r12,%r10
  jbe    1040 <banbks.cold>
  mov    %r9,%r12
  mov    %rbp,%r11
  jmp    L9
  nopl   0x0(%rax,%rax,1)
L235:
  mov    -0x18(%rsp),%rsi
  mov    %rbp,%rax
  sub    %rdx,%rsi
  add    %rsi,%rdi
  xchg   %ax,%ax
L257:
  movss  (%rdi,%rax,4),%xmm1
  mulss  -0x4(%rdx),%xmm1
  movss  (%rcx,%rax,4),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rcx,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%r9
  jae    L257
  cmp    %rbp,%r10
  jae    L56
  cs nopw 0x0(%rax,%rax,1)
L236:
  movslq -0xc(%rsp),%r9
  lea    0x4(%rcx,%r10,4),%rdi
  mov    $0x1,%edx
  nop
L214:
  movss  -0x4(%rdi),%xmm1
  mov    (%rbx,%r10,8),%rsi
  cmp    $0x1,%rdx
  je     L106
  lea    -0x2(%rdx),%rax
  lea    -0x1(%rdx),%r11
  cmp    $0x2,%rax
  jbe    L22
  mov    %r11,%r8
  xor    %eax,%eax
  shr    $0x2,%r8
  shl    $0x4,%r8
  nopw   0x0(%rax,%rax,1)
L248:
  movups 0x8(%rsi,%rax,1),%xmm0
  movups (%rdi,%rax,1),%xmm3
  add    $0x10,%rax
  mulps  %xmm3,%xmm0
  subss  %xmm0,%xmm1
  movaps %xmm0,%xmm2
  shufps $0x55,%xmm0,%xmm2
  subss  %xmm2,%xmm1
  movaps %xmm0,%xmm2
  unpckhps %xmm0,%xmm2
  shufps $0xff,%xmm0,%xmm0
  subss  %xmm2,%xmm1
  subss  %xmm0,%xmm1
  cmp    %rax,%r8
  jne    L248
  mov    %r11,%r8
  and    $0xfffffffffffffffc,%r8
  lea    0x2(%r8),%rax
  cmp    %r8,%r11
  je     L106
L20:
  lea    (%r10,%rax,1),%r8
  lea    0x0(,%rax,4),%r11
  movss  -0x4(%rcx,%r8,4),%xmm0
  mulss  (%rsi,%rax,4),%xmm0
  lea    0x1(%rax),%r8
  subss  %xmm0,%xmm1
  cmp    %rdx,%r8
  ja     L106
  add    %r10,%r8
  add    $0x2,%rax
  movss  -0x4(%rcx,%r8,4),%xmm0
  mulss  0x4(%rsi,%r11,1),%xmm0
  subss  %xmm0,%xmm1
  cmp    %rax,%rdx
  jb     L106
  add    %r10,%rax
  movss  -0x4(%rcx,%rax,4),%xmm0
  mulss  0x8(%rsi,%r11,1),%xmm0
  subss  %xmm0,%xmm1
L106:
  divss  0x4(%rsi),%xmm1
  movss  %xmm1,-0x4(%rdi)
  cmp    %r9,%rdx
  jae    L189
  add    $0x1,%rdx
  sub    $0x1,%r10
  je     L19
  sub    $0x4,%rdi
  jmp    L214
  nopl   0x0(%rax,%rax,1)
L189:
  mov    %r10,%r8
  sub    $0x1,%r8
  je     L19
  lea    (%rcx,%r10,4),%rsi
  lea    -0x1(%rdx),%r10
  mov    %r10,%r9
  mov    %r10,%r11
  lea    -0x2(%rdx),%rbp
  shr    $0x2,%r9
  and    $0xfffffffffffffffc,%r11
  shl    $0x4,%r9
  lea    0x2(%r11),%r12
L133:
  movss  -0x4(%rsi),%xmm1
  mov    (%rbx,%r8,8),%rdi
  cmp    $0x1,%rdx
  jbe    L184
  cmp    $0x2,%rbp
  jbe    L39
  xor    %eax,%eax
  xchg   %ax,%ax
L279:
  movups 0x8(%rdi,%rax,1),%xmm0
  movups (%rsi,%rax,1),%xmm4
  add    $0x10,%rax
  mulps  %xmm4,%xmm0
  subss  %xmm0,%xmm1
  movaps %xmm0,%xmm2
  shufps $0x55,%xmm0,%xmm2
  subss  %xmm2,%xmm1
  movaps %xmm0,%xmm2
  unpckhps %xmm0,%xmm2
  shufps $0xff,%xmm0,%xmm0
  subss  %xmm2,%xmm1
  subss  %xmm0,%xmm1
  cmp    %rax,%r9
  jne    L279
  mov    %r12,%rax
  cmp    %r11,%r10
  je     L184
L44:
  lea    (%r8,%rax,1),%r14
  lea    0x0(,%rax,4),%r13
  movss  -0x4(%rcx,%r14,4),%xmm0
  mulss  (%rdi,%rax,4),%xmm0
  lea    0x1(%rax),%r14
  subss  %xmm0,%xmm1
  cmp    %r14,%rdx
  jb     L184
  add    %r8,%r14
  add    $0x2,%rax
  movss  -0x4(%rcx,%r14,4),%xmm0
  mulss  0x4(%rdi,%r13,1),%xmm0
  subss  %xmm0,%xmm1
  cmp    %rax,%rdx
  jb     L184
  add    %r8,%rax
  movss  -0x4(%rcx,%rax,4),%xmm0
  mulss  0x8(%rdi,%r13,1),%xmm0
  subss  %xmm0,%xmm1
L184:
  divss  0x4(%rdi),%xmm1
  sub    $0x4,%rsi
  movss  %xmm1,(%rsi)
  sub    $0x1,%r8
  jne    L133
L19:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L39:
  mov    $0x2,%eax
  jmp    L44
L22:
  mov    $0x2,%eax
  jmp    L20
L120:
  mov    %rbp,%rax
  xor    %esi,%esi
  mov    %rbp,%r15
  jmp    L66
```

assistant: ```c
void banbks(float **a, unsigned long n, int m1, int m2, float **al, unsigned long indx[], float b[]) {
  unsigned long i, k, l;
  int mm;
  float dum;
  mm = m1 + m2 + 1;
  l = m1;
  for (k = 1; k <= n; k++) {
    i = indx[k];
    if (i != k) {
      dum = (b[k]);
      (b[k]) = (b[i]);
      (b[i]) = dum;
    }
    if (l < n)
      l++;
    for (i = k + 1; i <= l; i++)
      b[i] -= al[k][i - k] * b[k];
  }
  l = 1;
  for (i = n; i >= 1; i--) {
    dum = b[i];
    for (k = 2; k <= l; k++)
      dum -= a[i][k] * b[k + i - 1];
    b[i] = dum / a[i][1];
    if (l < mm)
      l++;
  }
}
```