user: What would the C source look like for the assembly code provided here:

```asm
<direct_form_iir_down_kernel>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    %r8,-0x48(%rbp)
  mov    %r9,-0x50(%rbp)
  movsd  %xmm0,-0x58(%rbp)
  movq   $0x0,-0x18(%rbp)
  movq   $0x0,-0x20(%rbp)
  jmp    L82
L53:
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movq   $0x0,-0x10(%rbp)
  jmp    L27
L30:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  addq   $0x1,-0x10(%rbp)
L27:
  mov    -0x10(%rbp),%rax
  cmp    -0x50(%rbp),%rax
  jl     L30
  movq   $0x1,-0x10(%rbp)
  jmp    L66
L61:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    0x20(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x10(%rbp),%rax
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  0x4(%rax),%xmm0
  mulss  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  addq   $0x1,-0x10(%rbp)
L66:
  mov    -0x10(%rbp),%rax
  cmp    0x10(%rbp),%rax
  jl     L61
  mov    -0x50(%rbp),%rax
  sub    $0x1,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L99
L23:
  mov    -0x10(%rbp),%rax
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rcx
  mov    0x28(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  subq   $0x1,-0x10(%rbp)
L99:
  cmpq   $0x0,-0x10(%rbp)
  jg     L23
  mov    0x10(%rbp),%rax
  sub    $0x1,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L67
L62:
  mov    -0x10(%rbp),%rax
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rcx
  mov    0x28(%rbp),%rax
  add    %rcx,%rax
  movss  0x4(%rdx),%xmm0
  movss  %xmm0,0x4(%rax)
  subq   $0x1,-0x10(%rbp)
L67:
  cmpq   $0x0,-0x10(%rbp)
  jg     L62
  pxor   %xmm0,%xmm0
  cvtsd2ss -0x8(%rbp),%xmm0
  mov    0x28(%rbp),%rax
  movss  %xmm0,0x4(%rax)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  cqto
  idivq  -0x48(%rbp)
  mov    %rdx,%rax
  test   %rax,%rax
  jne    L31
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x58(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addq   $0x1,-0x18(%rbp)
L31:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,(%rax)
  addq   $0x1,-0x20(%rbp)
L82:
  mov    -0x20(%rbp),%rax
  cmp    -0x28(%rbp),%rax
  jl     L53
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  cqto
  idivq  -0x48(%rbp)
  mov    -0x40(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x18(%rbp),%rax
  pop    %rbp
  ret
```

assistant: ```c
long direct_form_iir_down_kernel(lenx, x, y, k0, idown, zerono, poleno, gain, a, b, T)
long lenx;
float *x, *y;
long *k0, idown, zerono, poleno;
double gain;
float *a, *b, (*T)[2];
{
  long kx, ky, n;
  double yj;
  ky = 0;
  for (kx = 0; kx < lenx; kx++) {
    T[0][0] = x[kx];
    for (yj = 0, n = 0; n < zerono; n++)
      yj += a[n] * T[n][0];
    for (n = 1; n < poleno; n++)
      yj -= b[n] * T[n - 1][1];
    for (n = zerono - 1; n > 0; n--)
      T[n][0] = T[n - 1][0];
    for (n = poleno - 1; n > 0; n--)
      T[n][1] = T[n - 1][1];
    T[0][1] = yj;
    if (*k0 % idown == 0) {
      y[ky] = yj * gain;
      ky++;
    }
    (*k0)++;
  }
  *k0 %= idown;
  return ky;
}
```