diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-03-08 19:54:37 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-03-08 19:54:37 (GMT) |
commit | 2cba0bf57340c299b9b51681a44f37d95787a47d (patch) | |
tree | faec5bc1c3b79bed7beeb9bb81aad166e3d29946 | |
parent | 3e074a01a25b4f670b3558513ce29e29b20a9357 (diff) | |
download | tcl-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.c | 2 | ||||
-rw-r--r-- | generic/tclStubInit.c | 1 | ||||
-rw-r--r-- | generic/tclTestObj.c | 4 | ||||
-rw-r--r-- | generic/tclTomMath.decls | 3 | ||||
-rw-r--r-- | generic/tclTomMathDecls.h | 6 | ||||
-rw-r--r-- | unix/Makefile.in | 7 | ||||
-rw-r--r-- | win/Makefile.in | 1 | ||||
-rw-r--r-- | win/makefile.vc | 1 |
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 \
|