diff options
author | Dima Dorfman <dd@FreeBSD.org> | 2001-08-10 18:41:56 +0000 |
---|---|---|
committer | Dima Dorfman <dd@FreeBSD.org> | 2001-08-10 18:41:56 +0000 |
commit | c2d566eb364230b3056f2b4b03ac0f8e0c9f5c0f (patch) | |
tree | 26bd4d6e735c94aac9e035c64de2329a1358dc72 /contrib/libgmp/mpz | |
parent | 3ec77b1f25fc8600e75a3d72e4ace0752c90ad41 (diff) | |
download | src-c2d566eb364230b3056f2b4b03ac0f8e0c9f5c0f.tar.gz src-c2d566eb364230b3056f2b4b03ac0f8e0c9f5c0f.zip |
libgmp has been superseded by libmp.
Notes
Notes:
svn path=/head/; revision=81468
Diffstat (limited to 'contrib/libgmp/mpz')
112 files changed, 0 insertions, 9801 deletions
diff --git a/contrib/libgmp/mpz/Makefile.in b/contrib/libgmp/mpz/Makefile.in deleted file mode 100644 index 497f09ca8ec4..000000000000 --- a/contrib/libgmp/mpz/Makefile.in +++ /dev/null @@ -1,180 +0,0 @@ -# Makefile for GNU MP/mpz functions -# Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -# This file is part of the GNU MP Library. - -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Library General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. - -# The GNU MP Library 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 Library General Public -# License for more details. - -# You should have received a copy of the GNU Library General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -srcdir = . - -CC = gcc - -# If you cross compile on a machine with the same sizes of the integral -# types ("int", "long int", "short int", and "char") define this as the -# local compiler. Otherwise, you need to look for the uses of LOCAL_CC below, -# and handle those cases manually. -LOCAL_CC = $(CC) -CFLAGS = -g -O -AR = ar -AR_FLAGS = rc -SHELL = /bin/sh - -#### host and target specific makefile fragments come in here. -### - -MPZ_SRCS = init.c set.c set_ui.c set_si.c set_str.c set_d.c set_f.c set_q.c \ - iset.c iset_ui.c iset_si.c iset_str.c iset_d.c clear.c \ - get_ui.c get_si.c get_str.c get_d.c size.c sizeinbase.c \ - add.c add_ui.c sub.c sub_ui.c mul.c mul_ui.c \ - gcd.c gcd_ui.c gcdext.c sqrt.c sqrtrem.c powm.c powm_ui.c \ - cmp.c cmp_ui.c cmp_si.c mul_2exp.c fdiv_q_2exp.c fdiv_r_2exp.c \ - tdiv_q_2exp.c tdiv_r_2exp.c abs.c neg.c com.c and.c ior.c \ - inp_raw.c inp_str.c out_raw.c out_str.c \ - perfsqr.c random.c random2.c pow_ui.c ui_pow_ui.c setbit.c \ - clrbit.c fac_ui.c pprime_p.c realloc.c getlimbn.c popcount.c hamdist.c \ - cdiv_qr.c cdiv_q.c cdiv_r.c cdiv_qr_ui.c cdiv_q_ui.c cdiv_r_ui.c cdiv_ui.c \ - fdiv_qr.c fdiv_q.c fdiv_r.c fdiv_qr_ui.c fdiv_q_ui.c fdiv_r_ui.c fdiv_ui.c \ - tdiv_qr.c tdiv_q.c tdiv_r.c tdiv_qr_ui.c tdiv_q_ui.c tdiv_r_ui.c \ - mod.c divexact.c array_init.c scan0.c scan1.c \ - jacobi.c legendre.c invert.c -MPZ_OBJS = init.o set.o set_ui.o set_si.o set_str.o set_d.o set_f.o set_q.o \ - iset.o iset_ui.o iset_si.o iset_str.o iset_d.o clear.o \ - get_ui.o get_si.o get_str.o get_d.o size.o sizeinbase.o \ - add.o add_ui.o sub.o sub_ui.o mul.o mul_ui.o \ - gcd.o gcd_ui.o gcdext.o sqrt.o sqrtrem.o powm.o powm_ui.o \ - cmp.o cmp_ui.o cmp_si.o mul_2exp.o fdiv_q_2exp.o fdiv_r_2exp.o \ - tdiv_q_2exp.o tdiv_r_2exp.o abs.o neg.o com.o and.o ior.o \ - inp_raw.o inp_str.o out_raw.o out_str.o \ - perfsqr.o random.o random2.o pow_ui.o ui_pow_ui.o setbit.o \ - clrbit.o fac_ui.o pprime_p.o realloc.o getlimbn.o popcount.o hamdist.o \ - cdiv_qr.o cdiv_q.o cdiv_r.o cdiv_qr_ui.o cdiv_q_ui.o cdiv_r_ui.o cdiv_ui.o \ - fdiv_qr.o fdiv_q.o fdiv_r.o fdiv_qr_ui.o fdiv_q_ui.o fdiv_r_ui.o fdiv_ui.o \ - tdiv_qr.o tdiv_q.o tdiv_r.o tdiv_qr_ui.o tdiv_q_ui.o tdiv_r_ui.o \ - mod.o divexact.o array_init.o scan0.o scan1.o \ - jacobi.o legendre.o invert.o - -INCLUDES = -I. -I.. -I../mpn -I$(srcdir)/.. - -libmpz.a: Makefile $(MPZ_OBJS) - rm -f $@ - $(AR) $(AR_FLAGS) $@ $(MPZ_OBJS) - -.c.o: - $(CC) -c $(INCLUDES) $(CFLAGS) $(XCFLAGS) $< - -clean mostlyclean: - rm -f *.o libmpz.a - -cd tests; $(MAKE) $@ -distclean maintainer-clean: clean - rm -f Makefile config.status - -cd tests; $(MAKE) $@ - -Makefile: $(srcdir)/Makefile.in - $(SHELL) ./config.status - -H = $(srcdir)/../gmp.h $(srcdir)/../gmp-impl.h ../mpn/gmp-mparam.h - -abs.o: $(srcdir)/abs.c $(H) -add.o: $(srcdir)/add.c $(H) -add_ui.o: $(srcdir)/add_ui.c $(H) -and.o: $(srcdir)/and.c $(H) -array_init.o: $(srcdir)/array_init.c $(H) -cdiv_q.o: $(srcdir)/cdiv_q.c $(H) -cdiv_q_ui.o: $(srcdir)/cdiv_q_ui.c $(H) -cdiv_qr.o: $(srcdir)/cdiv_qr.c $(H) -cdiv_qr_ui.o: $(srcdir)/cdiv_qr_ui.c $(H) -cdiv_r.o: $(srcdir)/cdiv_r.c $(H) -cdiv_r_ui.o: $(srcdir)/cdiv_r_ui.c $(H) -cdiv_ui.o: $(srcdir)/cdiv_ui.c $(H) -clear.o: $(srcdir)/clear.c $(H) -clrbit.o: $(srcdir)/clrbit.c $(H) -cmp.o: $(srcdir)/cmp.c $(H) -cmp_si.o: $(srcdir)/cmp_si.c $(H) -cmp_ui.o: $(srcdir)/cmp_ui.c $(H) -com.o: $(srcdir)/com.c $(H) -fdiv_q_2exp.o: $(srcdir)/fdiv_q_2exp.c $(H) -fdiv_r_2exp.o: $(srcdir)/fdiv_r_2exp.c $(H) -divexact.o: $(srcdir)/divexact.c $(H) $(srcdir)/../longlong.h -fac_ui.o: $(srcdir)/fac_ui.c $(H) $(srcdir)/../longlong.h -fdiv_q.o: $(srcdir)/fdiv_q.c $(H) -fdiv_q_ui.o: $(srcdir)/fdiv_q_ui.c $(H) -fdiv_qr.o: $(srcdir)/fdiv_qr.c $(H) -fdiv_qr_ui.o: $(srcdir)/fdiv_qr_ui.c $(H) -fdiv_r.o: $(srcdir)/fdiv_r.c $(H) -fdiv_r_ui.o: $(srcdir)/fdiv_r_ui.c $(H) -fdiv_ui.o: $(srcdir)/fdiv_ui.c $(H) -gcd.o: $(srcdir)/gcd.c $(H) $(srcdir)/../longlong.h -gcd_ui.o: $(srcdir)/gcd_ui.c $(H) -gcdext.o: $(srcdir)/gcdext.c $(H) -get_d.o: $(srcdir)/get_d.c $(H) -get_si.o: $(srcdir)/get_si.c $(H) -get_str.o: $(srcdir)/get_str.c $(H) -get_ui.o: $(srcdir)/get_ui.c $(H) -getlimbn.o: $(srcdir)/getlimbn.c $(H) -hamdist.o: $(srcdir)/hamdist.c $(H) -init.o: $(srcdir)/init.c $(H) -inp_raw.o: $(srcdir)/inp_raw.c $(H) -inp_str.o: $(srcdir)/inp_str.c $(H) -invert.o: $(srcdir)/invert.c $(H) -ior.o: $(srcdir)/ior.c $(H) -iset.o: $(srcdir)/iset.c $(H) -iset_d.o: $(srcdir)/iset_d.c $(H) -iset_si.o: $(srcdir)/iset_si.c $(H) -iset_str.o: $(srcdir)/iset_str.c $(H) -iset_ui.o: $(srcdir)/iset_ui.c $(H) -jacobi.o: $(srcdir)/jacobi.c $(H) -legendre.o: $(srcdir)/legendre.c $(H) -mod.o: $(srcdir)/mod.c $(H) -tdiv_q_2exp.o: $(srcdir)/tdiv_q_2exp.c $(H) -tdiv_r_2exp.o: $(srcdir)/tdiv_r_2exp.c $(H) -mul.o: $(srcdir)/mul.c $(H) -mul_2exp.o: $(srcdir)/mul_2exp.c $(H) -mul_ui.o: $(srcdir)/mul_ui.c $(H) -neg.o: $(srcdir)/neg.c $(H) -out_raw.o: $(srcdir)/out_raw.c $(H) -out_str.o: $(srcdir)/out_str.c $(H) -perfsqr.o: $(srcdir)/perfsqr.c $(H) -popcount.o: $(srcdir)/popcount.c $(H) -pow_ui.o: $(srcdir)/pow_ui.c $(H) $(srcdir)/../longlong.h -powm.o: $(srcdir)/powm.c $(H) $(srcdir)/../longlong.h -powm_ui.o: $(srcdir)/powm_ui.c $(H) $(srcdir)/../longlong.h -pprime_p.o: $(srcdir)/pprime_p.c $(H) -random.o: $(srcdir)/random.c $(H) $(srcdir)/../urandom.h -random2.o: $(srcdir)/random2.c $(H) -realloc.o: $(srcdir)/realloc.c $(H) -scan0.o: $(srcdir)/scan0.c $(H) -scan1.o: $(srcdir)/scan1.c $(H) -set.o: $(srcdir)/set.c $(H) -set_d.o: $(srcdir)/set_d.c $(H) -set_f.o: $(srcdir)/set_f.c $(H) -set_q.o: $(srcdir)/set_q.c $(H) -set_si.o: $(srcdir)/set_si.c $(H) -set_str.o: $(srcdir)/set_str.c $(H) $(srcdir)/../longlong.h -set_ui.o: $(srcdir)/set_ui.c $(H) -setbit.o: $(srcdir)/setbit.c $(H) -size.o: $(srcdir)/size.c $(H) -sizeinbase.o: $(srcdir)/sizeinbase.c $(H) $(srcdir)/../longlong.h -sqrt.o: $(srcdir)/sqrt.c $(H) -sqrtrem.o: $(srcdir)/sqrtrem.c $(H) -sub.o: $(srcdir)/sub.c $(H) -sub_ui.o: $(srcdir)/sub_ui.c $(H) -tdiv_q.o: $(srcdir)/tdiv_q.c $(H) $(srcdir)/../longlong.h -tdiv_q_ui.o: $(srcdir)/tdiv_q_ui.c $(H) -tdiv_qr.o: $(srcdir)/tdiv_qr.c $(H) $(srcdir)/../longlong.h $(srcdir)/dmincl.c $(H) -tdiv_qr_ui.o: $(srcdir)/tdiv_qr_ui.c $(H) -tdiv_r.o: $(srcdir)/tdiv_r.c $(H) $(srcdir)/../longlong.h $(srcdir)/dmincl.c $(H) -tdiv_r_ui.o: $(srcdir)/tdiv_r_ui.c $(H) -ui_pow_ui.o: $(srcdir)/ui_pow_ui.c $(H) $(srcdir)/../longlong.h diff --git a/contrib/libgmp/mpz/abs.c b/contrib/libgmp/mpz/abs.c deleted file mode 100644 index 080cac60aa25..000000000000 --- a/contrib/libgmp/mpz/abs.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mpz_abs(dst, src) -- Assign the absolute value of SRC to DST. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_abs (mpz_ptr w, mpz_srcptr u) -#else -mpz_abs (w, u) - mpz_ptr w; - mpz_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t size; - - size = ABS (u->_mp_size); - - if (u != w) - { - if (w->_mp_alloc < size) - _mpz_realloc (w, size); - - wp = w->_mp_d; - up = u->_mp_d; - - MPN_COPY (wp, up, size); - } - - w->_mp_size = size; -} diff --git a/contrib/libgmp/mpz/add.c b/contrib/libgmp/mpz/add.c deleted file mode 100644 index 10dd9704c2f4..000000000000 --- a/contrib/libgmp/mpz/add.c +++ /dev/null @@ -1,120 +0,0 @@ -/* mpz_add -- Add two integers. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_add (mpz_ptr w, mpz_srcptr u, mpz_srcptr v) -#else -mpz_add (w, u, v) - mpz_ptr w; - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -madd (mpz_srcptr u, mpz_srcptr v, mpz_ptr w) -#else -madd (u, v, w) - mpz_srcptr u; - mpz_srcptr v; - mpz_ptr w; -#endif -#endif /* BERKELEY_MP */ -{ - mp_srcptr up, vp; - mp_ptr wp; - mp_size_t usize, vsize, wsize; - mp_size_t abs_usize; - mp_size_t abs_vsize; - - usize = u->_mp_size; - vsize = v->_mp_size; - abs_usize = ABS (usize); - abs_vsize = ABS (vsize); - - if (abs_usize < abs_vsize) - { - /* Swap U and V. */ - {const __mpz_struct *t = u; u = v; v = t;} - {mp_size_t t = usize; usize = vsize; vsize = t;} - {mp_size_t t = abs_usize; abs_usize = abs_vsize; abs_vsize = t;} - } - - /* True: ABS_USIZE >= ABS_VSIZE. */ - - /* If not space for w (and possible carry), increase space. */ - wsize = abs_usize + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - /* These must be after realloc (u or v may be the same as w). */ - up = u->_mp_d; - vp = v->_mp_d; - wp = w->_mp_d; - - if ((usize ^ vsize) < 0) - { - /* U and V have different sign. Need to compare them to determine - which operand to subtract from which. */ - - /* This test is right since ABS_USIZE >= ABS_VSIZE. */ - if (abs_usize != abs_vsize) - { - mpn_sub (wp, up, abs_usize, vp, abs_vsize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize < 0) - wsize = -wsize; - } - else if (mpn_cmp (up, vp, abs_usize) < 0) - { - mpn_sub_n (wp, vp, up, abs_usize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize >= 0) - wsize = -wsize; - } - else - { - mpn_sub_n (wp, up, vp, abs_usize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize < 0) - wsize = -wsize; - } - } - else - { - /* U and V have same sign. Add them. */ - mp_limb_t cy_limb = mpn_add (wp, up, abs_usize, vp, abs_vsize); - wp[abs_usize] = cy_limb; - wsize = abs_usize + cy_limb; - if (usize < 0) - wsize = -wsize; - } - - w->_mp_size = wsize; -} diff --git a/contrib/libgmp/mpz/add_ui.c b/contrib/libgmp/mpz/add_ui.c deleted file mode 100644 index a1e430631970..000000000000 --- a/contrib/libgmp/mpz/add_ui.c +++ /dev/null @@ -1,84 +0,0 @@ -/* mpz_add_ui -- Add an mpz_t and an unsigned one-word integer. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_add_ui (mpz_ptr w, mpz_srcptr u, unsigned long int v) -#else -mpz_add_ui (w, u, v) - mpz_ptr w; - mpz_srcptr u; - unsigned long int v; -#endif -{ - mp_srcptr up; - mp_ptr wp; - mp_size_t usize, wsize; - mp_size_t abs_usize; - - usize = u->_mp_size; - abs_usize = ABS (usize); - - /* If not space for W (and possible carry), increase space. */ - wsize = abs_usize + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - /* These must be after realloc (U may be the same as W). */ - up = u->_mp_d; - wp = w->_mp_d; - - if (abs_usize == 0) - { - wp[0] = v; - w->_mp_size = v != 0; - return; - } - - if (usize >= 0) - { - mp_limb_t cy; - cy = mpn_add_1 (wp, up, abs_usize, v); - wp[abs_usize] = cy; - wsize = abs_usize + cy; - } - else - { - /* The signs are different. Need exact comparison to determine - which operand to subtract from which. */ - if (abs_usize == 1 && up[0] < v) - { - wp[0] = v - up[0]; - wsize = 1; - } - else - { - mpn_sub_1 (wp, up, abs_usize, v); - /* Size can decrease with at most one limb. */ - wsize = -(abs_usize - (wp[abs_usize - 1] == 0)); - } - } - - w->_mp_size = wsize; -} diff --git a/contrib/libgmp/mpz/and.c b/contrib/libgmp/mpz/and.c deleted file mode 100644 index 838d4b1db16f..000000000000 --- a/contrib/libgmp/mpz/and.c +++ /dev/null @@ -1,278 +0,0 @@ -/* mpz_and -- Logical and. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_and (mpz_ptr res, mpz_srcptr op1, mpz_srcptr op2) -#else -mpz_and (res, op1, op2) - mpz_ptr res; - mpz_srcptr op1; - mpz_srcptr op2; -#endif -{ - mp_srcptr op1_ptr, op2_ptr; - mp_size_t op1_size, op2_size; - mp_ptr res_ptr; - mp_size_t res_size; - mp_size_t i; - TMP_DECL (marker); - - TMP_MARK (marker); - op1_size = op1->_mp_size; - op2_size = op2->_mp_size; - - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - - if (op1_size >= 0) - { - if (op2_size >= 0) - { - res_size = MIN (op1_size, op2_size); - /* First loop finds the size of the result. */ - for (i = res_size - 1; i >= 0; i--) - if ((op1_ptr[i] & op2_ptr[i]) != 0) - break; - res_size = i + 1; - - /* Handle allocation, now then we know exactly how much space is - needed for the result. */ - if (res->_mp_alloc < res_size) - { - _mpz_realloc (res, res_size); - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - } - - /* Second loop computes the real result. */ - for (i = res_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] & op2_ptr[i]; - - res->_mp_size = res_size; - return; - } - else /* op2_size < 0 */ - { - /* Fall through to the code at the end of the function. */ - } - } - else - { - if (op2_size < 0) - { - mp_ptr opx; - mp_limb_t cy; - mp_size_t res_alloc; - - /* Both operands are negative, so will be the result. - -((-OP1) & (-OP2)) = -(~(OP1 - 1) & ~(OP2 - 1)) = - = ~(~(OP1 - 1) & ~(OP2 - 1)) + 1 = - = ((OP1 - 1) | (OP2 - 1)) + 1 */ - - /* It might seem as we could end up with an (invalid) result with - a leading zero-limb here when one of the operands is of the - type 1,,0,,..,,.0. But some analysis shows that we surely - would get carry into the zero-limb in this situation... */ - - op1_size = -op1_size; - op2_size = -op2_size; - - res_alloc = 1 + MAX (op1_size, op2_size); - - opx = (mp_ptr) TMP_ALLOC (op1_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op1_ptr, op1_size, (mp_limb_t) 1); - op1_ptr = opx; - - opx = (mp_ptr) TMP_ALLOC (op2_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, op2_size, (mp_limb_t) 1); - op2_ptr = opx; - - if (res->_mp_alloc < res_alloc) - { - _mpz_realloc (res, res_alloc); - res_ptr = res->_mp_d; - /* Don't re-read OP1_PTR and OP2_PTR. They point to - temporary space--never to the space RES->_mp_D used - to point to before reallocation. */ - } - - if (op1_size >= op2_size) - { - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, - op1_size - op2_size); - for (i = op2_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] | op2_ptr[i]; - res_size = op1_size; - } - else - { - MPN_COPY (res_ptr + op1_size, op2_ptr + op1_size, - op2_size - op1_size); - for (i = op1_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] | op2_ptr[i]; - res_size = op2_size; - } - - cy = mpn_add_1 (res_ptr, res_ptr, res_size, (mp_limb_t) 1); - if (cy) - { - res_ptr[res_size] = cy; - res_size++; - } - - res->_mp_size = -res_size; - TMP_FREE (marker); - return; - } - else - { - /* We should compute -OP1 & OP2. Swap OP1 and OP2 and fall - through to the code that handles OP1 & -OP2. */ - {mpz_srcptr t = op1; op1 = op2; op2 = t;} - {mp_srcptr t = op1_ptr; op1_ptr = op2_ptr; op2_ptr = t;} - {mp_size_t t = op1_size; op1_size = op2_size; op2_size = t;} - } - - } - - { -#if ANDNEW - mp_size_t op2_lim; - mp_size_t count; - - /* OP2 must be negated as with infinite precision. - - Scan from the low end for a non-zero limb. The first non-zero - limb is simply negated (two's complement). Any subsequent - limbs are one's complemented. Of course, we don't need to - handle more limbs than there are limbs in the other, positive - operand as the result for those limbs is going to become zero - anyway. */ - - /* Scan for the least significant. non-zero OP2 limb, and zero the - result meanwhile for those limb positions. (We will surely - find a non-zero limb, so we can write the loop with one - termination condition only.) */ - for (i = 0; op2_ptr[i] == 0; i++) - res_ptr[i] = 0; - op2_lim = i; - - op2_size = -op2_size; - - if (op1_size <= op2_size) - { - /* The ones-extended OP2 is >= than the zero-extended OP1. - RES_SIZE <= OP1_SIZE. Find the exact size. */ - for (i = op1_size - 1; i > op2_lim; i--) - if ((op1_ptr[i] & ~op2_ptr[i]) != 0) - break; - res_size = i + 1; - for (i = res_size - 1; i > op2_lim; i--) - res_ptr[i] = op1_ptr[i] & ~op2_ptr[i]; - res_ptr[op2_lim] = op1_ptr[op2_lim] & -op2_ptr[op2_lim]; - /* Yes, this *can* happen! */ - MPN_NORMALIZE (res_ptr, res_size); - } - else - { - /* The ones-extended OP2 is < than the zero-extended OP1. - RES_SIZE == OP1_SIZE, since OP1 is normalized. */ - res_size = op1_size; - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, op1_size - op2_size); - for (i = op2_size - 1; i > op2_lim; i--) - res_ptr[i] = op1_ptr[i] & ~op2_ptr[i]; - res_ptr[op2_lim] = op1_ptr[op2_lim] & -op2_ptr[op2_lim]; - } - - res->_mp_size = res_size; -#else - - /* OP1 is positive and zero-extended, - OP2 is negative and ones-extended. - The result will be positive. - OP1 & -OP2 = OP1 & ~(OP2 - 1). */ - - mp_ptr opx; - - op2_size = -op2_size; - opx = (mp_ptr) TMP_ALLOC (op2_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, op2_size, (mp_limb_t) 1); - op2_ptr = opx; - - if (op1_size > op2_size) - { - /* The result has the same size as OP1, since OP1 is normalized - and longer than the ones-extended OP2. */ - res_size = op1_size; - - /* Handle allocation, now then we know exactly how much space is - needed for the result. */ - if (res->_mp_alloc < res_size) - { - _mpz_realloc (res, res_size); - res_ptr = res->_mp_d; - op1_ptr = op1->_mp_d; - /* Don't re-read OP2_PTR. It points to temporary space--never - to the space RES->_mp_D used to point to before reallocation. */ - } - - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, - res_size - op2_size); - for (i = op2_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] & ~op2_ptr[i]; - - res->_mp_size = res_size; - } - else - { - /* Find out the exact result size. Ignore the high limbs of OP2, - OP1 is zero-extended and would make the result zero. */ - for (i = op1_size - 1; i >= 0; i--) - if ((op1_ptr[i] & ~op2_ptr[i]) != 0) - break; - res_size = i + 1; - - /* Handle allocation, now then we know exactly how much space is - needed for the result. */ - if (res->_mp_alloc < res_size) - { - _mpz_realloc (res, res_size); - res_ptr = res->_mp_d; - op1_ptr = op1->_mp_d; - /* Don't re-read OP2_PTR. It points to temporary space--never - to the space RES->_mp_D used to point to before reallocation. */ - } - - for (i = res_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] & ~op2_ptr[i]; - - res->_mp_size = res_size; - } -#endif - } - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/array_init.c b/contrib/libgmp/mpz/array_init.c deleted file mode 100644 index 8b2e85c90baf..000000000000 --- a/contrib/libgmp/mpz/array_init.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_array_init (array, array_size, size_per_elem) -- - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_array_init (mpz_ptr arr, mp_size_t arr_size, mp_size_t nbits) -#else -mpz_array_init (arr, arr_size, nbits) - mpz_ptr arr; - mp_size_t arr_size; - mp_size_t nbits; -#endif -{ - register mp_ptr p; - register size_t i; - mp_size_t nlimbs; - - nlimbs = (nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB; - p = (mp_ptr) (*_mp_allocate_func) (arr_size * nlimbs * BYTES_PER_MP_LIMB); - - for (i = 0; i < arr_size; i++) - { - arr[i]._mp_alloc = nlimbs + 1; /* Yes, lie a little... */ - arr[i]._mp_size = 0; - arr[i]._mp_d = p + i * nlimbs; - } -} diff --git a/contrib/libgmp/mpz/cdiv_q.c b/contrib/libgmp/mpz/cdiv_q.c deleted file mode 100644 index 860a232f0535..000000000000 --- a/contrib/libgmp/mpz/cdiv_q.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mpz_cdiv_q -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_cdiv_q (mpz_ptr quot, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_cdiv_q (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t dividend_size = dividend->_mp_size; - mp_size_t divisor_size = divisor->_mp_size; - mpz_t rem; - TMP_DECL (marker); - - TMP_MARK (marker); - - MPZ_TMP_INIT (rem, 1 + ABS (dividend_size)); - - mpz_tdiv_qr (quot, rem, dividend, divisor); - - if ((divisor_size ^ dividend_size) >= 0 && rem->_mp_size != 0) - mpz_add_ui (quot, quot, 1L); - - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/cdiv_q_ui.c b/contrib/libgmp/mpz/cdiv_q_ui.c deleted file mode 100644 index 7b6cfd7af8e4..000000000000 --- a/contrib/libgmp/mpz/cdiv_q_ui.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_cdiv_q_ui -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. In order to make it - always fit into the return type, the negative of the true remainder is - returned. - -Copyright (C) 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_cdiv_q_ui (mpz_ptr quot, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_cdiv_q_ui (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size >= 0) - { - mpn_add_1 (quot_ptr, quot_ptr, size, (mp_limb_t) 1); - remainder_limb = divisor - remainder_limb; - } - - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - return remainder_limb; -} diff --git a/contrib/libgmp/mpz/cdiv_qr.c b/contrib/libgmp/mpz/cdiv_qr.c deleted file mode 100644 index bf7d6dacb1f2..000000000000 --- a/contrib/libgmp/mpz/cdiv_qr.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpz_cdiv_qr -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_cdiv_qr (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_cdiv_qr (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the quotient and - remainder have been preliminary calculated. We have to copy it to - temporary space if it's the same variable as either QUOT or REM. */ - if (quot == divisor || rem == divisor) - { - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - mpz_tdiv_qr (quot, rem, dividend, divisor); - - if ((divisor_size ^ dividend->_mp_size) >= 0 && rem->_mp_size != 0) - { - mpz_add_ui (quot, quot, 1L); - mpz_sub (rem, rem, divisor); - } - - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/cdiv_qr_ui.c b/contrib/libgmp/mpz/cdiv_qr_ui.c deleted file mode 100644 index a780e772ecd0..000000000000 --- a/contrib/libgmp/mpz/cdiv_qr_ui.c +++ /dev/null @@ -1,68 +0,0 @@ -/* mpz_cdiv_qr_ui -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. In order to make it - always fit into the return type, the negative of the true remainder is - returned. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_cdiv_qr_ui (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_cdiv_qr_ui (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size >= 0) - { - mpn_add_1 (quot_ptr, quot_ptr, size, (mp_limb_t) 1); - remainder_limb = divisor - remainder_limb; - } - - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - rem->_mp_d[0] = remainder_limb; - rem->_mp_size = -(remainder_limb != 0); - - return remainder_limb; -} diff --git a/contrib/libgmp/mpz/cdiv_r.c b/contrib/libgmp/mpz/cdiv_r.c deleted file mode 100644 index d34d138ce786..000000000000 --- a/contrib/libgmp/mpz/cdiv_r.c +++ /dev/null @@ -1,59 +0,0 @@ -/* mpz_cdiv_r -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_cdiv_r (mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_cdiv_r (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the remainder has been - preliminary calculated. We have to copy it to temporary space if it's - the same variable as REM. */ - if (rem == divisor) - { - - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - mpz_tdiv_r (rem, dividend, divisor); - - if ((divisor_size ^ dividend->_mp_size) >= 0 && rem->_mp_size != 0) - mpz_sub (rem, rem, divisor); - - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/cdiv_r_ui.c b/contrib/libgmp/mpz/cdiv_r_ui.c deleted file mode 100644 index 757a3f5f7ba4..000000000000 --- a/contrib/libgmp/mpz/cdiv_r_ui.c +++ /dev/null @@ -1,54 +0,0 @@ -/* mpz_cdiv_r_ui -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. In order to make it - always fit into the return type, the negative of the true remainder is - returned. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_cdiv_r_ui (mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_cdiv_r_ui (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size >= 0) - remainder_limb = divisor - remainder_limb; - - rem->_mp_d[0] = remainder_limb; - rem->_mp_size = -(remainder_limb != 0); - - return remainder_limb; -} diff --git a/contrib/libgmp/mpz/cdiv_ui.c b/contrib/libgmp/mpz/cdiv_ui.c deleted file mode 100644 index df841ede8851..000000000000 --- a/contrib/libgmp/mpz/cdiv_ui.c +++ /dev/null @@ -1,50 +0,0 @@ -/* mpz_cdiv_ui -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. In order to make it - always fit into the return type, the negative of the true remainder is - returned. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_cdiv_ui (mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_cdiv_ui (dividend, divisor) - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size >= 0) - remainder_limb = divisor - remainder_limb; - - return remainder_limb; -} diff --git a/contrib/libgmp/mpz/clear.c b/contrib/libgmp/mpz/clear.c deleted file mode 100644 index 00f3cfdc62ec..000000000000 --- a/contrib/libgmp/mpz/clear.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpz_clear -- de-allocate the space occupied by the dynamic digit space of - an integer. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_clear (mpz_ptr m) -#else -mpz_clear (m) - mpz_ptr m; -#endif -{ - (*_mp_free_func) (m->_mp_d, m->_mp_alloc * BYTES_PER_MP_LIMB); -} diff --git a/contrib/libgmp/mpz/clrbit.c b/contrib/libgmp/mpz/clrbit.c deleted file mode 100644 index 59d956535831..000000000000 --- a/contrib/libgmp/mpz/clrbit.c +++ /dev/null @@ -1,114 +0,0 @@ -/* mpz_clrbit -- clear a specified bit. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_clrbit (mpz_ptr d, unsigned long int bit_index) -#else -mpz_clrbit (d, bit_index) - mpz_ptr d; - unsigned long int bit_index; -#endif -{ - mp_size_t dsize = d->_mp_size; - mp_ptr dp = d->_mp_d; - mp_size_t limb_index; - - limb_index = bit_index / BITS_PER_MP_LIMB; - if (dsize >= 0) - { - if (limb_index < dsize) - { - dp[limb_index] &= ~((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB)); - MPN_NORMALIZE (dp, dsize); - d->_mp_size = dsize; - } - else - ; - } - else - { - mp_size_t zero_bound; - - /* Simulate two's complement arithmetic, i.e. simulate - 1. Set OP = ~(OP - 1) [with infinitely many leading ones]. - 2. clear the bit. - 3. Set OP = ~OP + 1. */ - - dsize = -dsize; - - /* No upper bound on this loop, we're sure there's a non-zero limb - sooner ot later. */ - for (zero_bound = 0; ; zero_bound++) - if (dp[zero_bound] != 0) - break; - - if (limb_index > zero_bound) - { - if (limb_index < dsize) - dp[limb_index] |= (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB); - else - { - /* Ugh. The bit should be cleared outside of the end of the - number. We have to increase the size of the number. */ - if (d->_mp_alloc < limb_index + 1) - { - _mpz_realloc (d, limb_index + 1); - dp = d->_mp_d; - } - MPN_ZERO (dp + dsize, limb_index - dsize); - dp[limb_index] = (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB); - d->_mp_size = -(limb_index + 1); - } - } - else if (limb_index == zero_bound) - { - dp[limb_index] = ((dp[limb_index] - 1) - | ((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB))) + 1; - if (dp[limb_index] == 0) - { - mp_size_t i; - for (i = limb_index + 1; i < dsize; i++) - { - dp[i] += 1; - if (dp[i] != 0) - goto fin; - } - /* We got carry all way out beyond the end of D. Increase - its size (and allocation if necessary). */ - dsize++; - if (d->_mp_alloc < dsize) - { - _mpz_realloc (d, dsize); - dp = d->_mp_d; - } - dp[i] = 1; - d->_mp_size = -dsize; - fin:; - } - } - else - ; - } -} diff --git a/contrib/libgmp/mpz/cmp.c b/contrib/libgmp/mpz/cmp.c deleted file mode 100644 index 37be3349a6a1..000000000000 --- a/contrib/libgmp/mpz/cmp.c +++ /dev/null @@ -1,75 +0,0 @@ -/* mpz_cmp(u,v) -- Compare U, V. Return postive, zero, or negative - based on if U > V, U == V, or U < V. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#ifdef BERKELEY_MP -#include "mp.h" -#endif -#include "gmp.h" -#include "gmp-impl.h" - -#ifndef BERKELEY_MP -int -#if __STDC__ -mpz_cmp (mpz_srcptr u, mpz_srcptr v) -#else -mpz_cmp (u, v) - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -int -#if __STDC__ -mcmp (mpz_srcptr u, mpz_srcptr v) -#else -mcmp (u, v) - mpz_srcptr u; - mpz_srcptr v; -#endif -#endif /* BERKELEY_MP */ -{ - mp_size_t usize = u->_mp_size; - mp_size_t vsize = v->_mp_size; - mp_size_t size; - mp_srcptr up, vp; - int cmp; - - if (usize != vsize) - return usize - vsize; - - if (usize == 0) - return 0; - - size = ABS (usize); - - up = u->_mp_d; - vp = v->_mp_d; - - cmp = mpn_cmp (up, vp, size); - - if (cmp == 0) - return 0; - - if ((cmp < 0) == (usize < 0)) - return 1; - else - return -1; -} diff --git a/contrib/libgmp/mpz/cmp_si.c b/contrib/libgmp/mpz/cmp_si.c deleted file mode 100644 index 8063fd386e34..000000000000 --- a/contrib/libgmp/mpz/cmp_si.c +++ /dev/null @@ -1,66 +0,0 @@ -/* mpz_cmp_si(u,v) -- Compare an integer U with a single-word int V. - Return positive, zero, or negative based on if U > V, U == V, or U < V. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* gmp.h defines a macro for mpz_cmp_si. */ -#undef mpz_cmp_si - -int -#if __STDC__ -mpz_cmp_si (mpz_srcptr u, signed long int v_digit) -#else -mpz_cmp_si (u, v_digit) - mpz_srcptr u; - signed long int v_digit; -#endif -{ - mp_size_t usize = u->_mp_size; - mp_size_t vsize; - mp_limb_t u_digit; - - vsize = 0; - if (v_digit > 0) - vsize = 1; - else if (v_digit < 0) - { - vsize = -1; - v_digit = -v_digit; - } - - if (usize != vsize) - return usize - vsize; - - if (usize == 0) - return 0; - - u_digit = u->_mp_d[0]; - - if (u_digit == v_digit) - return 0; - - if (u_digit > v_digit) - return usize; - else - return -usize; -} diff --git a/contrib/libgmp/mpz/cmp_ui.c b/contrib/libgmp/mpz/cmp_ui.c deleted file mode 100644 index 1a50b96e1ac9..000000000000 --- a/contrib/libgmp/mpz/cmp_ui.c +++ /dev/null @@ -1,56 +0,0 @@ -/* mpz_cmp_ui.c -- Compare a mpz_t a with an mp_limb_t b. Return positive, - zero, or negative based on if a > b, a == b, or a < b. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* gmp.h defines a macro for mpz_cmp_ui. */ -#undef mpz_cmp_ui - -int -#if __STDC__ -mpz_cmp_ui (mpz_srcptr u, unsigned long int v_digit) -#else -mpz_cmp_ui (u, v_digit) - mpz_srcptr u; - unsigned long int v_digit; -#endif -{ - mp_size_t usize = u->_mp_size; - - if (usize == 0) - return -(v_digit != 0); - - if (usize == 1) - { - mp_limb_t u_digit; - - u_digit = u->_mp_d[0]; - if (u_digit > v_digit) - return 1; - if (u_digit < v_digit) - return -1; - return 0; - } - - return (usize > 0) ? 1 : -1; -} diff --git a/contrib/libgmp/mpz/com.c b/contrib/libgmp/mpz/com.c deleted file mode 100644 index 559f2b6b2b03..000000000000 --- a/contrib/libgmp/mpz/com.c +++ /dev/null @@ -1,93 +0,0 @@ -/* mpz_com(mpz_ptr dst, mpz_ptr src) -- Assign the bit-complemented value of - SRC to DST. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_com (mpz_ptr dst, mpz_srcptr src) -#else -mpz_com (dst, src) - mpz_ptr dst; - mpz_srcptr src; -#endif -{ - mp_size_t size = src->_mp_size; - mp_srcptr src_ptr; - mp_ptr dst_ptr; - - if (size >= 0) - { - /* As with infinite precision: one's complement, two's complement. - But this can be simplified using the identity -x = ~x + 1. - So we're going to compute (~~x) + 1 = x + 1! */ - - if (dst->_mp_alloc < size + 1) - _mpz_realloc (dst, size + 1); - - src_ptr = src->_mp_d; - dst_ptr = dst->_mp_d; - - if (size == 0) - { - /* Special case, as mpn_add wants the first arg's size >= the - second arg's size. */ - dst_ptr[0] = 1; - dst->_mp_size = -1; - return; - } - - { - mp_limb_t cy; - - cy = mpn_add_1 (dst_ptr, src_ptr, size, (mp_limb_t) 1); - if (cy) - { - dst_ptr[size] = cy; - size++; - } - } - - /* Store a negative size, to indicate ones-extension. */ - dst->_mp_size = -size; - } - else - { - /* As with infinite precision: two's complement, then one's complement. - But that can be simplified using the identity -x = ~(x - 1). - So we're going to compute ~~(x - 1) = x - 1! */ - size = -size; - - if (dst->_mp_alloc < size) - _mpz_realloc (dst, size); - - src_ptr = src->_mp_d; - dst_ptr = dst->_mp_d; - - mpn_sub_1 (dst_ptr, src_ptr, size, (mp_limb_t) 1); - size -= dst_ptr[size - 1] == 0; - - /* Store a positive size, to indicate zero-extension. */ - dst->_mp_size = size; - } -} diff --git a/contrib/libgmp/mpz/configure.in b/contrib/libgmp/mpz/configure.in deleted file mode 100644 index ed84461c1d2d..000000000000 --- a/contrib/libgmp/mpz/configure.in +++ /dev/null @@ -1,12 +0,0 @@ -# This file is a shell script fragment that supplies the information -# necessary for a configure script to process the program in -# this directory. For more information, look at ../configure. - -configdirs=tests -srctrigger=add_ui.c -srcname="GNU Multi-Precision library/mpz" - -# per-host: - -# per-target: - diff --git a/contrib/libgmp/mpz/divexact.c b/contrib/libgmp/mpz/divexact.c deleted file mode 100644 index b8974480468c..000000000000 --- a/contrib/libgmp/mpz/divexact.c +++ /dev/null @@ -1,112 +0,0 @@ -/* mpz_divexact -- finds quotient when known that quot * den == num && den != 0. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* Ken Weber (kweber@mat.ufrgs.br, kweber@mcs.kent.edu) - - Funding for this work has been partially provided by Conselho Nacional - de Desenvolvimento Cienti'fico e Tecnolo'gico (CNPq) do Brazil, Grant - 301314194-2, and was done while I was a visiting reseacher in the Instituto - de Matema'tica at Universidade Federal do Rio Grande do Sul (UFRGS). - - References: - T. Jebelean, An algorithm for exact division, Journal of Symbolic - Computation, v. 15, 1993, pp. 169-180. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_divexact (mpz_ptr quot, mpz_srcptr num, mpz_srcptr den) -#else -mpz_divexact (quot, num, den) - mpz_ptr quot; - mpz_srcptr num; - mpz_srcptr den; -#endif -{ - mp_ptr qp, tp; - mp_size_t qsize, tsize; - - mp_srcptr np = num->_mp_d; - mp_srcptr dp = den->_mp_d; - mp_size_t nsize = ABS (num->_mp_size); - mp_size_t dsize = ABS (den->_mp_size); - TMP_DECL (marker); - - /* Generate divide-by-zero error if dsize == 0. */ - if (dsize == 0) - { - quot->_mp_size = 1 / dsize; - return; - } - - if (nsize == 0) - { - quot->_mp_size = 0; - return; - } - - qsize = nsize - dsize + 1; - if (quot->_mp_alloc < qsize) - _mpz_realloc (quot, qsize); - qp = quot->_mp_d; - - TMP_MARK (marker); - - /* QUOT <-- NUM/2^r, T <-- DEN/2^r where = r number of twos in DEN. */ - while (dp[0] == 0) - np += 1, nsize -= 1, dp += 1, dsize -= 1; - tsize = MIN (qsize, dsize); - if (dp[0] & 1) - { - if (qp != dp) - MPN_COPY (qp, np, qsize); - if (qp == dp) /* QUOT and DEN overlap. */ - { - tp = (mp_ptr) TMP_ALLOC (sizeof (mp_limb_t) * tsize); - MPN_COPY (tp, dp, tsize); - } - else - tp = (mp_ptr) dp; - } - else - { - unsigned long int r; - tp = (mp_ptr) TMP_ALLOC (sizeof (mp_limb_t) * tsize); - count_trailing_zeros (r, dp[0]); - mpn_rshift (tp, dp, tsize, r); - if (dsize > tsize) - tp[tsize-1] |= dp[tsize] << (BITS_PER_MP_LIMB - r); - mpn_rshift (qp, np, qsize, r); - if (nsize > qsize) - qp[qsize-1] |= np[qsize] << (BITS_PER_MP_LIMB - r); - } - - /* Now QUOT <-- QUOT/T. */ - mpn_bdivmod (qp, qp, qsize, tp, tsize, qsize * BITS_PER_MP_LIMB); - MPN_NORMALIZE (qp, qsize); - - quot->_mp_size = (num->_mp_size < 0) == (den->_mp_size < 0) ? qsize : -qsize; - - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/dmincl.c b/contrib/libgmp/mpz/dmincl.c deleted file mode 100644 index 51bd084870c3..000000000000 --- a/contrib/libgmp/mpz/dmincl.c +++ /dev/null @@ -1,201 +0,0 @@ -/* dmincl.c -- include file for tdiv_qr.c, tdiv_r.c. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* If den == quot, den needs temporary storage. - If den == rem, den needs temporary storage. - If num == quot, num needs temporary storage. - If den has temporary storage, it can be normalized while being copied, - i.e no extra storage should be allocated. */ - -/* This is the function body of mdiv, mpz_divmod, and mpz_mod. - - If COMPUTE_QUOTIENT is defined, the quotient is put in the MP_INT - object quot, otherwise that variable is not referenced at all. - - The remainder is always computed, and the result is put in the MP_INT - object rem. */ - -{ - mp_ptr np, dp; - mp_ptr qp, rp; - mp_size_t nsize = num->_mp_size; - mp_size_t dsize = den->_mp_size; - mp_size_t qsize, rsize; - mp_size_t sign_remainder = nsize; -#ifdef COMPUTE_QUOTIENT - mp_size_t sign_quotient = nsize ^ dsize; -#endif - unsigned normalization_steps; - mp_limb_t q_limb; - TMP_DECL (marker); - - nsize = ABS (nsize); - dsize = ABS (dsize); - - /* Ensure space is enough for quotient and remainder. */ - - /* We need space for an extra limb in the remainder, because it's - up-shifted (normalized) below. */ - rsize = nsize + 1; - if (rem->_mp_alloc < rsize) - _mpz_realloc (rem, rsize); - - qsize = rsize - dsize; /* qsize cannot be bigger than this. */ - if (qsize <= 0) - { - if (num != rem) - { - rem->_mp_size = num->_mp_size; - MPN_COPY (rem->_mp_d, num->_mp_d, nsize); - } -#ifdef COMPUTE_QUOTIENT - /* This needs to follow the assignment to rem, in case the - numerator and quotient are the same. */ - quot->_mp_size = 0; -#endif - return; - } - -#ifdef COMPUTE_QUOTIENT - if (quot->_mp_alloc < qsize) - _mpz_realloc (quot, qsize); -#endif - - /* Read pointers here, when reallocation is finished. */ - np = num->_mp_d; - dp = den->_mp_d; - rp = rem->_mp_d; - - /* Optimize division by a single-limb divisor. */ - if (dsize == 1) - { - mp_limb_t rlimb; -#ifdef COMPUTE_QUOTIENT - qp = quot->_mp_d; - rlimb = mpn_divmod_1 (qp, np, nsize, dp[0]); - qsize -= qp[qsize - 1] == 0; - quot->_mp_size = sign_quotient >= 0 ? qsize : -qsize; -#else - rlimb = mpn_mod_1 (np, nsize, dp[0]); -#endif - rp[0] = rlimb; - rsize = rlimb != 0; - rem->_mp_size = sign_remainder >= 0 ? rsize : -rsize; - return; - } - - TMP_MARK (marker); - -#ifdef COMPUTE_QUOTIENT - qp = quot->_mp_d; - - /* Make sure QP and NP point to different objects. Otherwise the - numerator would be gradually overwritten by the quotient limbs. */ - if (qp == np) - { - /* Copy NP object to temporary space. */ - np = (mp_ptr) TMP_ALLOC (nsize * BYTES_PER_MP_LIMB); - MPN_COPY (np, qp, nsize); - } - -#else - /* Put quotient at top of remainder. */ - qp = rp + dsize; -#endif - - count_leading_zeros (normalization_steps, dp[dsize - 1]); - - /* Normalize the denominator, i.e. make its most significant bit set by - shifting it NORMALIZATION_STEPS bits to the left. Also shift the - numerator the same number of steps (to keep the quotient the same!). */ - if (normalization_steps != 0) - { - mp_ptr tp; - mp_limb_t nlimb; - - /* Shift up the denominator setting the most significant bit of - the most significant word. Use temporary storage not to clobber - the original contents of the denominator. */ - tp = (mp_ptr) TMP_ALLOC (dsize * BYTES_PER_MP_LIMB); - mpn_lshift (tp, dp, dsize, normalization_steps); - dp = tp; - - /* Shift up the numerator, possibly introducing a new most - significant word. Move the shifted numerator in the remainder - meanwhile. */ - nlimb = mpn_lshift (rp, np, nsize, normalization_steps); - if (nlimb != 0) - { - rp[nsize] = nlimb; - rsize = nsize + 1; - } - else - rsize = nsize; - } - else - { - /* The denominator is already normalized, as required. Copy it to - temporary space if it overlaps with the quotient or remainder. */ -#ifdef COMPUTE_QUOTIENT - if (dp == rp || dp == qp) -#else - if (dp == rp) -#endif - { - mp_ptr tp; - - tp = (mp_ptr) TMP_ALLOC (dsize * BYTES_PER_MP_LIMB); - MPN_COPY (tp, dp, dsize); - dp = tp; - } - - /* Move the numerator to the remainder. */ - if (rp != np) - MPN_COPY (rp, np, nsize); - - rsize = nsize; - } - - q_limb = mpn_divmod (qp, rp, rsize, dp, dsize); - -#ifdef COMPUTE_QUOTIENT - qsize = rsize - dsize; - if (q_limb) - { - qp[qsize] = q_limb; - qsize += 1; - } - - quot->_mp_size = sign_quotient >= 0 ? qsize : -qsize; -#endif - - rsize = dsize; - MPN_NORMALIZE (rp, rsize); - - if (normalization_steps != 0 && rsize != 0) - { - mpn_rshift (rp, rp, rsize, normalization_steps); - rsize -= rp[rsize - 1] == 0; - } - - rem->_mp_size = sign_remainder >= 0 ? rsize : -rsize; - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/fac_ui.c b/contrib/libgmp/mpz/fac_ui.c deleted file mode 100644 index a170060a544e..000000000000 --- a/contrib/libgmp/mpz/fac_ui.c +++ /dev/null @@ -1,157 +0,0 @@ -/* mpz_fac_ui(result, n) -- Set RESULT to N!. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#ifdef DBG -#include <stdio.h> -#endif - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_fac_ui (mpz_ptr result, unsigned long int n) -#else -mpz_fac_ui (result, n) - mpz_ptr result; - unsigned long int n; -#endif -{ -#if SIMPLE_FAC - - /* Be silly. Just multiply the numbers in ascending order. O(n**2). */ - - unsigned long int k; - - mpz_set_ui (result, 1L); - - for (k = 2; k <= n; k++) - mpz_mul_ui (result, result, k); -#else - - /* Be smarter. Multiply groups of numbers in ascending order until the - product doesn't fit in a limb. Multiply these partial product in a - balanced binary tree fashion, to make the operand have as equal sizes - as possible. When the operands have about the same size, mpn_mul - becomes faster. */ - - unsigned long int p, k; - mp_limb_t p1, p0; - - /* Stack of partial products, used to make the computation balanced - (i.e. make the sizes of the multiplication operands equal). The - topmost position of MP_STACK will contain a one-limb partial product, - the second topmost will contain a two-limb partial product, and so - on. MP_STACK[0] will contain a partial product with 2**t limbs. - To compute n! MP_STACK needs to be less than - log(n)**2/log(BITS_PER_MP_LIMB), so 30 is surely enough. */ -#define MP_STACK_SIZE 30 - mpz_t mp_stack[MP_STACK_SIZE]; - - /* TOP is an index into MP_STACK, giving the topmost element. - TOP_LIMIT_SO_FAR is the largets value it has taken so far. */ - int top, top_limit_so_far; - - /* Count of the total number of limbs put on MP_STACK so far. This - variable plays an essential role in making the compututation balanced. - See below. */ - unsigned int tree_cnt; - - top = top_limit_so_far = -1; - tree_cnt = 0; - p = 1; - for (k = 2; k <= n; k++) - { - /* Multiply the partial product in P with K. */ - umul_ppmm (p1, p0, (mp_limb_t) p, (mp_limb_t) k); - - /* Did we get overflow into the high limb, i.e. is the partial - product now more than one limb? */ - if (p1 != 0) - { - tree_cnt++; - - if (tree_cnt % 2 == 0) - { - mp_size_t i; - - /* TREE_CNT is even (i.e. we have generated an even number of - one-limb partial products), which means that we have a - single-limb product on the top of MP_STACK. */ - - mpz_mul_ui (mp_stack[top], mp_stack[top], p); - - /* If TREE_CNT is divisable by 4, 8,..., we have two - similar-sized partial products with 2, 4,... limbs at - the topmost two positions of MP_STACK. Multiply them - to form a new partial product with 4, 8,... limbs. */ - for (i = 4; (tree_cnt & (i - 1)) == 0; i <<= 1) - { - mpz_mul (mp_stack[top - 1], - mp_stack[top], mp_stack[top - 1]); - top--; - } - } - else - { - /* Put the single-limb partial product in P on the stack. - (The next time we get a single-limb product, we will - multiply the two together.) */ - top++; - if (top > top_limit_so_far) - { - if (top > MP_STACK_SIZE) - abort(); - /* The stack is now bigger than ever, initialize the top - element. */ - mpz_init_set_ui (mp_stack[top], p); - top_limit_so_far++; - } - else - mpz_set_ui (mp_stack[top], p); - } - - /* We ignored the last result from umul_ppmm. Put K in P as the - first component of the next single-limb partial product. */ - p = k; - } - else - /* We didn't get overflow in umul_ppmm. Put p0 in P and try - with one more value of K. */ - p = p0; /* bogus if long != mp_limb_t */ - } - - /* We have partial products in mp_stack[0..top], in descending order. - We also have a small partial product in p. - Their product is the final result. */ - if (top < 0) - mpz_set_ui (result, p); - else - mpz_mul_ui (result, mp_stack[top--], p); - while (top >= 0) - mpz_mul (result, result, mp_stack[top--]); - - /* Free the storage allocated for MP_STACK. */ - for (top = top_limit_so_far; top >= 0; top--) - mpz_clear (mp_stack[top]); -#endif -} diff --git a/contrib/libgmp/mpz/fdiv_q.c b/contrib/libgmp/mpz/fdiv_q.c deleted file mode 100644 index 3da943af9164..000000000000 --- a/contrib/libgmp/mpz/fdiv_q.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mpz_fdiv_q -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_q (mpz_ptr quot, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_fdiv_q (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t dividend_size = dividend->_mp_size; - mp_size_t divisor_size = divisor->_mp_size; - mpz_t rem; - TMP_DECL (marker); - - TMP_MARK (marker); - - MPZ_TMP_INIT (rem, 1 + ABS (dividend_size)); - - mpz_tdiv_qr (quot, rem, dividend, divisor); - - if ((divisor_size ^ dividend_size) < 0 && rem->_mp_size != 0) - mpz_sub_ui (quot, quot, 1L); - - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/fdiv_q_2exp.c b/contrib/libgmp/mpz/fdiv_q_2exp.c deleted file mode 100644 index 3f56baff2c5a..000000000000 --- a/contrib/libgmp/mpz/fdiv_q_2exp.c +++ /dev/null @@ -1,94 +0,0 @@ -/* mpz_fdiv_q_2exp -- Divide an integer by 2**CNT. Round the quotient - towards -infinity. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_q_2exp (mpz_ptr w, mpz_srcptr u, unsigned long int cnt) -#else -mpz_fdiv_q_2exp (w, u, cnt) - mpz_ptr w; - mpz_srcptr u; - unsigned long int cnt; -#endif -{ - mp_size_t usize = u->_mp_size; - mp_size_t wsize; - mp_size_t abs_usize = ABS (usize); - mp_size_t limb_cnt; - mp_ptr wp; - mp_limb_t round = 0; - - limb_cnt = cnt / BITS_PER_MP_LIMB; - wsize = abs_usize - limb_cnt; - if (wsize <= 0) - { - wp = w->_mp_d; - wsize = 0; - /* Set ROUND since we know we skip some non-zero words in this case. - Well, if U is zero, we don't, but then this will be taken care of - below, since rounding only really takes place for negative U. */ - round = 1; - wp[0] = 1; - w->_mp_size = -(usize < 0); - return; - } - else - { - mp_size_t i; - mp_ptr up; - - /* Make sure there is enough space. We make an extra limb - here to account for possible rounding at the end. */ - if (w->_mp_alloc < wsize + 1) - _mpz_realloc (w, wsize + 1); - - wp = w->_mp_d; - up = u->_mp_d; - - /* Set ROUND if we are about skip some non-zero limbs. */ - for (i = 0; i < limb_cnt && round == 0; i++) - round = up[i]; - - cnt %= BITS_PER_MP_LIMB; - if (cnt != 0) - { - round |= mpn_rshift (wp, up + limb_cnt, wsize, cnt); - wsize -= wp[wsize - 1] == 0; - } - else - { - MPN_COPY_INCR (wp, up + limb_cnt, wsize); - } - } - - if (usize < 0 && round != 0) - { - mp_limb_t cy; - cy = mpn_add_1 (wp, wp, wsize, 1); - wp[wsize] = cy; - wsize += cy; - } - w->_mp_size = usize >= 0 ? wsize : -wsize; -} diff --git a/contrib/libgmp/mpz/fdiv_q_ui.c b/contrib/libgmp/mpz/fdiv_q_ui.c deleted file mode 100644 index 3d6825d4fee2..000000000000 --- a/contrib/libgmp/mpz/fdiv_q_ui.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpz_fdiv_q_ui -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_fdiv_q_ui (mpz_ptr quot, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_fdiv_q_ui (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size < 0) - { - mpn_add_1 (quot_ptr, quot_ptr, size, (mp_limb_t) 1); - remainder_limb = divisor - remainder_limb; - } - - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - return remainder_limb; -} diff --git a/contrib/libgmp/mpz/fdiv_qr.c b/contrib/libgmp/mpz/fdiv_qr.c deleted file mode 100644 index 2abb16ccbd7c..000000000000 --- a/contrib/libgmp/mpz/fdiv_qr.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpz_fdiv_qr -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_qr (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_fdiv_qr (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the quotient and - remainder have been preliminary calculated. We have to copy it to - temporary space if it's the same variable as either QUOT or REM. */ - if (quot == divisor || rem == divisor) - { - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - mpz_tdiv_qr (quot, rem, dividend, divisor); - - if ((divisor_size ^ dividend->_mp_size) < 0 && rem->_mp_size != 0) - { - mpz_sub_ui (quot, quot, 1L); - mpz_add (rem, rem, divisor); - } - - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/fdiv_qr_ui.c b/contrib/libgmp/mpz/fdiv_qr_ui.c deleted file mode 100644 index a22b702a8def..000000000000 --- a/contrib/libgmp/mpz/fdiv_qr_ui.c +++ /dev/null @@ -1,66 +0,0 @@ -/* mpz_fdiv_qr_ui -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_fdiv_qr_ui (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_fdiv_qr_ui (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size < 0) - { - mpn_add_1 (quot_ptr, quot_ptr, size, (mp_limb_t) 1); - remainder_limb = divisor - remainder_limb; - } - - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - rem->_mp_d[0] = remainder_limb; - rem->_mp_size = remainder_limb != 0; - - return remainder_limb; -} diff --git a/contrib/libgmp/mpz/fdiv_r.c b/contrib/libgmp/mpz/fdiv_r.c deleted file mode 100644 index 14e045bbe597..000000000000 --- a/contrib/libgmp/mpz/fdiv_r.c +++ /dev/null @@ -1,58 +0,0 @@ -/* mpz_fdiv_r -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_r (mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_fdiv_r (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the remainder has been - preliminary calculated. We have to copy it to temporary space if it's - the same variable as REM. */ - if (rem == divisor) - { - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - mpz_tdiv_r (rem, dividend, divisor); - - if ((divisor_size ^ dividend->_mp_size) < 0 && rem->_mp_size != 0) - mpz_add (rem, rem, divisor); - - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/fdiv_r_2exp.c b/contrib/libgmp/mpz/fdiv_r_2exp.c deleted file mode 100644 index 04190b1b0aae..000000000000 --- a/contrib/libgmp/mpz/fdiv_r_2exp.c +++ /dev/null @@ -1,88 +0,0 @@ -/* mpz_fdiv_r_2exp -- Divide a integer by 2**CNT and produce a remainder. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_r_2exp (mpz_ptr res, mpz_srcptr in, unsigned long int cnt) -#else -mpz_fdiv_r_2exp (res, in, cnt) - mpz_ptr res; - mpz_srcptr in; - unsigned long int cnt; -#endif -{ - mp_size_t in_size = ABS (in->_mp_size); - mp_size_t res_size; - mp_size_t limb_cnt = cnt / BITS_PER_MP_LIMB; - mp_srcptr in_ptr = in->_mp_d; - - if (in_size > limb_cnt) - { - /* The input operand is (probably) greater than 2**CNT. */ - mp_limb_t x; - - x = in_ptr[limb_cnt] & (((mp_limb_t) 1 << cnt % BITS_PER_MP_LIMB) - 1); - if (x != 0) - { - res_size = limb_cnt + 1; - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - res->_mp_d[limb_cnt] = x; - } - else - { - res_size = limb_cnt; - MPN_NORMALIZE (in_ptr, res_size); - - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - limb_cnt = res_size; - } - } - else - { - /* The input operand is smaller than 2**CNT. We perform a no-op, - apart from that we might need to copy IN to RES. */ - res_size = in_size; - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - limb_cnt = res_size; - } - - if (res != in) - MPN_COPY (res->_mp_d, in->_mp_d, limb_cnt); - res->_mp_size = res_size; - if (in->_mp_size < 0 && res_size != 0) - { - /* Result should be 2^CNT - RES */ - mpz_t tmp; - MPZ_TMP_INIT (tmp, limb_cnt + 1); - mpz_set_ui (tmp, 1L); - mpz_mul_2exp (tmp, tmp, cnt); - mpz_sub (res, tmp, res); - } -} diff --git a/contrib/libgmp/mpz/fdiv_r_ui.c b/contrib/libgmp/mpz/fdiv_r_ui.c deleted file mode 100644 index c4c37498ced7..000000000000 --- a/contrib/libgmp/mpz/fdiv_r_ui.c +++ /dev/null @@ -1,52 +0,0 @@ -/* mpz_fdiv_r_ui -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_fdiv_r_ui (mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_fdiv_r_ui (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size < 0) - remainder_limb = divisor - remainder_limb; - - rem->_mp_d[0] = remainder_limb; - rem->_mp_size = remainder_limb != 0; - - return remainder_limb; -} diff --git a/contrib/libgmp/mpz/fdiv_ui.c b/contrib/libgmp/mpz/fdiv_ui.c deleted file mode 100644 index 4d018a2291bf..000000000000 --- a/contrib/libgmp/mpz/fdiv_ui.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_fdiv_ui -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_fdiv_ui (mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_fdiv_ui (dividend, divisor) - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size < 0) - remainder_limb = divisor - remainder_limb; - - return remainder_limb; -} diff --git a/contrib/libgmp/mpz/gcd.c b/contrib/libgmp/mpz/gcd.c deleted file mode 100644 index f93030c8f4c5..000000000000 --- a/contrib/libgmp/mpz/gcd.c +++ /dev/null @@ -1,178 +0,0 @@ -/* mpz/gcd.c: Calculate the greatest common divisor of two integers. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void *_mpz_realloc (); - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_gcd (mpz_ptr g, mpz_srcptr u, mpz_srcptr v) -#else -mpz_gcd (g, u, v) - mpz_ptr g; - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -gcd (mpz_srcptr u, mpz_srcptr v, mpz_ptr g) -#else -gcd (u, v, g) - mpz_ptr g; - mpz_srcptr u; - mpz_srcptr v; -#endif -#endif /* BERKELEY_MP */ - -{ - unsigned long int g_zero_bits, u_zero_bits, v_zero_bits; - mp_size_t g_zero_limbs, u_zero_limbs, v_zero_limbs; - mp_ptr tp; - mp_ptr up = u->_mp_d; - mp_size_t usize = ABS (u->_mp_size); - mp_ptr vp = v->_mp_d; - mp_size_t vsize = ABS (v->_mp_size); - mp_size_t gsize; - TMP_DECL (marker); - - /* GCD(0, V) == V. */ - if (usize == 0) - { - g->_mp_size = vsize; - if (g == v) - return; - if (g->_mp_alloc < vsize) - _mpz_realloc (g, vsize); - MPN_COPY (g->_mp_d, vp, vsize); - return; - } - - /* GCD(U, 0) == U. */ - if (vsize == 0) - { - g->_mp_size = usize; - if (g == u) - return; - if (g->_mp_alloc < usize) - _mpz_realloc (g, usize); - MPN_COPY (g->_mp_d, up, usize); - return; - } - - if (usize == 1) - { - g->_mp_size = 1; - g->_mp_d[0] = mpn_gcd_1 (vp, vsize, up[0]); - return; - } - - if (vsize == 1) - { - g->_mp_size = 1; - g->_mp_d[0] = mpn_gcd_1 (up, usize, vp[0]); - return; - } - - TMP_MARK (marker); - - /* Eliminate low zero bits from U and V and move to temporary storage. */ - while (*up == 0) - up++; - u_zero_limbs = up - u->_mp_d; - usize -= u_zero_limbs; - count_trailing_zeros (u_zero_bits, *up); - tp = up; - up = (mp_ptr) TMP_ALLOC (usize * BYTES_PER_MP_LIMB); - if (u_zero_bits != 0) - { - mpn_rshift (up, tp, usize, u_zero_bits); - usize -= up[usize - 1] == 0; - } - else - MPN_COPY (up, tp, usize); - - while (*vp == 0) - vp++; - v_zero_limbs = vp - v->_mp_d; - vsize -= v_zero_limbs; - count_trailing_zeros (v_zero_bits, *vp); - tp = vp; - vp = (mp_ptr) TMP_ALLOC (vsize * BYTES_PER_MP_LIMB); - if (v_zero_bits != 0) - { - mpn_rshift (vp, tp, vsize, v_zero_bits); - vsize -= vp[vsize - 1] == 0; - } - else - MPN_COPY (vp, tp, vsize); - - if (u_zero_limbs > v_zero_limbs) - { - g_zero_limbs = v_zero_limbs; - g_zero_bits = v_zero_bits; - } - else if (u_zero_limbs < v_zero_limbs) - { - g_zero_limbs = u_zero_limbs; - g_zero_bits = u_zero_bits; - } - else /* Equal. */ - { - g_zero_limbs = u_zero_limbs; - g_zero_bits = MIN (u_zero_bits, v_zero_bits); - } - - /* Call mpn_gcd. The 1st argument must not have more bits than the 2nd. */ - vsize = (usize < vsize || (usize == vsize && up[usize-1] < vp[vsize-1])) - ? mpn_gcd (vp, up, usize, vp, vsize) - : mpn_gcd (vp, vp, vsize, up, usize); - - /* Here G <-- V << (g_zero_limbs*BITS_PER_MP_LIMB + g_zero_bits). */ - gsize = vsize + g_zero_limbs; - if (g_zero_bits != 0) - { - mp_limb_t cy_limb; - gsize += (vp[vsize - 1] >> (BITS_PER_MP_LIMB - g_zero_bits)) != 0; - if (g->_mp_alloc < gsize) - _mpz_realloc (g, gsize); - MPN_ZERO (g->_mp_d, g_zero_limbs); - - tp = g->_mp_d + g_zero_limbs; - cy_limb = mpn_lshift (tp, vp, vsize, g_zero_bits); - if (cy_limb != 0) - tp[vsize] = cy_limb; - } - else - { - if (g->_mp_alloc < gsize) - _mpz_realloc (g, gsize); - MPN_ZERO (g->_mp_d, g_zero_limbs); - MPN_COPY (g->_mp_d + g_zero_limbs, vp, vsize); - } - - g->_mp_size = gsize; - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/gcd_ui.c b/contrib/libgmp/mpz/gcd_ui.c deleted file mode 100644 index 388ab05cc9cc..000000000000 --- a/contrib/libgmp/mpz/gcd_ui.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_gcd_ui -- Calculate the greatest common divisior of two integers. - -Copyright (C) 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_gcd_ui (mpz_ptr w, mpz_srcptr u, unsigned long int v) -#else -mpz_gcd_ui (w, u, v) - mpz_ptr w; - mpz_srcptr u; - unsigned long int v; -#endif -{ - mp_size_t size; - mp_limb_t res; - - size = ABS (u->_mp_size); - - if (size == 0) - res = v; - else if (v == 0) - { - if (w != NULL && u != w) - { - if (w->_mp_alloc < size) - _mpz_realloc (w, size); - - MPN_COPY (w->_mp_d, u->_mp_d, size); - } - w->_mp_size = size; - /* We can't return any useful result for gcd(big,0). */ - return size > 1 ? 0 : w->_mp_d[0]; - } - else - res = mpn_gcd_1 (u->_mp_d, size, v); - - if (w != NULL) - { - w->_mp_d[0] = res; - w->_mp_size = 1; - } - return res; -} diff --git a/contrib/libgmp/mpz/gcdext.c b/contrib/libgmp/mpz/gcdext.c deleted file mode 100644 index adf66b04af26..000000000000 --- a/contrib/libgmp/mpz/gcdext.c +++ /dev/null @@ -1,88 +0,0 @@ -/* mpz_gcdext(g, s, t, a, b) -- Set G to gcd(a, b), and S and T such that - g = as + bt. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Botch: SLOW! */ - -void -#if __STDC__ -mpz_gcdext (mpz_ptr g, mpz_ptr s, mpz_ptr t, mpz_srcptr a, mpz_srcptr b) -#else -mpz_gcdext (g, s, t, a, b) - mpz_ptr g; - mpz_ptr s; - mpz_ptr t; - mpz_srcptr a; - mpz_srcptr b; -#endif -{ - mpz_t s0, s1, q, r, x, d0, d1; - - mpz_init_set_ui (s0, 1L); - mpz_init_set_ui (s1, 0L); - mpz_init (q); - mpz_init (r); - mpz_init (x); - mpz_init_set (d0, a); - mpz_init_set (d1, b); - - while (d1->_mp_size != 0) - { - mpz_tdiv_qr (q, r, d0, d1); - mpz_set (d0, d1); - mpz_set (d1, r); - - mpz_mul (x, s1, q); - mpz_sub (x, s0, x); - mpz_set (s0, s1); - mpz_set (s1, x); - } - - if (t != NULL) - { - mpz_mul (x, s0, a); - mpz_sub (x, d0, x); - if (b->_mp_size == 0) - t->_mp_size = 0; - else - mpz_tdiv_q (t, x, b); - } - mpz_set (s, s0); - mpz_set (g, d0); - if (g->_mp_size < 0) - { - g->_mp_size = -g->_mp_size; - s->_mp_size = -s->_mp_size; - if (t != NULL) - t->_mp_size = -t->_mp_size; - } - - mpz_clear (s0); - mpz_clear (s1); - mpz_clear (q); - mpz_clear (r); - mpz_clear (x); - mpz_clear (d0); - mpz_clear (d1); -} diff --git a/contrib/libgmp/mpz/get_d.c b/contrib/libgmp/mpz/get_d.c deleted file mode 100644 index 0fd7916eafd0..000000000000 --- a/contrib/libgmp/mpz/get_d.c +++ /dev/null @@ -1,54 +0,0 @@ -/* double mpz_get_d (mpz_t src) -- Return the double approximation to SRC. - -Copyright (C) 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -double -#if __STDC__ -mpz_get_d (mpz_srcptr src) -#else -mpz_get_d (src) - mpz_srcptr src; -#endif -{ - double res; - mp_size_t size, i, n_limbs_to_use; - int negative; - mp_ptr qp; - - size = SIZ(src); - if (size == 0) - return 0.0; - - negative = size < 0; - size = ABS (size); - qp = PTR(src); - - res = qp[size - 1]; - n_limbs_to_use = MIN (LIMBS_PER_DOUBLE, size); - for (i = 2; i <= n_limbs_to_use; i++) - res = res * MP_BASE_AS_DOUBLE + qp[size - i]; - - res = __gmp_scale2 (res, (size - n_limbs_to_use) * BITS_PER_MP_LIMB); - - return negative ? -res : res; -} diff --git a/contrib/libgmp/mpz/get_si.c b/contrib/libgmp/mpz/get_si.c deleted file mode 100644 index 45e0e5aecf68..000000000000 --- a/contrib/libgmp/mpz/get_si.c +++ /dev/null @@ -1,43 +0,0 @@ -/* mpz_get_si(integer) -- Return the least significant digit from INTEGER. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -signed long int -#if __STDC__ -mpz_get_si (mpz_srcptr op) -#else -mpz_get_si (op) - mpz_srcptr op; -#endif -{ - mp_size_t size = op->_mp_size; - mp_limb_t low_limb = op->_mp_d[0]; - - if (size > 0) - return low_limb % ((mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1)); - else if (size < 0) - /* This convoluted expression is necessary to properly handle 0x80000000 */ - return ~((low_limb - 1) % ((mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1))); - else - return 0; -} diff --git a/contrib/libgmp/mpz/get_str.c b/contrib/libgmp/mpz/get_str.c deleted file mode 100644 index 8ccf3efcd0eb..000000000000 --- a/contrib/libgmp/mpz/get_str.c +++ /dev/null @@ -1,118 +0,0 @@ -/* mpz_get_str (string, base, mp_src) -- Convert the multiple precision - number MP_SRC to a string STRING of base BASE. If STRING is NULL - allocate space for the result. In any case, return a pointer to the - result. If STRING is not NULL, the caller must ensure enough space is - available to store the result. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -char * -#if __STDC__ -mpz_get_str (char *res_str, int base, mpz_srcptr x) -#else -mpz_get_str (res_str, base, x) - char *res_str; - int base; - mpz_srcptr x; -#endif -{ - mp_ptr xp; - mp_size_t x_size = x->_mp_size; - unsigned char *str; - char *return_str; - size_t str_size; - char *num_to_text; - int i; - TMP_DECL (marker); - - TMP_MARK (marker); - if (base >= 0) - { - if (base == 0) - base = 10; - num_to_text = "0123456789abcdefghijklmnopqrstuvwxyz"; - } - else - { - base = -base; - num_to_text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - } - - /* We allways allocate space for the string. If the caller passed a - NULL pointer for RES_STR, we allocate permanent space and return - a pointer to that to the caller. */ - str_size = ((size_t) (ABS (x_size) * BITS_PER_MP_LIMB - * __mp_bases[base].chars_per_bit_exactly)) + 3; - if (res_str == 0) - { - /* We didn't get a string from the user. Allocate one (and return - a pointer to it). */ - res_str = (char *) (*_mp_allocate_func) (str_size); - /* Make str, the variable used for raw result from mpn_get_str, - point to the same string, but just after a possible minus sign. */ - str = (unsigned char *) res_str + 1; - } - else - { - /* Use TMP_ALLOC to get temporary space, since we need a few extra bytes - that we can't expect to caller to supply us with. */ - str = (unsigned char *) TMP_ALLOC (str_size); - } - - return_str = res_str; - - if (x_size == 0) - { - res_str[0] = '0'; - res_str[1] = 0; - TMP_FREE (marker); - return res_str; - } - if (x_size < 0) - { - *res_str++ = '-'; - x_size = -x_size; - } - - /* Move the number to convert into temporary space, since mpn_get_str - clobbers its argument + needs one extra high limb.... */ - xp = (mp_ptr) TMP_ALLOC ((x_size + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (xp, x->_mp_d, x_size); - - str_size = mpn_get_str (str, base, xp, x_size); - - /* mpn_get_str might make some leading zeros. Skip them. */ - while (*str == 0) - { - str_size--; - str++; - } - - /* Translate result to printable chars and move result to RES_STR. */ - for (i = 0; i < str_size; i++) - res_str[i] = num_to_text[str[i]]; - res_str[str_size] = 0; - - TMP_FREE (marker); - return return_str; -} diff --git a/contrib/libgmp/mpz/get_ui.c b/contrib/libgmp/mpz/get_ui.c deleted file mode 100644 index 4bfb5e14db53..000000000000 --- a/contrib/libgmp/mpz/get_ui.c +++ /dev/null @@ -1,37 +0,0 @@ -/* mpz_get_ui(integer) -- Return the least significant digit from INTEGER. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_get_ui (mpz_srcptr integer) -#else -mpz_get_ui (integer) - mpz_srcptr integer; -#endif -{ - if (integer->_mp_size == 0) - return 0; - else - return integer->_mp_d[0]; -} diff --git a/contrib/libgmp/mpz/getlimbn.c b/contrib/libgmp/mpz/getlimbn.c deleted file mode 100644 index c7a234b5ab24..000000000000 --- a/contrib/libgmp/mpz/getlimbn.c +++ /dev/null @@ -1,38 +0,0 @@ -/* mpz_getlimbn(integer,n) -- Return the N:th limb from INTEGER. - -Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -#if __STDC__ -mpz_getlimbn (mpz_srcptr integer, mp_size_t n) -#else -mpz_getlimbn (integer, n) - mpz_srcptr integer; - mp_size_t n; -#endif -{ - if (integer->_mp_size <= n || n < 0) - return 0; - else - return integer->_mp_d[n]; -} diff --git a/contrib/libgmp/mpz/hamdist.c b/contrib/libgmp/mpz/hamdist.c deleted file mode 100644 index 58c927316a5d..000000000000 --- a/contrib/libgmp/mpz/hamdist.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpz_hamdist(mpz_ptr op1, mpz_ptr op2) -- Compute the hamming distance - between OP1 and OP2. If one of the operands is negative, return ~0. (We - could make the function well-defined when both operands are negative, but - that would probably not be worth the trouble. - -Copyright (C) 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_hamdist (mpz_srcptr u, mpz_srcptr v) -#else -mpz_hamdist (u, v) - mpz_srcptr u; - mpz_srcptr v; -#endif -{ - mp_srcptr up, vp; - mp_size_t usize, vsize, size; - unsigned long int count; - - usize = u->_mp_size; - vsize = v->_mp_size; - - if ((usize | vsize) < 0) - return ~ (unsigned long int) 0; - - up = u->_mp_d; - vp = v->_mp_d; - - if (usize > vsize) - { - count = mpn_popcount (up + vsize, usize - vsize); - size = vsize; - } - else - { - count = mpn_popcount (vp + usize, vsize - usize); - size = usize; - } - - return count + mpn_hamdist (up, vp, size); -} diff --git a/contrib/libgmp/mpz/init.c b/contrib/libgmp/mpz/init.c deleted file mode 100644 index f8d8e207e4b2..000000000000 --- a/contrib/libgmp/mpz/init.c +++ /dev/null @@ -1,36 +0,0 @@ -/* mpz_init() -- Make a new multiple precision number with value 0. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init (mpz_ptr x) -#else -mpz_init (x) - mpz_ptr x; -#endif -{ - x->_mp_alloc = 1; - x->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - x->_mp_size = 0; -} diff --git a/contrib/libgmp/mpz/inp_raw.c b/contrib/libgmp/mpz/inp_raw.c deleted file mode 100644 index e1cec1d743c0..000000000000 --- a/contrib/libgmp/mpz/inp_raw.c +++ /dev/null @@ -1,101 +0,0 @@ -/* mpz_inp_raw -- Input a mpz_t in raw, but endianess, and wordsize - independent format (as output by mpz_out_raw). - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> - -#include "gmp.h" -#include "gmp-impl.h" - -size_t -#if __STDC__ -mpz_inp_raw (mpz_ptr x, FILE *stream) -#else -mpz_inp_raw (x, stream) - mpz_ptr x; - FILE *stream; -#endif -{ - int i; - mp_size_t s; - mp_size_t xsize; - mp_ptr xp; - unsigned int c; - mp_limb_t x_limb; - mp_size_t in_bytesize; - int neg_flag; - - if (stream == 0) - stream = stdin; - - /* Read 4-byte size */ - in_bytesize = 0; - for (i = 4 - 1; i >= 0; i--) - { - c = fgetc (stream); - in_bytesize = (in_bytesize << BITS_PER_CHAR) | c; - } - - /* Size is stored as a 32 bit word; sign extend in_bytesize for non-32 bit - machines. */ - if (sizeof (mp_size_t) > 4) - in_bytesize |= (-(in_bytesize < 0)) << 31; - - neg_flag = in_bytesize < 0; - in_bytesize = ABS (in_bytesize); - xsize = (in_bytesize + BYTES_PER_MP_LIMB - 1) / BYTES_PER_MP_LIMB; - - if (xsize == 0) - { - x->_mp_size = 0; - return 4; /* we've read 4 bytes */ - } - - if (x->_mp_alloc < xsize) - _mpz_realloc (x, xsize); - xp = x->_mp_d; - - x_limb = 0; - for (i = (in_bytesize - 1) % BYTES_PER_MP_LIMB; i >= 0; i--) - { - c = fgetc (stream); - x_limb = (x_limb << BITS_PER_CHAR) | c; - } - xp[xsize - 1] = x_limb; - - for (s = xsize - 2; s >= 0; s--) - { - x_limb = 0; - for (i = BYTES_PER_MP_LIMB - 1; i >= 0; i--) - { - c = fgetc (stream); - x_limb = (x_limb << BITS_PER_CHAR) | c; - } - xp[s] = x_limb; - } - - if (c == EOF) - return 0; /* error */ - - MPN_NORMALIZE (xp, xsize); - x->_mp_size = neg_flag ? -xsize : xsize; - return in_bytesize + 4; -} diff --git a/contrib/libgmp/mpz/inp_str.c b/contrib/libgmp/mpz/inp_str.c deleted file mode 100644 index 715906237ee0..000000000000 --- a/contrib/libgmp/mpz/inp_str.c +++ /dev/null @@ -1,138 +0,0 @@ -/* mpz_inp_str(dest_integer, stream, base) -- Input a number in base - BASE from stdio stream STREAM and store the result in DEST_INTEGER. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include <ctype.h> -#include "gmp.h" -#include "gmp-impl.h" - -static int -digit_value_in_base (c, base) - int c; - int base; -{ - int digit; - - if (isdigit (c)) - digit = c - '0'; - else if (islower (c)) - digit = c - 'a' + 10; - else if (isupper (c)) - digit = c - 'A' + 10; - else - return -1; - - if (digit < base) - return digit; - return -1; -} - -size_t -#if __STDC__ -mpz_inp_str (mpz_ptr dest, FILE *stream, int base) -#else -mpz_inp_str (dest, stream, base) - mpz_ptr dest; - FILE *stream; - int base; -#endif -{ - char *str; - size_t alloc_size, str_size; - int c; - int negative; - mp_size_t dest_size; - size_t nread; - - if (stream == 0) - stream = stdin; - - alloc_size = 100; - str = (char *) (*_mp_allocate_func) (alloc_size); - str_size = 0; - nread = 0; - - /* Skip whitespace. */ - do - { - c = getc (stream); - nread++; - } - while (isspace (c)); - - negative = 0; - if (c == '-') - { - negative = 1; - c = getc (stream); - } - - if (digit_value_in_base (c, base == 0 ? 10 : base) < 0) - return 0; /* error if no digits */ - - /* If BASE is 0, try to find out the base by looking at the initial - characters. */ - if (base == 0) - { - base = 10; - if (c == '0') - { - base = 8; - c = getc (stream); - nread++; - if (c == 'x' || c == 'X') - { - base = 16; - c = getc (stream); - nread++; - } - } - } - - for (;;) - { - int dig; - if (str_size >= alloc_size) - { - size_t old_alloc_size = alloc_size; - alloc_size = alloc_size * 3 / 2; - str = (char *) (*_mp_reallocate_func) (str, old_alloc_size, alloc_size); - } - dig = digit_value_in_base (c, base); - if (dig < 0) - break; - str[str_size++] = dig; - c = getc (stream); - } - - ungetc (c, stream); - - dest_size = str_size / __mp_bases[base].chars_per_limb + 1; - if (dest->_mp_alloc < dest_size) - _mpz_realloc (dest, dest_size); - - dest_size = mpn_set_str (dest->_mp_d, (unsigned char *) str, str_size, base); - dest->_mp_size = negative ? -dest_size : dest_size; - - (*_mp_free_func) (str, alloc_size); - return str_size + nread; -} diff --git a/contrib/libgmp/mpz/invert.c b/contrib/libgmp/mpz/invert.c deleted file mode 100644 index ff1d6d937dd6..000000000000 --- a/contrib/libgmp/mpz/invert.c +++ /dev/null @@ -1,43 +0,0 @@ -/* mpz_invert (inv, x, n). Find multiplicative inverse of X in Z(N). - If X has an inverse, return non-zero and store inverse in INVERSE, - otherwise, return 0 and put garbage in X. - -Copyright (C) 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" - -int -#if __STDC__ -mpz_invert (mpz_ptr inverse, mpz_srcptr x, mpz_srcptr n) -#else -mpz_invert (inverse, x, n) - mpz_ptr inverse; - mpz_srcptr x, n; -#endif -{ - mpz_t gcd; - int rv; - - mpz_init (gcd); - mpz_gcdext (gcd, inverse, (mpz_ptr) 0, x, n); - rv = gcd->_mp_size == 1 && (gcd->_mp_d)[0] == 1; - mpz_clear (gcd); - return rv; -} diff --git a/contrib/libgmp/mpz/ior.c b/contrib/libgmp/mpz/ior.c deleted file mode 100644 index 77facfd3d48d..000000000000 --- a/contrib/libgmp/mpz/ior.c +++ /dev/null @@ -1,243 +0,0 @@ -/* mpz_ior -- Logical inclusive or. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_ior (mpz_ptr res, mpz_srcptr op1, mpz_srcptr op2) -#else -mpz_ior (res, op1, op2) - mpz_ptr res; - mpz_srcptr op1; - mpz_srcptr op2; -#endif -{ - mp_srcptr op1_ptr, op2_ptr; - mp_size_t op1_size, op2_size; - mp_ptr res_ptr; - mp_size_t res_size; - mp_size_t i; - TMP_DECL (marker); - - TMP_MARK (marker); - op1_size = op1->_mp_size; - op2_size = op2->_mp_size; - - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - - if (op1_size >= 0) - { - if (op2_size >= 0) - { - if (op1_size >= op2_size) - { - if (res->_mp_alloc < op1_size) - { - _mpz_realloc (res, op1_size); - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - } - - if (res_ptr != op1_ptr) - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, - op1_size - op2_size); - for (i = op2_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] | op2_ptr[i]; - res_size = op1_size; - } - else - { - if (res->_mp_alloc < op2_size) - { - _mpz_realloc (res, op2_size); - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - } - - if (res_ptr != op2_ptr) - MPN_COPY (res_ptr + op1_size, op2_ptr + op1_size, - op2_size - op1_size); - for (i = op1_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] | op2_ptr[i]; - res_size = op2_size; - } - - res->_mp_size = res_size; - return; - } - else /* op2_size < 0 */ - { - /* Fall through to the code at the end of the function. */ - } - } - else - { - if (op2_size < 0) - { - mp_ptr opx; - mp_limb_t cy; - - /* Both operands are negative, so will be the result. - -((-OP1) | (-OP2)) = -(~(OP1 - 1) | ~(OP2 - 1)) = - = ~(~(OP1 - 1) | ~(OP2 - 1)) + 1 = - = ((OP1 - 1) & (OP2 - 1)) + 1 */ - - op1_size = -op1_size; - op2_size = -op2_size; - - res_size = MIN (op1_size, op2_size); - - /* Possible optimization: Decrease mpn_sub precision, - as we won't use the entire res of both. */ - opx = (mp_ptr) TMP_ALLOC (res_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op1_ptr, res_size, (mp_limb_t) 1); - op1_ptr = opx; - - opx = (mp_ptr) TMP_ALLOC (res_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, res_size, (mp_limb_t) 1); - op2_ptr = opx; - - if (res->_mp_alloc < res_size) - { - _mpz_realloc (res, res_size); - res_ptr = res->_mp_d; - /* Don't re-read OP1_PTR and OP2_PTR. They point to - temporary space--never to the space RES->_mp_D used - to point to before reallocation. */ - } - - /* First loop finds the size of the result. */ - for (i = res_size - 1; i >= 0; i--) - if ((op1_ptr[i] & op2_ptr[i]) != 0) - break; - res_size = i + 1; - - if (res_size != 0) - { - /* Second loop computes the real result. */ - for (i = res_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] & op2_ptr[i]; - - cy = mpn_add_1 (res_ptr, res_ptr, res_size, (mp_limb_t) 1); - if (cy) - { - res_ptr[res_size] = cy; - res_size++; - } - } - else - { - res_ptr[0] = 1; - res_size = 1; - } - - res->_mp_size = -res_size; - TMP_FREE (marker); - return; - } - else - { - /* We should compute -OP1 | OP2. Swap OP1 and OP2 and fall - through to the code that handles OP1 | -OP2. */ - {mpz_srcptr t = op1; op1 = op2; op2 = t;} - {mp_srcptr t = op1_ptr; op1_ptr = op2_ptr; op2_ptr = t;} - {mp_size_t t = op1_size; op1_size = op2_size; op2_size = t;} - } - } - - { - mp_ptr opx; - mp_limb_t cy; - mp_size_t res_alloc; - mp_size_t count; - - /* Operand 2 negative, so will be the result. - -(OP1 | (-OP2)) = -(OP1 | ~(OP2 - 1)) = - = ~(OP1 | ~(OP2 - 1)) + 1 = - = (~OP1 & (OP2 - 1)) + 1 */ - - op2_size = -op2_size; - - res_alloc = op2_size; - - opx = (mp_ptr) TMP_ALLOC (op2_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, op2_size, (mp_limb_t) 1); - op2_ptr = opx; - - if (res->_mp_alloc < res_alloc) - { - _mpz_realloc (res, res_alloc); - op1_ptr = op1->_mp_d; - res_ptr = res->_mp_d; - /* Don't re-read OP2_PTR. It points to temporary space--never - to the space RES->_mp_D used to point to before reallocation. */ - } - - if (op1_size >= op2_size) - { - /* We can just ignore the part of OP1 that stretches above OP2, - because the result limbs are zero there. */ - - /* First loop finds the size of the result. */ - for (i = op2_size - 1; i >= 0; i--) - if ((~op1_ptr[i] & op2_ptr[i]) != 0) - break; - res_size = i + 1; - count = res_size; - } - else - { - res_size = op2_size; - - /* Copy the part of OP2 that stretches above OP1, to RES. */ - MPN_COPY (res_ptr + op1_size, op2_ptr + op1_size, op2_size - op1_size); - count = op1_size; - } - - if (res_size != 0) - { - /* Second loop computes the real result. */ - for (i = count - 1; i >= 0; i--) - res_ptr[i] = ~op1_ptr[i] & op2_ptr[i]; - - cy = mpn_add_1 (res_ptr, res_ptr, res_size, (mp_limb_t) 1); - if (cy) - { - res_ptr[res_size] = cy; - res_size++; - } - } - else - { - res_ptr[0] = 1; - res_size = 1; - } - - res->_mp_size = -res_size; - } - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/iset.c b/contrib/libgmp/mpz/iset.c deleted file mode 100644 index c8a17dc67a88..000000000000 --- a/contrib/libgmp/mpz/iset.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpz_init_set (src_integer) -- Make a new multiple precision number with - a value copied from SRC_INTEGER. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init_set (mpz_ptr w, mpz_srcptr u) -#else -mpz_init_set (w, u) - mpz_ptr w; - mpz_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t usize, size; - - usize = u->_mp_size; - size = ABS (usize); - - w->_mp_alloc = MAX (size, 1); - w->_mp_d = (mp_ptr) (*_mp_allocate_func) (w->_mp_alloc * BYTES_PER_MP_LIMB); - - wp = w->_mp_d; - up = u->_mp_d; - - MPN_COPY (wp, up, size); - w->_mp_size = usize; -} diff --git a/contrib/libgmp/mpz/iset_d.c b/contrib/libgmp/mpz/iset_d.c deleted file mode 100644 index 41e5c4f963bb..000000000000 --- a/contrib/libgmp/mpz/iset_d.c +++ /dev/null @@ -1,39 +0,0 @@ -/* mpz_init_set_d(integer, val) -- Initialize and assign INTEGER with a double - value VAL. - -Copyright (C) 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init_set_d (mpz_ptr dest, double val) -#else -mpz_init_set_d (dest, val) - mpz_ptr dest; - double val; -#endif -{ - dest->_mp_alloc = 1; - dest->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - dest->_mp_size = 0; - mpz_set_d (dest, val); -} diff --git a/contrib/libgmp/mpz/iset_si.c b/contrib/libgmp/mpz/iset_si.c deleted file mode 100644 index af51f0578ab8..000000000000 --- a/contrib/libgmp/mpz/iset_si.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpz_init_set_si(val) -- Make a new multiple precision number with - value val. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init_set_si (mpz_ptr x, signed long int val) -#else -mpz_init_set_si (x, val) - mpz_ptr x; - signed long int val; -#endif -{ - x->_mp_alloc = 1; - x->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - if (val > 0) - { - x->_mp_d[0] = val; - x->_mp_size = 1; - } - else if (val < 0) - { - x->_mp_d[0] = -val; - x->_mp_size = -1; - } - else - x->_mp_size = 0; -} diff --git a/contrib/libgmp/mpz/iset_str.c b/contrib/libgmp/mpz/iset_str.c deleted file mode 100644 index e04ad5da22df..000000000000 --- a/contrib/libgmp/mpz/iset_str.c +++ /dev/null @@ -1,44 +0,0 @@ -/* mpz_init_set_str(string, base) -- Convert the \0-terminated string - STRING in base BASE to a multiple precision integer. Return a MP_INT - structure representing the integer. Allow white space in the - string. If BASE == 0 determine the base in the C standard way, - i.e. 0xhh...h means base 16, 0oo...o means base 8, otherwise - assume base 10. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_init_set_str (mpz_ptr x, const char *str, int base) -#else -mpz_init_set_str (x, str, base) - mpz_ptr x; - const char *str; - int base; -#endif -{ - x->_mp_alloc = 1; - x->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - - return mpz_set_str (x, str, base); -} diff --git a/contrib/libgmp/mpz/iset_ui.c b/contrib/libgmp/mpz/iset_ui.c deleted file mode 100644 index dc39f59ff442..000000000000 --- a/contrib/libgmp/mpz/iset_ui.c +++ /dev/null @@ -1,39 +0,0 @@ -/* mpz_init_set_ui(val) -- Make a new multiple precision number with - value val. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init_set_ui (mpz_ptr x, unsigned long int val) -#else -mpz_init_set_ui (x, val) - mpz_ptr x; - unsigned long int val; -#endif -{ - x->_mp_alloc = 1; - x->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - x->_mp_d[0] = val; - x->_mp_size = val != 0; -} diff --git a/contrib/libgmp/mpz/jacobi.c b/contrib/libgmp/mpz/jacobi.c deleted file mode 100644 index 409f622fcef3..000000000000 --- a/contrib/libgmp/mpz/jacobi.c +++ /dev/null @@ -1,53 +0,0 @@ -/* mpz_jacobi (op1, op2). - Contributed by Bennet Yee (bsy) at Carnegie-Mellon University - -Copyright (C) 1991, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" - -/* Precondition: both p and q are positive */ - -int -#if __STDC__ -mpz_jacobi (mpz_srcptr pi, mpz_srcptr qi) -#else -mpz_jacobi (pi, qi) - mpz_srcptr pi, qi; -#endif -{ -#if GCDCHECK - int retval; - mpz_t gcdval; - - mpz_init (gcdval); - mpz_gcd (gcdval, pi, qi); - if (!mpz_cmp_ui (gcdval, 1L)) - { - /* J(ab,cb) = J(ab,c)J(ab,b) = J(ab,c)J(0,b) = J(ab,c)*0 */ - retval = 0; - } - else - retval = mpz_legendre (pi, qi); - mpz_clear (gcdval); - return retval; -#else - return mpz_legendre (pi, qi); -#endif -} diff --git a/contrib/libgmp/mpz/legendre.c b/contrib/libgmp/mpz/legendre.c deleted file mode 100644 index 4de16a63143a..000000000000 --- a/contrib/libgmp/mpz/legendre.c +++ /dev/null @@ -1,184 +0,0 @@ -/* mpz_legendre (op1, op2). - Contributed by Bennet Yee (bsy) at Carnegie-Mellon University - -Copyright (C) 1992, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" - -#if defined (DEBUG) -#include <stdio.h> -#endif - -/* Precondition: both p and q are positive */ - -int -#if __STDC__ -mpz_legendre (mpz_srcptr pi, mpz_srcptr qi) -#else -mpz_legendre (pi, qi) -mpz_srcptr pi, qi; -#endif -{ - mpz_t p, q, qdiv2; -#ifdef Q_MINUS_1 - mpz_t q_minus_1; -#endif - mpz_ptr mtmp; - register mpz_ptr pptr, qptr; - register int retval = 1; - register unsigned long int s; - - pptr = p; - mpz_init_set (pptr, pi); - qptr = q; - mpz_init_set (qptr, qi); - -#ifdef Q_MINUS_1 - mpz_init (q_minus_1); -#endif - mpz_init (qdiv2); - -tail_recurse2: -#ifdef DEBUG - printf ("tail_recurse2: p="); - mpz_out_str (stdout, 10, pptr); - printf ("\nq="); - mpz_out_str (stdout, 10, qptr); - putchar ('\n'); -#endif - s = mpz_scan1 (qptr, 0); - if (s) mpz_tdiv_q_2exp (qptr, qptr, s); /* J(a,2) = 1 */ -#ifdef DEBUG - printf ("2 factor decomposition: p="); - mpz_out_str (stdout, 10, pptr); - printf ("\nq="); - mpz_out_str (stdout, 10, qptr); - putchar ('\n'); -#endif - /* postcondition q odd */ - if (!mpz_cmp_ui (qptr, 1L)) /* J(a,1) = 1 */ - goto done; - mpz_mod (pptr, pptr, qptr); /* J(a,q) = J(b,q) when a == b mod q */ -#ifdef DEBUG - printf ("mod out by q: p="); - mpz_out_str (stdout, 10, pptr); - printf ("\nq="); - mpz_out_str (stdout, 10, qptr); - putchar ('\n'); -#endif - /* quick calculation to get approximate size first */ - /* precondition: p < q */ - if ((mpz_sizeinbase (pptr, 2) + 1 >= mpz_sizeinbase (qptr,2)) - && (mpz_tdiv_q_2exp (qdiv2, qptr, 1L), mpz_cmp (pptr, qdiv2) > 0)) - { - /* p > q/2 */ - mpz_sub (pptr, qptr, pptr); - /* J(-1,q) = (-1)^((q-1)/2), q odd */ - if (mpz_get_ui (qptr) & 2) - retval = -retval; - } - /* p < q/2 */ -#ifdef Q_MINUS_1 - mpz_sub_ui (q_minus_q, qptr, 1L); -#endif -tail_recurse: /* we use tail_recurse only if q has not changed */ -#ifdef DEBUG - printf ("tail_recurse1: p="); - mpz_out_str (stdout, 10, pptr); - printf ("\nq="); - mpz_out_str (stdout, 10, qptr); - putchar ('\n'); -#endif - /* - * J(0,q) = 0 - * this occurs only if gcd(p,q) != 1 which is never true for - * Legendre function. - */ - if (!mpz_cmp_ui (pptr, 0L)) - { - retval = 0; - goto done; - } - - if (!mpz_cmp_ui (pptr, 1L)) - { - /* J(1,q) = 1 */ - /* retval *= 1; */ - goto done; - } -#ifdef Q_MINUS_1 - if (!mpz_cmp (pptr, q_minus_1)) - { - /* J(-1,q) = (-1)^((q-1)/2) */ - if (mpz_get_ui (qptr) & 2) - retval = -retval; - /* else retval *= 1; */ - goto done; - } -#endif - /* - * we do not handle J(xy,q) except for x==2 - * since we do not want to factor - */ - if ((s = mpz_scan1 (pptr, 0)) != 0) - { - /* - * J(2,q) = (-1)^((q^2-1)/8) - * - * Note that q odd guarantees that q^2-1 is divisible by 8: - * Let a: q=2a+1. q^2 = 4a^2+4a+1, (q^2-1)/8 = a(a+1)/2, qed - * - * Now, note that this means that the low two bits of _a_ - * (or the low bits of q shifted over by 1 determines - * the factor). - */ - mpz_tdiv_q_2exp (pptr, pptr, s); - - /* even powers of 2 gives J(2,q)^{2n} = 1 */ - if (s & 1) - { - s = mpz_get_ui (qptr) >> 1; - s = s * (s + 1); - if (s & 2) - retval = -retval; - } - goto tail_recurse; - } - /* - * we know p is odd since we have cast out 2s - * precondition that q is odd guarantees both odd. - * - * quadratic reciprocity - * J(p,q) = (-1)^((p-1)(q-1)/4) * J(q,p) - */ - if ((s = mpz_scan1 (pptr, 1)) <= 2 && (s + mpz_scan1 (qptr, 1)) <= 2) - retval = -retval; - - mtmp = pptr; pptr = qptr; qptr = mtmp; - goto tail_recurse2; -done: - mpz_clear (p); - mpz_clear (q); - mpz_clear (qdiv2); -#ifdef Q_MINUS_1 - mpz_clear (q_minus_1); -#endif - return retval; -} diff --git a/contrib/libgmp/mpz/mod.c b/contrib/libgmp/mpz/mod.c deleted file mode 100644 index b2b8b39bbed2..000000000000 --- a/contrib/libgmp/mpz/mod.c +++ /dev/null @@ -1,63 +0,0 @@ -/* mpz_mod -- The mathematical mod function. - -Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_mod (mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_mod (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the remainder has been - preliminary calculated. We have to copy it to temporary space if it's - the same variable as REM. */ - if (rem == divisor) - { - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - mpz_tdiv_r (rem, dividend, divisor); - - if (rem->_mp_size != 0) - { - if (dividend->_mp_size < 0) - if (divisor->_mp_size < 0) - mpz_sub (rem, rem, divisor); - else - mpz_add (rem, rem, divisor); - } - - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/mul.c b/contrib/libgmp/mpz/mul.c deleted file mode 100644 index 47ce8e3548d7..000000000000 --- a/contrib/libgmp/mpz/mul.c +++ /dev/null @@ -1,127 +0,0 @@ -/* mpz_mul -- Multiply two integers. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_mul (mpz_ptr w, mpz_srcptr u, mpz_srcptr v) -#else -mpz_mul (w, u, v) - mpz_ptr w; - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -mult (mpz_srcptr u, mpz_srcptr v, mpz_ptr w) -#else -mult (u, v, w) - mpz_srcptr u; - mpz_srcptr v; - mpz_ptr w; -#endif -#endif /* BERKELEY_MP */ -{ - mp_size_t usize = u->_mp_size; - mp_size_t vsize = v->_mp_size; - mp_size_t wsize; - mp_size_t sign_product; - mp_ptr up, vp; - mp_ptr wp; - mp_ptr free_me = NULL; - size_t free_me_size; - mp_limb_t cy_limb; - TMP_DECL (marker); - - TMP_MARK (marker); - sign_product = usize ^ vsize; - usize = ABS (usize); - vsize = ABS (vsize); - - if (usize < vsize) - { - /* Swap U and V. */ - {const __mpz_struct *t = u; u = v; v = t;} - {mp_size_t t = usize; usize = vsize; vsize = t;} - } - - up = u->_mp_d; - vp = v->_mp_d; - wp = w->_mp_d; - - /* Ensure W has space enough to store the result. */ - wsize = usize + vsize; - if (w->_mp_alloc < wsize) - { - if (wp == up || wp == vp) - { - free_me = wp; - free_me_size = w->_mp_alloc; - } - else - (*_mp_free_func) (wp, w->_mp_alloc * BYTES_PER_MP_LIMB); - - w->_mp_alloc = wsize; - wp = (mp_ptr) (*_mp_allocate_func) (wsize * BYTES_PER_MP_LIMB); - w->_mp_d = wp; - } - else - { - /* Make U and V not overlap with W. */ - if (wp == up) - { - /* W and U are identical. Allocate temporary space for U. */ - up = (mp_ptr) TMP_ALLOC (usize * BYTES_PER_MP_LIMB); - /* Is V identical too? Keep it identical with U. */ - if (wp == vp) - vp = up; - /* Copy to the temporary space. */ - MPN_COPY (up, wp, usize); - } - else if (wp == vp) - { - /* W and V are identical. Allocate temporary space for V. */ - vp = (mp_ptr) TMP_ALLOC (vsize * BYTES_PER_MP_LIMB); - /* Copy to the temporary space. */ - MPN_COPY (vp, wp, vsize); - } - } - - if (vsize == 0) - { - wsize = 0; - } - else - { - cy_limb = mpn_mul (wp, up, usize, vp, vsize); - wsize = usize + vsize; - wsize -= cy_limb == 0; - } - - w->_mp_size = sign_product < 0 ? -wsize : wsize; - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/mul_2exp.c b/contrib/libgmp/mpz/mul_2exp.c deleted file mode 100644 index 4d66a9877e3a..000000000000 --- a/contrib/libgmp/mpz/mul_2exp.c +++ /dev/null @@ -1,76 +0,0 @@ -/* mpz_mul_2exp -- Multiply a bignum by 2**CNT - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_mul_2exp (mpz_ptr w, mpz_srcptr u, unsigned long int cnt) -#else -mpz_mul_2exp (w, u, cnt) - mpz_ptr w; - mpz_srcptr u; - unsigned long int cnt; -#endif -{ - mp_size_t usize = u->_mp_size; - mp_size_t abs_usize = ABS (usize); - mp_size_t wsize; - mp_size_t limb_cnt; - mp_ptr wp; - mp_limb_t wlimb; - - if (usize == 0) - { - w->_mp_size = 0; - return; - } - - limb_cnt = cnt / BITS_PER_MP_LIMB; - wsize = abs_usize + limb_cnt + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - wp = w->_mp_d; - wsize = abs_usize + limb_cnt; - - cnt %= BITS_PER_MP_LIMB; - if (cnt != 0) - { - wlimb = mpn_lshift (wp + limb_cnt, u->_mp_d, abs_usize, cnt); - if (wlimb != 0) - { - wp[wsize] = wlimb; - wsize++; - } - } - else - { - MPN_COPY_DECR (wp + limb_cnt, u->_mp_d, abs_usize); - } - - /* Zero all whole limbs at low end. Do it here and not before calling - mpn_lshift, not to lose for U == W. */ - MPN_ZERO (wp, limb_cnt); - - w->_mp_size = usize >= 0 ? wsize : -wsize; -} diff --git a/contrib/libgmp/mpz/mul_ui.c b/contrib/libgmp/mpz/mul_ui.c deleted file mode 100644 index f1f72695904b..000000000000 --- a/contrib/libgmp/mpz/mul_ui.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_mul_ui(product, multiplier, small_multiplicand) -- Set - PRODUCT to MULTIPLICATOR times SMALL_MULTIPLICAND. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_mul_ui (mpz_ptr prod, mpz_srcptr mult, unsigned long int small_mult) -#else -mpz_mul_ui (prod, mult, small_mult) - mpz_ptr prod; - mpz_srcptr mult; - unsigned long int small_mult; -#endif -{ - mp_size_t size = mult->_mp_size; - mp_size_t sign_product = size; - mp_limb_t cy; - mp_size_t prod_size; - mp_ptr prod_ptr; - - size = ABS (size); - - if (size == 0 || small_mult == 0) - { - prod->_mp_size = 0; - return; - } - - prod_size = size + 1; - if (prod->_mp_alloc < prod_size) - _mpz_realloc (prod, prod_size); - - prod_ptr = prod->_mp_d; - - cy = mpn_mul_1 (prod_ptr, mult->_mp_d, size, (mp_limb_t) small_mult); - if (cy != 0) - { - prod_ptr[size] = cy; - size++; - } - - prod->_mp_size = sign_product >= 0 ? size : -size; -} diff --git a/contrib/libgmp/mpz/neg.c b/contrib/libgmp/mpz/neg.c deleted file mode 100644 index 0b48e5c7b4fb..000000000000 --- a/contrib/libgmp/mpz/neg.c +++ /dev/null @@ -1,53 +0,0 @@ -/* mpz_neg(mpz_ptr dst, mpz_ptr src) -- Assign the negated value of SRC to DST. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_neg (mpz_ptr w, mpz_srcptr u) -#else -mpz_neg (w, u) - mpz_ptr w; - mpz_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t usize, size; - - usize = u->_mp_size; - - if (u != w) - { - size = ABS (usize); - - if (w->_mp_alloc < size) - _mpz_realloc (w, size); - - wp = w->_mp_d; - up = u->_mp_d; - - MPN_COPY (wp, up, size); - } - - w->_mp_size = -usize; -} diff --git a/contrib/libgmp/mpz/out_raw.c b/contrib/libgmp/mpz/out_raw.c deleted file mode 100644 index 35d311b43874..000000000000 --- a/contrib/libgmp/mpz/out_raw.c +++ /dev/null @@ -1,89 +0,0 @@ -/* mpz_out_raw -- Output a mpz_t in binary. Use an endianess and word size - independent format. - -Copyright (C) 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> - -#include "gmp.h" -#include "gmp-impl.h" - -size_t -#if __STDC__ -mpz_out_raw (FILE *stream, mpz_srcptr x) -#else -mpz_out_raw (stream, x) - FILE *stream; - mpz_srcptr x; -#endif -{ - int i; - mp_size_t s; - mp_size_t xsize = ABS (x->_mp_size); - mp_srcptr xp = x->_mp_d; - mp_size_t out_bytesize; - mp_limb_t hi_limb; - int n_bytes_in_hi_limb; - - if (stream == 0) - stream = stdout; - - if (xsize == 0) - { - for (i = 4 - 1; i >= 0; i--) - fputc (0, stream); - return ferror (stream) ? 0 : 4; - } - - hi_limb = xp[xsize - 1]; - for (i = BYTES_PER_MP_LIMB - 1; i > 0; i--) - { - if ((hi_limb >> i * BITS_PER_CHAR) != 0) - break; - } - n_bytes_in_hi_limb = i + 1; - out_bytesize = BYTES_PER_MP_LIMB * (xsize - 1) + n_bytes_in_hi_limb; - if (x->_mp_size < 0) - out_bytesize = -out_bytesize; - - /* Make the size 4 bytes on all machines, to make the format portable. */ - for (i = 4 - 1; i >= 0; i--) - fputc ((out_bytesize >> (i * BITS_PER_CHAR)) % (1 << BITS_PER_CHAR), - stream); - - /* Output from the most significant limb to the least significant limb, - with each limb also output in decreasing significance order. */ - - /* Output the most significant limb separately, since we will only - output some of its bytes. */ - for (i = n_bytes_in_hi_limb - 1; i >= 0; i--) - fputc ((hi_limb >> (i * BITS_PER_CHAR)) % (1 << BITS_PER_CHAR), stream); - - /* Output the remaining limbs. */ - for (s = xsize - 2; s >= 0; s--) - { - mp_limb_t x_limb; - - x_limb = xp[s]; - for (i = BYTES_PER_MP_LIMB - 1; i >= 0; i--) - fputc ((x_limb >> (i * BITS_PER_CHAR)) % (1 << BITS_PER_CHAR), stream); - } - return ferror (stream) ? 0 : ABS (out_bytesize) + 4; -} diff --git a/contrib/libgmp/mpz/out_str.c b/contrib/libgmp/mpz/out_str.c deleted file mode 100644 index 909f53346d23..000000000000 --- a/contrib/libgmp/mpz/out_str.c +++ /dev/null @@ -1,108 +0,0 @@ -/* mpz_out_str(stream, base, integer) -- Output to STREAM the multi prec. - integer INTEGER in base BASE. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" - -size_t -#if __STDC__ -mpz_out_str (FILE *stream, int base, mpz_srcptr x) -#else -mpz_out_str (stream, base, x) - FILE *stream; - int base; - mpz_srcptr x; -#endif -{ - mp_ptr xp; - mp_size_t x_size = x->_mp_size; - unsigned char *str; - size_t str_size; - size_t i; - size_t written; - char *num_to_text; - TMP_DECL (marker); - - if (stream == 0) - stream = stdout; - - if (base >= 0) - { - if (base == 0) - base = 10; - num_to_text = "0123456789abcdefghijklmnopqrstuvwxyz"; - } - else - { - base = -base; - num_to_text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - } - - if (x_size == 0) - { - fputc ('0', stream); - return ferror (stream) ? 0 : 1; - } - - written = 0; - - if (x_size < 0) - { - fputc ('-', stream); - x_size = -x_size; - written = 1; - } - - TMP_MARK (marker); - str_size = ((size_t) (x_size * BITS_PER_MP_LIMB - * __mp_bases[base].chars_per_bit_exactly)) + 3; - str = (unsigned char *) TMP_ALLOC (str_size); - - /* Move the number to convert into temporary space, since mpn_get_str - clobbers its argument + needs one extra high limb.... */ - xp = (mp_ptr) TMP_ALLOC ((x_size + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (xp, x->_mp_d, x_size); - - str_size = mpn_get_str (str, base, xp, x_size); - - /* mpn_get_str might make some leading zeros. Skip them. */ - while (*str == 0) - { - str_size--; - str++; - } - - /* Translate to printable chars. */ - for (i = 0; i < str_size; i++) - str[i] = num_to_text[str[i]]; - str[str_size] = 0; - - { - size_t fwret; - fwret = fwrite ((char *) str, 1, str_size, stream); - written += fwret; - } - - TMP_FREE (marker); - return ferror (stream) ? 0 : written; -} diff --git a/contrib/libgmp/mpz/perfsqr.c b/contrib/libgmp/mpz/perfsqr.c deleted file mode 100644 index cdf1b5a27114..000000000000 --- a/contrib/libgmp/mpz/perfsqr.c +++ /dev/null @@ -1,41 +0,0 @@ -/* mpz_perfect_square_p(arg) -- Return non-zero if ARG is a perfect square, - zero otherwise. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_perfect_square_p (mpz_srcptr a) -#else -mpz_perfect_square_p (a) - mpz_srcptr a; -#endif -{ - mp_size_t asize = a->_mp_size; - - /* No negative numbers are perfect squares. */ - if (asize < 0) - return 0; - - return mpn_perfect_square_p (a->_mp_d, asize); -} diff --git a/contrib/libgmp/mpz/popcount.c b/contrib/libgmp/mpz/popcount.c deleted file mode 100644 index a97938030938..000000000000 --- a/contrib/libgmp/mpz/popcount.c +++ /dev/null @@ -1,42 +0,0 @@ -/* mpz_popcount(mpz_ptr op) -- Population count of OP. If the operand is - negative, return ~0 (a novel representation of infinity). - -Copyright (C) 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_popcount (mpz_srcptr u) -#else -mpz_popcount (u) - mpz_srcptr u; -#endif -{ - mp_size_t usize; - - usize = u->_mp_size; - - if ((usize) < 0) - return ~ (unsigned long int) 0; - - return mpn_popcount (u->_mp_d, usize); -} diff --git a/contrib/libgmp/mpz/pow_ui.c b/contrib/libgmp/mpz/pow_ui.c deleted file mode 100644 index d8cf7a610684..000000000000 --- a/contrib/libgmp/mpz/pow_ui.c +++ /dev/null @@ -1,129 +0,0 @@ -/* mpz_pow_ui(res, base, exp) -- Set RES to BASE**EXP. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#ifdef BERKELEY_MP -#include "mp.h" -#endif -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_pow_ui (mpz_ptr r, mpz_srcptr b, unsigned long int e) -#else -mpz_pow_ui (r, b, e) - mpz_ptr r; - mpz_srcptr b; - unsigned long int e; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -rpow (const MINT *b, signed short int e, MINT *r) -#else -rpow (b, e, r) - const MINT *b; - signed short int e; - MINT *r; -#endif -#endif /* BERKELEY_MP */ -{ - mp_ptr rp, bp, tp, xp; - mp_size_t rsize, bsize; - int cnt, i; - mp_limb_t blimb; - TMP_DECL (marker); - - bsize = ABS (b->_mp_size); - - /* Single out cases that give result == 0 or 1. These tests are here - to simplify the general code below, not to optimize. */ - if (e == 0) - { - r->_mp_d[0] = 1; - r->_mp_size = 1; - return; - } - if (bsize == 0 -#ifdef BERKELEY_MP - || e < 0 -#endif - ) - { - r->_mp_size = 0; - return; - } - - bp = b->_mp_d; - - blimb = bp[bsize - 1]; - if (bsize == 1 && blimb < 0x100) - { - /* Estimate space requirements accurately. Using the code from the - `else' path would over-estimate space requirements wildly. */ - float lb = __mp_bases[blimb].chars_per_bit_exactly; - rsize = 2 + ((mp_size_t) (e / lb) / BITS_PER_MP_LIMB); - } - else - { - /* Over-estimate space requirements somewhat. */ - count_leading_zeros (cnt, blimb); - rsize = bsize * e - cnt * e / BITS_PER_MP_LIMB + 1; - } - - TMP_MARK (marker); - - /* The two areas are used to alternatingly hold the input and recieve the - product for mpn_mul. (This scheme is used to fulfill the requirements - of mpn_mul; that the product space may not be the same as any of the - input operands.) */ - rp = (mp_ptr) TMP_ALLOC (rsize * BYTES_PER_MP_LIMB); - tp = (mp_ptr) TMP_ALLOC (rsize * BYTES_PER_MP_LIMB); - - MPN_COPY (rp, bp, bsize); - rsize = bsize; - count_leading_zeros (cnt, e); - - for (i = BITS_PER_MP_LIMB - cnt - 2; i >= 0; i--) - { - mpn_mul_n (tp, rp, rp, rsize); - rsize = 2 * rsize; - rsize -= tp[rsize - 1] == 0; - xp = tp; tp = rp; rp = xp; - - if ((e & ((mp_limb_t) 1 << i)) != 0) - { - rsize = rsize + bsize - (mpn_mul (tp, rp, rsize, bp, bsize) == 0); - xp = tp; tp = rp; rp = xp; - } - } - - /* Now then we know the exact space requirements, reallocate if - necessary. */ - if (r->_mp_alloc < rsize) - _mpz_realloc (r, rsize); - - MPN_COPY (r->_mp_d, rp, rsize); - r->_mp_size = (e & 1) == 0 || b->_mp_size >= 0 ? rsize : -rsize; - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/powm.c b/contrib/libgmp/mpz/powm.c deleted file mode 100644 index 5dcd1b128248..000000000000 --- a/contrib/libgmp/mpz/powm.c +++ /dev/null @@ -1,276 +0,0 @@ -/* mpz_powm(res,base,exp,mod) -- Set RES to (base**exp) mod MOD. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_powm (mpz_ptr res, mpz_srcptr base, mpz_srcptr exp, mpz_srcptr mod) -#else -mpz_powm (res, base, exp, mod) - mpz_ptr res; - mpz_srcptr base; - mpz_srcptr exp; - mpz_srcptr mod; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -pow (mpz_srcptr base, mpz_srcptr exp, mpz_srcptr mod, mpz_ptr res) -#else -pow (base, exp, mod, res) - mpz_srcptr base; - mpz_srcptr exp; - mpz_srcptr mod; - mpz_ptr res; -#endif -#endif /* BERKELEY_MP */ -{ - mp_ptr rp, ep, mp, bp; - mp_size_t esize, msize, bsize, rsize; - mp_size_t size; - int mod_shift_cnt; - int negative_result; - mp_limb_t *free_me = NULL; - size_t free_me_size; - TMP_DECL (marker); - - esize = ABS (exp->_mp_size); - msize = ABS (mod->_mp_size); - size = 2 * msize; - - rp = res->_mp_d; - ep = exp->_mp_d; - - if (msize == 0) - msize = 1 / msize; /* provoke a signal */ - - if (esize == 0) - { - /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0 - depending on if MOD equals 1. */ - rp[0] = 1; - res->_mp_size = (msize == 1 && (mod->_mp_d)[0] == 1) ? 0 : 1; - return; - } - - TMP_MARK (marker); - - /* Normalize MOD (i.e. make its most significant bit set) as required by - mpn_divmod. This will make the intermediate values in the calculation - slightly larger, but the correct result is obtained after a final - reduction using the original MOD value. */ - - mp = (mp_ptr) TMP_ALLOC (msize * BYTES_PER_MP_LIMB); - count_leading_zeros (mod_shift_cnt, mod->_mp_d[msize - 1]); - if (mod_shift_cnt != 0) - mpn_lshift (mp, mod->_mp_d, msize, mod_shift_cnt); - else - MPN_COPY (mp, mod->_mp_d, msize); - - bsize = ABS (base->_mp_size); - if (bsize > msize) - { - /* The base is larger than the module. Reduce it. */ - - /* Allocate (BSIZE + 1) with space for remainder and quotient. - (The quotient is (bsize - msize + 1) limbs.) */ - bp = (mp_ptr) TMP_ALLOC ((bsize + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (bp, base->_mp_d, bsize); - /* We don't care about the quotient, store it above the remainder, - at BP + MSIZE. */ - mpn_divmod (bp + msize, bp, bsize, mp, msize); - bsize = msize; - /* Canonicalize the base, since we are going to multiply with it - quite a few times. */ - MPN_NORMALIZE (bp, bsize); - } - else - bp = base->_mp_d; - - if (bsize == 0) - { - res->_mp_size = 0; - TMP_FREE (marker); - return; - } - - if (res->_mp_alloc < size) - { - /* We have to allocate more space for RES. If any of the input - parameters are identical to RES, defer deallocation of the old - space. */ - - if (rp == ep || rp == mp || rp == bp) - { - free_me = rp; - free_me_size = res->_mp_alloc; - } - else - (*_mp_free_func) (rp, res->_mp_alloc * BYTES_PER_MP_LIMB); - - rp = (mp_ptr) (*_mp_allocate_func) (size * BYTES_PER_MP_LIMB); - res->_mp_alloc = size; - res->_mp_d = rp; - } - else - { - /* Make BASE, EXP and MOD not overlap with RES. */ - if (rp == bp) - { - /* RES and BASE are identical. Allocate temp. space for BASE. */ - bp = (mp_ptr) TMP_ALLOC (bsize * BYTES_PER_MP_LIMB); - MPN_COPY (bp, rp, bsize); - } - if (rp == ep) - { - /* RES and EXP are identical. Allocate temp. space for EXP. */ - ep = (mp_ptr) TMP_ALLOC (esize * BYTES_PER_MP_LIMB); - MPN_COPY (ep, rp, esize); - } - if (rp == mp) - { - /* RES and MOD are identical. Allocate temporary space for MOD. */ - mp = (mp_ptr) TMP_ALLOC (msize * BYTES_PER_MP_LIMB); - MPN_COPY (mp, rp, msize); - } - } - - MPN_COPY (rp, bp, bsize); - rsize = bsize; - - { - mp_size_t i; - mp_ptr xp = (mp_ptr) TMP_ALLOC (2 * (msize + 1) * BYTES_PER_MP_LIMB); - int c; - mp_limb_t e; - mp_limb_t carry_limb; - - negative_result = (ep[0] & 1) && base->_mp_size < 0; - - i = esize - 1; - e = ep[i]; - count_leading_zeros (c, e); - e = (e << c) << 1; /* shift the exp bits to the left, lose msb */ - c = BITS_PER_MP_LIMB - 1 - c; - - /* Main loop. - - Make the result be pointed to alternately by XP and RP. This - helps us avoid block copying, which would otherwise be necessary - with the overlap restrictions of mpn_divmod. With 50% probability - the result after this loop will be in the area originally pointed - by RP (==RES->_mp_d), and with 50% probability in the area originally - pointed to by XP. */ - - for (;;) - { - while (c != 0) - { - mp_ptr tp; - mp_size_t xsize; - - mpn_mul_n (xp, rp, rp, rsize); - xsize = 2 * rsize; - if (xsize > msize) - { - mpn_divmod (xp + msize, xp, xsize, mp, msize); - xsize = msize; - } - - tp = rp; rp = xp; xp = tp; - rsize = xsize; - - if ((mp_limb_signed_t) e < 0) - { - mpn_mul (xp, rp, rsize, bp, bsize); - xsize = rsize + bsize; - if (xsize > msize) - { - mpn_divmod (xp + msize, xp, xsize, mp, msize); - xsize = msize; - } - - tp = rp; rp = xp; xp = tp; - rsize = xsize; - } - e <<= 1; - c--; - } - - i--; - if (i < 0) - break; - e = ep[i]; - c = BITS_PER_MP_LIMB; - } - - /* We shifted MOD, the modulo reduction argument, left MOD_SHIFT_CNT - steps. Adjust the result by reducing it with the original MOD. - - Also make sure the result is put in RES->_mp_d (where it already - might be, see above). */ - - if (mod_shift_cnt != 0) - { - carry_limb = mpn_lshift (res->_mp_d, rp, rsize, mod_shift_cnt); - rp = res->_mp_d; - if (carry_limb != 0) - { - rp[rsize] = carry_limb; - rsize++; - } - } - else - { - MPN_COPY (res->_mp_d, rp, rsize); - rp = res->_mp_d; - } - - if (rsize >= msize) - { - mpn_divmod (rp + msize, rp, rsize, mp, msize); - rsize = msize; - } - - /* Remove any leading zero words from the result. */ - if (mod_shift_cnt != 0) - mpn_rshift (rp, rp, rsize, mod_shift_cnt); - MPN_NORMALIZE (rp, rsize); - } - - if (negative_result && rsize != 0) - { - if (mod_shift_cnt != 0) - mpn_rshift (mp, mp, msize, mod_shift_cnt); - mpn_sub (rp, mp, msize, rp, rsize); - rsize = msize; - MPN_NORMALIZE (rp, rsize); - } - res->_mp_size = rsize; - - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/powm_ui.c b/contrib/libgmp/mpz/powm_ui.c deleted file mode 100644 index 596815a0ea4c..000000000000 --- a/contrib/libgmp/mpz/powm_ui.c +++ /dev/null @@ -1,234 +0,0 @@ -/* mpz_powm_ui(res,base,exp,mod) -- Set RES to (base**exp) mod MOD. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_powm_ui (mpz_ptr res, mpz_srcptr base, unsigned long int exp, mpz_srcptr mod) -#else -mpz_powm_ui (res, base, exp, mod) - mpz_ptr res; - mpz_srcptr base; - unsigned long int exp; - mpz_srcptr mod; -#endif -{ - mp_ptr rp, mp, bp; - mp_size_t msize, bsize, rsize; - mp_size_t size; - int mod_shift_cnt; - int negative_result; - mp_limb_t *free_me = NULL; - size_t free_me_size; - TMP_DECL (marker); - - msize = ABS (mod->_mp_size); - size = 2 * msize; - - rp = res->_mp_d; - - if (msize == 0) - msize = 1 / msize; /* provoke a signal */ - - if (exp == 0) - { - rp[0] = 1; - res->_mp_size = (msize == 1 && (mod->_mp_d)[0] == 1) ? 0 : 1; - return; - } - - TMP_MARK (marker); - - /* Normalize MOD (i.e. make its most significant bit set) as required by - mpn_divmod. This will make the intermediate values in the calculation - slightly larger, but the correct result is obtained after a final - reduction using the original MOD value. */ - - mp = (mp_ptr) TMP_ALLOC (msize * BYTES_PER_MP_LIMB); - count_leading_zeros (mod_shift_cnt, mod->_mp_d[msize - 1]); - if (mod_shift_cnt != 0) - mpn_lshift (mp, mod->_mp_d, msize, mod_shift_cnt); - else - MPN_COPY (mp, mod->_mp_d, msize); - - bsize = ABS (base->_mp_size); - if (bsize > msize) - { - /* The base is larger than the module. Reduce it. */ - - /* Allocate (BSIZE + 1) with space for remainder and quotient. - (The quotient is (bsize - msize + 1) limbs.) */ - bp = (mp_ptr) TMP_ALLOC ((bsize + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (bp, base->_mp_d, bsize); - /* We don't care about the quotient, store it above the remainder, - at BP + MSIZE. */ - mpn_divmod (bp + msize, bp, bsize, mp, msize); - bsize = msize; - /* Canonicalize the base, since we are going to multiply with it - quite a few times. */ - MPN_NORMALIZE (bp, bsize); - } - else - bp = base->_mp_d; - - if (bsize == 0) - { - res->_mp_size = 0; - TMP_FREE (marker); - return; - } - - if (res->_mp_alloc < size) - { - /* We have to allocate more space for RES. If any of the input - parameters are identical to RES, defer deallocation of the old - space. */ - - if (rp == mp || rp == bp) - { - free_me = rp; - free_me_size = res->_mp_alloc; - } - else - (*_mp_free_func) (rp, res->_mp_alloc * BYTES_PER_MP_LIMB); - - rp = (mp_ptr) (*_mp_allocate_func) (size * BYTES_PER_MP_LIMB); - res->_mp_alloc = size; - res->_mp_d = rp; - } - else - { - /* Make BASE, EXP and MOD not overlap with RES. */ - if (rp == bp) - { - /* RES and BASE are identical. Allocate temp. space for BASE. */ - bp = (mp_ptr) TMP_ALLOC (bsize * BYTES_PER_MP_LIMB); - MPN_COPY (bp, rp, bsize); - } - if (rp == mp) - { - /* RES and MOD are identical. Allocate temporary space for MOD. */ - mp = (mp_ptr) TMP_ALLOC (msize * BYTES_PER_MP_LIMB); - MPN_COPY (mp, rp, msize); - } - } - - MPN_COPY (rp, bp, bsize); - rsize = bsize; - - { - mp_ptr xp = (mp_ptr) TMP_ALLOC (2 * (msize + 1) * BYTES_PER_MP_LIMB); - int c; - mp_limb_t e; - mp_limb_t carry_limb; - - negative_result = (exp & 1) && base->_mp_size < 0; - - e = exp; - count_leading_zeros (c, e); - e = (e << c) << 1; /* shift the exp bits to the left, lose msb */ - c = BITS_PER_MP_LIMB - 1 - c; - - /* Main loop. - - Make the result be pointed to alternately by XP and RP. This - helps us avoid block copying, which would otherwise be necessary - with the overlap restrictions of mpn_divmod. With 50% probability - the result after this loop will be in the area originally pointed - by RP (==RES->_mp_d), and with 50% probability in the area originally - pointed to by XP. */ - - while (c != 0) - { - mp_ptr tp; - mp_size_t xsize; - - mpn_mul_n (xp, rp, rp, rsize); - xsize = 2 * rsize; - if (xsize > msize) - { - mpn_divmod (xp + msize, xp, xsize, mp, msize); - xsize = msize; - } - - tp = rp; rp = xp; xp = tp; - rsize = xsize; - - if ((mp_limb_signed_t) e < 0) - { - mpn_mul (xp, rp, rsize, bp, bsize); - xsize = rsize + bsize; - if (xsize > msize) - { - mpn_divmod (xp + msize, xp, xsize, mp, msize); - xsize = msize; - } - - tp = rp; rp = xp; xp = tp; - rsize = xsize; - } - e <<= 1; - c--; - } - - /* We shifted MOD, the modulo reduction argument, left MOD_SHIFT_CNT - steps. Adjust the result by reducing it with the original MOD. - - Also make sure the result is put in RES->_mp_d (where it already - might be, see above). */ - - if (mod_shift_cnt != 0) - { - carry_limb = mpn_lshift (res->_mp_d, rp, rsize, mod_shift_cnt); - rp = res->_mp_d; - if (carry_limb != 0) - { - rp[rsize] = carry_limb; - rsize++; - } - } - else - { - MPN_COPY (res->_mp_d, rp, rsize); - rp = res->_mp_d; - } - - if (rsize >= msize) - { - mpn_divmod (rp + msize, rp, rsize, mp, msize); - rsize = msize; - } - - /* Remove any leading zero words from the result. */ - if (mod_shift_cnt != 0) - mpn_rshift (rp, rp, rsize, mod_shift_cnt); - MPN_NORMALIZE (rp, rsize); - } - - res->_mp_size = negative_result == 0 ? rsize : -rsize; - - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/pprime_p.c b/contrib/libgmp/mpz/pprime_p.c deleted file mode 100644 index 494de14cae56..000000000000 --- a/contrib/libgmp/mpz/pprime_p.c +++ /dev/null @@ -1,115 +0,0 @@ -/* mpz_probab_prime_p -- - An implementation of the probabilistic primality test found in Knuth's - Seminumerical Algorithms book. If the function mpz_probab_prime_p() - returns 0 then n is not prime. If it returns 1, then n is 'probably' - prime. The probability of a false positive is (1/4)**reps, where - reps is the number of internal passes of the probabilistic algorithm. - Knuth indicates that 25 passes are reasonable. - -Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc. -Contributed by John Amanatides. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" - -static int -possibly_prime (n, n_minus_1, x, y, q, k) - mpz_srcptr n; - mpz_srcptr n_minus_1; - mpz_ptr x; - mpz_ptr y; - mpz_srcptr q; - unsigned long int k; -{ - unsigned long int i; - - /* find random x s.t. 1 < x < n */ - do - { - mpz_random (x, mpz_size (n)); - mpz_mmod (x, x, n); - } - while (mpz_cmp_ui (x, 1L) <= 0); - - mpz_powm (y, x, q, n); - - if (mpz_cmp_ui (y, 1L) == 0 || mpz_cmp (y, n_minus_1) == 0) - return 1; - - for (i = 1; i < k; i++) - { - mpz_powm_ui (y, y, 2L, n); - if (mpz_cmp (y, n_minus_1) == 0) - return 1; - if (mpz_cmp_ui (y, 1L) == 0) - return 0; - } - return 0; -} - -int -#if __STDC__ -mpz_probab_prime_p (mpz_srcptr m, int reps) -#else -mpz_probab_prime_p (m, reps) - mpz_srcptr m; - int reps; -#endif -{ - mpz_t n, n_minus_1, x, y, q; - int i, is_prime; - unsigned long int k; - - mpz_init (n); - /* Take the absolute value of M, to handle positive and negative primes. */ - mpz_abs (n, m); - - if (mpz_cmp_ui (n, 3L) <= 0) - { - mpz_clear (n); - return mpz_cmp_ui (n, 1L) > 0; - } - - if ((mpz_get_ui (n) & 1) == 0) - { - mpz_clear (n); - return 0; /* even */ - } - - mpz_init (n_minus_1); - mpz_sub_ui (n_minus_1, n, 1L); - mpz_init (x); - mpz_init (y); - - /* find q and k, s.t. n = 1 + 2**k * q */ - mpz_init_set (q, n_minus_1); - k = mpz_scan1 (q, 0); - mpz_tdiv_q_2exp (q, q, k); - - is_prime = 1; - for (i = 0; i < reps && is_prime; i++) - is_prime &= possibly_prime (n, n_minus_1, x, y, q, k); - - mpz_clear (n_minus_1); - mpz_clear (n); - mpz_clear (x); - mpz_clear (y); - mpz_clear (q); - return is_prime; -} diff --git a/contrib/libgmp/mpz/random.c b/contrib/libgmp/mpz/random.c deleted file mode 100644 index ab41eef92664..000000000000 --- a/contrib/libgmp/mpz/random.c +++ /dev/null @@ -1,56 +0,0 @@ -/* mpz_random -- Generate a random mpz_t of specified size. - This function is non-portable and generates poor random numbers. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void -#if __STDC__ -mpz_random (mpz_ptr x, mp_size_t size) -#else -mpz_random (x, size) - mpz_ptr x; - mp_size_t size; -#endif -{ - mp_size_t i; - mp_limb_t ran; - mp_ptr xp; - mp_size_t abs_size; - - abs_size = ABS (size); - - if (x->_mp_alloc < abs_size) - _mpz_realloc (x, abs_size); - - xp = x->_mp_d; - - for (i = 0; i < abs_size; i++) - { - ran = urandom (); - xp[i] = ran; - } - - MPN_NORMALIZE (xp, abs_size); - x->_mp_size = size < 0 ? -abs_size : abs_size; -} diff --git a/contrib/libgmp/mpz/random2.c b/contrib/libgmp/mpz/random2.c deleted file mode 100644 index 725a8b49143d..000000000000 --- a/contrib/libgmp/mpz/random2.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_random2 -- Generate a positive random mpz_t of specified size, with - long runs of consecutive ones and zeros in the binary representation. - Meant for testing of other MP routines. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_random2 (mpz_ptr x, mp_size_t size) -#else -mpz_random2 (x, size) - mpz_ptr x; - mp_size_t size; -#endif -{ - mp_size_t abs_size; - - abs_size = ABS (size); - if (abs_size != 0) - { - if (x->_mp_alloc < abs_size) - _mpz_realloc (x, abs_size); - - mpn_random2 (x->_mp_d, abs_size); - } - - x->_mp_size = size; -} diff --git a/contrib/libgmp/mpz/realloc.c b/contrib/libgmp/mpz/realloc.c deleted file mode 100644 index 2c2a5da927e8..000000000000 --- a/contrib/libgmp/mpz/realloc.c +++ /dev/null @@ -1,52 +0,0 @@ -/* _mpz_realloc -- make the mpz_t have NEW_SIZE digits allocated. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void * -#if __STDC__ -_mpz_realloc (mpz_ptr m, mp_size_t new_size) -#else -_mpz_realloc (m, new_size) - mpz_ptr m; - mp_size_t new_size; -#endif -{ - /* Never allocate zero space. */ - if (new_size == 0) - new_size = 1; - - m->_mp_d = (mp_ptr) (*_mp_reallocate_func) (m->_mp_d, - m->_mp_alloc * BYTES_PER_MP_LIMB, - new_size * BYTES_PER_MP_LIMB); - m->_mp_alloc = new_size; - -#if 0 - /* This might break some code that reads the size field after - reallocation, in the case the reallocated destination and a - source argument are identical. */ - if (ABS (m->_mp_size) > new_size) - m->_mp_size = 0; -#endif - - return (void *) m->_mp_d; -} diff --git a/contrib/libgmp/mpz/scan0.c b/contrib/libgmp/mpz/scan0.c deleted file mode 100644 index 8e45aa32482e..000000000000 --- a/contrib/libgmp/mpz/scan0.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpz_scan0(op, startbit) -- Scan for the next set bit, starting at startbit. - -Copyright (C) 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_scan0 (mpz_srcptr u, unsigned long int starting_bit) -#else -mpz_scan0 (u, starting_bit) - mpz_srcptr u; - unsigned long int starting_bit; -#endif -{ - return mpn_scan0 (u->_mp_d, starting_bit); -} diff --git a/contrib/libgmp/mpz/scan1.c b/contrib/libgmp/mpz/scan1.c deleted file mode 100644 index 6ecb0aab3866..000000000000 --- a/contrib/libgmp/mpz/scan1.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpz_scan1(op, startbit) -- Scan for the next set bit, starting at startbit. - -Copyright (C) 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_scan1 (mpz_srcptr u, unsigned long int starting_bit) -#else -mpz_scan1 (u, starting_bit) - mpz_srcptr u; - unsigned long int starting_bit; -#endif -{ - return mpn_scan1 (u->_mp_d, starting_bit); -} diff --git a/contrib/libgmp/mpz/set.c b/contrib/libgmp/mpz/set.c deleted file mode 100644 index d94ab7485b74..000000000000 --- a/contrib/libgmp/mpz/set.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_set (dest_integer, src_integer) -- Assign DEST_INTEGER from SRC_INTEGER. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set (mpz_ptr w, mpz_srcptr u) -#else -mpz_set (w, u) - mpz_ptr w; - mpz_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t usize, size; - - usize = u->_mp_size; - size = ABS (usize); - - if (w->_mp_alloc < size) - _mpz_realloc (w, size); - - wp = w->_mp_d; - up = u->_mp_d; - - MPN_COPY (wp, up, size); - w->_mp_size = usize; -} diff --git a/contrib/libgmp/mpz/set_d.c b/contrib/libgmp/mpz/set_d.c deleted file mode 100644 index c09b1d97e6f3..000000000000 --- a/contrib/libgmp/mpz/set_d.c +++ /dev/null @@ -1,93 +0,0 @@ -/* mpz_set_d(integer, val) -- Assign INTEGER with a double value VAL. - -Copyright (C) 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_d (mpz_ptr r, double d) -#else -mpz_set_d (r, d) - mpz_ptr r; - double d; -#endif -{ - int negative; - mp_size_t size; - mp_limb_t tp[3]; - mp_ptr rp; - - negative = d < 0; - d = ABS (d); - - /* Handle small arguments quickly. */ - if (d < MP_BASE_AS_DOUBLE) - { - mp_limb_t tmp; - tmp = d; - PTR(r)[0] = tmp; - SIZ(r) = negative ? -(tmp != 0) : (tmp != 0); - return; - } - - size = __gmp_extract_double (tp, d); - - if (ALLOC(r) < size) - _mpz_realloc (r, size); - - rp = PTR (r); - -#if BITS_PER_MP_LIMB == 32 - switch (size) - { - default: - MPN_ZERO (rp, size - 3); - rp += size - 3; - case 3: - rp[2] = tp[2]; - rp[1] = tp[1]; - rp[0] = tp[0]; - break; - case 2: - rp[1] = tp[2]; - rp[0] = tp[1]; - break; - case 1: - abort (); - } -#else - switch (size) - { - default: - MPN_ZERO (rp, size - 2); - rp += size - 2; - case 2: - rp[1] = tp[1]; - rp[0] = tp[0]; - break; - case 1: - abort (); - } -#endif - - SIZ(r) = negative ? -size : size; -} diff --git a/contrib/libgmp/mpz/set_f.c b/contrib/libgmp/mpz/set_f.c deleted file mode 100644 index 9547907bb3df..000000000000 --- a/contrib/libgmp/mpz/set_f.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_set_f (dest_integer, src_float) -- Assign DEST_INTEGER from SRC_FLOAT. - -Copyright (C) 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_f (mpz_ptr w, mpf_srcptr u) -#else -mpz_set_f (w, u) - mpz_ptr w; - mpf_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t usize, size; - mp_exp_t exp; - - usize = SIZ (u); - size = ABS (usize); - exp = EXP (u); - - if (w->_mp_alloc < exp) - _mpz_realloc (w, exp); - - wp = w->_mp_d; - up = u->_mp_d; - - if (exp <= 0) - { - SIZ (w) = 0; - return; - } - if (exp < size) - { - MPN_COPY (wp, up + size - exp, exp); - } - else - { - MPN_ZERO (wp, exp - size); - MPN_COPY (wp + exp - size, up, size); - } - - w->_mp_size = usize >= 0 ? exp : -exp; -} diff --git a/contrib/libgmp/mpz/set_q.c b/contrib/libgmp/mpz/set_q.c deleted file mode 100644 index 61bd5c70d9c7..000000000000 --- a/contrib/libgmp/mpz/set_q.c +++ /dev/null @@ -1,36 +0,0 @@ -/* mpz_set_q (dest_integer, src_rational) -- Assign DEST_INTEGER from - SRC_rational. - -Copyright (C) 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_q (mpz_ptr w, mpq_srcptr u) -#else -mpz_set_q (w, u) - mpz_ptr w; - mpq_srcptr u; -#endif -{ - mpz_tdiv_q (w, mpq_numref (u), mpq_denref (u)); -} diff --git a/contrib/libgmp/mpz/set_si.c b/contrib/libgmp/mpz/set_si.c deleted file mode 100644 index 82a90a3cc19a..000000000000 --- a/contrib/libgmp/mpz/set_si.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_set_si(integer, val) -- Assign INTEGER with a small value VAL. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_si (mpz_ptr dest, signed long int val) -#else -mpz_set_si (dest, val) - mpz_ptr dest; - signed long int val; -#endif -{ - /* We don't check if the allocation is enough, since the rest of the - package ensures it's at least 1, which is what we need here. */ - if (val > 0) - { - dest->_mp_d[0] = val; - dest->_mp_size = 1; - } - else if (val < 0) - { - dest->_mp_d[0] = -val; - dest->_mp_size = -1; - } - else - dest->_mp_size = 0; -} diff --git a/contrib/libgmp/mpz/set_str.c b/contrib/libgmp/mpz/set_str.c deleted file mode 100644 index d1334b1e0070..000000000000 --- a/contrib/libgmp/mpz/set_str.c +++ /dev/null @@ -1,132 +0,0 @@ -/* mpz_set_str(mp_dest, string, base) -- Convert the \0-terminated - string STRING in base BASE to multiple precision integer in - MP_DEST. Allow white space in the string. If BASE == 0 determine - the base in the C standard way, i.e. 0xhh...h means base 16, - 0oo...o means base 8, otherwise assume base 10. - -Copyright (C) 1991, 1993, 1994, Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <ctype.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -static int -digit_value_in_base (c, base) - int c; - int base; -{ - int digit; - - if (isdigit (c)) - digit = c - '0'; - else if (islower (c)) - digit = c - 'a' + 10; - else if (isupper (c)) - digit = c - 'A' + 10; - else - return -1; - - if (digit < base) - return digit; - return -1; -} - -int -#if __STDC__ -mpz_set_str (mpz_ptr x, const char *str, int base) -#else -mpz_set_str (x, str, base) - mpz_ptr x; - const char *str; - int base; -#endif -{ - size_t str_size; - char *s, *begs; - size_t i; - mp_size_t xsize; - int c; - int negative; - TMP_DECL (marker); - - /* Skip whitespace. */ - do - c = *str++; - while (isspace (c)); - - negative = 0; - if (c == '-') - { - negative = 1; - c = *str++; - } - - if (digit_value_in_base (c, base == 0 ? 10 : base) < 0) - return -1; /* error if no digits */ - - /* If BASE is 0, try to find out the base by looking at the initial - characters. */ - if (base == 0) - { - base = 10; - if (c == '0') - { - base = 8; - c = *str++; - if (c == 'x' || c == 'X') - { - base = 16; - c = *str++; - } - } - } - - TMP_MARK (marker); - str_size = strlen (str - 1); - s = begs = (char *) TMP_ALLOC (str_size + 1); - - for (i = 0; i < str_size; i++) - { - if (!isspace (c)) - { - int dig = digit_value_in_base (c, base); - if (dig < 0) - { - TMP_FREE (marker); - return -1; - } - *s++ = dig; - } - c = *str++; - } - - str_size = s - begs; - - xsize = str_size / __mp_bases[base].chars_per_limb + 1; - if (x->_mp_alloc < xsize) - _mpz_realloc (x, xsize); - - xsize = mpn_set_str (x->_mp_d, (unsigned char *) begs, str_size, base); - x->_mp_size = negative ? -xsize : xsize; - - TMP_FREE (marker); - return 0; -} diff --git a/contrib/libgmp/mpz/set_ui.c b/contrib/libgmp/mpz/set_ui.c deleted file mode 100644 index 73f6cf54adb0..000000000000 --- a/contrib/libgmp/mpz/set_ui.c +++ /dev/null @@ -1,43 +0,0 @@ -/* mpz_set_ui(integer, val) -- Assign INTEGER with a small value VAL. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_ui (mpz_ptr dest, unsigned long int val) -#else -mpz_set_ui (dest, val) - mpz_ptr dest; - unsigned long int val; -#endif -{ - /* We don't check if the allocation is enough, since the rest of the - package ensures it's at least 1, which is what we need here. */ - if (val > 0) - { - dest->_mp_d[0] = val; - dest->_mp_size = 1; - } - else - dest->_mp_size = 0; -} diff --git a/contrib/libgmp/mpz/setbit.c b/contrib/libgmp/mpz/setbit.c deleted file mode 100644 index af59e2cc786b..000000000000 --- a/contrib/libgmp/mpz/setbit.c +++ /dev/null @@ -1,113 +0,0 @@ -/* mpz_setbit -- set a specified bit. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_setbit (mpz_ptr d, unsigned long int bit_index) -#else -mpz_setbit (d, bit_index) - mpz_ptr d; - unsigned long int bit_index; -#endif -{ - mp_size_t dsize = d->_mp_size; - mp_ptr dp = d->_mp_d; - mp_size_t limb_index; - - limb_index = bit_index / BITS_PER_MP_LIMB; - if (dsize >= 0) - { - if (limb_index < dsize) - { - dp[limb_index] |= (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB); - d->_mp_size = dsize; - } - else - { - /* Ugh. The bit should be set outside of the end of the - number. We have to increase the size of the number. */ - if (d->_mp_alloc < limb_index + 1) - { - _mpz_realloc (d, limb_index + 1); - dp = d->_mp_d; - } - MPN_ZERO (dp + dsize, limb_index - dsize); - dp[limb_index] = (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB); - d->_mp_size = limb_index + 1; - } - } - else - { - mp_size_t zero_bound; - - /* Simulate two's complement arithmetic, i.e. simulate - 1. Set OP = ~(OP - 1) [with infinitely many leading ones]. - 2. set the bit. - 3. Set OP = ~OP + 1. */ - - dsize = -dsize; - - /* No upper bound on this loop, we're sure there's a non-zero limb - sooner ot later. */ - for (zero_bound = 0; ; zero_bound++) - if (dp[zero_bound] != 0) - break; - - if (limb_index > zero_bound) - { - if (limb_index < dsize) - dp[limb_index] &= ~((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB)); - else - ; - } - else if (limb_index == zero_bound) - { - dp[limb_index] = ((dp[limb_index] - 1) - & ~((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB))) + 1; - if (dp[limb_index] == 0) - { - mp_size_t i; - for (i = limb_index + 1; i < dsize; i++) - { - dp[i] += 1; - if (dp[i] != 0) - goto fin; - } - /* We got carry all way out beyond the end of D. Increase - its size (and allocation if necessary). */ - dsize++; - if (d->_mp_alloc < dsize) - { - _mpz_realloc (d, dsize); - dp = d->_mp_d; - } - dp[i] = 1; - d->_mp_size = -dsize; - fin:; - } - } - else - ; - } -} diff --git a/contrib/libgmp/mpz/size.c b/contrib/libgmp/mpz/size.c deleted file mode 100644 index 0b09fbeb0770..000000000000 --- a/contrib/libgmp/mpz/size.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpz_size(x) -- return the number of lims currently used by the - value of integer X. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -size_t -#if __STDC__ -mpz_size (mpz_srcptr x) -#else -mpz_size (x) - mpz_srcptr x; -#endif -{ - return ABS (x->_mp_size); -} diff --git a/contrib/libgmp/mpz/sizeinbase.c b/contrib/libgmp/mpz/sizeinbase.c deleted file mode 100644 index 51bd5558acb5..000000000000 --- a/contrib/libgmp/mpz/sizeinbase.c +++ /dev/null @@ -1,60 +0,0 @@ -/* mpz_sizeinbase(x, base) -- return an approximation to the number of - character the integer X would have printed in base BASE. The - approximation is never too small. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -size_t -#if __STDC__ -mpz_sizeinbase (mpz_srcptr x, int base) -#else -mpz_sizeinbase (x, base) - mpz_srcptr x; - int base; -#endif -{ - mp_size_t size = ABS (x->_mp_size); - int lb_base, cnt; - size_t totbits; - - /* Special case for X == 0. */ - if (size == 0) - return 1; - - /* Calculate the total number of significant bits of X. */ - count_leading_zeros (cnt, x->_mp_d[size - 1]); - totbits = size * BITS_PER_MP_LIMB - cnt; - - if ((base & (base - 1)) == 0) - { - /* Special case for powers of 2, giving exact result. */ - - count_leading_zeros (lb_base, base); - lb_base = BITS_PER_MP_LIMB - lb_base - 1; - - return (totbits + lb_base - 1) / lb_base; - } - else - return (size_t) (totbits * __mp_bases[base].chars_per_bit_exactly) + 1; -} diff --git a/contrib/libgmp/mpz/sqrt.c b/contrib/libgmp/mpz/sqrt.c deleted file mode 100644 index 44c554eb5c9d..000000000000 --- a/contrib/libgmp/mpz/sqrt.c +++ /dev/null @@ -1,85 +0,0 @@ -/* mpz_sqrt(root, u) -- Set ROOT to floor(sqrt(U)). - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_sqrt (mpz_ptr root, mpz_srcptr op) -#else -mpz_sqrt (root, op) - mpz_ptr root; - mpz_srcptr op; -#endif -{ - mp_size_t op_size, root_size; - mp_ptr root_ptr, op_ptr; - mp_ptr free_me = NULL; - mp_size_t free_me_size; - TMP_DECL (marker); - - TMP_MARK (marker); - op_size = op->_mp_size; - if (op_size < 0) - op_size = 1 / (op_size > 0); /* Divide by zero for negative OP. */ - - /* The size of the root is accurate after this simple calculation. */ - root_size = (op_size + 1) / 2; - - root_ptr = root->_mp_d; - op_ptr = op->_mp_d; - - if (root->_mp_alloc < root_size) - { - if (root_ptr == op_ptr) - { - free_me = root_ptr; - free_me_size = root->_mp_alloc; - } - else - (*_mp_free_func) (root_ptr, root->_mp_alloc * BYTES_PER_MP_LIMB); - - root->_mp_alloc = root_size; - root_ptr = (mp_ptr) (*_mp_allocate_func) (root_size * BYTES_PER_MP_LIMB); - root->_mp_d = root_ptr; - } - else - { - /* Make OP not overlap with ROOT. */ - if (root_ptr == op_ptr) - { - /* ROOT and OP are identical. Allocate temporary space for OP. */ - op_ptr = (mp_ptr) TMP_ALLOC (op_size * BYTES_PER_MP_LIMB); - /* Copy to the temporary space. Hack: Avoid temporary variable - by using ROOT_PTR. */ - MPN_COPY (op_ptr, root_ptr, op_size); - } - } - - mpn_sqrtrem (root_ptr, NULL, op_ptr, op_size); - - root->_mp_size = root_size; - - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/sqrtrem.c b/contrib/libgmp/mpz/sqrtrem.c deleted file mode 100644 index 757cc5dd569c..000000000000 --- a/contrib/libgmp/mpz/sqrtrem.c +++ /dev/null @@ -1,107 +0,0 @@ -/* mpz_sqrtrem(root,rem,x) -- Set ROOT to floor(sqrt(X)) and REM - to the remainder, i.e. X - ROOT**2. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_sqrtrem (mpz_ptr root, mpz_ptr rem, mpz_srcptr op) -#else -mpz_sqrtrem (root, rem, op) - mpz_ptr root; - mpz_ptr rem; - mpz_srcptr op; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -msqrt (mpz_srcptr op, mpz_ptr root, mpz_ptr rem) -#else -msqrt (op, root, rem) - mpz_srcptr op; - mpz_ptr root; - mpz_ptr rem; -#endif -#endif /* BERKELEY_MP */ -{ - mp_size_t op_size, root_size, rem_size; - mp_ptr root_ptr, op_ptr; - mp_ptr free_me = NULL; - mp_size_t free_me_size; - TMP_DECL (marker); - - TMP_MARK (marker); - op_size = op->_mp_size; - if (op_size < 0) - op_size = 1 / (op_size > 0); /* Divide by zero for negative OP. */ - - if (rem->_mp_alloc < op_size) - _mpz_realloc (rem, op_size); - - /* The size of the root is accurate after this simple calculation. */ - root_size = (op_size + 1) / 2; - - root_ptr = root->_mp_d; - op_ptr = op->_mp_d; - - if (root->_mp_alloc < root_size) - { - if (root_ptr == op_ptr) - { - free_me = root_ptr; - free_me_size = root->_mp_alloc; - } - else - (*_mp_free_func) (root_ptr, root->_mp_alloc * BYTES_PER_MP_LIMB); - - root->_mp_alloc = root_size; - root_ptr = (mp_ptr) (*_mp_allocate_func) (root_size * BYTES_PER_MP_LIMB); - root->_mp_d = root_ptr; - } - else - { - /* Make OP not overlap with ROOT. */ - if (root_ptr == op_ptr) - { - /* ROOT and OP are identical. Allocate temporary space for OP. */ - op_ptr = (mp_ptr) TMP_ALLOC (op_size * BYTES_PER_MP_LIMB); - /* Copy to the temporary space. Hack: Avoid temporary variable - by using ROOT_PTR. */ - MPN_COPY (op_ptr, root_ptr, op_size); - } - } - - rem_size = mpn_sqrtrem (root_ptr, rem->_mp_d, op_ptr, op_size); - - root->_mp_size = root_size; - - /* Write remainder size last, to enable us to define this function to - give only the square root remainder, if the user calls if with - ROOT == REM. */ - rem->_mp_size = rem_size; - - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/sub.c b/contrib/libgmp/mpz/sub.c deleted file mode 100644 index 56ef1a12a2b0..000000000000 --- a/contrib/libgmp/mpz/sub.c +++ /dev/null @@ -1,120 +0,0 @@ -/* mpz_sub -- Subtract two integers. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_sub (mpz_ptr w, mpz_srcptr u, mpz_srcptr v) -#else -mpz_sub (w, u, v) - mpz_ptr w; - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -msub (mpz_srcptr u, mpz_srcptr v, mpz_ptr w) -#else -msub (u, v, w) - mpz_srcptr u; - mpz_srcptr v; - mpz_ptr w; -#endif -#endif /* BERKELEY_MP */ -{ - mp_srcptr up, vp; - mp_ptr wp; - mp_size_t usize, vsize, wsize; - mp_size_t abs_usize; - mp_size_t abs_vsize; - - usize = u->_mp_size; - vsize = -v->_mp_size; /* The "-" makes the difference from mpz_add */ - abs_usize = ABS (usize); - abs_vsize = ABS (vsize); - - if (abs_usize < abs_vsize) - { - /* Swap U and V. */ - {const __mpz_struct *t = u; u = v; v = t;} - {mp_size_t t = usize; usize = vsize; vsize = t;} - {mp_size_t t = abs_usize; abs_usize = abs_vsize; abs_vsize = t;} - } - - /* True: ABS_USIZE >= ABS_VSIZE. */ - - /* If not space for w (and possible carry), increase space. */ - wsize = abs_usize + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - /* These must be after realloc (u or v may be the same as w). */ - up = u->_mp_d; - vp = v->_mp_d; - wp = w->_mp_d; - - if ((usize ^ vsize) < 0) - { - /* U and V have different sign. Need to compare them to determine - which operand to subtract from which. */ - - /* This test is right since ABS_USIZE >= ABS_VSIZE. */ - if (abs_usize != abs_vsize) - { - mpn_sub (wp, up, abs_usize, vp, abs_vsize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize < 0) - wsize = -wsize; - } - else if (mpn_cmp (up, vp, abs_usize) < 0) - { - mpn_sub_n (wp, vp, up, abs_usize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize >= 0) - wsize = -wsize; - } - else - { - mpn_sub_n (wp, up, vp, abs_usize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize < 0) - wsize = -wsize; - } - } - else - { - /* U and V have same sign. Add them. */ - mp_limb_t cy_limb = mpn_add (wp, up, abs_usize, vp, abs_vsize); - wp[abs_usize] = cy_limb; - wsize = abs_usize + cy_limb; - if (usize < 0) - wsize = -wsize; - } - - w->_mp_size = wsize; -} diff --git a/contrib/libgmp/mpz/sub_ui.c b/contrib/libgmp/mpz/sub_ui.c deleted file mode 100644 index 7dea4b6c03ef..000000000000 --- a/contrib/libgmp/mpz/sub_ui.c +++ /dev/null @@ -1,84 +0,0 @@ -/* mpz_sub_ui -- Subtract an unsigned one-word integer from an MP_INT. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_sub_ui (mpz_ptr w, mpz_srcptr u, unsigned long int v) -#else -mpz_sub_ui (w, u, v) - mpz_ptr w; - mpz_srcptr u; - unsigned long int v; -#endif -{ - mp_srcptr up; - mp_ptr wp; - mp_size_t usize, wsize; - mp_size_t abs_usize; - - usize = u->_mp_size; - abs_usize = ABS (usize); - - /* If not space for W (and possible carry), increase space. */ - wsize = abs_usize + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - /* These must be after realloc (U may be the same as W). */ - up = u->_mp_d; - wp = w->_mp_d; - - if (abs_usize == 0) - { - wp[0] = v; - w->_mp_size = -(v != 0); - return; - } - - if (usize < 0) - { - mp_limb_t cy; - cy = mpn_add_1 (wp, up, abs_usize, v); - wp[abs_usize] = cy; - wsize = -(abs_usize + cy); - } - else - { - /* The signs are different. Need exact comparison to determine - which operand to subtract from which. */ - if (abs_usize == 1 && up[0] < v) - { - wp[0] = v - up[0]; - wsize = -1; - } - else - { - mpn_sub_1 (wp, up, abs_usize, v); - /* Size can decrease with at most one limb. */ - wsize = abs_usize - (wp[abs_usize - 1] == 0); - } - } - - w->_mp_size = wsize; -} diff --git a/contrib/libgmp/mpz/tdiv_q.c b/contrib/libgmp/mpz/tdiv_q.c deleted file mode 100644 index b4d36368b8c9..000000000000 --- a/contrib/libgmp/mpz/tdiv_q.c +++ /dev/null @@ -1,133 +0,0 @@ -/* mpz_tdiv_q -- divide two integers and produce a quotient. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_tdiv_q (mpz_ptr quot, mpz_srcptr num, mpz_srcptr den) -#else -mpz_tdiv_q (quot, num, den) - mpz_ptr quot; - mpz_srcptr num; - mpz_srcptr den; -#endif -{ - mp_srcptr np, dp; - mp_ptr qp, rp; - mp_size_t nsize = num->_mp_size; - mp_size_t dsize = den->_mp_size; - mp_size_t qsize, rsize; - mp_size_t sign_quotient = nsize ^ dsize; - unsigned normalization_steps; - mp_limb_t q_limb; - TMP_DECL (marker); - - nsize = ABS (nsize); - dsize = ABS (dsize); - - /* Ensure space is enough for quotient. */ - - qsize = nsize - dsize + 1; /* qsize cannot be bigger than this. */ - if (qsize <= 0) - { - quot->_mp_size = 0; - return; - } - - if (quot->_mp_alloc < qsize) - _mpz_realloc (quot, qsize); - - qp = quot->_mp_d; - np = num->_mp_d; - dp = den->_mp_d; - - /* Optimize division by a single-limb divisor. */ - if (dsize == 1) - { - mpn_divmod_1 (qp, np, nsize, dp[0]); - qsize -= qp[qsize - 1] == 0; - quot->_mp_size = sign_quotient >= 0 ? qsize : -qsize; - return; - } - - TMP_MARK (marker); - - rp = (mp_ptr) TMP_ALLOC ((nsize + 1) * BYTES_PER_MP_LIMB); - - count_leading_zeros (normalization_steps, dp[dsize - 1]); - - /* Normalize the denominator, i.e. make its most significant bit set by - shifting it NORMALIZATION_STEPS bits to the left. Also shift the - numerator the same number of steps (to keep the quotient the same!). */ - if (normalization_steps != 0) - { - mp_ptr tp; - mp_limb_t nlimb; - - /* Shift up the denominator setting the most significant bit of - the most significant word. Use temporary storage not to clobber - the original contents of the denominator. */ - tp = (mp_ptr) TMP_ALLOC (dsize * BYTES_PER_MP_LIMB); - mpn_lshift (tp, dp, dsize, normalization_steps); - dp = tp; - - /* Shift up the numerator, possibly introducing a new most - significant word. Move the shifted numerator in the remainder - meanwhile. */ - nlimb = mpn_lshift (rp, np, nsize, normalization_steps); - if (nlimb != 0) - { - rp[nsize] = nlimb; - rsize = nsize + 1; - } - else - rsize = nsize; - } - else - { - /* The denominator is already normalized, as required. Copy it to - temporary space if it overlaps with the quotient. */ - if (dp == qp) - { - dp = (mp_ptr) TMP_ALLOC (dsize * BYTES_PER_MP_LIMB); - MPN_COPY ((mp_ptr) dp, qp, dsize); - } - - /* Move the numerator to the remainder. */ - MPN_COPY (rp, np, nsize); - rsize = nsize; - } - - q_limb = mpn_divmod (qp, rp, rsize, dp, dsize); - - qsize = rsize - dsize; - if (q_limb) - { - qp[qsize] = q_limb; - qsize += 1; - } - - quot->_mp_size = sign_quotient >= 0 ? qsize : -qsize; - TMP_FREE (marker); -} diff --git a/contrib/libgmp/mpz/tdiv_q_2exp.c b/contrib/libgmp/mpz/tdiv_q_2exp.c deleted file mode 100644 index e70d810e7ffc..000000000000 --- a/contrib/libgmp/mpz/tdiv_q_2exp.c +++ /dev/null @@ -1,68 +0,0 @@ -/* mpz_tdiv_q_2exp -- Divide an integer by 2**CNT. Round the quotient - towards -infinity. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_tdiv_q_2exp (mpz_ptr w, mpz_srcptr u, unsigned long int cnt) -#else -mpz_tdiv_q_2exp (w, u, cnt) - mpz_ptr w; - mpz_srcptr u; - unsigned long int cnt; -#endif -{ - mp_size_t usize, wsize; - mp_size_t limb_cnt; - - usize = u->_mp_size; - limb_cnt = cnt / BITS_PER_MP_LIMB; - wsize = ABS (usize) - limb_cnt; - if (wsize <= 0) - w->_mp_size = 0; - else - { - mp_ptr wp; - mp_srcptr up; - - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - wp = w->_mp_d; - up = u->_mp_d; - - cnt %= BITS_PER_MP_LIMB; - if (cnt != 0) - { - mpn_rshift (wp, up + limb_cnt, wsize, cnt); - wsize -= wp[wsize - 1] == 0; - } - else - { - MPN_COPY_INCR (wp, up + limb_cnt, wsize); - } - - w->_mp_size = usize >= 0 ? wsize : -wsize; - } -} diff --git a/contrib/libgmp/mpz/tdiv_q_ui.c b/contrib/libgmp/mpz/tdiv_q_ui.c deleted file mode 100644 index 9048e0aef560..000000000000 --- a/contrib/libgmp/mpz/tdiv_q_ui.c +++ /dev/null @@ -1,63 +0,0 @@ -/* mpz_tdiv_q_ui(quot, dividend, divisor_limb) - -- Divide DIVIDEND by DIVISOR_LIMB and store the result in QUOT. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_tdiv_q_ui (mpz_ptr quot, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_tdiv_q_ui (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (size == 0) - { - quot->_mp_size = 0; - return; - } - - /* No need for temporary allocation and copying if QUOT == DIVIDEND as - the divisor is just one limb, and thus no intermediate remainders - need to be stored. */ - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, (mp_limb_t) divisor); - - /* The quotient is SIZE limbs, but the most significant might be zero. */ - size -= quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; -} diff --git a/contrib/libgmp/mpz/tdiv_qr.c b/contrib/libgmp/mpz/tdiv_qr.c deleted file mode 100644 index 500e19939a78..000000000000 --- a/contrib/libgmp/mpz/tdiv_qr.c +++ /dev/null @@ -1,39 +0,0 @@ -/* mpz_tdiv_qr(quot,rem,dividend,divisor) -- Set QUOT to DIVIDEND/DIVISOR, - and REM to DIVIDEND mod DIVISOR. - -Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_tdiv_qr (mpz_ptr quot, mpz_ptr rem, mpz_srcptr num, mpz_srcptr den) -#else -mpz_tdiv_qr (quot, rem, num, den) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr num; - mpz_srcptr den; -#endif - -#define COMPUTE_QUOTIENT -#include "dmincl.c" diff --git a/contrib/libgmp/mpz/tdiv_qr_ui.c b/contrib/libgmp/mpz/tdiv_qr_ui.c deleted file mode 100644 index cb5041cdc598..000000000000 --- a/contrib/libgmp/mpz/tdiv_qr_ui.c +++ /dev/null @@ -1,78 +0,0 @@ -/* mpz_tdiv_qr_ui(quot,rem,dividend,short_divisor) -- - Set QUOT to DIVIDEND / SHORT_DIVISOR - and REM to DIVIDEND mod SHORT_DIVISOR. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_tdiv_qr_ui (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_tdiv_qr_ui (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (size == 0) - { - quot->_mp_size = 0; - rem->_mp_size = 0; - return; - } - - /* No need for temporary allocation and copying if QUOT == DIVIDEND as - the divisor is just one limb, and thus no intermediate remainders - need to be stored. */ - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb == 0) - rem->_mp_size = 0; - else - { - /* Store the single-limb remainder. We don't check if there's space - for just one limb, since no function ever makes zero space. */ - rem->_mp_size = dividend_size >= 0 ? 1 : -1; - rem->_mp_d[0] = remainder_limb; - } - - /* The quotient is SIZE limbs, but the most significant might be zero. */ - size -= quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; -} diff --git a/contrib/libgmp/mpz/tdiv_r.c b/contrib/libgmp/mpz/tdiv_r.c deleted file mode 100644 index 813a0d4d79cd..000000000000 --- a/contrib/libgmp/mpz/tdiv_r.c +++ /dev/null @@ -1,37 +0,0 @@ -/* mpz_tdiv_r(rem, dividend, divisor) -- Set REM to DIVIDEND mod DIVISOR. - -Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_tdiv_r (mpz_ptr rem, mpz_srcptr num, mpz_srcptr den) -#else -mpz_tdiv_r (rem, num, den) - mpz_ptr rem; - mpz_srcptr num; - mpz_srcptr den; -#endif - -#undef COMPUTE_QUOTIENT -#include "dmincl.c" diff --git a/contrib/libgmp/mpz/tdiv_r_2exp.c b/contrib/libgmp/mpz/tdiv_r_2exp.c deleted file mode 100644 index 99d617e9f34e..000000000000 --- a/contrib/libgmp/mpz/tdiv_r_2exp.c +++ /dev/null @@ -1,79 +0,0 @@ -/* mpz_tdiv_r_2exp -- Divide a integer by 2**CNT and produce a remainder. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_tdiv_r_2exp (mpz_ptr res, mpz_srcptr in, unsigned long int cnt) -#else -mpz_tdiv_r_2exp (res, in, cnt) - mpz_ptr res; - mpz_srcptr in; - unsigned long int cnt; -#endif -{ - mp_size_t in_size = ABS (in->_mp_size); - mp_size_t res_size; - mp_size_t limb_cnt = cnt / BITS_PER_MP_LIMB; - mp_srcptr in_ptr = in->_mp_d; - - if (in_size > limb_cnt) - { - /* The input operand is (probably) greater than 2**CNT. */ - mp_limb_t x; - - x = in_ptr[limb_cnt] & (((mp_limb_t) 1 << cnt % BITS_PER_MP_LIMB) - 1); - if (x != 0) - { - res_size = limb_cnt + 1; - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - res->_mp_d[limb_cnt] = x; - } - else - { - res_size = limb_cnt; - MPN_NORMALIZE (in_ptr, res_size); - - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - limb_cnt = res_size; - } - } - else - { - /* The input operand is smaller than 2**CNT. We perform a no-op, - apart from that we might need to copy IN to RES. */ - res_size = in_size; - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - limb_cnt = res_size; - } - - if (res != in) - MPN_COPY (res->_mp_d, in->_mp_d, limb_cnt); - res->_mp_size = in->_mp_size >= 0 ? res_size : -res_size; -} diff --git a/contrib/libgmp/mpz/tdiv_r_ui.c b/contrib/libgmp/mpz/tdiv_r_ui.c deleted file mode 100644 index 0428b52c3aa9..000000000000 --- a/contrib/libgmp/mpz/tdiv_r_ui.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_tdiv_r_ui(rem, dividend, divisor_limb) - -- Set REM to DIVDEND mod DIVISOR_LIMB. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_tdiv_r_ui (mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_tdiv_r_ui (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (size == 0) - { - rem->_mp_size = 0; - return; - } - - /* No need for temporary allocation and copying if QUOT == DIVIDEND as - the divisor is just one limb, and thus no intermediate remainders - need to be stored. */ - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb == 0) - rem->_mp_size = 0; - else - { - /* Store the single-limb remainder. We don't check if there's space - for just one limb, since no function ever makes zero space. */ - rem->_mp_size = dividend_size >= 0 ? 1 : -1; - rem->_mp_d[0] = remainder_limb; - } -} diff --git a/contrib/libgmp/mpz/tests/Makefile.in b/contrib/libgmp/mpz/tests/Makefile.in deleted file mode 100644 index 5a0cf599e109..000000000000 --- a/contrib/libgmp/mpz/tests/Makefile.in +++ /dev/null @@ -1,126 +0,0 @@ -# Makefile for mpz/tests for GNU MP - -srcdir = . - -CC = gcc - -TEST_LIBS = ../../libgmp.a -INCLUDES = -I../../mpn -I$(srcdir)/../.. -CFLAGS = -g -O - -.c.o: - $(CC) -c $(INCLUDES) $(CFLAGS) $(XCFLAGS) $< - -TEST_SRCS = t-mul.c t-tdiv.c t-tdiv_ui.c t-fdiv.c t-fdiv_ui.c t-gcd.c \ - t-gcd2.c dive.c t-sqrtrem.c convert.c io.c logic.c t-powm.c t-powm_ui.c \ - reuse.c -TEST_OBJS = t-mul.o t-tdiv.o t-tdiv_ui.o t-fdiv.o t-fdiv_ui.o t-gcd.o \ - t-gcd2.o dive.o t-sqrtrem.o convert.o io.o logic.o t-powm.o t-powm_ui.o \ - reuse.o -TESTS = t-mul t-tdiv t-tdiv_ui t-fdiv t-fdiv_ui t-gcd t-gcd2 \ - dive t-sqrtrem convert io logic t-powm t-powm_ui reuse - -check: Makefile st-mul st-tdiv st-tdiv_ui st-fdiv st-fdiv_ui st-gcd st-gcd2 st-dive \ - st-sqrtrem st-convert st-io st-logic st-powm st-powm_ui st-reuse - @echo "The tests passed." - -st-mul: t-mul - ./t-mul - touch $@ -st-tdiv: t-tdiv - ./t-tdiv - touch $@ -st-tdiv_ui: t-tdiv_ui - ./t-tdiv_ui - touch $@ -st-fdiv: t-fdiv - ./t-fdiv - touch $@ -st-fdiv_ui: t-fdiv_ui - ./t-fdiv_ui - touch $@ -st-gcd: t-gcd - ./t-gcd - touch $@ -st-gcd2: t-gcd2 - ./t-gcd2 - touch $@ -st-dive: dive - ./dive - touch $@ -st-sqrtrem: t-sqrtrem - ./t-sqrtrem - touch $@ -st-convert: convert - ./convert - touch $@ -st-io: io - ./io - touch $@ -st-logic: logic - ./logic - touch $@ -st-powm: t-powm - ./t-powm - touch $@ -st-powm_ui: t-powm_ui - ./t-powm_ui - touch $@ -st-reuse: reuse - ./reuse - touch $@ - -t-mul: t-mul.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -t-tdiv: t-tdiv.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -t-tdiv_ui: t-tdiv_ui.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -t-fdiv: t-fdiv.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -t-fdiv_ui: t-fdiv_ui.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -t-gcd: t-gcd.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -t-gcd2: t-gcd2.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -dive: dive.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -t-sqrtrem: t-sqrtrem.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -convert: convert.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -io: io.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -logic: logic.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -t-powm: t-powm.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -t-powm_ui: t-powm_ui.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) -reuse: reuse.o $(TEST_LIBS) - $(CC) -o $@ $@.o $(TEST_LIBS) $(CFLAGS) - -t-mul.o: $(srcdir)/t-mul.c -t-tdiv.o: $(srcdir)/t-tdiv.c -t-tdiv_ui.o: $(srcdir)/t-tdiv_ui.c -t-fdiv.o: $(srcdir)/t-fdiv.c -t-fdiv_ui.o: $(srcdir)/t-fdiv_ui.c -t-gcd.o: $(srcdir)/t-gcd.c -t-gcd2.o: $(srcdir)/t-gcd2.c -dive.o: $(srcdir)/dive.c -t-sqrtrem.o: $(srcdir)/t-sqrtrem.c -convert.o: $(srcdir)/convert.c -io.o: $(srcdir)/io.c -logic.o: $(srcdir)/logic.c -t-powm.o: $(srcdir)/t-powm.c -t-powm_ui.o: $(srcdir)/t-powm_ui.c -reuse.o: $(srcdir)/reuse.c - -clean mostlyclean: - rm -f *.o st-* $(TESTS) -distclean maintainer-clean: clean - rm -f Makefile config.status - -Makefile: $(srcdir)/Makefile.in - $(SHELL) ./config.status diff --git a/contrib/libgmp/mpz/tests/configure.in b/contrib/libgmp/mpz/tests/configure.in deleted file mode 100644 index dacc177418d8..000000000000 --- a/contrib/libgmp/mpz/tests/configure.in +++ /dev/null @@ -1,11 +0,0 @@ -# This file is a shell script that supplies the information necessary -# to tailor a template configure script into the configure script -# appropriate for this directory. For more information, check any -# existing configure script. - -srctrigger=t-mul.c -srcname="gmp/mpz/tests" - -# per-host: - -# per-target: diff --git a/contrib/libgmp/mpz/tests/convert.c b/contrib/libgmp/mpz/tests/convert.c deleted file mode 100644 index 1d8237099cad..000000000000 --- a/contrib/libgmp/mpz/tests/convert.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Test conversion using mpz_get_str and mpz_set_str. - -Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 32 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - MP_INT op1, op2; - mp_size_t size; - int i; - int reps = 100000; - char *str; - int base; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (&op1); - mpz_init (&op2); - - for (i = 0; i < reps; i++) - { - size = urandom () % SIZE - SIZE/2; - - mpz_random2 (&op1, size); - base = urandom () % 36 + 1; - if (base == 1) - base = 0; - - str = mpz_get_str ((char *) 0, base, &op1); - mpz_set_str (&op2, str, base); - free (str); - - if (mpz_cmp (&op1, &op2)) - { - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "op1 = "); debug_mp (&op1, -16); - fprintf (stderr, "base = %d\n", base); - abort (); - } - } - - exit (0); -} - -void -debug_mp (x, base) - MP_INT *x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/dive.c b/contrib/libgmp/mpz/tests/dive.c deleted file mode 100644 index 8d3516d83a68..000000000000 --- a/contrib/libgmp/mpz/tests/dive.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Test mpz_mul, mpz_divexact. - -Copyright (C) 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 32 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t op1, op2; - mpz_t prod, quot; - mp_size_t size; - int i; - int reps = 100000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (op1); - mpz_init (op2); - mpz_init (prod); - mpz_init (quot); - - for (i = 0; i < reps; i++) - { - size = urandom () % SIZE - SIZE/2; - mpz_random2 (op1, size); - - do - { - size = urandom () % SIZE - SIZE/2; - mpz_random2 (op2, size); - } - while (mpz_cmp_ui (op2, 0) == 0); - - mpz_mul (prod, op1, op2); - - mpz_divexact (quot, prod, op2); - if (mpz_cmp (quot, op1) != 0) - dump_abort (quot, op1); - } - - exit (0); -} - -dump_abort (op1, op2) - mpz_t op1, op2; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "ref = "); debug_mp (op1, -16); - fprintf (stderr, "wrong = "); debug_mp (op2, -16); - abort(); -} - -void -debug_mp (x, base) - mpz_t x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/io-binary.c b/contrib/libgmp/mpz/tests/io-binary.c deleted file mode 100644 index c28f2a5ba735..000000000000 --- a/contrib/libgmp/mpz/tests/io-binary.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Test mpz_inp_binary and mpz_out_binary. - - We write and read back some test strings, and both compare - the numerical result, and make sure the pattern on file is - what we expect. The latter is important for compatibility - between machines with different word sizes. */ - -#include <stdio.h> -#include "gmp.h" - -FILE *file; - -test (str, binary_len, binary_str) - char *str; - int binary_len; - char *binary_str; -{ - mpz_t x, y; - int n_written; - char buf[100]; - - mpz_init_set_str (x, str, 0); - mpz_init (y); - - fseek (file, 0, SEEK_SET); - mpz_out_binary (file, x); - n_written = ftell (file); - if (n_written != binary_len) - abort (); - - fseek (file, 0, SEEK_SET); - mpz_inp_binary (y, file); - if (n_written != ftell (file)) - abort (); - if (mpz_cmp (x, y) != 0) - abort (); - - fseek (file, 0, SEEK_SET); - fread (buf, n_written, 1, file); - if (memcmp (buf, binary_str, binary_len) != 0) - abort (); - - mpz_clear (x); -} - -main () -{ - file = fopen ("xtmpfile", "w+"); - - test ("0", 4, - "\000\000\000\000"); - - test ("1", 5, - "\000\000\000\001\001"); - test ("0x123", 6, - "\000\000\000\002\001\043"); - test ("0xdeadbeef", 8, - "\000\000\000\004\336\255\276\357"); - test ("0xbabefaced", 9, - "\000\000\000\005\013\253\357\254\355"); - test ("0x123456789facade0", 12, - "\000\000\000\010\022\064\126\170\237\254\255\340"); - - test ("-1", 5, - "\377\377\377\377\001"); - test ("-0x123", 6, - "\377\377\377\376\001\043"); - test ("-0xdeadbeef", 8, - "\377\377\377\374\336\255\276\357"); - test ("-0xbabefaced", 9, - "\377\377\377\373\013\253\357\254\355"); - test ("-0x123456789facade0", 12, - "\377\377\377\370\022\064\126\170\237\254\255\340"); - - exit (0); -} diff --git a/contrib/libgmp/mpz/tests/io.c b/contrib/libgmp/mpz/tests/io.c deleted file mode 100644 index 3dfa9a569e9d..000000000000 --- a/contrib/libgmp/mpz/tests/io.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Test conversion and I/O using mpz_out_str and mpz_inp_str. - -Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 16 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - MP_INT op1, op2; - mp_size_t size; - int i; - int reps = 10000; - FILE *fsin, *fsout; - int fd[2]; - int base; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (&op1); - mpz_init (&op2); - - pipe (fd); - fsin = fdopen (fd[0], "r"); - fsout = fdopen (fd[1], "w"); - - for (i = 0; i < reps; i++) - { - size = urandom () % SIZE - SIZE/2; - - mpz_random2 (&op1, size); - base = urandom () % 36 + 1; - if (base == 1) - base = 0; - - mpz_out_str (fsout, base, &op1); - putc (' ', fsout); - fflush (fsout); - mpz_inp_str (&op2, fsin, base); - - if (mpz_cmp (&op1, &op2)) - { - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "op1 = "); debug_mp (&op1, -16); - fprintf (stderr, "base = %d\n", base); - abort (); - } - } - - exit (0); -} - -void -debug_mp (x, base) - MP_INT *x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/logic.c b/contrib/libgmp/mpz/tests/logic.c deleted file mode 100644 index 41a8cac90831..000000000000 --- a/contrib/libgmp/mpz/tests/logic.c +++ /dev/null @@ -1,103 +0,0 @@ -/* Test mpz_com, mpz_and, and mpz_ior. - -Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 16 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t x, y, r1, r2; - mpz_t t1, t2, t3, t4; - mp_size_t xsize, ysize; - int i; - int reps = 100000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (x); - mpz_init (y); - mpz_init (r1); - mpz_init (r2); - mpz_init (t1); - mpz_init (t2); - mpz_init (t3); - mpz_init (t4); - - for (i = 0; i < reps; i++) - { - xsize = urandom () % SIZE - SIZE/2; - mpz_random2 (x, xsize); - - ysize = urandom () % SIZE - SIZE/2; - mpz_random2 (y, ysize); - - mpz_com (r1, x); - mpz_com (r1, r1); - if (mpz_cmp (r1, x) != 0) - dump_abort (); - - mpz_com (r1, y); - mpz_com (r2, r1); - if (mpz_cmp (r2, y) != 0) - dump_abort (); - - mpz_com (t1, x); - mpz_com (t2, y); - mpz_and (t3, t1, t2); - mpz_com (r1, t3); - mpz_ior (r2, x, y); - if (mpz_cmp (r1, r2) != 0) - dump_abort (); - - mpz_com (t1, x); - mpz_com (t2, y); - mpz_ior (t3, t1, t2); - mpz_com (r1, t3); - mpz_and (r2, x, y); - if (mpz_cmp (r1, r2) != 0) - dump_abort (); - } - - exit (0); -} - -dump_abort () -{ - abort(); -} - -void -debug_mp (x, base) - MP_INT *x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/reuse.c b/contrib/libgmp/mpz/tests/reuse.c deleted file mode 100644 index 52fc5a516772..000000000000 --- a/contrib/libgmp/mpz/tests/reuse.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Test that routines allow reusing a source variable as destination. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -#ifndef SIZE -#define SIZE 16 -#endif - -#if __STDC__ -typedef void (*dss_func) (mpz_ptr, mpz_srcptr, mpz_srcptr); -#else -typedef void (*dss_func) (); -#endif - -dss_func dss_funcs[] = -{ - mpz_add, mpz_and, mpz_cdiv_q, mpz_cdiv_r, mpz_fdiv_q, mpz_fdiv_r, - mpz_gcd, mpz_ior, mpz_mul, mpz_sub, mpz_tdiv_q, mpz_tdiv_r -}; - -char *dss_func_names[] = -{ - "mpz_add", "mpz_and", "mpz_cdiv_q", "mpz_cdiv_r", "mpz_fdiv_q", "mpz_fdiv_r", - "mpz_gcd", "mpz_ior", "mpz_mul", "mpz_sub", "mpz_tdiv_q", "mpz_tdiv_r" -}; - -char dss_func_division[] = {0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1}; - -#if 0 -mpz_divexact /* requires special operands */ -#endif - -main (argc, argv) - int argc; - char **argv; -{ - int i; - int pass, reps = 10000; - mpz_t in1, in2, out1; - mpz_t res1, res2, res3; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (in1); - mpz_init (in2); - mpz_init (out1); - mpz_init (res1); - mpz_init (res2); - mpz_init (res3); - - for (pass = 1; pass <= reps; pass++) - { - mpz_random (in1, urandom () % SIZE - SIZE/2); - mpz_random (in2, urandom () % SIZE - SIZE/2); - - for (i = 0; i < sizeof (dss_funcs) / sizeof (dss_func); i++) - { - if (dss_func_division[i] && mpz_cmp_ui (in2, 0) == 0) - continue; - - (dss_funcs[i]) (res1, in1, in2); - - mpz_set (out1, in1); - (dss_funcs[i]) (out1, out1, in2); - mpz_set (res2, out1); - - mpz_set (out1, in2); - (dss_funcs[i]) (out1, in1, out1); - mpz_set (res3, out1); - - if (mpz_cmp (res1, res2) != 0) - dump_abort (dss_func_names[i], in1, in2); - if (mpz_cmp (res1, res3) != 0) - dump_abort (dss_func_names[i], in1, in2); - } - } - - exit (0); -} - -dump_abort (name, in1, in2) - char *name; - mpz_t in1, in2; -{ - printf ("failure in %s (", name); - mpz_out_str (stdout, -16, in1); - printf (" "); - mpz_out_str (stdout, -16, in2); - printf (")\n"); - abort (); -} - -#if 0 -void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -void mpz_div_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -void mpz_mod_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -void mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -void mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr)); -void mpz_com _PROTO ((mpz_ptr, mpz_srcptr)); -void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr)); -void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr)); - -void mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); - -void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr)); - -void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); -void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); -void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); - -void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr)); - -unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); -unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); - -unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -#endif diff --git a/contrib/libgmp/mpz/tests/t-fdiv.c b/contrib/libgmp/mpz/tests/t-fdiv.c deleted file mode 100644 index 9de22d703f38..000000000000 --- a/contrib/libgmp/mpz/tests/t-fdiv.c +++ /dev/null @@ -1,118 +0,0 @@ -/* Test mpz_abs, mpz_add, mpz_cmp, mpz_cmp_ui, mpz_fdiv_qr, mpz_fdiv_q, - mpz_fdiv_r, mpz_mul. - -Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 16 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t dividend, divisor; - mpz_t quotient, remainder; - mpz_t quotient2, remainder2; - mpz_t temp; - mp_size_t dividend_size, divisor_size; - int i; - int reps = 100000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (dividend); - mpz_init (divisor); - mpz_init (quotient); - mpz_init (remainder); - mpz_init (quotient2); - mpz_init (remainder2); - mpz_init (temp); - - for (i = 0; i < reps; i++) - { - dividend_size = urandom () % SIZE - SIZE/2; - mpz_random2 (dividend, dividend_size); - - divisor_size = urandom () % SIZE - SIZE/2; - mpz_random2 (divisor, divisor_size); - if (mpz_cmp_ui (divisor, 0) == 0) - continue; - - mpz_fdiv_qr (quotient, remainder, dividend, divisor); - mpz_fdiv_q (quotient2, dividend, divisor); - mpz_fdiv_r (remainder2, dividend, divisor); - - /* First determine that the quotients and remainders computed - with different functions are equal. */ - if (mpz_cmp (quotient, quotient2) != 0) - dump_abort (dividend, divisor); - if (mpz_cmp (remainder, remainder2) != 0) - dump_abort (dividend, divisor); - - /* Check if the sign of the quotient is correct. */ - if (mpz_cmp_ui (quotient, 0) != 0) - if ((mpz_cmp_ui (quotient, 0) < 0) - != ((mpz_cmp_ui (dividend, 0) ^ mpz_cmp_ui (divisor, 0)) < 0)) - dump_abort (dividend, divisor); - - /* Check if the remainder has the same sign as the divisor - (quotient rounded towards minus infinity). */ - if (mpz_cmp_ui (remainder, 0) != 0) - if ((mpz_cmp_ui (remainder, 0) < 0) != (mpz_cmp_ui (divisor, 0) < 0)) - dump_abort (dividend, divisor); - - mpz_mul (temp, quotient, divisor); - mpz_add (temp, temp, remainder); - if (mpz_cmp (temp, dividend) != 0) - dump_abort (dividend, divisor); - - mpz_abs (temp, divisor); - mpz_abs (remainder, remainder); - if (mpz_cmp (remainder, temp) >= 0) - dump_abort (dividend, divisor); - } - - exit (0); -} - -dump_abort (dividend, divisor) - mpz_t dividend, divisor; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "dividend = "); debug_mp (dividend, -16); - fprintf (stderr, "divisor = "); debug_mp (divisor, -16); - abort(); -} - -void -debug_mp (x, base) - mpz_t x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/t-fdiv_ui.c b/contrib/libgmp/mpz/tests/t-fdiv_ui.c deleted file mode 100644 index 74ba9fcf7b2b..000000000000 --- a/contrib/libgmp/mpz/tests/t-fdiv_ui.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Test mpz_abs, mpz_add, mpz_cmp, mpz_cmp_ui, mpz_fdiv_qr_ui, mpz_fdiv_q_ui, - mpz_fdiv_r_ui, mpz_mul, mpz_mul_ui. - -Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 16 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t dividend; - mpz_t quotient, remainder; - mpz_t quotient2, remainder2; - mpz_t temp; - mp_size_t dividend_size; - mp_limb_t divisor; - int i; - int reps = 100000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (dividend); - mpz_init (quotient); - mpz_init (remainder); - mpz_init (quotient2); - mpz_init (remainder2); - mpz_init (temp); - - for (i = 0; i < reps; i++) - { - dividend_size = urandom () % SIZE - SIZE/2; - mpz_random2 (dividend, dividend_size); - - divisor = urandom (); - if (divisor == 0) - continue; - - mpz_fdiv_qr_ui (quotient, remainder, dividend, divisor); - mpz_fdiv_q_ui (quotient2, dividend, divisor); - mpz_fdiv_r_ui (remainder2, dividend, divisor); - - /* First determine that the quotients and remainders computed - with different functions are equal. */ - if (mpz_cmp (quotient, quotient2) != 0) - dump_abort (dividend, divisor); - if (mpz_cmp (remainder, remainder2) != 0) - dump_abort (dividend, divisor); - - /* Check if the sign of the quotient is correct. */ - if (mpz_cmp_ui (quotient, 0) != 0) - if ((mpz_cmp_ui (quotient, 0) < 0) - != (mpz_cmp_ui (dividend, 0) < 0)) - dump_abort (dividend, divisor); - - /* Check if the remainder has the same sign as the divisor - (quotient rounded towards minus infinity). */ - if (mpz_cmp_ui (remainder, 0) != 0) - if (mpz_cmp_ui (remainder, 0) < 0) - dump_abort (dividend, divisor); - - mpz_mul_ui (temp, quotient, divisor); - mpz_add (temp, temp, remainder); - if (mpz_cmp (temp, dividend) != 0) - dump_abort (dividend, divisor); - - mpz_abs (remainder, remainder); - if (mpz_cmp_ui (remainder, divisor) >= 0) - dump_abort (dividend, divisor); - } - - exit (0); -} - -dump_abort (dividend, divisor) - mpz_t dividend; - mp_limb_t divisor; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "dividend = "); debug_mp (dividend, -16); - fprintf (stderr, "divisor = %lX\n", divisor); - abort(); -} - -void -debug_mp (x, base) - mpz_t x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/t-gcd.c b/contrib/libgmp/mpz/tests/t-gcd.c deleted file mode 100644 index d9a78843a27b..000000000000 --- a/contrib/libgmp/mpz/tests/t-gcd.c +++ /dev/null @@ -1,132 +0,0 @@ -/* Test mpz_gcd, mpz_gcdext, mpz_mul, mpz_tdiv_r, mpz_add, mpz_cmp, - mpz_cmp_ui, mpz_init_set, mpz_set, mpz_clear. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void mpz_refgcd (), debug_mp (); - -#ifndef SIZE -#define SIZE 256 /* really needs to be this large to exercise corner cases! */ -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t op1, op2; - mpz_t refgcd, gcd, s, t; - mpz_t temp1, temp2; - mp_size_t op1_size, op2_size; - int i; - int reps = 1000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (op1); - mpz_init (op2); - mpz_init (refgcd); - mpz_init (gcd); - mpz_init (temp1); - mpz_init (temp2); - mpz_init (s); - mpz_init (t); - - for (i = 0; i < reps; i++) - { - op1_size = urandom () % SIZE - SIZE/2; - op2_size = urandom () % SIZE - SIZE/2; - - mpz_random2 (op1, op1_size); - mpz_random2 (op2, op2_size); - - mpz_refgcd (refgcd, op1, op2); - - mpz_gcd (gcd, op1, op2); - if (mpz_cmp (refgcd, gcd)) - dump_abort (op1, op2); - - mpz_gcdext (gcd, s, t, op1, op2); - if (mpz_cmp (refgcd, gcd)) - dump_abort (op1, op2); - - mpz_mul (temp1, s, op1); - mpz_mul (temp2, t, op2); - mpz_add (gcd, temp1, temp2); - if (mpz_cmp (refgcd, gcd)) - dump_abort (op1, op2); - } - - exit (0); -} - -void -mpz_refgcd (g, x, y) - mpz_t g; - mpz_t x, y; -{ - mpz_t xx, yy; - - mpz_init (xx); - mpz_init (yy); - - mpz_abs (xx, x); - mpz_abs (yy, y); - - for (;;) - { - if (mpz_cmp_ui (yy, 0) == 0) - { - mpz_set (g, xx); - break; - } - mpz_tdiv_r (xx, xx, yy); - if (mpz_cmp_ui (xx, 0) == 0) - { - mpz_set (g, yy); - break; - } - mpz_tdiv_r (yy, yy, xx); - } - - mpz_clear (xx); - mpz_clear (yy); -} - -dump_abort (op1, op2) - mpz_t op1, op2; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "op1 = "); debug_mp (op1, -16); - fprintf (stderr, "op2 = "); debug_mp (op2, -16); - abort(); -} - -void -debug_mp (x, base) - mpz_t x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/t-gcd2.c b/contrib/libgmp/mpz/tests/t-gcd2.c deleted file mode 100644 index b7ad67c034df..000000000000 --- a/contrib/libgmp/mpz/tests/t-gcd2.c +++ /dev/null @@ -1,137 +0,0 @@ -/* Test mpz_gcd, mpz_gcdext, mpz_mul, mpz_tdiv_r, mpz_add, mpz_cmp, - mpz_cmp_ui, mpz_init_set, mpz_set, mpz_clear. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void mpz_refgcd (), debug_mp (); - -#ifndef SIZE -#define SIZE 128 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t op1, op2, x; - mpz_t refgcd, gcd, s, t; - mpz_t temp1, temp2; - mp_size_t op1_size, op2_size, x_size; - int i; - int reps = 1000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (op1); - mpz_init (op2); - mpz_init (x); - mpz_init (refgcd); - mpz_init (gcd); - mpz_init (temp1); - mpz_init (temp2); - mpz_init (s); - mpz_init (t); - - for (i = 0; i < reps; i++) - { - op1_size = urandom () % SIZE - SIZE/2; - op2_size = urandom () % SIZE - SIZE/2; - x_size = urandom () % SIZE/2; - - mpz_random2 (op1, op1_size); - mpz_random2 (op2, op2_size); - mpz_random2 (x, x_size); - mpz_mul (op1, op1, x); - mpz_mul (op2, op2, x); - - mpz_refgcd (refgcd, op1, op2); - - mpz_gcd (gcd, op1, op2); - if (mpz_cmp (refgcd, gcd)) - dump_abort (op1, op2); - - mpz_gcdext (gcd, s, t, op1, op2); - if (mpz_cmp (refgcd, gcd)) - dump_abort (op1, op2); - - mpz_mul (temp1, s, op1); - mpz_mul (temp2, t, op2); - mpz_add (gcd, temp1, temp2); - if (mpz_cmp (refgcd, gcd)) - dump_abort (op1, op2); - } - - exit (0); -} - -void -mpz_refgcd (g, x, y) - mpz_t g; - mpz_t x, y; -{ - mpz_t xx, yy; - - mpz_init (xx); - mpz_init (yy); - - mpz_abs (xx, x); - mpz_abs (yy, y); - - for (;;) - { - if (mpz_cmp_ui (yy, 0) == 0) - { - mpz_set (g, xx); - break; - } - mpz_tdiv_r (xx, xx, yy); - if (mpz_cmp_ui (xx, 0) == 0) - { - mpz_set (g, yy); - break; - } - mpz_tdiv_r (yy, yy, xx); - } - - mpz_clear (xx); - mpz_clear (yy); -} - -dump_abort (op1, op2) - mpz_t op1, op2; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "op1 = "); debug_mp (op1, -16); - fprintf (stderr, "op2 = "); debug_mp (op2, -16); - abort(); -} - -void -debug_mp (x, base) - mpz_t x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/t-mul.c b/contrib/libgmp/mpz/tests/t-mul.c deleted file mode 100644 index b200cd7585d5..000000000000 --- a/contrib/libgmp/mpz/tests/t-mul.c +++ /dev/null @@ -1,261 +0,0 @@ -/* Test mpz_add, mpz_cmp, mpz_cmp_ui, mpz_divmod, mpz_mul. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#include "urandom.h" - -void debug_mp (); -mp_size_t _mpn_mul_classic (); -void mpz_refmul (); - -#ifndef SIZE -#define SIZE 128 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t multiplier, multiplicand; - mpz_t product, ref_product; - mpz_t quotient, remainder; - mp_size_t multiplier_size, multiplicand_size; - int i; - int reps = 10000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (multiplier); - mpz_init (multiplicand); - mpz_init (product); - mpz_init (ref_product); - mpz_init (quotient); - mpz_init (remainder); - - for (i = 0; i < reps; i++) - { - multiplier_size = urandom () % SIZE - SIZE/2; - multiplicand_size = urandom () % SIZE - SIZE/2; - - mpz_random2 (multiplier, multiplier_size); - mpz_random2 (multiplicand, multiplicand_size); - - mpz_mul (product, multiplier, multiplicand); - mpz_refmul (ref_product, multiplier, multiplicand); - if (mpz_cmp_ui (multiplicand, 0) != 0) - mpz_divmod (quotient, remainder, product, multiplicand); - - if (mpz_cmp (product, ref_product)) - dump_abort (multiplier, multiplicand); - - if (mpz_cmp_ui (multiplicand, 0) != 0) - if (mpz_cmp_ui (remainder, 0) || mpz_cmp (quotient, multiplier)) - dump_abort (multiplier, multiplicand); - } - - exit (0); -} - -void -mpz_refmul (w, u, v) - mpz_t w; - const mpz_t u; - const mpz_t v; -{ - mp_size_t usize = u->_mp_size; - mp_size_t vsize = v->_mp_size; - mp_size_t wsize; - mp_size_t sign_product; - mp_ptr up, vp; - mp_ptr wp; - mp_ptr free_me = NULL; - size_t free_me_size; - TMP_DECL (marker); - - TMP_MARK (marker); - sign_product = usize ^ vsize; - usize = ABS (usize); - vsize = ABS (vsize); - - if (usize < vsize) - { - /* Swap U and V. */ - {const __mpz_struct *t = u; u = v; v = t;} - {mp_size_t t = usize; usize = vsize; vsize = t;} - } - - up = u->_mp_d; - vp = v->_mp_d; - wp = w->_mp_d; - - /* Ensure W has space enough to store the result. */ - wsize = usize + vsize; - if (w->_mp_alloc < wsize) - { - if (wp == up || wp == vp) - { - free_me = wp; - free_me_size = w->_mp_alloc; - } - else - (*_mp_free_func) (wp, w->_mp_alloc * BYTES_PER_MP_LIMB); - - w->_mp_alloc = wsize; - wp = (mp_ptr) (*_mp_allocate_func) (wsize * BYTES_PER_MP_LIMB); - w->_mp_d = wp; - } - else - { - /* Make U and V not overlap with W. */ - if (wp == up) - { - /* W and U are identical. Allocate temporary space for U. */ - up = (mp_ptr) TMP_ALLOC (usize * BYTES_PER_MP_LIMB); - /* Is V identical too? Keep it identical with U. */ - if (wp == vp) - vp = up; - /* Copy to the temporary space. */ - MPN_COPY (up, wp, usize); - } - else if (wp == vp) - { - /* W and V are identical. Allocate temporary space for V. */ - vp = (mp_ptr) TMP_ALLOC (vsize * BYTES_PER_MP_LIMB); - /* Copy to the temporary space. */ - MPN_COPY (vp, wp, vsize); - } - } - - wsize = _mpn_mul_classic (wp, up, usize, vp, vsize); - w->_mp_size = sign_product < 0 ? -wsize : wsize; - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - - TMP_FREE (marker); -} - -mp_size_t -_mpn_mul_classic (prodp, up, usize, vp, vsize) - mp_ptr prodp; - mp_srcptr up; - mp_size_t usize; - mp_srcptr vp; - mp_size_t vsize; -{ - mp_size_t i, j; - mp_limb_t prod_low, prod_high; - mp_limb_t cy_dig; - mp_limb_t v_limb, c; - - if (vsize == 0) - return 0; - - /* Offset UP and PRODP so that the inner loop can be faster. */ - up += usize; - prodp += usize; - - /* Multiply by the first limb in V separately, as the result can - be stored (not added) to PROD. We also avoid a loop for zeroing. */ - v_limb = vp[0]; - cy_dig = 0; - j = -usize; - do - { - umul_ppmm (prod_high, prod_low, up[j], v_limb); - add_ssaaaa (cy_dig, prodp[j], prod_high, prod_low, 0, cy_dig); - j++; - } - while (j < 0); - - prodp[j] = cy_dig; - prodp++; - - /* For each iteration in the outer loop, multiply one limb from - U with one limb from V, and add it to PROD. */ - for (i = 1; i < vsize; i++) - { - v_limb = vp[i]; - cy_dig = 0; - j = -usize; - - /* Inner loops. Simulate the carry flag by jumping between - these loops. The first is used when there was no carry - in the previois iteration; the second when there was carry. */ - - do - { - umul_ppmm (prod_high, prod_low, up[j], v_limb); - add_ssaaaa (cy_dig, prod_low, prod_high, prod_low, 0, cy_dig); - c = prodp[j]; - prod_low += c; - prodp[j] = prod_low; - if (prod_low < c) - goto cy_loop; - ncy_loop: - j++; - } - while (j < 0); - - prodp[j] = cy_dig; - prodp++; - continue; - - do - { - umul_ppmm (prod_high, prod_low, up[j], v_limb); - add_ssaaaa (cy_dig, prod_low, prod_high, prod_low, 0, cy_dig); - c = prodp[j]; - prod_low += c + 1; - prodp[j] = prod_low; - if (prod_low > c) - goto ncy_loop; - cy_loop: - j++; - } - while (j < 0); - - cy_dig += 1; - prodp[j] = cy_dig; - prodp++; - } - - return usize + vsize - (cy_dig == 0); -} - -dump_abort (multiplier, multiplicand) - mpz_t multiplier, multiplicand; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "multiplier = "); debug_mp (multiplier, -16); - fprintf (stderr, "multiplicand = "); debug_mp (multiplicand, -16); - abort(); -} - -void -debug_mp (x, base) - mpz_t x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/t-powm.c b/contrib/libgmp/mpz/tests/t-powm.c deleted file mode 100644 index 02d7ca5d0548..000000000000 --- a/contrib/libgmp/mpz/tests/t-powm.c +++ /dev/null @@ -1,125 +0,0 @@ -/* Test mpz_powm, mpz_mul. mpz_mod, mpz_mod_ui, mpz_div_ui. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 8 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t base, exp, mod; - mpz_t r1, r2, t1, exp2, base2; - mp_size_t base_size, exp_size, mod_size; - int i; - int reps = 10000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (base); - mpz_init (exp); - mpz_init (mod); - mpz_init (r1); - mpz_init (r2); - mpz_init (t1); - mpz_init (exp2); - mpz_init (base2); - - for (i = 0; i < reps; i++) - { - base_size = urandom () % SIZE - SIZE/2; - mpz_random2 (base, base_size); - - exp_size = urandom () % SIZE; - mpz_random2 (exp, exp_size); - - mod_size = urandom () % SIZE /* - SIZE/2 */; - mpz_random2 (mod, mod_size); - if (mpz_cmp_ui (mod, 0) == 0) - continue; - - /* This is mathematically undefined. */ - if (mpz_cmp_ui (base, 0) == 0 && mpz_cmp_ui (exp, 0) == 0) - continue; - -#if 0 - putc ('\n', stderr); - debug_mp (base, -16); - debug_mp (exp, -16); - debug_mp (mod, -16); -#endif - - mpz_powm (r1, base, exp, mod); - - mpz_set_ui (r2, 1); - mpz_set (base2, base); - mpz_set (exp2, exp); - - mpz_mod (r2, r2, mod); /* needed when exp==0 and mod==1 */ - while (mpz_cmp_ui (exp2, 0) != 0) - { - mpz_mod_ui (t1, exp2, 2); - if (mpz_cmp_ui (t1, 0) != 0) - { - mpz_mul (r2, r2, base2); - mpz_mod (r2, r2, mod); - } - mpz_mul (base2, base2, base2); - mpz_mod (base2, base2, mod); - mpz_div_ui (exp2, exp2, 2); - } - -#if 0 - debug_mp (r1, -16); - debug_mp (r2, -16); -#endif - - if (mpz_cmp (r1, r2) != 0) - abort (); - } - - exit (0); -} - -dump_abort (dividend, divisor) - MP_INT *dividend, *divisor; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "dividend = "); debug_mp (dividend, -16); - fprintf (stderr, "divisor = "); debug_mp (divisor, -16); - abort(); -} - -void -debug_mp (x, base) - MP_INT *x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/t-powm_ui.c b/contrib/libgmp/mpz/tests/t-powm_ui.c deleted file mode 100644 index b88fa982077d..000000000000 --- a/contrib/libgmp/mpz/tests/t-powm_ui.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Test mpz_powm_ui, mpz_mul. mpz_mod, mpz_mod_ui, mpz_div_ui. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 8 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t base, mod; - mpz_t r1, r2, base2; - mp_size_t base_size, mod_size; - mp_limb_t exp, exp2; - int i; - int reps = 10000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (base); - mpz_init (mod); - mpz_init (r1); - mpz_init (r2); - mpz_init (base2); - - for (i = 0; i < reps; i++) - { - base_size = urandom () % SIZE /* - SIZE/2 */; - mpz_random2 (base, base_size); - - mpn_random2 (&exp, 1); - - mod_size = urandom () % SIZE /* - SIZE/2 */; - mpz_random2 (mod, mod_size); - if (mpz_cmp_ui (mod, 0) == 0) - continue; - - /* This is mathematically undefined. */ - if (mpz_cmp_ui (base, 0) == 0 && exp == 0) - continue; - -#if 0 - putc ('\n', stderr); - debug_mp (base, -16); - debug_mp (mod, -16); -#endif - - mpz_powm_ui (r1, base, (unsigned long int) exp, mod); - - mpz_set_ui (r2, 1); - mpz_set (base2, base); - exp2 = exp; - - mpz_mod (r2, r2, mod); /* needed when exp==0 and mod==1 */ - while (exp2 != 0) - { - if (exp2 % 2 != 0) - { - mpz_mul (r2, r2, base2); - mpz_mod (r2, r2, mod); - } - mpz_mul (base2, base2, base2); - mpz_mod (base2, base2, mod); - exp2 = exp2 / 2; - } - -#if 0 - debug_mp (r1, -16); - debug_mp (r2, -16); -#endif - - if (mpz_cmp (r1, r2) != 0) - abort (); - } - - exit (0); -} - -dump_abort (dividend, divisor) - MP_INT *dividend, *divisor; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "dividend = "); debug_mp (dividend, -16); - fprintf (stderr, "divisor = "); debug_mp (divisor, -16); - abort(); -} - -void -debug_mp (x, base) - MP_INT *x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/t-sqrtrem.c b/contrib/libgmp/mpz/tests/t-sqrtrem.c deleted file mode 100644 index f5fcd09bcdde..000000000000 --- a/contrib/libgmp/mpz/tests/t-sqrtrem.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Test mpz_add, mpz_add_ui, mpz_cmp, mpz_cmp, mpz_mul, mpz_sqrtrem. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 16 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t x2; - mpz_t x, rem; - mpz_t temp, temp2; - mp_size_t x2_size; - int i; - int reps = 100000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (x2); - mpz_init (x); - mpz_init (rem); - mpz_init (temp); - mpz_init (temp2); - - for (i = 0; i < reps; i++) - { - x2_size = urandom () % SIZE; - - mpz_random2 (x2, x2_size); - - mpz_sqrtrem (x, rem, x2); - mpz_mul (temp, x, x); - - /* Is square of result > argument? */ - if (mpz_cmp (temp, x2) > 0) - dump_abort (x2, x, rem); - - mpz_add_ui (temp2, x, 1); - mpz_mul (temp2, temp2, temp2); - - /* Is square of (result + 1) <= argument? */ - if (mpz_cmp (temp2, x2) <= 0) - dump_abort (x2, x, rem); - - mpz_add (temp2, temp, rem); - - /* Is the remainder wrong? */ - if (mpz_cmp (x2, temp2) != 0) - dump_abort (x2, x, rem); - } - - exit (0); -} - -dump_abort (x2, x, rem) - mpz_t x2, x, rem; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "x2 = "); debug_mp (x2, -16); - fprintf (stderr, "x = "); debug_mp (x, -16); - fprintf (stderr, "remainder = "); debug_mp (rem, -16); - abort(); -} - -void -debug_mp (x, base) - mpz_t x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/t-tdiv.c b/contrib/libgmp/mpz/tests/t-tdiv.c deleted file mode 100644 index d646ed8c59dd..000000000000 --- a/contrib/libgmp/mpz/tests/t-tdiv.c +++ /dev/null @@ -1,118 +0,0 @@ -/* Test mpz_abs, mpz_add, mpz_cmp, mpz_cmp_ui, mpz_tdiv_qr, mpz_tdiv_q, - mpz_tdiv_r, mpz_mul. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 16 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t dividend, divisor; - mpz_t quotient, remainder; - mpz_t quotient2, remainder2; - mpz_t temp; - mp_size_t dividend_size, divisor_size; - int i; - int reps = 100000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (dividend); - mpz_init (divisor); - mpz_init (quotient); - mpz_init (remainder); - mpz_init (quotient2); - mpz_init (remainder2); - mpz_init (temp); - - for (i = 0; i < reps; i++) - { - dividend_size = urandom () % SIZE - SIZE/2; - mpz_random2 (dividend, dividend_size); - - divisor_size = urandom () % SIZE - SIZE/2; - mpz_random2 (divisor, divisor_size); - if (mpz_cmp_ui (divisor, 0) == 0) - continue; - - mpz_tdiv_qr (quotient, remainder, dividend, divisor); - mpz_tdiv_q (quotient2, dividend, divisor); - mpz_tdiv_r (remainder2, dividend, divisor); - - /* First determine that the quotients and remainders computed - with different functions are equal. */ - if (mpz_cmp (quotient, quotient2) != 0) - dump_abort (dividend, divisor); - if (mpz_cmp (remainder, remainder2) != 0) - dump_abort (dividend, divisor); - - /* Check if the sign of the quotient is correct. */ - if (mpz_cmp_ui (quotient, 0) != 0) - if ((mpz_cmp_ui (quotient, 0) < 0) - != ((mpz_cmp_ui (dividend, 0) ^ mpz_cmp_ui (divisor, 0)) < 0)) - dump_abort (dividend, divisor); - - /* Check if the remainder has the same sign as the dividend - (quotient rounded towards 0). */ - if (mpz_cmp_ui (remainder, 0) != 0) - if ((mpz_cmp_ui (remainder, 0) < 0) != (mpz_cmp_ui (dividend, 0) < 0)) - dump_abort (dividend, divisor); - - mpz_mul (temp, quotient, divisor); - mpz_add (temp, temp, remainder); - if (mpz_cmp (temp, dividend) != 0) - dump_abort (dividend, divisor); - - mpz_abs (temp, divisor); - mpz_abs (remainder, remainder); - if (mpz_cmp (remainder, temp) >= 0) - dump_abort (dividend, divisor); - } - - exit (0); -} - -dump_abort (dividend, divisor) - mpz_t dividend, divisor; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "dividend = "); debug_mp (dividend, -16); - fprintf (stderr, "divisor = "); debug_mp (divisor, -16); - abort(); -} - -void -debug_mp (x, base) - mpz_t x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/tests/t-tdiv_ui.c b/contrib/libgmp/mpz/tests/t-tdiv_ui.c deleted file mode 100644 index 8d73b1108162..000000000000 --- a/contrib/libgmp/mpz/tests/t-tdiv_ui.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Test mpz_abs, mpz_add, mpz_cmp, mpz_cmp_ui, mpz_tdiv_qr_ui, mpz_tdiv_q_ui, - mpz_tdiv_r_ui, mpz_mul_ui. - -Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void debug_mp (); - -#ifndef SIZE -#define SIZE 16 -#endif - -main (argc, argv) - int argc; - char **argv; -{ - mpz_t dividend; - mpz_t quotient, remainder; - mpz_t quotient2, remainder2; - mpz_t temp; - mp_size_t dividend_size; - mp_limb_t divisor; - int i; - int reps = 100000; - - if (argc == 2) - reps = atoi (argv[1]); - - mpz_init (dividend); - mpz_init (quotient); - mpz_init (remainder); - mpz_init (quotient2); - mpz_init (remainder2); - mpz_init (temp); - - for (i = 0; i < reps; i++) - { - dividend_size = urandom () % SIZE - SIZE/2; - mpz_random2 (dividend, dividend_size); - - divisor = urandom (); - if (divisor == 0) - continue; - - mpz_tdiv_qr_ui (quotient, remainder, dividend, divisor); - mpz_tdiv_q_ui (quotient2, dividend, divisor); - mpz_tdiv_r_ui (remainder2, dividend, divisor); - - /* First determine that the quotients and remainders computed - with different functions are equal. */ - if (mpz_cmp (quotient, quotient2) != 0) - dump_abort (dividend, divisor); - if (mpz_cmp (remainder, remainder2) != 0) - dump_abort (dividend, divisor); - - /* Check if the sign of the quotient is correct. */ - if (mpz_cmp_ui (quotient, 0) != 0) - if ((mpz_cmp_ui (quotient, 0) < 0) - != (mpz_cmp_ui (dividend, 0) < 0)) - dump_abort (dividend, divisor); - - /* Check if the remainder has the same sign as the dividend - (quotient rounded towards 0). */ - if (mpz_cmp_ui (remainder, 0) != 0) - if ((mpz_cmp_ui (remainder, 0) < 0) != (mpz_cmp_ui (dividend, 0) < 0)) - dump_abort (dividend, divisor); - - mpz_mul_ui (temp, quotient, divisor); - mpz_add (temp, temp, remainder); - if (mpz_cmp (temp, dividend) != 0) - dump_abort (dividend, divisor); - - mpz_abs (remainder, remainder); - if (mpz_cmp_ui (remainder, divisor) >= 0) - dump_abort (dividend, divisor); - } - - exit (0); -} - -dump_abort (dividend, divisor) - mpz_t dividend; - mp_limb_t divisor; -{ - fprintf (stderr, "ERROR\n"); - fprintf (stderr, "dividend = "); debug_mp (dividend, -16); - fprintf (stderr, "divisor = %lX\n", divisor); - abort(); -} - -void -debug_mp (x, base) - mpz_t x; -{ - mpz_out_str (stderr, base, x); fputc ('\n', stderr); -} diff --git a/contrib/libgmp/mpz/ui_pow_ui.c b/contrib/libgmp/mpz/ui_pow_ui.c deleted file mode 100644 index 19baca14b48f..000000000000 --- a/contrib/libgmp/mpz/ui_pow_ui.c +++ /dev/null @@ -1,111 +0,0 @@ -/* mpz_ui_pow_ui(res, base, exp) -- Set RES to BASE**EXP. - -Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your -option) any later version. - -The GNU MP Library 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 Library General Public -License for more details. - -You should have received a copy of the GNU Library General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_ui_pow_ui (mpz_ptr r, unsigned long int b, unsigned long int e) -#else -mpz_ui_pow_ui (r, b, e) - mpz_ptr r; - unsigned long int b; - unsigned long int e; -#endif -{ - mp_ptr rp, tp, xp; - mp_size_t rsize; - int cnt, i; - mp_limb_t blimb = b; - TMP_DECL (marker); - - /* Single out cases that give result == 0 or 1. These tests are here - to simplify the general code below, not to optimize. */ - if (e == 0) - { - r->_mp_d[0] = 1; - r->_mp_size = 1; - return; - } - if (blimb == 0) - { - r->_mp_size = 0; - return; - } - - if (blimb < 0x100) - { - /* Estimate space requirements accurately. Using the code from the - `else' path would over-estimate space requirements wildly. */ - float lb = __mp_bases[blimb].chars_per_bit_exactly; - rsize = 2 + ((mp_size_t) (e / lb) / BITS_PER_MP_LIMB); - } - else - { - /* Over-estimate space requirements somewhat. */ - count_leading_zeros (cnt, blimb); - rsize = e - cnt * e / BITS_PER_MP_LIMB + 1; - } - - TMP_MARK (marker); - - /* The two areas are used to alternatingly hold the input and recieve the - product for mpn_mul. (This scheme is used to fulfill the requirements - of mpn_mul; that the product space may not be the same as any of the - input operands.) */ - rp = (mp_ptr) TMP_ALLOC (rsize * BYTES_PER_MP_LIMB); - tp = (mp_ptr) TMP_ALLOC (rsize * BYTES_PER_MP_LIMB); - - rp[0] = blimb; - rsize = 1; - count_leading_zeros (cnt, e); - - for (i = BITS_PER_MP_LIMB - cnt - 2; i >= 0; i--) - { - mpn_mul_n (tp, rp, rp, rsize); - rsize = 2 * rsize; - rsize -= tp[rsize - 1] == 0; - xp = tp; tp = rp; rp = xp; - - if ((e & ((mp_limb_t) 1 << i)) != 0) - { - mp_limb_t cy; - cy = mpn_mul_1 (tp, rp, rsize, blimb); - if (cy != 0) - { - tp[rsize] = cy; - rsize++; - } - xp = tp; tp = rp; rp = xp; - } - } - - /* Now then we know the exact space requirements, reallocate if - necessary. */ - if (r->_mp_alloc < rsize) - _mpz_realloc (r, rsize); - - MPN_COPY (r->_mp_d, rp, rsize); - r->_mp_size = rsize; - TMP_FREE (marker); -} |