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

```asm
<compute>:
  endbr64
  sub    $0x218,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x208(%rsp)
  xor    %eax,%eax
  test   %edi,%edi
  je     L37
  mov    %rsp,%r9
  mov    %rsi,%r10
  mov    %rcx,%r8
  mov    $0x40,%ecx
  mov    %r9,%rdi
  mov    %rdx,%rsi
  rep stos %rax,%es:(%rdi)
  mov    %r10,%rdi
  lea    0x100(%rsp),%rcx
  lea    0x40000(%rdx),%r10
  nop
L21:
  movsd  (%rdi),%xmm3
  movsd  0x2000(%rdi),%xmm2
  mov    %r9,%rax
  mov    %rsi,%rdx
  nopw   0x0(%rax,%rax,1)
L17:
  movsd  (%rdx),%xmm0
  movapd %xmm3,%xmm1
  add    $0x8,%rax
  add    $0x8,%rdx
  mulsd  %xmm0,%xmm1
  mulsd  %xmm2,%xmm0
  addsd  -0x8(%rax),%xmm1
  addsd  0xf8(%rax),%xmm0
  movsd  %xmm1,-0x8(%rax)
  movsd  %xmm0,0xf8(%rax)
  cmp    %rcx,%rax
  jne    L17
  add    $0x100,%rsi
  add    $0x8,%rdi
  cmp    %r10,%rsi
  jne    L21
  movdqa (%rsp),%xmm4
  movdqa 0x10(%rsp),%xmm5
  movdqa 0x20(%rsp),%xmm6
  movdqa 0x30(%rsp),%xmm7
  movups %xmm4,(%r8)
  movdqa 0x40(%rsp),%xmm4
  movups %xmm5,0x10(%r8)
  movdqa 0x50(%rsp),%xmm5
  movups %xmm6,0x20(%r8)
  movdqa 0x60(%rsp),%xmm6
  movups %xmm7,0x30(%r8)
  movdqa 0x70(%rsp),%xmm7
  movups %xmm4,0x40(%r8)
  movdqa 0x80(%rsp),%xmm4
  movups %xmm5,0x50(%r8)
  movdqa 0x90(%rsp),%xmm5
  movups %xmm6,0x60(%r8)
  movdqa 0xa0(%rsp),%xmm6
  movups %xmm7,0x70(%r8)
  movdqa 0xb0(%rsp),%xmm7
  movups %xmm4,0x80(%r8)
  movdqa 0xc0(%rsp),%xmm4
  movups %xmm5,0x90(%r8)
  movdqa 0xd0(%rsp),%xmm5
  movups %xmm6,0xa0(%r8)
  movdqa 0xe0(%rsp),%xmm6
  movups %xmm7,0xb0(%r8)
  movdqa 0xf0(%rsp),%xmm7
  movups %xmm5,0xd0(%r8)
  movups %xmm6,0xe0(%r8)
  movups %xmm7,0xf0(%r8)
  movups %xmm4,0xc0(%r8)
  movdqa 0x100(%rsp),%xmm4
  movups %xmm4,0x2000(%r8)
  movdqa 0x110(%rsp),%xmm5
  movups %xmm5,0x2010(%r8)
  movdqa 0x120(%rsp),%xmm6
  movups %xmm6,0x2020(%r8)
  movdqa 0x130(%rsp),%xmm7
  movups %xmm7,0x2030(%r8)
  movdqa 0x140(%rsp),%xmm4
  movups %xmm4,0x2040(%r8)
  movdqa 0x150(%rsp),%xmm5
  movups %xmm5,0x2050(%r8)
  movdqa 0x160(%rsp),%xmm6
  movups %xmm6,0x2060(%r8)
  movdqa 0x170(%rsp),%xmm7
  movups %xmm7,0x2070(%r8)
  movdqa 0x180(%rsp),%xmm4
  movups %xmm4,0x2080(%r8)
  movdqa 0x190(%rsp),%xmm5
  movups %xmm5,0x2090(%r8)
  movdqa 0x1a0(%rsp),%xmm6
  movups %xmm6,0x20a0(%r8)
  movdqa 0x1b0(%rsp),%xmm7
  movups %xmm7,0x20b0(%r8)
  movdqa 0x1c0(%rsp),%xmm4
  movups %xmm4,0x20c0(%r8)
  movdqa 0x1d0(%rsp),%xmm5
  movups %xmm5,0x20d0(%r8)
  movdqa 0x1e0(%rsp),%xmm6
  movups %xmm6,0x20e0(%r8)
  movdqa 0x1f0(%rsp),%xmm7
  movups %xmm7,0x20f0(%r8)
L37:
  mov    0x208(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L2
  add    $0x218,%rsp
  ret
L2:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void compute(int flag, double rows[2][1024], double col[1024][32], double *prod, int num_rows) {
#pragma HLS inline off
  if (flag) {
    double local_prod[2][32];
#pragma HLS array_partition variable = local_prod dim = 1 complete
    int i, j, k;
    for (j = 0; j < 32; j++) {
#pragma HLS pipeline
      for (i = 0; i < 2; i++) {
#pragma HLS unroll
        local_prod[i][j] = 0.0;
      }
    }
    for (j = 0; j < 1024; j++) {
      for (k = 0; k < 32; k++) {
#pragma HLS pipeline
#pragma HLS dependence variable = local_prod inter false
        for (i = 0; i < 2; i++) {
#pragma HLS unroll
          local_prod[i][k] += rows[i][j] * col[j][k];
        }
      }
    }
    for (i = 0; i < 2; i++) {
      for (j = 0; j < 32; j++) {
#pragma HLS pipeline
        prod[i * 1024 + j] = local_prod[i][j];
      }
    }
  }
}
```