[flint] 03/03: update debian/patches directory
felix salfelder
felix-guest at alioth.debian.org
Sat Aug 31 19:20:04 UTC 2013
This is an automated email from the git hooks/post-receive script.
felix-guest pushed a commit to branch master-gmp
in repository flint.
commit 5a500a8e6f7bad529853b5237dd4b7861638ef55
Author: Felix Salfelder <felix at salfelder.org>
Date: Sat Aug 31 21:19:03 2013 +0200
update debian/patches directory
---
.../0001-backport-gmp-support-from-flint-git.patch | 561 ++++++++++++++++++++
debian/patches/flint-clean.patch | 10 -
debian/patches/flint-ntl-interface.patch | 30 --
debian/patches/flint-s390.patch | 12 -
debian/patches/flint-soname.patch | 20 -
debian/patches/series | 6 +-
debian/patches/zn_poly_include.patch | 66 ---
7 files changed, 562 insertions(+), 143 deletions(-)
diff --git a/debian/patches/0001-backport-gmp-support-from-flint-git.patch b/debian/patches/0001-backport-gmp-support-from-flint-git.patch
new file mode 100644
index 0000000..d7a91f2
--- /dev/null
+++ b/debian/patches/0001-backport-gmp-support-from-flint-git.patch
@@ -0,0 +1,561 @@
+From 1bccef7df68bbf6cffb594dca8863a91e7b1aa7e Mon Sep 17 00:00:00 2001
+From: Felix Salfelder <felix at salfelder.org>
+Date: Sat, 31 Aug 2013 16:57:37 +0200
+Subject: backport gmp support from flint git
+
+---
+ fft.h | 42 +++++++++++--
+ fft/combine_bits.c | 4 +-
+ fft/convolution.c | 51 +++++++++-------
+ fft/mul_fft_main.c | 2 +-
+ fft/mul_mfa_truncate_sqrt2.c | 2 +-
+ fft/mul_truncate_sqrt2.c | 7 ++-
+ fft/mulmod_2expp1.c | 7 ++-
+ fft/profile/p-mul_fft_main.c | 4 +-
+ fft/split_bits.c | 8 +--
+ flint.h | 24 ++++++++
+ mpn_extras.h | 55 +++++++++++++++--
+ mpn_extras/mulmod_2expp1_basecase.c | 117 ++++++++++++++++++++++++++++++++++++
+ 12 files changed, 275 insertions(+), 48 deletions(-)
+ create mode 100644 mpn_extras/mulmod_2expp1_basecase.c
+
+diff --git a/fft.h b/fft.h
+index 587cbd9..f1d383a 100644
+--- a/fft.h
++++ b/fft.h
+@@ -49,11 +49,43 @@ or implied, of William Hart.
+ extern "C" {
+ #endif
+
+-#if !defined(__MPIR_RELEASE ) || __MPIR_RELEASE < 20600
+-#define mpn_sumdiff_n __MPN(sumdiff_n)
+-extern
+-mp_limb_t mpn_sumdiff_n(mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+-#endif
++/* #if !defined(__MPIR_RELEASE ) || __MPIR_RELEASE < 20600
++// #define mpn_sumdiff_n __MPN(sumdiff_n)
++// extern
++// mp_limb_t mpn_sumdiff_n(mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
++// #endif
++*/
++
++static __inline__ mp_limb_t
++mpn_sumdiff_n(mp_ptr s, mp_ptr d, mp_srcptr x, mp_srcptr y, mp_size_t n)
++{
++ mp_limb_t ret;
++ mp_ptr t;
++
++ if (n == 0)
++ return 0;
++
++ if ((s == x && d == y) || (s == y && d == x))
++ {
++ t = flint_malloc(n * sizeof(mp_limb_t));
++ ret = mpn_sub_n(t, x, y, n);
++ ret += 2 * mpn_add_n(s, x, y, n);
++ flint_mpn_copyi(d, t, n);
++ flint_free(t);
++ return ret;
++ }
++
++ if (s == x || s == y)
++ {
++ ret = mpn_sub_n(d, x, y, n);
++ ret += 2 * mpn_add_n(s, x, y, n);
++ return ret;
++ }
++
++ ret = 2 * mpn_add_n(s, x, y, n);
++ ret += mpn_sub_n(d, x, y, n);
++ return ret;
++}
+
+ #define fft_sumdiff(t, u, r, s, n) \
+ (n == 0 ? 0 : mpn_sumdiff_n(t, u, r, s, n))
+diff --git a/fft/combine_bits.c b/fft/combine_bits.c
+index f9e1fbd..58f84fe 100644
+--- a/fft/combine_bits.c
++++ b/fft/combine_bits.c
+@@ -33,7 +33,7 @@ or implied, of William Hart.
+ #include "flint.h"
+ #include "fft.h"
+
+-void fft_combine_limbs(mp_limb_t * res, mp_limb_t ** poly, long length,
++void fft_combine_limbs(mp_limb_t * res, mp_limb_t ** poly, slong length,
+ mp_size_t coeff_limbs, mp_size_t output_limbs, mp_size_t total_limbs)
+ {
+ mp_size_t skip, i;
+@@ -51,7 +51,7 @@ void fft_combine_limbs(mp_limb_t * res, mp_limb_t ** poly, long length,
+ }
+ }
+
+-void fft_combine_bits(mp_limb_t * res, mp_limb_t ** poly, long length,
++void fft_combine_bits(mp_limb_t * res, mp_limb_t ** poly, slong length,
+ mp_bitcnt_t bits, mp_size_t output_limbs, mp_size_t total_limbs)
+ {
+ mp_bitcnt_t shift_bits, top_bits = ((FLINT_BITS - 1) & bits);
+diff --git a/fft/convolution.c b/fft/convolution.c
+index dff9279..907838d 100644
+--- a/fft/convolution.c
++++ b/fft/convolution.c
+@@ -1,27 +1,32 @@
+-/*=============================================================================
++/*
+
+- This file is part of FLINT.
++Copyright 2008-2011 William Hart. All rights reserved.
+
+- FLINT is free software; you can redistribute it and/or modify
+- it under the terms of the GNU General Public License as published by
+- the Free Software Foundation; either version 2 of the License, or
+- (at your option) any later version.
++Redistribution and use in source and binary forms, with or without modification, are
++permitted provided that the following conditions are met:
+
+- FLINT is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- GNU General Public License for more details.
++ 1. Redistributions of source code must retain the above copyright notice, this list of
++ conditions and the following disclaimer.
+
+- You should have received a copy of the GNU General Public License
+- along with FLINT; if not, write to the Free Software
+- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ 2. Redistributions in binary form must reproduce the above copyright notice, this list
++ of conditions and the following disclaimer in the documentation and/or other materials
++ provided with the distribution.
+
+-=============================================================================*/
+-/******************************************************************************
++THIS SOFTWARE IS PROVIDED BY William Hart ``AS IS'' AND ANY EXPRESS OR IMPLIED
++WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
++FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL William Hart OR
++CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
++SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
++ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+- Copyright (C) 2008-2011 William Hart
+-
+-******************************************************************************/
++The views and conclusions contained in the software and documentation are those of the
++authors and should not be interpreted as representing official policies, either expressed
++or implied, of William Hart.
++
++*/
+
+ #include <stdlib.h>
+ #include <mpir.h>
+@@ -31,13 +36,13 @@
+ #include "fmpz_poly.h"
+ #include "fft.h"
+
+-void fft_convolution(mp_limb_t ** ii, mp_limb_t ** jj, long depth,
+- long limbs, long trunc, mp_limb_t ** t1,
++void fft_convolution(mp_limb_t ** ii, mp_limb_t ** jj, slong depth,
++ slong limbs, slong trunc, mp_limb_t ** t1,
+ mp_limb_t ** t2, mp_limb_t ** s1, mp_limb_t * tt)
+ {
+- long n = (1L<<depth), j;
+- long w = (limbs*FLINT_BITS)/n;
+- long sqrt = (1L<<(depth/2));
++ slong n = (1L<<depth), j;
++ slong w = (limbs*FLINT_BITS)/n;
++ slong sqrt = (1L<<(depth/2));
+
+ if (depth <= 6)
+ {
+diff --git a/fft/mul_fft_main.c b/fft/mul_fft_main.c
+index 3487f8f..e9970c3 100644
+--- a/fft/mul_fft_main.c
++++ b/fft/mul_fft_main.c
+@@ -37,7 +37,7 @@ or implied, of William Hart.
+ static int fft_tuning_table[5][2] = FFT_TAB;
+
+ void flint_mpn_mul_fft_main(mp_limb_t * r1, mp_limb_t * i1, mp_size_t n1,
+- mp_limb_t * i2, mp_size_t n2)
++ mp_limb_t * i2, mp_size_t n2)
+ {
+ mp_size_t off, depth = 6;
+ mp_size_t w = 1;
+diff --git a/fft/mul_mfa_truncate_sqrt2.c b/fft/mul_mfa_truncate_sqrt2.c
+index e820a49..7197e20 100644
+--- a/fft/mul_mfa_truncate_sqrt2.c
++++ b/fft/mul_mfa_truncate_sqrt2.c
+@@ -34,7 +34,7 @@ or implied, of William Hart.
+ #include "ulong_extras.h"
+
+ void mul_mfa_truncate_sqrt2(mp_limb_t * r1, mp_limb_t * i1, mp_size_t n1,
+- mp_limb_t * i2, mp_size_t n2, mp_bitcnt_t depth, mp_bitcnt_t w)
++ mp_limb_t * i2, mp_size_t n2, mp_bitcnt_t depth, mp_bitcnt_t w)
+ {
+ mp_size_t n = (1UL<<depth);
+ mp_bitcnt_t bits1 = (n*w - (depth+1))/2;
+diff --git a/fft/mul_truncate_sqrt2.c b/fft/mul_truncate_sqrt2.c
+index c3f6ef9..bdff77d 100644
+--- a/fft/mul_truncate_sqrt2.c
++++ b/fft/mul_truncate_sqrt2.c
+@@ -31,9 +31,10 @@ or implied, of William Hart.
+ #include "mpir.h"
+ #include "flint.h"
+ #include "fft.h"
+-
++#include "mpn_extras.h"
++
+ void mul_truncate_sqrt2(mp_limb_t * r1, mp_limb_t * i1, mp_size_t n1,
+- mp_limb_t * i2, mp_size_t n2, mp_bitcnt_t depth, mp_bitcnt_t w)
++ mp_limb_t * i2, mp_size_t n2, mp_bitcnt_t depth, mp_bitcnt_t w)
+ {
+ mp_size_t n = (1UL<<depth);
+ mp_bitcnt_t bits1 = (n*w - (depth+1))/2;
+@@ -93,7 +94,7 @@ void mul_truncate_sqrt2(mp_limb_t * r1, mp_limb_t * i1, mp_size_t n1,
+ mpn_normmod_2expp1(ii[j], limbs);
+ if (i1 != i2) mpn_normmod_2expp1(jj[j], limbs);
+ c = 2*ii[j][limbs] + jj[j][limbs];
+- ii[j][limbs] = mpn_mulmod_2expp1(ii[j], ii[j], jj[j], c, n*w, tt);
++ ii[j][limbs] = flint_mpn_mulmod_2expp1_basecase(ii[j], ii[j], jj[j], c, n*w, tt);
+ }
+
+ ifft_truncate_sqrt2(ii, n, w, &t1, &t2, &s1, trunc);
+diff --git a/fft/mulmod_2expp1.c b/fft/mulmod_2expp1.c
+index 466adf5..0e0dd5c 100644
+--- a/fft/mulmod_2expp1.c
++++ b/fft/mulmod_2expp1.c
+@@ -34,6 +34,7 @@ or implied, of William Hart.
+ #include "longlong.h"
+ #include "ulong_extras.h"
+ #include "fft_tuning.h"
++#include "mpn_extras.h"
+
+ static mp_size_t mulmod_2expp1_table_n[FFT_N_NUM] = MULMOD_TAB;
+
+@@ -121,7 +122,7 @@ void _fft_mulmod_2expp1(mp_limb_t * r1, mp_limb_t * i1, mp_limb_t * i2,
+ {
+ if (i1 != i2) mpn_normmod_2expp1(jj[j], limbs);
+ c = 2*ii[j][limbs] + jj[j][limbs];
+- ii[j][limbs] = mpn_mulmod_2expp1(ii[j], ii[j], jj[j], c, n*w, tt);
++ ii[j][limbs] = flint_mpn_mulmod_2expp1_basecase(ii[j], ii[j], jj[j], c, n*w, tt);
+ }
+
+ ifft_negacyclic(ii, n, w, &t1, &t2, &s1);
+@@ -203,7 +204,7 @@ void fft_mulmod_2expp1(mp_limb_t * r, mp_limb_t * i1, mp_limb_t * i2,
+
+ if (limbs <= FFT_MULMOD_2EXPP1_CUTOFF)
+ {
+- r[limbs] = mpn_mulmod_2expp1(r, i1, i2, c, bits, tt);
++ r[limbs] = flint_mpn_mulmod_2expp1_basecase(r, i1, i2, c, bits, tt);
+ return;
+ }
+
+@@ -218,7 +219,7 @@ void fft_mulmod_2expp1(mp_limb_t * r, mp_limb_t * i1, mp_limb_t * i2,
+ _fft_mulmod_2expp1(r, i1, i2, limbs, depth1, w1);
+ }
+
+-long fft_adjust_limbs(mp_size_t limbs)
++slong fft_adjust_limbs(mp_size_t limbs)
+ {
+ mp_size_t bits1 = limbs*FLINT_BITS, bits2;
+ mp_size_t depth = 1, limbs2, depth1 = 1, depth2 = 1, adj;
+diff --git a/fft/profile/p-mul_fft_main.c b/fft/profile/p-mul_fft_main.c
+index fa89d3c..c635063 100644
+--- a/fft/profile/p-mul_fft_main.c
++++ b/fft/profile/p-mul_fft_main.c
+@@ -62,8 +62,8 @@ main(void)
+ r1 = i2 + int_limbs;
+ r2 = r1 + 2*int_limbs;
+
+- mpn_urandomb(i1, state->gmp_state, int_limbs*FLINT_BITS);
+- mpn_urandomb(i2, state->gmp_state, int_limbs*FLINT_BITS);
++ flint_mpn_urandomb(i1, state->gmp_state, int_limbs*FLINT_BITS);
++ flint_mpn_urandomb(i2, state->gmp_state, int_limbs*FLINT_BITS);
+
+ for (j = 0; j < iters; j++)
+ //mpn_mul(r2, i1, int_limbs, i2, int_limbs);
+diff --git a/fft/split_bits.c b/fft/split_bits.c
+index 282adcd..46f1463 100644
+--- a/fft/split_bits.c
++++ b/fft/split_bits.c
+@@ -28,12 +28,12 @@ or implied, of William Hart.
+
+ */
+
+-#include "mpir.h"
++#include "gmp.h"
+ #include "flint.h"
+ #include "fft.h"
+
+ mp_size_t fft_split_limbs(mp_limb_t ** poly, mp_limb_t * limbs,
+- mp_size_t total_limbs, mp_size_t coeff_limbs, mp_size_t output_limbs)
++ mp_size_t total_limbs, mp_size_t coeff_limbs, mp_size_t output_limbs)
+ {
+ mp_size_t i, skip, length = (total_limbs - 1)/coeff_limbs + 1;
+
+@@ -53,11 +53,11 @@ mp_size_t fft_split_limbs(mp_limb_t ** poly, mp_limb_t * limbs,
+ }
+
+ mp_size_t fft_split_bits(mp_limb_t ** poly, mp_limb_t * limbs,
+- mp_size_t total_limbs, mp_bitcnt_t bits, mp_size_t output_limbs)
++ mp_size_t total_limbs, mp_bitcnt_t bits, mp_size_t output_limbs)
+ {
+ mp_size_t i, coeff_limbs, limbs_left, length = (FLINT_BITS*total_limbs - 1)/bits + 1;
+ mp_bitcnt_t shift_bits, top_bits = ((FLINT_BITS - 1) & bits);
+- mp_limb_t * limb_ptr;
++ mp_srcptr limb_ptr;
+ mp_limb_t mask;
+
+ if (top_bits == 0)
+diff --git a/flint.h b/flint.h
+index 92ce429..43c4c60 100644
+--- a/flint.h
++++ b/flint.h
+@@ -31,6 +31,8 @@
+ #include "longlong.h"
+ #include "config.h"
+
++typedef mp_size_t slong;
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -177,6 +179,28 @@ unsigned int FLINT_BIT_COUNT(mp_limb_t x)
+ (xxx)[ixxx] = yyy; \
+ } while (0)
+
++/* compatibility between gmp and mpir */
++#ifndef mpn_com_n
++#define mpn_com_n mpn_com
++#endif
++
++#ifndef mpn_neg_n
++#define mpn_neg_n mpn_neg
++#endif
++
++#ifndef mpn_tdiv_q
++/* substitute for mpir's mpn_tdiv_q */
++static __inline__
++void mpn_tdiv_q(mp_ptr qp,
++ mp_srcptr np, mp_size_t nn,
++ mp_srcptr dp, mp_size_t dn)
++ {
++ mp_ptr _scratch = (mp_ptr) flint_malloc(dn * sizeof(mp_limb_t));
++ mpn_tdiv_qr(qp, _scratch, 0, np, nn, dp, dn);
++ flint_free(_scratch);
++ }
++#endif
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/mpn_extras.h b/mpn_extras.h
+index 5a75af5..c3b2a4d 100644
+--- a/mpn_extras.h
++++ b/mpn_extras.h
+@@ -53,7 +53,7 @@
+ (bn) = __tn; \
+ } while (0)
+
+-/* Not defined in mpir.h
++/* Not defined in gmp.h
+ mp_limb_t __gmpn_modexact_1_odd(mp_srcptr src, mp_size_t size,
+ mp_limb_t divisor);
+ #define mpn_modexact_1_odd __gmpn_modexact_1_odd
+@@ -75,7 +75,7 @@ flint_mpn_divisible_1_p(mp_srcptr x, mp_size_t xsize, mp_limb_t d)
+ static __inline__
+ int flint_mpn_zero_p(mp_srcptr x, mp_size_t xsize)
+ {
+- long i;
++ slong i;
+ for (i = 0; i < xsize; i++)
+ {
+ if (x[i])
+@@ -100,7 +100,7 @@ mp_size_t flint_mpn_remove_2exp(mp_ptr x, mp_size_t xsize, mp_bitcnt_t *bits);
+ mp_size_t flint_mpn_remove_power_ascending(mp_ptr x, mp_size_t xsize,
+ mp_ptr p, mp_size_t psize, ulong *exp);
+
+-int flint_mpn_factor_trial(mp_srcptr x, mp_size_t xsize, long start, long stop);
++int flint_mpn_factor_trial(mp_srcptr x, mp_size_t xsize, slong start, slong stop);
+
+ int flint_mpn_divides(mp_ptr q, mp_srcptr array1,
+ mp_size_t limbs1, mp_srcptr arrayg, mp_size_t limbsg, mp_ptr temp);
+@@ -182,7 +182,54 @@ do { \
+ void
+ flint_mpn_harmonic_odd_balanced(mp_ptr t, mp_size_t * tsize,
+ mp_ptr v, mp_size_t * vsize,
+- long a, long b, long n, int d);
++ slong a, slong b, slong n, int d);
++
++mp_limb_t flint_mpn_preinv1(mp_limb_t d, mp_limb_t d2);
++
++mp_limb_t flint_mpn_divrem_preinv1(mp_ptr q, mp_ptr a,
++ mp_size_t m, mp_srcptr b, mp_size_t n, mp_limb_t dinv);
++
++#define flint_mpn_divrem21_preinv(q, a_hi, a_lo, dinv) \
++ do { \
++ mp_limb_t __q2, __q3, __q4; \
++ umul_ppmm((q), __q2, (a_hi), (dinv)); \
++ umul_ppmm(__q3, __q4, (a_lo), (dinv)); \
++ add_ssaaaa((q), __q2, (q), __q2, 0, __q3); \
++ add_ssaaaa((q), __q2, (q), __q2, (a_hi), (a_lo)); \
++ } while (0)
++
++void flint_mpn_mulmod_preinv1(mp_ptr r,
++ mp_srcptr a, mp_srcptr b, mp_size_t n,
++ mp_srcptr d, mp_limb_t dinv, ulong norm);
++
++void flint_mpn_preinvn(mp_ptr dinv, mp_srcptr d, mp_size_t n);
++
++void flint_mpn_mulmod_preinvn(mp_ptr r,
++ mp_srcptr a, mp_srcptr b, mp_size_t n,
++ mp_srcptr d, mp_srcptr dinv, ulong norm);
++
++int flint_mpn_mulmod_2expp1_basecase(mp_ptr xp, mp_srcptr yp, mp_srcptr zp, int c,
++ mp_bitcnt_t b, mp_ptr tp);
++
++static __inline__
++void flint_mpn_rrandom(mp_limb_t *rp, gmp_randstate_t state, mp_size_t n)
++{
++ __mpz_struct str;
++ str._mp_d = rp;
++ str._mp_alloc = n;
++ str._mp_size =n;
++ mpz_rrandomb(&str,state,FLINT_BITS*n);
++}
++
++static __inline__
++void flint_mpn_urandomb(mp_limb_t *rp, gmp_randstate_t state, mp_bitcnt_t n)
++{
++ __mpz_struct str;
++ str._mp_d = rp;
++ str._mp_alloc = (n + FLINT_BITS - 1)/FLINT_BITS;
++ str._mp_size = (n + FLINT_BITS - 1)/FLINT_BITS;
++ mpz_rrandomb(&str,state,n);
++}
+
+ #ifdef __cplusplus
+ }
+diff --git a/mpn_extras/mulmod_2expp1_basecase.c b/mpn_extras/mulmod_2expp1_basecase.c
+new file mode 100644
+index 0000000..844bb1a
+--- /dev/null
++++ b/mpn_extras/mulmod_2expp1_basecase.c
+@@ -0,0 +1,117 @@
++/*=============================================================================
++
++ This file is part of FLINT.
++
++ FLINT is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ FLINT is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with FLINT; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++
++=============================================================================*/
++/******************************************************************************
++
++ Copyright 2009 Jason Moxham
++
++******************************************************************************/
++
++#include "gmp.h"
++#include "flint.h"
++#include "mpn_extras.h"
++
++#define BITS_TO_LIMBS(b) (((b) + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS)
++
++/* ret+(xp,n)=(yp,n)*(zp,n) % 2^b+1
++ needs (tp,2n) temp space , everything reduced mod 2^b
++ inputs,outputs are fully reduced
++ NOTE: 2n is not the same as 2b rounded up to nearest limb
++*/
++static __inline__ int
++mpn_mulmod_2expp1_internal(mp_ptr xp, mp_srcptr yp, mp_srcptr zp,
++ mp_bitcnt_t b, mp_ptr tp)
++{
++ mp_size_t n, k;
++ mp_limb_t c;
++
++ n = BITS_TO_LIMBS(b);
++ k = GMP_NUMB_BITS * n - b;
++
++ mpn_mul_n(tp, yp, zp, n);
++
++ if (k == 0)
++ {
++ c = mpn_sub_n(xp, tp, tp + n, n);
++ return mpn_add_1 (xp, xp, n, c);
++ }
++
++ c = tp[n - 1];
++ tp[n - 1] &= GMP_NUMB_MASK >> k;
++
++#if HAVE_NATIVE_mpn_sublsh_nc
++ c = mpn_sublsh_nc (xp, tp, tp + n, n, k, c);
++#else
++ {
++ mp_limb_t c1;
++ c1 = mpn_lshift (tp + n, tp + n, n, k);
++ tp[n] |= c >> (GMP_NUMB_BITS - k);
++ c = mpn_sub_n (xp, tp, tp + n, n) + c1;
++ }
++#endif
++ c = mpn_add_1 (xp, xp, n, c);
++ xp[n - 1] &= GMP_NUMB_MASK >> k;
++ return c;
++}
++
++/* c is the top bits of the inputs, must be fully reduced */
++int
++flint_mpn_mulmod_2expp1_basecase (mp_ptr xp, mp_srcptr yp, mp_srcptr zp, int c,
++ mp_bitcnt_t b, mp_ptr tp)
++{
++ int cy, cz;
++ mp_size_t n, k;
++
++ cy = c & 2;
++ cz = c & 1;
++ n = BITS_TO_LIMBS(b);
++ k = GMP_NUMB_BITS * n - b;
++
++ if (cy == 0)
++ {
++ if (cz == 0)
++ {
++ c = mpn_mulmod_2expp1_internal(xp, yp, zp, b, tp);
++ }
++ else
++ {
++ c = mpn_neg_n(xp, yp, n);
++ c = mpn_add_1 (xp, xp, n, c);
++ xp[n - 1] &= GMP_NUMB_MASK >> k;
++ }
++ }
++ else
++ {
++ if (cz == 0)
++ {
++ c = mpn_neg_n(xp, zp, n);
++ c = mpn_add_1(xp, xp, n, c);
++ xp[n - 1] &= GMP_NUMB_MASK >> k;
++ }
++ else
++ {
++ c = 0;
++ xp[0] = 1;
++ flint_mpn_zero(xp + 1, n - 1);
++ }
++ }
++
++ return c;
++}
++
diff --git a/debian/patches/flint-clean.patch b/debian/patches/flint-clean.patch
deleted file mode 100644
index edad99a..0000000
--- a/debian/patches/flint-clean.patch
+++ /dev/null
@@ -1,10 +0,0 @@
-Index: flint-1.06/makefile
-===================================================================
---- flint-1.06.orig/makefile 2008-06-02 13:55:46.000000000 -0400
-+++ flint-1.06/makefile 2008-06-02 13:56:35.000000000 -0400
-@@ -382,3 +382,5 @@
- F_mpz_mul-timing: $(ZMULOBJ)
- $(CC) $(ZMULOBJ) -o Zmul $(LIBS)
-
-+clean:
-+ rm -f *.o libflint*.so mpQS tinyQS libflint.dylib libflint.dll
diff --git a/debian/patches/flint-ntl-interface.patch b/debian/patches/flint-ntl-interface.patch
deleted file mode 100644
index cae75ae..0000000
--- a/debian/patches/flint-ntl-interface.patch
+++ /dev/null
@@ -1,30 +0,0 @@
---- a/makefile
-+++ b/makefile
-@@ -22,9 +22,9 @@
-
- CPP = $(FLINT_CPP)
-
--LIBS = -L$(FLINT_GMP_LIB_DIR) $(FLINT_LINK_OPTIONS) -lgmp -lpthread -lm
-+LIBS = -L$(FLINT_GMP_LIB_DIR) $(FLINT_LINK_OPTIONS) -lgmp -lpthread -lm -lstdc++ -lntl
-
--LIBS2 = -L$(FLINT_GMP_LIB_DIR) -L$(FLINT_NTL_LIB_DIR) $(FLINT_LINK_OPTIONS) -lgmp -lpthread -lntl -lm
-+LIBS2 = -L$(FLINT_GMP_LIB_DIR) -L$(FLINT_NTL_LIB_DIR) $(FLINT_LINK_OPTIONS) -lgmp -lpthread -lntl -lm -lstdc++
-
- ifndef FLINT_NTL_INCLUDE_DIR
- INCS = -I$(FLINT_GMP_INCLUDE_DIR)
-@@ -62,6 +62,7 @@
- profiler.h \
- test-support.h \
- long_extras.h \
-+ NTL-interface.h \
- zmod_poly.h \
- theta.h \
- zmod_mat.h \
-@@ -100,6 +101,7 @@
- mpz_poly.o \
- ZmodF_poly.o \
- long_extras.o \
-+ NTL-interface.o \
- zmod_poly.o \
- theta.o \
- zmod_mat.o \
diff --git a/debian/patches/flint-s390.patch b/debian/patches/flint-s390.patch
deleted file mode 100644
index f0f92d2..0000000
--- a/debian/patches/flint-s390.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: flint-1.011/longlong.h
-===================================================================
---- flint-1.011.orig/longlong.h 2008-09-23 21:15:19.000000000 -0400
-+++ flint-1.011/longlong.h 2008-09-23 21:15:58.000000000 -0400
-@@ -1774,6 +1774,7 @@
- /* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through
- __udiv_w_sdiv (defined in libgcc or elsewhere). */
- #if !defined (udiv_qrnnd) && defined (sdiv_qrnnd)
-+extern mp_limb_t __MPN(udiv_w_sdiv)(mp_limb_t * rp, mp_limb_t a1, mp_limb_t a0, mp_limb_t d);
- #define udiv_qrnnd(q, r, nh, nl, d) \
- do { \
- UWtype __r; \
diff --git a/debian/patches/flint-soname.patch b/debian/patches/flint-soname.patch
deleted file mode 100644
index f4ea4c2..0000000
--- a/debian/patches/flint-soname.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: flint-1.06/makefile
-===================================================================
---- flint-1.06.orig/makefile 2008-05-30 00:32:38.000000000 -0400
-+++ flint-1.06/makefile 2008-05-30 00:33:03.000000000 -0400
-@@ -89,7 +89,8 @@
- $(CC) -fPIC -shared -o libflint.dll $(FLINTOBJ) $(LIBS)
-
- libflint.so: $(FLINTOBJ)
-- $(CC) -fPIC -shared -o libflint.so $(FLINTOBJ) $(LIBS)
-+ $(CC) -fPIC -shared -Wl,-soname,lib`cat DIRNAME`.so -o lib`cat DIRNAME`.so $(FLINTOBJ) $(LIBS2)
-+ ln -fs lib`cat DIRNAME`.so libflint.so
-
- mpn_extras.o: mpn_extras.c $(HEADERS)
- $(CC) $(CFLAGS) -c mpn_extras.c -o mpn_extras.o
-Index: flint-1.06/DIRNAME
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ flint-1.06/DIRNAME 2008-05-30 00:33:20.000000000 -0400
-@@ -0,0 +1 @@
-+flint-1.52
diff --git a/debian/patches/series b/debian/patches/series
index 62578db..541c5b5 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,5 +1 @@
-#flint-s390.patch
-#flint-soname.patch
-#flint-clean.patch
-#flint-ntl-interface.patch
-#zn_poly_include.patch
+0001-backport-gmp-support-from-flint-git.patch
diff --git a/debian/patches/zn_poly_include.patch b/debian/patches/zn_poly_include.patch
deleted file mode 100644
index ab4823f..0000000
--- a/debian/patches/zn_poly_include.patch
+++ /dev/null
@@ -1,66 +0,0 @@
---- a/F_mpz.c
-+++ b/F_mpz.c
-@@ -37,7 +37,7 @@
- #include "long_extras.h"
- #include "F_mpz.h"
- #include "mpz_extras.h"
--#include "zn_poly/src/zn_poly.h"
-+#include "zn_poly/zn_poly.h"
-
- /*===============================================================================
-
---- a/F_mpz.h
-+++ b/F_mpz.h
-@@ -35,7 +35,7 @@
- #include <gmp.h>
- #include "flint.h"
- #include "mpn_extras.h"
--#include "zn_poly/src/zn_poly.h"
-+#include "zn_poly/zn_poly.h"
-
- /*
- F_mpz_t type
---- a/fmpz.c
-+++ b/fmpz.c
-@@ -37,7 +37,7 @@
- #include "mpn_extras.h"
- #include "F_mpn_mul-tuning.h"
- #include "long_extras.h"
--#include "zn_poly/src/zn_poly.h"
-+#include "zn_poly/zn_poly.h"
-
- #define SWAP_PTRS(x_dummy_p, y_dummy_p) \
- do { \
---- a/fmpz.h
-+++ b/fmpz.h
-@@ -36,7 +36,7 @@
- #include "memory-manager.h"
- #include "flint.h"
- #include "long_extras.h"
--#include "zn_poly/src/zn_poly.h"
-+#include "zn_poly/zn_poly.h"
-
- typedef mp_limb_t * fmpz_t;
-
---- a/fmpz_poly.c
-+++ b/fmpz_poly.c
-@@ -43,7 +43,7 @@
- #include "ZmodF_poly.h"
- #include "long_extras.h"
- #include "zmod_poly.h"
--#include "zn_poly/src/zn_poly.h"
-+#include "zn_poly/zn_poly.h"
-
- /****************************************************************************
-
---- a/zmod_poly.h
-+++ b/zmod_poly.h
-@@ -38,7 +38,7 @@
- #include "memory-manager.h"
- #include "mpn_extras.h"
- #include "long_extras.h"
--#include "zn_poly/src/zn_poly.h"
-+#include "zn_poly/zn_poly.h"
-
- #ifndef _ZMOD_POLY_H_
- #define _ZMOD_POLY_H_
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/flint.git
More information about the debian-science-commits
mailing list