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

```asm
<ZVaxpy33>:
  endbr64
  mov    %edi,%eax
  mov    0x8(%rsp),%rdi
  mov    0x10(%rsp),%r10
  movsd  (%r8),%xmm7
  movsd  %xmm7,-0x58(%rsp)
  movsd  0x8(%r8),%xmm7
  movsd  %xmm7,-0x50(%rsp)
  movsd  0x10(%r8),%xmm7
  movsd  %xmm7,-0x48(%rsp)
  movsd  0x18(%r8),%xmm7
  movsd  %xmm7,-0x40(%rsp)
  movsd  0x20(%r8),%xmm7
  movsd  %xmm7,-0x38(%rsp)
  movsd  0x28(%r8),%xmm7
  movsd  %xmm7,-0x30(%rsp)
  movsd  0x30(%r8),%xmm7
  movsd  %xmm7,-0x28(%rsp)
  movsd  0x38(%r8),%xmm7
  movsd  %xmm7,-0x20(%rsp)
  movsd  0x40(%r8),%xmm7
  movsd  %xmm7,-0x18(%rsp)
  movsd  0x48(%r8),%xmm7
  movsd  %xmm7,-0x10(%rsp)
  movsd  0x50(%r8),%xmm7
  movsd  %xmm7,-0x8(%rsp)
  movsd  0x58(%r8),%xmm7
  movsd  0x60(%r8),%xmm8
  movsd  0x68(%r8),%xmm9
  movsd  0x70(%r8),%xmm10
  movsd  0x78(%r8),%xmm11
  movsd  0x80(%r8),%xmm12
  movsd  0x88(%r8),%xmm13
  test   %eax,%eax
  jle    L14
  mov    %eax,%r8d
  shl    $0x4,%r8
  mov    $0x0,%eax
L15:
  movsd  (%r9,%rax,1),%xmm15
  movsd  0x8(%r9,%rax,1),%xmm4
  movsd  (%rdi,%rax,1),%xmm6
  movsd  0x8(%rdi,%rax,1),%xmm1
  movsd  (%r10,%rax,1),%xmm5
  movsd  0x8(%r10,%rax,1),%xmm2
  movsd  -0x58(%rsp),%xmm14
  mulsd  %xmm15,%xmm14
  movsd  -0x50(%rsp),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm14
  movsd  -0x48(%rsp),%xmm3
  mulsd  %xmm6,%xmm3
  movsd  -0x40(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  subsd  %xmm0,%xmm3
  addsd  %xmm14,%xmm3
  movsd  -0x38(%rsp),%xmm14
  mulsd  %xmm5,%xmm14
  movsd  -0x30(%rsp),%xmm0
  mulsd  %xmm2,%xmm0
  subsd  %xmm0,%xmm14
  addsd  %xmm14,%xmm3
  addsd  (%rsi,%rax,1),%xmm3
  movsd  %xmm3,(%rsi,%rax,1)
  movsd  -0x58(%rsp),%xmm14
  mulsd  %xmm4,%xmm14
  movsd  -0x50(%rsp),%xmm0
  mulsd  %xmm15,%xmm0
  addsd  %xmm0,%xmm14
  movsd  -0x48(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x40(%rsp),%xmm3
  mulsd  %xmm6,%xmm3
  addsd  %xmm3,%xmm0
  addsd  %xmm14,%xmm0
  movsd  -0x38(%rsp),%xmm3
  mulsd  %xmm2,%xmm3
  movsd  -0x30(%rsp),%xmm14
  mulsd  %xmm5,%xmm14
  addsd  %xmm14,%xmm3
  addsd  %xmm0,%xmm3
  addsd  0x8(%rsi,%rax,1),%xmm3
  movsd  %xmm3,0x8(%rsi,%rax,1)
  movsd  -0x28(%rsp),%xmm14
  mulsd  %xmm15,%xmm14
  movsd  -0x20(%rsp),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm14
  movsd  -0x18(%rsp),%xmm3
  mulsd  %xmm6,%xmm3
  movsd  -0x10(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  subsd  %xmm0,%xmm3
  addsd  %xmm14,%xmm3
  movsd  -0x8(%rsp),%xmm14
  mulsd  %xmm5,%xmm14
  movapd %xmm7,%xmm0
  mulsd  %xmm2,%xmm0
  subsd  %xmm0,%xmm14
  addsd  %xmm14,%xmm3
  addsd  (%rdx,%rax,1),%xmm3
  movsd  %xmm3,(%rdx,%rax,1)
  movsd  -0x28(%rsp),%xmm14
  mulsd  %xmm4,%xmm14
  movsd  -0x20(%rsp),%xmm0
  mulsd  %xmm15,%xmm0
  addsd  %xmm0,%xmm14
  movsd  -0x18(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x10(%rsp),%xmm3
  mulsd  %xmm6,%xmm3
  addsd  %xmm3,%xmm0
  addsd  %xmm14,%xmm0
  movsd  -0x8(%rsp),%xmm3
  mulsd  %xmm2,%xmm3
  movapd %xmm7,%xmm14
  mulsd  %xmm5,%xmm14
  addsd  %xmm14,%xmm3
  addsd  %xmm0,%xmm3
  addsd  0x8(%rdx,%rax,1),%xmm3
  movsd  %xmm3,0x8(%rdx,%rax,1)
  movapd %xmm8,%xmm14
  mulsd  %xmm15,%xmm14
  movapd %xmm9,%xmm0
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm14
  movapd %xmm10,%xmm3
  mulsd  %xmm6,%xmm3
  movapd %xmm11,%xmm0
  mulsd  %xmm1,%xmm0
  subsd  %xmm0,%xmm3
  addsd  %xmm14,%xmm3
  movapd %xmm12,%xmm14
  mulsd  %xmm5,%xmm14
  movapd %xmm13,%xmm0
  mulsd  %xmm2,%xmm0
  subsd  %xmm0,%xmm14
  addsd  %xmm14,%xmm3
  addsd  (%rcx,%rax,1),%xmm3
  movsd  %xmm3,(%rcx,%rax,1)
  mulsd  %xmm8,%xmm4
  mulsd  %xmm9,%xmm15
  addsd  %xmm15,%xmm4
  mulsd  %xmm10,%xmm1
  mulsd  %xmm11,%xmm6
  addsd  %xmm6,%xmm1
  addsd  %xmm4,%xmm1
  mulsd  %xmm12,%xmm2
  mulsd  %xmm13,%xmm5
  addsd  %xmm5,%xmm2
  addsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  addsd  0x8(%rcx,%rax,1),%xmm0
  movsd  %xmm0,0x8(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    %r8,%rax
  jne    L15
L14:
  ret
```

assistant: ```c
void ZVaxpy33(int n, double y0[], double y1[], double y2[], double alpha[], double x0[], double x1[], double x2[]) {
  register double ar00, ar01, ar02, ar10, ar11, ar12, ar20, ar21, ar22;
  register double ai00, ai01, ai02, ai10, ai11, ai12, ai20, ai21, ai22;
  register double xr0i, xr1i, xr2i;
  register double xi0i, xi1i, xi2i;
  int ii;
  ar00 = alpha[0];
  ai00 = alpha[1];
  ar01 = alpha[2];
  ai01 = alpha[3];
  ar02 = alpha[4];
  ai02 = alpha[5];
  ar10 = alpha[6];
  ai10 = alpha[7];
  ar11 = alpha[8];
  ai11 = alpha[9];
  ar12 = alpha[10];
  ai12 = alpha[11];
  ar20 = alpha[12];
  ai20 = alpha[13];
  ar21 = alpha[14];
  ai21 = alpha[15];
  ar22 = alpha[16];
  ai22 = alpha[17];
  for (ii = 0; ii < n; ii++) {
    xr0i = x0[2 * ii];
    xi0i = x0[2 * ii + 1];
    xr1i = x1[2 * ii];
    xi1i = x1[2 * ii + 1];
    xr2i = x2[2 * ii];
    xi2i = x2[2 * ii + 1];
    y0[2 * ii] += (ar00 * xr0i - ai00 * xi0i) + (ar01 * xr1i - ai01 * xi1i) + (ar02 * xr2i - ai02 * xi2i);
    y0[2 * ii + 1] += (ar00 * xi0i + ai00 * xr0i) + (ar01 * xi1i + ai01 * xr1i) + (ar02 * xi2i + ai02 * xr2i);
    y1[2 * ii] += (ar10 * xr0i - ai10 * xi0i) + (ar11 * xr1i - ai11 * xi1i) + (ar12 * xr2i - ai12 * xi2i);
    y1[2 * ii + 1] += (ar10 * xi0i + ai10 * xr0i) + (ar11 * xi1i + ai11 * xr1i) + (ar12 * xi2i + ai12 * xr2i);
    y2[2 * ii] += (ar20 * xr0i - ai20 * xi0i) + (ar21 * xr1i - ai21 * xi1i) + (ar22 * xr2i - ai22 * xi2i);
    y2[2 * ii + 1] += (ar20 * xi0i + ai20 * xr0i) + (ar21 * xi1i + ai21 * xr1i) + (ar22 * xi2i + ai22 * xr2i);
  }
  return;
}
```