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

```asm
<betacf>:
  endbr64
  push   %r14
  movaps %xmm0,%xmm4
  movaps %xmm0,%xmm6
  push   %rbx
  addss  %xmm1,%xmm4
  sub    $0x48,%rsp
  movss  D92(%rip),%xmm7
  subss  D92(%rip),%xmm6
  movss  %xmm4,0x30(%rsp)
  mulss  %xmm2,%xmm4
  addss  %xmm0,%xmm7
  movss  %xmm0,0x14(%rsp)
  movss  %xmm1,0x3c(%rsp)
  movss  D92(%rip),%xmm1
  movss  %xmm2,0x18(%rsp)
  movss  %xmm7,0x34(%rsp)
  movaps %xmm4,%xmm0
  movss  %xmm6,0x38(%rsp)
  divss  %xmm7,%xmm0
  subss  %xmm0,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  call   <fabs@plt>
  movsd  D192(%rip),%xmm3
  movss  D71(%rip),%xmm2
  comisd %xmm0,%xmm3
  ja     L30
  movss  D92(%rip),%xmm2
  movss  0xc(%rsp),%xmm1
  divss  %xmm1,%xmm2
L30:
  movl   $0x3f800000,0xc(%rsp)
  mov    $0x1,%ebx
  movss  %xmm2,0x10(%rsp)
  jmp    L37
  nop
L29:
  add    $0x1,%ebx
  movss  0x1c(%rsp),%xmm2
  cmp    $0x65,%ebx
  je     L16
L37:
  lea    (%rbx,%rbx,1),%eax
  pxor   %xmm4,%xmm4
  pxor   %xmm6,%xmm6
  movss  0x14(%rsp),%xmm5
  cvtsi2ss %ebx,%xmm4
  movss  0x3c(%rsp),%xmm1
  cvtsi2ss %eax,%xmm6
  subss  %xmm4,%xmm1
  movss  %xmm4,0x2c(%rsp)
  addss  %xmm6,%xmm5
  movss  %xmm6,0x1c(%rsp)
  addss  0x38(%rsp),%xmm6
  mulss  %xmm4,%xmm1
  mulss  0x18(%rsp),%xmm1
  movaps %xmm6,%xmm0
  movss  %xmm5,0x20(%rsp)
  mulss  %xmm5,%xmm0
  divss  %xmm0,%xmm1
  mulss  %xmm1,%xmm2
  movss  %xmm1,0x28(%rsp)
  addss  D92(%rip),%xmm2
  movaps %xmm2,%xmm0
  movss  %xmm2,0x24(%rsp)
  call   <fabs@plt>
  movsd  D192(%rip),%xmm5
  movss  0x24(%rsp),%xmm2
  movss  0x28(%rsp),%xmm1
  movss  0x2c(%rsp),%xmm4
  comisd %xmm0,%xmm5
  jbe    L75
  movss  D152(%rip),%xmm2
L75:
  divss  0xc(%rsp),%xmm1
  addss  D92(%rip),%xmm1
  movss  %xmm2,0x28(%rsp)
  movss  %xmm4,0x24(%rsp)
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  call   <fabs@plt>
  movsd  D192(%rip),%xmm5
  movss  0xc(%rsp),%xmm1
  movss  0x24(%rsp),%xmm4
  movss  0x28(%rsp),%xmm2
  comisd %xmm0,%xmm5
  jbe    L0
  movss  D152(%rip),%xmm1
L0:
  movss  D92(%rip),%xmm3
  movaps %xmm1,%xmm0
  movss  %xmm1,0x24(%rsp)
  divss  %xmm2,%xmm3
  movss  0x14(%rsp),%xmm2
  addss  %xmm4,%xmm2
  addss  0x30(%rsp),%xmm4
  xorps  D56(%rip),%xmm2
  mulss  %xmm4,%xmm2
  mulss  0x18(%rsp),%xmm2
  mulss  %xmm3,%xmm0
  mulss  0x10(%rsp),%xmm0
  movd   %xmm0,%r14d
  movss  0x1c(%rsp),%xmm0
  addss  0x34(%rsp),%xmm0
  mulss  0x20(%rsp),%xmm0
  divss  %xmm0,%xmm2
  mulss  %xmm2,%xmm3
  movss  %xmm2,0x10(%rsp)
  addss  D92(%rip),%xmm3
  movaps %xmm3,%xmm0
  movss  %xmm3,0xc(%rsp)
  call   <fabs@plt>
  movsd  D192(%rip),%xmm6
  movss  0xc(%rsp),%xmm3
  movss  0x10(%rsp),%xmm2
  movss  0x24(%rsp),%xmm1
  comisd %xmm0,%xmm6
  jbe    L39
  movss  D152(%rip),%xmm3
L39:
  divss  %xmm1,%xmm2
  movss  %xmm3,0x10(%rsp)
  addss  D92(%rip),%xmm2
  movaps %xmm2,%xmm0
  movss  %xmm2,0xc(%rsp)
  call   <fabs@plt>
  movsd  D192(%rip),%xmm7
  movss  0x10(%rsp),%xmm3
  comisd %xmm0,%xmm7
  jbe    L42
  movl   $0xda24260,0xc(%rsp)
L42:
  movss  D92(%rip),%xmm2
  movss  0xc(%rsp),%xmm0
  movd   %r14d,%xmm7
  divss  %xmm3,%xmm2
  mulss  %xmm2,%xmm0
  movss  %xmm2,0x1c(%rsp)
  mulss  %xmm0,%xmm7
  subss  D92(%rip),%xmm0
  movss  %xmm7,0x10(%rsp)
  call   <fabs@plt>
  movsd  D78(%rip),%xmm5
  comisd %xmm0,%xmm5
  jbe    L29
  movss  0x10(%rsp),%xmm0
  add    $0x48,%rsp
  pop    %rbx
  pop    %r14
  ret
  nopl   (%rax)
L16:
  lea    D115(%rip),%rdi
  call   <printf@plt>
  pxor   %xmm7,%xmm7
  movss  %xmm7,0x10(%rsp)
  movss  0x10(%rsp),%xmm0
  add    $0x48,%rsp
  pop    %rbx
  pop    %r14
  ret
```

tool_calls: name: disassemble_data
arguments: label: D92
type_infered: f32
name: disassemble_data
arguments: label: D192
type_infered: byte[8]
name: disassemble_data
arguments: label: D71
type_infered: byte[4]
name: disassemble_data
arguments: label: D152
type_infered: byte[4]
name: disassemble_data
arguments: label: D56
type_infered: byte[16]
name: disassemble_data
arguments: label: D78
type_infered: byte[8]
name: disassemble_data
arguments: label: D115
type_infered: string

tool: D92: 1

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

tool: {"D71": [0xca,0xf2,0x49,0x71]}

tool: {"D152": [0x60,0x42,0xa2,0x0d]}

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

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

tool: D115: Error(betacf):a or b too big, or MAXIT too small


assistant: ```c
float betacf(float a, float b, float x) {
  int m, m2;
  float aa, c, d, del, h, qab, qam, qap;
  qab = a + b;
  qap = a + 1.0;
  qam = a - 1.0;
  c = 1.0;
  d = 1.0 - qab * x / qap;
  if (fabs(d) < 1.0e-30)
    d = 1.0e-30;
  d = 1.0 / d;
  h = d;
  for (m = 1; m <= 100; m++) {
    m2 = 2 * m;
    aa = m * (b - m) * x / ((qam + m2) * (a + m2));
    d = 1.0 + aa * d;
    if (fabs(d) < 1.0e-30)
      d = 1.0e-30;
    c = 1.0 + aa / c;
    if (fabs(c) < 1.0e-30)
      c = 1.0e-30;
    d = 1.0 / d;
    h *= d * c;
    aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));
    d = 1.0 + aa * d;
    if (fabs(d) < 1.0e-30)
      d = 1.0e-30;
    c = 1.0 + aa / 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 (m > 100) {
    printf("Error(betacf):a or b too big, or MAXIT too small\n");
    return (0.0);
  }
  return (h);
}
```