user: Please show me the C implementation that matches the assembly code listed below:

```asm
<gamma_continued_frac>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x48(%rbp)
  movsd  %xmm0,-0x50(%rbp)
  movsd  %xmm1,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    -0x50(%rbp),%rax
  movq   %rax,%xmm0
  call   <gammln@plt>
  movq   %xmm0,%rax
  mov    -0x60(%rbp),%rdx
  mov    %rax,(%rdx)
  movsd  -0x58(%rbp),%xmm1
  movsd  D75(%rip),%xmm0
  addsd  %xmm1,%xmm0
  subsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D107(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  D75(%rip),%xmm0
  divsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movl   $0x1,-0x34(%rbp)
  jmp    L4
L53:
  mov    -0x34(%rbp),%eax
  neg    %eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x34(%rbp),%xmm0
  subsd  -0x50(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x30(%rbp),%xmm1
  movsd  D131(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x10(%rbp),%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movq   D67(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  D26(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L40
  movsd  D26(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
L40:
  movsd  -0x10(%rbp),%xmm0
  divsd  -0x28(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movq   D67(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  D26(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L16
  movsd  D26(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
L16:
  movsd  D75(%rip),%xmm0
  divsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  D75(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movq   D67(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  D121(%rip),%xmm0
  comisd %xmm1,%xmm0
  ja     L33
  addl   $0x1,-0x34(%rbp)
L4:
  cmpl   $0x64,-0x34(%rbp)
  jle    L53
  jmp    L68
L33:
  nop
L68:
  cmpl   $0x64,-0x34(%rbp)
  jle    L59
  mov    -0x58(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x50(%rbp),%xmm0
  subsd  -0x58(%rbp),%xmm0
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x18(%rbp),%xmm0
  mov    -0x48(%rbp),%rax
  movsd  %xmm0,(%rax)
L59:
  nop
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D75
type_guessed: f64
name: read_data
arguments: tag: D107
type_guessed: byte[8]
name: read_data
arguments: tag: D131
type_guessed: f64
name: read_data
arguments: tag: D67
type_guessed: qword
name: read_data
arguments: tag: D26
type_guessed: byte[8]
name: read_data
arguments: tag: D121
type_guessed: byte[8]

tool: D75: 1

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

tool: D131: 2

tool: D67: 9223372036854775807

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

tool: {"D121": [0x76,0x83,0x0d,0xf4,0xf5,0x21,0x94,0x3e]}

assistant: ```c
void gamma_continued_frac(double *gammcf, double a, double x, double *gln) {
  int i;
  double an, b, c, d, del, h;
  *gln = gammln(a);
  b = x + 1.0 - a;
  c = 1.0 / 1.0e-30;
  d = 1.0 / b;
  h = d;
  for (i = 1; i <= 100; i++) {
    an = -i * (i - a);
    b += 2.0;
    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) < 3.0e-7)
      break;
  }
  if (i > 100)
    *gammcf = exp(-x + a * log(x) - (*gln)) * h;
}
```