if (!e) {
u.bits <<= 12;
- if (u.bits == 0)
+ if (u.bits == 0) {
+ FORCE_EVAL(0/0.0f);
return FP_ILOGB0;
+ }
/* subnormal x */
for (e = -0x3ff; u.bits < (uint64_t)1<<63; e--, u.bits<<=1);
return e;
}
- if (e == 0x7ff)
+ if (e == 0x7ff) {
+ FORCE_EVAL(0/0.0f);
return u.bits<<12 ? FP_ILOGBNAN : INT_MAX;
+ }
return e - 0x3ff;
}
if (!e) {
u.bits <<= 9;
- if (u.bits == 0)
+ if (u.bits == 0) {
+ FORCE_EVAL(0/0.0f);
return FP_ILOGB0;
+ }
/* subnormal x */
for (e = -0x7f; u.bits < (uint32_t)1<<31; e--, u.bits<<=1);
return e;
}
- if (e == 0xff)
+ if (e == 0xff) {
+ FORCE_EVAL(0/0.0f);
return u.bits<<9 ? FP_ILOGBNAN : INT_MAX;
+ }
return e - 0x7f;
}
int e = u.bits.exp;
if (!e) {
- if (m == 0)
+ if (m == 0) {
+ FORCE_EVAL(0/0.0f);
return FP_ILOGB0;
+ }
/* subnormal x */
for (e = -0x3fff+1; m < (uint64_t)1<<63; e--, m<<=1);
return e;
}
- if (e == 0x7fff)
+ if (e == 0x7fff) {
+ FORCE_EVAL(0/0.0f);
/* in ld80 msb is set in inf */
return m & (uint64_t)-1>>1 ? FP_ILOGBNAN : INT_MAX;
+ }
return e - 0x3fff;
}
#endif