summaryrefslogtreecommitdiff
path: root/mpn
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2000-06-09 01:34:41 +0200
committerKevin Ryde <user42@zip.com.au>2000-06-09 01:34:41 +0200
commit1e7b55dc7b4414c3a2379cd50f2f78f010ae14f3 (patch)
treedb5e613c938a99074a9dd3f40d916e807a975cf9 /mpn
parent804413b589fb4acebcb5d25b323fdabaec8512a5 (diff)
downloadgmp-1e7b55dc7b4414c3a2379cd50f2f78f010ae14f3.tar.gz
* mpn/tests/ref.[ch] (refmpn_addsub_nc): New function.
Diffstat (limited to 'mpn')
-rw-r--r--mpn/tests/ref.c18
-rw-r--r--mpn/tests/ref.h6
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));