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 >