user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<my_dscal>:
  endbr64
  mov    %rsi,%rcx
  test   %edi,%edi
  jle    L0
  test   %edx,%edx
  jle    L0
  cmp    $0x1,%edx
  je     L36
  imul   %edx,%edi
  movslq %edx,%rsi
  mov    %rcx,%rax
  xor    %ecx,%ecx
  shl    $0x3,%rsi
  nopl   0x0(%rax,%rax,1)
L64:
  movsd  (%rax),%xmm1
  add    %edx,%ecx
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rax)
  add    %rsi,%rax
  cmp    %ecx,%edi
  jg     L64
  ret
  cs nopw 0x0(%rax,%rax,1)
L36:
  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    L56
L42:
  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    L129
  cmp    %edi,%eax
  jge    L129
  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    L127
  nop
L139:
  add    $0x50,%rsi
L127:
  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    L139
  mov    %r8d,%edx
  and    $0xfffffffe,%edx
  lea    (%rdx,%rdx,4),%esi
  add    %esi,%eax
  cmp    %r8d,%edx
  je     L0
L129:
  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)
L0:
  ret
  nopw   0x0(%rax,%rax,1)
L56:
  cmp    $0x1,%eax
  je     L14
  movupd (%rsi),%xmm1
  movapd %xmm0,%xmm2
  mov    %eax,%edx
  unpcklpd %xmm2,%xmm2
  shr    %edx
  mulpd  %xmm2,%xmm1
  movups %xmm1,(%rsi)
  cmp    $0x2,%edx
  jne    L142
  movupd 0x10(%rsi),%xmm1
  mulpd  %xmm2,%xmm1
  movups %xmm1,0x10(%rsi)
  cs nopw 0x0(%rax,%rax,1)
L123:
  cmp    $0x4,%edi
  jg     L42
  ret
  nopw   0x0(%rax,%rax,1)
L142:
  cmp    $0x2,%eax
  je     L123
  mov    $0x2,%edx
L122:
  lea    (%rcx,%rdx,8),%rdx
  movsd  (%rdx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdx)
  jmp    L123
L14:
  xor    %edx,%edx
  jmp    L122
```

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