1/*
2 * Public domain.
3 */
4
5#if defined(LIBM_SCCS) && !defined(lint)
6static char rcsid[] = "$NetBSD: $";
7#endif
8
9/*
10 * isinfl(x) returns 1 if x is inf, -1 if x is -inf, else 0;
11 * no branching!
12 * slightly dodgy in relying on signed shift right copying sign bit
13 */
14
15#include <math.h>
16#include <math_private.h>
17#include <math_ldbl_opt.h>
18
19int
20___isinfl (long double x)
21{
22 double xhi;
23 int64_t hx, mask;
24
25 xhi = ldbl_high (x);
26 EXTRACT_WORDS64 (hx, xhi);
27
28 mask = (hx & 0x7fffffffffffffffLL) ^ 0x7ff0000000000000LL;
29 mask |= -mask;
30 mask >>= 63;
31 return ~mask & (hx >> 62);
32}
33hidden_ver (___isinfl, __isinfl)
34#if !IS_IN (libm)
35weak_alias (___isinfl, ____isinfl)
36long_double_symbol (libc, ___isinfl, isinfl);
37long_double_symbol (libc, ____isinfl, __isinfl);
38#endif
39

source code of glibc/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c