summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2019-03-08 19:54:37 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2019-03-08 19:54:37 (GMT)
commit2cba0bf57340c299b9b51681a44f37d95787a47d (patch)
treefaec5bc1c3b79bed7beeb9bb81aad166e3d29946
parent3e074a01a25b4f670b3558513ce29e29b20a9357 (diff)
downloadtcl-2cba0bf57340c299b9b51681a44f37d95787a47d.zip
tcl-2cba0bf57340c299b9b51681a44f37d95787a47d.tar.gz
tcl-2cba0bf57340c299b9b51681a44f37d95787a47d.tar.bz2
Use mp_get_bit() instead of mp_iseven()/mp_isodd(): Those latter functions are macro's currently, but will be real function in next libtommath. Bad idea for Tcl to depend on ...
-rw-r--r--generic/tclStrToD.c2
-rw-r--r--generic/tclStubInit.c1
-rw-r--r--generic/tclTestObj.c4
-rw-r--r--generic/tclTomMath.decls3
-rw-r--r--generic/tclTomMathDecls.h6
-rw-r--r--unix/Makefile.in7
-rw-r--r--win/Makefile.in1
-rw-r--r--win/makefile.vc1
8 files changed, 20 insertions, 5 deletions
diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c
index ef1fcf4..b7f35e6 100644
--- a/generic/tclStrToD.c
+++ b/generic/tclStrToD.c
@@ -4577,7 +4577,7 @@ TclBignumToDouble(
*/
mp_div_2d(a, -shift, &b, NULL);
- if (mp_isodd(&b)) {
+ if (mp_get_bit(&b, 0)) {
if (b.sign == MP_ZPOS) {
mp_add_d(&b, 1, &b);
} else {
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c
index 2f98f16..5f8939e 100644
--- a/generic/tclStubInit.c
+++ b/generic/tclStubInit.c
@@ -1022,6 +1022,7 @@ const TclTomMathStubs tclTomMathStubs = {
TclBN_mp_tc_or, /* 74 */
TclBN_mp_tc_xor, /* 75 */
TclBN_mp_tc_div_2d, /* 76 */
+ TclBN_mp_get_bit, /* 77 */
};
static const TclStubHooks tclStubHooks = {
diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c
index 67b1997..6fe4338 100644
--- a/generic/tclTestObj.c
+++ b/generic/tclTestObj.c
@@ -290,9 +290,9 @@ TestbignumobjCmd(
return TCL_ERROR;
}
if (!Tcl_IsShared(varPtr[varIndex])) {
- Tcl_SetIntObj(varPtr[varIndex], mp_iseven(&bignumValue));
+ Tcl_SetIntObj(varPtr[varIndex], !mp_get_bit(&bignumValue, 0));
} else {
- SetVarToObj(varPtr, varIndex, Tcl_NewIntObj(mp_iseven(&bignumValue)));
+ SetVarToObj(varPtr, varIndex, Tcl_NewIntObj(!mp_get_bit(&bignumValue, 0)));
}
mp_clear(&bignumValue);
break;
diff --git a/generic/tclTomMath.decls b/generic/tclTomMath.decls
index a6c3d5b..8b45dc8 100644
--- a/generic/tclTomMath.decls
+++ b/generic/tclTomMath.decls
@@ -267,6 +267,9 @@ declare 75 {
declare 76 {
int TclBN_mp_tc_div_2d(const mp_int *a, int b, mp_int *c)
}
+declare 77 {
+ int TclBN_mp_get_bit(const mp_int *a, int b)
+}
# Local Variables:
diff --git a/generic/tclTomMathDecls.h b/generic/tclTomMathDecls.h
index 1e402fd..c82d70d 100644
--- a/generic/tclTomMathDecls.h
+++ b/generic/tclTomMathDecls.h
@@ -74,6 +74,7 @@
#define mp_exch TclBN_mp_exch
#define mp_expt_d TclBN_mp_expt_d
#define mp_expt_d_ex TclBN_mp_expt_d_ex
+#define mp_get_bit TclBN_mp_get_bit
#define mp_get_int TclBN_mp_get_int
#define mp_get_long TclBN_mp_get_long
#define mp_get_long_long TclBN_mp_get_long_long
@@ -340,6 +341,8 @@ EXTERN int TclBN_mp_tc_xor(const mp_int *a, const mp_int *b,
mp_int *c);
/* 76 */
EXTERN int TclBN_mp_tc_div_2d(const mp_int *a, int b, mp_int *c);
+/* 77 */
+EXTERN int TclBN_mp_get_bit(const mp_int *a, int b);
typedef struct TclTomMathStubs {
int magic;
@@ -422,6 +425,7 @@ typedef struct TclTomMathStubs {
int (*tclBN_mp_tc_or) (const mp_int *a, const mp_int *b, mp_int *c); /* 74 */
int (*tclBN_mp_tc_xor) (const mp_int *a, const mp_int *b, mp_int *c); /* 75 */
int (*tclBN_mp_tc_div_2d) (const mp_int *a, int b, mp_int *c); /* 76 */
+ int (*tclBN_mp_get_bit) (const mp_int *a, int b); /* 77 */
} TclTomMathStubs;
extern const TclTomMathStubs *tclTomMathStubsPtr;
@@ -590,6 +594,8 @@ extern const TclTomMathStubs *tclTomMathStubsPtr;
(tclTomMathStubsPtr->tclBN_mp_tc_xor) /* 75 */
#define TclBN_mp_tc_div_2d \
(tclTomMathStubsPtr->tclBN_mp_tc_div_2d) /* 76 */
+#define TclBN_mp_get_bit \
+ (tclTomMathStubsPtr->tclBN_mp_get_bit) /* 77 */
#endif /* defined(USE_TCL_STUBS) */
diff --git a/unix/Makefile.in b/unix/Makefile.in
index d769f03..e0a3164 100644
--- a/unix/Makefile.in
+++ b/unix/Makefile.in
@@ -325,8 +325,8 @@ TOMMATH_OBJS = bncore.o bn_reverse.o bn_fast_s_mp_mul_digs.o \
bn_mp_cmp.o bn_mp_cmp_d.o bn_mp_cmp_mag.o \
bn_mp_cnt_lsb.o bn_mp_copy.o \
bn_mp_count_bits.o bn_mp_div.o bn_mp_div_d.o bn_mp_div_2.o \
- bn_mp_div_2d.o bn_mp_div_3.o \
- bn_mp_exch.o bn_mp_expt_d.o bn_mp_expt_d_ex.o bn_mp_get_int.o \
+ bn_mp_div_2d.o bn_mp_div_3.o bn_mp_exch.o \
+ bn_mp_expt_d.o bn_mp_expt_d_ex.o bn_mp_get_bit.o bn_mp_get_int.o \
bn_mp_get_long.o bn_mp_get_long_long.o bn_mp_grow.o bn_mp_init.o \
bn_mp_init_copy.o bn_mp_init_multi.o bn_mp_init_set.o \
bn_mp_init_set_int.o bn_mp_init_size.o bn_mp_karatsuba_mul.o \
@@ -1532,6 +1532,9 @@ bn_mp_expt_d.o: $(TOMMATH_DIR)/bn_mp_expt_d.c $(MATHHDRS)
bn_mp_expt_d_ex.o: $(TOMMATH_DIR)/bn_mp_expt_d_ex.c $(MATHHDRS)
$(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_expt_d_ex.c
+bn_mp_get_bit.o: $(TOMMATH_DIR)/bn_mp_get_bit.c $(MATHHDRS)
+ $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_get_bit.c
+
bn_mp_get_int.o: $(TOMMATH_DIR)/bn_mp_get_int.c $(MATHHDRS)
$(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_get_int.c
diff --git a/win/Makefile.in b/win/Makefile.in
index f97582a..e354c4e 100644
--- a/win/Makefile.in
+++ b/win/Makefile.in
@@ -384,6 +384,7 @@ TOMMATH_OBJS = \
bn_mp_exch.${OBJEXT} \
bn_mp_expt_d.${OBJEXT} \
bn_mp_expt_d_ex.${OBJEXT} \
+ bn_mp_get_bit.${OBJEXT} \
bn_mp_get_int.${OBJEXT} \
bn_mp_get_long.${OBJEXT} \
bn_mp_get_long_long.${OBJEXT} \
diff --git a/win/makefile.vc b/win/makefile.vc
index 742b9ea..c8340d5 100644
--- a/win/makefile.vc
+++ b/win/makefile.vc
@@ -276,6 +276,7 @@ TOMMATHOBJS = \
$(TMP_DIR)\bn_mp_exch.obj \
$(TMP_DIR)\bn_mp_expt_d.obj \
$(TMP_DIR)\bn_mp_expt_d_ex.obj \
+ $(TMP_DIR)\bn_mp_get_bit.obj \
$(TMP_DIR)\bn_mp_get_int.obj \
$(TMP_DIR)\bn_mp_get_long.obj \
$(TMP_DIR)\bn_mp_get_long_long.obj \