user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<gammaCF>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  movsd  %xmm0,-0x78(%rbp)
  movsd  %xmm1,-0x80(%rbp)
  movl   $0x64,-0x64(%rbp)
  movsd  D8(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x80(%rbp),%rax
  movq   %rax,%xmm0
  call   <logGamma@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  D29(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D29(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D29(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movl   $0x1,-0x68(%rbp)
  jmp    L46
L58:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  subsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x50(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  addsd  -0x48(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  addsd  -0x38(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x78(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x50(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x48(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x78(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x40(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L59
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  je     L22
L59:
  movsd  D29(%rip),%xmm0
  divsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x38(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x60(%rbp),%xmm0
  subsd  -0x58(%rbp),%xmm0
  divsd  -0x60(%rbp),%xmm0
  movq   D25(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  -0x28(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L35
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
L22:
  addl   $0x1,-0x68(%rbp)
L46:
  mov    -0x68(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jle    L58
  jmp    L51
L35:
  nop
L51:
  mov    -0x78(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x80(%rbp),%xmm0
  subsd  -0x78(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x60(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D8
type_infered: f64
name: unpack_data
arguments: data_label: D29
type_infered: f64
name: unpack_data
arguments: data_label: D25
type_infered: qword

tool: D8: 3e-07

tool: D29: 1

tool: D25: 9223372036854775807

assistant: ```c
double gammaCF(double x, double a) {
  int n, maxit = 100;
  double eps = 0.0000003;
  double gln = logGamma(a), g = 0, gold = 0, a0 = 1, a1 = x, b0 = 0, b1 = 1, fac = 1;
  double an, ana, anf;
  for (n = 1; n <= maxit; n++) {
    an = 1.0 * n;
    ana = an - a;
    a0 = (a1 + a0 * ana) * fac;
    b0 = (b1 + b0 * ana) * fac;
    anf = an * fac;
    a1 = x * a0 + anf * a1;
    b1 = x * b0 + anf * b1;
    if (a1 != 0) {
      fac = 1.0 / a1;
      g = b1 * fac;
      if (fabs((g - gold) / g) < eps)
        break;
      gold = g;
    }
  }
  return exp(-x + a * log(x) - gln) * g;
}
```