user: What would the C source look like for the assembly code provided here?

```asm
<ZVaxpy31>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8,-0x38(%rbp)
  mov    %r9,-0x40(%rbp)
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm6
  movapd %xmm6,%xmm8
  mov    -0x38(%rbp),%rax
  movsd  0x8(%rax),%xmm7
  movapd %xmm7,%xmm9
  mov    -0x38(%rbp),%rax
  movsd  0x10(%rax),%xmm1
  movapd %xmm1,%xmm10
  mov    -0x38(%rbp),%rax
  movsd  0x18(%rax),%xmm5
  movapd %xmm5,%xmm11
  mov    -0x38(%rbp),%rax
  movsd  0x20(%rax),%xmm6
  movapd %xmm6,%xmm12
  mov    -0x38(%rbp),%rax
  movsd  0x28(%rax),%xmm7
  movapd %xmm7,%xmm13
  movl   $0x0,-0x4(%rbp)
  jmp    L0
L11:
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm3
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm4
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movapd %xmm8,%xmm5
  movapd %xmm5,%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm9,%xmm6
  movapd %xmm6,%xmm2
  mulsd  %xmm4,%xmm2
  subsd  %xmm2,%xmm0
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm4,%xmm5
  movapd %xmm5,%xmm2
  mulsd  %xmm3,%xmm6
  movapd %xmm6,%xmm0
  addsd  %xmm2,%xmm0
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movapd %xmm10,%xmm7
  movapd %xmm7,%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm11,%xmm5
  movapd %xmm5,%xmm2
  mulsd  %xmm4,%xmm2
  subsd  %xmm2,%xmm0
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm4,%xmm7
  movapd %xmm7,%xmm2
  mulsd  %xmm3,%xmm5
  movapd %xmm5,%xmm0
  addsd  %xmm2,%xmm0
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movapd %xmm12,%xmm6
  movapd %xmm6,%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm13,%xmm7
  movapd %xmm7,%xmm2
  mulsd  %xmm4,%xmm2
  subsd  %xmm2,%xmm0
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm6,%xmm4
  movapd %xmm4,%xmm2
  mulsd  %xmm7,%xmm3
  movapd %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  mov    -0x4(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L0:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L11
  nop
  pop    %rbp
  ret
```

assistant: ```c
void ZVaxpy31(int n, double y0[], double y1[], double y2[], double alpha[], double x0[]) {
  register double ar00, ar10, ar20;
  register double ai00, ai10, ai20;
  register double xr0i;
  register double xi0i;
  int ii;
  ar00 = alpha[0];
  ai00 = alpha[1];
  ar10 = alpha[2];
  ai10 = alpha[3];
  ar20 = alpha[4];
  ai20 = alpha[5];
  for (ii = 0; ii < n; ii++) {
    xr0i = x0[2 * ii];
    xi0i = x0[2 * ii + 1];
    y0[2 * ii] += (ar00 * xr0i - ai00 * xi0i);
    y0[2 * ii + 1] += (ar00 * xi0i + ai00 * xr0i);
    y1[2 * ii] += (ar10 * xr0i - ai10 * xi0i);
    y1[2 * ii + 1] += (ar10 * xi0i + ai10 * xr0i);
    y2[2 * ii] += (ar20 * xr0i - ai20 * xi0i);
    y2[2 * ii + 1] += (ar20 * xi0i + ai20 * xr0i);
  }
  return;
}
```