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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %edi,-0x54(%rbp)
  mov    %rsi,-0x60(%rbp)
  movl   $0x0,-0x48(%rbp)
  movl   $0x0,-0x44(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    $0x0,%eax
  call   <omp_get_wtime@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x40(%rbp)
  movl   $0x0,-0x48(%rbp)
  jmp    L9
L7:
  mov    $0x0,%eax
  call   <omp_get_max_threads@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <omp_get_thread_num@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movq   %xmm1,%rax
  mov    -0x48(%rbp),%edx
  mov    %ebx,%esi
  movq   %rax,%xmm0
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x48(%rbp)
L9:
  mov    -0x48(%rbp),%eax
  cmp    -0x44(%rbp),%eax
  jl     L7
  mov    $0x0,%eax
  call   <omp_get_wtime@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  movl   $0x0,-0x48(%rbp)
  jmp    L31
L1:
  mov    $0x0,%eax
  call   <omp_get_max_threads@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <omp_get_thread_num@plt>
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movq   %xmm2,%rax
  mov    -0x48(%rbp),%edx
  mov    %ebx,%esi
  movq   %rax,%xmm0
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x48(%rbp)
L31:
  mov    -0x48(%rbp),%eax
  cmp    -0x44(%rbp),%eax
  jl     L1
  mov    $0x0,%eax
  call   <omp_get_wtime@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x30(%rbp)
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D24
type_guessed: string
name: unpack_data
arguments: data_tag: D37
type_guessed: string
name: unpack_data
arguments: data_tag: D5
type_guessed: string
name: unpack_data
arguments: data_tag: D36
type_guessed: string

tool: D24: Thread %d of %d - Iteration %d


tool: D37: For Loop 1:  %0.9lf


tool: D5: For Loop 2:  %0.9lf


tool: D36: Total Time:  %0.9lf


assistant: ```c
int main(int argc, char **argv) {
  int i = 0;
  int n = 0;
  double start = 0.0;
  double middle = 0.0;
  double end = 0.0;
  double for1 = 0.0;
  double for2 = 0.0;
  double total = 0.0;
#pragma omp parallel shared(n) private(i)
  {
    start = omp_get_wtime();
#pragma omp for ordered
    for (i = 0; i < n; i++) {
#pragma omp ordered
      printf("Thread %d of %d - Iteration %d\n", omp_get_thread_num(), omp_get_max_threads(), i);
    }
    middle = omp_get_wtime();
#pragma omp for ordered
    for (i = 0; i < n; i++) {
#pragma omp ordered
      printf("Thread %d of %d - Iteration %d\n", omp_get_thread_num(), omp_get_max_threads(), i);
    }
    end = omp_get_wtime();
  }
  for1 = middle - start;
  for2 = end - middle;
  total = end - start;
  printf("For Loop 1:  %0.9lf\n", for1);
  printf("For Loop 2:  %0.9lf\n", for2);
  printf("Total Time:  %0.9lf\n", total);
  return 0;
}
```