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

Reply via email to