/* * __isinf_nsl(x) returns != 0 if x is ±inf, else 0; * no branching! * slightly dodgy in relying on signed shift right copying sign bit */ #include #include int __isinf_nsl (long double x) { double xhi; int64_t hx, mask; xhi = ldbl_high (x); EXTRACT_WORDS64 (hx, xhi); mask = (hx & 0x7fffffffffffffffLL) ^ 0x7ff0000000000000LL; mask |= -mask; mask >>= 63; return ~mask; }