[Bug libgcc/88931] Inaccurate DI/TI -> SF/DF conversions in libgcc2

hjl at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Jan 23 21:42:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88931

--- Comment #5 from hjl at gcc dot gnu.org <hjl at gcc dot gnu.org> ---
Author: hjl
Date: Wed Jan 23 21:41:59 2019
New Revision: 268216

URL: https://gcc.gnu.org/viewcvs?rev=268216&root=gcc&view=rev
Log:
libgcc2.c: Correct DI/TI -> SF/DF conversions

FSTYPE FUNC (DWtype u) in libgcc2.c, which converts DI/TI to SF/DF, has

  /* No leading bits means u == minimum.  */
  if (count == 0)
    return -(Wtype_MAXp1_F * (Wtype_MAXp1_F / 2));

in the third case (where actually count == 0 only means the high part is
minimum).  It should be:

  /* No leading bits means u == minimum.  */
  if (count == 0)
    return Wtype_MAXp1_F * (FSTYPE) (hi | ((UWtype) u != 0));

instead.

gcc/testsuite/

2019-01-23  H.J. Lu  <hongjiu.lu@intel.com>

        PR libgcc/88931
        * gcc.dg/torture/fp-int-convert-timode-1.c: New test.
        * gcc.dg/torture/fp-int-convert-timode-2.c: Likewise.
        * gcc.dg/torture/fp-int-convert-timode-3.c: Likewise.
        * gcc.dg/torture/fp-int-convert-timode-4.c: Likewise.

libgcc/

2019-01-23  Joseph Myers  <joseph@codesourcery.com>

        PR libgcc/88931
        * libgcc2.c (FSTYPE FUNC (DWtype u)): Correct no leading bits
        case.

Added:
    trunk/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-1.c
    trunk/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-2.c
    trunk/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-3.c
    trunk/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-4.c
Modified:
    trunk/gcc/testsuite/ChangeLog
    trunk/libgcc/ChangeLog
    trunk/libgcc/libgcc2.c


More information about the Gcc-bugs mailing list