user: 请将以下的汇编代码转换成C语言代码:

```asm
<compute>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x370,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x368(%rsp)
  xor    %eax,%eax
  test   %edi,%edi
  je     L32
  lea    0x160(%rsp),%rbp
  mov    %rsi,%r9
  mov    %rcx,%rsi
  mov    $0x40,%ecx
  mov    %rbp,%rdi
  mov    %rdx,%r11
  lea    0x260(%rsp),%r12
  rep stos %rax,%es:(%rdi)
  lea    0x100(%rdx),%rdi
  mov    $0x2,%ecx
  mov    %rdi,%rbx
L25:
  movsd  -0x10(%r9,%rcx,8),%xmm7
  mov    %rbp,%rax
  mov    %rbx,%r10
  mov    %r11,%r8
  movsd  0x1ff0(%r9,%rcx,8),%xmm6
  movsd  -0x8(%r9,%rcx,8),%xmm5
  movsd  0x1ff8(%r9,%rcx,8),%xmm4
  unpcklpd %xmm7,%xmm7
  unpcklpd %xmm6,%xmm6
  unpcklpd %xmm5,%xmm5
  unpcklpd %xmm4,%xmm4
L47:
  movupd 0x10(%r8),%xmm0
  add    $0x20,%rax
  add    $0x20,%r8
  add    $0x20,%r10
  movupd -0x20(%r8),%xmm8
  movapd %xmm0,%xmm3
  mulpd  %xmm7,%xmm8
  mulpd  %xmm7,%xmm3
  addpd  -0x20(%rax),%xmm8
  addpd  -0x10(%rax),%xmm3
  mulpd  %xmm6,%xmm0
  addpd  0xf0(%rax),%xmm0
  movaps %xmm8,-0x20(%rax)
  movaps %xmm3,-0x10(%rax)
  movupd -0x20(%r8),%xmm1
  movaps %xmm0,0xf0(%rax)
  mulpd  %xmm6,%xmm1
  addpd  0xe0(%rax),%xmm1
  movaps %xmm1,0xe0(%rax)
  movupd -0x20(%r10),%xmm9
  movupd -0x10(%r10),%xmm2
  mulpd  %xmm5,%xmm9
  addpd  %xmm9,%xmm8
  movaps %xmm8,-0x20(%rax)
  movapd %xmm5,%xmm8
  mulpd  %xmm2,%xmm8
  mulpd  %xmm4,%xmm2
  addpd  %xmm8,%xmm3
  addpd  %xmm2,%xmm0
  movaps %xmm3,-0x10(%rax)
  movupd -0x20(%r10),%xmm3
  movaps %xmm0,0xf0(%rax)
  mulpd  %xmm4,%xmm3
  addpd  %xmm3,%xmm1
  movaps %xmm1,0xe0(%rax)
  cmp    %r12,%rax
  jne    L47
  movslq %ecx,%r8
  add    $0x2,%rcx
  add    $0x200,%r11
  add    $0x200,%rbx
  cmp    $0x400,%rcx
  jne    L25
  movapd 0x260(%rsp),%xmm6
  mov    %r8,%rax
  lea    (%r9,%r8,8),%rcx
  movapd 0x280(%rsp),%xmm4
  movapd 0x290(%rsp),%xmm5
  shl    $0x8,%rax
  movapd 0x270(%rsp),%xmm7
  movapd 0x200(%rsp),%xmm2
  movaps %xmm6,(%rsp)
  add    %rdx,%rax
  movapd 0x2a0(%rsp),%xmm6
  movaps %xmm4,0x30(%rsp)
  lea    0x1(%r8),%rdx
  movapd 0x2c0(%rsp),%xmm4
  movapd 0x160(%rsp),%xmm15
  movaps %xmm5,0x40(%rsp)
  shl    $0x8,%rdx
  movapd 0x2d0(%rsp),%xmm5
  movapd 0x170(%rsp),%xmm14
  movaps %xmm7,0x20(%rsp)
  add    %rdi,%rdx
  movapd 0x2b0(%rsp),%xmm7
  movapd 0x180(%rsp),%xmm13
  movapd 0x190(%rsp),%xmm12
  movaps %xmm6,0x50(%rsp)
  movapd 0x2e0(%rsp),%xmm6
  movapd 0x1a0(%rsp),%xmm11
  movaps %xmm4,0x70(%rsp)
  movapd 0x2f0(%rsp),%xmm4
  movapd 0x1b0(%rsp),%xmm10
  movaps %xmm7,0x60(%rsp)
  movapd 0x1c0(%rsp),%xmm9
  movaps %xmm5,0x80(%rsp)
  movapd 0x300(%rsp),%xmm5
  movapd 0x1d0(%rsp),%xmm8
  movaps %xmm6,0xe0(%rsp)
  movapd 0x1e0(%rsp),%xmm7
  movapd 0x1f0(%rsp),%xmm6
  movaps %xmm4,0x90(%rsp)
  movaps %xmm5,0xf0(%rsp)
  movapd 0x310(%rsp),%xmm4
  movapd 0x320(%rsp),%xmm5
  movapd 0x230(%rsp),%xmm3
  movapd 0x210(%rsp),%xmm0
  movaps %xmm4,0xa0(%rsp)
  movapd 0x330(%rsp),%xmm4
  movapd 0x220(%rsp),%xmm1
  movaps %xmm5,0x100(%rsp)
  movapd 0x240(%rsp),%xmm5
  movaps %xmm3,0xb0(%rsp)
  movapd 0x340(%rsp),%xmm3
  movaps %xmm4,0x110(%rsp)
  movapd 0x250(%rsp),%xmm4
  movaps %xmm5,0xc0(%rsp)
  movapd 0x350(%rsp),%xmm5
  movaps %xmm3,0x120(%rsp)
  movapd %xmm1,%xmm3
  movaps %xmm4,0x10(%rsp)
  movapd %xmm0,%xmm4
  movaps %xmm5,0xd0(%rsp)
  movapd %xmm2,%xmm5
  cs nopw 0x0(%rax,%rax,1)
L1:
  movsd  (%rcx),%xmm0
  movupd (%rax),%xmm2
  add    $0x100,%rax
  add    $0x8,%rcx
  movsd  0x1ff8(%rcx),%xmm1
  unpcklpd %xmm0,%xmm0
  mulpd  %xmm0,%xmm2
  unpcklpd %xmm1,%xmm1
  addpd  %xmm2,%xmm15
  movupd -0x100(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  (%rsp),%xmm2
  movaps %xmm2,(%rsp)
  movupd -0xf0(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm14
  movupd -0xf0(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x20(%rsp),%xmm2
  movaps %xmm2,0x20(%rsp)
  movupd -0xe0(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm13
  movupd -0xe0(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x30(%rsp),%xmm2
  movaps %xmm2,0x30(%rsp)
  movupd -0xd0(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm12
  movupd -0xd0(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x40(%rsp),%xmm2
  movaps %xmm2,0x40(%rsp)
  movupd -0xc0(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm11
  movupd -0xc0(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x50(%rsp),%xmm2
  movaps %xmm2,0x50(%rsp)
  movupd -0xb0(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm10
  movupd -0xb0(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x60(%rsp),%xmm2
  movaps %xmm2,0x60(%rsp)
  movupd -0xa0(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm9
  movupd -0xa0(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x70(%rsp),%xmm2
  movaps %xmm2,0x70(%rsp)
  movupd -0x90(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm8
  movupd -0x90(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x80(%rsp),%xmm2
  movaps %xmm2,0x80(%rsp)
  movupd -0x80(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm7
  movupd -0x80(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0xe0(%rsp),%xmm2
  movaps %xmm2,0xe0(%rsp)
  movupd -0x70(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm6
  movupd -0x70(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x90(%rsp),%xmm2
  movaps %xmm2,0x90(%rsp)
  movupd -0x60(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm5
  movupd -0x60(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0xf0(%rsp),%xmm2
  movaps %xmm2,0xf0(%rsp)
  movupd -0x50(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm4
  movupd -0x50(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0xa0(%rsp),%xmm2
  movaps %xmm2,0xa0(%rsp)
  movupd -0x40(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm2,%xmm3
  movupd -0x40(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x100(%rsp),%xmm2
  movaps %xmm2,0x100(%rsp)
  movupd -0x30(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  0xb0(%rsp),%xmm2
  movaps %xmm2,0xb0(%rsp)
  movupd -0x30(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x110(%rsp),%xmm2
  movaps %xmm2,0x110(%rsp)
  movupd -0x20(%rax),%xmm2
  mulpd  %xmm0,%xmm2
  addpd  0xc0(%rsp),%xmm2
  movaps %xmm2,0xc0(%rsp)
  movupd -0x20(%rax),%xmm2
  mulpd  %xmm1,%xmm2
  addpd  0x120(%rsp),%xmm2
  movaps %xmm2,0x120(%rsp)
  movupd -0x10(%rax),%xmm2
  mulpd  %xmm2,%xmm0
  addpd  0x10(%rsp),%xmm0
  movaps %xmm0,0x10(%rsp)
  movapd %xmm2,%xmm0
  mulpd  %xmm1,%xmm0
  addpd  0xd0(%rsp),%xmm0
  movaps %xmm0,0xd0(%rsp)
  cmp    %rax,%rdx
  jne    L1
  movapd (%rsp),%xmm1
  movapd 0x20(%rsp),%xmm0
  movaps %xmm3,0x150(%rsp)
  movapd 0x30(%rsp),%xmm2
  movaps %xmm5,0x130(%rsp)
  movapd 0x90(%rsp),%xmm3
  movaps %xmm1,0x260(%rsp)
  movapd 0x60(%rsp),%xmm1
  movaps %xmm0,0x270(%rsp)
  movapd 0x40(%rsp),%xmm0
  movaps %xmm2,0x280(%rsp)
  movapd 0x80(%rsp),%xmm2
  movaps %xmm0,0x290(%rsp)
  movapd 0x50(%rsp),%xmm0
  movaps %xmm1,0x2b0(%rsp)
  movapd 0x70(%rsp),%xmm1
  movaps %xmm2,0x2d0(%rsp)
  movapd 0xe0(%rsp),%xmm2
  movaps %xmm4,0x140(%rsp)
  movaps %xmm0,0x2a0(%rsp)
  movaps %xmm1,0x2c0(%rsp)
  movaps %xmm7,0x1e0(%rsp)
  movaps %xmm6,0x1f0(%rsp)
  movaps %xmm15,0x160(%rsp)
  movaps %xmm14,0x170(%rsp)
  movaps %xmm13,0x180(%rsp)
  movaps %xmm12,0x190(%rsp)
  movaps %xmm11,0x1a0(%rsp)
  movaps %xmm10,0x1b0(%rsp)
  movaps %xmm9,0x1c0(%rsp)
  movaps %xmm8,0x1d0(%rsp)
  movaps %xmm2,0x2e0(%rsp)
  movaps %xmm3,0x2f0(%rsp)
  movapd 0x10(%rsp),%xmm1
  movapd 0xb0(%rsp),%xmm0
  movapd 0xf0(%rsp),%xmm3
  movaps %xmm4,0x210(%rsp)
  movapd 0xa0(%rsp),%xmm4
  movaps %xmm5,0x200(%rsp)
  movapd 0xc0(%rsp),%xmm5
  movaps %xmm4,0x310(%rsp)
  movapd 0x150(%rsp),%xmm4
  movaps %xmm0,0x230(%rsp)
  movapd 0x110(%rsp),%xmm0
  movaps %xmm4,0x220(%rsp)
  movapd 0x100(%rsp),%xmm4
  movaps %xmm5,0x240(%rsp)
  movapd 0x120(%rsp),%xmm5
  movaps %xmm1,0x250(%rsp)
  movapd 0xd0(%rsp),%xmm1
  movaps %xmm3,0x300(%rsp)
  movups %xmm7,0x80(%rsi)
  movaps %xmm4,0x320(%rsp)
  movaps %xmm0,0x330(%rsp)
  movaps %xmm5,0x340(%rsp)
  movaps %xmm1,0x350(%rsp)
  movups %xmm15,(%rsi)
  movups %xmm14,0x10(%rsi)
  movups %xmm13,0x20(%rsi)
  movups %xmm12,0x30(%rsi)
  movups %xmm11,0x40(%rsi)
  movups %xmm10,0x50(%rsi)
  movups %xmm9,0x60(%rsi)
  movups %xmm8,0x70(%rsi)
  movups %xmm6,0x90(%rsi)
  movdqa 0x130(%rsp),%xmm6
  movdqa 0x140(%rsp),%xmm7
  movups %xmm2,0x2080(%rsi)
  movups %xmm7,0xb0(%rsi)
  movdqa 0xb0(%rsp),%xmm7
  movups %xmm6,0xa0(%rsi)
  movdqa 0x150(%rsp),%xmm6
  movups %xmm7,0xd0(%rsi)
  movdqa 0x10(%rsp),%xmm7
  movups %xmm6,0xc0(%rsi)
  movdqa 0xc0(%rsp),%xmm6
  movups %xmm7,0xf0(%rsi)
  movdqa 0x20(%rsp),%xmm7
  movups %xmm6,0xe0(%rsi)
  movdqa (%rsp),%xmm6
  movups %xmm7,0x2010(%rsi)
  movdqa 0x40(%rsp),%xmm7
  movups %xmm6,0x2000(%rsi)
  movdqa 0x30(%rsp),%xmm6
  movups %xmm7,0x2030(%rsi)
  movdqa 0x60(%rsp),%xmm7
  movups %xmm6,0x2020(%rsi)
  movdqa 0x50(%rsp),%xmm6
  movups %xmm7,0x2050(%rsi)
  movdqa 0x80(%rsp),%xmm7
  movups %xmm6,0x2040(%rsi)
  movdqa 0x70(%rsp),%xmm6
  movups %xmm7,0x2070(%rsi)
  movdqa 0x90(%rsp),%xmm7
  movups %xmm6,0x2060(%rsi)
  movups %xmm7,0x2090(%rsi)
  movups %xmm3,0x20a0(%rsi)
  movdqa 0xa0(%rsp),%xmm3
  movups %xmm4,0x20c0(%rsi)
  movups %xmm3,0x20b0(%rsi)
  movups %xmm0,0x20d0(%rsi)
  movups %xmm5,0x20e0(%rsi)
  movups %xmm1,0x20f0(%rsi)
L32:
  mov    0x368(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L37
  add    $0x370,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L37:
  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];
      }
    }
  }
}
```