user: Converte this assembly snippet into its equivalent C code:

```asm
<xMedium_x>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  fld1
  fldt   0x20(%rbp)
  fdivrp %st,%st(1)
  fstpt  -0x70(%rbp)
  fldt   -0x70(%rbp)
  fstpt  -0x20(%rbp)
  fldt   -0x70(%rbp)
  fstpt  -0x10(%rbp)
  fldt   -0x20(%rbp)
  fldt   -0x10(%rbp)
  fsubrp %st,%st(1)
  fstpt  -0x60(%rbp)
  fldt   -0x10(%rbp)
  fstpt  -0x50(%rbp)
  fldz
  fstpt  -0x30(%rbp)
  mov    $0x0,%eax
  call   <Gamma_Function_Max_Arg@plt>
  fldt   0x20(%rbp)
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L18
  push   0x18(%rbp)
  push   0x10(%rbp)
  call   <logl@plt>
  add    $0x10,%rsp
  fldt   0x20(%rbp)
  fmulp  %st,%st(1)
  fldt   0x10(%rbp)
  fsubrp %st,%st(1)
  fstpt  -0xa0(%rbp)
  push   0x28(%rbp)
  push   0x20(%rbp)
  call   <xLn_Gamma_Function@plt>
  add    $0x10,%rsp
  fldt   -0xa0(%rbp)
  fsubp  %st,%st(1)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <expl@plt>
  add    $0x10,%rsp
  fstpt  -0x80(%rbp)
  fldz
  fldt   -0x80(%rbp)
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L45
  mov    D29(%rip),%rax
  fldt   (%rax)
  fldt   -0x80(%rbp)
  fdivrp %st,%st(1)
  fstpt  -0x30(%rbp)
  jmp    L45
L18:
  push   0x28(%rbp)
  push   0x20(%rbp)
  push   0x18(%rbp)
  push   0x10(%rbp)
  call   <powl@plt>
  add    $0x20,%rsp
  fstpt  -0xa0(%rbp)
  fldt   0x10(%rbp)
  fchs
  fstpt  -0xb0(%rbp)
  mov    -0xb0(%rbp),%rax
  mov    -0xa8(%rbp),%edx
  push   %rdx
  push   %rax
  call   <expl@plt>
  add    $0x10,%rsp
  fldt   -0xa0(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0xa0(%rbp)
  push   0x28(%rbp)
  push   0x20(%rbp)
  call   <xGamma_Function@plt>
  add    $0x10,%rsp
  fldt   -0xa0(%rbp)
  fdivp  %st,%st(1)
  fstpt  -0x80(%rbp)
  mov    D29(%rip),%rax
  fldt   (%rax)
  fldt   -0x80(%rbp)
  fdivrp %st,%st(1)
  fstpt  -0x30(%rbp)
L45:
  fldt   -0x30(%rbp)
  fldz
  fcomip %st(1),%st
  fstp   %st(0)
  jb     L38
  mov    D29(%rip),%rax
  fldt   (%rax)
  fstpt  -0x30(%rbp)
L38:
  movl   $0x1,-0x84(%rbp)
  jmp    L23
L74:
  fildl  -0x84(%rbp)
  fldt   0x20(%rbp)
  faddp  %st,%st(1)
  fldt   0x10(%rbp)
  fdivp  %st,%st(1)
  fldt   -0x70(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x70(%rbp)
  fldt   -0x70(%rbp)
  fldt   -0x60(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x20(%rbp)
  fldt   -0x50(%rbp)
  fldt   -0x20(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x10(%rbp)
  fldt   -0x50(%rbp)
  fldt   -0x10(%rbp)
  fsubrp %st,%st(1)
  fldt   -0x20(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x60(%rbp)
  fldt   -0x10(%rbp)
  fstpt  -0x50(%rbp)
  addl   $0x1,-0x84(%rbp)
L23:
  fldt   -0x30(%rbp)
  fldt   -0x50(%rbp)
  fmulp  %st,%st(1)
  fldt   -0x70(%rbp)
  fcomip %st(1),%st
  fstp   %st(0)
  ja     L74
  fldt   -0x50(%rbp)
  fstpt  -0x40(%rbp)
  fldt   -0x50(%rbp)
  fldt   -0x80(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x50(%rbp)
  fldt   -0x50(%rbp)
  fldt   -0x80(%rbp)
  fdivrp %st,%st(1)
  fldt   -0x40(%rbp)
  fsubp  %st,%st(1)
  fldt   -0x60(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x60(%rbp)
  fildl  -0x84(%rbp)
  fldt   0x20(%rbp)
  faddp  %st,%st(1)
  fldt   0x10(%rbp)
  fdivp  %st,%st(1)
  fldt   -0x70(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x70(%rbp)
  fldt   -0x70(%rbp)
  fldt   -0x60(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x40(%rbp)
  addl   $0x1,-0x84(%rbp)
  jmp    L64
L56:
  fildl  -0x84(%rbp)
  fldt   0x20(%rbp)
  faddp  %st,%st(1)
  fldt   0x10(%rbp)
  fdivp  %st,%st(1)
  fldt   -0x70(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x70(%rbp)
  fldt   -0x70(%rbp)
  fldt   -0x60(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x20(%rbp)
  fldt   -0x40(%rbp)
  fldt   -0x20(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x10(%rbp)
  fldt   -0x40(%rbp)
  fldt   -0x10(%rbp)
  fsubrp %st,%st(1)
  fldt   -0x20(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x60(%rbp)
  fldt   -0x10(%rbp)
  fstpt  -0x40(%rbp)
  addl   $0x1,-0x84(%rbp)
L64:
  fldt   -0x70(%rbp)
  fldt   -0x60(%rbp)
  faddp  %st,%st(1)
  fldt   -0x30(%rbp)
  fldt   -0x40(%rbp)
  fmulp  %st,%st(1)
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  ja     L56
  fldt   -0x40(%rbp)
  fldt   -0x60(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x40(%rbp)
  fldt   -0x40(%rbp)
  fldt   -0x80(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x40(%rbp)
  fldt   -0x50(%rbp)
  fldt   -0x40(%rbp)
  faddp  %st,%st(1)
  leave
  ret
```

assistant: ```c
long double xMedium_x(long double x, long double nu) {
  long double coef;
  long double term = 1.0L / nu;
  long double corrected_term = term;
  long double temp_sum = term;
  long double correction = -temp_sum + corrected_term;
  long double sum1 = temp_sum;
  long double sum2;
  long double epsilon = 0.0L;
  int i;
  if (nu > Gamma_Function_Max_Arg()) {
    coef = expl(nu * logl(x) - x - xLn_Gamma_Function(nu));
    if (coef > 0.0L)
      epsilon = DBL_EPSILON / coef;
  } else {
    coef = powl(x, nu) * expl(-x) / xGamma_Function(nu);
    epsilon = DBL_EPSILON / coef;
  }
  if (epsilon <= 0.0L)
    epsilon = (long double)DBL_EPSILON;
  for (i = 1; term > epsilon * sum1; i++) {
    term *= x / (nu + i);
    corrected_term = term + correction;
    temp_sum = sum1 + corrected_term;
    correction = (sum1 - temp_sum) + corrected_term;
    sum1 = temp_sum;
  }
  sum2 = sum1;
  sum1 *= coef;
  correction += sum2 - sum1 / coef;
  term *= x / (nu + i);
  sum2 = term + correction;
  for (i++; (term + correction) > epsilon * sum2; i++) {
    term *= x / (nu + i);
    corrected_term = term + correction;
    temp_sum = sum2 + corrected_term;
    correction = (sum2 - temp_sum) + corrected_term;
    sum2 = temp_sum;
  }
  sum2 += correction;
  sum2 *= coef;
  return sum1 + sum2;
}
```