user: Translate the below assembly code into C programming language:

```asm
<xBeta_Distribution>:
  endbr64
  sub    $0x68,%rsp
  movsd  %xmm0,0x38(%rsp)
  movsd  %xmm1,(%rsp)
  movsd  %xmm2,0x10(%rsp)
  fldl   0x38(%rsp)
  fld    %st(0)
  fstpt  0x50(%rsp)
  fldl   (%rsp)
  fld    %st(0)
  fstpt  0x40(%rsp)
  fldl   0x10(%rsp)
  fld    %st(0)
  fstpt  0x20(%rsp)
  comisd D28(%rip),%xmm1
  jbe    L37
  comisd D28(%rip),%xmm2
  jbe    L160
  fld1
  fsubr  %st(2),%st
  fld    %st(1)
  fadd   %st(3),%st
  fsubs  0xe53(%rip)        # 2008 <_fini+0xb3c>
  fdivrp %st,%st(1)
  fcomip %st(3),%st
  jb     L36
  lea    -0x30(%rsp),%rsp
  fstpt  0x20(%rsp)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <Beta_Continued_Fraction@plt>
  add    $0x30,%rsp
  jmp    L132
L36:
  fstp   %st(0)
  fstp   %st(0)
  fstp   %st(0)
  push   0x48(%rsp)
  push   0x48(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  fldt   0x70(%rsp)
  fld1
  fsubp  %st,%st(1)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <Beta_Continued_Fraction@plt>
  fld1
  fsubp  %st,%st(1)
  add    $0x30,%rsp
  jmp    L132
L37:
  fstp   %st(0)
  fstp   %st(0)
  fstp   %st(0)
  movsd  D28(%rip),%xmm0
  comisd (%rsp),%xmm0
  ja     L42
  movsd  (%rsp),%xmm7
  ucomisd D28(%rip),%xmm7
  jp     L14
  jne    L14
  push   0x28(%rsp)
  push   0x28(%rsp)
  fldt   0x60(%rsp)
  fld1
  fsubp  %st,%st(1)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <powl@plt>
  fstpt  0x20(%rsp)
  add    $0x20,%rsp
  push   0x28(%rsp)
  push   0x28(%rsp)
  fld1
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <xBeta_Function@plt>
  fldt   0x40(%rsp)
  fmulp  %st,%st(1)
  fldt   0x20(%rsp)
  fdivp  %st,%st(1)
  fld1
  fsubp  %st,%st(1)
  add    $0x20,%rsp
  jmp    L132
L62:
  movsd  0x10(%rsp),%xmm2
  movapd %xmm0,%xmm6
  addsd  (%rsp),%xmm6
  movapd %xmm6,%xmm1
  movsd  0x38(%rsp),%xmm0
  call   <xBeta_Distribution>
  fldt   0x40(%rsp)
  fmulp  %st,%st(1)
  fstpt  0x50(%rsp)
  movsd  D28(%rip),%xmm6
  addsd  0x10(%rsp),%xmm6
  movapd %xmm6,%xmm2
  movsd  (%rsp),%xmm1
  movsd  0x38(%rsp),%xmm0
  call   <xBeta_Distribution>
  fldt   0x20(%rsp)
  fmul   %st,%st(1)
  fldt   0x50(%rsp)
  faddp  %st,%st(2)
  fldt   0x40(%rsp)
  faddp  %st,%st(1)
  fdivrp %st,%st(1)
  jmp    L132
L29:
  push   0x48(%rsp)
  push   0x48(%rsp)
  push   0x68(%rsp)
  push   0x68(%rsp)
  call   <powl@plt>
  fstpt  0x20(%rsp)
  add    $0x20,%rsp
  push   $0x3fff
  push   $0x0
  movl   $0x80000000,0x4(%rsp)
  push   0x58(%rsp)
  push   0x58(%rsp)
  call   <xBeta_Function@plt>
  fldt   0x60(%rsp)
  fmulp  %st,%st(1)
  fldt   0x20(%rsp)
  fdivp  %st,%st(1)
  add    $0x20,%rsp
  jmp    L132
L138:
  movsd  0x10(%rsp),%xmm2
  movsd  (%rsp),%xmm1
  addsd  %xmm0,%xmm1
  movsd  0x38(%rsp),%xmm0
  call   <xBeta_Distribution>
  fstpt  (%rsp)
  push   0x48(%rsp)
  push   0x48(%rsp)
  push   0x68(%rsp)
  push   0x68(%rsp)
  call   <powl@plt>
  fstpt  0x30(%rsp)
  add    $0x20,%rsp
  push   0x28(%rsp)
  push   0x28(%rsp)
  fld1
  fldt   0x60(%rsp)
  fsubrp %st,%st(1)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <powl@plt>
  fldt   0x30(%rsp)
  fmulp  %st,%st(1)
  fstpt  0x30(%rsp)
  add    $0x20,%rsp
  push   0x28(%rsp)
  push   0x28(%rsp)
  push   0x58(%rsp)
  push   0x58(%rsp)
  call   <xBeta_Function@plt>
  fldt   0x60(%rsp)
  fmulp  %st,%st(1)
  fldt   0x30(%rsp)
  fdivp  %st,%st(1)
  fldt   0x20(%rsp)
  faddp  %st,%st(1)
  add    $0x20,%rsp
  jmp    L132
L160:
  fstp   %st(0)
  fstp   %st(0)
  fstp   %st(0)
  movsd  D28(%rip),%xmm0
  comisd (%rsp),%xmm0
  jbe    L14
L42:
  movsd  D28(%rip),%xmm0
  comisd 0x10(%rsp),%xmm0
  ja     L62
L14:
  movsd  0x10(%rsp),%xmm4
  ucomisd D28(%rip),%xmm4
  jp     L74
  je     L29
L74:
  movsd  D28(%rip),%xmm0
  comisd (%rsp),%xmm0
  ja     L138
  movsd  0x10(%rsp),%xmm2
  addsd  D28(%rip),%xmm2
  movsd  (%rsp),%xmm1
  movsd  0x38(%rsp),%xmm0
  call   <xBeta_Distribution>
  fstpt  (%rsp)
  push   0x48(%rsp)
  push   0x48(%rsp)
  push   0x68(%rsp)
  push   0x68(%rsp)
  call   <powl@plt>
  fstpt  0x30(%rsp)
  add    $0x20,%rsp
  push   0x28(%rsp)
  push   0x28(%rsp)
  fld1
  fldt   0x60(%rsp)
  fsubrp %st,%st(1)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <powl@plt>
  fldt   0x30(%rsp)
  fmulp  %st,%st(1)
  fstpt  0x30(%rsp)
  add    $0x20,%rsp
  push   0x28(%rsp)
  push   0x28(%rsp)
  push   0x58(%rsp)
  push   0x58(%rsp)
  call   <xBeta_Function@plt>
  fldt   0x40(%rsp)
  fmulp  %st,%st(1)
  fldt   0x30(%rsp)
  fdivp  %st,%st(1)
  fldt   0x20(%rsp)
  fsubp  %st,%st(1)
  add    $0x20,%rsp
L132:
  add    $0x68,%rsp
  ret
```

tool_calls: name: parse_data
arguments: label: D28
type_guessed: f64

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