j***@beniston.com
2018-08-31 22:30:07 UTC
Hi,
Attached are a couple of patches to libm to fix warnings when compiling for
16-bit targets.
The first in e_scalb.c calls scalbln instead of scalbn, as 65000 is out of
range for an 'int'.
+#if INT_MAX == 32767
+ if ( fn > 65000.0) return scalbln(x, 65000);
+ if (-fn > 65000.0) return scalbln(x,-65000);
+#else
if ( fn > 65000.0) return scalbn(x, 65000);
if (-fn > 65000.0) return scalbn(x,-65000);
+#endif
The second in math_config.h (issignalingf_inline) fixes the signed overflow
warning that occurs.
- return 2 * (ix ^ 0x00400000) > 2u * 0x7fc00000;
+ return 2 * (ix ^ 0x00400000) > 0xFF800000u;
Although I hope I'm not missing something subtle with the mixing of the
types there.
Cheers,
Jon
Attached are a couple of patches to libm to fix warnings when compiling for
16-bit targets.
The first in e_scalb.c calls scalbln instead of scalbn, as 65000 is out of
range for an 'int'.
+#if INT_MAX == 32767
+ if ( fn > 65000.0) return scalbln(x, 65000);
+ if (-fn > 65000.0) return scalbln(x,-65000);
+#else
if ( fn > 65000.0) return scalbn(x, 65000);
if (-fn > 65000.0) return scalbn(x,-65000);
+#endif
The second in math_config.h (issignalingf_inline) fixes the signed overflow
warning that occurs.
- return 2 * (ix ^ 0x00400000) > 2u * 0x7fc00000;
+ return 2 * (ix ^ 0x00400000) > 0xFF800000u;
Although I hope I'm not missing something subtle with the mixing of the
types there.
Cheers,
Jon