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

```asm
<betacf>:
  endbr64
  movapd %xmm0,%xmm7
  movapd %xmm0,%xmm6
  movapd %xmm0,%xmm5
  sub    $0x28,%rsp
  addsd  %xmm1,%xmm7
  movapd %xmm0,%xmm13
  movsd  D10(%rip),%xmm8
  movq   D5(%rip),%xmm10
  movsd  D23(%rip),%xmm9
  addsd  %xmm8,%xmm6
  movapd %xmm8,%xmm3
  subsd  %xmm8,%xmm5
  movsd  %xmm7,0x8(%rsp)
  mulsd  %xmm2,%xmm7
  movsd  %xmm6,0x10(%rsp)
  movsd  %xmm5,0x18(%rsp)
  movapd %xmm7,%xmm0
  divsd  %xmm6,%xmm0
  movsd  D8(%rip),%xmm6
  subsd  %xmm0,%xmm3
  movapd %xmm3,%xmm0
  andpd  %xmm10,%xmm0
  comisd %xmm0,%xmm9
  ja     L68
  movapd %xmm8,%xmm6
  divsd  %xmm3,%xmm6
L68:
  movapd %xmm6,%xmm11
  movapd %xmm8,%xmm0
  mov    $0x1,%eax
  movsd  D8(%rip),%xmm15
  jmp    L40
  nopl   0x0(%rax)
L44:
  movapd %xmm8,%xmm6
  cmpnltsd %xmm9,%xmm3
  divsd  %xmm4,%xmm6
  andpd  %xmm3,%xmm0
  andnpd %xmm9,%xmm3
  orpd   %xmm3,%xmm0
L47:
  movapd %xmm0,%xmm3
  movsd  D78(%rip),%xmm7
  mulsd  %xmm6,%xmm3
  mulsd  %xmm3,%xmm11
  subsd  %xmm8,%xmm3
  andpd  %xmm10,%xmm3
  comisd %xmm3,%xmm7
  ja     L56
  add    $0x1,%eax
  cmp    $0x3e9,%eax
  je     L7
L40:
  pxor   %xmm7,%xmm7
  lea    (%rax,%rax,1),%edx
  pxor   %xmm5,%xmm5
  movsd  0x18(%rsp),%xmm4
  cvtsi2sd %eax,%xmm7
  movapd %xmm1,%xmm3
  cvtsi2sd %edx,%xmm5
  subsd  %xmm7,%xmm3
  movapd %xmm5,%xmm12
  addsd  %xmm5,%xmm4
  addsd  %xmm13,%xmm12
  mulsd  %xmm7,%xmm3
  mulsd  %xmm12,%xmm4
  mulsd  %xmm2,%xmm3
  divsd  %xmm4,%xmm3
  movapd %xmm15,%xmm4
  mulsd  %xmm3,%xmm6
  addsd  %xmm8,%xmm6
  movapd %xmm6,%xmm14
  andpd  %xmm10,%xmm14
  comisd %xmm14,%xmm9
  ja     L29
  movapd %xmm8,%xmm4
  divsd  %xmm6,%xmm4
L29:
  addsd  0x10(%rsp),%xmm5
  mulsd  %xmm12,%xmm5
  divsd  %xmm0,%xmm3
  addsd  %xmm8,%xmm3
  movapd %xmm3,%xmm0
  andpd  %xmm10,%xmm0
  cmpnltsd %xmm9,%xmm0
  andpd  %xmm0,%xmm3
  andnpd %xmm9,%xmm0
  orpd   %xmm0,%xmm3
  movapd %xmm3,%xmm0
  mulsd  %xmm4,%xmm0
  mulsd  %xmm0,%xmm11
  movapd %xmm7,%xmm0
  addsd  0x8(%rsp),%xmm7
  addsd  %xmm13,%xmm0
  xorpd  D33(%rip),%xmm0
  mulsd  %xmm7,%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm5,%xmm0
  mulsd  %xmm0,%xmm4
  divsd  %xmm3,%xmm0
  addsd  %xmm8,%xmm4
  movapd %xmm4,%xmm5
  andpd  %xmm10,%xmm5
  comisd %xmm5,%xmm9
  addsd  %xmm8,%xmm0
  movapd %xmm0,%xmm3
  andpd  %xmm10,%xmm3
  jbe    L44
  comisd %xmm3,%xmm9
  ja     L56
  movapd %xmm15,%xmm6
  jmp    L47
  nopl   0x0(%rax,%rax,1)
L7:
  lea    D9(%rip),%rsi
  mov    $0x5d,%edi
  movsd  %xmm11,0x8(%rsp)
  call   <error2@plt>
  mov    $0x3,%edi
  call   <exit@plt>
  movsd  0x8(%rsp),%xmm11
L56:
  movapd %xmm11,%xmm0
  add    $0x28,%rsp
  ret
```

tool_calls: name: disassemble_data
arguments: label: D10
type: f64
name: disassemble_data
arguments: label: D5
type: qword
name: disassemble_data
arguments: label: D23
type: byte[8]
name: disassemble_data
arguments: label: D8
type: byte[8]
name: disassemble_data
arguments: label: D78
type: byte[8]
name: disassemble_data
arguments: label: D33
type: byte[16]
name: disassemble_data
arguments: label: D9
type: string

tool: D10: 1

tool: D5: 9223372036854775807

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

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

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

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

tool: D9: a or b too big, or MAXIT too small in betacf



assistant: ```c
double betacf(double a, double b, double x) {
  int m, m2;
  double 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 <= 1000; 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 > 1000) {
    error2(93, "a or b too big, or MAXIT too small in betacf\n\n");
    exit(3);
  }
  return h;
}
```