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.000000 instead of f=9007200328482816.000000 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