diff options
author | Kevin Ryde <user42@zip.com.au> | 2000-06-09 01:34:41 +0200 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2000-06-09 01:34:41 +0200 |
commit | 1e7b55dc7b4414c3a2379cd50f2f78f010ae14f3 (patch) | |
tree | db5e613c938a99074a9dd3f40d916e807a975cf9 /mpn | |
parent | 804413b589fb4acebcb5d25b323fdabaec8512a5 (diff) | |
download | gmp-1e7b55dc7b4414c3a2379cd50f2f78f010ae14f3.tar.gz |
* mpn/tests/ref.[ch] (refmpn_addsub_nc): New function.
Diffstat (limited to 'mpn')
-rw-r--r-- | mpn/tests/ref.c | 18 | ||||
-rw-r--r-- | mpn/tests/ref.h | 6 |
2 files changed, 18 insertions, 6 deletions
diff --git a/mpn/tests/ref.c b/mpn/tests/ref.c index 4db464f52..2b45f65fd 100644 --- a/mpn/tests/ref.c +++ b/mpn/tests/ref.c @@ -479,26 +479,34 @@ refmpn_submul_1 (mp_ptr rp, mp_srcptr sp, mp_size_t size, mp_limb_t multiplier) mp_limb_t -refmpn_addsub_n (mp_ptr r1p, mp_ptr r2p, - mp_srcptr s1p, mp_srcptr s2p, mp_size_t size) +refmpn_addsub_nc (mp_ptr r1p, mp_ptr r2p, + mp_srcptr s1p, mp_srcptr s2p, mp_size_t size, + mp_limb_t carry) { mp_ptr p; mp_limb_t acy, scy; - /* Destinations can't overlap at all. */ + /* Destinations can't overlap. */ ASSERT (! MPN_OVERLAP_P (r1p, size, r2p, size)); ASSERT (refmpn_overlap_fullonly_two_p (r1p, s1p, s2p, size)); ASSERT (refmpn_overlap_fullonly_two_p (r2p, s1p, s2p, size)); ASSERT (size >= 1); p = refmpn_malloc_limbs (size); - acy = mpn_add_n (p, s1p, s2p, size); - scy = mpn_sub_n (r2p, s1p, s2p, size); + acy = refmpn_add_nc (p, s1p, s2p, size, carry >> 1); + scy = refmpn_sub_nc (r2p, s1p, s2p, size, carry & 1); refmpn_copyi (r1p, p, size); free (p); return 2 * acy + scy; } +mp_limb_t +refmpn_addsub_n (mp_ptr r1p, mp_ptr r2p, + mp_srcptr s1p, mp_srcptr s2p, mp_size_t size) +{ + return refmpn_addsub_nc (r1p, r2p, s1p, s2p, size, 0); +} + /* Right shift hi,lo and return the low limb of the result. Note a shift by BITS_PER_MP_LIMB isn't assumed to work (doesn't on x86). */ diff --git a/mpn/tests/ref.h b/mpn/tests/ref.h index 9d2d920ba..0ca21387d 100644 --- a/mpn/tests/ref.h +++ b/mpn/tests/ref.h @@ -35,7 +35,11 @@ mp_limb_t refmpn_addmul_1 _PROTO ((mp_ptr wp, mp_srcptr xp, mp_size_t size, mp_limb_t refmpn_addmul_1c _PROTO ((mp_ptr wp, mp_srcptr xp, mp_size_t size, mp_limb_t multiplier, mp_limb_t carry)); mp_limb_t refmpn_addsub_n _PROTO ((mp_ptr r1p, mp_ptr r2p, - mp_srcptr s1p, mp_srcptr s2p, mp_size_t n)); + mp_srcptr s1p, mp_srcptr s2p, + mp_size_t size)); +mp_limb_t refmpn_addsub_nc _PROTO ((mp_ptr r1p, mp_ptr r2p, + mp_srcptr s1p, mp_srcptr s2p, + mp_size_t size, mp_limb_t carry)); void refmpn_and_n _PROTO ((mp_ptr wp, mp_srcptr xp, mp_srcptr yp, mp_size_t size)); |