user: 下面的汇编指令对应的C源代码是什么：

```asm
<igamma>:
  endbr64
  pxor   %xmm6,%xmm6
  comisd %xmm1,%xmm6
  ja     L162
  comisd %xmm0,%xmm6
  movapd %xmm0,%xmm2
  jae    L162
  ucomisd %xmm6,%xmm1
  jp     L49
  movapd %xmm6,%xmm4
  je     L145
L49:
  sub    $0x28,%rsp
  comisd D109(%rip),%xmm1
  movsd  D9(%rip),%xmm4
  movsd  %xmm2,(%rsp)
  jbe    L1
L17:
  movapd %xmm4,%xmm0
  add    $0x28,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L162:
  movsd  D50(%rip),%xmm4
L145:
  movapd %xmm4,%xmm0
  ret
  nopl   (%rax)
L1:
  movapd %xmm1,%xmm0
  movsd  %xmm4,0x18(%rsp)
  movsd  %xmm1,0x8(%rsp)
  call   <log@plt>
  movsd  (%rsp),%xmm2
  movsd  0x8(%rsp),%xmm1
  movapd %xmm0,%xmm3
  movsd  0x18(%rsp),%xmm4
  mulsd  %xmm2,%xmm3
  movapd %xmm2,%xmm0
  movsd  %xmm1,0x10(%rsp)
  addsd  %xmm4,%xmm0
  subsd  %xmm1,%xmm3
  movsd  %xmm3,0x8(%rsp)
  call   <lngamma@plt>
  movsd  0x8(%rsp),%xmm3
  subsd  %xmm0,%xmm3
  movapd %xmm3,%xmm0
  call   <gp_exp@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  (%rsp),%xmm2
  mov    D9(%rip),%rax
  movsd  %xmm0,0x8(%rsp)
  movq   %rax,%xmm4
  comisd %xmm4,%xmm1
  jbe    L125
  movsd  D16(%rip),%xmm0
  addsd  %xmm2,%xmm0
  comisd %xmm0,%xmm1
  jb     L125
  movq   %rax,%xmm7
  movapd %xmm1,%xmm5
  movapd %xmm1,%xmm8
  movq   D89(%rip),%xmm11
  subsd  %xmm2,%xmm7
  movapd %xmm1,%xmm9
  movsd  D62(%rip),%xmm14
  movsd  D32(%rip),%xmm10
  addsd  %xmm4,%xmm9
  movq   %rax,%xmm15
  mov    $0x1,%edx
  pxor   %xmm6,%xmm6
  addsd  %xmm7,%xmm5
  movapd %xmm9,%xmm13
  addsd  %xmm4,%xmm5
  mulsd  %xmm5,%xmm8
  divsd  %xmm8,%xmm13
  jmp    L42
  nopl   0x0(%rax)
L46:
  divsd  %xmm10,%xmm9
  movapd %xmm8,%xmm1
  divsd  %xmm10,%xmm3
  movapd %xmm9,%xmm15
  movapd %xmm12,%xmm9
  divsd  %xmm10,%xmm1
  movapd %xmm3,%xmm8
  divsd  %xmm10,%xmm9
L75:
  add    $0x1,%edx
  cmp    $0xc9,%edx
  je     L10
L42:
  pxor   %xmm0,%xmm0
  addsd  %xmm4,%xmm7
  movapd %xmm15,%xmm3
  cvtsi2sd %edx,%xmm0
  addsd  D16(%rip),%xmm5
  movapd %xmm5,%xmm12
  mulsd  %xmm7,%xmm0
  mulsd  %xmm9,%xmm12
  mulsd  %xmm0,%xmm3
  mulsd  %xmm1,%xmm0
  subsd  %xmm3,%xmm12
  movapd %xmm5,%xmm3
  mulsd  %xmm8,%xmm3
  subsd  %xmm0,%xmm3
  ucomisd %xmm6,%xmm3
  jp     L179
  je     L111
L179:
  movapd %xmm12,%xmm1
  divsd  %xmm3,%xmm1
  movapd %xmm1,%xmm15
  subsd  %xmm1,%xmm13
  mulsd  %xmm14,%xmm15
  movapd %xmm13,%xmm0
  movapd %xmm14,%xmm13
  andpd  %xmm11,%xmm0
  minsd  %xmm15,%xmm13
  comisd %xmm0,%xmm13
  jae    L19
  movapd %xmm1,%xmm13
L111:
  movapd %xmm12,%xmm0
  andpd  %xmm11,%xmm0
  comisd %xmm10,%xmm0
  jae    L46
  movapd %xmm8,%xmm1
  movapd %xmm9,%xmm15
  movapd %xmm3,%xmm8
  movapd %xmm12,%xmm9
  jmp    L75
  nopw   0x0(%rax,%rax,1)
L10:
  movsd  D50(%rip),%xmm4
  add    $0x28,%rsp
  movapd %xmm4,%xmm0
  ret
  nopl   0x0(%rax)
L125:
  movsd  D62(%rip),%xmm6
  mov    $0xc9,%eax
  movapd %xmm4,%xmm3
  movapd %xmm4,%xmm0
  jmp    L84
  nop
L101:
  sub    $0x1,%eax
  je     L10
L84:
  addsd  %xmm4,%xmm2
  movapd %xmm1,%xmm5
  divsd  %xmm2,%xmm5
  mulsd  %xmm5,%xmm0
  addsd  %xmm0,%xmm3
  movapd %xmm3,%xmm5
  mulsd  %xmm6,%xmm5
  comisd %xmm0,%xmm5
  jbe    L101
  movsd  0x8(%rsp),%xmm4
  add    $0x28,%rsp
  mulsd  %xmm3,%xmm4
  movapd %xmm4,%xmm0
  ret
  nopw   0x0(%rax,%rax,1)
L19:
  mulsd  0x8(%rsp),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm4
  jmp    L17
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D109
type: f32[4]
name: extract_symbolic_data
arguments: data_label: D9
type: f64
name: extract_symbolic_data
arguments: data_label: D50
type: f32[2]
name: extract_symbolic_data
arguments: data_label: D16
type: f64
name: extract_symbolic_data
arguments: data_label: D89
type: qword
name: extract_symbolic_data
arguments: data_label: D62
type: byte[8]
name: extract_symbolic_data
arguments: data_label: D32
type: byte[8]

tool: {"D109": [0.0,18.98023223876953,0.0,2.0]}

tool: D9: 1

tool: {"D50": [0.0,-1.875]}

tool: D16: 2

tool: D89: 9223372036854775807

tool: {"D62": [0x3a,0x8c,0x30,0xe2,0x8e,0x79,0x45,0x3e]}

tool: {"D32": [0x1b,0x69,0x57,0x43,0xb8,0x17,0x9e,0x47]}

assistant: ```c
double igamma(double a, double x) {
  double arg;
  double aa;
  double an;
  double b;
  int i;
  if (x < 0.0 || a <= 0.0)
    return -1.0;
  if (x == 0.0)
    return 0.0;
  if (x > 1.0E+08)
    return 1.0;
  arg = a * log(x) - x - lngamma((a + 1.0));
  arg = gp_exp(arg);
  if ((x > 1.0) && (x >= a + 2.0)) {
    double pn1, pn2, pn3, pn4, pn5, pn6;
    double rn;
    double rnold;
    aa = 1.0 - a;
    b = aa + x + 1.0;
    pn1 = 1.0;
    pn2 = x;
    pn3 = x + 1.0;
    pn4 = x * b;
    rnold = pn3 / pn4;
    for (i = 1; i <= 200; i++) {
      aa++;
      b += 2.0;
      an = aa * (double)i;
      pn5 = b * pn3 - an * pn1;
      pn6 = b * pn4 - an * pn2;
      if (pn6 != 0.0) {
        rn = pn5 / pn6;
        if (fabs(rnold - rn) <= ((1.0E-08) < (1.0E-08 * rn) ? (1.0E-08) : (1.0E-08 * rn)))
          return 1.0 - arg * rn * a;
        rnold = rn;
      }
      pn1 = pn3;
      pn2 = pn4;
      pn3 = pn5;
      pn4 = pn6;
      if (fabs(pn5) >= 1.0E+37) {
        pn1 /= 1.0E+37;
        pn2 /= 1.0E+37;
        pn3 /= 1.0E+37;
        pn4 /= 1.0E+37;
      }
    }
  } else {
    for (i = 0, aa = a, an = b = 1.0; i <= 200; i++) {
      aa++;
      an *= x / aa;
      b += an;
      if (an < b * 1.0E-08)
        return arg * b;
    }
  }
  return -1.0;
}
```