See: http://gmplib.org/patches/x86-fat.diff http://gmplib.org/list-archives/gmp-bugs/2006-October/000579.html http://gmplib.org/#BUGREPORTS Removed the configure part of the patch since we patch configure.in. It was only needed for FAT binaries anyway and this is being included to fix linking errors. 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