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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x1f8,%rsp
  mov    %edi,-0x1f4(%rbp)
  mov    %rsi,-0x200(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x1e4(%rbp)
  jmp    L9
L48:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1d0(%rbp)
  movl   $0x0,-0x1e0(%rbp)
  jmp    L114
L84:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x1e0(%rbp),%xmm0
  movsd  D116(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x1e4(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <fgamma_pyquante@plt>
  movq   %xmm0,%rbx
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x1e0(%rbp),%xmm0
  movsd  D116(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rdx
  mov    -0x1e4(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%edi
  call   <fgamma@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x1c8(%rbp)
  movsd  -0x1c8(%rbp),%xmm0
  movq   D20(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x1c8(%rbp)
  movsd  -0x1c8(%rbp),%xmm0
  comisd -0x1d0(%rbp),%xmm0
  jbe    L52
  movsd  -0x1c8(%rbp),%xmm0
  movsd  %xmm0,-0x1d0(%rbp)
L52:
  addl   $0x1,-0x1e0(%rbp)
L114:
  cmpl   $0x1869f,-0x1e0(%rbp)
  jle    L84
  mov    -0x1d0(%rbp),%rdx
  mov    -0x1e4(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%esi
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x1e4(%rbp)
L9:
  cmpl   $0xf,-0x1e4(%rbp)
  jle    L48
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x1e4(%rbp)
  jmp    L54
L21:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1d0(%rbp)
  movl   $0x0,-0x1e0(%rbp)
  jmp    L20
L87:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x1e0(%rbp),%xmm0
  movsd  D116(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  lea    -0x1c0(%rbp),%rdx
  mov    %eax,%esi
  mov    $0x13,%edi
  call   <fgamma_set@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x1e0(%rbp),%xmm0
  movsd  D116(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x1e4(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <fgamma_pyquante@plt>
  movq   %xmm0,%rax
  mov    -0x1e4(%rbp),%edx
  movslq %edx,%rdx
  movsd  -0x1c0(%rbp,%rdx,8),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x1c8(%rbp)
  movsd  -0x1c8(%rbp),%xmm0
  movq   D20(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x1c8(%rbp)
  movsd  -0x1c8(%rbp),%xmm0
  comisd -0x1d0(%rbp),%xmm0
  jbe    L152
  movsd  -0x1c8(%rbp),%xmm0
  movsd  %xmm0,-0x1d0(%rbp)
L152:
  addl   $0x1,-0x1e0(%rbp)
L20:
  cmpl   $0x1869f,-0x1e0(%rbp)
  jle    L87
  mov    -0x1d0(%rbp),%rdx
  mov    -0x1e4(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%esi
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x1e4(%rbp)
L54:
  cmpl   $0xf,-0x1e4(%rbp)
  jle    L21
  lea    D138(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x120(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x100,%edi
  call   <time_str@plt>
  lea    -0x120(%rbp),%rax
  mov    %rax,%rsi
  lea    D118(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x64,-0x1e4(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1c8(%rbp)
  movl   $0x0,-0x1e0(%rbp)
  jmp    L24
L18:
  movl   $0x0,-0x1dc(%rbp)
  jmp    L102
L105:
  movl   $0x0,-0x1d8(%rbp)
  jmp    L91
L45:
  movl   $0x0,-0x1d4(%rbp)
  jmp    L14
L138:
  mov    -0x1c8(%rbp),%rax
  movq   %rax,%xmm0
  mov    $0x0,%edi
  call   <fgamma@plt>
  movsd  -0x1c8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x1c8(%rbp)
  addl   $0x1,-0x1d4(%rbp)
L14:
  mov    -0x1d4(%rbp),%eax
  cmp    -0x1e4(%rbp),%eax
  jl     L138
  addl   $0x1,-0x1d8(%rbp)
L91:
  mov    -0x1d8(%rbp),%eax
  cmp    -0x1e4(%rbp),%eax
  jl     L45
  addl   $0x1,-0x1dc(%rbp)
L102:
  mov    -0x1dc(%rbp),%eax
  cmp    -0x1e4(%rbp),%eax
  jl     L105
  addl   $0x1,-0x1e0(%rbp)
L24:
  mov    -0x1e0(%rbp),%eax
  cmp    -0x1e4(%rbp),%eax
  jl     L18
  lea    -0x120(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x100,%edi
  call   <time_str@plt>
  lea    -0x120(%rbp),%rax
  mov    %rax,%rsi
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L10
  call   <__stack_chk_fail@plt>
L10:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D48
type: string
name: extract_symbolic_data
arguments: data_label: D123
type: string
name: extract_symbolic_data
arguments: data_label: D116
type: f64
name: extract_symbolic_data
arguments: data_label: D20
type: qword
name: extract_symbolic_data
arguments: data_label: D113
type: string
name: extract_symbolic_data
arguments: data_label: D40
type: string
name: extract_symbolic_data
arguments: data_label: D138
type: string
name: extract_symbolic_data
arguments: data_label: D118
type: string
name: extract_symbolic_data
arguments: data_label: D22
type: string

tool: D48: Testing FGamma using PyQuante by Richard Muller as references

tool: D123: Case 1: double fgamma(int m, double x);

tool: D116: 1000

tool: D20: 9223372036854775807

tool: D113: m = %2d maxerr = %20.8E


tool: D40: Case 2: void fgamma_set(int max, double x);

tool: D138: Evaluate fgamma(0,...) 100,000,000 times

tool: D118: Start: %s


tool: D22: Done:  %s


assistant: ```c
int main(int argc, char *argv[]) {
  int m, i, j, k, l;
  double maxerr, err;
  double fset[20];
  char str[256];
  printf("Testing FGamma using PyQuante by Richard Muller as references\n");
  printf("Case 1: double fgamma(int m, double x);\n");
  for (m = 0; m <= 15; m++) {
    maxerr = 0.0;
    for (i = 0; i < 100000; i++) {
      err = fgamma_pyquante(m, i / 1000.) - fgamma(m, i / 1000.);
      err = fabs(err);
      if (err > maxerr)
        maxerr = err;
    }
    printf("m = %2d maxerr = %20.8E\n", m, maxerr);
  }
  printf("Case 2: void fgamma_set(int max, double x);\n");
  for (m = 0; m <= 15; m++) {
    maxerr = 0.0;
    for (i = 0; i < 100000; i++) {
      fgamma_set(19, i / 1000., fset);
      err = fgamma_pyquante(m, i / 1000.) - fset[m];
      err = fabs(err);
      if (err > maxerr)
        maxerr = err;
    }
    printf("m = %2d maxerr = %20.8E\n", m, maxerr);
  }
  printf("Evaluate fgamma(0,...) 100,000,000 times\n");
  time_str(256, str);
  printf("Start: %s\n", str);
  m = 100;
  err = 0.0;
  for (i = 0; i < m; i++)
    for (j = 0; j < m; j++)
      for (k = 0; k < m; k++)
        for (l = 0; l < m; l++) {
          err += fgamma(0, err);
        }
  time_str(256, str);
  printf("Done:  %s\n", str);
}
```