summaryrefslogtreecommitdiffstats
path: root/mpi-patches
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-06-26 08:17:45 -0700
committerKaz Kylheku <kaz@kylheku.com>2014-06-26 08:17:45 -0700
commit4c581811e5370fd868a64e870d7ac046a606377b (patch)
tree852db519a15d7530072d91945562fca299face68 /mpi-patches
parent4a9df6afcc6fe8ce8d7bac2d28b914a917d002f7 (diff)
downloadtxr-4c581811e5370fd868a64e870d7ac046a606377b.tar.gz
txr-4c581811e5370fd868a64e870d7ac046a606377b.tar.bz2
txr-4c581811e5370fd868a64e870d7ac046a606377b.zip
Fixes to bignum bit operations affecting pretty much all bit operations
when bit field operands are negative, affecting logand, logor, logxor, lognot, logtrunc, logtest and ash. In addition, logtest was found to return the logical inverse of its correct value. * arith.c (logtest): Fix broken boolean polarity of return value. * mpi-patches/add-bitops (mp_2comp): Fix incorrect treatment of negative values. (mp_and): Fix incorrectly ordered statements, which cause failure when operands are negative.
Diffstat (limited to 'mpi-patches')
-rw-r--r--mpi-patches/add-bitops14
1 files changed, 7 insertions, 7 deletions
diff --git a/mpi-patches/add-bitops b/mpi-patches/add-bitops
index 2019aa50..64129b83 100644
--- a/mpi-patches/add-bitops
+++ b/mpi-patches/add-bitops
@@ -1,7 +1,7 @@
Index: mpi-1.8.6/mpi.c
===================================================================
---- mpi-1.8.6.orig/mpi.c 2014-02-19 19:01:39.562347737 -0800
-+++ mpi-1.8.6/mpi.c 2014-02-19 19:01:43.174297255 -0800
+--- mpi-1.8.6.orig/mpi.c 2014-06-16 11:22:15.632802821 -0700
++++ mpi-1.8.6/mpi.c 2014-06-26 14:09:52.178356697 -0700
@@ -16,6 +16,9 @@
#include <ctype.h>
#include <math.h>
@@ -51,7 +51,7 @@ Index: mpi-1.8.6/mpi.c
+
+ for (pa = DIGITS(a), pb = DIGITS(b), w = 0, ix = 0; ix < dig; ix++) {
+ w += (ix == 0);
-+ w += (ix < adig) ? ~pa[ix] : ~padding;
++ w += (ix < adig) ? ~pa[ix] : padding;
+ pb[ix] = ACCUM(w);
+ w = CARRYOUT(w);
+ }
@@ -74,16 +74,16 @@ Index: mpi-1.8.6/mpi.c
+ return mp_copy(a, c);
+
+ if (ISNEG(a)) {
-+ mp_init_size(&tmp_a, extent);
+ extent = USED(b);
++ mp_init_size(&tmp_a, extent);
+ if ((res = mp_2comp(a, &tmp_a, extent)) != MP_OKAY)
+ return res;
+ a = &tmp_a;
+ }
+
+ if (ISNEG(b)) {
-+ mp_init_size(&tmp_b, extent);
+ extent = USED(a);
++ mp_init_size(&tmp_b, extent);
+ if ((res = mp_2comp(b, &tmp_b, extent)) != MP_OKAY) {
+ if (ISNEG(a))
+ mp_clear(&tmp_a);
@@ -437,8 +437,8 @@ Index: mpi-1.8.6/mpi.c
int ix;
Index: mpi-1.8.6/mpi.h
===================================================================
---- mpi-1.8.6.orig/mpi.h 2014-02-19 19:01:29.302491325 -0800
-+++ mpi-1.8.6/mpi.h 2014-02-19 19:01:43.178297199 -0800
+--- mpi-1.8.6.orig/mpi.h 2014-06-16 11:22:15.620803044 -0700
++++ mpi-1.8.6/mpi.h 2014-06-16 11:22:15.648802523 -0700
@@ -54,6 +54,7 @@
/* Macros for accessing the mp_int internals */