patches/mpfr/2.4.1/100-remainder-neg.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 17 17:54:21 2011 +0200 (2011-07-17)
changeset 2888 dd71df95903a
permissions -rw-r--r--
cc/gcc: pass the companion libs prefix to cc_core

In case of canadian-cross, the companion libraries are not the same for
the core cc (they run on 'build') as they are for the final cc (they run
on 'host').

Prepare for this differentiation (coming later), while retaining the
current behavior (to use the same compblibs).

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@1249
     1
diff -Naurd mpfr-2.4.1-a/PATCHES mpfr-2.4.1-b/PATCHES
yann@1249
     2
--- mpfr-2.4.1-a/PATCHES	2009-02-20 09:43:17.000000000 +0000
yann@1249
     3
+++ mpfr-2.4.1-b/PATCHES	2009-02-27 16:56:29.000000000 +0000
yann@1249
     4
@@ -0,0 +1 @@
yann@1249
     5
+remainder-neg
yann@1249
     6
diff -Naurd mpfr-2.4.1-a/VERSION mpfr-2.4.1-b/VERSION
yann@1249
     7
--- mpfr-2.4.1-a/VERSION	2009-02-25 16:16:08.000000000 +0000
yann@1249
     8
+++ mpfr-2.4.1-b/VERSION	2009-02-27 16:55:37.000000000 +0000
yann@1249
     9
@@ -1 +1 @@
yann@1249
    10
-2.4.1
yann@1249
    11
+2.4.1-p1
yann@1249
    12
diff -Naurd mpfr-2.4.1-a/mpfr.h mpfr-2.4.1-b/mpfr.h
yann@1249
    13
--- mpfr-2.4.1-a/mpfr.h	2009-02-25 16:16:08.000000000 +0000
yann@1249
    14
+++ mpfr-2.4.1-b/mpfr.h	2009-02-27 16:55:38.000000000 +0000
yann@1249
    15
@@ -27,7 +27,7 @@
yann@1249
    16
 #define MPFR_VERSION_MAJOR 2
yann@1249
    17
 #define MPFR_VERSION_MINOR 4
yann@1249
    18
 #define MPFR_VERSION_PATCHLEVEL 1
yann@1249
    19
-#define MPFR_VERSION_STRING "2.4.1"
yann@1249
    20
+#define MPFR_VERSION_STRING "2.4.1-p1"
yann@1249
    21
 
yann@1249
    22
 /* Macros dealing with MPFR VERSION */
yann@1249
    23
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
yann@1249
    24
diff -Naurd mpfr-2.4.1-a/rem1.c mpfr-2.4.1-b/rem1.c
yann@1249
    25
--- mpfr-2.4.1-a/rem1.c	2009-02-20 09:43:17.000000000 +0000
yann@1249
    26
+++ mpfr-2.4.1-b/rem1.c	2009-02-27 16:55:15.000000000 +0000
yann@1249
    27
@@ -170,7 +170,12 @@
yann@1249
    28
     }
yann@1249
    29
 
yann@1249
    30
   if (mpz_cmp_ui (r, 0) == 0)
yann@1249
    31
-    inex = mpfr_set_ui (rem, 0, GMP_RNDN);
yann@1249
    32
+    {
yann@1249
    33
+      inex = mpfr_set_ui (rem, 0, GMP_RNDN);
yann@1249
    34
+      /* take into account sign of x */
yann@1249
    35
+      if (signx < 0)
yann@1249
    36
+        mpfr_neg (rem, rem, GMP_RNDN);
yann@1249
    37
+    }
yann@1249
    38
   else
yann@1249
    39
     {
yann@1249
    40
       if (rnd_q == GMP_RNDN)
yann@1249
    41
@@ -190,6 +195,9 @@
yann@1249
    42
                 *quo += 1;
yann@1249
    43
             }
yann@1249
    44
         }
yann@1249
    45
+      /* take into account sign of x */
yann@1249
    46
+      if (signx < 0)
yann@1249
    47
+        mpz_neg (r, r);
yann@1249
    48
       inex = mpfr_set_z (rem, r, rnd);
yann@1249
    49
       /* if ex > ey, rem should be multiplied by 2^ey, else by 2^ex */
yann@1249
    50
       MPFR_EXP (rem) += (ex > ey) ? ey : ex;
yann@1249
    51
@@ -198,13 +206,6 @@
yann@1249
    52
   if (quo)
yann@1249
    53
     *quo *= sign;
yann@1249
    54
 
yann@1249
    55
-  /* take into account sign of x */
yann@1249
    56
-  if (signx < 0)
yann@1249
    57
-    {
yann@1249
    58
-      mpfr_neg (rem, rem, GMP_RNDN);
yann@1249
    59
-      inex = -inex;
yann@1249
    60
-    }
yann@1249
    61
-
yann@1249
    62
   mpz_clear (mx);
yann@1249
    63
   mpz_clear (my);
yann@1249
    64
   mpz_clear (r);
yann@1249
    65
diff -Naurd mpfr-2.4.1-a/tests/tremquo.c mpfr-2.4.1-b/tests/tremquo.c
yann@1249
    66
--- mpfr-2.4.1-a/tests/tremquo.c	2009-02-20 09:43:15.000000000 +0000
yann@1249
    67
+++ mpfr-2.4.1-b/tests/tremquo.c	2009-02-27 16:55:15.000000000 +0000
yann@1249
    68
@@ -25,6 +25,36 @@
yann@1249
    69
 
yann@1249
    70
 #include "mpfr-test.h"
yann@1249
    71
 
yann@1249
    72
+static void
yann@1249
    73
+bug20090227 (void)
yann@1249
    74
+{
yann@1249
    75
+  mpfr_t x, y, r1, r2;
yann@1249
    76
+  int inex1, inex2;
yann@1249
    77
+
yann@1249
    78
+  mpfr_init2 (x, 118);
yann@1249
    79
+  mpfr_init2 (y, 181);
yann@1249
    80
+  mpfr_init2 (r1, 140);
yann@1249
    81
+  mpfr_init2 (r2, 140);
yann@1249
    82
+  mpfr_set_si (x, -1, GMP_RNDN);
yann@1249
    83
+  mpfr_set_str_binary (y, "1.100100100001111110110101010001000100001011010001100001000110100110001001100011001100010100010111000000011011100000111001101000100101001000000100100111000001000100010100110011111010");
yann@1249
    84
+  inex1 = mpfr_remainder (r1, x, y, GMP_RNDU);
yann@1249
    85
+  /* since the quotient is -1, r1 is the rounding of x+y */
yann@1249
    86
+  inex2 = mpfr_add (r2, x, y, GMP_RNDU);
yann@1249
    87
+  if (mpfr_cmp (r1, r2))
yann@1249
    88
+    {
yann@1249
    89
+      printf ("Error in mpfr_remainder (bug20090227)\n");
yann@1249
    90
+      printf ("Expected ");
yann@1249
    91
+      mpfr_dump (r2);
yann@1249
    92
+      printf ("Got      ");
yann@1249
    93
+      mpfr_dump (r1);
yann@1249
    94
+      exit (1);
yann@1249
    95
+    }
yann@1249
    96
+  mpfr_clear (x);
yann@1249
    97
+  mpfr_clear (y);
yann@1249
    98
+  mpfr_clear (r1);
yann@1249
    99
+  mpfr_clear (r2);
yann@1249
   100
+}
yann@1249
   101
+
yann@1249
   102
 int
yann@1249
   103
 main (int argc, char *argv[])
yann@1249
   104
 {
yann@1249
   105
@@ -50,6 +80,8 @@
yann@1249
   106
 
yann@1249
   107
   tests_start_mpfr ();
yann@1249
   108
 
yann@1249
   109
+  bug20090227 ();
yann@1249
   110
+
yann@1249
   111
   mpfr_init (x);
yann@1249
   112
   mpfr_init (y);
yann@1249
   113
   mpfr_init (r);
yann@1249
   114
diff -Naurd mpfr-2.4.1-a/version.c mpfr-2.4.1-b/version.c
yann@1249
   115
--- mpfr-2.4.1-a/version.c	2009-02-25 16:16:08.000000000 +0000
yann@1249
   116
+++ mpfr-2.4.1-b/version.c	2009-02-27 16:55:38.000000000 +0000
yann@1249
   117
@@ -25,5 +25,5 @@
yann@1249
   118
 const char *
yann@1249
   119
 mpfr_get_version (void)
yann@1249
   120
 {
yann@1249
   121
-  return "2.4.1";
yann@1249
   122
+  return "2.4.1-p1";
yann@1249
   123
 }