user: Please show me the C implementation that matches the assembly code listed below:

```asm
<THFloatVector_add>:
  endbr64
  movaps %xmm0,%xmm1
  mov    %rdx,%r8
  cmp    $0x4,%rdx
  jle    L168
  lea    0xf(%rdi),%rax
  sub    %rsi,%rax
  cmp    $0x1e,%rax
  jbe    L30
  lea    -0x5(%rdx),%r9
  movaps %xmm0,%xmm2
  xor    %eax,%eax
  xor    %edx,%edx
  mov    %r9,%rcx
  shufps $0x0,%xmm2,%xmm2
  shr    $0x2,%rcx
  add    $0x1,%rcx
  nop
L66:
  movups (%rsi,%rax,1),%xmm0
  movups (%rdi,%rax,1),%xmm3
  add    $0x1,%rdx
  mulps  %xmm2,%xmm0
  addps  %xmm3,%xmm0
  movups %xmm0,(%rdi,%rax,1)
  add    $0x10,%rax
  cmp    %rcx,%rdx
  jb     L66
L103:
  shr    $0x2,%r9
  lea    0x4(,%r9,4),%rax
L81:
  cmp    %rax,%r8
  jle    L117
  lea    0x0(,%rax,4),%r10
  push   %rbp
  mov    %r8,%rdx
  mov    %rax,%r9
  lea    (%rdi,%r10,1),%rcx
  lea    0x4(%r10),%r11
  push   %rbx
  sub    %rax,%rdx
  lea    (%rsi,%r11,1),%rbx
  mov    %rcx,%rbp
  sub    %rbx,%rbp
  cmp    $0x8,%rbp
  jbe    L184
  cmp    $0x1,%rdx
  je     L184
  lea    -0x1(%rdx),%r8
  cmp    $0x2,%r8
  jbe    L37
  movups (%rsi,%r10,1),%xmm0
  movaps %xmm1,%xmm2
  movups (%rcx),%xmm4
  shufps $0x0,%xmm2,%xmm2
  mulps  %xmm2,%xmm0
  addps  %xmm4,%xmm0
  movups %xmm0,(%rcx)
  mov    %rdx,%rcx
  and    $0xfffffffffffffffc,%rcx
  add    %rcx,%rax
  cmp    %rcx,%rdx
  je     L53
  sub    %rcx,%rdx
  cmp    $0x1,%rdx
  je     L112
L171:
  add    %r9,%rcx
  movaps %xmm1,%xmm2
  movq   (%rsi,%rcx,4),%xmm0
  shufps $0xe0,%xmm2,%xmm2
  lea    (%rdi,%rcx,4),%r8
  mov    %rdx,%rcx
  and    $0xfffffffffffffffe,%rcx
  mulps  %xmm2,%xmm0
  movq   (%r8),%xmm2
  add    %rcx,%rax
  addps  %xmm2,%xmm0
  movlps %xmm0,(%r8)
  cmp    %rcx,%rdx
  je     L53
L112:
  mulss  (%rsi,%rax,4),%xmm1
  lea    (%rdi,%rax,4),%rdx
  addss  (%rdx),%xmm1
  movss  %xmm1,(%rdx)
L53:
  pop    %rbx
  pop    %rbp
  ret
L117:
  ret
  nopl   0x0(%rax)
L30:
  lea    -0x5(%r8),%r9
  mov    %rdi,%rax
  mov    %rsi,%rdx
  mov    %r9,%rcx
  shr    $0x2,%rcx
  shl    $0x4,%rcx
  lea    0x10(%rdi,%rcx,1),%rcx
  nopw   0x0(%rax,%rax,1)
L123:
  movss  (%rdx),%xmm0
  add    $0x10,%rax
  add    $0x10,%rdx
  mulss  %xmm1,%xmm0
  addss  -0x10(%rax),%xmm0
  movss  %xmm0,-0x10(%rax)
  movss  -0xc(%rdx),%xmm0
  mulss  %xmm1,%xmm0
  addss  -0xc(%rax),%xmm0
  movss  %xmm0,-0xc(%rax)
  movss  -0x8(%rdx),%xmm0
  mulss  %xmm1,%xmm0
  addss  -0x8(%rax),%xmm0
  movss  %xmm0,-0x8(%rax)
  movss  -0x4(%rdx),%xmm0
  mulss  %xmm1,%xmm0
  addss  -0x4(%rax),%xmm0
  movss  %xmm0,-0x4(%rax)
  cmp    %rcx,%rax
  jne    L123
  jmp    L103
  nopl   (%rax)
L184:
  movss  (%rsi,%r10,1),%xmm0
  lea    0x1(%rax),%rdx
  mulss  %xmm1,%xmm0
  addss  (%rcx),%xmm0
  movss  %xmm0,(%rcx)
  cmp    %r8,%rdx
  jge    L53
  movss  (%rbx),%xmm0
  add    %rdi,%r11
  lea    0x2(%rax),%rdx
  mulss  %xmm1,%xmm0
  addss  (%r11),%xmm0
  movss  %xmm0,(%r11)
  cmp    %r8,%rdx
  jge    L53
  movss  0x8(%rsi,%r10,1),%xmm0
  lea    0x8(%rdi,%r10,1),%rdx
  mulss  %xmm1,%xmm0
  addss  (%rdx),%xmm0
  movss  %xmm0,(%rdx)
  lea    0x3(%rax),%rdx
  cmp    %r8,%rdx
  jge    L53
  movss  0xc(%rsi,%r10,1),%xmm0
  lea    0xc(%rdi,%r10,1),%rdx
  add    $0x4,%rax
  mulss  %xmm1,%xmm0
  addss  (%rdx),%xmm0
  movss  %xmm0,(%rdx)
  cmp    %rax,%r8
  jle    L53
  mulss  0x10(%rsi,%r10,1),%xmm1
  lea    0x10(%rdi,%r10,1),%rax
  addss  (%rax),%xmm1
  movss  %xmm1,(%rax)
  jmp    L53
  nopl   0x0(%rax)
L168:
  xor    %eax,%eax
  jmp    L81
L37:
  xor    %ecx,%ecx
  jmp    L171
```

assistant: ```c
void THFloatVector_add(float *y, const float *x, const float c, const long n) {
  long i = 0;
  for (; i < n - 4; i += 4) {
    y[i] += c * x[i];
    y[i + 1] += c * x[i + 1];
    y[i + 2] += c * x[i + 2];
    y[i + 3] += c * x[i + 3];
  }
  for (; i < n; i++)
    y[i] += c * x[i];
}
```