[MPFR] Fix regression on 32-bit host systems

When converting parts of the mantissa to MPFR, we need to make sure to do
an *unsigned* conversion.  Since we convert at most 32 bits at a time,
stored in an unsigned long, this doesn't matter on systems where "long"
is larger than 32 bits.  But on systems where it is 32 bits, we can get
conversion errors.

gdb/ChangeLog
2017-12-11  Ulrich Weigand  <uweigand@de.ibm.com>

	* target-float.c (mpfr_float_ops::from_target): Use mpfr_set_ui
	instead of mpfr_set_si to convert mantissa bits.
This commit is contained in:
Ulrich Weigand
2017-12-11 15:26:26 +01:00
parent c5f9cfc894
commit f2f9e7ecc1
2 changed files with 6 additions and 1 deletions
+5
View File
@@ -1,3 +1,8 @@
2017-12-11 Ulrich Weigand <uweigand@de.ibm.com>
* target-float.c (mpfr_float_ops::from_target): Use mpfr_set_ui
instead of mpfr_set_si to convert mantissa bits.
2017-12-11 Xavier Roirand <roirand@adacore.com>
Joel Brobecker <brobecker@adacore.com>
+1 -1
View File
@@ -1312,7 +1312,7 @@ mpfr_float_ops::from_target (const struct floatformat *fmt,
mant = get_field (from, order, fmt->totalsize, mant_off, mant_bits);
mpfr_set_si (tmp.val, mant, MPFR_RNDN);
mpfr_set_ui (tmp.val, mant, MPFR_RNDN);
mpfr_mul_2si (tmp.val, tmp.val, exponent - mant_bits, MPFR_RNDN);
mpfr_add (to.val, to.val, tmp.val, MPFR_RNDN);
exponent -= mant_bits;