From 388596308e08b41ff26535b0aaf35b0553da708b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st> Date: Sat, 23 Mar 2013 23:21:09 +0200 Subject: [PATCH] Add fallback functions for mpn_copyd, mpn_copyi and mpn_zero. --- ChangeLog | 4 ++++ gmp-glue.c | 26 ++++++++++++++++++++++++++ gmp-glue.h | 26 ++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/ChangeLog b/ChangeLog index ba1c1a72..2b7f4b10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 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 diff --git a/gmp-glue.c b/gmp-glue.c index b468699b..a2633a50 100644 --- a/gmp-glue.c +++ b/gmp-glue.c @@ -106,6 +106,32 @@ mpz_roinit_n (mpz_ptr x, const mp_limb_t *xp, mp_size_t xs) } #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 diff --git a/gmp-glue.h b/gmp-glue.h index fcc47d00..3c4c0ac9 100644 --- a/gmp-glue.h +++ b/gmp-glue.h @@ -33,6 +33,12 @@ #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 @@ -42,6 +48,12 @@ #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 @@ -92,6 +104,20 @@ mpz_roinit_n (mpz_ptr x, const mp_limb_t *xp, mp_size_t xs); #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); -- GitLab