summaryrefslogtreecommitdiff
path: root/tests/refmpn.c
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gmplib.org>2008-11-27 20:23:00 +0100
committerTorbjorn Granlund <tege@gmplib.org>2008-11-27 20:23:00 +0100
commit6b3a7df8884436414dfeed75e0e35d781f0df70a (patch)
tree24d35032fd3f69e369784f8ed44480aa9a385a24 /tests/refmpn.c
parent137dcc0219025cbbb10e4c684a82290762c5ad7a (diff)
downloadgmp-6b3a7df8884436414dfeed75e0e35d781f0df70a.tar.gz
(refmpn_redc_1): New function.
Diffstat (limited to 'tests/refmpn.c')
-rw-r--r--tests/refmpn.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/refmpn.c b/tests/refmpn.c
index 240270a3d..6af830b11 100644
--- a/tests/refmpn.c
+++ b/tests/refmpn.c
@@ -1743,6 +1743,26 @@ refmpn_tdiv_qr (mp_ptr qp, mp_ptr rp, mp_size_t qxn,
}
}
+void
+refmpn_redc_1 (mp_ptr rp, mp_ptr up, mp_srcptr mp, mp_size_t n, mp_limb_t invm)
+{
+ mp_size_t j;
+ mp_limb_t cy;
+
+ ASSERT_MPN (up, 2*n);
+ /* ASSERT about directed overlap rp, up */
+ /* ASSERT about overlap rp, mp */
+ /* ASSERT about overlap up, mp */
+
+ for (j = n - 1; j >= 0; j--)
+ {
+ up[0] = mpn_addmul_1 (up, mp, n, (up[0] * invm) & GMP_NUMB_MASK);
+ up++;
+ }
+ cy = mpn_add_n (rp, up, up - n, n);
+ if (cy != 0)
+ mpn_sub_n (rp, rp, mp, n);
+}
size_t
refmpn_get_str (unsigned char *dst, int base, mp_ptr src, mp_size_t size)