crosstool-ng/patches/mpfr/3.1.3/180-sqrt.patch
Kirill K. Smirnov 2e6a56d1cc patches: add patches for mpfr
This changeset adds official patches published on
mpfr website.

Signed-off-by: Kirill K. Smirnov <kirill.k.smirnov@gmail.com>
2016-09-18 00:01:42 +03:00

98 lines
2.9 KiB
Diff

diff -Naurd mpfr-3.1.3-a/PATCHES mpfr-3.1.3-b/PATCHES
--- mpfr-3.1.3-a/PATCHES 2016-02-15 15:12:59.450314624 +0000
+++ mpfr-3.1.3-b/PATCHES 2016-02-15 15:12:59.510314695 +0000
@@ -0,0 +1 @@
+sqrt
diff -Naurd mpfr-3.1.3-a/VERSION mpfr-3.1.3-b/VERSION
--- mpfr-3.1.3-a/VERSION 2016-02-15 15:11:00.966156445 +0000
+++ mpfr-3.1.3-b/VERSION 2016-02-15 15:12:59.510314695 +0000
@@ -1 +1 @@
-3.1.3-p7
+3.1.3-p8
diff -Naurd mpfr-3.1.3-a/src/mpfr.h mpfr-3.1.3-b/src/mpfr.h
--- mpfr-3.1.3-a/src/mpfr.h 2016-02-15 15:11:00.962156439 +0000
+++ mpfr-3.1.3-b/src/mpfr.h 2016-02-15 15:12:59.510314695 +0000
@@ -27,7 +27,7 @@
#define MPFR_VERSION_MAJOR 3
#define MPFR_VERSION_MINOR 1
#define MPFR_VERSION_PATCHLEVEL 3
-#define MPFR_VERSION_STRING "3.1.3-p7"
+#define MPFR_VERSION_STRING "3.1.3-p8"
/* Macros dealing with MPFR VERSION */
#define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.3-a/src/sqrt.c mpfr-3.1.3-b/src/sqrt.c
--- mpfr-3.1.3-a/src/sqrt.c 2015-06-19 19:55:09.000000000 +0000
+++ mpfr-3.1.3-b/src/sqrt.c 2016-02-15 15:12:59.490314671 +0000
@@ -211,10 +211,11 @@
rsize --;
sh = 0;
}
+ /* now rsize = MPFR_LIMB_SIZE(r) */
if (mpn_add_1 (rp0, rp, rsize, MPFR_LIMB_ONE << sh))
{
expr ++;
- rp[rsize - 1] = MPFR_LIMB_HIGHBIT;
+ rp0[rsize - 1] = MPFR_LIMB_HIGHBIT;
}
goto end;
diff -Naurd mpfr-3.1.3-a/src/version.c mpfr-3.1.3-b/src/version.c
--- mpfr-3.1.3-a/src/version.c 2016-02-15 15:11:00.966156445 +0000
+++ mpfr-3.1.3-b/src/version.c 2016-02-15 15:12:59.510314695 +0000
@@ -25,5 +25,5 @@
const char *
mpfr_get_version (void)
{
- return "3.1.3-p7";
+ return "3.1.3-p8";
}
diff -Naurd mpfr-3.1.3-a/tests/tsqrt.c mpfr-3.1.3-b/tests/tsqrt.c
--- mpfr-3.1.3-a/tests/tsqrt.c 2015-06-19 19:55:10.000000000 +0000
+++ mpfr-3.1.3-b/tests/tsqrt.c 2016-02-15 15:12:59.490314671 +0000
@@ -569,6 +569,35 @@
mpfr_clear (y);
}
+/* Bug reported by Fredrik Johansson, occurring when:
+ - the precision of the result is a multiple of the number of bits
+ per word (GMP_NUMB_BITS),
+ - the rounding mode is to nearest (MPFR_RNDN),
+ - internally, the result has to be rounded up to a power of 2.
+*/
+static void
+bug20160120 (void)
+{
+ mpfr_t x, y;
+
+ mpfr_init2 (x, 4 * GMP_NUMB_BITS);
+ mpfr_init2 (y, GMP_NUMB_BITS);
+
+ mpfr_set_ui (x, 1, MPFR_RNDN);
+ mpfr_nextbelow (x);
+ mpfr_sqrt (y, x, MPFR_RNDN);
+ MPFR_ASSERTN(mpfr_check (y));
+ MPFR_ASSERTN(mpfr_cmp_ui (y, 1) == 0);
+
+ mpfr_set_prec (y, 2 * GMP_NUMB_BITS);
+ mpfr_sqrt (y, x, MPFR_RNDN);
+ MPFR_ASSERTN(mpfr_check (y));
+ MPFR_ASSERTN(mpfr_cmp_ui (y, 1) == 0);
+
+ mpfr_clear(x);
+ mpfr_clear(y);
+}
+
#define TEST_FUNCTION test_sqrt
#define TEST_RANDOM_POS 8
#include "tgeneric.c"
@@ -704,6 +733,8 @@
data_check ("data/sqrt", mpfr_sqrt, "mpfr_sqrt");
bad_cases (mpfr_sqrt, mpfr_sqr, "mpfr_sqrt", 8, -256, 255, 4, 128, 800, 50);
+ bug20160120 ();
+
tests_end_mpfr ();
return 0;
}