summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--acinclude.m42
-rw-r--r--tests/devel/try.c30
-rw-r--r--tests/refmpn.c32
-rw-r--r--tests/tests.h6
5 files changed, 71 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 96234a88b..05e34e094 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2009-12-08 Marco Bodrato <bodrato@mail.dm.unipi.it>
+
+ * tests/devel/try.c: Test mpn_addlsh2_n and mpn_{add,sub}lsh_n;
+ mpn_rsblsh_n now tests all shift values.
+ * tests/refmpn.c (refmpn_addlsh_n, refmpn_sublsh_n): New functions.
+ (refmpn_addlsh1_n): Use generic refmpn_addlsh_n.
+ (refmpn_sublsh1_n): Use generic refmpn_sublsh_n.
+ (refmpn_addlsh2_n): New function.
+ * tests/tests.h: Declare new functions.
+
2009-12-06 Torbjorn Granlund <tege@gmplib.org>
* tune/tuneup.c (tune_mulmod_bnm1): Up min_size to 12.
diff --git a/acinclude.m4 b/acinclude.m4
index 6ee769682..da1b327ea 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -112,7 +112,7 @@ dnl Expand to the right way to #include gmp-h.in. This must be used
dnl instead of gmp.h, since that file isn't generated until the end of the
dnl configure.
dnl
-dnl Dummy values for GMP_LIMB_BITS and GMP_LIMB_BITS are enough
+dnl Dummy value for GMP_LIMB_BITS is enough
dnl for all current configure-time uses of gmp.h.
define(GMP_INCLUDE_GMP_H,
diff --git a/tests/devel/try.c b/tests/devel/try.c
index ef09e151c..516915f53 100644
--- a/tests/devel/try.c
+++ b/tests/devel/try.c
@@ -592,7 +592,10 @@ validate_sqrtrem (void)
#define TYPE_COM_N 28
#define TYPE_ADDLSH1_N 30
+#define TYPE_ADDLSH2_N 48
+#define TYPE_ADDLSH_N 49
#define TYPE_SUBLSH1_N 31
+#define TYPE_SUBLSH_N 130
#define TYPE_RSBLSH1_N 34
#define TYPE_RSBLSH2_N 46
#define TYPE_RSBLSH_N 47
@@ -894,10 +897,23 @@ param_init (void)
COPY (TYPE_ADD_N);
REFERENCE (refmpn_addlsh1_n);
+ p = &param[TYPE_ADDLSH2_N];
+ COPY (TYPE_ADD_N);
+ REFERENCE (refmpn_addlsh2_n);
+
+ p = &param[TYPE_ADDLSH_N];
+ COPY (TYPE_ADD_N);
+ p->shift = 1;
+ REFERENCE (refmpn_addlsh_n);
+
p = &param[TYPE_SUBLSH1_N];
COPY (TYPE_ADD_N);
REFERENCE (refmpn_sublsh1_n);
+ p = &param[TYPE_SUBLSH_N];
+ COPY (TYPE_ADDLSH_N);
+ REFERENCE (refmpn_sublsh_n);
+
p = &param[TYPE_RSBLSH1_N];
COPY (TYPE_ADD_N);
REFERENCE (refmpn_rsblsh1_n);
@@ -907,7 +923,7 @@ param_init (void)
REFERENCE (refmpn_rsblsh2_n);
p = &param[TYPE_RSBLSH_N];
- COPY (TYPE_ADD_N);
+ COPY (TYPE_ADDLSH_N);
REFERENCE (refmpn_rsblsh_n);
p = &param[TYPE_RSH1ADD_N];
@@ -1446,9 +1462,18 @@ const struct choice_t choice_array[] = {
#if HAVE_NATIVE_mpn_addlsh1_n
{ TRY(mpn_addlsh1_n), TYPE_ADDLSH1_N },
#endif
+#if HAVE_NATIVE_mpn_addlsh2_n
+ { TRY(mpn_addlsh2_n), TYPE_ADDLSH2_N },
+#endif
+#if HAVE_NATIVE_mpn_addlsh_n
+ { TRY(mpn_addlsh_n), TYPE_ADDLSH_N },
+#endif
#if HAVE_NATIVE_mpn_sublsh1_n
{ TRY(mpn_sublsh1_n), TYPE_SUBLSH1_N },
#endif
+#if HAVE_NATIVE_mpn_sublsh_n
+ { TRY(mpn_sublsh_n), TYPE_SUBLSH_N },
+#endif
#if HAVE_NATIVE_mpn_rsblsh1_n
{ TRY(mpn_rsblsh1_n), TYPE_RSBLSH1_N },
#endif
@@ -2020,6 +2045,7 @@ call (struct each_t *e, tryfun_t function)
case TYPE_ADD_N:
case TYPE_SUB_N:
case TYPE_ADDLSH1_N:
+ case TYPE_ADDLSH2_N:
case TYPE_SUBLSH1_N:
case TYPE_RSBLSH1_N:
case TYPE_RSBLSH2_N:
@@ -2028,6 +2054,8 @@ call (struct each_t *e, tryfun_t function)
e->retval = CALLING_CONVENTIONS (function)
(e->d[0].p, e->s[0].p, e->s[1].p, size);
break;
+ case TYPE_ADDLSH_N:
+ case TYPE_SUBLSH_N:
case TYPE_RSBLSH_N:
e->retval = CALLING_CONVENTIONS (function)
(e->d[0].p, e->s[0].p, e->s[1].p, size, shift);
diff --git a/tests/refmpn.c b/tests/refmpn.c
index 5d0cc4572..b2444f208 100644
--- a/tests/refmpn.c
+++ b/tests/refmpn.c
@@ -611,43 +611,63 @@ refmpn_sub_n (mp_ptr rp, mp_srcptr s1p, mp_srcptr s2p, mp_size_t size)
}
mp_limb_t
-refmpn_addlsh1_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n)
+refmpn_addlsh_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp,
+ mp_size_t n, unsigned int s)
{
mp_limb_t cy;
mp_ptr tp;
ASSERT (refmpn_overlap_fullonly_two_p (rp, up, vp, n));
ASSERT (n >= 1);
+ ASSERT (0 < s && s < GMP_NUMB_BITS);
ASSERT_MPN (up, n);
ASSERT_MPN (vp, n);
tp = refmpn_malloc_limbs (n);
- cy = refmpn_lshift (tp, vp, n, 1);
+ cy = refmpn_lshift (tp, vp, n, s);
cy += refmpn_add_n (rp, up, tp, n);
free (tp);
return cy;
}
mp_limb_t
-refmpn_sublsh1_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n)
+refmpn_addlsh1_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n)
+{
+ return refmpn_addlsh_n (rp, up, vp, n, 1);
+}
+mp_limb_t
+refmpn_addlsh2_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n)
+{
+ return refmpn_addlsh_n (rp, up, vp, n, 2);
+}
+
+mp_limb_t
+refmpn_sublsh_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp,
+ mp_size_t n, unsigned int s)
{
mp_limb_t cy;
mp_ptr tp;
ASSERT (refmpn_overlap_fullonly_two_p (rp, up, vp, n));
ASSERT (n >= 1);
+ ASSERT (0 < s && s < GMP_NUMB_BITS);
ASSERT_MPN (up, n);
ASSERT_MPN (vp, n);
tp = refmpn_malloc_limbs (n);
- cy = mpn_lshift (tp, vp, n, 1);
+ cy = mpn_lshift (tp, vp, n, s);
cy += mpn_sub_n (rp, up, tp, n);
free (tp);
return cy;
}
+mp_limb_t
+refmpn_sublsh1_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n)
+{
+ return refmpn_sublsh_n (rp, up, vp, n, 1);
+}
mp_limb_signed_t
refmpn_rsblsh_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp,
- mp_size_t n, unsigned int s)
+ mp_size_t n, unsigned int s)
{
mp_limb_signed_t cy;
mp_ptr tp;
@@ -664,13 +684,11 @@ refmpn_rsblsh_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp,
free (tp);
return cy;
}
-
mp_limb_signed_t
refmpn_rsblsh1_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n)
{
return refmpn_rsblsh_n (rp, up, vp, n, 1);
}
-
mp_limb_signed_t
refmpn_rsblsh2_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n)
{
diff --git a/tests/tests.h b/tests/tests.h
index 1faa13eb6..04b7d090f 100644
--- a/tests/tests.h
+++ b/tests/tests.h
@@ -183,6 +183,10 @@ mp_limb_t refmpn_add_nc __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_srcptr yp,
mp_size_t size, mp_limb_t carry));
mp_limb_t refmpn_addlsh1_n __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_srcptr yp,
mp_size_t size));
+mp_limb_t refmpn_addlsh2_n __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_srcptr yp,
+ mp_size_t size));
+mp_limb_t refmpn_addlsh_n __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_srcptr yp,
+ mp_size_t size, unsigned int));
mp_limb_t refmpn_addmul_1 __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_size_t size,
mp_limb_t multiplier));
mp_limb_t refmpn_addmul_1c __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_size_t size,
@@ -369,6 +373,8 @@ mp_limb_t refmpn_sub_nc __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_srcptr yp,
mp_size_t size, mp_limb_t carry));
mp_limb_t refmpn_sublsh1_n __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_srcptr yp,
mp_size_t size));
+mp_limb_t refmpn_sublsh_n __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_srcptr yp,
+ mp_size_t size, unsigned int));
mp_limb_t refmpn_submul_1 __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_size_t size,
mp_limb_t multiplier));
mp_limb_t refmpn_submul_1c __GMP_PROTO ((mp_ptr wp, mp_srcptr xp, mp_size_t size,