This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Fix libdecnumber handling of non-canonical BID significands (PR middle-end/91226)
- From: Jeff Law <law at redhat dot com>
- To: Joseph Myers <joseph at codesourcery dot com>, gcc-patches at gcc dot gnu dot org
- Date: Mon, 06 Jan 2020 10:06:56 -0700
- Subject: Re: Fix libdecnumber handling of non-canonical BID significands (PR middle-end/91226)
- References: <alpine.DEB.2.21.1911292052100.31650@digraph.polyomino.org.uk>
- Reply-to: law at redhat dot com
On Fri, 2019-11-29 at 20:53 +0000, Joseph Myers wrote:
> As reported in bug 91226, the libdecnumber code used on the host to
> interpret DFP values in the BID encoding fails, for _Decimal64 and
> _Decimal128, to check for the case where a significand is too large
> and so specified in IEEE 754 to be a non-canonical encoding of the
> zero significand. This patch adds the required handling of that case,
> together with tests both using -O2 (testing this host code) and -O0
> (testing libgcc code, which already worked before the patch); the
> tests also cover _Decimal32, which already had the required check.
>
> In the _Decimal128 case, where the code previously completely ignored
> the case where the first four bits of the combination field are 1100,
> 1101 or 1110, the logic for determining the correct quantum exponent
> in that case is also newly added by this patch, so tests are added for
> that as well (again, libgcc already handled it correctly when the
> conversion was done at runtime rather than at compile time).
>
> Bootstrapped with no regressions for x86_64-pc-linux-gnu. OK to
> commit (to trunk)? (Note 1: we don't have a maintainer for
> libdecnumber. Note 2: as a wrong-code fix, this could be considered
> later for backporting to release branches if no problems appear with
> it on trunk. Note 3: presumably binutils-gdb will pick this up at
> some point through a merge of libdecnumber from the GCC repository.)
>
> libdecnumber:
> 2019-11-29 Joseph Myers <joseph@codesourcery.com>
>
> PR middle-end/91226
> * bid/bid2dpd_dpd2bid.c (_bid_to_dpd64): Handle non-canonical
> significands.
> (_bid_to_dpd128): Likewise. Check for case where combination
> field starts 1100, 1101 or 1110.
>
> gcc/testsuite:
> 2019-11-29 Joseph Myers <joseph@codesourcery.com>
>
> PR middle-end/91226
> * gcc.dg/dfp/bid-non-canonical-d128-1.c,
> gcc.dg/dfp/bid-non-canonical-d128-2.c,
> gcc.dg/dfp/bid-non-canonical-d128-3.c,
> gcc.dg/dfp/bid-non-canonical-d128-4.c,
> gcc.dg/dfp/bid-non-canonical-d32-1.c,
> gcc.dg/dfp/bid-non-canonical-d32-2.c,
> gcc.dg/dfp/bid-non-canonical-d64-1.c,
> gcc.dg/dfp/bid-non-canonical-d64-2.c: New tests.
OK. Your call on whether or not to backport. Yes, binutils-gdb will
pick this up on whatever schedule works best for them.
Jeff
>