user: Demonstrate the C code that generates the assembly output below:

```asm
<vector_fmul_window_c>:
  endbr64
  push   %r15
  mov    %r8d,%eax
  mov    %rcx,%r10
  push   %r14
  neg    %eax
  push   %r13
  push   %r12
  push   %rbp
  movslq %r8d,%rbp
  push   %rbx
  lea    0x0(,%rbp,4),%r12
  lea    -0x1(%r8),%ebx
  add    %r12,%rcx
  sub    $0x20,%rsp
  mov    %rdx,-0x78(%rsp)
  lea    (%rdi,%r12,1),%rdx
  mov    %rbp,-0x68(%rsp)
  mov    %ebx,-0x6c(%rsp)
  test   %r8d,%r8d
  jle    L56
  movslq %eax,%rbx
  mov    %rdi,%r11
  mov    %rbx,0x10(%rsp)
  add    %rbp,%rbx
  lea    0x0(,%rbx,4),%r13
  mov    %rbx,-0x30(%rsp)
  lea    0x4(%r13),%rbx
  lea    (%rdi,%r13,1),%r15
  mov    %rbx,-0x8(%rsp)
  mov    %r8d,%ebx
  lea    (%r10,%r13,1),%r9
  mov    %r15,-0x60(%rsp)
  shl    $0x2,%rbx
  lea    0x0(,%rbp,8),%r15
  mov    $0x4,%ebp
  sub    %rbx,%rbp
  lea    (%rbx,%r13,1),%r14
  mov    %r9,0x8(%rsp)
  mov    -0x78(%rsp),%r9
  mov    %rbp,%rdi
  lea    -0x4(%r15),%rbp
  mov    %r14,-0x58(%rsp)
  lea    (%r11,%r14,1),%r14
  mov    %rdi,%rbx
  mov    %rdi,(%rsp)
  add    %rbp,%rbx
  add    %r11,%rbp
  mov    %r14,-0x50(%rsp)
  lea    -0x8(%r9,%r12,1),%r14
  lea    (%r11,%rbx,1),%rdi
  mov    %r14,-0x20(%rsp)
  mov    -0x60(%rsp),%r9
  mov    %rdi,-0x18(%rsp)
  lea    (%rdx,%r12,1),%rdi
  mov    %rdi,-0x48(%rsp)
  lea    (%rsi,%r13,1),%rdi
  mov    %rdi,-0x38(%rsp)
  mov    %rbp,%rdi
  sub    %r14,%rdi
  mov    %r15,-0x40(%rsp)
  sub    $0x8,%r15
  mov    %rdi,%r14
  mov    %r15,-0x28(%rsp)
  mov    -0x8(%rsp),%rdi
  add    $0x8,%r14
  mov    %rbx,-0x10(%rsp)
  lea    -0x4(%r12),%rbx
  cmp    $0x8,%r14
  seta   %r14b
  add    %r10,%r15
  sub    %r15,%rbp
  lea    (%rsi,%rdi,1),%r15
  add    $0x8,%rbp
  cmp    $0x8,%rbp
  seta   %bpl
  and    %r14d,%ebp
  cmp    $0x1,%r8d
  setg   %r14b
  and    %r14d,%ebp
  mov    %r9,%r14
  sub    %r15,%r14
  cmp    $0x8,%r14
  mov    %r9,%r14
  mov    -0x38(%rsp),%r9
  seta   %r15b
  and    %ebp,%r15d
  mov    %rdi,%rbp
  mov    -0x18(%rsp),%rdi
  add    %r10,%rbp
  sub    %rbp,%r14
  mov    -0x58(%rsp),%rbp
  cmp    $0x8,%r14
  seta   %r14b
  add    %rsi,%rbp
  and    %r15d,%r14d
  cmp    %rbp,%rdi
  setae  %bpl
  cmp    %r9,-0x48(%rsp)
  mov    -0x78(%rsp),%r9
  setbe  %r15b
  or     %r15d,%ebp
  lea    (%r9,%r12,1),%r15
  and    %ebp,%r14d
  mov    (%rsp),%rbp
  add    %rbx,%rbp
  add    %r9,%rbp
  cmp    %rbp,-0x50(%rsp)
  mov    -0x10(%rsp),%r9
  setbe  %bpl
  cmp    %r15,-0x60(%rsp)
  setae  %r15b
  or     %r15d,%ebp
  mov    -0x58(%rsp),%r15
  and    %r14d,%ebp
  cmp    %r9,%r15
  mov    -0x60(%rsp),%r15
  setle  %r14b
  cmp    %r13,-0x40(%rsp)
  setle  %r13b
  or     %r13d,%r14d
  lea    (%rcx,%r12,1),%r13
  and    %r14d,%ebp
  cmp    %r13,%r15
  mov    %r9,%r13
  setae  %r14b
  add    %r10,%r13
  cmp    %r13,-0x50(%rsp)
  setbe  %r13b
  or     %r13d,%r14d
  test   %r14b,%bpl
  je     L25
  mov    -0x58(%rsp),%rbp
  mov    0x8(%rsp),%r9
  add    %r10,%rbp
  cmp    %rbp,%rdi
  setae  %r13b
  cmp    %r9,-0x48(%rsp)
  setbe  %bpl
  or     %r13b,%bpl
  je     L25
  lea    -0x1(%r8),%edi
  cmp    $0x2,%edi
  jbe    L19
  mov    -0x40(%rsp),%rbx
  mov    -0x78(%rsp),%rax
  mov    %r8d,%ebp
  xor    %edi,%edi
  mov    %rdx,-0x60(%rsp)
  shr    $0x2,%ebp
  mov    %r15,%rdx
  mov    -0x38(%rsp),%r14
  sub    $0x10,%rbx
  mov    %r9,%r15
  mov    -0x78(%rsp),%r9
  shl    $0x4,%rbp
  lea    -0x10(%rax,%r12,1),%r13
  lea    (%r10,%rbx,1),%r12
  xor    %eax,%eax
  add    %r11,%rbx
  nopl   (%rax)
L51:
  movups (%r14,%rax,1),%xmm0
  movups 0x0(%r13,%rdi,1),%xmm1
  movups (%r15,%rax,1),%xmm4
  movups (%r12,%rdi,1),%xmm2
  movaps %xmm0,%xmm3
  shufps $0x1b,%xmm1,%xmm1
  movaps %xmm1,%xmm5
  shufps $0x1b,%xmm2,%xmm2
  mulps  %xmm4,%xmm5
  mulps  %xmm2,%xmm3
  mulps  %xmm4,%xmm0
  mulps  %xmm2,%xmm1
  subps  %xmm5,%xmm3
  addps  %xmm1,%xmm0
  movups %xmm3,(%rdx,%rax,1)
  add    $0x10,%rax
  shufps $0x1b,%xmm0,%xmm0
  movups %xmm0,(%rbx,%rdi,1)
  sub    $0x10,%rdi
  cmp    %rbp,%rax
  jne    L51
  mov    %r8d,%edi
  mov    %r9,-0x78(%rsp)
  mov    -0x60(%rsp),%rdx
  and    $0xfffffffc,%edi
  sub    %edi,-0x6c(%rsp)
  mov    %edi,%eax
  sub    %r8d,%eax
  cmp    %edi,%r8d
  je     L56
L71:
  sub    %edi,%r8d
  cmp    $0x1,%r8d
  je     L62
  mov    -0x30(%rsp),%rbx
  mov    -0x28(%rsp),%rbp
  mov    -0x20(%rsp),%r9
  add    %rdi,%rbx
  neg    %rdi
  shl    $0x2,%rdi
  movq   (%rsi,%rbx,4),%xmm0
  movq   (%r10,%rbx,4),%xmm4
  add    %rdi,%rbp
  movq   (%r9,%rdi,1),%xmm1
  mov    %r8d,%edi
  movq   (%r10,%rbp,1),%xmm2
  movaps %xmm0,%xmm3
  and    $0xfffffffe,%edi
  sub    %edi,-0x6c(%rsp)
  mulps  %xmm4,%xmm0
  shufps $0xe1,%xmm1,%xmm1
  add    %edi,%eax
  shufps $0xe1,%xmm2,%xmm2
  movaps %xmm1,%xmm5
  mulps  %xmm2,%xmm1
  mulps  %xmm2,%xmm3
  mulps  %xmm4,%xmm5
  addps  %xmm1,%xmm0
  subps  %xmm5,%xmm3
  shufps $0xe1,%xmm0,%xmm0
  movlps %xmm3,(%r11,%rbx,4)
  movlps %xmm0,(%r11,%rbp,1)
  cmp    %edi,%r8d
  je     L56
L62:
  mov    -0x68(%rsp),%rdi
  cltq
  mov    -0x78(%rsp),%rbx
  movss  (%rcx,%rax,4),%xmm4
  add    %rax,%rdi
  movss  (%rsi,%rdi,4),%xmm0
  movslq -0x6c(%rsp),%rsi
  movss  (%rbx,%rsi,4),%xmm1
  movss  (%rcx,%rsi,4),%xmm3
  movaps %xmm0,%xmm2
  mulss  %xmm4,%xmm0
  mulss  %xmm3,%xmm2
  movaps %xmm1,%xmm5
  mulss  %xmm4,%xmm5
  mulss  %xmm3,%xmm1
  subss  %xmm5,%xmm2
  addss  %xmm1,%xmm0
  movss  %xmm2,(%rdx,%rax,4)
  movss  %xmm0,(%rdx,%rsi,4)
L56:
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L25:
  mov    0x10(%rsp),%rdi
  mov    -0x78(%rsp),%r9
  add    %r12,%rsi
  nopl   (%rax)
L11:
  movss  (%rsi,%rdi,4),%xmm0
  movss  (%r9,%rbx,1),%xmm1
  movss  (%rcx,%rdi,4),%xmm4
  movss  (%rcx,%rbx,1),%xmm3
  movaps %xmm0,%xmm2
  movaps %xmm1,%xmm5
  mulss  %xmm3,%xmm2
  mulss  %xmm4,%xmm5
  mulss  %xmm4,%xmm0
  mulss  %xmm3,%xmm1
  subss  %xmm5,%xmm2
  addss  %xmm1,%xmm0
  movss  %xmm2,(%rdx,%rdi,4)
  add    $0x1,%rdi
  movss  %xmm0,(%rdx,%rbx,1)
  sub    $0x4,%rbx
  test   %edi,%edi
  js     L11
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L19:
  xor    %edi,%edi
  jmp    L71
```

assistant: ```c
void vector_fmul_window_c(float *dst, const float *src0, const float *src1, const float *win, int len) {
  int i, j;
  dst += len;
  win += len;
  src0 += len;
  for (i = -len, j = len - 1; i < 0; i++, j--) {
    float s0 = src0[i];
    float s1 = src1[j];
    float wi = win[i];
    float wj = win[j];
    dst[i] = s0 * wj - s1 * wi;
    dst[j] = s0 * wi + s1 * wj;
  }
}
```