Ciao, 3 set 2023, 22:16 da ni...@lysator.liu.se:
> Andrew Teylu <andrewvaugh...@gmail.com> writes: > > I see no good reason to involve any signed values here, though. Maybe > the variable neg, and the return value, should be changed to mp_limb_t, > or at least unsigned int? > Yes, unsigned is the best choice, it used to store a positive or negative number, but now it actually is a mask: 0 or ~0. I attach a possible patch. >> I guess maybe a different question is: what is that code supposed to >> do? Is the intent to `xor` with `0xFFFFFFFF` if the `k` is even and >> `xor` with `0` if the `k` is odd (i.e., it either flips all the bits >> in the even case or leaves them in the odd case)? >> > > I think intention is to conditionally flip all the bits. And in > addition, neg should always be either all ones or all zeros. > Correct. Ĝis, m
diff -r e3cc6f9e9753 gmp-impl.h --- a/gmp-impl.h Sun Aug 27 20:47:01 2023 +0200 +++ b/gmp-impl.h Mon Sep 04 00:37:06 2023 +0200 @@ -1481,25 +1481,25 @@ __GMP_DECLSPEC void mpn_toom_interpolate_16pts (mp_ptr, mp_ptr, mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_size_t, int, mp_ptr); #define mpn_toom_couple_handling __MPN(toom_couple_handling) -__GMP_DECLSPEC void mpn_toom_couple_handling (mp_ptr, mp_size_t, mp_ptr, int, mp_size_t, int, int); +__GMP_DECLSPEC void mpn_toom_couple_handling (mp_ptr, mp_size_t, mp_ptr, unsigned, mp_size_t, int, int); #define mpn_toom_eval_dgr3_pm1 __MPN(toom_eval_dgr3_pm1) -__GMP_DECLSPEC int mpn_toom_eval_dgr3_pm1 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); +__GMP_DECLSPEC unsigned mpn_toom_eval_dgr3_pm1 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); #define mpn_toom_eval_dgr3_pm2 __MPN(toom_eval_dgr3_pm2) -__GMP_DECLSPEC int mpn_toom_eval_dgr3_pm2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); +__GMP_DECLSPEC unsigned mpn_toom_eval_dgr3_pm2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); #define mpn_toom_eval_pm1 __MPN(toom_eval_pm1) -__GMP_DECLSPEC int mpn_toom_eval_pm1 (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); +__GMP_DECLSPEC unsigned mpn_toom_eval_pm1 (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); #define mpn_toom_eval_pm2 __MPN(toom_eval_pm2) -__GMP_DECLSPEC int mpn_toom_eval_pm2 (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); +__GMP_DECLSPEC unsigned mpn_toom_eval_pm2 (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); #define mpn_toom_eval_pm2exp __MPN(toom_eval_pm2exp) -__GMP_DECLSPEC int mpn_toom_eval_pm2exp (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, unsigned, mp_ptr); +__GMP_DECLSPEC unsigned mpn_toom_eval_pm2exp (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, unsigned, mp_ptr); #define mpn_toom_eval_pm2rexp __MPN(toom_eval_pm2rexp) -__GMP_DECLSPEC int mpn_toom_eval_pm2rexp (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, unsigned, mp_ptr); +__GMP_DECLSPEC unsigned mpn_toom_eval_pm2rexp (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, unsigned, mp_ptr); #define mpn_toom22_mul __MPN(toom22_mul) __GMP_DECLSPEC void mpn_toom22_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); diff -r e3cc6f9e9753 mpn/generic/toom54_mul.c --- a/mpn/generic/toom54_mul.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom54_mul.c Mon Sep 04 00:37:06 2023 +0200 @@ -61,7 +61,7 @@ mp_srcptr bp, mp_size_t bn, mp_ptr scratch) { mp_size_t n, s, t; - int sign; + unsigned sign; /***************************** decomposition *******************************/ #define a4 (ap + 4 * n) diff -r e3cc6f9e9753 mpn/generic/toom63_mul.c --- a/mpn/generic/toom63_mul.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom63_mul.c Mon Sep 04 00:37:06 2023 +0200 @@ -99,7 +99,7 @@ { mp_size_t n, s, t; mp_limb_t cy; - int sign; + unsigned sign; /***************************** decomposition *******************************/ #define a5 (ap + 5 * n) diff -r e3cc6f9e9753 mpn/generic/toom6h_mul.c --- a/mpn/generic/toom6h_mul.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom6h_mul.c Mon Sep 04 00:37:06 2023 +0200 @@ -109,7 +109,7 @@ { mp_size_t n, s, t; int p, q, half; - int sign; + unsigned sign; /***************************** decomposition *******************************/ diff -r e3cc6f9e9753 mpn/generic/toom8h_mul.c --- a/mpn/generic/toom8h_mul.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom8h_mul.c Mon Sep 04 00:37:06 2023 +0200 @@ -119,7 +119,7 @@ { mp_size_t n, s, t; int p, q, half; - int sign; + unsigned sign; /***************************** decomposition *******************************/ diff -r e3cc6f9e9753 mpn/generic/toom_couple_handling.c --- a/mpn/generic/toom_couple_handling.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom_couple_handling.c Mon Sep 04 00:37:06 2023 +0200 @@ -45,7 +45,7 @@ */ void mpn_toom_couple_handling (mp_ptr pp, mp_size_t n, mp_ptr np, - int nsign, mp_size_t off, int ps, int ns) + unsigned nsign, mp_size_t off, int ps, int ns) { if (nsign) { #ifdef HAVE_NATIVE_mpn_rsh1sub_n diff -r e3cc6f9e9753 mpn/generic/toom_eval_dgr3_pm1.c --- a/mpn/generic/toom_eval_dgr3_pm1.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom_eval_dgr3_pm1.c Mon Sep 04 00:37:06 2023 +0200 @@ -37,11 +37,11 @@ #include "gmp-impl.h" -int +unsigned mpn_toom_eval_dgr3_pm1 (mp_ptr xp1, mp_ptr xm1, mp_srcptr xp, mp_size_t n, mp_size_t x3n, mp_ptr tp) { - int neg; + unsigned neg; ASSERT (x3n > 0); ASSERT (x3n <= n); diff -r e3cc6f9e9753 mpn/generic/toom_eval_dgr3_pm2.c --- a/mpn/generic/toom_eval_dgr3_pm2.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom_eval_dgr3_pm2.c Mon Sep 04 00:37:06 2023 +0200 @@ -38,12 +38,12 @@ #include "gmp-impl.h" /* Needs n+1 limbs of temporary storage. */ -int +unsigned mpn_toom_eval_dgr3_pm2 (mp_ptr xp2, mp_ptr xm2, mp_srcptr xp, mp_size_t n, mp_size_t x3n, mp_ptr tp) { mp_limb_t cy; - int neg; + unsigned neg; ASSERT (x3n > 0); ASSERT (x3n <= n); diff -r e3cc6f9e9753 mpn/generic/toom_eval_pm1.c --- a/mpn/generic/toom_eval_pm1.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom_eval_pm1.c Mon Sep 04 00:37:06 2023 +0200 @@ -38,12 +38,12 @@ #include "gmp-impl.h" /* Evaluates a polynomial of degree k > 3, in the points +1 and -1. */ -int +unsigned mpn_toom_eval_pm1 (mp_ptr xp1, mp_ptr xm1, unsigned k, mp_srcptr xp, mp_size_t n, mp_size_t hn, mp_ptr tp) { unsigned i; - int neg; + unsigned neg; ASSERT (k >= 4); diff -r e3cc6f9e9753 mpn/generic/toom_eval_pm2.c --- a/mpn/generic/toom_eval_pm2.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom_eval_pm2.c Mon Sep 04 00:37:06 2023 +0200 @@ -65,12 +65,12 @@ /* Evaluates a polynomial of degree 2 < k < GMP_NUMB_BITS, in the points +2 and -2. */ -int +unsigned mpn_toom_eval_pm2 (mp_ptr xp2, mp_ptr xm2, unsigned k, mp_srcptr xp, mp_size_t n, mp_size_t hn, mp_ptr tp) { int i; - int neg; + unsigned neg; mp_limb_t cy; ASSERT (k >= 3); diff -r e3cc6f9e9753 mpn/generic/toom_eval_pm2exp.c --- a/mpn/generic/toom_eval_pm2exp.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom_eval_pm2exp.c Mon Sep 04 00:37:06 2023 +0200 @@ -38,13 +38,13 @@ #include "gmp-impl.h" /* Evaluates a polynomial of degree k > 2, in the points +2^shift and -2^shift. */ -int +unsigned mpn_toom_eval_pm2exp (mp_ptr xp2, mp_ptr xm2, unsigned k, mp_srcptr xp, mp_size_t n, mp_size_t hn, unsigned shift, mp_ptr tp) { unsigned i; - int neg; + unsigned neg; #if HAVE_NATIVE_mpn_addlsh_n mp_limb_t cy; #endif diff -r e3cc6f9e9753 mpn/generic/toom_eval_pm2rexp.c --- a/mpn/generic/toom_eval_pm2rexp.c Sun Aug 27 20:47:01 2023 +0200 +++ b/mpn/generic/toom_eval_pm2rexp.c Mon Sep 04 00:37:06 2023 +0200 @@ -54,13 +54,13 @@ #endif /* Evaluates a polynomial of degree k >= 3. */ -int +unsigned mpn_toom_eval_pm2rexp (mp_ptr rp, mp_ptr rm, unsigned int q, mp_srcptr ap, mp_size_t n, mp_size_t t, unsigned int s, mp_ptr ws) { unsigned int i; - int neg; + unsigned neg; /* {ap,q*n+t} -> {rp,n+1} {rm,n+1} , with {ws, n+1}*/ ASSERT (n >= t); ASSERT (s != 0); /* or _eval_pm1 should be used */
_______________________________________________ gmp-bugs mailing list gmp-bugs@gmplib.org https://gmplib.org/mailman/listinfo/gmp-bugs