user: Converte this assembly snippet into its equivalent C code:

```asm
<process_fir_taps>:
  endbr64
  mov    %rdi,%rcx
  pxor   %xmm12,%xmm12
  mov    %edx,%edi
  cmp    $0x7,%edx
  jle    L36
  mov    %edx,%r8d
  sar    $0x3,%r8d
  lea    -0x1(%r8),%eax
  cmp    $0x2,%eax
  jbe    L45
  mov    %r8d,%r9d
  mov    %rcx,%rax
  mov    %rsi,%rdx
  movss  %xmm12,-0x1c(%rsp)
  shr    $0x2,%r9d
  sub    $0x1,%r9d
  shl    $0x7,%r9
  lea    0x80(%rcx,%r9,1),%r9
  nop
L86:
  movups (%rax),%xmm1
  movups 0x10(%rax),%xmm6
  sub    $0xffffffffffffff80,%rax
  sub    $0xffffffffffffff80,%rdx
  movups -0x60(%rax),%xmm5
  movups -0x50(%rax),%xmm7
  movups -0x40(%rax),%xmm4
  movaps %xmm1,%xmm3
  movups -0x20(%rax),%xmm2
  shufps $0xdd,%xmm6,%xmm1
  shufps $0x88,%xmm6,%xmm3
  movaps %xmm5,%xmm8
  movups -0x30(%rax),%xmm6
  shufps $0xdd,%xmm7,%xmm5
  shufps $0x88,%xmm7,%xmm8
  movups -0x10(%rax),%xmm0
  movaps %xmm4,%xmm7
  movups -0x70(%rdx),%xmm11
  shufps $0x88,%xmm6,%xmm7
  shufps $0xdd,%xmm6,%xmm4
  movaps %xmm7,%xmm14
  movaps %xmm2,%xmm6
  shufps $0x88,%xmm0,%xmm6
  shufps $0x88,%xmm6,%xmm14
  shufps $0xdd,%xmm6,%xmm7
  movaps %xmm1,%xmm6
  shufps $0x88,%xmm5,%xmm6
  shufps $0xdd,%xmm5,%xmm1
  movaps %xmm4,%xmm5
  shufps $0xdd,%xmm0,%xmm2
  shufps $0x88,%xmm2,%xmm5
  shufps $0xdd,%xmm2,%xmm4
  movups -0x80(%rdx),%xmm2
  movaps %xmm5,%xmm15
  movups -0x60(%rdx),%xmm9
  movaps %xmm4,%xmm12
  movups -0x40(%rdx),%xmm4
  movaps %xmm3,%xmm0
  movaps %xmm2,%xmm5
  shufps $0xdd,%xmm11,%xmm2
  movaps %xmm7,-0x58(%rsp)
  shufps $0x88,%xmm8,%xmm0
  shufps $0x88,%xmm11,%xmm5
  movups -0x50(%rdx),%xmm11
  movaps %xmm9,%xmm13
  movaps %xmm4,%xmm7
  shufps $0xdd,%xmm8,%xmm3
  movups -0x20(%rdx),%xmm8
  movaps %xmm15,-0x18(%rsp)
  shufps $0x88,%xmm11,%xmm13
  shufps $0xdd,%xmm11,%xmm9
  movups -0x30(%rdx),%xmm11
  movaps %xmm8,%xmm10
  shufps $0x88,%xmm11,%xmm7
  shufps $0xdd,%xmm11,%xmm4
  movups -0x10(%rdx),%xmm11
  shufps $0x88,%xmm11,%xmm10
  shufps $0xdd,%xmm11,%xmm8
  movaps %xmm5,%xmm11
  shufps $0xdd,%xmm13,%xmm5
  shufps $0x88,%xmm13,%xmm11
  movaps %xmm7,%xmm13
  shufps $0xdd,%xmm10,%xmm7
  shufps $0x88,%xmm10,%xmm13
  movaps %xmm2,%xmm10
  shufps $0xdd,%xmm9,%xmm2
  movaps %xmm13,-0x48(%rsp)
  shufps $0x88,%xmm9,%xmm10
  movaps %xmm0,%xmm9
  movaps %xmm4,%xmm13
  shufps $0xdd,%xmm8,%xmm4
  shufps $0x88,%xmm14,%xmm9
  movaps %xmm4,-0x38(%rsp)
  movaps %xmm11,%xmm4
  shufps $0x88,-0x48(%rsp),%xmm4
  mulps  %xmm4,%xmm9
  movaps %xmm6,%xmm4
  shufps $0x88,%xmm8,%xmm13
  shufps $0xdd,%xmm14,%xmm0
  shufps $0x88,%xmm15,%xmm4
  movaps %xmm4,%xmm8
  movaps %xmm10,%xmm4
  shufps $0xdd,-0x48(%rsp),%xmm11
  shufps $0x88,%xmm13,%xmm4
  mulps  %xmm4,%xmm8
  movaps %xmm3,%xmm4
  shufps $0x88,-0x58(%rsp),%xmm4
  mulps  %xmm11,%xmm0
  shufps $0xdd,-0x18(%rsp),%xmm6
  shufps $0xdd,%xmm13,%xmm10
  shufps $0xdd,-0x58(%rsp),%xmm3
  mulps  %xmm10,%xmm6
  addps  %xmm9,%xmm8
  movaps %xmm4,%xmm9
  movaps %xmm5,%xmm4
  shufps $0xdd,%xmm7,%xmm5
  shufps $0x88,%xmm7,%xmm4
  mulps  %xmm4,%xmm9
  movaps %xmm1,%xmm4
  shufps $0xdd,%xmm12,%xmm1
  shufps $0x88,%xmm12,%xmm4
  mulps  %xmm5,%xmm3
  addps  %xmm8,%xmm9
  movaps %xmm4,%xmm8
  movaps %xmm2,%xmm4
  shufps $0x88,-0x38(%rsp),%xmm4
  mulps  %xmm4,%xmm8
  shufps $0xdd,-0x38(%rsp),%xmm2
  mulps  %xmm2,%xmm1
  addps  %xmm9,%xmm8
  addps  %xmm8,%xmm0
  addps  %xmm6,%xmm0
  addps  %xmm3,%xmm0
  addps  %xmm0,%xmm1
  movss  -0x1c(%rsp),%xmm0
  addss  %xmm1,%xmm0
  movaps %xmm1,%xmm2
  shufps $0x55,%xmm1,%xmm2
  addss  %xmm2,%xmm0
  movaps %xmm1,%xmm2
  unpckhps %xmm1,%xmm2
  shufps $0xff,%xmm1,%xmm1
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x1c(%rsp)
  cmp    %r9,%rax
  jne    L86
  mov    %r8d,%r9d
  movaps %xmm0,%xmm12
  and    $0xfffffffc,%r9d
  mov    %r9d,%eax
  shl    $0x5,%rax
  lea    (%rcx,%rax,1),%rdx
  add    %rsi,%rax
  cmp    %r8d,%r9d
  je     L59
L26:
  movss  (%rdx),%xmm0
  movss  0x4(%rdx),%xmm1
  lea    0x1(%r9),%r10d
  mulss  0x4(%rax),%xmm1
  mulss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  movss  0x8(%rdx),%xmm1
  mulss  0x8(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0xc(%rdx),%xmm1
  mulss  0xc(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0x10(%rdx),%xmm1
  mulss  0x10(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0x14(%rdx),%xmm1
  mulss  0x14(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0x18(%rdx),%xmm1
  mulss  0x18(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0x1c(%rdx),%xmm1
  mulss  0x1c(%rax),%xmm1
  addss  %xmm1,%xmm0
  addss  %xmm0,%xmm12
  cmp    %r10d,%r8d
  jle    L59
  movss  0x20(%rdx),%xmm0
  movss  0x24(%rdx),%xmm1
  add    $0x2,%r9d
  mulss  0x24(%rax),%xmm1
  mulss  0x20(%rax),%xmm0
  addss  %xmm1,%xmm0
  movss  0x28(%rdx),%xmm1
  mulss  0x28(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0x2c(%rdx),%xmm1
  mulss  0x2c(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0x30(%rdx),%xmm1
  mulss  0x30(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0x34(%rdx),%xmm1
  mulss  0x34(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0x38(%rdx),%xmm1
  mulss  0x38(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  0x3c(%rdx),%xmm1
  mulss  0x3c(%rax),%xmm1
  addss  %xmm1,%xmm0
  addss  %xmm0,%xmm12
  cmp    %r9d,%r8d
  jle    L59
  movss  0x44(%rax),%xmm0
  movss  0x40(%rax),%xmm1
  mulss  0x44(%rdx),%xmm0
  mulss  0x40(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0x48(%rax),%xmm1
  mulss  0x48(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0x4c(%rax),%xmm1
  mulss  0x4c(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0x50(%rax),%xmm1
  mulss  0x50(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0x54(%rax),%xmm1
  mulss  0x54(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0x58(%rax),%xmm1
  mulss  0x58(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0x5c(%rax),%xmm1
  mulss  0x5c(%rdx),%xmm1
  addss  %xmm1,%xmm0
  addss  %xmm0,%xmm12
L59:
  shl    $0x5,%r8
  and    $0x7,%edi
  add    %r8,%rsi
  add    %r8,%rcx
L36:
  cmp    $0x3,%edi
  jle    L73
  movss  (%rcx),%xmm0
  movss  0x4(%rcx),%xmm1
  add    $0x10,%rsi
  and    $0x3,%edi
  mulss  -0xc(%rsi),%xmm1
  add    $0x10,%rcx
  mulss  -0x10(%rsi),%xmm0
  addss  %xmm1,%xmm0
  movss  -0x8(%rcx),%xmm1
  mulss  -0x8(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  -0x4(%rcx),%xmm1
  mulss  -0x4(%rsi),%xmm1
  addss  %xmm1,%xmm0
  addss  %xmm0,%xmm12
L73:
  cmp    $0x1,%edi
  jle    L79
  movss  (%rcx),%xmm0
  movss  0x4(%rcx),%xmm1
  mulss  (%rsi),%xmm0
  mulss  0x4(%rsi),%xmm1
  addss  %xmm1,%xmm0
  addss  %xmm0,%xmm12
L79:
  movaps %xmm12,%xmm0
  ret
  nopl   0x0(%rax)
L45:
  mov    %rsi,%rax
  mov    %rcx,%rdx
  xor    %r9d,%r9d
  jmp    L26
```

assistant: ```c
float process_fir_taps(const float *kernel, const float *queue, int len) {
  int i;
  float sum = 0.0f;
  if (len >= 8) {
    int it = len >> 3;
    for (i = 0; i < it; i++) {
      sum += kernel[0] * queue[0] + kernel[1] * queue[1] + kernel[2] * queue[2] + kernel[3] * queue[3] + kernel[4] * queue[4] + kernel[5] * queue[5] + kernel[6] * queue[6] + kernel[7] * queue[7];
      queue += 8;
      kernel += 8;
    }
    len &= 7;
  }
  if (len >= 4) {
    sum += kernel[0] * queue[0] + kernel[1] * queue[1] + kernel[2] * queue[2] + kernel[3] * queue[3];
    kernel += 4;
    queue += 4;
    len &= 3;
  }
  if (len >= 2) {
    sum += kernel[0] * queue[0] + kernel[1] * queue[1];
  }
  return sum;
}
```