libgcc2.c: Correct DI/TI -> SF/DF conversions
authorH.J. Lu <hjl@gcc.gnu.org>
Wed, 23 Jan 2019 21:41:59 +0000 (13:41 -0800)
committerH.J. Lu <hjl@gcc.gnu.org>
Wed, 23 Jan 2019 21:41:59 +0000 (13:41 -0800)
commit6395ba73f84930d5ebcf692a3bd570da600f9da9
tree3e2db0c016b1c095fc8dab9c2987a3bc4ddf68ce
parent8c5b33788da402bdc1e3a14288e2dd8c8bd709e9
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.

From-SVN: r268216
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-4.c [new file with mode: 0644]
libgcc/ChangeLog
libgcc/libgcc2.c