if (hx == 0xffff000000000000ULL && lx == 0) {  *signgamp = 0; return x - x; }
__ieee754_gammal_r (long double x, int *signgamp){  /* We don't have a real gamma implementation now.  We'll use lgamma     and the exp function.  But due to the required boundary     conditions we must check some values separately.  */  int64_t hx;  u_int64_t lx;  GET_LDOUBLE_WORDS64 (hx, lx, x);  if (((hx & 0x7fffffffffffffffLL) | lx) == 0)    {      /* Return value for x == 0 is NaN with invalid exception.  */      *signgamp = 0;      return x / x;    }  if (hx < 0 && (u_int64_t) hx < 0xffff000000000000ULL && __rintl (x) == x)    {      /* Return value for integer x < 0 is NaN with invalid exception.  */      *signgamp = 0;      return (x - x) / (x - x);    }  /* XXX FIXME.  */  return __ieee754_expl (__ieee754_lgammal_r (x, signgamp));}