This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/67771] New: integer-to-floating-point conversions wrongly produce -0 in FE_DOWNWARD mode
- From: "jsm28 at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 29 Sep 2015 20:28:36 +0000
- Subject: [Bug target/67771] New: integer-to-floating-point conversions wrongly produce -0 in FE_DOWNWARD mode
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67771
Bug ID: 67771
Summary: integer-to-floating-point conversions wrongly produce
-0 in FE_DOWNWARD mode
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: jsm28 at gcc dot gnu.org
Target Milestone: ---
Target: powerpc*-*-*
For older powerpc processors without support for fcfid in 32-bit code,
integer-to-floating-point conversions involve constructing a floating-point
representation, loading it into a floating-point register and subtracting a
constant. In FE_DOWNWARD mode, if the integer is 0 then the result is -0, but
integer 0 should always convert for +0. That is, this code is incorrect for
-frounding-math, and some other code sequence allowing for that should be
generated in that case (whether saving and restoring the rounding mode like
some other code generated by the powerpc back end does, or special-casing a
check for 0).
This results in incorrect returns from some glibc functions such as logb.