This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix libdecnumber handling of non-canonical BID significands (PR middle-end/91226)


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
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]