diff options
author | Torbjorn Granlund <tege@gmplib.org> | 2008-11-27 20:23:00 +0100 |
---|---|---|
committer | Torbjorn Granlund <tege@gmplib.org> | 2008-11-27 20:23:00 +0100 |
commit | 6b3a7df8884436414dfeed75e0e35d781f0df70a (patch) | |
tree | 24d35032fd3f69e369784f8ed44480aa9a385a24 /tests/refmpn.c | |
parent | 137dcc0219025cbbb10e4c684a82290762c5ad7a (diff) | |
download | gmp-6b3a7df8884436414dfeed75e0e35d781f0df70a.tar.gz |
(refmpn_redc_1): New function.
Diffstat (limited to 'tests/refmpn.c')
-rw-r--r-- | tests/refmpn.c | 20 |
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) |