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

```asm
<lower_g>:
  endbr64
  lea    0x80(%rsi),%rcx
  mov    %rsi,%rax
  lea    0x20(%rdx),%rsi
  cmp    %rcx,%rdx
  setae  %cl
  cmp    %rsi,%rax
  setae  %sil
  or     %sil,%cl
  je     L19
  lea    0x1f(%rdx),%rcx
  sub    %rdi,%rcx
  cmp    $0x3e,%rcx
  jbe    L19
  pxor   %xmm6,%xmm6
  movsd  (%rdi),%xmm7
  movsd  0x8(%rdi),%xmm5
  movsd  0x10(%rdi),%xmm4
  movsd  0x18(%rdi),%xmm3
  movups %xmm6,(%rdx)
  movupd (%rax),%xmm1
  movupd 0x20(%rax),%xmm10
  unpcklpd %xmm7,%xmm7
  unpcklpd %xmm5,%xmm5
  movupd 0x10(%rax),%xmm2
  movlpd 0x8(%rax),%xmm2
  unpcklpd %xmm4,%xmm4
  unpcklpd %xmm3,%xmm3
  movhpd 0x10(%rax),%xmm1
  movhpd 0x30(%rax),%xmm10
  movupd 0x30(%rax),%xmm8
  movlpd 0x28(%rax),%xmm8
  movapd %xmm1,%xmm0
  movapd %xmm2,%xmm9
  unpckhpd %xmm10,%xmm1
  movups %xmm6,0x10(%rdx)
  unpcklpd %xmm10,%xmm0
  unpcklpd %xmm8,%xmm9
  unpckhpd %xmm8,%xmm2
  mulpd  %xmm7,%xmm0
  mulpd  %xmm5,%xmm9
  mulpd  %xmm4,%xmm1
  mulpd  %xmm3,%xmm2
  addpd  %xmm6,%xmm0
  addpd  %xmm9,%xmm0
  addpd  %xmm1,%xmm0
  addpd  %xmm2,%xmm0
  movups %xmm0,(%rdx)
  movupd 0x40(%rax),%xmm1
  movupd 0x50(%rax),%xmm9
  movupd 0x60(%rax),%xmm8
  movupd 0x70(%rax),%xmm0
  movapd %xmm1,%xmm2
  unpckhpd %xmm9,%xmm1
  unpcklpd %xmm9,%xmm2
  movapd %xmm8,%xmm9
  unpckhpd %xmm0,%xmm8
  unpcklpd %xmm0,%xmm9
  movapd %xmm2,%xmm0
  unpcklpd %xmm9,%xmm0
  unpckhpd %xmm9,%xmm2
  mulpd  %xmm7,%xmm0
  mulpd  %xmm4,%xmm2
  addpd  %xmm6,%xmm0
  movapd %xmm1,%xmm6
  unpckhpd %xmm8,%xmm1
  mulpd  %xmm3,%xmm1
  unpcklpd %xmm8,%xmm6
  mulpd  %xmm6,%xmm5
  addpd  %xmm5,%xmm0
  addpd  %xmm2,%xmm0
  addpd  %xmm1,%xmm0
  movups %xmm0,0x10(%rdx)
  ret
L19:
  movq   $0x0,(%rdx)
  movsd  (%rax),%xmm0
  pxor   %xmm2,%xmm2
  mulsd  (%rdi),%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,(%rdx)
  movsd  0x8(%rax),%xmm1
  mulsd  0x8(%rdi),%xmm1
  addsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdx)
  movsd  0x10(%rax),%xmm0
  mulsd  0x10(%rdi),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdx)
  movsd  0x18(%rdi),%xmm1
  mulsd  0x18(%rax),%xmm1
  movq   $0x0,0x8(%rdx)
  addsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdx)
  movsd  0x20(%rax),%xmm0
  mulsd  (%rdi),%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x8(%rdx)
  movsd  0x28(%rax),%xmm1
  mulsd  0x8(%rdi),%xmm1
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x8(%rdx)
  movsd  0x30(%rax),%xmm0
  mulsd  0x10(%rdi),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rdx)
  movsd  0x38(%rax),%xmm1
  mulsd  0x18(%rdi),%xmm1
  movq   $0x0,0x10(%rdx)
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x8(%rdx)
  movsd  0x40(%rax),%xmm0
  mulsd  (%rdi),%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x10(%rdx)
  movsd  0x48(%rax),%xmm1
  mulsd  0x8(%rdi),%xmm1
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rdx)
  movsd  0x50(%rax),%xmm0
  mulsd  0x10(%rdi),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rdx)
  movsd  0x58(%rax),%xmm1
  mulsd  0x18(%rdi),%xmm1
  movq   $0x0,0x18(%rdx)
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rdx)
  movsd  0x60(%rax),%xmm0
  mulsd  (%rdi),%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x18(%rdx)
  movsd  0x68(%rax),%xmm1
  mulsd  0x8(%rdi),%xmm1
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rdx)
  movsd  0x70(%rax),%xmm0
  mulsd  0x10(%rdi),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,0x18(%rdx)
  movsd  0x78(%rax),%xmm1
  mulsd  0x18(%rdi),%xmm1
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rdx)
  ret
```

assistant: ```c
void lower_g(double vcon[(4)], double gcov[(4)][(4)], double vcov[(4)]) {
  int i, j;
  for (i = 0; i < (4); i++) {
    vcov[i] = 0.;
    for (j = 0; j < (4); j++)
      vcov[i] += gcov[i][j] * vcon[j];
  }
  return;
}
```