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

```asm
<ZVaxpy33>:
  endbr64
  sub    $0xe0,%rsp
  movsd  (%r8),%xmm7
  mov    %edi,%eax
  movsd  0x10(%r8),%xmm15
  movsd  0x18(%r8),%xmm14
  movsd  0x20(%r8),%xmm13
  mov    %rdx,%rdi
  movsd  0x28(%r8),%xmm12
  mov    0x8(%r8),%rdx
  movsd  %xmm7,-0x78(%rsp)
  movsd  0x30(%r8),%xmm11
  movsd  0x38(%r8),%xmm10
  movsd  0x40(%r8),%xmm9
  movsd  0x48(%r8),%xmm8
  movsd  0x50(%r8),%xmm7
  movsd  0x58(%r8),%xmm6
  movsd  0x60(%r8),%xmm5
  movsd  0x68(%r8),%xmm4
  movsd  0x70(%r8),%xmm3
  movsd  0x78(%r8),%xmm2
  mov    0xe8(%rsp),%r10
  mov    0xf0(%rsp),%r11
  movsd  0x80(%r8),%xmm1
  mov    0x88(%r8),%r8
  test   %eax,%eax
  jle    L1
  movsd  -0x78(%rsp),%xmm0
  unpcklpd %xmm0,%xmm0
  movaps %xmm0,0xc8(%rsp)
  movq   %rdx,%xmm0
  movslq %eax,%rdx
  xor    %eax,%eax
  unpcklpd %xmm0,%xmm0
  shl    $0x4,%rdx
  movaps %xmm0,0xb8(%rsp)
  movapd %xmm15,%xmm0
  unpcklpd %xmm0,%xmm0
  movaps %xmm0,0xa8(%rsp)
  movapd %xmm14,%xmm0
  unpcklpd %xmm0,%xmm0
  movaps %xmm0,0x98(%rsp)
  movapd %xmm13,%xmm0
  unpcklpd %xmm0,%xmm0
  movaps %xmm0,0x88(%rsp)
  movapd %xmm12,%xmm0
  unpcklpd %xmm0,%xmm0
  movaps %xmm0,0x78(%rsp)
  movapd %xmm11,%xmm0
  unpcklpd %xmm0,%xmm0
  movaps %xmm0,0x68(%rsp)
  movapd %xmm10,%xmm0
  unpcklpd %xmm0,%xmm0
  movaps %xmm0,0x58(%rsp)
  movapd %xmm9,%xmm0
  unpcklpd %xmm0,%xmm0
  movaps %xmm0,0x48(%rsp)
  movapd %xmm8,%xmm0
  unpcklpd %xmm0,%xmm0
  movaps %xmm0,0x38(%rsp)
  movapd %xmm7,%xmm0
  movapd %xmm6,%xmm7
  unpcklpd %xmm7,%xmm7
  unpcklpd %xmm0,%xmm0
  movaps %xmm7,0x18(%rsp)
  movapd %xmm5,%xmm7
  unpcklpd %xmm7,%xmm7
  movaps %xmm0,0x28(%rsp)
  movaps %xmm7,0x8(%rsp)
  movapd %xmm4,%xmm7
  movapd %xmm2,%xmm4
  unpcklpd %xmm7,%xmm7
  unpcklpd %xmm4,%xmm4
  movaps %xmm7,-0x8(%rsp)
  movapd %xmm3,%xmm7
  unpcklpd %xmm7,%xmm7
  movaps %xmm4,-0x28(%rsp)
  movq   %r8,%xmm4
  movaps %xmm7,-0x18(%rsp)
  movapd %xmm1,%xmm7
  unpcklpd %xmm4,%xmm4
  unpcklpd %xmm7,%xmm7
  movaps %xmm4,-0x48(%rsp)
  movaps %xmm7,-0x38(%rsp)
  nopl   0x0(%rax)
L0:
  movupd (%r10,%rax,1),%xmm2
  movapd -0x28(%rsp),%xmm7
  movupd (%r9,%rax,1),%xmm0
  movapd -0x8(%rsp),%xmm1
  mulpd  %xmm2,%xmm7
  movapd 0x58(%rsp),%xmm3
  movapd 0x8(%rsp),%xmm15
  movapd 0x68(%rsp),%xmm10
  movapd -0x18(%rsp),%xmm8
  mulpd  %xmm0,%xmm1
  movapd 0xc8(%rsp),%xmm13
  movapd 0x48(%rsp),%xmm11
  mulpd  %xmm0,%xmm3
  movapd 0xa8(%rsp),%xmm14
  mulpd  %xmm0,%xmm15
  movapd 0x88(%rsp),%xmm12
  mulpd  %xmm0,%xmm10
  movapd 0x28(%rsp),%xmm9
  movapd -0x48(%rsp),%xmm4
  mulpd  %xmm2,%xmm14
  movapd %xmm7,%xmm6
  movapd 0x18(%rsp),%xmm5
  shufpd $0x1,%xmm7,%xmm6
  movapd 0x38(%rsp),%xmm7
  mulpd  %xmm0,%xmm13
  movaps %xmm6,-0x78(%rsp)
  mulpd  %xmm2,%xmm8
  shufpd $0x1,%xmm1,%xmm1
  movaps %xmm1,-0x68(%rsp)
  movupd (%r11,%rax,1),%xmm1
  mulpd  0xb8(%rsp),%xmm0
  shufpd $0x1,%xmm3,%xmm3
  mulpd  %xmm2,%xmm7
  mulpd  %xmm2,%xmm11
  mulpd  0x98(%rsp),%xmm2
  mulpd  %xmm1,%xmm12
  shufpd $0x1,%xmm0,%xmm0
  movaps %xmm0,-0x58(%rsp)
  movapd %xmm14,%xmm0
  mulpd  %xmm1,%xmm9
  movapd %xmm7,%xmm6
  shufpd $0x1,%xmm7,%xmm6
  movapd -0x38(%rsp),%xmm7
  mulpd  %xmm1,%xmm4
  shufpd $0x1,%xmm2,%xmm2
  subpd  %xmm2,%xmm0
  addpd  %xmm14,%xmm2
  movapd %xmm13,%xmm14
  mulpd  %xmm1,%xmm7
  mulpd  %xmm1,%xmm5
  mulpd  0x78(%rsp),%xmm1
  movsd  %xmm0,%xmm2
  movapd -0x58(%rsp),%xmm0
  shufpd $0x1,%xmm4,%xmm4
  subpd  %xmm0,%xmm14
  addpd  %xmm13,%xmm0
  shufpd $0x1,%xmm5,%xmm5
  movsd  %xmm14,%xmm0
  shufpd $0x1,%xmm1,%xmm1
  addpd  %xmm2,%xmm0
  movapd %xmm12,%xmm2
  subpd  %xmm1,%xmm2
  addpd  %xmm12,%xmm1
  movsd  %xmm2,%xmm1
  movupd (%rsi,%rax,1),%xmm2
  addpd  %xmm1,%xmm0
  addpd  %xmm2,%xmm0
  movups %xmm0,(%rsi,%rax,1)
  movapd %xmm11,%xmm0
  movupd (%rdi,%rax,1),%xmm2
  subpd  %xmm6,%xmm0
  addpd  %xmm11,%xmm6
  movsd  %xmm0,%xmm6
  movapd %xmm10,%xmm0
  subpd  %xmm3,%xmm0
  addpd  %xmm10,%xmm3
  movsd  %xmm0,%xmm3
  movapd %xmm9,%xmm0
  subpd  %xmm5,%xmm0
  addpd  %xmm9,%xmm5
  addpd  %xmm6,%xmm3
  movapd -0x78(%rsp),%xmm6
  movsd  %xmm0,%xmm5
  movapd %xmm8,%xmm0
  addpd  %xmm5,%xmm3
  movapd -0x68(%rsp),%xmm5
  subpd  %xmm6,%xmm0
  addpd  %xmm8,%xmm6
  addpd  %xmm2,%xmm3
  shufpd $0x2,%xmm6,%xmm0
  movups %xmm3,(%rdi,%rax,1)
  movapd %xmm15,%xmm3
  subpd  %xmm5,%xmm3
  addpd  %xmm15,%xmm5
  movapd %xmm5,%xmm2
  movsd  %xmm3,%xmm2
  addpd  %xmm0,%xmm2
  movapd %xmm7,%xmm0
  subpd  %xmm4,%xmm0
  addpd  %xmm7,%xmm4
  movsd  %xmm0,%xmm4
  addpd  %xmm4,%xmm2
  movupd (%rcx,%rax,1),%xmm4
  addpd  %xmm4,%xmm2
  movups %xmm2,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L0
L1:
  add    $0xe0,%rsp
  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;
}
```