summaryrefslogtreecommitdiff
path: root/ghc/rts/gmp/mpz
diff options
context:
space:
mode:
authorSimon Marlow <simonmar@microsoft.com>2006-04-07 02:05:11 +0000
committerSimon Marlow <simonmar@microsoft.com>2006-04-07 02:05:11 +0000
commit0065d5ab628975892cea1ec7303f968c3338cbe1 (patch)
tree8e2afe0ab48ee33cf95009809d67c9649573ef92 /ghc/rts/gmp/mpz
parent28a464a75e14cece5db40f2765a29348273ff2d2 (diff)
downloadhaskell-0065d5ab628975892cea1ec7303f968c3338cbe1.tar.gz
Reorganisation of the source tree
Most of the other users of the fptools build system have migrated to Cabal, and with the move to darcs we can now flatten the source tree without losing history, so here goes. The main change is that the ghc/ subdir is gone, and most of what it contained is now at the top level. The build system now makes no pretense at being multi-project, it is just the GHC build system. No doubt this will break many things, and there will be a period of instability while we fix the dependencies. A straightforward build should work, but I haven't yet fixed binary/source distributions. Changes to the Building Guide will follow, too.
Diffstat (limited to 'ghc/rts/gmp/mpz')
-rw-r--r--ghc/rts/gmp/mpz/Makefile.am58
-rw-r--r--ghc/rts/gmp/mpz/Makefile.in457
-rw-r--r--ghc/rts/gmp/mpz/README23
-rw-r--r--ghc/rts/gmp/mpz/abs.c51
-rw-r--r--ghc/rts/gmp/mpz/add.c123
-rw-r--r--ghc/rts/gmp/mpz/add_ui.c84
-rw-r--r--ghc/rts/gmp/mpz/addmul_ui.c214
-rw-r--r--ghc/rts/gmp/mpz/and.c278
-rw-r--r--ghc/rts/gmp/mpz/array_init.c48
-rw-r--r--ghc/rts/gmp/mpz/bin_ui.c141
-rw-r--r--ghc/rts/gmp/mpz/bin_uiui.c120
-rw-r--r--ghc/rts/gmp/mpz/cdiv_q.c51
-rw-r--r--ghc/rts/gmp/mpz/cdiv_q_ui.c67
-rw-r--r--ghc/rts/gmp/mpz/cdiv_qr.c64
-rw-r--r--ghc/rts/gmp/mpz/cdiv_qr_ui.c71
-rw-r--r--ghc/rts/gmp/mpz/cdiv_r.c59
-rw-r--r--ghc/rts/gmp/mpz/cdiv_r_ui.c57
-rw-r--r--ghc/rts/gmp/mpz/cdiv_ui.c50
-rw-r--r--ghc/rts/gmp/mpz/clear.c35
-rw-r--r--ghc/rts/gmp/mpz/clrbit.c114
-rw-r--r--ghc/rts/gmp/mpz/cmp.c75
-rw-r--r--ghc/rts/gmp/mpz/cmp_si.c64
-rw-r--r--ghc/rts/gmp/mpz/cmp_ui.c53
-rw-r--r--ghc/rts/gmp/mpz/cmpabs.c57
-rw-r--r--ghc/rts/gmp/mpz/cmpabs_ui.c56
-rw-r--r--ghc/rts/gmp/mpz/com.c93
-rw-r--r--ghc/rts/gmp/mpz/divexact.c125
-rw-r--r--ghc/rts/gmp/mpz/dump.c44
-rw-r--r--ghc/rts/gmp/mpz/fac_ui.c157
-rw-r--r--ghc/rts/gmp/mpz/fdiv_q.c51
-rw-r--r--ghc/rts/gmp/mpz/fdiv_q_2exp.c104
-rw-r--r--ghc/rts/gmp/mpz/fdiv_q_ui.c65
-rw-r--r--ghc/rts/gmp/mpz/fdiv_qr.c64
-rw-r--r--ghc/rts/gmp/mpz/fdiv_qr_ui.c69
-rw-r--r--ghc/rts/gmp/mpz/fdiv_r.c58
-rw-r--r--ghc/rts/gmp/mpz/fdiv_r_2exp.c156
-rw-r--r--ghc/rts/gmp/mpz/fdiv_r_ui.c55
-rw-r--r--ghc/rts/gmp/mpz/fdiv_ui.c48
-rw-r--r--ghc/rts/gmp/mpz/fib_ui.c165
-rw-r--r--ghc/rts/gmp/mpz/fits_sint_p.c50
-rw-r--r--ghc/rts/gmp/mpz/fits_slong_p.c50
-rw-r--r--ghc/rts/gmp/mpz/fits_sshort_p.c50
-rw-r--r--ghc/rts/gmp/mpz/fits_uint_p.c41
-rw-r--r--ghc/rts/gmp/mpz/fits_ulong_p.c41
-rw-r--r--ghc/rts/gmp/mpz/fits_ushort_p.c41
-rw-r--r--ghc/rts/gmp/mpz/gcd.c180
-rw-r--r--ghc/rts/gmp/mpz/gcd_ui.c65
-rw-r--r--ghc/rts/gmp/mpz/gcdext.c137
-rw-r--r--ghc/rts/gmp/mpz/get_d.c128
-rw-r--r--ghc/rts/gmp/mpz/get_si.c43
-rw-r--r--ghc/rts/gmp/mpz/get_str.c118
-rw-r--r--ghc/rts/gmp/mpz/get_ui.c37
-rw-r--r--ghc/rts/gmp/mpz/getlimbn.c38
-rw-r--r--ghc/rts/gmp/mpz/hamdist.c62
-rw-r--r--ghc/rts/gmp/mpz/init.c36
-rw-r--r--ghc/rts/gmp/mpz/inp_raw.c101
-rw-r--r--ghc/rts/gmp/mpz/inp_str.c167
-rw-r--r--ghc/rts/gmp/mpz/invert.c77
-rw-r--r--ghc/rts/gmp/mpz/ior.c244
-rw-r--r--ghc/rts/gmp/mpz/iset.c49
-rw-r--r--ghc/rts/gmp/mpz/iset_d.c39
-rw-r--r--ghc/rts/gmp/mpz/iset_si.c49
-rw-r--r--ghc/rts/gmp/mpz/iset_str.c47
-rw-r--r--ghc/rts/gmp/mpz/iset_ui.c39
-rw-r--r--ghc/rts/gmp/mpz/jacobi.c53
-rw-r--r--ghc/rts/gmp/mpz/kronsz.c126
-rw-r--r--ghc/rts/gmp/mpz/kronuz.c115
-rw-r--r--ghc/rts/gmp/mpz/kronzs.c74
-rw-r--r--ghc/rts/gmp/mpz/kronzu.c66
-rw-r--r--ghc/rts/gmp/mpz/lcm.c61
-rw-r--r--ghc/rts/gmp/mpz/legendre.c184
-rw-r--r--ghc/rts/gmp/mpz/mod.c63
-rw-r--r--ghc/rts/gmp/mpz/mul.c131
-rw-r--r--ghc/rts/gmp/mpz/mul_2exp.c76
-rw-r--r--ghc/rts/gmp/mpz/mul_siui.c81
-rw-r--r--ghc/rts/gmp/mpz/neg.c53
-rw-r--r--ghc/rts/gmp/mpz/nextprime.c120
-rw-r--r--ghc/rts/gmp/mpz/out_raw.c89
-rw-r--r--ghc/rts/gmp/mpz/out_str.c108
-rw-r--r--ghc/rts/gmp/mpz/perfpow.c272
-rw-r--r--ghc/rts/gmp/mpz/perfsqr.c45
-rw-r--r--ghc/rts/gmp/mpz/popcount.c42
-rw-r--r--ghc/rts/gmp/mpz/pow_ui.c129
-rw-r--r--ghc/rts/gmp/mpz/powm.c364
-rw-r--r--ghc/rts/gmp/mpz/powm_ui.c248
-rw-r--r--ghc/rts/gmp/mpz/pprime_p.c242
-rw-r--r--ghc/rts/gmp/mpz/random.c56
-rw-r--r--ghc/rts/gmp/mpz/random2.c48
-rw-r--r--ghc/rts/gmp/mpz/realloc.c52
-rw-r--r--ghc/rts/gmp/mpz/remove.c93
-rw-r--r--ghc/rts/gmp/mpz/root.c183
-rw-r--r--ghc/rts/gmp/mpz/rrandomb.c117
-rw-r--r--ghc/rts/gmp/mpz/scan0.c35
-rw-r--r--ghc/rts/gmp/mpz/scan1.c35
-rw-r--r--ghc/rts/gmp/mpz/set.c48
-rw-r--r--ghc/rts/gmp/mpz/set_d.c96
-rw-r--r--ghc/rts/gmp/mpz/set_f.c64
-rw-r--r--ghc/rts/gmp/mpz/set_q.c36
-rw-r--r--ghc/rts/gmp/mpz/set_si.c48
-rw-r--r--ghc/rts/gmp/mpz/set_str.c157
-rw-r--r--ghc/rts/gmp/mpz/set_ui.c43
-rw-r--r--ghc/rts/gmp/mpz/setbit.c119
-rw-r--r--ghc/rts/gmp/mpz/size.c35
-rw-r--r--ghc/rts/gmp/mpz/sizeinbase.c60
-rw-r--r--ghc/rts/gmp/mpz/sqrt.c86
-rw-r--r--ghc/rts/gmp/mpz/sqrtrem.c111
-rw-r--r--ghc/rts/gmp/mpz/sub.c123
-rw-r--r--ghc/rts/gmp/mpz/sub_ui.c84
-rw-r--r--ghc/rts/gmp/mpz/swap.c52
-rw-r--r--ghc/rts/gmp/mpz/tdiv_q.c91
-rw-r--r--ghc/rts/gmp/mpz/tdiv_q_2exp.c68
-rw-r--r--ghc/rts/gmp/mpz/tdiv_q_ui.c64
-rw-r--r--ghc/rts/gmp/mpz/tdiv_qr.c130
-rw-r--r--ghc/rts/gmp/mpz/tdiv_qr_ui.c76
-rw-r--r--ghc/rts/gmp/mpz/tdiv_r.c98
-rw-r--r--ghc/rts/gmp/mpz/tdiv_r_2exp.c79
-rw-r--r--ghc/rts/gmp/mpz/tdiv_r_ui.c63
-rw-r--r--ghc/rts/gmp/mpz/tdiv_ui.c53
-rw-r--r--ghc/rts/gmp/mpz/tstbit.c70
-rw-r--r--ghc/rts/gmp/mpz/ui_pow_ui.c139
-rw-r--r--ghc/rts/gmp/mpz/urandomb.c49
-rw-r--r--ghc/rts/gmp/mpz/urandomm.c78
-rw-r--r--ghc/rts/gmp/mpz/xor.c217
123 files changed, 0 insertions, 11451 deletions
diff --git a/ghc/rts/gmp/mpz/Makefile.am b/ghc/rts/gmp/mpz/Makefile.am
deleted file mode 100644
index cd6fec4e21..0000000000
--- a/ghc/rts/gmp/mpz/Makefile.am
+++ /dev/null
@@ -1,58 +0,0 @@
-## Process this file with automake to generate Makefile.in
-
-# Copyright (C) 1996, 1998, 1999, 2000 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 Lesser General Public License as published by
-# the Free Software Foundation; either version 2.1 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 Lesser General Public
-# License for more details.
-#
-# You should have received a copy of the GNU Lesser 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.
-
-
-AUTOMAKE_OPTIONS = gnu no-dependencies
-
-SUBDIRS = tests
-
-INCLUDES = -I$(top_srcdir) -DOPERATION_$*
-
-noinst_LTLIBRARIES = libmpz.la
-libmpz_la_SOURCES = \
- abs.c add.c add_ui.c addmul_ui.c and.c array_init.c \
- bin_ui.c bin_uiui.c cdiv_q.c \
- cdiv_q_ui.c cdiv_qr.c cdiv_qr_ui.c cdiv_r.c cdiv_r_ui.c cdiv_ui.c \
- clear.c clrbit.c cmp.c cmp_si.c cmp_ui.c cmpabs.c cmpabs_ui.c com.c \
- divexact.c dump.c fac_ui.c fdiv_q.c fdiv_q_2exp.c fdiv_q_ui.c \
- fdiv_qr.c fdiv_qr_ui.c fdiv_r.c fdiv_r_2exp.c fdiv_r_ui.c fdiv_ui.c \
- fib_ui.c fits_sint_p.c fits_slong_p.c fits_sshort_p.c fits_uint_p.c \
- fits_ulong_p.c fits_ushort_p.c gcd.c gcd_ui.c gcdext.c get_d.c get_si.c \
- get_str.c get_ui.c getlimbn.c hamdist.c init.c inp_raw.c inp_str.c \
- invert.c ior.c iset.c iset_d.c iset_si.c iset_str.c iset_ui.c \
- jacobi.c kronsz.c kronuz.c kronzs.c kronzu.c \
- lcm.c legendre.c mod.c mul.c mul_2exp.c neg.c nextprime.c \
- out_raw.c out_str.c perfpow.c perfsqr.c popcount.c pow_ui.c powm.c \
- powm_ui.c pprime_p.c random.c random2.c realloc.c remove.c root.c rrandomb.c \
- scan0.c scan1.c set.c set_d.c set_f.c set_q.c set_si.c set_str.c \
- set_ui.c setbit.c size.c sizeinbase.c sqrt.c sqrtrem.c sub.c \
- sub_ui.c swap.c tdiv_ui.c tdiv_q.c tdiv_q_2exp.c tdiv_q_ui.c tdiv_qr.c \
- tdiv_qr_ui.c tdiv_r.c tdiv_r_2exp.c tdiv_r_ui.c tstbit.c ui_pow_ui.c \
- urandomb.c urandomm.c xor.c
-
-EXTRA_DIST = mul_siui.c
-nodist_libmpz_la_SOURCES = mul_si.c mul_ui.c
-CLEANFILES = $(nodist_libmpz_la_SOURCES)
-
-mul_si.c: $(srcdir)/mul_siui.c
- cp $(srcdir)/mul_siui.c mul_si.c
-mul_ui.c: $(srcdir)/mul_siui.c
- cp $(srcdir)/mul_siui.c mul_ui.c
diff --git a/ghc/rts/gmp/mpz/Makefile.in b/ghc/rts/gmp/mpz/Makefile.in
deleted file mode 100644
index e0f2cdc133..0000000000
--- a/ghc/rts/gmp/mpz/Makefile.in
+++ /dev/null
@@ -1,457 +0,0 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
-
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-SHELL = @SHELL@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-
-@SET_MAKE@
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AMDEP = @AMDEP@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AWK = @AWK@
-CALLING_CONVENTIONS_OBJS = @CALLING_CONVENTIONS_OBJS@
-CC = @CC@
-CCAS = @CCAS@
-CPP = @CPP@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-EXEEXT = @EXEEXT@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-M4 = @M4@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-SPEED_CYCLECOUNTER_OBJS = @SPEED_CYCLECOUNTER_OBJS@
-STRIP = @STRIP@
-U = @U@
-VERSION = @VERSION@
-gmp_srclinks = @gmp_srclinks@
-install_sh = @install_sh@
-mpn_objects = @mpn_objects@
-mpn_objs_in_libgmp = @mpn_objs_in_libgmp@
-
-# Copyright (C) 1996, 1998, 1999, 2000 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 Lesser General Public License as published by
-# the Free Software Foundation; either version 2.1 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 Lesser General Public
-# License for more details.
-#
-# You should have received a copy of the GNU Lesser 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.
-
-
-AUTOMAKE_OPTIONS = gnu no-dependencies
-
-SUBDIRS =
-
-INCLUDES = -I$(top_srcdir) -DOPERATION_$*
-
-noinst_LTLIBRARIES = libmpz.la
-libmpz_la_SOURCES = \
- abs.c add.c add_ui.c addmul_ui.c and.c array_init.c \
- bin_ui.c bin_uiui.c cdiv_q.c \
- cdiv_q_ui.c cdiv_qr.c cdiv_qr_ui.c cdiv_r.c cdiv_r_ui.c cdiv_ui.c \
- clear.c clrbit.c cmp.c cmp_si.c cmp_ui.c cmpabs.c cmpabs_ui.c com.c \
- divexact.c dump.c fac_ui.c fdiv_q.c fdiv_q_2exp.c fdiv_q_ui.c \
- fdiv_qr.c fdiv_qr_ui.c fdiv_r.c fdiv_r_2exp.c fdiv_r_ui.c fdiv_ui.c \
- fib_ui.c fits_sint_p.c fits_slong_p.c fits_sshort_p.c fits_uint_p.c \
- fits_ulong_p.c fits_ushort_p.c gcd.c gcd_ui.c gcdext.c get_d.c get_si.c \
- get_str.c get_ui.c getlimbn.c hamdist.c init.c inp_raw.c inp_str.c \
- invert.c ior.c iset.c iset_d.c iset_si.c iset_str.c iset_ui.c \
- jacobi.c kronsz.c kronuz.c kronzs.c kronzu.c \
- lcm.c legendre.c mod.c mul.c mul_2exp.c neg.c nextprime.c \
- out_raw.c out_str.c perfpow.c perfsqr.c popcount.c pow_ui.c powm.c \
- powm_ui.c pprime_p.c random.c random2.c realloc.c remove.c root.c rrandomb.c \
- scan0.c scan1.c set.c set_d.c set_f.c set_q.c set_si.c set_str.c \
- set_ui.c setbit.c size.c sizeinbase.c sqrt.c sqrtrem.c sub.c \
- sub_ui.c swap.c tdiv_ui.c tdiv_q.c tdiv_q_2exp.c tdiv_q_ui.c tdiv_qr.c \
- tdiv_qr_ui.c tdiv_r.c tdiv_r_2exp.c tdiv_r_ui.c tstbit.c ui_pow_ui.c \
- urandomb.c urandomm.c xor.c
-
-
-EXTRA_DIST = mul_siui.c
-nodist_libmpz_la_SOURCES = mul_si.c mul_ui.c
-CLEANFILES = $(nodist_libmpz_la_SOURCES)
-subdir = mpz
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
-CPPFLAGS = @CPPFLAGS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-libmpz_la_LDFLAGS =
-libmpz_la_LIBADD =
-am_libmpz_la_OBJECTS = abs.lo add.lo add_ui.lo addmul_ui.lo and.lo \
-array_init.lo bin_ui.lo bin_uiui.lo cdiv_q.lo cdiv_q_ui.lo cdiv_qr.lo \
-cdiv_qr_ui.lo cdiv_r.lo cdiv_r_ui.lo cdiv_ui.lo clear.lo clrbit.lo \
-cmp.lo cmp_si.lo cmp_ui.lo cmpabs.lo cmpabs_ui.lo com.lo divexact.lo \
-dump.lo fac_ui.lo fdiv_q.lo fdiv_q_2exp.lo fdiv_q_ui.lo fdiv_qr.lo \
-fdiv_qr_ui.lo fdiv_r.lo fdiv_r_2exp.lo fdiv_r_ui.lo fdiv_ui.lo \
-fib_ui.lo fits_sint_p.lo fits_slong_p.lo fits_sshort_p.lo \
-fits_uint_p.lo fits_ulong_p.lo fits_ushort_p.lo gcd.lo gcd_ui.lo \
-gcdext.lo get_d.lo get_si.lo get_str.lo get_ui.lo getlimbn.lo \
-hamdist.lo init.lo inp_raw.lo inp_str.lo invert.lo ior.lo iset.lo \
-iset_d.lo iset_si.lo iset_str.lo iset_ui.lo jacobi.lo kronsz.lo \
-kronuz.lo kronzs.lo kronzu.lo lcm.lo legendre.lo mod.lo mul.lo \
-mul_2exp.lo neg.lo nextprime.lo out_raw.lo out_str.lo perfpow.lo \
-perfsqr.lo popcount.lo pow_ui.lo powm.lo powm_ui.lo pprime_p.lo \
-random.lo random2.lo realloc.lo remove.lo root.lo rrandomb.lo scan0.lo \
-scan1.lo set.lo set_d.lo set_f.lo set_q.lo set_si.lo set_str.lo \
-set_ui.lo setbit.lo size.lo sizeinbase.lo sqrt.lo sqrtrem.lo sub.lo \
-sub_ui.lo swap.lo tdiv_ui.lo tdiv_q.lo tdiv_q_2exp.lo tdiv_q_ui.lo \
-tdiv_qr.lo tdiv_qr_ui.lo tdiv_r.lo tdiv_r_2exp.lo tdiv_r_ui.lo \
-tstbit.lo ui_pow_ui.lo urandomb.lo urandomm.lo xor.lo
-nodist_libmpz_la_OBJECTS = mul_si.lo mul_ui.lo
-libmpz_la_OBJECTS = $(am_libmpz_la_OBJECTS) $(nodist_libmpz_la_OBJECTS)
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CFLAGS = @CFLAGS@
-CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(libmpz_la_SOURCES)
-DIST_COMMON = README Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-GZIP_ENV = --best
-depcomp =
-SOURCES = $(libmpz_la_SOURCES) $(nodist_libmpz_la_SOURCES)
-OBJECTS = $(am_libmpz_la_OBJECTS) $(nodist_libmpz_la_OBJECTS)
-
-all: all-redirect
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --gnu mpz/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-noinstLTLIBRARIES:
-
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-
-distclean-noinstLTLIBRARIES:
-
-maintainer-clean-noinstLTLIBRARIES:
-
-mostlyclean-compile:
- -rm -f *.o core *.core
- -rm -f *.$(OBJEXT)
-
-clean-compile:
-
-distclean-compile:
- -rm -f *.tab.c
-
-maintainer-clean-compile:
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
-
-maintainer-clean-libtool:
-
-libmpz.la: $(libmpz_la_OBJECTS) $(libmpz_la_DEPENDENCIES)
- $(LINK) $(libmpz_la_LDFLAGS) $(libmpz_la_OBJECTS) $(libmpz_la_LIBADD) $(LIBS)
-.c.o:
- $(COMPILE) -c $<
-.c.obj:
- $(COMPILE) -c `cygpath -w $<`
-.c.lo:
- $(LTCOMPILE) -c -o $@ $<
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-
-all-recursive install-data-recursive install-exec-recursive \
-installdirs-recursive install-recursive uninstall-recursive \
-check-recursive installcheck-recursive info-recursive dvi-recursive:
- @set fnord $(MAKEFLAGS); amf=$$2; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
- @set fnord $(MAKEFLAGS); amf=$$2; \
- dot_seen=no; \
- rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
- rev="$$subdir $$rev"; \
- if test "$$subdir" = "."; then dot_seen=yes; else :; fi; \
- done; \
- test "$$dot_seen" = "no" && rev=". $$rev"; \
- target=`echo $@ | sed s/-recursive//`; \
- for subdir in $$rev; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- mkid -f$$here/ID $$unique $(LISP)
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
- -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- if test -d $$d/$$file; then \
- cp -pR $$d/$$file $(distdir); \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file || :; \
- fi; \
- done
- for subdir in $(SUBDIRS); do \
- if test "$$subdir" = .; then :; else \
- test -d $(distdir)/$$subdir \
- || mkdir $(distdir)/$$subdir \
- || exit 1; \
- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
- || exit 1; \
- fi; \
- done
-info-am:
-info: info-recursive
-dvi-am:
-dvi: dvi-recursive
-check-am: all-am
-check: check-recursive
-installcheck-am:
-installcheck: installcheck-recursive
-install-exec-am:
-install-exec: install-exec-recursive
-
-install-data-am:
-install-data: install-data-recursive
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-recursive
-uninstall-am:
-uninstall: uninstall-recursive
-all-am: Makefile $(LTLIBRARIES)
-all-redirect: all-recursive
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
-installdirs: installdirs-recursive
-installdirs-am:
-
-
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
-
-maintainer-clean-generic:
- -rm -f Makefile.in
-mostlyclean-am: mostlyclean-noinstLTLIBRARIES mostlyclean-compile \
- mostlyclean-libtool mostlyclean-tags \
- mostlyclean-generic
-
-mostlyclean: mostlyclean-recursive
-
-clean-am: clean-noinstLTLIBRARIES clean-compile clean-libtool \
- clean-tags clean-generic mostlyclean-am
-
-clean: clean-recursive
-
-distclean-am: distclean-noinstLTLIBRARIES distclean-compile \
- distclean-libtool distclean-tags distclean-generic \
- clean-am
- -rm -f libtool
-
-distclean: distclean-recursive
-
-maintainer-clean-am: maintainer-clean-noinstLTLIBRARIES \
- maintainer-clean-compile maintainer-clean-libtool \
- maintainer-clean-tags maintainer-clean-generic \
- distclean-am
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-maintainer-clean: maintainer-clean-recursive
-
-.PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \
-clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \
-mostlyclean-compile distclean-compile clean-compile \
-maintainer-clean-compile mostlyclean-libtool distclean-libtool \
-clean-libtool maintainer-clean-libtool install-recursive \
-uninstall-recursive install-data-recursive uninstall-data-recursive \
-install-exec-recursive uninstall-exec-recursive installdirs-recursive \
-uninstalldirs-recursive all-recursive check-recursive \
-installcheck-recursive info-recursive dvi-recursive \
-mostlyclean-recursive distclean-recursive clean-recursive \
-maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all install-strip \
-installdirs-am installdirs mostlyclean-generic distclean-generic \
-clean-generic maintainer-clean-generic clean mostlyclean distclean \
-maintainer-clean
-
-
-mul_si.c: $(srcdir)/mul_siui.c
- cp $(srcdir)/mul_siui.c mul_si.c
-mul_ui.c: $(srcdir)/mul_siui.c
- cp $(srcdir)/mul_siui.c mul_ui.c
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/ghc/rts/gmp/mpz/README b/ghc/rts/gmp/mpz/README
deleted file mode 100644
index 06b481d770..0000000000
--- a/ghc/rts/gmp/mpz/README
+++ /dev/null
@@ -1,23 +0,0 @@
-This directory contains functions for GMP's integer function layer.
-
-In this version of GMP, integers are represented like in the figure below.
-(Please note that the format might change between every version, and that
-depending on the internal format in any way is a bad idea.)
-
- most least
-significant significant
- limb limb
-
- _mp_d
- /
- /
- \/
- ____ ____ ____ ____ ____
- |____|____|____|____|____|
-
- <------- _mp_size ------->
-
-
-The most significant limb will be non-zero. The _mp_size field's sign
-reflects the sign of the number. Its absolute value is the count of limbs
-in the number.
diff --git a/ghc/rts/gmp/mpz/abs.c b/ghc/rts/gmp/mpz/abs.c
deleted file mode 100644
index 0b5eab1ce6..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/add.c b/ghc/rts/gmp/mpz/add.c
deleted file mode 100644
index a22c3778fb..0000000000
--- a/ghc/rts/gmp/mpz/add.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* mpz_add -- Add two integers.
-
-Copyright (C) 1991, 1993, 1994, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-#ifdef BERKELEY_MP
-#include "mp.h"
-#endif
-
-#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. */
- MPZ_SRCPTR_SWAP (u, v);
- MP_SIZE_T_SWAP (usize, vsize);
- MP_SIZE_T_SWAP (abs_usize, abs_vsize);
- }
-
- /* 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/ghc/rts/gmp/mpz/add_ui.c b/ghc/rts/gmp/mpz/add_ui.c
deleted file mode 100644
index 28dbd71f45..0000000000
--- a/ghc/rts/gmp/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, 1999 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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, (mp_limb_t) 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, (mp_limb_t) v);
- /* Size can decrease with at most one limb. */
- wsize = -(abs_usize - (wp[abs_usize - 1] == 0));
- }
- }
-
- w->_mp_size = wsize;
-}
diff --git a/ghc/rts/gmp/mpz/addmul_ui.c b/ghc/rts/gmp/mpz/addmul_ui.c
deleted file mode 100644
index 7b38d3624d..0000000000
--- a/ghc/rts/gmp/mpz/addmul_ui.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/* mpz_addmul_ui(prodsum, multiplier, small_multiplicand) --
- Add MULTIPLICATOR times SMALL_MULTIPLICAND to PRODSUM.
-
-Copyright (C) 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-static mp_limb_t mpn_neg1 _PROTO ((mp_ptr, mp_size_t));
-
-#if 0
-#undef MPN_NORMALIZE
-#define MPN_NORMALIZE(DST, NLIMBS) \
- do { \
- while (--(NLIMBS) >= 0 && (DST)[NLIMBS] == 0) \
- ; \
- (NLIMBS)++; \
- } while (0)
-#undef MPN_NORMALIZE_NOT_ZERO
-#define MPN_NORMALIZE_NOT_ZERO(DST, NLIMBS) \
- do { \
- while ((DST)[--(NLIMBS)] == 0) \
- ; \
- (NLIMBS)++; \
- } while (0)
-#endif
-
-void
-#if __STDC__
-mpz_addmul_ui (mpz_ptr rz, mpz_srcptr az, unsigned long int bu)
-#else
-mpz_addmul_ui (rz, az, bu)
- mpz_ptr rz;
- mpz_srcptr az;
- unsigned long int bu;
-#endif
-{
- mp_size_t rn, an;
- mp_ptr rp, ap;
-
- an = SIZ (az);
-
- /* If either multiplier is zero, result is unaffected. */
- if (bu == 0 || an == 0)
- return;
-
- rn = SIZ (rz);
-
- if (rn == 0)
- {
- mp_limb_t cy;
-
- an = ABS (an);
- if (ALLOC (rz) <= an)
- _mpz_realloc (rz, an + 1);
- rp = PTR (rz);
- ap = PTR (az);
- cy = mpn_mul_1 (rp, ap, an, (mp_limb_t) bu);
- rp[an] = cy;
- an += cy != 0;
- SIZ (rz) = SIZ (az) >= 0 ? an : -an;
- return;
- }
-
- if ((an ^ rn) >= 0)
- {
- /* Sign of operands are the same--really add. */
- an = ABS (an);
- rn = ABS (rn);
- if (rn > an)
- {
- mp_limb_t cy;
- if (ALLOC (rz) <= rn)
- _mpz_realloc (rz, rn + 1);
- rp = PTR (rz);
- ap = PTR (az);
- cy = mpn_addmul_1 (rp, ap, an, (mp_limb_t) bu);
- cy = mpn_add_1 (rp + an, rp + an, rn - an, cy);
- rp[rn] = cy;
- rn += cy != 0;
- SIZ (rz) = SIZ (rz) >= 0 ? rn : -rn;
- return;
- }
- else
- {
- mp_limb_t cy;
- if (ALLOC (rz) <= an)
- _mpz_realloc (rz, an + 1);
- rp = PTR (rz);
- ap = PTR (az);
- cy = mpn_addmul_1 (rp, ap, rn, (mp_limb_t) bu);
- if (an != rn)
- {
- mp_limb_t cy2;
- cy2 = mpn_mul_1 (rp + rn, ap + rn, an - rn, (mp_limb_t) bu);
- cy = cy2 + mpn_add_1 (rp + rn, rp + rn, an - rn, cy);
- }
- rn = an;
- rp[rn] = cy;
- rn += cy != 0;
- SIZ (rz) = SIZ (rz) >= 0 ? rn : -rn;
- return;
- }
- }
- else
- {
- /* Sign of operands are different--actually subtract. */
- an = ABS (an);
- rn = ABS (rn);
- if (rn > an)
- {
- mp_limb_t cy;
- rp = PTR (rz);
- ap = PTR (az);
- cy = mpn_submul_1 (rp, ap, an, (mp_limb_t) bu);
- cy = mpn_sub_1 (rp + an, rp + an, rn - an, cy);
- if (cy != 0)
- {
- mpn_neg1 (rp, rn);
- MPN_NORMALIZE_NOT_ZERO (rp, rn);
- }
- else
- {
- MPN_NORMALIZE (rp, rn);
- rn = -rn;
- }
-
- SIZ (rz) = SIZ (rz) >= 0 ? -rn : rn;
- return;
- }
- else
- {
- /* Tricky case. We need to subtract an operand that might be larger
- than the minuend. To avoid allocating temporary space, we compute
- a*b-r instead of r-a*b and then negate. */
- mp_limb_t cy;
- if (ALLOC (rz) <= an)
- _mpz_realloc (rz, an + 1);
- rp = PTR (rz);
- ap = PTR (az);
- cy = mpn_submul_1 (rp, ap, rn, (mp_limb_t) bu);
- if (an != rn)
- {
- mp_limb_t cy2;
- cy -= mpn_neg1 (rp, rn);
- cy2 = mpn_mul_1 (rp + rn, ap + rn, an - rn, (mp_limb_t) bu);
- if (cy == ~(mp_limb_t) 0)
- cy = cy2 - mpn_sub_1 (rp + rn, rp + rn, an - rn, (mp_limb_t) 1);
- else
- cy = cy2 + mpn_add_1 (rp + rn, rp + rn, an - rn, cy);
- rp[an] = cy;
- rn = an + (cy != 0);
- rn -= rp[rn - 1] == 0;
- }
- else if (cy != 0)
- {
- cy -= mpn_neg1 (rp, rn);
- rp[an] = cy;
- rn = an + 1;
- MPN_NORMALIZE_NOT_ZERO (rp, rn);
- }
- else
- {
- rn = an;
- MPN_NORMALIZE (rp, rn);
- rn = -rn;
- }
-
- SIZ (rz) = SIZ (rz) >= 0 ? -rn : rn;
- return;
- }
- }
-}
-
-static mp_limb_t
-#if __STDC__
-mpn_neg1 (mp_ptr rp, mp_size_t rn)
-#else
-mpn_neg1 (rp, rn)
- mp_ptr rp;
- mp_size_t rn;
-#endif
-{
- mp_size_t i;
-
- while (rn != 0 && rp[0] == 0)
- rp++, rn--;
-
- if (rn != 0)
- {
- rp[0] = -rp[0];
- for (i = 1; i < rn; i++)
- rp[i] = ~rp[i];
- return 1;
- }
- return 0;
-}
diff --git a/ghc/rts/gmp/mpz/and.c b/ghc/rts/gmp/mpz/and.c
deleted file mode 100644
index 354e9455bf..0000000000
--- a/ghc/rts/gmp/mpz/and.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/* mpz_and -- Logical and.
-
-Copyright (C) 1991, 1993, 1994, 1996, 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_SWAP (op1, op2);
- MPN_SRCPTR_SWAP (op1_ptr,op1_size, op2_ptr,op2_size);
- }
-
- }
-
- {
-#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/ghc/rts/gmp/mpz/array_init.c b/ghc/rts/gmp/mpz/array_init.c
deleted file mode 100644
index 1c22046986..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/bin_ui.c b/ghc/rts/gmp/mpz/bin_ui.c
deleted file mode 100644
index a7a6c98218..0000000000
--- a/ghc/rts/gmp/mpz/bin_ui.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/* mpz_bin_uiui - compute n over k.
-
-Copyright (C) 1998, 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-
-/* This is a poor implementation. Look at bin_uiui.c for improvement ideas.
- In fact consider calling mpz_bin_uiui() when the arguments fit, leaving
- the code here only for big n.
-
- The identity bin(n,k) = (-1)^k * bin(-n+k-1,k) can be found in Knuth vol
- 1 section 1.2.6 part G. */
-
-
-/* Enhancement: use mpn_divexact_1 when it exists */
-#define DIVIDE() \
- ASSERT (SIZ(r) > 0); \
- ASSERT_NOCARRY (mpn_divrem_1 (PTR(r), (mp_size_t) 0, \
- PTR(r), SIZ(r), kacc)); \
- SIZ(r) -= (PTR(r)[SIZ(r)-1] == 0);
-
-void
-#if __STDC__
-mpz_bin_ui (mpz_ptr r, mpz_srcptr n, unsigned long int k)
-#else
-mpz_bin_ui (r, n, k)
- mpz_ptr r;
- mpz_srcptr n;
- unsigned long int k;
-#endif
-{
- mpz_t ni;
- mp_limb_t i;
- mpz_t nacc;
- mp_limb_t kacc;
- mp_size_t negate;
-
- if (mpz_sgn (n) < 0)
- {
- /* bin(n,k) = (-1)^k * bin(-n+k-1,k), and set ni = -n+k-1 - k = -n-1 */
- mpz_init (ni);
- mpz_neg (ni, n);
- mpz_sub_ui (ni, ni, 1L);
- negate = (k & 1); /* (-1)^k */
- }
- else
- {
- /* bin(n,k) == 0 if k>n
- (no test for this under the n<0 case, since -n+k-1 >= k there) */
- if (mpz_cmp_ui (n, k) < 0)
- {
- mpz_set_ui (r, 0L);
- return;
- }
-
- /* set ni = n-k */
- mpz_init (ni);
- mpz_sub_ui (ni, n, k);
- negate = 0;
- }
-
- /* Now wanting bin(ni+k,k), with ni positive, and "negate" is the sign (0
- for positive, 1 for negative). */
- mpz_set_ui (r, 1L);
-
- /* Rewrite bin(n,k) as bin(n,n-k) if that is smaller. In this case it's
- whether ni+k-k < k meaning ni<k, and if so change to denominator ni+k-k
- = ni, and new ni of ni+k-ni = k. */
- if (mpz_cmp_ui (ni, k) < 0)
- {
- unsigned long tmp;
- tmp = k;
- k = mpz_get_ui (ni);
- mpz_set_ui (ni, tmp);
- }
-
- kacc = 1;
- mpz_init_set_ui (nacc, 1);
-
- for (i = 1; i <= k; i++)
- {
- mp_limb_t k1, k0;
-
-#if 0
- mp_limb_t nacclow;
- int c;
-
- nacclow = PTR(nacc)[0];
- for (c = 0; (((kacc | nacclow) & 1) == 0); c++)
- {
- kacc >>= 1;
- nacclow >>= 1;
- }
- mpz_div_2exp (nacc, nacc, c);
-#endif
-
- mpz_add_ui (ni, ni, 1);
- mpz_mul (nacc, nacc, ni);
- umul_ppmm (k1, k0, kacc, i);
- if (k1 != 0)
- {
- /* Accumulator overflow. Perform bignum step. */
- mpz_mul (r, r, nacc);
- mpz_set_ui (nacc, 1);
- DIVIDE ();
- kacc = i;
- }
- else
- {
- /* Save new products in accumulators to keep accumulating. */
- kacc = k0;
- }
- }
-
- mpz_mul (r, r, nacc);
- DIVIDE ();
- SIZ(r) = (SIZ(r) ^ -negate) + negate;
-
- mpz_clear (nacc);
- mpz_clear (ni);
-}
diff --git a/ghc/rts/gmp/mpz/bin_uiui.c b/ghc/rts/gmp/mpz/bin_uiui.c
deleted file mode 100644
index b37541ba54..0000000000
--- a/ghc/rts/gmp/mpz/bin_uiui.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* mpz_bin_uiui - compute n over k.
-
-Copyright (C) 1998, 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-
-/* Avoid reallocs by rounding up any new size */
-#define ROUNDUP_MASK 15
-
-/* Enhancement: use mpn_divexact_1 when it exists */
-#define MULDIV() \
- MPZ_REALLOC (r, (SIZ(r)+1)|ROUNDUP_MASK); \
- PTR(r)[SIZ(r)] = mpn_mul_1 (PTR(r), PTR(r), SIZ(r), nacc); \
- ASSERT_NOCARRY (mpn_divrem_1 (PTR(r), (mp_size_t) 0, \
- PTR(r), SIZ(r)+1, kacc)); \
- SIZ(r) += (PTR(r)[SIZ(r)] != 0);
-
-void
-#if __STDC__
-mpz_bin_uiui (mpz_ptr r, unsigned long int n, unsigned long int k)
-#else
-mpz_bin_uiui (r, n, k)
- mpz_ptr r;
- unsigned long int n;
- unsigned long int k;
-#endif
-{
- unsigned long int i, j;
- mp_limb_t nacc, kacc;
- unsigned long int cnt;
-
- /* bin(n,k) = 0 if k>n. */
- if (n < k)
- {
- mpz_set_ui (r, 0);
- return;
- }
-
- /* Rewrite bin(n,k) as bin(n,n-k) if that is smaller. */
- k = MIN (k, n-k);
-
- /* bin(n,0) = 1 */
- if (k == 0)
- {
- mpz_set_ui (r, 1);
- return;
- }
-
- j = n - k + 1;
- mpz_set_ui (r, j);
-
- /* Initialize accumulators. */
- nacc = 1;
- kacc = 1;
-
- cnt = 0;
- for (i = 2; i <= k; i++)
- {
- mp_limb_t n1, n0, k1, k0;
-
- j++;
-#if 0
- /* Remove common multiples of 2. This will allow us to accumulate
- more in nacc and kacc before we need a bignum step. It would make
- sense to cancel factors of 3, 5, etc too, but this would be best
- handled by sieving out factors. Alternatively, we could perform a
- gcd of the accumulators just as they have overflown, and keep
- accumulating until the gcd doesn't remove a significant factor. */
- while (((nacc | kacc) & 1) == 0)
- {
- nacc >>= 1;
- kacc >>= 1;
- }
-#else
- cnt = ((nacc | kacc) & 1) ^ 1;
- nacc >>= cnt;
- kacc >>= cnt;
-#endif
- /* Accumulate next multiples. */
- umul_ppmm (n1, n0, nacc, j);
- umul_ppmm (k1, k0, kacc, i);
- if (n1 != 0)
- {
- /* Accumulator overflow. Perform bignum step. */
- MULDIV ();
- nacc = j;
- kacc = i;
- }
- else
- {
- if (k1 != 0) abort ();
- /* Save new products in accumulators to keep accumulating. */
- nacc = n0;
- kacc = k0;
- }
- }
-
- /* Take care of whatever is left in accumulators. */
- MULDIV ();
-}
diff --git a/ghc/rts/gmp/mpz/cdiv_q.c b/ghc/rts/gmp/mpz/cdiv_q.c
deleted file mode 100644
index b15ba8aaa9..0000000000
--- a/ghc/rts/gmp/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, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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, ABS (divisor_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/ghc/rts/gmp/mpz/cdiv_q_ui.c b/ghc/rts/gmp/mpz/cdiv_q_ui.c
deleted file mode 100644
index 74f3a90b83..0000000000
--- a/ghc/rts/gmp/mpz/cdiv_q_ui.c
+++ /dev/null
@@ -1,67 +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, 1999 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- 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_incr_u (quot_ptr, (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/ghc/rts/gmp/mpz/cdiv_qr.c b/ghc/rts/gmp/mpz/cdiv_qr.c
deleted file mode 100644
index 29c7c41a4e..0000000000
--- a/ghc/rts/gmp/mpz/cdiv_qr.c
+++ /dev/null
@@ -1,64 +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, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
- mp_size_t xsize;
- 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;
- }
-
- xsize = dividend->_mp_size ^ divisor_size;;
- mpz_tdiv_qr (quot, rem, dividend, divisor);
-
- if (xsize >= 0 && rem->_mp_size != 0)
- {
- mpz_add_ui (quot, quot, 1L);
- mpz_sub (rem, rem, divisor);
- }
-
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/cdiv_qr_ui.c b/ghc/rts/gmp/mpz/cdiv_qr_ui.c
deleted file mode 100644
index a7873c6e20..0000000000
--- a/ghc/rts/gmp/mpz/cdiv_qr_ui.c
+++ /dev/null
@@ -1,71 +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, 1999 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- 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_incr_u (quot_ptr, (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/ghc/rts/gmp/mpz/cdiv_r.c b/ghc/rts/gmp/mpz/cdiv_r.c
deleted file mode 100644
index e96ce7e677..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/cdiv_r_ui.c b/ghc/rts/gmp/mpz/cdiv_r_ui.c
deleted file mode 100644
index e17e2381c0..0000000000
--- a/ghc/rts/gmp/mpz/cdiv_r_ui.c
+++ /dev/null
@@ -1,57 +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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- 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/ghc/rts/gmp/mpz/cdiv_ui.c b/ghc/rts/gmp/mpz/cdiv_ui.c
deleted file mode 100644
index 63547a78c0..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/clear.c b/ghc/rts/gmp/mpz/clear.c
deleted file mode 100644
index 5224553f9e..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/clrbit.c b/ghc/rts/gmp/mpz/clrbit.c
deleted file mode 100644
index 865d84902f..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/cmp.c b/ghc/rts/gmp/mpz/cmp.c
deleted file mode 100644
index 60628348e5..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/cmp_si.c b/ghc/rts/gmp/mpz/cmp_si.c
deleted file mode 100644
index 0c2212fbe9..0000000000
--- a/ghc/rts/gmp/mpz/cmp_si.c
+++ /dev/null
@@ -1,64 +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, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_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 == (mp_limb_t) (unsigned long) v_digit)
- return 0;
-
- if (u_digit > (mp_limb_t) (unsigned long) v_digit)
- return usize;
- else
- return -usize;
-}
diff --git a/ghc/rts/gmp/mpz/cmp_ui.c b/ghc/rts/gmp/mpz/cmp_ui.c
deleted file mode 100644
index fd84f301c1..0000000000
--- a/ghc/rts/gmp/mpz/cmp_ui.c
+++ /dev/null
@@ -1,53 +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, 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_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/ghc/rts/gmp/mpz/cmpabs.c b/ghc/rts/gmp/mpz/cmpabs.c
deleted file mode 100644
index 037d7a9145..0000000000
--- a/ghc/rts/gmp/mpz/cmpabs.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* mpz_cmpabs(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, 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_cmpabs (mpz_srcptr u, mpz_srcptr v)
-#else
-mpz_cmpabs (u, v)
- mpz_srcptr u;
- mpz_srcptr v;
-#endif
-{
- mp_size_t usize = u->_mp_size;
- mp_size_t vsize = v->_mp_size;
- mp_size_t size;
- mp_srcptr up, vp;
- int cmp;
-
- usize = ABS (usize);
- vsize = ABS (vsize);
-
- if (usize != vsize)
- return usize - vsize;
-
- if (usize == 0)
- return 0;
-
- up = u->_mp_d;
- vp = v->_mp_d;
-
- cmp = mpn_cmp (up, vp, usize);
-
- return cmp;
-}
diff --git a/ghc/rts/gmp/mpz/cmpabs_ui.c b/ghc/rts/gmp/mpz/cmpabs_ui.c
deleted file mode 100644
index db816b5820..0000000000
--- a/ghc/rts/gmp/mpz/cmpabs_ui.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* mpz_cmpabs_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, 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_cmpabs_ui (mpz_srcptr u, unsigned long int v_digit)
-#else
-mpz_cmpabs_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);
-
- usize = ABS (usize);
-
- 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 1;
-}
diff --git a/ghc/rts/gmp/mpz/com.c b/ghc/rts/gmp/mpz/com.c
deleted file mode 100644
index 18d6427779..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/divexact.c b/ghc/rts/gmp/mpz/divexact.c
deleted file mode 100644
index c2970454fd..0000000000
--- a/ghc/rts/gmp/mpz/divexact.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* mpz_divexact -- finds quotient when known that quot * den == num && den != 0.
-
-Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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, dp;
- mp_size_t nsize, dsize;
- TMP_DECL (marker);
-
- nsize = ABS (num->_mp_size);
- dsize = ABS (den->_mp_size);
-
- qsize = nsize - dsize + 1;
- if (quot->_mp_alloc < qsize)
- _mpz_realloc (quot, qsize);
-
- np = num->_mp_d;
- dp = den->_mp_d;
- qp = quot->_mp_d;
-
- if (nsize == 0)
- {
- if (dsize == 0)
- DIVIDE_BY_ZERO;
- quot->_mp_size = 0;
- return;
- }
-
- if (dsize <= 1)
- {
- if (dsize == 1)
- {
- mpn_divmod_1 (qp, np, nsize, dp[0]);
- qsize -= qp[qsize - 1] == 0;
- quot->_mp_size = (num->_mp_size ^ den->_mp_size) >= 0 ? qsize : -qsize;
- return;
- }
-
- /* Generate divide-by-zero error since dsize == 0. */
- DIVIDE_BY_ZERO;
- }
-
- 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) != 0)
- {
- if (quot == den) /* QUOT and DEN overlap. */
- {
- tp = (mp_ptr) TMP_ALLOC (tsize * BYTES_PER_MP_LIMB);
- MPN_COPY (tp, dp, tsize);
- }
- else
- tp = (mp_ptr) dp;
- if (qp != np)
- MPN_COPY_INCR (qp, np, qsize);
- }
- else
- {
- unsigned int r;
- tp = (mp_ptr) TMP_ALLOC (tsize * BYTES_PER_MP_LIMB);
- 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 ^ den->_mp_size) >= 0 ? qsize : -qsize;
-
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/dump.c b/ghc/rts/gmp/mpz/dump.c
deleted file mode 100644
index dc318ac8cf..0000000000
--- a/ghc/rts/gmp/mpz/dump.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* mpz_dump - Dump an integer to stdout.
-
- THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS NOT SAFE TO
- CALL THIS FUNCTION DIRECTLY. IN FACT, IT IS ALMOST GUARANTEED THAT THIS
- FUNCTION WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE.
-
-
-Copyright (C) 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-void
-#if __STDC__
-mpz_dump (mpz_srcptr u)
-#else
-mpz_dump (u)
- mpz_srcptr u;
-#endif
-{
- char *str;
-
- str = mpz_get_str (0, 10, u);
- printf ("%s\n", str);
- (*_mp_free_func) (str, 0);/* ??? broken alloc interface, pass what size ??? */
-}
diff --git a/ghc/rts/gmp/mpz/fac_ui.c b/ghc/rts/gmp/mpz/fac_ui.c
deleted file mode 100644
index 85f40f271c..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/fdiv_q.c b/ghc/rts/gmp/mpz/fdiv_q.c
deleted file mode 100644
index 9d75ca33d2..0000000000
--- a/ghc/rts/gmp/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, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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, ABS (divisor_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/ghc/rts/gmp/mpz/fdiv_q_2exp.c b/ghc/rts/gmp/mpz/fdiv_q_2exp.c
deleted file mode 100644
index 8e02180ecc..0000000000
--- a/ghc/rts/gmp/mpz/fdiv_q_2exp.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* mpz_fdiv_q_2exp -- Divide an integer by 2**CNT. Round the quotient
- towards -infinity.
-
-Copyright (C) 1991, 1993, 1994, 1996, 1998, 1999 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
- if (wsize != 0)
- {
- cy = mpn_add_1 (wp, wp, wsize, (mp_limb_t) 1);
- wp[wsize] = cy;
- wsize += cy;
- }
- else
- {
- /* We shifted something negative to zero. The result is -1. */
- wp[0] = 1;
- wsize = 1;
- }
- }
- w->_mp_size = usize >= 0 ? wsize : -wsize;
-}
diff --git a/ghc/rts/gmp/mpz/fdiv_q_ui.c b/ghc/rts/gmp/mpz/fdiv_q_ui.c
deleted file mode 100644
index 55d2498693..0000000000
--- a/ghc/rts/gmp/mpz/fdiv_q_ui.c
+++ /dev/null
@@ -1,65 +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, 1999 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- 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_incr_u (quot_ptr, (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/ghc/rts/gmp/mpz/fdiv_qr.c b/ghc/rts/gmp/mpz/fdiv_qr.c
deleted file mode 100644
index 06ce50607b..0000000000
--- a/ghc/rts/gmp/mpz/fdiv_qr.c
+++ /dev/null
@@ -1,64 +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, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
- mp_size_t xsize;
- 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;
- }
-
- xsize = dividend->_mp_size ^ divisor_size;;
- mpz_tdiv_qr (quot, rem, dividend, divisor);
-
- if (xsize < 0 && rem->_mp_size != 0)
- {
- mpz_sub_ui (quot, quot, 1L);
- mpz_add (rem, rem, divisor);
- }
-
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/fdiv_qr_ui.c b/ghc/rts/gmp/mpz/fdiv_qr_ui.c
deleted file mode 100644
index 600c0dacfc..0000000000
--- a/ghc/rts/gmp/mpz/fdiv_qr_ui.c
+++ /dev/null
@@ -1,69 +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, 1999 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- 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_incr_u (quot_ptr, (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/ghc/rts/gmp/mpz/fdiv_r.c b/ghc/rts/gmp/mpz/fdiv_r.c
deleted file mode 100644
index a3652838d2..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/fdiv_r_2exp.c b/ghc/rts/gmp/mpz/fdiv_r_2exp.c
deleted file mode 100644
index 081ce19203..0000000000
--- a/ghc/rts/gmp/mpz/fdiv_r_2exp.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* mpz_fdiv_r_2exp -- Divide a integer by 2**CNT and produce a remainder.
-
-Copyright (C) 1991, 1993, 1994, 1995, 1998, 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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, and may need
- to round the result. */
- 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);
- in_size = in->_mp_size;
- res->_mp_size = res_size;
- if (in_size < 0 && res_size != 0)
- {
- /* Result should be 2^CNT - RES */
- mpz_t tmp;
- TMP_DECL (marker);
- TMP_MARK (marker);
- MPZ_TMP_INIT (tmp, cnt/BITS_PER_MP_LIMB + 2);
- mpz_set_ui (tmp, 1L);
- mpz_mul_2exp (tmp, tmp, cnt);
- mpz_sub (res, tmp, res);
- TMP_FREE (marker);
- }
-}
-
-/* This is an alternative ending of the above function using just low-level
- functions. Tested, but perhaps excessive? */
-#if 0
- if (in->_mp_size < 0 && res_size != 0)
- {
- /* Result should be 2^CNT - RES */
-
- mp_ptr rp;
-
- limb_cnt = cnt / BITS_PER_MP_LIMB;
-
- if (res->_mp_alloc <= limb_cnt)
- _mpz_realloc (res, limb_cnt + 1);
- rp = PTR(res);
- if (res_size > limb_cnt)
- {
- mpn_nz_neg (rp, rp, res_size);
- rp[limb_cnt] &= ~(~(mp_limb_t) 0 << cnt % BITS_PER_MP_LIMB);
- MPN_NORMALIZE_NOT_ZERO (rp, res_size);
- }
- else
- {
- mp_size_t i;
- mpn_nz_neg (rp, rp, res_size);
- for (i = res_size; i < limb_cnt; i++)
- rp[i] = ~ (mp_limb_t) 0;
- res_size = limb_cnt;
- if (cnt % BITS_PER_MP_LIMB != 0)
- {
- rp[res_size] = ((mp_limb_t) 1 << (cnt % BITS_PER_MP_LIMB)) - 1;
- res_size++;
- }
- else
- MPN_NORMALIZE_NOT_ZERO (rp, res_size);
- }
- }
- SIZ(res) = res_size;
-}
-
-static void
-mpn_nz_neg (rp, sp, n)
- mp_ptr rp, sp;
- mp_size_t n;
-{
- mp_size_t i;
- mp_limb_t x;
-
- x = sp[0];
- rp[0] = -x;
- for (i = 1; x == 0; i++)
- {
- x = sp[i];
- rp[i] = -x;
- }
-
- for (; i < n; i++)
- {
- rp[i] = ~sp[i];
- }
-}
-#endif
diff --git a/ghc/rts/gmp/mpz/fdiv_r_ui.c b/ghc/rts/gmp/mpz/fdiv_r_ui.c
deleted file mode 100644
index dd5c743d27..0000000000
--- a/ghc/rts/gmp/mpz/fdiv_r_ui.c
+++ /dev/null
@@ -1,55 +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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- 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/ghc/rts/gmp/mpz/fdiv_ui.c b/ghc/rts/gmp/mpz/fdiv_ui.c
deleted file mode 100644
index f937b5f6d0..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/fib_ui.c b/ghc/rts/gmp/mpz/fib_ui.c
deleted file mode 100644
index 4bebb80d94..0000000000
--- a/ghc/rts/gmp/mpz/fib_ui.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/* mpz_fib_ui(result, n) -- Set RESULT to the Nth Fibonacci number.
-
-Copyright (C) 1998, 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-/* This is fast, but could be made somewhat faster and neater.
- The timing is somewhat fluctuating for even/odd sizes because
- of the extra hair used to save variables and operations. Here
- are a few things one might want to address:
- 1. Avoid using 4 intermediate variables in mpz_fib_bigcase.
- 2. Call mpn functions directly. Straightforward for these functions.
- 3. Merge the three functions into one.
-
-Said by Kevin:
- Consider using the Lucas numbers L[n] as an auxiliary sequence, making
- it possible to do the "doubling" operation in mpz_fib_bigcase with two
- squares rather than two multiplies. The formulas are a little more
- complicated, something like the following (untested).
-
- F[2n] = ((F[n]+L[n])^2 - 6*F[n]^2 - 4*(-1)^n) / 2
- L[2n] = 5*F[n]^2 + 2*(-1)^n
-
- F[2n+1] = (F[2n] + L[2n]) / 2
- L[2n+1] = (5*F[2n] + L[2n]) / 2
-
- The Lucas number that comes for free here could even be returned.
-
- Maybe there's formulas with two squares using just F[n], but I don't
- know of any.
-*/
-
-/* Determine the needed storage for Fib(n). */
-#define FIB_SIZE(n) (((mp_size_t) ((n)*0.695)) / BITS_PER_MP_LIMB + 2)
-
-static void mpz_fib_bigcase _PROTO ((mpz_t, mpz_t, unsigned long int));
-static void mpz_fib_basecase _PROTO ((mpz_t, mpz_t, unsigned long int));
-
-
-#ifndef FIB_THRESHOLD
-#define FIB_THRESHOLD 60
-#endif
-
-void
-#if __STDC__
-mpz_fib_ui (mpz_t r, unsigned long int n)
-#else
-mpz_fib_ui (r, n)
- mpz_t r;
- unsigned long int n;
-#endif
-{
- if (n == 0)
- mpz_set_ui (r, 0);
- else
- {
- mpz_t t1;
- mpz_init (t1);
- if (n < FIB_THRESHOLD)
- mpz_fib_basecase (t1, r, n);
- else
- mpz_fib_bigcase (t1, r, n);
- mpz_clear (t1);
- }
-}
-
-static void
-#if __STDC__
-mpz_fib_basecase (mpz_t t1, mpz_t t2, unsigned long int n)
-#else
-mpz_fib_basecase (t1, t2, n)
- mpz_t t1;
- mpz_t t2;
- unsigned long int n;
-#endif
-{
- unsigned long int m, i;
-
- mpz_set_ui (t1, 0);
- mpz_set_ui (t2, 1);
- m = n/2;
- for (i = 0; i < m; i++)
- {
- mpz_add (t1, t1, t2);
- mpz_add (t2, t1, t2);
- }
- if ((n & 1) == 0)
- {
- mpz_sub (t1, t2, t1);
- mpz_sub (t2, t2, t1); /* trick: recover t1 value just overwritten */
- }
-}
-
-static void
-#if __STDC__
-mpz_fib_bigcase (mpz_t t1, mpz_t t2, unsigned long int n)
-#else
-mpz_fib_bigcase (t1, t2, n)
- mpz_t t1;
- mpz_t t2;
- unsigned long int n;
-#endif
-{
- unsigned long int n2;
- int ni, i;
- mpz_t x1, x2, u1, u2;
-
- ni = 0;
- for (n2 = n; n2 >= FIB_THRESHOLD; n2 /= 2)
- ni++;
-
- mpz_fib_basecase (t1, t2, n2);
-
- mpz_init (x1);
- mpz_init (x2);
- mpz_init (u1);
- mpz_init (u2);
-
- for (i = ni - 1; i >= 0; i--)
- {
- mpz_mul_2exp (x1, t1, 1);
- mpz_mul_2exp (x2, t2, 1);
-
- mpz_add (x1, x1, t2);
- mpz_sub (x2, x2, t1);
-
- mpz_mul (u1, t2, x1);
- mpz_mul (u2, t1, x2);
-
- if (((n >> i) & 1) == 0)
- {
- mpz_sub (t1, u1, u2);
- mpz_set (t2, u1);
- }
- else
- {
- mpz_set (t1, u1);
- mpz_mul_2exp (t2, u1, 1);
- mpz_sub (t2, t2, u2);
- }
- }
-
- mpz_clear (x1);
- mpz_clear (x2);
- mpz_clear (u1);
- mpz_clear (u2);
-}
diff --git a/ghc/rts/gmp/mpz/fits_sint_p.c b/ghc/rts/gmp/mpz/fits_sint_p.c
deleted file mode 100644
index 82e32a24d5..0000000000
--- a/ghc/rts/gmp/mpz/fits_sint_p.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X.
-
-Copyright (C) 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_fits_sint_p (mpz_srcptr src)
-#else
-mpz_fits_sint_p (src)
- mpz_srcptr src;
-#endif
-{
- mp_size_t size;
- mp_limb_t mpl;
-
- mpl = PTR(src)[0];
- size = SIZ(src);
- if (size > 0)
- {
- if (size > 1)
- return 0;
- return mpl < ~((~(unsigned int) 0) >> 1);
- }
- else
- {
- if (size < -1)
- return 0;
- return mpl <= ~((~(unsigned int) 0) >> 1);
- }
-}
diff --git a/ghc/rts/gmp/mpz/fits_slong_p.c b/ghc/rts/gmp/mpz/fits_slong_p.c
deleted file mode 100644
index e0669b5aaa..0000000000
--- a/ghc/rts/gmp/mpz/fits_slong_p.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X.
-
-Copyright (C) 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_fits_slong_p (mpz_srcptr src)
-#else
-mpz_fits_slong_p (src)
- mpz_srcptr src;
-#endif
-{
- mp_size_t size;
- mp_limb_t mpl;
-
- mpl = PTR(src)[0];
- size = SIZ(src);
- if (size > 0)
- {
- if (size > 1)
- return 0;
- return mpl < ~((~(unsigned long int) 0) >> 1);
- }
- else
- {
- if (size < -1)
- return 0;
- return mpl <= ~((~(unsigned long int) 0) >> 1);
- }
-}
diff --git a/ghc/rts/gmp/mpz/fits_sshort_p.c b/ghc/rts/gmp/mpz/fits_sshort_p.c
deleted file mode 100644
index 5b8e31afae..0000000000
--- a/ghc/rts/gmp/mpz/fits_sshort_p.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X.
-
-Copyright (C) 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_fits_sshort_p (mpz_srcptr src)
-#else
-mpz_fits_sshort_p (src)
- mpz_srcptr src;
-#endif
-{
- mp_size_t size;
- mp_limb_t mpl;
-
- mpl = PTR(src)[0];
- size = SIZ(src);
- if (size > 0)
- {
- if (size > 1)
- return 0;
- return mpl <= (((unsigned short int) ~(unsigned int) 0) >> 1);
- }
- else
- {
- if (size < -1)
- return 0;
- return mpl <= (((unsigned short int) ~(unsigned int) 0) >> 1) + 1;
- }
-}
diff --git a/ghc/rts/gmp/mpz/fits_uint_p.c b/ghc/rts/gmp/mpz/fits_uint_p.c
deleted file mode 100644
index 72f62fa723..0000000000
--- a/ghc/rts/gmp/mpz/fits_uint_p.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X.
-
-Copyright (C) 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_fits_uint_p (mpz_srcptr src)
-#else
-mpz_fits_uint_p (src)
- mpz_srcptr src;
-#endif
-{
- mp_size_t size;
- mp_limb_t mpl;
-
- mpl = PTR(src)[0];
- size = SIZ(src);
- if (size < 0 || size > 1)
- return 0;
- return mpl <= (~(unsigned int) 0);
-}
diff --git a/ghc/rts/gmp/mpz/fits_ulong_p.c b/ghc/rts/gmp/mpz/fits_ulong_p.c
deleted file mode 100644
index 92eb42e86e..0000000000
--- a/ghc/rts/gmp/mpz/fits_ulong_p.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X.
-
-Copyright (C) 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_fits_ulong_p (mpz_srcptr src)
-#else
-mpz_fits_ulong_p (src)
- mpz_srcptr src;
-#endif
-{
- mp_size_t size;
- mp_limb_t mpl;
-
- mpl = PTR(src)[0];
- size = SIZ(src);
- if (size < 0 || size > 1)
- return 0;
- return mpl <= (~(unsigned long int) 0);
-}
diff --git a/ghc/rts/gmp/mpz/fits_ushort_p.c b/ghc/rts/gmp/mpz/fits_ushort_p.c
deleted file mode 100644
index bde0edae6e..0000000000
--- a/ghc/rts/gmp/mpz/fits_ushort_p.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X.
-
-Copyright (C) 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_fits_ushort_p (mpz_srcptr src)
-#else
-mpz_fits_ushort_p (src)
- mpz_srcptr src;
-#endif
-{
- mp_size_t size;
- mp_limb_t mpl;
-
- mpl = PTR(src)[0];
- size = SIZ(src);
- if (size < 0 || size > 1)
- return 0;
- return mpl <= ((unsigned short int) ~(unsigned int) 0);
-}
diff --git a/ghc/rts/gmp/mpz/gcd.c b/ghc/rts/gmp/mpz/gcd.c
deleted file mode 100644
index 0d950dd609..0000000000
--- a/ghc/rts/gmp/mpz/gcd.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/* mpz/gcd.c: Calculate the greatest common divisor of two integers.
-
-Copyright (C) 1991, 1993, 1994, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-#ifdef BERKELEY_MP
-#include "mp.h"
-#endif
-
-
-#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 2nd argument must not have more bits than the 1st. */
- vsize = (usize < vsize || (usize == vsize && up[usize-1] < vp[vsize-1]))
- ? mpn_gcd (vp, vp, vsize, up, usize)
- : mpn_gcd (vp, up, usize, vp, vsize);
-
- /* 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/ghc/rts/gmp/mpz/gcd_ui.c b/ghc/rts/gmp/mpz/gcd_ui.c
deleted file mode 100644
index f3bec58829..0000000000
--- a/ghc/rts/gmp/mpz/gcd_ui.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* mpz_gcd_ui -- Calculate the greatest common divisior of two integers.
-
-Copyright (C) 1994, 1996, 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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> /* for NULL */
-#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, (mp_limb_t) v);
-
- if (w != NULL)
- {
- w->_mp_d[0] = res;
- w->_mp_size = 1;
- }
- return res;
-}
diff --git a/ghc/rts/gmp/mpz/gcdext.c b/ghc/rts/gmp/mpz/gcdext.c
deleted file mode 100644
index 3ba04c84ff..0000000000
--- a/ghc/rts/gmp/mpz/gcdext.c
+++ /dev/null
@@ -1,137 +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, 1996, 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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> /* for NULL */
-#include "gmp.h"
-#include "gmp-impl.h"
-
-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
-{
- mp_size_t asize, bsize, usize, vsize;
- mp_srcptr ap, bp;
- mp_ptr up, vp;
- mp_size_t gsize, ssize, tmp_ssize;
- mp_ptr gp, sp, tmp_gp, tmp_sp;
- mpz_srcptr u, v;
- mpz_ptr ss, tt;
- __mpz_struct stmp, gtmp;
- TMP_DECL (marker);
-
- TMP_MARK (marker);
-
- /* mpn_gcdext requires that U >= V. Therefore, we often have to swap U and
- V. This in turn leads to a lot of complications. The computed cofactor
- will be the wrong one, so we have to fix that up at the end. */
-
- asize = ABS (SIZ (a));
- bsize = ABS (SIZ (b));
- ap = PTR (a);
- bp = PTR (b);
- if (asize > bsize || (asize == bsize && mpn_cmp (ap, bp, asize) > 0))
- {
- usize = asize;
- vsize = bsize;
- up = (mp_ptr) TMP_ALLOC ((usize + 1) * BYTES_PER_MP_LIMB);
- vp = (mp_ptr) TMP_ALLOC ((vsize + 1) * BYTES_PER_MP_LIMB);
- MPN_COPY (up, ap, usize);
- MPN_COPY (vp, bp, vsize);
- u = a;
- v = b;
- ss = s;
- tt = t;
- }
- else
- {
- usize = bsize;
- vsize = asize;
- up = (mp_ptr) TMP_ALLOC ((usize + 1) * BYTES_PER_MP_LIMB);
- vp = (mp_ptr) TMP_ALLOC ((vsize + 1) * BYTES_PER_MP_LIMB);
- MPN_COPY (up, bp, usize);
- MPN_COPY (vp, ap, vsize);
- u = b;
- v = a;
- ss = t;
- tt = s;
- }
-
- tmp_gp = (mp_ptr) TMP_ALLOC ((usize + 1) * BYTES_PER_MP_LIMB);
- tmp_sp = (mp_ptr) TMP_ALLOC ((usize + 1) * BYTES_PER_MP_LIMB);
-
- if (vsize == 0)
- {
- tmp_sp[0] = 1;
- tmp_ssize = 1;
- MPN_COPY (tmp_gp, up, usize);
- gsize = usize;
- }
- else
- gsize = mpn_gcdext (tmp_gp, tmp_sp, &tmp_ssize, up, usize, vp, vsize);
- ssize = ABS (tmp_ssize);
-
- PTR (&gtmp) = tmp_gp;
- SIZ (&gtmp) = gsize;
-
- PTR (&stmp) = tmp_sp;
- SIZ (&stmp) = (tmp_ssize ^ SIZ (u)) >= 0 ? ssize : -ssize;
-
- if (tt != NULL)
- {
- if (SIZ (v) == 0)
- SIZ (tt) = 0;
- else
- {
- mpz_t x;
- MPZ_TMP_INIT (x, ssize + usize + 1);
- mpz_mul (x, &stmp, u);
- mpz_sub (x, &gtmp, x);
- mpz_tdiv_q (tt, x, v);
- }
- }
-
- if (ss != NULL)
- {
- if (ALLOC (ss) < ssize)
- _mpz_realloc (ss, ssize);
- sp = PTR (ss);
- MPN_COPY (sp, tmp_sp, ssize);
- SIZ (ss) = SIZ (&stmp);
- }
-
- if (ALLOC (g) < gsize)
- _mpz_realloc (g, gsize);
- gp = PTR (g);
- MPN_COPY (gp, tmp_gp, gsize);
- SIZ (g) = gsize;
-
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/get_d.c b/ghc/rts/gmp/mpz/get_d.c
deleted file mode 100644
index 6a7c5856bb..0000000000
--- a/ghc/rts/gmp/mpz/get_d.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* double mpz_get_d (mpz_t src) -- Return the double approximation to SRC.
-
-Copyright (C) 1996, 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-
-static int
-#if __STDC__
-mpn_zero_p (mp_ptr p, mp_size_t n)
-#else
-mpn_zero_p (p, n)
- mp_ptr p;
- mp_size_t n;
-#endif
-{
- mp_size_t i;
-
- for (i = 0; i < n; i++)
- {
- if (p[i] != 0)
- return 0;
- }
-
- return 1;
-}
-
-
-double
-#if __STDC__
-mpz_get_d (mpz_srcptr src)
-#else
-mpz_get_d (src)
- mpz_srcptr src;
-#endif
-{
- double res;
- mp_size_t size;
- int negative;
- mp_ptr qp;
- mp_limb_t hz, lz;
- int cnt;
-
- size = SIZ(src);
- if (size == 0)
- return 0.0;
-
- negative = size < 0;
- size = ABS (size);
- qp = PTR(src);
-
- if (size == 1)
- {
- res = qp[size - 1];
- }
- else if (size == 2)
- {
- res = MP_BASE_AS_DOUBLE * qp[size - 1] + qp[size - 2];
- }
- else
- {
- count_leading_zeros (cnt, qp[size - 1]);
-
-#if BITS_PER_MP_LIMB == 32
- if (cnt == 0)
- {
- hz = qp[size - 1];
- lz = qp[size - 2];
- }
- else
- {
- hz = (qp[size - 1] << cnt) | (qp[size - 2] >> BITS_PER_MP_LIMB - cnt);
- lz = (qp[size - 2] << cnt) | (qp[size - 3] >> BITS_PER_MP_LIMB - cnt);
- }
-#if _GMP_IEEE_FLOATS
- /* Take bits from less significant limbs, but only if they may affect
- the result. */
- if ((lz & 0x7ff) == 0x400)
- {
- if (cnt != 0)
- lz += ((qp[size - 3] << cnt) != 0 || ! mpn_zero_p (qp, size - 3));
- else
- lz += (! mpn_zero_p (qp, size - 2));
- }
-#endif
- res = MP_BASE_AS_DOUBLE * hz + lz;
- res = __gmp_scale2 (res, (size - 2) * BITS_PER_MP_LIMB - cnt);
-#endif
-#if BITS_PER_MP_LIMB == 64
- if (cnt == 0)
- hz = qp[size - 1];
- else
- hz = (qp[size - 1] << cnt) | (qp[size - 2] >> BITS_PER_MP_LIMB - cnt);
-#if _GMP_IEEE_FLOATS
- if ((hz & 0x7ff) == 0x400)
- {
- if (cnt != 0)
- hz += ((qp[size - 2] << cnt) != 0 || ! mpn_zero_p (qp, size - 2));
- else
- hz += (! mpn_zero_p (qp, size - 1));
- }
-#endif
- res = hz;
- res = __gmp_scale2 (res, (size - 1) * BITS_PER_MP_LIMB - cnt);
-#endif
- }
-
- return negative ? -res : res;
-}
diff --git a/ghc/rts/gmp/mpz/get_si.c b/ghc/rts/gmp/mpz/get_si.c
deleted file mode 100644
index 8a5d0e4803..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/get_str.c b/ghc/rts/gmp/mpz/get_str.c
deleted file mode 100644
index c7278afb52..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/get_ui.c b/ghc/rts/gmp/mpz/get_ui.c
deleted file mode 100644
index a8ec9e01a4..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/getlimbn.c b/ghc/rts/gmp/mpz/getlimbn.c
deleted file mode 100644
index b772ed05c4..0000000000
--- a/ghc/rts/gmp/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, 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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 (ABS (integer->_mp_size) <= n || n < 0)
- return 0;
- else
- return integer->_mp_d[n];
-}
diff --git a/ghc/rts/gmp/mpz/hamdist.c b/ghc/rts/gmp/mpz/hamdist.c
deleted file mode 100644
index b039a653d2..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/init.c b/ghc/rts/gmp/mpz/init.c
deleted file mode 100644
index 2e8e4d2cbd..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/inp_raw.c b/ghc/rts/gmp/mpz/inp_raw.c
deleted file mode 100644
index 15e601229d..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/inp_str.c b/ghc/rts/gmp/mpz/inp_str.c
deleted file mode 100644
index 7aa5e1fc30..0000000000
--- a/ghc/rts/gmp/mpz/inp_str.c
+++ /dev/null
@@ -1,167 +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, 1998, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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
-#if __STDC__
-digit_value_in_base (int c, int base)
-#else
-digit_value_in_base (c, base)
- int c;
- int base;
-#endif
-{
- 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 x, FILE *stream, int base)
-#else
-mpz_inp_str (x, stream, base)
- mpz_ptr x;
- FILE *stream;
- int base;
-#endif
-{
- char *str;
- size_t alloc_size, str_size;
- int c;
- int negative;
- mp_size_t xsize;
- size_t nread;
-
- if (stream == 0)
- stream = stdin;
-
- nread = 0;
-
- /* Skip whitespace. */
- do
- {
- c = getc (stream);
- nread++;
- }
- while (isspace (c));
-
- negative = 0;
- if (c == '-')
- {
- negative = 1;
- c = getc (stream);
- nread++;
- }
-
- 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++;
- }
- else if (c == 'b' || c == 'B')
- {
- base = 2;
- c = getc (stream);
- nread++;
- }
- }
- }
-
- /* Skip leading zeros. */
- while (c == '0')
- {
- c = getc (stream);
- nread++;
- }
-
- alloc_size = 100;
- str = (char *) (*_mp_allocate_func) (alloc_size);
- str_size = 0;
-
- 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);
-
- /* Make sure the string is not empty, mpn_set_str would fail. */
- if (str_size == 0)
- {
- x->_mp_size = 0;
- (*_mp_free_func) (str, alloc_size);
- return nread;
- }
-
- xsize = (((mp_size_t) (str_size / __mp_bases[base].chars_per_bit_exactly))
- / BITS_PER_MP_LIMB + 2);
- if (x->_mp_alloc < xsize)
- _mpz_realloc (x, xsize);
-
- /* Convert the byte array in base BASE to our bignum format. */
- xsize = mpn_set_str (x->_mp_d, (unsigned char *) str, str_size, base);
- x->_mp_size = negative ? -xsize : xsize;
-
- (*_mp_free_func) (str, alloc_size);
- return str_size + nread;
-}
diff --git a/ghc/rts/gmp/mpz/invert.c b/ghc/rts/gmp/mpz/invert.c
deleted file mode 100644
index 749a0969fc..0000000000
--- a/ghc/rts/gmp/mpz/invert.c
+++ /dev/null
@@ -1,77 +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 INVERSE.
-
-Copyright (C) 1996, 1997, 1998, 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_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, tmp;
- mp_size_t xsize, nsize, size;
- TMP_DECL (marker);
-
- xsize = SIZ (x);
- nsize = SIZ (n);
- xsize = ABS (xsize);
- nsize = ABS (nsize);
- size = MAX (xsize, nsize) + 1;
-
- /* No inverse exists if the leftside operand is 0. Likewise, no
- inverse exists if the mod operand is 1. */
- if (xsize == 0 || (nsize == 1 && (PTR (n))[0] == 1))
- return 0;
-
- TMP_MARK (marker);
-
- MPZ_TMP_INIT (gcd, size);
- MPZ_TMP_INIT (tmp, size);
- mpz_gcdext (gcd, tmp, (mpz_ptr) 0, x, n);
-
- /* If no inverse existed, return with an indication of that. */
- if (gcd->_mp_size != 1 || (gcd->_mp_d)[0] != 1)
- {
- TMP_FREE (marker);
- return 0;
- }
-
- /* Make sure we return a positive inverse. */
- if (SIZ (tmp) < 0)
- {
- if (SIZ (n) < 0)
- mpz_sub (inverse, tmp, n);
- else
- mpz_add (inverse, tmp, n);
- }
- else
- mpz_set (inverse, tmp);
-
- TMP_FREE (marker);
- return 1;
-}
diff --git a/ghc/rts/gmp/mpz/ior.c b/ghc/rts/gmp/mpz/ior.c
deleted file mode 100644
index 0bb5a806dc..0000000000
--- a/ghc/rts/gmp/mpz/ior.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/* mpz_ior -- Logical inclusive or.
-
-Copyright (C) 1991, 1993, 1994, 1996, 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_SWAP (op1, op2);
- MPN_SRCPTR_SWAP (op1_ptr,op1_size, op2_ptr,op2_size);
- }
- }
-
- {
- 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;
- op2_size -= op2_ptr[op2_size - 1] == 0;
-
- 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/ghc/rts/gmp/mpz/iset.c b/ghc/rts/gmp/mpz/iset.c
deleted file mode 100644
index 114bc2d542..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/iset_d.c b/ghc/rts/gmp/mpz/iset_d.c
deleted file mode 100644
index 502a8933e2..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/iset_si.c b/ghc/rts/gmp/mpz/iset_si.c
deleted file mode 100644
index 842db140ef..0000000000
--- a/ghc/rts/gmp/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, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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] = (unsigned long) -val;
- x->_mp_size = -1;
- }
- else
- x->_mp_size = 0;
-}
diff --git a/ghc/rts/gmp/mpz/iset_str.c b/ghc/rts/gmp/mpz/iset_str.c
deleted file mode 100644
index dfb8c6b230..0000000000
--- a/ghc/rts/gmp/mpz/iset_str.c
+++ /dev/null
@@ -1,47 +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, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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);
-
- /* if str has no digits mpz_set_str leaves x->_mp_size unset */
- x->_mp_size = 0;
-
- return mpz_set_str (x, str, base);
-}
diff --git a/ghc/rts/gmp/mpz/iset_ui.c b/ghc/rts/gmp/mpz/iset_ui.c
deleted file mode 100644
index 759182c556..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/jacobi.c b/ghc/rts/gmp/mpz/jacobi.c
deleted file mode 100644
index 9d49e1d0c6..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/kronsz.c b/ghc/rts/gmp/mpz/kronsz.c
deleted file mode 100644
index c8c6752224..0000000000
--- a/ghc/rts/gmp/mpz/kronsz.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* mpz_si_kronecker -- Kronecker/Jacobi symbol. */
-
-/*
-Copyright (C) 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-
-int
-#if __STDC__
-mpz_si_kronecker (long a, mpz_srcptr b)
-#else
-mpz_si_kronecker (a, b)
- long a;
- mpz_srcptr b;
-#endif
-{
- int b_abs_size;
- mp_srcptr b_ptr;
- mp_limb_t b_low;
- int twos;
- int result_bit1;
-
- b_abs_size = ABSIZ (b);
- if (b_abs_size == 0)
- return JACOBI_S0 (a); /* (a/0) */
-
- b_ptr = PTR(b);
- b_low = b_ptr[0];
-
- /* (0/b) = 1 if b=+/-1, 0 otherwise */
- if (a == 0)
- return (b_abs_size == 1) & (b_low == 1);
-
- /* account for the effect of the sign of b, so can then ignore it */
- result_bit1 = JACOBI_BSGN_SZ_BIT1 (a, b);
-
- if ((b_low & 1) == 0)
- {
- /* b even */
-
- if ((a & 1) == 0)
- return 0; /* (a/b)=0 if both a,b even */
-
- /* Require MP_BITS_PER_LIMB even, so that (a/2)^MP_BITS_PER_LIMB = 1,
- and so that therefore there's no need to account for how many zero
- limbs are stripped. */
- ASSERT ((BITS_PER_MP_LIMB & 1) == 0);
-
- MPN_STRIP_LOW_ZEROS_NOT_ZERO (b_ptr, b_abs_size);
- b_low = b_ptr[0];
-
- if ((b_low & 1) == 0)
- {
- /* odd a, even b */
-
- mp_limb_t b_shl_bit1;
-
- count_trailing_zeros (twos, b_low);
-
- /* b_shl_bit1 is b>>twos, but with only bit 1 guaranteed */
- if (twos == BITS_PER_MP_LIMB-1)
- b_shl_bit1 = (b_abs_size == 1) ? 0 : (b_ptr[1] << 1);
- else
- b_shl_bit1 = (b_low >> twos);
-
- result_bit1 ^= JACOBI_ASGN_SU_BIT1 (a, b_shl_bit1);
- a = ABS(a);
-
- if (a == 1)
- return JACOBI_BIT1_TO_PN (result_bit1); /* (1/b)=1 */
-
- /* twos (a/2), reciprocity to (b/a), and (b/a) = (b mod a / b) */
- return mpn_jacobi_base (mpn_mod_1_rshift (b_ptr, b_abs_size,
- twos, a),
- a,
- result_bit1
- ^ JACOBI_TWOS_U_BIT1 (twos, a)
- ^ JACOBI_RECIP_UU_BIT1 (a, b_shl_bit1));
- }
- }
-
- /* b odd */
-
- result_bit1 ^= JACOBI_ASGN_SU_BIT1 (a, b_low);
- a = ABS(a);
-
- /* (a/1) = 1 for any a */
- if (b_abs_size == 1 && b_low == 1)
- return JACOBI_BIT1_TO_PN (result_bit1);
-
- /* Note a is cast to unsigned because 0x80..00 doesn't fit in a signed. */
- if ((a & 1) == 0)
- {
- count_trailing_zeros (twos, a);
- a = ((unsigned long) a) >> twos;
- result_bit1 ^= JACOBI_TWOS_U_BIT1 (twos, b_low);
- }
-
- if (a == 1)
- return JACOBI_BIT1_TO_PN (result_bit1); /* (1/b)=1 */
-
- /* reciprocity to (b/a), and (b/a) == (b mod a / a) */
- return mpn_jacobi_base (mpn_mod_1 (b_ptr, b_abs_size, a), a,
- result_bit1 ^ JACOBI_RECIP_UU_BIT1 (a, b_low));
-}
diff --git a/ghc/rts/gmp/mpz/kronuz.c b/ghc/rts/gmp/mpz/kronuz.c
deleted file mode 100644
index b877e6f64c..0000000000
--- a/ghc/rts/gmp/mpz/kronuz.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/* mpz_ui_kronecker -- Kronecker/Jacobi symbol. */
-
-/*
-Copyright (C) 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-
-int
-#if __STDC__
-mpz_ui_kronecker (unsigned long a, mpz_srcptr b)
-#else
-mpz_ui_kronecker (a, b)
- unsigned long a;
- mpz_srcptr b;
-#endif
-{
- int b_abs_size;
- mp_srcptr b_ptr;
- mp_limb_t b_low;
- int twos;
- int result_bit1;
-
- /* (a/0) */
- b_abs_size = ABSIZ (b);
- if (b_abs_size == 0)
- return JACOBI_U0 (a);
-
- /* (a/-1)=1 when a>=0, so the sign of b is ignored */
- b_ptr = PTR(b);
- b_low = b_ptr[0];
-
- /* (0/1)=1; (0/-1)=1; (0/b)=0 for b!=+/-1
- (1/b)=1, for any b */
- if (a <= 1)
- return (a == 1) | ((b_abs_size == 1) & (b_low == 1));
-
- if (b_low & 1)
- {
- /* (a/1) = 1 for any a */
- if (b_abs_size == 1 && b_low == 1)
- return 1;
-
- count_trailing_zeros (twos, a);
- a >>= twos;
- if (a == 1)
- return JACOBI_TWOS_U (twos, b_low); /* powers of (2/b) only */
-
- /* powers of (2/b); reciprocity to (b/a); (b/a) == (b mod a / a) */
- return mpn_jacobi_base (mpn_mod_1 (b_ptr, b_abs_size, a),
- a,
- JACOBI_TWOS_U_BIT1 (twos, b_low)
- ^ JACOBI_RECIP_UU_BIT1 (b_low, a));
- }
-
- /* b is even; (a/2)=0 if a is even */
- if ((a & 1) == 0)
- return 0;
-
- /* Require MP_BITS_PER_LIMB even, so (a/2)^MP_BITS_PER_LIMB = 1, and so we
- don't have to pay attention to how many trailing zero limbs are
- stripped. */
- ASSERT ((BITS_PER_MP_LIMB & 1) == 0);
-
- MPN_STRIP_LOW_ZEROS_NOT_ZERO (b_ptr, b_abs_size);
- b_low = b_ptr[0];
-
- if (b_low & 1)
- /* reciprocity to (b/a); (b/a) == (b mod a / a) */
- return mpn_jacobi_base (mpn_mod_1 (b_ptr, b_abs_size, a),
- a,
- JACOBI_RECIP_UU_BIT1 (b_low, a));
-
- count_trailing_zeros (twos, b_low);
-
- /* reciprocity to get (b/a) */
- if (twos == BITS_PER_MP_LIMB-1)
- {
- if (b_abs_size == 1)
- {
- /* b==0x800...00, one limb high bit only, so (a/2)^(BPML-1) */
- return JACOBI_TWOS_U (BITS_PER_MP_LIMB-1, a);
- }
-
- /* b_abs_size > 1 */
- result_bit1 = JACOBI_RECIP_UU_BIT1 (a, b_ptr[1] << 1);
- }
- else
- result_bit1 = JACOBI_RECIP_UU_BIT1 (a, b_low >> twos);
-
- /* powers of (a/2); reciprocity to (b/a); (b/a) == (b mod a / a) */
- return mpn_jacobi_base (mpn_mod_1_rshift (b_ptr, b_abs_size, twos, a),
- a,
- JACOBI_TWOS_U_BIT1 (twos, a) ^ result_bit1);
-}
diff --git a/ghc/rts/gmp/mpz/kronzs.c b/ghc/rts/gmp/mpz/kronzs.c
deleted file mode 100644
index edfb465976..0000000000
--- a/ghc/rts/gmp/mpz/kronzs.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* mpz_kronecker_si -- Kronecker/Jacobi symbol. */
-
-/*
-Copyright (C) 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-
-/* This function is expected to be often used with b odd, so there's a test
- for this before invoking count_trailing_zeros().
-
- After the absolute value of b is established it's treated as an unsigned
- long, because 0x80..00 doesn't fit in a signed long. */
-
-int
-#if __STDC__
-mpz_kronecker_si (mpz_srcptr a, long b)
-#else
-mpz_kronecker_si (a, b)
- mpz_srcptr a;
- long b;
-#endif
-{
- int result_bit1;
- int twos;
-
- if (b == 0)
- return JACOBI_Z0 (a);
-
- result_bit1 = JACOBI_BSGN_ZS_BIT1(a, b);
- b = ABS (b);
-
- if (b == 1)
- return JACOBI_BIT1_TO_PN (result_bit1); /* (a/1) = 1 for any a */
-
- if (b & 1)
- return mpn_jacobi_base (mpz_fdiv_ui (a, b), b, result_bit1);
-
- /* result 0 if both a,b even */
- if (mpz_even_p (a))
- return 0;
-
- /* (a/2)=(2/a) when a odd */
- count_trailing_zeros (twos, b);
- result_bit1 ^= JACOBI_TWOS_U_BIT1 (twos, PTR(a)[0]);
-
- b = ((unsigned long) b) >> twos;
- if (b == 1)
- return JACOBI_BIT1_TO_PN (result_bit1);
- else
- return mpn_jacobi_base (mpz_fdiv_ui (a, b), b, result_bit1);
-}
-
-
diff --git a/ghc/rts/gmp/mpz/kronzu.c b/ghc/rts/gmp/mpz/kronzu.c
deleted file mode 100644
index 749be5df07..0000000000
--- a/ghc/rts/gmp/mpz/kronzu.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* mpz_kronecker_ui -- Kronecker/Jacobi symbol. */
-
-/*
-Copyright (C) 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-
-/* This function is expected to be often used with b an odd prime, so the
- code for odd b is nice and short. */
-
-int
-#if __STDC__
-mpz_kronecker_ui (mpz_srcptr a, unsigned long b)
-#else
-mpz_kronecker_ui (a, b)
- mpz_srcptr a;
- unsigned long b;
-#endif
-{
- int twos;
-
- if (b & 1)
- {
- if (b != 1)
- return mpn_jacobi_base (mpz_fdiv_ui (a, b), b, 0);
- else
- return 1; /* (a/1)=1 for any a */
- }
-
- if (b == 0)
- return JACOBI_Z0 (a);
-
- /* (a/2)=0 if a even */
- if (mpz_even_p (a))
- return 0;
-
- /* (a/2)=(2/a) when a odd */
- count_trailing_zeros (twos, b);
- b >>= twos;
- if (b == 1)
- return JACOBI_TWOS_U (twos, PTR(a)[0]);
-
- return mpn_jacobi_base (mpz_fdiv_ui (a, b), b,
- JACOBI_TWOS_U_BIT1(twos, PTR(a)[0]));
-}
diff --git a/ghc/rts/gmp/mpz/lcm.c b/ghc/rts/gmp/mpz/lcm.c
deleted file mode 100644
index 7495882ae5..0000000000
--- a/ghc/rts/gmp/mpz/lcm.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* mpz/lcm.c: Calculate the least common multiple of two integers.
-
-Copyright (C) 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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 ();
-
-void
-#if __STDC__
-mpz_lcm (mpz_ptr r, mpz_srcptr u, mpz_srcptr v)
-#else
-mpz_lcm (r, u, v)
- mpz_ptr r;
- mpz_srcptr u;
- mpz_srcptr v;
-#endif
-{
- mpz_t g;
- mp_size_t usize, vsize, size;
- TMP_DECL (marker);
-
- TMP_MARK (marker);
-
- usize = ABS (SIZ (u));
- vsize = ABS (SIZ (v));
-
- if (usize == 0 || vsize == 0)
- {
- SIZ (r) = 0;
- return;
- }
-
- size = MAX (usize, vsize);
- MPZ_TMP_INIT (g, size);
-
- mpz_gcd (g, u, v);
- mpz_divexact (g, u, g);
- mpz_mul (r, g, v);
-
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/legendre.c b/ghc/rts/gmp/mpz/legendre.c
deleted file mode 100644
index ab665f70d0..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/mod.c b/ghc/rts/gmp/mpz/mod.c
deleted file mode 100644
index 87033b333b..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/mul.c b/ghc/rts/gmp/mpz/mul.c
deleted file mode 100644
index 7854788e50..0000000000
--- a/ghc/rts/gmp/mpz/mul.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* mpz_mul -- Multiply two integers.
-
-Copyright (C) 1991, 1993, 1994, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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> /* for NULL */
-#include "gmp.h"
-#include "gmp-impl.h"
-#ifdef BERKELEY_MP
-#include "mp.h"
-#endif
-
-#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/ghc/rts/gmp/mpz/mul_2exp.c b/ghc/rts/gmp/mpz/mul_2exp.c
deleted file mode 100644
index abea5fed2c..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/mul_siui.c b/ghc/rts/gmp/mpz/mul_siui.c
deleted file mode 100644
index 9849cd41b0..0000000000
--- a/ghc/rts/gmp/mpz/mul_siui.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* mpz_mul_ui/si (product, multiplier, small_multiplicand) -- Set PRODUCT to
- MULTIPLICATOR times SMALL_MULTIPLICAND.
-
-Copyright (C) 1991, 1993, 1994, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-
-#ifdef OPERATION_mul_ui
-#define FUNCTION mpz_mul_ui
-#define MULTIPLICAND_UNSIGNED unsigned
-#define MULTIPLICAND_ABS(x) x
-#else
-#ifdef OPERATION_mul_si
-#define FUNCTION mpz_mul_si
-#define MULTIPLICAND_UNSIGNED
-#define MULTIPLICAND_ABS(x) ABS(x)
-#else
-Error, error, unrecognised OPERATION
-#endif
-#endif
-
-
-void
-#if __STDC__
-FUNCTION (mpz_ptr prod, mpz_srcptr mult,
- MULTIPLICAND_UNSIGNED long int small_mult)
-#else
-FUNCTION (prod, mult, small_mult)
- mpz_ptr prod;
- mpz_srcptr mult;
- MULTIPLICAND_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;
-
- if (size == 0 || small_mult == 0)
- {
- prod->_mp_size = 0;
- return;
- }
- size = ABS (size);
-
- 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) MULTIPLICAND_ABS (small_mult));
- if (cy != 0)
- {
- prod_ptr[size] = cy;
- size++;
- }
-
- prod->_mp_size = ((sign_product < 0) ^ (small_mult < 0)) ? -size : size;
-}
diff --git a/ghc/rts/gmp/mpz/neg.c b/ghc/rts/gmp/mpz/neg.c
deleted file mode 100644
index 566c3a95aa..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/nextprime.c b/ghc/rts/gmp/mpz/nextprime.c
deleted file mode 100644
index f024dd1206..0000000000
--- a/ghc/rts/gmp/mpz/nextprime.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* mpz_nextprime(p,t) - compute the next prime > t and store that in p.
-
-Copyright (C) 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_nextprime (mpz_ptr p, mpz_srcptr t)
-#else
-mpz_nextprime (p, t)
- mpz_ptr p;
- mpz_srcptr t;
-#endif
-{
- mpz_add_ui (p, t, 1L);
- while (! mpz_probab_prime_p (p, 5))
- mpz_add_ui (p, p, 1L);
-}
-
-#if 0
-/* This code is not yet tested. Will be enabled in 3.1. */
-
-status unsigned short primes[] =
-{
-3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,
-101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,
-191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,
-281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,
-389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,
-491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,
-607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,
-719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,
-829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,
-953,967,971,977,983,991,997
-};
-
-#define NUMBER_OF_PRIMES 167
-
-void
-#if __STDC__
-mpz_nextprime (mpz_ptr p, mpz_srcptr n)
-#else
-mpz_nextprime (p, n)
- mpz_ptr p;
- mpz_srcptr n;
-#endif
-{
- mpz_t tmp;
- unsigned short *moduli;
- unsigned long difference;
- int i;
- int composite;
-
- /* First handle tiny numbers */
- if (mpz_cmp_ui (n, 2) < 0)
- {
- mpz_set_ui (p, 2);
- return;
- }
- mpz_add_ui (p, n, 1);
- mpz_setbit (p, 0);
-
- if (mpz_cmp_ui (p, 7) <= 0)
- return;
-
- prime_limit = NUMBER_OF_PRIMES - 1;
- if (mpz_cmp_ui (p, primes[prime_limit]) <= 0)
- /* Just use first three entries (3,5,7) of table for small numbers */
- prime_limit = 3;
- if (prime_limit)
- {
- /* Compute residues modulo small odd primes */
- moduli = (unsigned short *) TMP_ALLOC (prime_limit * sizeof moduli[0]);
- for (i = 0; i < prime_limit; i++)
- moduli[i] = mpz_fdiv_ui (p, primes[i]);
- }
- for (difference = 0; ; difference += 2)
- {
- composite = 0;
-
- /* First check residues */
- for (i = 0; i < prime_limit; i++)
- {
- int acc, pr;
- composite |= (moduli[i] == 0);
- acc = moduli[i] + 2;
- pr = primes[i];
- moduli[i] = acc >= pr ? acc - pr : acc;
- }
- if (composite)
- continue;
-
- mpz_add_ui (p, p, difference);
- difference = 0;
-
- /* Miller-Rabin test */
- if (mpz_millerrabin (p, 2))
- break;
- }
-}
-#endif
diff --git a/ghc/rts/gmp/mpz/out_raw.c b/ghc/rts/gmp/mpz/out_raw.c
deleted file mode 100644
index 62709479c5..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/out_str.c b/ghc/rts/gmp/mpz/out_str.c
deleted file mode 100644
index bf971b0057..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/perfpow.c b/ghc/rts/gmp/mpz/perfpow.c
deleted file mode 100644
index e71670a0be..0000000000
--- a/ghc/rts/gmp/mpz/perfpow.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/* mpz_perfect_power_p(arg) -- Return non-zero if ARG is a perfect power,
- zero otherwise.
-
-Copyright (C) 1998, 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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. */
-
-/*
- We are to determine if c is a perfect power, c = a ^ b.
- Assume c is divisible by 2^n and that codd = c/2^n is odd.
- Assume a is divisible by 2^m and that aodd = a/2^m is odd.
- It is always true that m divides n.
-
- * If n is prime, either 1) a is 2*aodd and b = n
- or 2) a = c and b = 1.
- So for n prime, we readily have a solution.
- * If n is factorable into the non-trivial factors p1,p2,...
- Since m divides n, m has a subset of n's factors and b = n / m.
-
- BUG: Should handle negative numbers, since they can be odd perfect powers.
-*/
-
-/* This is a naive approach to recognizing perfect powers.
- Many things can be improved. In particular, we should use p-adic
- arithmetic for computing possible roots. */
-
-#include <stdio.h> /* for NULL */
-#include "gmp.h"
-#include "gmp-impl.h"
-#include "longlong.h"
-
-static unsigned long int gcd _PROTO ((unsigned long int a, unsigned long int b));
-static int isprime _PROTO ((unsigned long int t));
-
-static const unsigned short primes[] =
-{ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53,
- 59, 61, 67, 71, 73, 79, 83, 89, 97,101,103,107,109,113,127,131,
- 137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,
- 227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,
- 313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,
- 419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,
- 509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,
- 617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,
- 727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,
- 829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,
- 947,953,967,971,977,983,991,997,0
-};
-#define SMALLEST_OMITTED_PRIME 1009
-
-
-int
-#if __STDC__
-mpz_perfect_power_p (mpz_srcptr u)
-#else
-mpz_perfect_power_p (u)
- mpz_srcptr u;
-#endif
-{
- unsigned long int prime;
- unsigned long int n, n2;
- int i;
- unsigned long int rem;
- mpz_t u2, q;
- int exact;
- mp_size_t uns;
- TMP_DECL (marker);
-
- if (mpz_cmp_ui (u, 1) <= 0)
- return 0;
-
- n2 = mpz_scan1 (u, 0);
- if (n2 == 1)
- return 0;
-
- TMP_MARK (marker);
-
- uns = ABSIZ (u) - n2 / BITS_PER_MP_LIMB;
- MPZ_TMP_INIT (q, uns);
- MPZ_TMP_INIT (u2, uns);
-
- mpz_tdiv_q_2exp (u2, u, n2);
-
- if (isprime (n2))
- goto n2prime;
-
- for (i = 1; primes[i] != 0; i++)
- {
- prime = primes[i];
- rem = mpz_tdiv_ui (u2, prime);
- if (rem == 0) /* divisable? */
- {
- rem = mpz_tdiv_q_ui (q, u2, prime * prime);
- if (rem != 0)
- {
- TMP_FREE (marker);
- return 0;
- }
- mpz_swap (q, u2);
- for (n = 2;;)
- {
- rem = mpz_tdiv_q_ui (q, u2, prime);
- if (rem != 0)
- break;
- mpz_swap (q, u2);
- n++;
- }
-
- n2 = gcd (n2, n);
- if (n2 == 1)
- {
- TMP_FREE (marker);
- return 0;
- }
-
- /* As soon as n2 becomes a prime number, stop factoring.
- Either we have u=x^n2 or u is not a perfect power. */
- if (isprime (n2))
- goto n2prime;
- }
- }
-
- if (mpz_cmp_ui (u2, 1) == 0)
- {
- TMP_FREE (marker);
- return 1;
- }
-
- if (n2 == 0)
- {
- unsigned long int nth;
- /* We did not find any factors above. We have to consider all values
- of n. */
- for (nth = 2;; nth++)
- {
- if (! isprime (nth))
- continue;
-#if 0
- exact = mpz_padic_root (q, u2, nth, PTH);
- if (exact)
-#endif
- exact = mpz_root (q, u2, nth);
- if (exact)
- {
- TMP_FREE (marker);
- return 1;
- }
- if (mpz_cmp_ui (q, SMALLEST_OMITTED_PRIME) < 0)
- {
- TMP_FREE (marker);
- return 0;
- }
- }
- }
- else
- {
- unsigned long int nth;
- /* We found some factors above. We just need to consider values of n
- that divides n2. */
- for (nth = 2; nth <= n2; nth++)
- {
- if (! isprime (nth))
- continue;
- if (n2 % nth != 0)
- continue;
-#if 0
- exact = mpz_padic_root (q, u2, nth, PTH);
- if (exact)
-#endif
- exact = mpz_root (q, u2, nth);
- if (exact)
- {
- TMP_FREE (marker);
- return 1;
- }
- if (mpz_cmp_ui (q, SMALLEST_OMITTED_PRIME) < 0)
- {
- TMP_FREE (marker);
- return 0;
- }
- }
-
- TMP_FREE (marker);
- return 0;
- }
-
-n2prime:
- exact = mpz_root (NULL, u2, n2);
- TMP_FREE (marker);
- return exact;
-}
-
-static unsigned long int
-#if __STDC__
-gcd (unsigned long int a, unsigned long int b)
-#else
-gcd (a, b)
- unsigned long int a, b;
-#endif
-{
- int an2, bn2, n2;
-
- if (a == 0)
- return b;
- if (b == 0)
- return a;
-
- count_trailing_zeros (an2, a);
- a >>= an2;
-
- count_trailing_zeros (bn2, b);
- b >>= bn2;
-
- n2 = MIN (an2, bn2);
-
- while (a != b)
- {
- if (a > b)
- {
- a -= b;
- do
- a >>= 1;
- while ((a & 1) == 0);
- }
- else /* b > a. */
- {
- b -= a;
- do
- b >>= 1;
- while ((b & 1) == 0);
- }
- }
-
- return a << n2;
-}
-
-static int
-#if __STDC__
-isprime (unsigned long int t)
-#else
-isprime (t)
- unsigned long int t;
-#endif
-{
- unsigned long int q, r, d;
-
- if (t < 3 || (t & 1) == 0)
- return t == 2;
-
- for (d = 3, r = 1; r != 0; d += 2)
- {
- q = t / d;
- r = t - q * d;
- if (q < d)
- return 1;
- }
- return 0;
-}
diff --git a/ghc/rts/gmp/mpz/perfsqr.c b/ghc/rts/gmp/mpz/perfsqr.c
deleted file mode 100644
index 92e8d08ea9..0000000000
--- a/ghc/rts/gmp/mpz/perfsqr.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* mpz_perfect_square_p(arg) -- Return non-zero if ARG is a perfect square,
- zero otherwise.
-
-Copyright (C) 1991, 1993, 1994, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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;
-
- /* Zero is a perfect square. */
- if (asize == 0)
- return 1;
-
- return mpn_perfect_square_p (a->_mp_d, asize);
-}
diff --git a/ghc/rts/gmp/mpz/popcount.c b/ghc/rts/gmp/mpz/popcount.c
deleted file mode 100644
index 3105258e26..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/pow_ui.c b/ghc/rts/gmp/mpz/pow_ui.c
deleted file mode 100644
index 96ca114e4d..0000000000
--- a/ghc/rts/gmp/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, 1997 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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 ralloc, 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;
- ralloc = 3 + ((mp_size_t) (e / lb) / BITS_PER_MP_LIMB);
- }
- else
- {
- /* Over-estimate space requirements somewhat. */
- count_leading_zeros (cnt, blimb);
- ralloc = bsize * e - cnt * e / BITS_PER_MP_LIMB + 2;
- }
-
- 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 (ralloc * BYTES_PER_MP_LIMB);
- tp = (mp_ptr) TMP_ALLOC (ralloc * 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/ghc/rts/gmp/mpz/powm.c b/ghc/rts/gmp/mpz/powm.c
deleted file mode 100644
index e6af855a71..0000000000
--- a/ghc/rts/gmp/mpz/powm.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/* mpz_powm(res,base,exp,mod) -- Set RES to (base**exp) mod MOD.
-
-Copyright (C) 1991, 1993, 1994, 1996, 1997, 2000 Free Software Foundation, Inc.
-Contributed by Paul Zimmermann.
-
-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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-#ifdef BERKELEY_MP
-#include "mp.h"
-#endif
-
-
-/* set c <- (a*b)/R^n mod m c has to have at least (2n) allocated limbs */
-static void
-#if __STDC__
-mpz_redc (mpz_ptr c, mpz_srcptr a, mpz_srcptr b, mpz_srcptr m, mp_limb_t Nprim)
-#else
-mpz_redc (c, a, b, m, Nprim)
- mpz_ptr c;
- mpz_srcptr a;
- mpz_srcptr b;
- mpz_srcptr m;
- mp_limb_t Nprim;
-#endif
-{
- mp_ptr cp, mp = PTR (m);
- mp_limb_t cy, cout = 0;
- mp_limb_t q;
- size_t j, n = ABSIZ (m);
-
- ASSERT (ALLOC (c) >= 2 * n);
-
- mpz_mul (c, a, b);
- cp = PTR (c);
- j = ABSIZ (c);
- MPN_ZERO (cp + j, 2 * n - j);
- for (j = 0; j < n; j++)
- {
- q = cp[0] * Nprim;
- cy = mpn_addmul_1 (cp, mp, n, q);
- cout += mpn_add_1 (cp + n, cp + n, n - j, cy);
- cp++;
- }
- cp -= n;
- if (cout)
- {
- cy = cout - mpn_sub_n (cp, cp + n, mp, n);
- while (cy)
- cy -= mpn_sub_n (cp, cp, mp, n);
- }
- else
- MPN_COPY (cp, cp + n, n);
- MPN_NORMALIZE (cp, n);
- SIZ (c) = SIZ (c) < 0 ? -n : n;
-}
-
-/* average number of calls to redc for an exponent of n bits
- with the sliding window algorithm of base 2^k: the optimal is
- obtained for the value of k which minimizes 2^(k-1)+n/(k+1):
-
- n\k 4 5 6 7 8
- 128 156* 159 171 200 261
- 256 309 307* 316 343 403
- 512 617 607* 610 632 688
- 1024 1231 1204 1195* 1207 1256
- 2048 2461 2399 2366 2360* 2396
- 4096 4918 4787 4707 4665* 4670
-*/
-
-#ifndef BERKELEY_MP
-void
-#if __STDC__
-mpz_powm (mpz_ptr res, mpz_srcptr base, mpz_srcptr e, mpz_srcptr mod)
-#else
-mpz_powm (res, base, e, mod)
- mpz_ptr res;
- mpz_srcptr base;
- mpz_srcptr e;
- mpz_srcptr mod;
-#endif
-#else /* BERKELEY_MP */
-void
-#if __STDC__
-pow (mpz_srcptr base, mpz_srcptr e, mpz_srcptr mod, mpz_ptr res)
-#else
-pow (base, e, mod, res)
- mpz_srcptr base;
- mpz_srcptr e;
- mpz_srcptr mod;
- mpz_ptr res;
-#endif
-#endif /* BERKELEY_MP */
-{
- mp_limb_t invm, *ep, c, mask;
- mpz_t xx, *g;
- mp_size_t n, i, K, j, l, k;
- int sh;
- int use_redc;
-
-#ifdef POWM_DEBUG
- mpz_t exp;
- mpz_init (exp);
-#endif
-
- n = ABSIZ (mod);
-
- if (n == 0)
- DIVIDE_BY_ZERO;
-
- if (SIZ (e) == 0)
- {
- /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0
- depending on if MOD equals 1. */
- SIZ(res) = (ABSIZ (mod) == 1 && (PTR(mod))[0] == 1) ? 0 : 1;
- PTR(res)[0] = 1;
- return;
- }
-
- /* Use REDC instead of usual reduction for sizes < POWM_THRESHOLD.
- In REDC each modular multiplication costs about 2*n^2 limbs operations,
- whereas using usual reduction it costs 3*K(n), where K(n) is the cost of a
- multiplication using Karatsuba, and a division is assumed to cost 2*K(n),
- for example using Burnikel-Ziegler's algorithm. This gives a theoretical
- threshold of a*KARATSUBA_SQR_THRESHOLD, with a=(3/2)^(1/(2-ln(3)/ln(2))) ~
- 2.66. */
- /* For now, also disable REDC when MOD is even, as the inverse can't
- handle that. */
-
-#ifndef POWM_THRESHOLD
-#define POWM_THRESHOLD ((8 * KARATSUBA_SQR_THRESHOLD) / 3)
-#endif
-
- use_redc = (n < POWM_THRESHOLD && PTR(mod)[0] % 2 != 0);
- if (use_redc)
- {
- /* invm = -1/m mod 2^BITS_PER_MP_LIMB, must have m odd */
- modlimb_invert (invm, PTR(mod)[0]);
- invm = -invm;
- }
-
- /* determines optimal value of k */
- l = ABSIZ (e) * BITS_PER_MP_LIMB; /* number of bits of exponent */
- k = 1;
- K = 2;
- while (2 * l > K * (2 + k * (3 + k)))
- {
- k++;
- K *= 2;
- }
-
- g = (mpz_t *) (*_mp_allocate_func) (K / 2 * sizeof (mpz_t));
- /* compute x*R^n where R=2^BITS_PER_MP_LIMB */
- mpz_init (g[0]);
- if (use_redc)
- {
- mpz_mul_2exp (g[0], base, n * BITS_PER_MP_LIMB);
- mpz_mod (g[0], g[0], mod);
- }
- else
- mpz_mod (g[0], base, mod);
-
- /* compute xx^g for odd g < 2^k */
- mpz_init (xx);
- if (use_redc)
- {
- _mpz_realloc (xx, 2 * n);
- mpz_redc (xx, g[0], g[0], mod, invm); /* xx = x^2*R^n */
- }
- else
- {
- mpz_mul (xx, g[0], g[0]);
- mpz_mod (xx, xx, mod);
- }
- for (i = 1; i < K / 2; i++)
- {
- mpz_init (g[i]);
- if (use_redc)
- {
- _mpz_realloc (g[i], 2 * n);
- mpz_redc (g[i], g[i - 1], xx, mod, invm); /* g[i] = x^(2i+1)*R^n */
- }
- else
- {
- mpz_mul (g[i], g[i - 1], xx);
- mpz_mod (g[i], g[i], mod);
- }
- }
-
- /* now starts the real stuff */
- mask = (mp_limb_t) ((1<<k) - 1);
- ep = PTR (e);
- i = ABSIZ (e) - 1; /* current index */
- c = ep[i]; /* current limb */
- count_leading_zeros (sh, c);
- sh = BITS_PER_MP_LIMB - sh; /* significant bits in ep[i] */
- sh -= k; /* index of lower bit of ep[i] to take into account */
- if (sh < 0)
- { /* k-sh extra bits are needed */
- if (i > 0)
- {
- i--;
- c = (c << (-sh)) | (ep[i] >> (BITS_PER_MP_LIMB + sh));
- sh += BITS_PER_MP_LIMB;
- }
- }
- else
- c = c >> sh;
-#ifdef POWM_DEBUG
- printf ("-1/m mod 2^%u = %lu\n", BITS_PER_MP_LIMB, invm);
- mpz_set_ui (exp, c);
-#endif
- j=0;
- while (c % 2 == 0)
- {
- j++;
- c = (c >> 1);
- }
- mpz_set (xx, g[c >> 1]);
- while (j--)
- {
- if (use_redc)
- mpz_redc (xx, xx, xx, mod, invm);
- else
- {
- mpz_mul (xx, xx, xx);
- mpz_mod (xx, xx, mod);
- }
- }
-
-#ifdef POWM_DEBUG
- printf ("x^"); mpz_out_str (0, 10, exp);
- printf ("*2^%u mod m = ", n * BITS_PER_MP_LIMB); mpz_out_str (0, 10, xx);
- putchar ('\n');
-#endif
-
- while (i > 0 || sh > 0)
- {
- c = ep[i];
- sh -= k;
- l = k; /* number of bits treated */
- if (sh < 0)
- {
- if (i > 0)
- {
- i--;
- c = (c << (-sh)) | (ep[i] >> (BITS_PER_MP_LIMB + sh));
- sh += BITS_PER_MP_LIMB;
- }
- else
- {
- l += sh; /* may be less bits than k here */
- c = c & ((1<<l) - 1);
- }
- }
- else
- c = c >> sh;
- c = c & mask;
-
- /* this while loop implements the sliding window improvement */
- while ((c & (1 << (k - 1))) == 0 && (i > 0 || sh > 0))
- {
- if (use_redc) mpz_redc (xx, xx, xx, mod, invm);
- else
- {
- mpz_mul (xx, xx, xx);
- mpz_mod (xx, xx, mod);
- }
- if (sh)
- {
- sh--;
- c = (c<<1) + ((ep[i]>>sh) & 1);
- }
- else
- {
- i--;
- sh = BITS_PER_MP_LIMB - 1;
- c = (c<<1) + (ep[i]>>sh);
- }
- }
-
-#ifdef POWM_DEBUG
- printf ("l=%u c=%lu\n", l, c);
- mpz_mul_2exp (exp, exp, k);
- mpz_add_ui (exp, exp, c);
-#endif
-
- /* now replace xx by xx^(2^k)*x^c */
- if (c != 0)
- {
- j = 0;
- while (c % 2 == 0)
- {
- j++;
- c = c >> 1;
- }
- /* c0 = c * 2^j, i.e. xx^(2^k)*x^c = (A^(2^(k - j))*c)^(2^j) */
- l -= j;
- while (l--)
- if (use_redc) mpz_redc (xx, xx, xx, mod, invm);
- else
- {
- mpz_mul (xx, xx, xx);
- mpz_mod (xx, xx, mod);
- }
- if (use_redc)
- mpz_redc (xx, xx, g[c >> 1], mod, invm);
- else
- {
- mpz_mul (xx, xx, g[c >> 1]);
- mpz_mod (xx, xx, mod);
- }
- }
- else
- j = l; /* case c=0 */
- while (j--)
- {
- if (use_redc)
- mpz_redc (xx, xx, xx, mod, invm);
- else
- {
- mpz_mul (xx, xx, xx);
- mpz_mod (xx, xx, mod);
- }
- }
-#ifdef POWM_DEBUG
- printf ("x^"); mpz_out_str (0, 10, exp);
- printf ("*2^%u mod m = ", n * BITS_PER_MP_LIMB); mpz_out_str (0, 10, xx);
- putchar ('\n');
-#endif
- }
-
- /* now convert back xx to xx/R^n */
- if (use_redc)
- {
- mpz_set_ui (g[0], 1);
- mpz_redc (xx, xx, g[0], mod, invm);
- if (mpz_cmp (xx, mod) >= 0)
- mpz_sub (xx, xx, mod);
- }
- mpz_set (res, xx);
-
- mpz_clear (xx);
- for (i = 0; i < K / 2; i++)
- mpz_clear (g[i]);
- (*_mp_free_func) (g, K / 2 * sizeof (mpz_t));
-}
diff --git a/ghc/rts/gmp/mpz/powm_ui.c b/ghc/rts/gmp/mpz/powm_ui.c
deleted file mode 100644
index 00f70bd563..0000000000
--- a/ghc/rts/gmp/mpz/powm_ui.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/* mpz_powm_ui(res,base,exp,mod) -- Set RES to (base**exp) mod MOD.
-
-Copyright (C) 1991, 1993, 1994, 1996, 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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> /* for NULL */
-#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)
- DIVIDE_BY_ZERO;
-
- if (exp == 0)
- {
- /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0
- depending on if MOD equals 1. */
- res->_mp_size = (msize == 1 && (mod->_mp_d)[0] == 1) ? 0 : 1;
- rp[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;
- xsize -= xp[xsize - 1] == 0;
- 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;
- xsize -= xp[xsize - 1] == 0;
- 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);
- }
-
- 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/ghc/rts/gmp/mpz/pprime_p.c b/ghc/rts/gmp/mpz/pprime_p.c
deleted file mode 100644
index 82eb678238..0000000000
--- a/ghc/rts/gmp/mpz/pprime_p.c
+++ /dev/null
@@ -1,242 +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. If it returns 2, n is surely 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, 1996, 1997, 1998, 1999, 2000 Free Software
-Foundation, Inc. Miller-Rabin code 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-static int isprime _PROTO ((unsigned long int t));
-static int mpz_millerrabin _PROTO ((mpz_srcptr n, int reps));
-
-int
-#if __STDC__
-mpz_probab_prime_p (mpz_srcptr n, int reps)
-#else
-mpz_probab_prime_p (n, reps)
- mpz_srcptr n;
- int reps;
-#endif
-{
- mp_limb_t r;
-
- /* Handle small and negative n. */
- if (mpz_cmp_ui (n, 1000000L) <= 0)
- {
- int is_prime;
- if (mpz_sgn (n) < 0)
- {
- /* Negative number. Negate and call ourselves. */
- mpz_t n2;
- mpz_init (n2);
- mpz_neg (n2, n);
- is_prime = mpz_probab_prime_p (n2, reps);
- mpz_clear (n2);
- return is_prime;
- }
- is_prime = isprime (mpz_get_ui (n));
- return is_prime ? 2 : 0;
- }
-
- /* If n is now even, it is not a prime. */
- if ((mpz_get_ui (n) & 1) == 0)
- return 0;
-
- /* Check if n has small factors. */
- if (UDIV_TIME > (2 * UMUL_TIME + 6))
- r = mpn_preinv_mod_1 (PTR(n), SIZ(n), (mp_limb_t) PP, (mp_limb_t) PP_INVERTED);
- else
- r = mpn_mod_1 (PTR(n), SIZ(n), (mp_limb_t) PP);
- if (r % 3 == 0 || r % 5 == 0 || r % 7 == 0 || r % 11 == 0 || r % 13 == 0
- || r % 17 == 0 || r % 19 == 0 || r % 23 == 0 || r % 29 == 0
-#if BITS_PER_MP_LIMB == 64
- || r % 31 == 0 || r % 37 == 0 || r % 41 == 0 || r % 43 == 0
- || r % 47 == 0 || r % 53 == 0
-#endif
- )
- {
- return 0;
- }
-
- /* Do more dividing. We collect small primes, using umul_ppmm, until we
- overflow a single limb. We divide our number by the small primes product,
- and look for factors in the remainder. */
- {
- unsigned long int ln2;
- unsigned long int q;
- mp_limb_t p1, p0, p;
- unsigned int primes[15];
- int nprimes;
-
- nprimes = 0;
- p = 1;
- ln2 = mpz_sizeinbase (n, 2) / 30; ln2 = ln2 * ln2;
- for (q = BITS_PER_MP_LIMB == 64 ? 59 : 31; q < ln2; q += 2)
- {
- if (isprime (q))
- {
- umul_ppmm (p1, p0, p, q);
- if (p1 != 0)
- {
- r = mpn_mod_1 (PTR(n), SIZ(n), p);
- while (--nprimes >= 0)
- if (r % primes[nprimes] == 0)
- {
- if (mpn_mod_1 (PTR(n), SIZ(n), (mp_limb_t) primes[nprimes]) != 0)
- abort ();
- return 0;
- }
- p = q;
- nprimes = 0;
- }
- else
- {
- p = p0;
- }
- primes[nprimes++] = q;
- }
- }
- }
-
- /* Perform a number of Miller-Rabin tests. */
- return mpz_millerrabin (n, reps);
-}
-
-static int
-#if __STDC__
-isprime (unsigned long int t)
-#else
-isprime (t)
- unsigned long int t;
-#endif
-{
- unsigned long int q, r, d;
-
- if (t < 3 || (t & 1) == 0)
- return t == 2;
-
- for (d = 3, r = 1; r != 0; d += 2)
- {
- q = t / d;
- r = t - q * d;
- if (q < d)
- return 1;
- }
- return 0;
-}
-
-static int millerrabin _PROTO ((mpz_srcptr n, mpz_srcptr nm1,
- mpz_ptr x, mpz_ptr y,
- mpz_srcptr q, unsigned long int k));
-
-static int
-#if __STDC__
-mpz_millerrabin (mpz_srcptr n, int reps)
-#else
-mpz_millerrabin (n, reps)
- mpz_srcptr n;
- int reps;
-#endif
-{
- int r;
- mpz_t nm1, x, y, q;
- unsigned long int k;
- gmp_randstate_t rstate;
- int is_prime;
- TMP_DECL (marker);
- TMP_MARK (marker);
-
- MPZ_TMP_INIT (nm1, SIZ (n) + 1);
- mpz_sub_ui (nm1, n, 1L);
-
- MPZ_TMP_INIT (x, SIZ (n));
- MPZ_TMP_INIT (y, 2 * SIZ (n)); /* mpz_powm_ui needs excessive memory!!! */
-
- /* Perform a Fermat test. */
- mpz_set_ui (x, 210L);
- mpz_powm (y, x, nm1, n);
- if (mpz_cmp_ui (y, 1L) != 0)
- {
- TMP_FREE (marker);
- return 0;
- }
-
- MPZ_TMP_INIT (q, SIZ (n));
-
- /* Find q and k, where q is odd and n = 1 + 2**k * q. */
- k = mpz_scan1 (nm1, 0L);
- mpz_tdiv_q_2exp (q, nm1, k);
-
- gmp_randinit (rstate, GMP_RAND_ALG_DEFAULT, 32L);
-
- is_prime = 1;
- for (r = 0; r < reps && is_prime; r++)
- {
- do
- mpz_urandomb (x, rstate, mpz_sizeinbase (n, 2) - 1);
- while (mpz_cmp_ui (x, 1L) <= 0);
-
- is_prime = millerrabin (n, nm1, x, y, q, k);
- }
-
- gmp_randclear (rstate);
-
- TMP_FREE (marker);
- return is_prime;
-}
-
-static int
-#if __STDC__
-millerrabin (mpz_srcptr n, mpz_srcptr nm1, mpz_ptr x, mpz_ptr y,
- mpz_srcptr q, unsigned long int k)
-#else
-millerrabin (n, nm1, x, y, q, k)
- mpz_srcptr n;
- mpz_srcptr nm1;
- mpz_ptr x;
- mpz_ptr y;
- mpz_srcptr q;
- unsigned long int k;
-#endif
-{
- unsigned long int i;
-
- mpz_powm (y, x, q, n);
-
- if (mpz_cmp_ui (y, 1L) == 0 || mpz_cmp (y, nm1) == 0)
- return 1;
-
- for (i = 1; i < k; i++)
- {
- mpz_powm_ui (y, y, 2L, n);
- if (mpz_cmp (y, nm1) == 0)
- return 1;
- if (mpz_cmp_ui (y, 1L) == 0)
- return 0;
- }
- return 0;
-}
diff --git a/ghc/rts/gmp/mpz/random.c b/ghc/rts/gmp/mpz/random.c
deleted file mode 100644
index 60d9113991..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/random2.c b/ghc/rts/gmp/mpz/random2.c
deleted file mode 100644
index a90af115e9..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/realloc.c b/ghc/rts/gmp/mpz/realloc.c
deleted file mode 100644
index 0b9e447ec3..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/remove.c b/ghc/rts/gmp/mpz/remove.c
deleted file mode 100644
index bc6675f972..0000000000
--- a/ghc/rts/gmp/mpz/remove.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/* mpz_remove -- divide out a factor and return its multiplicity.
-
-Copyright (C) 1998, 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_remove (mpz_ptr dest, mpz_srcptr src, mpz_srcptr f)
-#else
-mpz_remove (dest, src, f)
- mpz_ptr dest;
- mpz_srcptr src;
- mpz_srcptr f;
-#endif
-{
- mpz_t fpow[40]; /* inexhaustible...until year 2020 or so */
- mpz_t x, rem;
- unsigned long int pwr;
- int p;
-
- if (mpz_cmp_ui (f, 1) <= 0 || mpz_sgn (src) == 0)
- DIVIDE_BY_ZERO;
- if (mpz_cmp_ui (f, 2) == 0)
- {
- unsigned long int s0;
- s0 = mpz_scan1 (src, 0);
- mpz_div_2exp (dest, src, s0);
- return s0;
- }
-
- /* We could perhaps compute mpz_scan1(src,0)/mpz_scan1(f,0). It is an
- upper bound of the result we're seeking. We could also shift down the
- operands so that they become odd, to make intermediate values smaller. */
-
- mpz_init (rem);
- mpz_init (x);
-
- pwr = 0;
- mpz_init (fpow[0]);
- mpz_set (fpow[0], f);
- mpz_set (dest, src);
-
- /* Divide by f, f^2, ..., f^(2^k) until we get a remainder for f^(2^k). */
- for (p = 0;; p++)
- {
- mpz_tdiv_qr (x, rem, dest, fpow[p]);
- if (SIZ (rem) != 0)
- break;
- mpz_init (fpow[p + 1]);
- mpz_mul (fpow[p + 1], fpow[p], fpow[p]);
- mpz_set (dest, x);
- }
-
- pwr = (1 << p) - 1;
-
- mpz_clear (fpow[p]);
-
- /* Divide by f^(2^(k-1)), f^(2^(k-2)), ..., f for all divisors that give a
- zero remainder. */
- while (--p >= 0)
- {
- mpz_tdiv_qr (x, rem, dest, fpow[p]);
- if (SIZ (rem) == 0)
- {
- pwr += 1 << p;
- mpz_set (dest, x);
- }
- mpz_clear (fpow[p]);
- }
-
- mpz_clear (x);
- mpz_clear (rem);
- return pwr;
-}
diff --git a/ghc/rts/gmp/mpz/root.c b/ghc/rts/gmp/mpz/root.c
deleted file mode 100644
index 0920bf22d3..0000000000
--- a/ghc/rts/gmp/mpz/root.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* mpz_root(root, u, nth) -- Set ROOT to floor(U^(1/nth)).
- Return an indication if the result is exact.
-
-Copyright (C) 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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. */
-
-/* Naive implementation of nth root extraction. It would probably be a
- better idea to use a division-free Newton iteration. It is insane
- to use full precision from iteration 1. The mpz_scan1 trick compensates
- to some extent. It would be natural to avoid representing the low zero
- bits mpz_scan1 is counting, and at the same time call mpn directly. */
-
-#include <stdio.h> /* for NULL */
-#include "gmp.h"
-#include "gmp-impl.h"
-#include "longlong.h"
-
-int
-#if __STDC__
-mpz_root (mpz_ptr r, mpz_srcptr c, unsigned long int nth)
-#else
-mpz_root (r, c, nth)
- mpz_ptr r;
- mpz_srcptr c;
- unsigned long int nth;
-#endif
-{
- mpz_t x, t0, t1, t2;
- __mpz_struct ccs, *cc = &ccs;
- unsigned long int nbits;
- int bit;
- int exact;
- int i;
- unsigned long int lowz;
- unsigned long int rl;
-
- /* even roots of negatives provoke an exception */
- if (mpz_sgn (c) < 0 && (nth & 1) == 0)
- SQRT_OF_NEGATIVE;
-
- /* root extraction interpreted as c^(1/nth) means a zeroth root should
- provoke a divide by zero, do this even if c==0 */
- if (nth == 0)
- DIVIDE_BY_ZERO;
-
- if (mpz_sgn (c) == 0)
- {
- if (r != NULL)
- mpz_set_ui (r, 0);
- return 1; /* exact result */
- }
-
- PTR(cc) = PTR(c);
- SIZ(cc) = ABSIZ(c);
-
- nbits = (mpz_sizeinbase (cc, 2) - 1) / nth;
- if (nbits == 0)
- {
- if (r != NULL)
- mpz_set_ui (r, 1);
- if (mpz_sgn (c) < 0)
- {
- if (r != NULL)
- SIZ(r) = -SIZ(r);
- return mpz_cmp_si (c, -1L) == 0;
- }
- return mpz_cmp_ui (c, 1L) == 0;
- }
-
- mpz_init (x);
- mpz_init (t0);
- mpz_init (t1);
- mpz_init (t2);
-
- /* Create a one-bit approximation. */
- mpz_set_ui (x, 0);
- mpz_setbit (x, nbits);
-
- /* Make the approximation better, one bit at a time. This odd-looking
- termination criteria makes large nth get better initial approximation,
- which avoids slow convergence for such values. */
- bit = nbits - 1;
- for (i = 1; (nth >> i) != 0; i++)
- {
- mpz_setbit (x, bit);
- mpz_tdiv_q_2exp (t0, x, bit);
- mpz_pow_ui (t1, t0, nth);
- mpz_mul_2exp (t1, t1, bit * nth);
- if (mpz_cmp (cc, t1) < 0)
- mpz_clrbit (x, bit);
-
- bit--; /* check/set next bit */
- if (bit < 0)
- {
- /* We're done. */
- mpz_pow_ui (t1, x, nth);
- goto done;
- }
- }
- mpz_setbit (x, bit);
- mpz_set_ui (t2, 0); mpz_setbit (t2, bit); mpz_add (x, x, t2);
-
-#if DEBUG
- /* Check that the starting approximation is >= than the root. */
- mpz_pow_ui (t1, x, nth);
- if (mpz_cmp (cc, t1) >= 0)
- abort ();
-#endif
-
- mpz_add_ui (x, x, 1);
-
- /* Main loop */
- do
- {
- lowz = mpz_scan1 (x, 0);
- mpz_tdiv_q_2exp (t0, x, lowz);
- mpz_pow_ui (t1, t0, nth - 1);
- mpz_mul_2exp (t1, t1, lowz * (nth - 1));
- mpz_tdiv_q (t2, cc, t1);
- mpz_sub (t2, x, t2);
- rl = mpz_tdiv_q_ui (t2, t2, nth);
- mpz_sub (x, x, t2);
- }
- while (mpz_sgn (t2) != 0);
-
- /* If we got a non-zero remainder in the last division, we know our root
- is too large. */
- mpz_sub_ui (x, x, (mp_limb_t) (rl != 0));
-
- /* Adjustment loop. If we spend more care on rounding in the loop above,
- we could probably get rid of this, or greatly simplify it. */
- {
- int bad = 0;
- lowz = mpz_scan1 (x, 0);
- mpz_tdiv_q_2exp (t0, x, lowz);
- mpz_pow_ui (t1, t0, nth);
- mpz_mul_2exp (t1, t1, lowz * nth);
- while (mpz_cmp (cc, t1) < 0)
- {
- bad++;
- if (bad > 2)
- abort (); /* abort if our root is far off */
- mpz_sub_ui (x, x, 1);
- lowz = mpz_scan1 (x, 0);
- mpz_tdiv_q_2exp (t0, x, lowz);
- mpz_pow_ui (t1, t0, nth);
- mpz_mul_2exp (t1, t1, lowz * nth);
- }
- }
-
- done:
- exact = mpz_cmp (t1, cc) == 0;
-
- if (r != NULL)
- {
- mpz_set (r, x);
- if (mpz_sgn (c) < 0)
- SIZ(r) = -SIZ(r);
- }
-
- mpz_clear (t2);
- mpz_clear (t1);
- mpz_clear (t0);
- mpz_clear (x);
-
- return exact;
-}
diff --git a/ghc/rts/gmp/mpz/rrandomb.c b/ghc/rts/gmp/mpz/rrandomb.c
deleted file mode 100644
index 7d78243674..0000000000
--- a/ghc/rts/gmp/mpz/rrandomb.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* mpz_rrandomb -- Generate a positive random mpz_t of specified bit size, with
- long runs of consecutive ones and zeros in the binary representation.
- Meant for testing of other MP routines.
-
-Copyright (C) 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-static void gmp_rrandomb _PROTO ((mp_ptr rp, gmp_randstate_t rstate, unsigned long int nbits));
-
-void
-#if __STDC__
-mpz_rrandomb (mpz_ptr x, gmp_randstate_t rstate, unsigned long int nbits)
-#else
-mpz_rrandomb (x, rstate, nbits)
- mpz_ptr x;
- gmp_randstate_t rstate;
- unsigned long int nbits;
-#endif
-{
- mp_size_t nl = 0;
-
- if (nbits != 0)
- {
- mp_ptr xp;
- nl = (nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB;
- if (x->_mp_alloc < nl)
- _mpz_realloc (x, nl);
-
- xp = PTR(x);
- gmp_rrandomb (xp, rstate, nbits);
- MPN_NORMALIZE (xp, nl);
- }
-
- SIZ(x) = nl;
-}
-
-#define BITS_PER_CHUNK 4
-
-static void
-#if __STDC__
-gmp_rrandomb (mp_ptr rp, gmp_randstate_t rstate, unsigned long int nbits)
-#else
-gmp_rrandomb (rp, rstate, nbits)
- mp_ptr rp;
- gmp_randstate_t rstate;
- unsigned long int nbits;
-#endif
-{
- int nb;
- int bit_pos;
- mp_size_t limb_pos;
- mp_limb_t ran, ranm;
- mp_limb_t acc;
- mp_size_t n;
-
- bit_pos = nbits % BITS_PER_MP_LIMB;
- limb_pos = nbits / BITS_PER_MP_LIMB;
- if (bit_pos == 0)
- {
- bit_pos = BITS_PER_MP_LIMB;
- limb_pos--;
- }
-
- acc = 0;
- while (limb_pos >= 0)
- {
- _gmp_rand (&ranm, rstate, BITS_PER_CHUNK + 1);
- ran = ranm;
- nb = (ran >> 1) + 1;
- if ((ran & 1) != 0)
- {
- /* Generate a string of ones. */
- if (nb > bit_pos)
- {
- rp[limb_pos--] = acc | ((((mp_limb_t) 1) << bit_pos) - 1);
- bit_pos += BITS_PER_MP_LIMB;
- bit_pos -= nb;
- acc = (~(mp_limb_t) 0) << bit_pos;
- }
- else
- {
- bit_pos -= nb;
- acc |= ((((mp_limb_t) 1) << nb) - 1) << bit_pos;
- }
- }
- else
- {
- /* Generate a string of zeroes. */
- if (nb > bit_pos)
- {
- rp[limb_pos--] = acc;
- acc = 0;
- bit_pos += BITS_PER_MP_LIMB;
- }
- bit_pos -= nb;
- }
- }
-}
diff --git a/ghc/rts/gmp/mpz/scan0.c b/ghc/rts/gmp/mpz/scan0.c
deleted file mode 100644
index 6c59cf8939..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/scan1.c b/ghc/rts/gmp/mpz/scan1.c
deleted file mode 100644
index 3b84e3420c..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/set.c b/ghc/rts/gmp/mpz/set.c
deleted file mode 100644
index 06b2eef511..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/set_d.c b/ghc/rts/gmp/mpz/set_d.c
deleted file mode 100644
index e90ed9bc2f..0000000000
--- a/ghc/rts/gmp/mpz/set_d.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* mpz_set_d(integer, val) -- Assign INTEGER with a double value VAL.
-
-Copyright (C) 1995, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_limb_t tp[3];
- mp_ptr rp;
- mp_size_t rn;
-
- 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;
- }
-
- rn = __gmp_extract_double (tp, d);
-
- if (ALLOC(r) < rn)
- _mpz_realloc (r, rn);
-
- rp = PTR (r);
-
-#if BITS_PER_MP_LIMB == 32
- switch (rn)
- {
- default:
- MPN_ZERO (rp, rn - 3);
- rp += rn - 3;
- /* fall through */
- 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:
- /* handled in "small aguments" case above */
- abort ();
- }
-#else
- switch (rn)
- {
- default:
- MPN_ZERO (rp, rn - 2);
- rp += rn - 2;
- /* fall through */
- case 2:
- rp[1] = tp[1], rp[0] = tp[0];
- break;
- case 1:
- /* handled in "small aguments" case above */
- abort ();
- }
-#endif
-
- SIZ(r) = negative ? -rn : rn;
-}
diff --git a/ghc/rts/gmp/mpz/set_f.c b/ghc/rts/gmp/mpz/set_f.c
deleted file mode 100644
index 2273953dfd..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/set_q.c b/ghc/rts/gmp/mpz/set_q.c
deleted file mode 100644
index 72d3222a80..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/set_si.c b/ghc/rts/gmp/mpz/set_si.c
deleted file mode 100644
index 9ba2fbaf30..0000000000
--- a/ghc/rts/gmp/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, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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] = (unsigned long) -val;
- dest->_mp_size = -1;
- }
- else
- dest->_mp_size = 0;
-}
diff --git a/ghc/rts/gmp/mpz/set_str.c b/ghc/rts/gmp/mpz/set_str.c
deleted file mode 100644
index 3ab79c0e89..0000000000
--- a/ghc/rts/gmp/mpz/set_str.c
+++ /dev/null
@@ -1,157 +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, 1996, 1997, 1998, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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 <string.h>
-#include <ctype.h>
-#include "gmp.h"
-#include "gmp-impl.h"
-#include "longlong.h"
-
-static int
-#if __STDC__
-digit_value_in_base (int c, int base)
-#else
-digit_value_in_base (c, base)
- int c;
- int base;
-#endif
-{
- 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++;
- }
- else if (c == 'b' || c == 'B')
- {
- base = 2;
- c = *str++;
- }
- }
- }
-
- /* Skip leading zeros. */
- while (c == '0')
- c = *str++;
- /* Make sure the string does not become empty, mpn_set_str would fail. */
- if (c == 0)
- {
- x->_mp_size = 0;
- return 0;
- }
-
- TMP_MARK (marker);
- str_size = strlen (str - 1);
- s = begs = (char *) TMP_ALLOC (str_size + 1);
-
- /* Remove spaces from the string and convert the result from ASCII to a
- byte array. */
- 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 = (((mp_size_t) (str_size / __mp_bases[base].chars_per_bit_exactly))
- / BITS_PER_MP_LIMB + 2);
- if (x->_mp_alloc < xsize)
- _mpz_realloc (x, xsize);
-
- /* Convert the byte array in base BASE to our bignum format. */
- 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/ghc/rts/gmp/mpz/set_ui.c b/ghc/rts/gmp/mpz/set_ui.c
deleted file mode 100644
index d6097c170a..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/setbit.c b/ghc/rts/gmp/mpz/setbit.c
deleted file mode 100644
index d4249a434e..0000000000
--- a/ghc/rts/gmp/mpz/setbit.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/* mpz_setbit -- set a specified bit.
-
-Copyright (C) 1991, 1993, 1994, 1995, 1997, 1999 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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
- {
- mpn_decr_u (dp + limb_index,
- (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB));
- dsize -= dp[dsize - 1] == 0;
- d->_mp_size = -dsize;
- }
- }
-}
diff --git a/ghc/rts/gmp/mpz/size.c b/ghc/rts/gmp/mpz/size.c
deleted file mode 100644
index 6574756783..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/sizeinbase.c b/ghc/rts/gmp/mpz/sizeinbase.c
deleted file mode 100644
index 734f9c4532..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/sqrt.c b/ghc/rts/gmp/mpz/sqrt.c
deleted file mode 100644
index fe82fe407a..0000000000
--- a/ghc/rts/gmp/mpz/sqrt.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* mpz_sqrt(root, u) -- Set ROOT to floor(sqrt(U)).
-
-Copyright (C) 1991, 1993, 1994, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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> /* for NULL */
-#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)
- SQRT_OF_NEGATIVE;
-
- /* 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/ghc/rts/gmp/mpz/sqrtrem.c b/ghc/rts/gmp/mpz/sqrtrem.c
deleted file mode 100644
index 99a6453122..0000000000
--- a/ghc/rts/gmp/mpz/sqrtrem.c
+++ /dev/null
@@ -1,111 +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, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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> /* for NULL */
-#include "gmp.h"
-#include "gmp-impl.h"
-#ifdef BERKELEY_MP
-#include "mp.h"
-#endif
-
-#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)
- SQRT_OF_NEGATIVE;
-
- 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/ghc/rts/gmp/mpz/sub.c b/ghc/rts/gmp/mpz/sub.c
deleted file mode 100644
index f3ae7c23a0..0000000000
--- a/ghc/rts/gmp/mpz/sub.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* mpz_sub -- Subtract two integers.
-
-Copyright (C) 1991, 1993, 1994, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-#ifdef BERKELEY_MP
-#include "mp.h"
-#endif
-
-#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. */
- MPZ_SRCPTR_SWAP (u, v);
- MP_SIZE_T_SWAP (usize, vsize);
- MP_SIZE_T_SWAP (abs_usize, abs_vsize);
- }
-
- /* 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/ghc/rts/gmp/mpz/sub_ui.c b/ghc/rts/gmp/mpz/sub_ui.c
deleted file mode 100644
index 327add8503..0000000000
--- a/ghc/rts/gmp/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, 1999 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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, (mp_limb_t) 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, (mp_limb_t) v);
- /* Size can decrease with at most one limb. */
- wsize = abs_usize - (wp[abs_usize - 1] == 0);
- }
- }
-
- w->_mp_size = wsize;
-}
diff --git a/ghc/rts/gmp/mpz/swap.c b/ghc/rts/gmp/mpz/swap.c
deleted file mode 100644
index 0070d6ff24..0000000000
--- a/ghc/rts/gmp/mpz/swap.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* mpz_swap (dest_integer, src_integer) -- Swap U and V.
-
-Copyright (C) 1997, 1998 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_swap (mpz_ptr u, mpz_ptr v)
-#else
-mpz_swap (u, v)
- mpz_ptr u;
- mpz_ptr v;
-#endif
-{
- mp_ptr up, vp;
- mp_size_t usize, vsize;
- mp_size_t ualloc, valloc;
-
- ualloc = u->_mp_alloc;
- valloc = v->_mp_alloc;
- v->_mp_alloc = ualloc;
- u->_mp_alloc = valloc;
-
- usize = u->_mp_size;
- vsize = v->_mp_size;
- v->_mp_size = usize;
- u->_mp_size = vsize;
-
- up = u->_mp_d;
- vp = v->_mp_d;
- v->_mp_d = up;
- u->_mp_d = vp;
-}
diff --git a/ghc/rts/gmp/mpz/tdiv_q.c b/ghc/rts/gmp/mpz/tdiv_q.c
deleted file mode 100644
index 21db4ab385..0000000000
--- a/ghc/rts/gmp/mpz/tdiv_q.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* mpz_tdiv_q -- divide two integers and produce a quotient.
-
-Copyright (C) 1991, 1993, 1994, 1996, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_size_t ql;
- mp_size_t ns, ds, nl, dl;
- mp_ptr np, dp, qp, rp;
- TMP_DECL (marker);
-
- ns = SIZ (num);
- ds = SIZ (den);
- nl = ABS (ns);
- dl = ABS (ds);
- ql = nl - dl + 1;
-
- if (dl == 0)
- DIVIDE_BY_ZERO;
-
- if (ql <= 0)
- {
- SIZ (quot) = 0;
- return;
- }
-
- MPZ_REALLOC (quot, ql);
-
- TMP_MARK (marker);
- qp = PTR (quot);
- rp = (mp_ptr) TMP_ALLOC (dl * BYTES_PER_MP_LIMB);
- np = PTR (num);
- dp = PTR (den);
-
- /* FIXME: We should think about how to handle the temporary allocation.
- Perhaps mpn_tdiv_qr should handle it, since it anyway often needs to
- allocate temp space. */
-
- /* Copy denominator to temporary space if it overlaps with the quotient. */
- if (dp == qp)
- {
- mp_ptr tp;
- tp = (mp_ptr) TMP_ALLOC (dl * BYTES_PER_MP_LIMB);
- MPN_COPY (tp, dp, dl);
- dp = tp;
- }
- /* Copy numerator to temporary space if it overlaps with the quotient. */
- if (np == qp)
- {
- mp_ptr tp;
- tp = (mp_ptr) TMP_ALLOC (nl * BYTES_PER_MP_LIMB);
- MPN_COPY (tp, np, nl);
- np = tp;
- }
-
- mpn_tdiv_qr (qp, rp, 0L, np, nl, dp, dl);
-
- ql -= qp[ql - 1] == 0;
-
- SIZ (quot) = (ns ^ ds) >= 0 ? ql : -ql;
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/tdiv_q_2exp.c b/ghc/rts/gmp/mpz/tdiv_q_2exp.c
deleted file mode 100644
index 03d1e01f89..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/tdiv_q_ui.c b/ghc/rts/gmp/mpz/tdiv_q_ui.c
deleted file mode 100644
index a2e3462b76..0000000000
--- a/ghc/rts/gmp/mpz/tdiv_q_ui.c
+++ /dev/null
@@ -1,64 +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, 1998 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_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;
- mp_limb_t remainder_limb;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- dividend_size = dividend->_mp_size;
- size = ABS (dividend_size);
-
- /* 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);
-
- /* The quotient is SIZE limbs, but the most significant might be zero. */
- size -= size != 0 && quot_ptr[size - 1] == 0;
- quot->_mp_size = dividend_size >= 0 ? size : -size;
-
- return remainder_limb;
-}
diff --git a/ghc/rts/gmp/mpz/tdiv_qr.c b/ghc/rts/gmp/mpz/tdiv_qr.c
deleted file mode 100644
index d66f57d9e5..0000000000
--- a/ghc/rts/gmp/mpz/tdiv_qr.c
+++ /dev/null
@@ -1,130 +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, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-#ifdef BERKELEY_MP
-#include "mp.h"
-#endif
-
-
-#ifndef BERKELEY_MP
-
-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
-
-#else /* BERKELEY_MP */
-
-void
-#if __STDC__
-mdiv (mpz_srcptr num, mpz_srcptr den, mpz_ptr quot, mpz_ptr rem)
-#else
-mdiv (num, den, quot, rem)
- mpz_srcptr num;
- mpz_srcptr den;
- mpz_ptr quot;
- mpz_ptr rem;
-#endif
-
-#endif /* BERKELEY_MP */
-{
- mp_size_t ql;
- mp_size_t ns, ds, nl, dl;
- mp_ptr np, dp, qp, rp;
- TMP_DECL (marker);
-
- ns = SIZ (num);
- ds = SIZ (den);
- nl = ABS (ns);
- dl = ABS (ds);
- ql = nl - dl + 1;
-
- if (dl == 0)
- DIVIDE_BY_ZERO;
-
- MPZ_REALLOC (rem, dl);
-
- if (ql <= 0)
- {
- if (num != rem)
- {
- mp_ptr np, rp;
- np = PTR (num);
- rp = PTR (rem);
- MPN_COPY (rp, np, nl);
- SIZ (rem) = SIZ (num);
- }
- /* This needs to follow the assignment to rem, in case the
- numerator and quotient are the same. */
- SIZ (quot) = 0;
- return;
- }
-
- MPZ_REALLOC (quot, ql);
-
- TMP_MARK (marker);
- qp = PTR (quot);
- rp = PTR (rem);
- np = PTR (num);
- dp = PTR (den);
-
- /* FIXME: We should think about how to handle the temporary allocation.
- Perhaps mpn_tdiv_qr should handle it, since it anyway often needs to
- allocate temp space. */
-
- /* Copy denominator to temporary space if it overlaps with the quotient
- or remainder. */
- if (dp == rp || dp == qp)
- {
- mp_ptr tp;
- tp = (mp_ptr) TMP_ALLOC (dl * BYTES_PER_MP_LIMB);
- MPN_COPY (tp, dp, dl);
- dp = tp;
- }
- /* Copy numerator to temporary space if it overlaps with the quotient or
- remainder. */
- if (np == rp || np == qp)
- {
- mp_ptr tp;
- tp = (mp_ptr) TMP_ALLOC (nl * BYTES_PER_MP_LIMB);
- MPN_COPY (tp, np, nl);
- np = tp;
- }
-
- mpn_tdiv_qr (qp, rp, 0L, np, nl, dp, dl);
-
- ql -= qp[ql - 1] == 0;
- MPN_NORMALIZE (rp, dl);
-
- SIZ (quot) = (ns ^ ds) >= 0 ? ql : -ql;
- SIZ (rem) = ns >= 0 ? dl : -dl;
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/tdiv_qr_ui.c b/ghc/rts/gmp/mpz/tdiv_qr_ui.c
deleted file mode 100644
index 10368cd340..0000000000
--- a/ghc/rts/gmp/mpz/tdiv_qr_ui.c
+++ /dev/null
@@ -1,76 +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, 1998 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_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;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- dividend_size = dividend->_mp_size;
- size = ABS (dividend_size);
-
- /* 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 -= size != 0 && quot_ptr[size - 1] == 0;
- quot->_mp_size = dividend_size >= 0 ? size : -size;
-
- return remainder_limb;
-}
diff --git a/ghc/rts/gmp/mpz/tdiv_r.c b/ghc/rts/gmp/mpz/tdiv_r.c
deleted file mode 100644
index 9eb87dfabf..0000000000
--- a/ghc/rts/gmp/mpz/tdiv_r.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* mpz_tdiv_r(rem, dividend, divisor) -- Set REM to DIVIDEND mod DIVISOR.
-
-Copyright (C) 1991, 1993, 1994, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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
-{
- mp_size_t ql;
- mp_size_t ns, ds, nl, dl;
- mp_ptr np, dp, qp, rp;
- TMP_DECL (marker);
-
- ns = SIZ (num);
- ds = SIZ (den);
- nl = ABS (ns);
- dl = ABS (ds);
- ql = nl - dl + 1;
-
- if (dl == 0)
- DIVIDE_BY_ZERO;
-
- MPZ_REALLOC (rem, dl);
-
- if (ql <= 0)
- {
- if (num != rem)
- {
- mp_ptr np, rp;
- np = PTR (num);
- rp = PTR (rem);
- MPN_COPY (rp, np, nl);
- SIZ (rem) = SIZ (num);
- }
- return;
- }
-
- TMP_MARK (marker);
- qp = (mp_ptr) TMP_ALLOC (ql * BYTES_PER_MP_LIMB);
- rp = PTR (rem);
- np = PTR (num);
- dp = PTR (den);
-
- /* FIXME: We should think about how to handle the temporary allocation.
- Perhaps mpn_tdiv_qr should handle it, since it anyway often needs to
- allocate temp space. */
-
- /* Copy denominator to temporary space if it overlaps with the remainder. */
- if (dp == rp)
- {
- mp_ptr tp;
- tp = (mp_ptr) TMP_ALLOC (dl * BYTES_PER_MP_LIMB);
- MPN_COPY (tp, dp, dl);
- dp = tp;
- }
- /* Copy numerator to temporary space if it overlaps with the remainder. */
- if (np == rp)
- {
- mp_ptr tp;
- tp = (mp_ptr) TMP_ALLOC (nl * BYTES_PER_MP_LIMB);
- MPN_COPY (tp, np, nl);
- np = tp;
- }
-
- mpn_tdiv_qr (qp, rp, 0L, np, nl, dp, dl);
-
- MPN_NORMALIZE (rp, dl);
-
- SIZ (rem) = ns >= 0 ? dl : -dl;
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/tdiv_r_2exp.c b/ghc/rts/gmp/mpz/tdiv_r_2exp.c
deleted file mode 100644
index 91de170f5c..0000000000
--- a/ghc/rts/gmp/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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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/ghc/rts/gmp/mpz/tdiv_r_ui.c b/ghc/rts/gmp/mpz/tdiv_r_ui.c
deleted file mode 100644
index 2ea411fda1..0000000000
--- a/ghc/rts/gmp/mpz/tdiv_r_ui.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* mpz_tdiv_r_ui(rem, dividend, divisor_limb)
- -- Set REM to DIVDEND mod DIVISOR_LIMB.
-
-Copyright (C) 1991, 1993, 1994, 1996, 1998 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_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;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- dividend_size = dividend->_mp_size;
- size = ABS (dividend_size);
-
- /* 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;
- }
-
- return remainder_limb;
-}
diff --git a/ghc/rts/gmp/mpz/tdiv_ui.c b/ghc/rts/gmp/mpz/tdiv_ui.c
deleted file mode 100644
index 7a40a6a7f7..0000000000
--- a/ghc/rts/gmp/mpz/tdiv_ui.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* mpz_tdiv_ui(dividend, divisor_limb)
- -- Return DIVDEND mod DIVISOR_LIMB.
-
-Copyright (C) 1991, 1993, 1994, 1996, 1997, 1998 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_tdiv_ui (mpz_srcptr dividend, unsigned long int divisor)
-#else
-mpz_tdiv_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;
-
- if (divisor == 0)
- DIVIDE_BY_ZERO;
-
- dividend_size = dividend->_mp_size;
- size = ABS (dividend_size);
-
- /* 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);
-
- return remainder_limb;
-}
diff --git a/ghc/rts/gmp/mpz/tstbit.c b/ghc/rts/gmp/mpz/tstbit.c
deleted file mode 100644
index b0a8b0b31a..0000000000
--- a/ghc/rts/gmp/mpz/tstbit.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* mpz_tstbit -- test a specified bit. Simulate 2's complement representation.
-
-Copyright (C) 1997 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_tstbit (mpz_srcptr d, unsigned long int bit_index)
-#else
-mpz_tstbit (d, bit_index)
- mpz_srcptr 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)
- return (dp[limb_index] >> (bit_index % BITS_PER_MP_LIMB)) & 1;
- else
- /* Testing a bit outside of a positive number. */
- return 0;
- }
- else
- {
- mp_size_t zero_bound;
-
- dsize = -dsize;
-
- /* Locate the least significant non-zero limb. */
- for (zero_bound = 0; dp[zero_bound] == 0; zero_bound++)
- ;
-
- if (limb_index > zero_bound)
- {
- if (limb_index < dsize)
- return (~dp[limb_index] >> (bit_index % BITS_PER_MP_LIMB)) & 1;
- else
- /* Testing a bit outside of a negative number. */
- return 1;
- }
- else if (limb_index == zero_bound)
- return (-dp[limb_index] >> (bit_index % BITS_PER_MP_LIMB)) & 1;
- else
- return 0;
- }
-}
diff --git a/ghc/rts/gmp/mpz/ui_pow_ui.c b/ghc/rts/gmp/mpz/ui_pow_ui.c
deleted file mode 100644
index edd2dee625..0000000000
--- a/ghc/rts/gmp/mpz/ui_pow_ui.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/* mpz_ui_pow_ui(res, base, exp) -- Set RES to BASE**EXP.
-
-Copyright (C) 1991, 1993, 1994, 1996, 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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"
-
-
-static void mpz_pow2 _PROTO ((mpz_ptr r, mp_limb_t blimb, unsigned long int e, mp_limb_t rl));
-
-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_limb_t blimb = b;
- mp_limb_t rl;
-
- if (e == 0)
- {
- /* For x^0 we return 1, even if x is 0. */
- r->_mp_d[0] = 1;
- r->_mp_size = 1;
- return;
- }
-
- /* Compute b^e as (b^n)^(e div n) * b^(e mod n), where n is chosen such that
- the latter factor is the largest number small enough to fit in a limb. */
-
- rl = 1;
- while (e != 0 && blimb < ((mp_limb_t) 1 << BITS_PER_MP_LIMB/2))
- {
- if ((e & 1) != 0)
- rl = rl * blimb;
- blimb = blimb * blimb;
- e = e >> 1;
- }
-
- /* rl is now b^(e mod n). (I.e., the latter factor above.) */
-
- if (e == 0)
- {
- r->_mp_d[0] = rl;
- r->_mp_size = rl != 0;
- return;
- }
-
- mpz_pow2 (r, blimb, e, rl);
-}
-
-/* Multi-precision part of expontialization code. */
-static void
-#if __STDC__
-mpz_pow2 (mpz_ptr r, mp_limb_t blimb, unsigned long int e, mp_limb_t rl)
-#else
-mpz_pow2 (r, blimb, e, rl)
- mpz_ptr r;
- mp_limb_t blimb;
- unsigned long int e;
- mp_limb_t rl;
-#endif
-{
- mp_ptr rp, tp;
- mp_size_t ralloc, rsize;
- int cnt, i;
- TMP_DECL (marker);
-
- TMP_MARK (marker);
-
- /* Over-estimate temporary space requirements somewhat. */
- count_leading_zeros (cnt, blimb);
- ralloc = e - cnt * e / BITS_PER_MP_LIMB + 1;
-
- /* The two areas are used to alternatingly hold the input and receive the
- product for mpn_mul. (Needed since mpn_mul_n requires that the product
- is distinct from either input operand.) */
- rp = (mp_ptr) TMP_ALLOC (ralloc * BYTES_PER_MP_LIMB);
- tp = (mp_ptr) TMP_ALLOC (ralloc * 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;
- MP_PTR_SWAP (rp, tp);
-
- if ((e & ((mp_limb_t) 1 << i)) != 0)
- {
- mp_limb_t cy;
- cy = mpn_mul_1 (rp, rp, rsize, blimb);
- rp[rsize] = cy;
- rsize += cy != 0;
- }
- }
-
- /* We will need rsize or rsize+1 limbs for the result. */
- if (r->_mp_alloc <= rsize)
- _mpz_realloc (r, rsize + 1);
-
- /* Multiply the two factors (in rp,rsize and rl) and put the final result
- in place. */
- {
- mp_limb_t cy;
- cy = mpn_mul_1 (r->_mp_d, rp, rsize, rl);
- (r->_mp_d)[rsize] = cy;
- rsize += cy != 0;
- }
-
- r->_mp_size = rsize;
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/urandomb.c b/ghc/rts/gmp/mpz/urandomb.c
deleted file mode 100644
index caca086e05..0000000000
--- a/ghc/rts/gmp/mpz/urandomb.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* mpz_urandomb (rop, state, n) -- Generate a uniform pseudorandom
- integer in the range 0 to 2^N - 1, inclusive, using STATE as the
- random state previously initialized by a call to gmp_randinit().
-
-Copyright (C) 1999, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_urandomb (mpz_t rop, gmp_randstate_t rstate, unsigned long int nbits)
-#else
-mpz_urandomb (rop, rstate, nbits)
- mpz_t rop;
- gmp_randstate_t rstate;
- unsigned long int nbits;
-#endif
-{
- mp_ptr rp;
- mp_size_t size;
-
- size = (nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB;
- if (ALLOC (rop) < size)
- _mpz_realloc (rop, size);
-
- rp = PTR (rop);
-
- _gmp_rand (rp, rstate, nbits);
- MPN_NORMALIZE (rp, size);
- SIZ (rop) = size;
-}
diff --git a/ghc/rts/gmp/mpz/urandomm.c b/ghc/rts/gmp/mpz/urandomm.c
deleted file mode 100644
index 69e1bae78a..0000000000
--- a/ghc/rts/gmp/mpz/urandomm.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* mpz_urandomm (rop, state, n) -- Generate a uniform pseudorandom
- integer in the range 0 to N-1, using STATE as the random state
- previously initialized by a call to gmp_randinit().
-
-Copyright (C) 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_urandomm (mpz_t rop, gmp_randstate_t rstate, mpz_t n)
-#else
-mpz_urandomm (rop, rstate, n)
- mpz_t rop;
- gmp_randstate_t rstate;
- mpz_t n;
-#endif
-{
- mpz_t t, p, m;
- mp_ptr tp;
- mp_size_t nbits, size;
- int count;
- TMP_DECL (marker);
-
- TMP_MARK (marker);
-
- /* FIXME: Should check for n == 0 and report error */
-
- size = SIZ (n);
- count_leading_zeros (count, PTR (n)[size - 1]);
- nbits = size * BITS_PER_MP_LIMB - count;
-
- /* Allocate enough for any mpz function called since a realloc of
- these will fail. */
- MPZ_TMP_INIT (t, size);
- MPZ_TMP_INIT (m, size + 1);
- MPZ_TMP_INIT (p, size + 1);
-
- /* Let m = highest possible random number plus 1. */
- mpz_set_ui (m, 0);
- mpz_setbit (m, nbits);
-
- /* Let p = floor(m / n) * n. */
- mpz_fdiv_q (p, m, n);
- mpz_mul (p, p, n);
-
- tp = PTR (t);
- do
- {
- _gmp_rand (tp, rstate, nbits);
- MPN_NORMALIZE (tp, size); /* FIXME: Really necessary? */
- SIZ (t) = size;
- }
- while (mpz_cmp (t, p) >= 0);
-
- mpz_mod (rop, t, n);
-
- TMP_FREE (marker);
-}
diff --git a/ghc/rts/gmp/mpz/xor.c b/ghc/rts/gmp/mpz/xor.c
deleted file mode 100644
index 69898d1791..0000000000
--- a/ghc/rts/gmp/mpz/xor.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/* mpz_xor -- Logical xor.
-
-Copyright (C) 1991, 1993, 1994, 1996, 1997, 2000 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 Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser 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_xor (mpz_ptr res, mpz_srcptr op1, mpz_srcptr op2)
-#else
-mpz_xor (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, res_alloc;
- 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;
- }
-
- MPN_NORMALIZE (res_ptr, res_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, the result will be positive.
- (-OP1) ^ (-OP2) =
- = ~(OP1 - 1) ^ ~(OP2 - 1) =
- = (OP1 - 1) ^ (OP2 - 1) */
-
- op1_size = -op1_size;
- op2_size = -op2_size;
-
- /* Possible optimization: Decrease mpn_sub precision,
- as we won't use the entire res of both. */
- 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;
-
- res_alloc = MAX (op1_size, op2_size);
- 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;
- }
-
- MPN_NORMALIZE (res_ptr, 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_SWAP (op1, op2);
- MPN_SRCPTR_SWAP (op1_ptr,op1_size, op2_ptr,op2_size);
- }
- }
-
- {
- mp_ptr opx;
- mp_limb_t cy;
- 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;
-
- 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;
-
- res_alloc = MAX (op1_size, op2_size) + 1;
- 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)
- {
- 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++;
- }
-
- MPN_NORMALIZE (res_ptr, res_size);
- res->_mp_size = -res_size;
- TMP_FREE (marker);
- }
-}