user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<daxpy_vec>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %rsi,%r13
  mov    %edx,%r14d
  mov    %ecx,%r15d
  ucomisd D16(%rip),%xmm1
  jp     L81
  jne    L81
L87:
  lea    -0x3(%r8),%r12d
  mov    $0x0,%eax
  test   %r12d,%r12d
  jle    L30
L86:
  movslq %r14d,%r11
  lea    0x0(,%r11,8),%r10
  movslq %r15d,%rax
  lea    0x0(,%rax,8),%rsi
  mov    %rax,%r9
  shl    $0x5,%r9
  shl    $0x4,%rax
  add    %rbx,%rax
  lea    (%r11,%r11,2),%rbp
  shl    $0x3,%rbp
  shl    $0x5,%r11
  mov    %r13,%rcx
  mov    %rbx,%rdx
  mov    $0x0,%edi
L58:
  movapd %xmm0,%xmm1
  mulsd  (%rcx),%xmm1
  addsd  (%rdx),%xmm1
  movsd  %xmm1,(%rdx)
  movapd %xmm0,%xmm1
  mulsd  (%rcx,%r10,1),%xmm1
  addsd  (%rdx,%rsi,1),%xmm1
  movsd  %xmm1,(%rdx,%rsi,1)
  movapd %xmm0,%xmm1
  mulsd  (%rcx,%r10,2),%xmm1
  addsd  (%rax),%xmm1
  movsd  %xmm1,(%rax)
  movapd %xmm0,%xmm1
  mulsd  (%rcx,%rbp,1),%xmm1
  addsd  (%rax,%rsi,1),%xmm1
  movsd  %xmm1,(%rax,%rsi,1)
  add    %r11,%rcx
  add    %r9,%rdx
  add    $0x4,%edi
  add    %r9,%rax
  cmp    %edi,%r12d
  jg     L58
  lea    -0x4(%r8),%eax
  shr    $0x2,%eax
  add    $0x1,%eax
  mov    %eax,%edx
  imul   %rdx,%r11
  add    %r11,%r13
  imul   %r9,%rdx
  add    %rdx,%rbx
  shl    $0x2,%eax
L30:
  cmp    %eax,%r8d
  je     L147
L18:
  lea    -0x1(%r8),%edx
  cmp    %eax,%edx
  jle    L65
  movapd %xmm0,%xmm1
  mulsd  0x0(%r13),%xmm1
  addsd  (%rbx),%xmm1
  movsd  %xmm1,(%rbx)
  movslq %r14d,%r14
  shl    $0x3,%r14
  add    %r14,%r13
  movslq %r15d,%r15
  shl    $0x3,%r15
  add    %r15,%rbx
  movapd %xmm0,%xmm1
  mulsd  0x0(%r13),%xmm1
  addsd  (%rbx),%xmm1
  movsd  %xmm1,(%rbx)
  add    %r14,%r13
  add    %r15,%rbx
  add    $0x2,%eax
L65:
  cmp    %r8d,%eax
  jge    L147
  mulsd  0x0(%r13),%xmm0
  addsd  (%rbx),%xmm0
  movsd  %xmm0,(%rbx)
L147:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L81:
  ucomisd D7(%rip),%xmm1
  jp     L159
  jne    L159
  test   %r8d,%r8d
  jle    L87
  mov    %r8d,%eax
  lea    (%rbx,%rax,8),%rdx
  mov    %rbx,%rax
L103:
  movq   $0x0,(%rax)
  add    $0x8,%rax
  cmp    %rdx,%rax
  jne    L103
L104:
  lea    -0x3(%r8),%r12d
  mov    $0x0,%eax
  test   %r12d,%r12d
  jg     L86
  jmp    L18
L159:
  test   %r8d,%r8d
  jle    L87
  mov    %r8d,%eax
  lea    (%rbx,%rax,8),%rdx
  mov    %rbx,%rax
L6:
  movapd %xmm1,%xmm2
  mulsd  (%rax),%xmm2
  movsd  %xmm2,(%rax)
  add    $0x8,%rax
  cmp    %rdx,%rax
  jne    L6
  jmp    L104
```

tool_calls: name: read_data
arguments: data_tag: D16
type_infered: f64
name: read_data
arguments: data_tag: D7
type_infered: f64

tool: D16: 1

tool: D7: 0

assistant: ```c
void daxpy_vec(double *Y, const double *X, double alpha, double beta, int incX, int incY, int N) {
  register int i;
  register double *y0;
  register const double *x0;
  if (beta != 1.0) {
    y0 = Y;
    if (beta == 0.0) {
      for (i = 0; i < N; i++) {
        y0[0] = 0.0;
        y0++;
      }
    } else {
      for (i = 0; i < N; i++) {
        y0[0] *= beta;
        y0++;
      }
    }
  }
  y0 = Y;
  x0 = X;
  for (i = 0; i < N - 3; i += 4) {
    y0[0] += alpha * x0[0];
    x0 += incX;
    y0 += incY;
    y0[0] += alpha * x0[0];
    x0 += incX;
    y0 += incY;
    y0[0] += alpha * x0[0];
    x0 += incX;
    y0 += incY;
    y0[0] += alpha * x0[0];
    x0 += incX;
    y0 += incY;
  }
  if (i == N) {
    return;
  }
  if (i < N - 1) {
    y0[0] += alpha * x0[0];
    x0 += incX;
    y0 += incY;
    y0[0] += alpha * x0[0];
    x0 += incX;
    y0 += incY;
    i += 2;
  }
  if (i < N) {
    y0[0] += alpha * x0[0];
  }
  return;
}
```