2013-04-04 Niels Möller <nisse@lysator.liu.se>
+ From Martin Storsjö. Fallback functions for older GMP releases.
+ * gmp-glue.c (mpn_copyd, mpn_copyi, mpn_zero): New functions.
+ * gmp-glue.h: Declare them.
+
* gmp-glue.h (cnd_add_n, cnd_sub_n): Moved here, define in terms
of mpn_cnd_add_n and mpn_sub_n if available, otherwise in terms of
mpn_addmul_1 and mpn_submul_1. This seems to be an improvement for
}
#endif /* !GMP_HAVE_mpz_limbs_read */
+#if !GMP_HAVE_mpn_copyd
+void
+mpn_copyd (mp_ptr dst, mp_srcptr src, mp_size_t n)
+{
+ mp_size_t i;
+ for (i = n - 1; i >= 0; i--)
+ dst[i] = src[i];
+}
+
+void
+mpn_copyi (mp_ptr dst, mp_srcptr src, mp_size_t n)
+{
+ mp_size_t i;
+ for (i = 0; i < n; i++)
+ dst[i] = src[i];
+}
+
+void
+mpn_zero (mp_ptr ptr, mp_size_t n)
+{
+ mp_size_t i;
+ for (i = 0; i < n; i++)
+ ptr[i] = 0;
+}
+#endif /* !GMP_HAVE_mpn_copyd */
+
/* Additional convenience functions. */
int
#define GMP_HAVE_mpz_limbs_read 0
#endif
+#ifdef mpn_copyd
+#define GMP_HAVE_mpn_copyd 1
+#else
+#define GMP_HAVE_mpn_copyd 0
+#endif
+
/* Name mangling. */
#if !GMP_HAVE_mpz_limbs_read
#define mpz_limbs_read _nettle_mpz_limbs_read
#define mpz_roinit_n _nettle_mpz_roinit_n
#endif
+#if !GMP_HAVE_mpn_copyd
+#define mpn_copyd _nettle_mpn_copyd
+#define mpn_copyi _nettle_mpn_copyi
+#define mpn_zero _nettle_mpn_zero
+#endif
+
#define mpz_limbs_cmp _nettle_mpz_limbs_cmp
#define mpz_limbs_read_n _nettle_mpz_limbs_read_n
#define mpz_limbs_copy _nettle_mpz_limbs_copy
#endif /* !GMP_HAVE_mpz_limbs_read */
+#if !GMP_HAVE_mpn_copyd
+/* Copy elements, backwards */
+void
+mpn_copyd (mp_ptr dst, mp_srcptr src, mp_size_t n);
+
+/* Copy elements, forwards */
+void
+mpn_copyi (mp_ptr dst, mp_srcptr src, mp_size_t n);
+
+/* Zero elements */
+void
+mpn_zero (mp_ptr ptr, mp_size_t n);
+#endif /* !GMP_HAVE_mpn_copyd */
+
/* Convenience functions */
int
mpz_limbs_cmp (mpz_srcptr a, const mp_limb_t *bp, mp_size_t bn);