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

```asm
<matmult>:
  endbr64
  sub    $0x98,%rsp
  movupd (%rdi),%xmm2
  mov    %rsi,%rax
  movupd (%rdi),%xmm8
  movupd (%rax),%xmm1
  pxor   %xmm3,%xmm3
  movupd 0x10(%rax),%xmm0
  mov    %rdx,%rsi
  unpcklpd %xmm2,%xmm2
  unpckhpd %xmm8,%xmm8
  movupd 0x20(%rax),%xmm12
  movupd 0x40(%rax),%xmm11
  movapd %xmm2,%xmm13
  movapd %xmm8,%xmm14
  movupd 0x10(%rdi),%xmm10
  movupd 0x30(%rax),%xmm5
  mulpd  %xmm1,%xmm13
  movupd 0x50(%rax),%xmm6
  movupd 0x60(%rax),%xmm9
  mulpd  %xmm12,%xmm14
  unpcklpd %xmm10,%xmm10
  movupd 0x10(%rdi),%xmm7
  movupd 0x70(%rax),%xmm4
  mov    %fs:0x28,%rdx
  mov    %rdx,0x88(%rsp)
  xor    %edx,%edx
  mulpd  %xmm0,%xmm2
  xor    %eax,%eax
  mulpd  %xmm5,%xmm8
  unpckhpd %xmm7,%xmm7
  addpd  %xmm3,%xmm13
  addpd  %xmm3,%xmm2
  addpd  %xmm14,%xmm13
  movapd %xmm11,%xmm14
  mulpd  %xmm10,%xmm14
  mulpd  %xmm6,%xmm10
  addpd  %xmm8,%xmm2
  movupd 0x20(%rdi),%xmm8
  unpckhpd %xmm8,%xmm8
  addpd  %xmm14,%xmm13
  movapd %xmm9,%xmm14
  mulpd  %xmm7,%xmm14
  addpd  %xmm10,%xmm2
  movupd 0x30(%rdi),%xmm10
  mulpd  %xmm4,%xmm7
  unpcklpd %xmm10,%xmm10
  addpd  %xmm14,%xmm13
  movapd %xmm8,%xmm14
  addpd  %xmm7,%xmm2
  mulpd  %xmm12,%xmm14
  movupd 0x30(%rdi),%xmm7
  mulpd  %xmm5,%xmm8
  movaps %xmm13,(%rsp)
  unpckhpd %xmm7,%xmm7
  movaps %xmm2,0x10(%rsp)
  movupd 0x20(%rdi),%xmm2
  unpcklpd %xmm2,%xmm2
  movapd %xmm2,%xmm13
  mulpd  %xmm1,%xmm13
  mulpd  %xmm0,%xmm2
  addpd  %xmm3,%xmm13
  addpd  %xmm3,%xmm2
  addpd  %xmm14,%xmm13
  movapd %xmm10,%xmm14
  mulpd  %xmm11,%xmm14
  addpd  %xmm8,%xmm2
  movupd 0x40(%rdi),%xmm8
  mulpd  %xmm6,%xmm10
  unpckhpd %xmm8,%xmm8
  addpd  %xmm14,%xmm13
  movapd %xmm7,%xmm14
  mulpd  %xmm4,%xmm7
  addpd  %xmm10,%xmm2
  movupd 0x50(%rdi),%xmm10
  mulpd  %xmm9,%xmm14
  unpcklpd %xmm10,%xmm10
  addpd  %xmm7,%xmm2
  movupd 0x50(%rdi),%xmm7
  addpd  %xmm14,%xmm13
  movapd %xmm8,%xmm14
  mulpd  %xmm12,%xmm14
  unpckhpd %xmm7,%xmm7
  movaps %xmm2,0x30(%rsp)
  movupd 0x40(%rdi),%xmm2
  mulpd  %xmm5,%xmm8
  movaps %xmm13,0x20(%rsp)
  unpcklpd %xmm2,%xmm2
  movapd %xmm2,%xmm13
  mulpd  %xmm1,%xmm13
  mulpd  %xmm0,%xmm2
  addpd  %xmm3,%xmm13
  addpd  %xmm3,%xmm2
  addpd  %xmm14,%xmm13
  movapd %xmm10,%xmm14
  mulpd  %xmm11,%xmm14
  addpd  %xmm8,%xmm2
  movupd 0x60(%rdi),%xmm8
  mulpd  %xmm6,%xmm10
  unpckhpd %xmm8,%xmm8
  mulpd  %xmm8,%xmm12
  mulpd  %xmm8,%xmm5
  addpd  %xmm14,%xmm13
  movapd %xmm9,%xmm14
  mulpd  %xmm7,%xmm14
  addpd  %xmm10,%xmm2
  movupd 0x60(%rdi),%xmm10
  mulpd  %xmm4,%xmm7
  unpcklpd %xmm10,%xmm10
  mulpd  %xmm10,%xmm1
  mulpd  %xmm10,%xmm0
  addpd  %xmm14,%xmm13
  addpd  %xmm7,%xmm2
  addpd  %xmm3,%xmm1
  movaps %xmm13,0x40(%rsp)
  movaps %xmm2,0x50(%rsp)
  movupd 0x70(%rdi),%xmm2
  addpd  %xmm3,%xmm0
  mov    %rsp,%rdi
  movapd %xmm2,%xmm7
  addpd  %xmm12,%xmm1
  unpcklpd %xmm2,%xmm7
  addpd  %xmm5,%xmm0
  unpckhpd %xmm2,%xmm2
  mulpd  %xmm7,%xmm11
  mulpd  %xmm6,%xmm7
  mulpd  %xmm2,%xmm9
  mulpd  %xmm2,%xmm4
  addpd  %xmm11,%xmm1
  addpd  %xmm7,%xmm0
  addpd  %xmm9,%xmm1
  addpd  %xmm4,%xmm0
  movaps %xmm1,0x60(%rsp)
  movaps %xmm0,0x70(%rsp)
  call   <copytransform@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  xor    %eax,%eax
  add    $0x98,%rsp
  ret
L4:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
matmult(a, b, c) double a[4][4], b[4][4], c[4][4];
{
  double d[4][4];
  register int k, j, i;
  for (i = 0; i < 4; i++)
    for (j = 0; j < 4; j++) {
      d[i][j] = 0.0;
      for (k = 0; k < 4; k++)
        d[i][j] += a[i][k] * b[k][j];
    }
  copytransform(d, c);
}
```