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

```asm
<dscal>:
  endbr64
  mov    %rsi,%rcx
  test   %edi,%edi
  jle    L17
  cmp    $0x1,%edx
  je     L141
  imul   %edx,%edi
  test   %edi,%edi
  jle    L17
  movslq %edx,%rsi
  mov    %rcx,%rax
  xor    %ecx,%ecx
  shl    $0x3,%rsi
  nopl   0x0(%rax,%rax,1)
L20:
  movsd  (%rax),%xmm1
  add    %edx,%ecx
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rax)
  add    %rsi,%rax
  cmp    %ecx,%edi
  jg     L20
  ret
  cs nopw 0x0(%rax,%rax,1)
L141:
  movslq %edi,%rax
  mov    %edi,%edx
  imul   $0x66666667,%rax,%rax
  sar    $0x1f,%edx
  sar    $0x21,%rax
  sub    %edx,%eax
  lea    (%rax,%rax,4),%edx
  mov    %edi,%eax
  sub    %edx,%eax
  jne    L120
L84:
  lea    -0x1(%rdi),%edx
  mov    $0xcccccccd,%esi
  sub    %eax,%edx
  mov    %edx,%r8d
  imul   %rsi,%r8
  mov    $0x1,%esi
  shr    $0x22,%r8
  add    $0x1,%r8d
  cmp    %edi,%eax
  cmovge %esi,%r8d
  cmp    $0x4,%edx
  jbe    L133
  cmp    %edi,%eax
  jge    L133
  mov    %r8d,%esi
  movslq %eax,%rdx
  movapd %xmm0,%xmm1
  shr    %esi
  lea    (%rcx,%rdx,8),%rdx
  unpcklpd %xmm1,%xmm1
  sub    $0x1,%esi
  lea    (%rsi,%rsi,4),%rdi
  lea    0x50(%rdx),%rsi
  shl    $0x4,%rdi
  add    %rsi,%rdi
  jmp    L71
  nop
L43:
  add    $0x50,%rsi
L71:
  movupd 0x10(%rdx),%xmm5
  movupd 0x20(%rdx),%xmm4
  movupd 0x30(%rdx),%xmm3
  movupd 0x40(%rdx),%xmm2
  movupd (%rdx),%xmm6
  mulpd  %xmm1,%xmm5
  mulpd  %xmm1,%xmm4
  mulpd  %xmm1,%xmm3
  mulpd  %xmm1,%xmm2
  mulpd  %xmm1,%xmm6
  movups %xmm5,0x10(%rdx)
  movups %xmm4,0x20(%rdx)
  movups %xmm3,0x30(%rdx)
  movups %xmm2,0x40(%rdx)
  movups %xmm6,(%rdx)
  mov    %rsi,%rdx
  cmp    %rdi,%rsi
  jne    L43
  mov    %r8d,%edx
  and    $0xfffffffe,%edx
  lea    (%rdx,%rdx,4),%esi
  add    %esi,%eax
  cmp    %r8d,%edx
  je     L17
L133:
  cltq
  shl    $0x3,%rax
  lea    (%rcx,%rax,1),%rdx
  movsd  (%rdx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdx)
  lea    0x8(%rcx,%rax,1),%rdx
  movsd  (%rdx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdx)
  lea    0x10(%rcx,%rax,1),%rdx
  movsd  (%rdx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdx)
  lea    0x18(%rcx,%rax,1),%rdx
  lea    0x20(%rcx,%rax,1),%rax
  movsd  (%rdx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdx)
  mulsd  (%rax),%xmm0
  movsd  %xmm0,(%rax)
L17:
  ret
  nopw   0x0(%rax,%rax,1)
L120:
  cmp    $0x1,%eax
  je     L139
  movupd (%rsi),%xmm1
  movapd %xmm0,%xmm2
  mov    %eax,%edx
  unpcklpd %xmm2,%xmm2
  shr    %edx
  mulpd  %xmm2,%xmm1
  movups %xmm1,(%rsi)
  cmp    $0x2,%edx
  jne    L117
  movupd 0x10(%rsi),%xmm1
  mulpd  %xmm2,%xmm1
  movups %xmm1,0x10(%rsi)
  cs nopw 0x0(%rax,%rax,1)
L130:
  cmp    $0x4,%edi
  jg     L84
  ret
  nopw   0x0(%rax,%rax,1)
L117:
  cmp    $0x2,%eax
  je     L130
  mov    $0x2,%edx
L113:
  lea    (%rcx,%rdx,8),%rdx
  movsd  (%rdx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdx)
  jmp    L130
L139:
  xor    %edx,%edx
  jmp    L113
```

assistant: ```c
void dscal(int n, double da, double dx[], int incx) {
  int i, m, mp1, nincx;
  mp1 = 0;
  m = 0;
  if (n <= 0)
    return;
  if (incx != 1) {
    nincx = n * incx;
    for (i = 0; i < nincx; i = i + incx)
      dx[i] = da * dx[i];
    return;
  }
  m = n % 5;
  if (m != 0) {
    for (i = 0; i < m; i++)
      dx[i] = da * dx[i];
    if (n < 5)
      return;
  }
  for (i = m; i < n; i = i + 5) {
    dx[i] = da * dx[i];
    dx[i + 1] = da * dx[i + 1];
    dx[i + 2] = da * dx[i + 2];
    dx[i + 3] = da * dx[i + 3];
    dx[i + 4] = da * dx[i + 4];
  }
}
```