user: What is the c source code of the assembly code below?

```asm
<xBeta_Distribution>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  movsd  %xmm0,-0x38(%rbp)
  movsd  %xmm1,-0x40(%rbp)
  movsd  %xmm2,-0x48(%rbp)
  fldl   -0x38(%rbp)
  fstpt  -0x30(%rbp)
  fldl   -0x40(%rbp)
  fstpt  -0x20(%rbp)
  fldl   -0x48(%rbp)
  fstpt  -0x10(%rbp)
  movsd  -0x40(%rbp),%xmm0
  movsd  D58(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L22
  movsd  -0x48(%rbp),%xmm0
  movsd  D58(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L22
  fldt   -0x20(%rbp)
  fld1
  fsubrp %st,%st(1)
  fldt   -0x20(%rbp)
  fldt   -0x10(%rbp)
  faddp  %st,%st(1)
  fldt   0xe4b(%rip)        # 2010 <_fini+0xb54>
  fsubrp %st,%st(1)
  fdivrp %st,%st(1)
  fldt   -0x30(%rbp)
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  jb     L42
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <Beta_Continued_Fraction@plt>
  add    $0x30,%rsp
  jmp    L52
L42:
  fld1
  fldt   -0x30(%rbp)
  fsubrp %st,%st(1)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <Beta_Continued_Fraction@plt>
  add    $0x30,%rsp
  fld1
  fsubp  %st,%st(1)
  jmp    L52
L22:
  movsd  D58(%rip),%xmm0
  comisd -0x40(%rbp),%xmm0
  jbe    L87
  movsd  D58(%rip),%xmm0
  comisd -0x48(%rbp),%xmm0
  jbe    L87
  movsd  -0x40(%rbp),%xmm1
  movsd  D58(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x48(%rbp),%xmm1
  mov    -0x38(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <xBeta_Distribution>
  fldt   -0x20(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x60(%rbp)
  movsd  -0x48(%rbp),%xmm1
  movsd  D58(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x40(%rbp),%xmm0
  mov    -0x38(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <xBeta_Distribution>
  fldt   -0x10(%rbp)
  fmulp  %st,%st(1)
  fldt   -0x60(%rbp)
  faddp  %st,%st(1)
  fldt   -0x20(%rbp)
  fldt   -0x10(%rbp)
  faddp  %st,%st(1)
  fdivrp %st,%st(1)
  jmp    L52
L87:
  movsd  D58(%rip),%xmm0
  ucomisd -0x40(%rbp),%xmm0
  jp     L24
  movsd  D58(%rip),%xmm0
  ucomisd -0x40(%rbp),%xmm0
  jne    L24
  fld1
  fldt   -0x30(%rbp)
  fsubrp %st,%st(1)
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <powl@plt>
  add    $0x20,%rsp
  fstpt  -0x60(%rbp)
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  call   <xBeta_Function@plt>
  add    $0x20,%rsp
  fldt   -0x10(%rbp)
  fmulp  %st,%st(1)
  fldt   -0x60(%rbp)
  fdivp  %st,%st(1)
  fld1
  fsubp  %st,%st(1)
  jmp    L52
L24:
  movsd  D58(%rip),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L0
  movsd  D58(%rip),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jne    L0
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <powl@plt>
  add    $0x20,%rsp
  fstpt  -0x60(%rbp)
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  call   <xBeta_Function@plt>
  add    $0x20,%rsp
  fldt   -0x20(%rbp)
  fmulp  %st,%st(1)
  fldt   -0x60(%rbp)
  fdivp  %st,%st(1)
  jmp    L52
L0:
  movsd  D58(%rip),%xmm0
  comisd -0x40(%rbp),%xmm0
  jbe    L41
  movsd  -0x40(%rbp),%xmm1
  movsd  D58(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x48(%rbp),%xmm1
  mov    -0x38(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <xBeta_Distribution>
  fstpt  -0x60(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <powl@plt>
  add    $0x20,%rsp
  fstpt  -0x70(%rbp)
  fld1
  fldt   -0x30(%rbp)
  fsubrp %st,%st(1)
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <powl@plt>
  add    $0x20,%rsp
  fldt   -0x70(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x70(%rbp)
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  call   <xBeta_Function@plt>
  add    $0x20,%rsp
  fldt   -0x20(%rbp)
  fmulp  %st,%st(1)
  fldt   -0x70(%rbp)
  fdivp  %st,%st(1)
  fldt   -0x60(%rbp)
  faddp  %st,%st(1)
  jmp    L52
L41:
  movsd  -0x48(%rbp),%xmm1
  movsd  D58(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x40(%rbp),%xmm0
  mov    -0x38(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <xBeta_Distribution>
  fstpt  -0x60(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <powl@plt>
  add    $0x20,%rsp
  fstpt  -0x70(%rbp)
  fld1
  fldt   -0x30(%rbp)
  fsubrp %st,%st(1)
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <powl@plt>
  add    $0x20,%rsp
  fldt   -0x70(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x70(%rbp)
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  call   <xBeta_Function@plt>
  add    $0x20,%rsp
  fldt   -0x10(%rbp)
  fmulp  %st,%st(1)
  fldt   -0x70(%rbp)
  fdivp  %st,%st(1)
  fldt   -0x60(%rbp)
  fsubp  %st,%st(1)
L52:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D58
datatype: f64

tool: D58: 1

assistant: ```c
long double xBeta_Distribution(double xx, double aa, double bb) {
  long double x = (long double)xx;
  long double a = (long double)aa;
  long double b = (long double)bb;
  if (aa > 1.0 && bb > 1.0) {
    if (x <= (a - 1.0L) / (a + b - 2.0L))
      return Beta_Continued_Fraction(x, a, b);
    else
      return 1.0L - Beta_Continued_Fraction(1.0L - x, b, a);
  }
  if (aa < 1.0 && bb < 1.0)
    return (a * xBeta_Distribution(xx, aa + 1.0, bb) + b * xBeta_Distribution(xx, aa, bb + 1.0)) / (a + b);
  if (aa == 1.0)
    return 1.0L - powl(1.0L - x, b) / (b * xBeta_Function(a, b));
  if (bb == 1.0)
    return powl(x, a) / (a * xBeta_Function(a, b));
  if (aa < 1.0)
    return xBeta_Distribution(xx, aa + 1.0, bb) + powl(x, a) * powl(1.0L - x, b) / (a * xBeta_Function(a, b));
  return xBeta_Distribution(xx, aa, bb + 1.0) - powl(x, a) * powl(1.0L - x, b) / (b * xBeta_Function(a, b));
}
```