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  <jos...@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  <jos...@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
> 

Reply via email to