user: Demonstrate the C code that generates the assembly output below:

```asm
<fgamma_lenz>:
  endbr64
  push   %rbx
  sub    $0x20,%rsp
  movsd  %xmm0,0x8(%rsp)
  pxor   %xmm5,%xmm5
  cvtsi2sd %edi,%xmm5
  addsd  D134(%rip),%xmm5
  movsd  D43(%rip),%xmm3
  movapd %xmm0,%xmm4
  addsd  %xmm3,%xmm4
  subsd  %xmm5,%xmm4
  divsd  %xmm4,%xmm3
  movq   %xmm3,%rbx
  movsd  D110(%rip),%xmm2
  mov    $0x1,%eax
  movsd  D105(%rip),%xmm9
  movq   D122(%rip),%xmm8
  movsd  D124(%rip),%xmm7
  movapd %xmm8,%xmm14
  movapd %xmm7,%xmm13
  movapd %xmm8,%xmm12
  movapd %xmm7,%xmm6
  movapd %xmm7,%xmm11
  movapd %xmm8,%xmm10
  jmp    L41
L56:
  movsd  D43(%rip),%xmm1
  movsd  0x8(%rsp),%xmm6
  movapd %xmm6,%xmm0
  addsd  %xmm6,%xmm0
  divsd  %xmm0,%xmm1
  add    %edi,%edi
  cmp    $0x1,%edi
  jle    L30
  movsd  D43(%rip),%xmm2
  mov    $0x1,%eax
L3:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm0,%xmm2
  add    $0x2,%eax
  cmp    %edi,%eax
  jl     L3
  movsd  %xmm2,0x18(%rsp)
L39:
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm7
  ucomisd %xmm7,%xmm0
  ja     L28
  sqrtsd %xmm7,%xmm7
  movsd  %xmm7,0x10(%rsp)
L100:
  movsd  0x8(%rsp),%xmm0
  xorpd  D29(%rip),%xmm0
  call   <exp@plt>
  movapd %xmm0,%xmm1
  movsd  D38(%rip),%xmm0
  divsd  0x10(%rsp),%xmm0
  mulsd  0x18(%rsp),%xmm0
  mulsd  D134(%rip),%xmm1
  movq   %rbx,%xmm5
  mulsd  %xmm5,%xmm1
  subsd  %xmm1,%xmm0
  add    $0x20,%rsp
  pop    %rbx
  ret
L30:
  movsd  D43(%rip),%xmm6
  movsd  %xmm6,0x18(%rsp)
  jmp    L39
L28:
  movsd  0x8(%rsp),%xmm0
  call   <sqrt@plt>
  movsd  %xmm0,0x10(%rsp)
  jmp    L100
L78:
  divsd  %xmm2,%xmm1
  movapd %xmm1,%xmm2
  addsd  %xmm4,%xmm2
  movapd %xmm2,%xmm0
  andpd  %xmm14,%xmm0
  comisd %xmm0,%xmm13
  ja     L56
  movsd  D124(%rip),%xmm0
L48:
  movsd  D43(%rip),%xmm1
  movapd %xmm1,%xmm3
  divsd  %xmm0,%xmm3
  movapd %xmm2,%xmm0
  mulsd  %xmm3,%xmm0
  movq   %rbx,%xmm15
  mulsd  %xmm0,%xmm15
  movq   %xmm15,%rbx
  subsd  %xmm1,%xmm0
  andpd  %xmm10,%xmm0
  movsd  D6(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L56
  add    $0x1,%eax
  cmp    $0x65,%eax
  je     L56
L41:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movapd %xmm5,%xmm1
  subsd  %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  addsd  %xmm9,%xmm4
  mulsd  %xmm1,%xmm3
  movapd %xmm3,%xmm0
  addsd  %xmm4,%xmm0
  movapd %xmm0,%xmm3
  andpd  %xmm8,%xmm3
  comisd %xmm3,%xmm7
  ja     L78
  divsd  %xmm2,%xmm1
  movapd %xmm1,%xmm2
  addsd  %xmm4,%xmm2
  movapd %xmm2,%xmm1
  andpd  %xmm12,%xmm1
  cmpnltsd %xmm6,%xmm1
  andpd  %xmm1,%xmm2
  andnpd %xmm11,%xmm1
  orpd   %xmm1,%xmm2
  jmp    L48
```

tool_calls: name: read_data
arguments: data_tag: D134
type: f64
name: read_data
arguments: data_tag: D43
type: f64
name: read_data
arguments: data_tag: D110
type: byte[8]
name: read_data
arguments: data_tag: D105
type: byte[8]
name: read_data
arguments: data_tag: D122
type: qword
name: read_data
arguments: data_tag: D124
type: byte[8]
name: read_data
arguments: data_tag: D29
type: byte[16]
name: read_data
arguments: data_tag: D38
type: f64
name: read_data
arguments: data_tag: D6
type: byte[8]

tool: D134: 0.5

tool: D43: 1

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

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

tool: D122: 9223372036854775807

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

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

tool: D38: 0.8862269254528

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

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;
}
```