Ciao,

Il 2020-02-18 12:39 Marco Bodrato ha scritto:
A proposed patch:

Looking at it twice, it is probably better to propose a cleaner patch, that can be adopted also upstream:

*** squfof126.c~        2020-02-18 15:03:43.371325091 +0100
--- squfof126.c 2020-02-18 15:25:46.208271285 +0100
***************
*** 43,57 ****
    return v;
  }
  static INLINE void mpz_set64(mpz_t n, SQUFOF_TYPE v) {
!   if (v == 0) {
!     mpz_set_ui(n,0);
! } else if (GMP_LIMB_BITS < 64 || sizeof(mp_limb_t) < sizeof(SQUFOF_TYPE)) {
      mpz_set_ui(n, (uint32_t)(v >> 32));
      mpz_mul_2exp(n, n, 32);
      mpz_add_ui(n, n, (uint32_t)v);
    } else {
!     n->_mp_d[0] = v;
!     n->_mp_size = 1;
    }
  }

--- 43,54 ----
    return v;
  }
  static INLINE void mpz_set64(mpz_t n, SQUFOF_TYPE v) {
!   if (v > ULONG_MAX) {
      mpz_set_ui(n, (uint32_t)(v >> 32));
      mpz_mul_2exp(n, n, 32);
      mpz_add_ui(n, n, (uint32_t)v);
    } else {
!     mpz_set_ui(n, v);
    }
  }


Because set_ui requires an unsigned long parameter. The set_ui, mul_2exp, add_ui trick is needed if sizeof(unsigned long) < sizeof(SQUFOF_TYPE), but for large values only.

Ĝis,
m

--
http://bodrato.it/papers/

Reply via email to