user: 这段汇编代码用C语言表示是什么样的?

```asm
<blasDSCAL>:
  endbr64
  mov    %rsi,%rcx
  test   %edi,%edi
  jle    L22
  cmp    $0x1,%edx
  je     L15
  xor    %eax,%eax
  test   %edx,%edx
  jns    L79
  mov    $0x1,%eax
  sub    %edi,%eax
  imul   %edx,%eax
L79:
  movslq %edx,%rdx
  cltq
  lea    0x0(,%rdx,8),%rsi
  lea    (%rcx,%rax,8),%rax
  xor    %edx,%edx
  nopl   0x0(%rax,%rax,1)
L24:
  movsd  (%rax),%xmm1
  add    $0x1,%edx
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rax)
  add    %rsi,%rax
  cmp    %edx,%edi
  jne    L24
L22:
  ret
  nop
L15:
  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
  je     L135
  cmp    $0x1,%eax
  je     L12
  movupd (%rsi),%xmm1
  movapd %xmm0,%xmm2
  mov    %eax,%edx
  unpcklpd %xmm2,%xmm2
  shr    %edx
  mulpd  %xmm2,%xmm1
  movups %xmm1,(%rsi)
  cmp    $0x2,%edx
  jne    L97
  movupd 0x10(%rsi),%xmm1
  mulpd  %xmm2,%xmm1
  movups %xmm1,0x10(%rsi)
  nopl   0x0(%rax)
L38:
  cmp    %eax,%edi
  jle    L22
L135:
  sub    $0x1,%edi
  mov    $0xcccccccd,%edx
  sub    %eax,%edi
  mov    %edi,%r8d
  imul   %rdx,%r8
  shr    $0x22,%r8
  add    $0x1,%r8d
  cmp    $0x4,%edi
  jbe    L7
  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    L123
  cs nopw 0x0(%rax,%rax,1)
L66:
  add    $0x50,%rsi
L123:
  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    L66
  mov    %r8d,%edx
  and    $0xfffffffe,%edx
  lea    (%rdx,%rdx,4),%esi
  add    %esi,%eax
  cmp    %r8d,%edx
  je     L22
L7:
  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)
  ret
  cs nopw 0x0(%rax,%rax,1)
L97:
  cmp    $0x2,%eax
  je     L38
  mov    $0x2,%edx
L133:
  lea    (%rcx,%rdx,8),%rdx
  movsd  (%rdx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdx)
  jmp    L38
L12:
  xor    %edx,%edx
  jmp    L133
```

assistant: ```c
void blasDSCAL(int n, double sa, double x[], int incx) {
  int i, ix, m;
  if (n <= 0) {
  } else if (incx == 1) {
    m = n % 5;
    for (i = 0; i < m; i++) {
      x[i] = sa * x[i];
    }
    for (i = m; i < n; i = i + 5) {
      x[i] = sa * x[i];
      x[i + 1] = sa * x[i + 1];
      x[i + 2] = sa * x[i + 2];
      x[i + 3] = sa * x[i + 3];
      x[i + 4] = sa * x[i + 4];
    }
  } else {
    if (0 <= incx) {
      ix = 0;
    } else {
      ix = (-n + 1) * incx;
    }
    for (i = 0; i < n; i++) {
      x[ix] = sa * x[ix];
      ix = ix + incx;
    }
  }
}
```