user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<betacf>:
  endbr64
  push   %r15
  push   %r14
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  movaps %xmm0,%xmm4
  movss  %xmm0,0x18(%rsp)
  movss  %xmm1,0x3c(%rsp)
  movss  %xmm2,0x1c(%rsp)
  movaps %xmm0,%xmm3
  addss  %xmm1,%xmm3
  movss  %xmm3,0x30(%rsp)
  movss  D28(%rip),%xmm0
  movaps %xmm4,%xmm6
  addss  %xmm0,%xmm6
  movss  %xmm6,0x34(%rsp)
  subss  %xmm0,%xmm4
  movss  %xmm4,0x38(%rsp)
  mulss  %xmm2,%xmm3
  movaps %xmm3,%xmm1
  divss  %xmm6,%xmm1
  subss  %xmm1,%xmm0
  movd   %xmm0,%ebx
  call   <fabs@plt>
  movsd  D185(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L55
  mov    D118(%rip),%ebx
L55:
  movss  D28(%rip),%xmm0
  movaps %xmm0,%xmm2
  movd   %ebx,%xmm6
  divss  %xmm6,%xmm2
  movss  %xmm2,0x10(%rsp)
  movss  %xmm2,0x14(%rsp)
  movss  %xmm0,0xc(%rsp)
  mov    $0x1,%ebp
  jmp    L47
L71:
  movss  D28(%rip),%xmm1
  movaps %xmm1,%xmm7
  movd   %ebx,%xmm2
  divss  %xmm2,%xmm7
  movss  %xmm7,0x10(%rsp)
  movss  0xc(%rsp),%xmm0
  mulss  %xmm7,%xmm0
  movd   %r15d,%xmm5
  mulss  %xmm0,%xmm5
  movss  %xmm5,0x14(%rsp)
  subss  %xmm1,%xmm0
  call   <fabs@plt>
  movsd  D115(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L58
  add    $0x1,%ebp
  cmp    $0x65,%ebp
  je     L15
L47:
  pxor   %xmm4,%xmm4
  cvtsi2ss %ebp,%xmm4
  movss  %xmm4,0x20(%rsp)
  lea    0x0(%rbp,%rbp,1),%eax
  pxor   %xmm6,%xmm6
  cvtsi2ss %eax,%xmm6
  movss  %xmm6,0x24(%rsp)
  movaps %xmm6,%xmm5
  addss  0x18(%rsp),%xmm5
  movss  %xmm5,0x28(%rsp)
  movss  0x3c(%rsp),%xmm0
  subss  %xmm4,%xmm0
  mulss  %xmm4,%xmm0
  mulss  0x1c(%rsp),%xmm0
  addss  0x38(%rsp),%xmm6
  movaps %xmm6,%xmm1
  mulss  %xmm5,%xmm1
  movaps %xmm0,%xmm3
  divss  %xmm1,%xmm3
  movss  %xmm3,0x2c(%rsp)
  movss  0x10(%rsp),%xmm0
  mulss  %xmm3,%xmm0
  addss  D28(%rip),%xmm0
  movss  %xmm0,0x10(%rsp)
  call   <fabs@plt>
  movsd  D185(%rip),%xmm5
  comisd %xmm0,%xmm5
  jbe    L84
  movss  D118(%rip),%xmm3
  movss  %xmm3,0x10(%rsp)
L84:
  movss  0x2c(%rsp),%xmm0
  divss  0xc(%rsp),%xmm0
  addss  D28(%rip),%xmm0
  movd   %xmm0,%r14d
  call   <fabs@plt>
  movsd  D185(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L48
  movss  D118(%rip),%xmm4
  movd   %xmm4,%r14d
L48:
  movss  D28(%rip),%xmm4
  movaps %xmm4,%xmm3
  divss  0x10(%rsp),%xmm3
  movd   %r14d,%xmm0
  mulss  %xmm3,%xmm0
  mulss  0x14(%rsp),%xmm0
  movd   %xmm0,%r15d
  movss  0x20(%rsp),%xmm7
  movaps %xmm7,%xmm1
  addss  0x18(%rsp),%xmm1
  movaps %xmm1,%xmm2
  xorps  D155(%rip),%xmm2
  addss  0x30(%rsp),%xmm7
  mulss  %xmm7,%xmm2
  mulss  0x1c(%rsp),%xmm2
  movss  0x24(%rsp),%xmm0
  addss  0x34(%rsp),%xmm0
  mulss  0x28(%rsp),%xmm0
  divss  %xmm0,%xmm2
  movss  %xmm2,0xc(%rsp)
  mulss  %xmm2,%xmm3
  addss  %xmm4,%xmm3
  movd   %xmm3,%ebx
  movaps %xmm3,%xmm0
  call   <fabs@plt>
  movsd  D185(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L33
  mov    D118(%rip),%ebx
L33:
  movss  0xc(%rsp),%xmm0
  movd   %r14d,%xmm4
  divss  %xmm4,%xmm0
  addss  D28(%rip),%xmm0
  movss  %xmm0,0xc(%rsp)
  call   <fabs@plt>
  movsd  D185(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L71
  movss  D118(%rip),%xmm5
  movss  %xmm5,0xc(%rsp)
  jmp    L71
L58:
  cmp    $0x64,%ebp
  jg     L15
L37:
  movss  0x14(%rsp),%xmm0
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r14
  pop    %r15
  ret
L15:
  lea    D125(%rip),%rdi
  call   <printf@plt>
  pxor   %xmm5,%xmm5
  movss  %xmm5,0x14(%rsp)
  jmp    L37
```

tool_calls: name: unpack_data
arguments: label: D28
datatype: f32
name: unpack_data
arguments: label: D185
datatype: byte[8]
name: unpack_data
arguments: label: D118
datatype: byte[4]
name: unpack_data
arguments: label: D115
datatype: byte[8]
name: unpack_data
arguments: label: D155
datatype: byte[16]
name: unpack_data
arguments: label: D125
datatype: string

tool: D28: 1

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

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

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

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

tool: D125: 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);
}
```