user: What is the c source code of the assembly code below?

```asm
<c_dsdot>:
  endbr64
  pxor   %xmm1,%xmm1
  test   %edi,%edi
  jle    L128
  cmp    $0x1,%edx
  jne    L156
  cmp    $0x1,%r8d
  jne    L156
  movslq %edi,%rax
  mov    %edi,%edx
  pxor   %xmm1,%xmm1
  imul   $0x66666667,%rax,%rax
  sar    $0x1f,%edx
  sar    $0x21,%rax
  sub    %edx,%eax
  lea    (%rax,%rax,4),%edx
  mov    %edi,%eax
  sub    %edx,%eax
  je     L171
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd (%rsi),%xmm0
  cvtss2sd (%rcx),%xmm2
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  cmp    $0x1,%eax
  je     L171
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0x4(%rcx),%xmm0
  cvtss2sd 0x4(%rsi),%xmm2
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  cmp    $0x2,%eax
  je     L171
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0x8(%rcx),%xmm0
  cvtss2sd 0x8(%rsi),%xmm2
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  cmp    $0x4,%eax
  jne    L171
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0xc(%rsi),%xmm0
  cvtss2sd 0xc(%rcx),%xmm2
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
L171:
  cmp    $0x4,%edi
  jle    L128
  cltq
  nopl   (%rax)
L158:
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd (%rcx,%rax,4),%xmm2
  cvtss2sd (%rsi,%rax,4),%xmm0
  mulsd  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0x4(%rcx,%rax,4),%xmm3
  cvtss2sd 0x4(%rsi,%rax,4),%xmm2
  mulsd  %xmm3,%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd 0x8(%rcx,%rax,4),%xmm3
  addsd  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0x8(%rsi,%rax,4),%xmm2
  mulsd  %xmm3,%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd 0xc(%rcx,%rax,4),%xmm3
  addsd  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0xc(%rsi,%rax,4),%xmm2
  mulsd  %xmm3,%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd 0x10(%rcx,%rax,4),%xmm3
  addsd  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0x10(%rsi,%rax,4),%xmm2
  mulsd  %xmm3,%xmm2
  add    $0x5,%rax
  addsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  cmp    %eax,%edi
  jg     L158
L128:
  movapd %xmm1,%xmm0
  ret
  nopl   0x0(%rax,%rax,1)
L156:
  test   %edx,%edx
  js     L64
  test   %r8d,%r8d
  js     L182
  cmp    $0x1,%r8d
  jne    L94
  cmp    $0x1,%edx
  jne    L94
  movslq %edi,%rdi
  xor    %eax,%eax
  pxor   %xmm1,%xmm1
  nopl   0x0(%rax)
L107:
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd (%rcx,%rax,4),%xmm0
  cvtss2sd (%rsi,%rax,4),%xmm2
  mulsd  %xmm2,%xmm0
  add    $0x1,%rax
  addsd  %xmm0,%xmm1
  cmp    %rax,%rdi
  jne    L107
  movapd %xmm1,%xmm0
  ret
L64:
  mov    $0x1,%eax
  sub    %edi,%eax
  imul   %edx,%eax
  movslq %eax,%r9
  test   %r8d,%r8d
  jns    L6
L87:
  mov    $0x1,%eax
  sub    %edi,%eax
  imul   %r8d,%eax
L175:
  cltq
  movslq %edx,%rdx
  lea    (%rsi,%r9,4),%rsi
  movslq %r8d,%r8
  lea    (%rcx,%rax,4),%rcx
  shl    $0x2,%rdx
  shl    $0x2,%r8
  xor    %eax,%eax
  pxor   %xmm1,%xmm1
  nopl   0x0(%rax,%rax,1)
L117:
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  add    $0x1,%eax
  cvtss2sd (%rsi),%xmm0
  cvtss2sd (%rcx),%xmm2
  mulsd  %xmm2,%xmm0
  add    %rdx,%rsi
  add    %r8,%rcx
  addsd  %xmm0,%xmm1
  cmp    %eax,%edi
  jne    L117
  jmp    L128
L94:
  xor    %r9d,%r9d
L6:
  xor    %eax,%eax
  jmp    L175
L182:
  xor    %r9d,%r9d
  jmp    L87
```

assistant: ```c
double c_dsdot(const int N, const float *X, const int strideX, const float *Y, const int strideY) {
  double dot;
  int ix;
  int iy;
  int m;
  int i;
  dot = 0.0;
  if (N <= 0) {
    return dot;
  }
  if (strideX == 1 && strideY == 1) {
    m = N % 5;
    if (m > 0) {
      for (i = 0; i < m; i++) {
        dot += (double)X[i] * (double)Y[i];
      }
    }
    if (N < 5) {
      return dot;
    }
    for (i = m; i < N; i += 5) {
      dot += ((double)X[i] * (double)Y[i]) + ((double)X[i + 1] * (double)Y[i + 1]) + ((double)X[i + 2] * (double)Y[i + 2]) + ((double)X[i + 3] * (double)Y[i + 3]) + ((double)X[i + 4] * (double)Y[i + 4]);
    }
    return dot;
  }
  if (strideX < 0) {
    ix = (1 - N) * strideX;
  } else {
    ix = 0;
  }
  if (strideY < 0) {
    iy = (1 - N) * strideY;
  } else {
    iy = 0;
  }
  for (i = 0; i < N; i++) {
    dot += (double)X[ix] * (double)Y[iy];
    ix += strideX;
    iy += strideY;
  }
  return dot;
}
```