Problems with __gmpn_add_nc and __gmpn_sub_nc
Torbjorn Granlund
tege at swox.com
Tue May 16 00:43:16 CEST 2006
Torbjorn Granlund <tege at swox.com> writes:
I cannot reproduce this.
I realized what is wrong, and actually also could reproduce it on
an GNU/Linux system.
The following patch should help, please try it:
Index: mpn/generic/addsub_n.c
===================================================================
RCS file: /home/cvsfiles/gmp42/mpn/generic/addsub_n.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -p -2 -r1.1 -r1.2
*** mpn/generic/addsub_n.c 14 Mar 2006 15:57:54 -0000 1.1
--- mpn/generic/addsub_n.c 15 May 2006 22:38:42 -0000 1.2
***************
*** 1,5 ****
/* mpn_addsub_n -- Add and Subtract two limb vectors of equal, non-zero length.
! Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
--- 1,5 ----
/* mpn_addsub_n -- Add and Subtract two limb vectors of equal, non-zero length.
! Copyright 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
*** 59,63 ****
{
this_n = MIN (n - off, PART_SIZE);
! #if HAVE_NATIVE_mpn_add_nc || !HAVE_NATIVE_mpn_add_n
acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
#else
--- 59,63 ----
{
this_n = MIN (n - off, PART_SIZE);
! #if HAVE_NATIVE_mpn_add_nc
acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
#else
*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
*** 65,69 ****
acyo = acyn + mpn_add_1 (r1p + off, r1p + off, this_n, acyo);
#endif
! #if HAVE_NATIVE_mpn_sub_nc || !HAVE_NATIVE_mpn_sub_n
scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
#else
--- 65,69 ----
acyo = acyn + mpn_add_1 (r1p + off, r1p + off, this_n, acyo);
#endif
! #if HAVE_NATIVE_mpn_sub_nc
scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
#else
*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
*** 82,86 ****
{
this_n = MIN (n - off, PART_SIZE);
! #if HAVE_NATIVE_mpn_sub_nc || !HAVE_NATIVE_mpn_sub_n
scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
#else
--- 82,86 ----
{
this_n = MIN (n - off, PART_SIZE);
! #if HAVE_NATIVE_mpn_sub_nc
scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
#else
*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
*** 88,92 ****
scyo = scyn + mpn_sub_1 (r2p + off, r2p + off, this_n, scyo);
#endif
! #if HAVE_NATIVE_mpn_add_nc || !HAVE_NATIVE_mpn_add_n
acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
#else
--- 88,92 ----
scyo = scyn + mpn_sub_1 (r2p + off, r2p + off, this_n, scyo);
#endif
! #if HAVE_NATIVE_mpn_add_nc
acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
#else
*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
*** 98,102 ****
else
{
! /* r1 and r2 are identical to s1 and s2 (r1==s1 and r2=s2 or vice versa)
Need temporary storage. */
mp_limb_t tp[PART_SIZE];
--- 98,102 ----
else
{
! /* r1 and r2 are identical to s1 and s2 (r1==s1 and r2==s2 or vice versa)
Need temporary storage. */
mp_limb_t tp[PART_SIZE];
*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
*** 106,110 ****
{
this_n = MIN (n - off, PART_SIZE);
! #if HAVE_NATIVE_mpn_add_nc || !HAVE_NATIVE_mpn_add_n
acyo = mpn_add_nc (tp, s1p + off, s2p + off, this_n, acyo);
#else
--- 106,110 ----
{
this_n = MIN (n - off, PART_SIZE);
! #if HAVE_NATIVE_mpn_add_nc
acyo = mpn_add_nc (tp, s1p + off, s2p + off, this_n, acyo);
#else
*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
*** 112,116 ****
acyo = acyn + mpn_add_1 (tp, tp, this_n, acyo);
#endif
! #if HAVE_NATIVE_mpn_sub_nc || !HAVE_NATIVE_mpn_sub_n
scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
#else
--- 112,116 ----
acyo = acyn + mpn_add_1 (tp, tp, this_n, acyo);
#endif
! #if HAVE_NATIVE_mpn_sub_nc
scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
#else
--
Torbjörn
More information about the gmp-discuss
mailing list