The floatdisf2_internal2 is broken since 2004-11-26, which will result in broken
rounding for float casts.
long long l = (((1L << 24) + 1) << 29) + 1;
float f = (float)l;
will eg. lead to
f=9007199254740992.00
instead of
f=9007200328482816.00
If I'm not mistaken, rs6000.md:5239 should read (const_int 2) instead of
(const_int 3).
--
Summary: floatdisf2_internal2 broken
Product: gcc
Version: 3.4.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mikael dot vidstedt at bea dot com
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24102