user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %edi,-0x54(%rbp)
  mov    %rsi,-0x60(%rbp)
  movl   $0x320,-0x4c(%rbp)
  movl   $0x384,-0x48(%rbp)
  movl   $0x3e8,-0x44(%rbp)
  movl   $0x44c,-0x40(%rbp)
  movl   $0x4b0,-0x3c(%rbp)
  mov    $0x8,%esi
  mov    $0xafc80,%edi
  call   <polybench_alloc_data@plt>
  mov    %rax,-0x38(%rbp)
  mov    $0x8,%esi
  mov    $0xc3500,%edi
  call   <polybench_alloc_data@plt>
  mov    %rax,-0x30(%rbp)
  mov    $0x8,%esi
  mov    $0xdbba0,%edi
  call   <polybench_alloc_data@plt>
  mov    %rax,-0x28(%rbp)
  mov    $0x8,%esi
  mov    $0xf1b30,%edi
  call   <polybench_alloc_data@plt>
  mov    %rax,-0x20(%rbp)
  mov    $0x8,%esi
  mov    $0x107ac0,%edi
  call   <polybench_alloc_data@plt>
  mov    %rax,-0x18(%rbp)
  mov    $0x8,%esi
  mov    $0x142440,%edi
  call   <polybench_alloc_data@plt>
  mov    %rax,-0x10(%rbp)
  mov    $0x8,%esi
  mov    $0xd6d80,%edi
  call   <polybench_alloc_data@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x30(%rbp),%r8
  mov    -0x3c(%rbp),%edi
  mov    -0x40(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x48(%rbp),%esi
  mov    -0x4c(%rbp),%eax
  sub    $0x8,%rsp
  push   -0x10(%rbp)
  push   -0x18(%rbp)
  push   -0x28(%rbp)
  mov    %r8,%r9
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <init_array@plt>
  add    $0x20,%rsp
  mov    -0x38(%rbp),%r8
  mov    -0x3c(%rbp),%edi
  mov    -0x40(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x48(%rbp),%esi
  mov    -0x4c(%rbp),%eax
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  mov    %r8,%r9
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <kernel_3mm@plt>
  add    $0x30,%rsp
  cmpl   $0x2a,-0x54(%rbp)
  jle    L8
  mov    -0x60(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  test   %eax,%eax
  jne    L8
  mov    -0x8(%rbp),%rdx
  mov    -0x40(%rbp),%ecx
  mov    -0x4c(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <print_array@plt>
L8:
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x0,%eax
  leave
  ret
```

assistant: ```c
int main(int argc, char **argv) {
  int ni = 800;
  int nj = 900;
  int nk = 1000;
  int nl = 1100;
  int nm = 1200;
  double(*E)[800 + 0][900 + 0];
  E = (double(*)[800 + 0][900 + 0]) polybench_alloc_data((800 + 0) * (900 + 0), sizeof(double));
  ;
  double(*A)[800 + 0][1000 + 0];
  A = (double(*)[800 + 0][1000 + 0]) polybench_alloc_data((800 + 0) * (1000 + 0), sizeof(double));
  ;
  double(*B)[1000 + 0][900 + 0];
  B = (double(*)[1000 + 0][900 + 0]) polybench_alloc_data((1000 + 0) * (900 + 0), sizeof(double));
  ;
  double(*F)[900 + 0][1100 + 0];
  F = (double(*)[900 + 0][1100 + 0]) polybench_alloc_data((900 + 0) * (1100 + 0), sizeof(double));
  ;
  double(*C)[900 + 0][1200 + 0];
  C = (double(*)[900 + 0][1200 + 0]) polybench_alloc_data((900 + 0) * (1200 + 0), sizeof(double));
  ;
  double(*D)[1200 + 0][1100 + 0];
  D = (double(*)[1200 + 0][1100 + 0]) polybench_alloc_data((1200 + 0) * (1100 + 0), sizeof(double));
  ;
  double(*G)[800 + 0][1100 + 0];
  G = (double(*)[800 + 0][1100 + 0]) polybench_alloc_data((800 + 0) * (1100 + 0), sizeof(double));
  ;
  init_array(ni, nj, nk, nl, nm, *A, *B, *C, *D);
  ;
  kernel_3mm(ni, nj, nk, nl, nm, *E, *A, *B, *F, *C, *D, *G);
  ;
  ;
  if (argc > 42 && !strcmp(argv[0], ""))
    print_array(ni, nl, *G);
  free((void *)E);
  ;
  free((void *)A);
  ;
  free((void *)B);
  ;
  free((void *)F);
  ;
  free((void *)C);
  ;
  free((void *)D);
  ;
  free((void *)G);
  ;
  return 0;
}
```