user: 请将以下的汇编代码转换成C语言代码:

```asm
<fgamma_lenz>:
  endbr64
  sub    $0x28,%rsp
  movapd %xmm0,%xmm10
  movsd  D21(%rip),%xmm0
  pxor   %xmm7,%xmm7
  movapd %xmm10,%xmm3
  cvtsi2sd %edi,%xmm7
  addsd  D65(%rip),%xmm7
  movsd  D64(%rip),%xmm11
  addsd  %xmm0,%xmm3
  movapd %xmm0,%xmm12
  movsd  D31(%rip),%xmm8
  movq   D32(%rip),%xmm4
  movsd  D34(%rip),%xmm5
  movapd %xmm11,%xmm2
  mov    $0x1,%eax
  movsd  D85(%rip),%xmm9
  subsd  %xmm7,%xmm3
  divsd  %xmm3,%xmm12
  movapd %xmm12,%xmm6
  jmp    L12
  nopl   0x0(%rax,%rax,1)
L25:
  movapd %xmm0,%xmm12
  cmpnltsd %xmm5,%xmm1
  divsd  %xmm13,%xmm12
  andpd  %xmm1,%xmm2
  andnpd %xmm5,%xmm1
  orpd   %xmm1,%xmm2
L86:
  movapd %xmm2,%xmm1
  mulsd  %xmm12,%xmm1
  mulsd  %xmm1,%xmm6
  subsd  %xmm0,%xmm1
  andpd  %xmm4,%xmm1
  comisd %xmm1,%xmm9
  ja     L11
  add    $0x1,%eax
  cmp    $0x65,%eax
  je     L11
L12:
  pxor   %xmm13,%xmm13
  movapd %xmm7,%xmm1
  addsd  %xmm8,%xmm3
  cvtsi2sd %eax,%xmm13
  subsd  %xmm13,%xmm1
  mulsd  %xmm13,%xmm1
  mulsd  %xmm1,%xmm12
  divsd  %xmm2,%xmm1
  movapd %xmm12,%xmm13
  addsd  %xmm3,%xmm13
  movapd %xmm13,%xmm12
  andpd  %xmm4,%xmm12
  comisd %xmm12,%xmm5
  movapd %xmm1,%xmm2
  addsd  %xmm3,%xmm2
  movapd %xmm2,%xmm1
  andpd  %xmm4,%xmm1
  jbe    L25
  comisd %xmm1,%xmm5
  ja     L11
  movapd %xmm11,%xmm12
  jmp    L86
  nopl   0x0(%rax)
L11:
  movapd %xmm10,%xmm1
  movapd %xmm0,%xmm2
  add    %edi,%edi
  addsd  %xmm10,%xmm1
  divsd  %xmm1,%xmm2
  movapd %xmm0,%xmm1
  cmp    $0x1,%edi
  jle    L98
  mov    $0x1,%eax
  nopw   0x0(%rax,%rax,1)
L92:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  add    $0x2,%eax
  mulsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  cmp    %edi,%eax
  jl     L92
L98:
  pxor   %xmm0,%xmm0
  ucomisd %xmm10,%xmm0
  ja     L63
  movapd %xmm10,%xmm7
  sqrtsd %xmm7,%xmm7
  movsd  %xmm7,(%rsp)
L20:
  movapd %xmm10,%xmm0
  xorpd  D53(%rip),%xmm0
  movsd  %xmm1,0x10(%rsp)
  movsd  %xmm6,0x8(%rsp)
  call   <exp@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm6
  movapd %xmm0,%xmm2
  movsd  D70(%rip),%xmm0
  divsd  (%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D65(%rip),%xmm1
  add    $0x28,%rsp
  mulsd  %xmm2,%xmm1
  mulsd  %xmm6,%xmm1
  subsd  %xmm1,%xmm0
  ret
L63:
  movapd %xmm10,%xmm0
  movsd  %xmm1,0x18(%rsp)
  movsd  %xmm6,0x10(%rsp)
  movsd  %xmm10,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x18(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm6
  movsd  0x8(%rsp),%xmm10
  movsd  %xmm0,(%rsp)
  jmp    L20
```

tool_calls: name: read_data
arguments: tag: D21
data_type: f64
name: read_data
arguments: tag: D65
data_type: f64
name: read_data
arguments: tag: D64
data_type: byte[8]
name: read_data
arguments: tag: D31
data_type: byte[8]
name: read_data
arguments: tag: D32
data_type: qword
name: read_data
arguments: tag: D34
data_type: byte[8]
name: read_data
arguments: tag: D85
data_type: byte[8]
name: read_data
arguments: tag: D53
data_type: byte[16]
name: read_data
arguments: tag: D70
data_type: f64

tool: D21: 1

tool: D65: 0.5

tool: {"D64": [0xe9,0x8c,0xa0,0x39,0x59,0x3e,0x29,0x46]}

tool: {"D31": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: D32: 9223372036854775807

tool: {"D34": [0xa0,0xc2,0xeb,0xfe,0x4b,0x48,0xb4,0x39]}

tool: {"D85": [0x16,0x56,0xe7,0x9e,0xaf,0x03,0xd2,0x3c]}

tool: {"D53": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D70: 0.8862269254528

assistant: ```c
double fgamma_lenz(int m, double x) {
  int i;
  double a, an, b, c, d, del, h;
  a = m + 0.5;
  b = x + 1.0 - a;
  c = 1.0 / 1.0E-30;
  d = 1.0 / b;
  h = d;
  for (i = 1; i <= 100; i++) {
    an = (a - i) * i;
    b += 2;
    d = an * d + b;
    if (fabs(d) < 1.0E-30)
      d = 1.0E-30;
    c = b + an / c;
    if (fabs(c) < 1.0E-30)
      c = 1.0E-30;
    d = 1.0 / d;
    del = d * c;
    h *= del;
    if (fabs(del - 1.0) < 1.0e-15)
      break;
  }
  d = 1.0;
  c = 1.0 / (x + x);
  for (i = 1; i <= (m + m - 1); i += 2)
    d *= i * c;
  d *= (double)0.8862269254528 / sqrt(x);
  return d - 0.5 * exp(-x) * h;
}
```