user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<xvm_axpy>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x38(%rbp)
  movsd  %xmm0,-0x40(%rbp)
  mov    %rsi,-0x48(%rbp)
  mov    %rdx,-0x50(%rbp)
  mov    %rcx,-0x58(%rbp)
  cmpq   $0x0,-0x38(%rbp)
  je     L11
  mov    -0x38(%rbp),%rax
  and    $0xf,%eax
  test   %rax,%rax
  jne    L11
  mov    $0x1,%eax
  jmp    L100
L11:
  mov    $0x0,%eax
L100:
  mov    %eax,%edi
  call   <assert@plt>
  cmpq   $0x0,-0x48(%rbp)
  je     L62
  mov    -0x48(%rbp),%rax
  and    $0xf,%eax
  test   %rax,%rax
  jne    L62
  mov    $0x1,%eax
  jmp    L63
L62:
  mov    $0x0,%eax
L63:
  mov    %eax,%edi
  call   <assert@plt>
  cmpq   $0x0,-0x50(%rbp)
  je     L91
  mov    -0x50(%rbp),%rax
  and    $0xf,%eax
  test   %rax,%rax
  jne    L91
  mov    $0x1,%eax
  jmp    L5
L91:
  mov    $0x0,%eax
L5:
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x40(%rbp),%rax
  movq   %rax,%xmm0
  call   <_mm_set1_pd@plt>
  mov    %eax,-0x2c(%rbp)
  movq   $0x0,-0x8(%rbp)
  jmp    L102
L28:
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <_mm_load_pd@plt>
  mov    %eax,-0x28(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <_mm_load_pd@plt>
  mov    %eax,-0x24(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <_mm_load_pd@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <_mm_load_pd@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x28(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_mul_pd@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x24(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_mul_pd@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_pd@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x1c(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_pd@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  mov    %rdx,%rdi
  call   <_mm_store_pd@plt>
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  mov    %rdx,%rdi
  call   <_mm_store_pd@plt>
  addq   $0x4,-0x8(%rbp)
L102:
  mov    -0x8(%rbp),%rax
  cmp    -0x58(%rbp),%rax
  jl     L28
  nop
  nop
  leave
  ret
```

assistant: ```c
void xvm_axpy(double r[], double a, const double x[], const double y[], uint64_t N) {
  assert(r != NULL && ((uintptr_t)r % 16) == 0);
  assert(x != NULL && ((uintptr_t)x % 16) == 0);
  assert(y != NULL && ((uintptr_t)y % 16) == 0);
  const __m128d va = _mm_set1_pd(a);
  for (uint64_t n = 0; n < N; n += 4) {
    const __m128d x0 = _mm_load_pd(x + n);
    const __m128d x1 = _mm_load_pd(x + n + 2);
    const __m128d y0 = _mm_load_pd(y + n);
    const __m128d y1 = _mm_load_pd(y + n + 2);
    const __m128d t0 = _mm_mul_pd(x0, va);
    const __m128d t1 = _mm_mul_pd(x1, va);
    const __m128d r0 = _mm_add_pd(t0, y0);
    const __m128d r1 = _mm_add_pd(t1, y1);
    _mm_store_pd(r + n, r0);
    _mm_store_pd(r + n + 2, r1);
  }
}
```