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.

Reply via email to