user: 请从给定的汇编指令推导出C源代码:

```asm
<daxpy_vec>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r13
  push   %r12
  push   %rbx
  mov    %rdi,-0x20(%rbp)
  mov    %rsi,-0x28(%rbp)
  movsd  %xmm0,-0x30(%rbp)
  movsd  %xmm1,-0x38(%rbp)
  mov    %edx,-0x3c(%rbp)
  mov    %ecx,-0x40(%rbp)
  mov    %r8d,-0x44(%rbp)
  movsd  D1(%rip),%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jp     L6
  movsd  D1(%rip),%xmm0
  ucomisd -0x38(%rbp),%xmm0
  je     L148
L6:
  mov    -0x20(%rbp),%rbx
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jp     L97
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jne    L97
  mov    $0x0,%r13d
  jmp    L124
L69:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rbx)
  add    $0x8,%rbx
  add    $0x1,%r13d
L124:
  cmp    -0x44(%rbp),%r13d
  jl     L69
  jmp    L148
L97:
  mov    $0x0,%r13d
  jmp    L132
L154:
  movsd  (%rbx),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rbx)
  add    $0x8,%rbx
  add    $0x1,%r13d
L132:
  cmp    -0x44(%rbp),%r13d
  jl     L154
L148:
  mov    -0x20(%rbp),%rbx
  mov    -0x28(%rbp),%r12
  mov    $0x0,%r13d
  jmp    L90
L136:
  movsd  (%rbx),%xmm1
  movsd  (%r12),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rbx)
  mov    -0x3c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%r12
  mov    -0x40(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rbx
  movsd  (%rbx),%xmm1
  movsd  (%r12),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rbx)
  mov    -0x3c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%r12
  mov    -0x40(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rbx
  movsd  (%rbx),%xmm1
  movsd  (%r12),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rbx)
  mov    -0x3c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%r12
  mov    -0x40(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rbx
  movsd  (%rbx),%xmm1
  movsd  (%r12),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rbx)
  mov    -0x3c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%r12
  mov    -0x40(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rbx
  add    $0x4,%r13d
L90:
  mov    -0x44(%rbp),%eax
  sub    $0x3,%eax
  cmp    %eax,%r13d
  jl     L136
  cmp    -0x44(%rbp),%r13d
  je     L28
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,%r13d
  jge    L89
  movsd  (%rbx),%xmm1
  movsd  (%r12),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rbx)
  mov    -0x3c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%r12
  mov    -0x40(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rbx
  movsd  (%rbx),%xmm1
  movsd  (%r12),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rbx)
  mov    -0x3c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%r12
  mov    -0x40(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rbx
  add    $0x2,%r13d
L89:
  cmp    -0x44(%rbp),%r13d
  jge    L82
  movsd  (%rbx),%xmm1
  movsd  (%r12),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rbx)
  jmp    L82
L28:
  nop
  jmp    L93
L82:
  nop
L93:
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: label: D1
type_guessed: f64

tool: D1: 1

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;
}
```