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

```asm
<xMedium_x>:
  endbr64
  sub    $0x48,%rsp
  xor    %eax,%eax
  fldt   0x60(%rsp)
  fld1
  fdivp  %st,%st(1)
  fld    %st(0)
  fsub   %st(1),%st
  fxch   %st(1)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <Gamma_Function_Max_Arg@plt>
  fldt   0x60(%rsp)
  fcomi  %st(1),%st
  fstp   %st(1)
  fldt   (%rsp)
  fldt   0x10(%rsp)
  fldt   0x50(%rsp)
  fxch   %st(2)
  fstpt  0x30(%rsp)
  fstpt  0x20(%rsp)
  jbe    L75
  fstp   %st(1)
  sub    $0x10,%rsp
  fstpt  (%rsp)
  call   <logl@plt>
  fldt   0x70(%rsp)
  sub    $0x10,%rsp
  fmul   %st,%st(1)
  fldt   0x70(%rsp)
  fsubrp %st,%st(2)
  fxch   %st(1)
  fstpt  0x20(%rsp)
  fld    %st(0)
  fstpt  (%rsp)
  fstpt  0x80(%rsp)
  call   <xLn_Gamma_Function@plt>
  pop    %rcx
  pop    %rsi
  fldt   0x10(%rsp)
  fsubp  %st,%st(1)
  fstpt  (%rsp)
  call   <expl@plt>
  mov    D6(%rip),%rax
  fld    %st(0)
  fstpt  0x20(%rsp)
  pop    %rdi
  pop    %r8
  fldz
  fld    %st(0)
  fxch   %st(2)
  fcomip %st(2),%st
  fstp   %st(1)
  fldt   0x60(%rsp)
  fldt   0x50(%rsp)
  fldt   0x20(%rsp)
  fldt   0x30(%rsp)
  jbe    L33
  fldt   (%rax)
  fldt   0x10(%rsp)
  fdivrp %st,%st(1)
  fxch   %st(5)
  fcomip %st(5),%st
  jb     L106
  fstp   %st(4)
  fxch   %st(1)
  fxch   %st(2)
  fxch   %st(3)
  jmp    L122
  nopl   0x0(%rax)
L33:
  fstp   %st(4)
  fxch   %st(1)
  fxch   %st(2)
  fxch   %st(3)
  jmp    L122
  nopw   0x0(%rax,%rax,1)
L107:
  fstp   %st(4)
  fxch   %st(1)
  fxch   %st(2)
  fxch   %st(3)
  fxch   %st(2)
L122:
  fldt   (%rax)
  jmp    L131
  nopl   0x0(%rax)
L75:
  fxch   %st(1)
  sub    $0x20,%rsp
  fld    %st(0)
  fstpt  0x10(%rsp)
  fstpt  0x80(%rsp)
  fld    %st(0)
  fstpt  (%rsp)
  fstpt  0x70(%rsp)
  call   <powl@plt>
  fstpt  0x20(%rsp)
  pop    %rax
  pop    %rdx
  fldt   0x60(%rsp)
  fchs
  fstpt  (%rsp)
  call   <expl@plt>
  fldt   0x10(%rsp)
  sub    $0x10,%rsp
  fmulp  %st,%st(1)
  fstpt  0x20(%rsp)
  fldt   0x80(%rsp)
  fld    %st(0)
  fstpt  (%rsp)
  fstpt  0x80(%rsp)
  call   <xGamma_Function@plt>
  fldt   0x20(%rsp)
  mov    D6(%rip),%rax
  fdivp  %st,%st(1)
  fld    %st(0)
  fstpt  0x30(%rsp)
  fldt   (%rax)
  add    $0x20,%rsp
  fdivp  %st,%st(1)
  fldz
  fldt   0x30(%rsp)
  fldt   0x20(%rsp)
  fldt   0x50(%rsp)
  fldt   0x60(%rsp)
  fxch   %st(4)
  fcomip %st(5),%st
  jae    L107
  fxch   %st(3)
  fxch   %st(4)
  fxch   %st(1)
  fxch   %st(2)
  fxch   %st(1)
  jmp    L131
  xchg   %ax,%ax
L106:
  fxch   %st(1)
  fxch   %st(2)
  fxch   %st(3)
  fxch   %st(4)
L131:
  fld    %st(2)
  mov    $0x1,%eax
  fld    %st(1)
  fmul   %st(4),%st
  fxch   %st(4)
  fcomi  %st(4),%st
  fstp   %st(4)
  jbe    L96
  nop
L72:
  mov    %eax,(%rsp)
  fildl  (%rsp)
  mov    %eax,%edx
  add    $0x1,%eax
  fadd   %st(6),%st
  fdivr  %st(5),%st
  fmulp  %st,%st(4)
  fxch   %st(2)
  fadd   %st(3),%st
  fld    %st(2)
  fadd   %st(1),%st
  fsubr  %st,%st(3)
  fxch   %st(1)
  faddp  %st,%st(3)
  fld    %st(1)
  fmul   %st(1),%st
  fxch   %st(4)
  fcomi  %st(4),%st
  fstp   %st(4)
  ja     L72
  mov    %eax,(%rsp)
  fildl  (%rsp)
  lea    0x2(%rdx),%eax
  fstpt  (%rsp)
L90:
  fldt   0x10(%rsp)
  fld    %st(0)
  fmul   %st(2),%st
  fstpt  0x20(%rsp)
  fldt   0x20(%rsp)
  fdivp  %st,%st(1)
  fsubrp %st,%st(1)
  faddp  %st,%st(2)
  fldt   (%rsp)
  fadd   %st(5),%st
  fdivr  %st(4),%st
  fmulp  %st,%st(3)
  fld    %st(1)
  fadd   %st(3),%st
  fld    %st(1)
  fmul   %st(1),%st
  fxch   %st(1)
  fcomi  %st(1),%st
  fstp   %st(1)
  jbe    L123
  cs nopw 0x0(%rax,%rax,1)
L36:
  mov    %eax,(%rsp)
  fildl  (%rsp)
  add    $0x1,%eax
  fadd   %st(6),%st
  fdivr  %st(5),%st
  fmulp  %st,%st(4)
  fxch   %st(2)
  fadd   %st(3),%st
  fld    %st(2)
  fadd   %st(1),%st
  fsubr  %st,%st(3)
  fxch   %st(1)
  faddp  %st,%st(3)
  fld    %st(3)
  fadd   %st(3),%st
  fld    %st(2)
  fmul   %st(2),%st
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  ja     L36
  fstp   %st(4)
  fstp   %st(0)
  fstp   %st(3)
  fstp   %st(0)
  jmp    L2
  nopw   0x0(%rax,%rax,1)
L123:
  fstp   %st(4)
  fstp   %st(0)
  fstp   %st(3)
  fstp   %st(0)
L2:
  faddp  %st,%st(1)
  fldt   0x10(%rsp)
  fmulp  %st,%st(1)
  fldt   0x20(%rsp)
  add    $0x48,%rsp
  faddp  %st,%st(1)
  ret
  nopl   0x0(%rax,%rax,1)
L96:
  fld1
  mov    $0x2,%eax
  fstpt  (%rsp)
  jmp    L90
```

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;
}
```